//===== eAthena Script ======================================= //= Guild Manager //===== By =================================================== //= lllchrislll //===== Version ============================================== //= 1.0 - Script Made // - Added many features (Didn't write that down...) // - Added the possiblity to use the donation via an Shop // Items can only be set by the GM's, see 'OnInit' // - Fixxed some bugs with the Reward Function // Reward can only be set by the GM's, see 'OnInit' //= 1.1 - Changed Reward Giving via Quest, also fixxed some bugs reported by darkis // - Rewritten the Ranking Check, well it is using more memory now.... (Sorry for that) // - Added an Random EXP Boost depending how much "rank" points // you possess, also added an menu option for it, see 'G_EXP'. // - Also rewritten the explanation how to add this system to WoE:SE //= 1.2 - Removed the Quest Area from preventing exploits. //====== ToDo List =========================================== //= Guild Shop: Looking for way to prevent the usage of your own Zeny instead // of the donation for checking if you want to buy something // Well, I found a way, but would cause a huge exploit..... //= Ranking Decrease: - How about when you lost a castle? // Previous WoE: 3, This WoE: 2 > -1 Rank for Guild only or Member too? ;I // //===== Compatible/Created/Tested With ====================================== //= eAthena SQL 14434 Trunk //===== Description ========================================== //= This Script handles a Ranking System in the Guild itself, //= the ranking itself can increase and decrease. //= Increasing the Ranking: // - Donating money to the guild, which can be used by the // Guild Master only // - Emperium Break during WoE // //= Decreasing of the Ranking: // - Killing the Guild Members in PvP Rooms // - Being offline for 1 week without telling the // guild master, to update the "Holiday List". // //= Also you can recieve other rewards from breaking the Emp, // which is done by collecting points. //===== MySQL Entries ======================================= /* //= Member Table: DROP TABLE IF EXISTS `guild_rank_mem`; CREATE TABLE `guild_rank_mem` ( `char_id` int(10) unsigned NOT NULL, `guild_id` smallint(5) unsigned NOT NULL, `rank` smallint(5) unsigned DEFAULT '0', `woe` smallint(5) unsigned DEFAULT '0', `donate` int(11) unsigned DEFAULT '0', `donate_am` int(11) unsigned DEFAULT '0', `holiday` smallint(5) unsigned DEFAULT '0', PRIMARY KEY (`char_id`) ) ENGINE=MyISAM; //= Guild Table: DROP TABLE IF EXISTS `guild_rank_guild`; CREATE TABLE `guild_rank_guild` ( `guild_id` smallint(5) unsigned NOT NULL, `type` smallint(5) unsigned DEFAULT '1', `rank` smallint(5) unsigned DEFAULT '0', `woe` smallint(5) unsigned DEFAULT '0', `donate` int(11) unsigned DEFAULT '0', `donate_min` int(11) unsigned DEFAULT '0', `donate_max` int(11) unsigned DEFAULT '0', PRIMARY KEY (`guild_id`) ) ENGINE=MyISAM; */ //===== Comments ============================================= //= You need to edit the following line in the // npc/guild/agit_template.txt //========== Find this ==========// /* // Adjust Economy Invest Level for Castle set .@Economy,GetCastleData(strnpcinfo(2),2) - 5; if (.@Economy < 0) set .@Economy, 0; //========== Add above ==========// // Callfunc for Guild Rank System callfunc "GLD_RANK_WOE"; //= WoE:SE : Open these file under npc/guild2/ arug_cas02.txt arug_cas04.txt schg_cas01.txt schg_cas03.txt schg_cas05.txt arug_cas01.txt arug_cas03.txt arug_cas05.txt schg_cas02.txt schg_cas04.txt //========== Find this, which only shows up once every file. =========// mapannounce "arug_cas01","The emperium has been shattered!",bc_map,"0x00FF00",FW_NORMAL,20,0,40; // ------- or -------- // announce "The emperium has been shattered!",bc_map,"0x00FF00",FW_NORMAL,20,0,40; //========== Add after ==========// // Callfunc for Guild Rank System callfunc "GLD_RANK_WOE"; */ //============================================================ - script GuildRanks#Events -1,{ end; OnInit: query_sql "SHOW TABLES LIKE 'guild_rank_guild'",.@ch_gld_tbl$; query_sql "SHOW TABLES LIKE 'guild_rank_mem'",.@ch_mem_tbl$; if($gld_ranker_tbl == 1) { // If the tables exists if(.@ch_gld_tbl$[0] != "" && .@ch_mem_tbl$[0] != "") { end; // If one of the tables doesn't exists } else if(.@ch_gld_tbl[0] == "" || .@ch_mem_tbl[0] == "") { query_sql "DROP TABLE IF EXISTS `guild_rank_guild`"; query_sql "DROP TABLE IF EXISTS `guild_rank_mem`"; set $gld_ranker_tbl,0; } } // Checking if the System is on or not if(!$gld_ranker_tbl) disablenpc "GuildRanks#Events"; end; setarray .expboost[0],5,10,15,20,25; // Exp Boost in % setarray .rankreq[0],15,30,60,120,240; // Rank Points required // Example: To gain 15% EXP Bonus, you need 60 Rank Points. set .boostuse,1; // Which day it will be activated on: 0-6 = Sunday - Saturday, 7 = Random switch(.boostuse) { case 0: set .expdayn$,"Sunday"; break; case 1: set .expdayn$,"Monday"; break; case 2: set .expdayn$,"Tuesday"; break; case 3: set .expdayn$,"Wednesday"; break; case 4: set .expdayn$,"Thursday"; break; case 5: set .expdayn$,"Friday"; break; case 6: set .expdayn$,"Saturday"; break; default: set .expdayn$,"a random day."; break; } set .GldEXPBoost,0; if(gettime(4) == ( (.boostuse != 7) ? .boostuse : rand(7) ) ) { set .GldEXPBoost,1; announce "Guild Rank System: EXP Bonus has been activated.",0,0x00FF00; } end; OnNPCKillEvent: if(!getcharid(2)) end; // If the player is not in a guild. // =========== EXP Boost ============== // if(.GldEXPBoost == 1) { if(EXPLastRank < query_sql("SELECT `rank` FROM `guild_rank_mem` WHERE `guild_id` = '"+getcharid(2)+"' AND `char_id` = '"+getcharid(0)+"'",@rank) ) { set EXPLastRank,@rank; for( set @b,0; @b < getarraysize(.rankreq); set @b,@b + 1) { if(EXPLastRank >= .rankreq[@b]) { if(.rankreq[@b+1] != 0) { set EXPBoost,.expboost[@b]; if(EXPLastRank < .rankreq[@b+1] ) break; } else { set EXPBoost,.expboost[@b]; break; } } } } set @bexp,(getmonsterinfo(killedrid,3)*EXPBoost); if(getgmlevel()) dispbottom "Debug: Monster: "+getmonsterinfo(killedrid,0)+" with "+@bexp+" Base EXP, "+@jexp+" Job EXP"; set @jexp,(getmonsterinfo(killedrid,4)*EXPBoost); set BaseEXP,BaseEXP + @bexp; set JobEXP,JobEXP + @jexp; dispbottom "EXP Bonus: "+EXPBoost+"%. You have recieved additionally "+@bexp+" Base EXP and "+@jexp+" Job EXP."; } } end; OnPCKillEvent: if(!getcharid(2)) end; if(getmapflag(strcharinfo(3),mf_pvp) == 0) end; query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+getcharid(2)+"'",@gld_mem$; set @Killer$,rid2name(killerrid); for( set @gpvp,0; @gm < getarraysize(@gld_mem$); set @gpvp,@gpvp + 1) { if(@Killer$ == @gld_mem$[@gpvp]) { query_sql "UPDATE `guild_rank_mem` SET `rank` = `rank` - 1 WHERE `guild_id` = '"+getcharid(2)+"' AND `char_id` = '"+getcharid(0,@Killer$)+"'"; break; } } donpcevent "::OnReset"; end; OnPCLogoutEvent: if(!getcharid(2)) end; if(query_sql("SELECT `holiday` FROM `guild_rank_mem` WHERE `guild_id` = '"+getcharid(2)+"' AND `char_id` = '"+getcharid(0)+"'",@holiday) == 0) { set gld_off_log,gettimetick(2) + 691200; // 8 Days set gld_last,getcharid(2); } end; OnPCLoginEvent: if($gld_ranker_tbl) announce "The Guild Ranking System is online.",4,0x00FF00; if(.GldEXPBoost == 1) announce "Guild Rank System: EXP Bonus has been activated.",4,0x00FF00;; // Don't enable these lines, NEVER!! Need a solution for this problem // if(BkpZeny != 0) { set Zeny,BkpZeny; set BkpZeny,0; } // Guild Shop Exploit Preventing if(!getcharid(2)) end; set EXPBoost,0; if(gld_last != getcharid(2)) set gld_off_log,0; end; query_sql "SELECT `holiday` FROM `guild_rank_mem` WHERE `guild_id` = '"+getcharid(2)+"' AND `char_id` = '"+getcharid(0)+"'",@holiday; if(@holiday == 0 && (gettimetick(2) > gld_off_log)) { query_sql "UPDATE `guild_rank_mem` SET `rank` = `rank` - 1 WHERE `guild_id` = '"+getcharid(2)+"' AND `char_id` = '"+getcharid(0)+"'"; } else { set gld_off_log,0; } end; // ========================= Auto Guild Checking =========================// // This part checks the Registered Guilds and their members. // If the guild doesn't exists anymore or an Member has left a guild, // they will be deleted from the ranking and if the new Guild is registered // it will insert them into the new guild. // ========================================================================== OnClock0000: set .GldEXPBoost,0; if(gettime(4) == ( (.boostuse != 7) ? .boostuse : rand(7) ) ) { set .GldEXPBoost,1; announce "Guild Rank System: EXP Bonus has been activated.",0,0x00FF00;; } OnRankCheck: // Which Guild is registered and still exists query_sql "SELECT `guild_id` FROM `guild_rank_guild`",.@gld_ids; for( set .@w,0; .@w < getarraysize(.@gld_ids); set .@w,.@w + 1) { if(query_sql("SELECT `guild_id` FROM `guild` WHERE `guild_id` = '"+.@gld_ids[.@w]+"'",.@c_gld) != 0) { // Getting the Guild Member ID's from the Guild_Member Table query_sql "SELECT `char_id` FROM `guild_member` WHERE `guild_id` = '"+.@gld_ids[.@w]+"'",.@gld_mem; for ( set .@m,0; .@m < getarraysize(.@gld_mem); set .@m,.@m+1) { // Checking if the Member is in the ranking if(query_sql("SELECT `char_id` FROM `guild_rank_mem` WHERE `guild_id` = '"+.@gld_ids[.@w]+"' AND `char_id` = '"+.@gld_mem[.@m]+"'",.@c_chid) == 0) { // Checking in which Guild the Member is if(query_sql("SELECT `guild_id` FROM `guild_member` WHERE `char_id` = '"+.@gld_mem[.@m]+"'",.@c_gid) != .@gld_ids[.@w]) { // If the Member doesn't exists anymore in this guild query_sql "DELETE FROM `guild_rank_mem` WHERE `char_id` = '"+.@gld_mem[.@m]+"'"; } // Member is not in the ranking query_sql "INSERT INTO `guild_rank_mem` ( `guild_id` , `char_id` ) VALUES ( '"+.@gld_ids[.@w]+"' , '"+.@gld_mem[.@m]+"' )"; } } // If the Guild doesn't exist anymore delete it from the ranking. } else { query_sql "DELETE FROM `guild_rank_guild` WHERE `guild_id` = '"+.@gld_ids[.@w]+"'"; query_sql "DELETE FROM `guild_rank_mem` WHERE `guild_id` = '"+.@gld_ids[.@w]+"'"; callsub OnGuildBreak; } } donpcevent "::OnReset"; end; OnGuildBreak: announce "The guild "+getguildname(.@gld_ids[.@w])+" has been disbanded.",0,0xFF0000; OnReset: deletearray .@gld_ids[0],getarraysize(.@gld_ids); deletearray .@gld_mem[0],getarraysize(.@gld_mem); deletearray .@c_chid[0],getarraysize(.@c_chid); deletearray .@c_gid[0],getarraysize(.@c_gid); end; } //OnAgitBreak: function script GLD_RANK_WOE { query_sql "SELECT `type` FROM `guild_rank_guild` WHERE `guild_id` = '"+getcharid(2)+"'",@type; if(@type == 1) { query_sql "UPDATE `guild_rank_mem` SET `rank` = `rank` + 1 , `woe` = `woe` + 1 WHERE `guild_id` = '"+getcharid(2)+"' AND `char_id` = '"+getcharid(0)+"'"; query_sql "UPDATE `guild_rank_guild` SET `rank` = `rank` + 1 , `woe` = `woe` + 1 WHERE `guild_id` = '"+getcharid(2)+"'"; announce "You have gained 1 Point for breaking an Emperium while WoE.",4,0xFF0000; } //end; return; } // ===================== Guild Shop Pre-Setting ==================== // - shop GUILD_SHOP -1,512:-1 // ===================== Guild Rank Manager ====================== // prontera,152,193,4 script Guild Ranker#gldrank 110,{ callsub G_Array; set .@n$,"[Guild Ranker]"; set .@last_id,25077; // Highest Item ID set @guild_id,getcharid(2); OnStart: mes .@n$; // **********************************************************************// // // GM Menu Selection \\ // // **********************************************************************// if(getgmlevel() >= 80) { mes "Player or GM Menu?"; menu "Player Menu",-,"GM Menu",G_GM; next; mes .@n$; } // **********************************************************************// // // No MySQL Entries made \\ // // **********************************************************************// if(!$gld_ranker_tbl) { mes "I'm sorry, but"; mes "the System hasn't been"; mes "enabled yet."; close; } // **********************************************************************// // // Not in a Guild \\ // // **********************************************************************// if(!@guild_id) { mes "I'm sorry, but you"; mes "are not in a guild."; close; } // **********************************************************************// // // Main Greeting \\ // // **********************************************************************// mes "Hello, "+strcharinfo(0)+"!"; if(query_sql("SELECT `guild_id` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@gld_check) == 0) { mes "As I can see your Guild has not been registered yet,"; if(strcharinfo(0) == getguildmaster(@guild_id)) { mes "wanna register it now?"; next; if(select("- Yes register:- No, thanks") == 2) { goto G_Quit; } else { goto G_Register; } } else { mes "if you want to join,"; mes "please inform your Guild Master about it."; close; } } mes "How can I help ya?"; next; if(strcharinfo(0) == getguildmaster(@guild_id)) { if(select("- Guild Master Menu:- Member Menu") == 1) { menu "- Guild Summary",G_Summary,"- EXP Boost Info",G_EXP,"- Guild Shop",G_Shop,"- Donation Limit",G_Donate_L,"- Holiday List",G_Holiday,"- Nothing",G_Quit; } } menu "- Guild Summary",G_Summary,"- EXP Boost Info",G_EXP,"- See Ranking",G_Rank,"- Get Reward",G_Reward,"- Donation",G_Donate,"- Nothing",G_Quit; // **********************************************************************// // // Guild Summary \\ // // **********************************************************************// G_Summary: query_sql "SELECT `type` , `donate` , `donate_min` , `donate_max` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@type,@donate,@donate_min,@donate_max; mes .@n$; mes "Guild Type: "+ ( (@type == 2) ? "Non-WoE" : "WoE"); mes " "; mes "Donation Status:"; mes "Currently we have "+@donate+" Zeny on our Account."; mes "Donation Limit:"; mes "Minium: " + @donate_min + " Zeny."; // Donate Minimum Amount mes "Maximum: " + @donate_max + " Zeny."; // Donate Maximum Amount close; // **********************************************************************// // // EXP Boost Info \\ // // **********************************************************************// G_EXP: mes .@n$; mes "The EXP Boost is global to every guild."; mes "The boost depends on your rank and the percent set by the GM Team."; mes "And will be activated on "+getvariableofnpc(.expdayn$,"GuildRanks#Events"); mes "Status: " + ( (getvariableofnpc(.GldEXPBoost,"GuildRanks#Events") == 1) ? "Active" : "Not Active."); mes " "; mes "Current Rank Requirements and EXP Boost."; for( set @e,0; @e < getarraysize(getvariableofnpc(.expboost,"GuildRanks#Events")); set @e,@e + 1) { mes getvariableofnpc(.rankreq[@e],"GuildRanks#Events")+" Points = "+getvariableofnpc(.expboost[@e],"GuildRanks#Events")+"% EXP Boost."; } close; // **********************************************************************// // // Ranking \\ // // **********************************************************************// G_Rank: mes .@n$; mes "What kind of ranking"; mes "do you want to see?"; next; switch(select("- Donation:- WoE:- All")) { // **********************************************************************// // // Total Donation \\ // // **********************************************************************// case 1: mes .@n$; query_sql "SELECT `char_id` , `donate` , `donate_am` FROM `guild_rank_mem` WHERE `guild_id` = '"+@guild_id+"' ORDER BY `donate_am` DESC",@char_id,@donate,@donate_am; query_sql "SELECT `donate` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@donate_total; mes "Total Donation:"; mes @donate_total; mes " "; mes "Name - Quantity - Donated Amount Total"; for( set @gm,0; @gm < getarraysize(@char_id); set @gm,@gm + 1) { query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[@gm]+"'",@c_name$; mes @c_name$+" - "+@donate[@gm]+" - "+@donate_am[@gm]; } close; // **********************************************************************// // // Emperium Breaks \\ // // **********************************************************************// case 2: mes .@n$; query_sql "SELECT `char_id` , `woe` FROM `guild_rank_mem` WHERE `guild_id` = '"+@guild_id+"' ORDER BY `woe` DESC",@char_id,@woe; query_sql "SELECT `woe` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@woe2; mes "Total Emp Breaks:"; mes @woe2; mes " "; mes "Name - Break Quantity"; for( set @gm,0; @gm < getarraysize(@char_id); set @gm,@gm + 1) { query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[@gm]+"'",@c_name$; mes @c_name$+" - "+@woe[@gm]; } close; // **********************************************************************// // // Member Ranking \\ // // **********************************************************************// case 3: mes .@n$; query_sql "SELECT `char_id` , `rank` FROM `guild_rank_mem` WHERE `guild_id` = '"+@guild_id+"' ORDER BY `rank` DESC",@char_id,@rank; mes "Name - Ranking"; for( set @gm,0; @gm < getarraysize(@char_id); set @gm,@gm + 1) { query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[@gm]+"'",@c_name$; mes @c_name$+" - "+@rank[@gm]; } close; } // **********************************************************************// // // Recieving Reward \\ // // **********************************************************************// G_Reward: query_sql "SELECT `woe` FROM `guild_rank_mem` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+getcharid(0)+"'",@woe; mes .@n$; mes "Your current balance is:"; mes "WoE Points: "+@woe; next; mes .@n$; mes "Reward - Points needed"; mes .rew_woe_need[0] + ". " + .rew_woe_am[0] + "x " + ( (.rew_woe[0] == 1) ? " Zeny": getitemname(.rew_woe[0]) + " (ID:" + .rew_woe[0] + ")" ) + " - "+.rew_woe_need[0]; set @r_menu$,"- "+.rew_woe_need[0] + " "+( (.rew_woe_need[0] > 1) ? "Points": "Point"); for( set @r,1; @r < getarraysize(.rew_woe); set @r,@r+1) { mes .rew_woe_am[@r] + "x " + ( (.rew_woe[@r] == 1) ? " Zeny": getitemname(.rew_woe[@r]) + " (ID: " + .rew_woe[@r] + ")" ) + " - "+.rew_woe_need[@r]; set @r_menu$,@r_menu$ + ":- "+.rew_woe_need[@r] + " "+( (.rew_woe_need[@r] > 1) ? "Points": "Point"); } mes " "; mes "Please choose the reward you want."; next; switch(prompt(@r_menu$)) { default: set @m,@menu - 1; break; case 255: goto G_Quit; break; } mes .@n$; mes "You have chosen:"; mes .rew_woe_am[@m] + "x " + ( (.rew_woe[@m] == 1) ? " Zeny": getitemname(.rew_woe[@m]) + " (ID: " + .rew_woe[@m] + ")" ) + " - "+.rew_woe_need[@m]; mes "Is that correct?"; next; if(select("- Yes:- No") == 2) { goto G_Quit; } else { mes .@n$; if(.rew_woe_need[@m] > @woe) { mes "I'm sorry, but it seems you don't have enough points for this reward."; close; } if(.rew_woe[@m] == 1) { mes "You have recieved "+.@rew_woe_am[@m]+" Zeny."; set Zeny,Zeny + .rew_woe_am[@m]; } else { mes "You have recieved "+.rew_woe_am[@m] + "x "+getitemname(.rew_woe[@m]); getitem .rew_woe[@m],.rew_woe_am[@m]; } query_sql "UPDATE `guild_rank_mem` SET `woe` = `woe` - "+.rew_woe_need[@m]+" WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+getcharid(0)+"'"; close; } // **********************************************************************// // // Making Donation \\ // // **********************************************************************// G_Donate: query_sql "SELECT `donate` , `donate_min` , `donate_max` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@donate,@donate_min,@donate_max; mes .@n$; if(@donate_min < 1) { mes "Your Guild Master hasn't set the"; mes "Donation Limit yet."; close; } mes "Total Donation: "+@donate; mes "The account can hold up to "+.don_limit+" Zeny."; if(@donate < .don_limit) { mes (.don_limit - @donate) +" can be donated until the limit will be reached."; } else if(@donate >= .don_limit) { mes "Limit reached, the account is full."; mes "Please wait until your Guild Master used some donations up."; close; } mes "You can donate once per week."; mes "The minimum amount is " + @donate_min + " Zeny"; // Donate Minimum Amount mes "and the maximum "+ @donate_max + " Zeny."; // Donate Maximum Amount next; if(@guild_id == last_gld && gld_don_delay > gettimetick(2)) { mes .@n$; mes "I'm sorry, but the week hasn't passed yet."; close; } else if(@guild_id != last_gld) { set gld_don_delay,0; } if(input(@do_don,@donate_min,@donate_max) != 0) { mes .@n$; mes "You have put an invalid amount."; close; } if(Zeny < @do_don) { mes .@n$; mes "You don't have the needed money."; close; } if( (@donate + @do_don) >= .don_limit) { mes "The donation you are trying to make is too much for the account to handle."; mes "Please wait until your Guild Master uses some donations."; close; } query_sql "UPDATE `guild_rank_mem` SET `donate` = donate + 1 , `donate_am` = donate_am + "+@do_don+" , `rank` = rank + 1 WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+getcharid(0)+"'"; query_sql "UPDATE `guild_rank_guild` SET `donate` = donate + "+@do_don+" WHERE `guild_id` = '"+@guild_id+"'"; set Zeny,Zeny - @do_don; set gld_don_delay,gettimetick(2) + 604800; // 1 Week Delay set last_gld,@guild_id; mes .@n$; mes "Thank you for your"; mes "donation."; close; // **********************************************************************// // // Adding Donation Limit \\ // // **********************************************************************// G_Donate_L: mes .@n$; mes "Type the minimum amount"; mes "Note: Highest is 10,000,000"; next; input @don_min; if(@don_min < 1 || @don_min > 10000000) close; mes .@n$; mes "Now the maximum amount:"; mes "Note: Highest is 10,000,000 too"; input @don_max; if(@don_max < @don_min || @don_max > 10000000) close; next; mes .@n$; mes "Result:"; mes "Minium: "+@don_min; mes "Maximum: "+@don_max; mes " "; mes "Correct?"; if(select("- Yes:- No") == 1) { query_sql "UPDATE `guild_rank_guild` SET `donate_min` = '"+@don_min+"' , `donate_max` = '"+@don_max+"' WHERE `guild_id` = '"+@guild_id+"'"; } close; // **********************************************************************// // // Guild Shop - using Donations \\ // // **********************************************************************// G_Shop: query_sql "SELECT `donate` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@don_total; mes .@n$; mes "Hello Master,"; mes "how can I help you?"; mes "You guild members have donated "+@don_total+" Zeny so far."; next; menu "Open Shop",-,"Nothing",G_Quit; mes .@n$; mes "I will now open the shop for you."; mes "Note: The Skill Discount won't work here."; mes "The difference will be shown, but I will use the actual costs."; mes "Also it checks the Zeny in your inventory, so if you get enough"; mes "donations, but not enough Zeny with you, it could result in an error."; close2; // Don't enable these lines, NEVER!! Need a solution for this problem // set BkpZeny,Zeny; // A way to surprass the bug by having not enough Zeny with you even if he uses the donations? // if(@don_total > .don_limit) set Zeny,.don_limit; else set Zeny,@don_total; callshop "GUILD_SHOP",1; npcshopattach "GUILD_SHOP"; end; OnBuyItem: for( set @bid,0; @bid < getarraysize(@bought_nameid); set @bid,@bid + 1) { for( set @sid,0; @sid < getarraysize(.gshop_id); set @sid,@sid + 1) { if(.gshop_id[@sid] == @bought_nameid[@bid]) { set @cost_item,(.gshop_cost[@sid]*@bought_quantity[@bid]); set @cost_total,(@cost_total+@cost_item); break; } } } query_sql "SELECT `donate` FROM `guild_rank_guild` WHERE `guild_id` = '"+@guild_id+"'",@don_total; if(@cost_total > .don_limit) { dispbottom "I'm sorry, but you can't buy this much at once."; dispbottom "Maximum is " + .don_limit + " Zeny."; } else { if(@cost_total > @don_total) { dispbottom "You don't have enough Zeny."; } else { for( set @buy,0; @buy < getarraysize(@bought_nameid); set @buy,@buy + 1) { getitem @bought_nameid[@buy],@bought_quantity[@buy]; } dispbottom "Thank you for shopping."; dispbottom "You have used "+@cost_total+" Zeny of the Donations."; query_sql "UPDATE `guild_rank_guild` SET `donate` = `donate` - '"+@cost_total+"' WHERE `guild_id` = '"+@guild_id+"'"; } } set @cost_total,0; deletearray @bought_nameid[0],128; deletearray @bought_quantity[0],128; // Don't enable this line, NEVER!! Need a solution for this problem // if(BkpZeny != 0) { set Zeny,BkpZeny; set BkpZeny,0; } end; // **********************************************************************// // // Holiday List \\ // // **********************************************************************// G_Holiday: mes .@n$; mes "What do you like to do?"; next; switch(select("- Add:- Remove:- Show List:- Nothing")) { // **********************************************************************// // // Adding Member on the Holiday List \\ // // **********************************************************************// case 1: mes .@n$; mes "Type the member name you want to add:"; next; input @hl_name$; query_sql "SELECT `char_id` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `name` = '"+escape_sql(@hl_name$)+"'",@char_id; if(!@char_id) { mes .@n$; mes "The name you have put is wrong."; close; } query_sql "UPDATE `guild_rank_mem` SET `holiday` = '1' WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id+"'"; mes .@n$; mes "The member "+@hl_name$+" has been added to the \"Holiday List\"."; close; // **********************************************************************// // // Removing Member from the Holiday List \\ // // **********************************************************************// case 2: mes .@n$; mes "Select the member from the list"; mes "which you want to remove."; next; query_sql "SELECT `char_id` FROM `guild_rank_mem` WHERE `guild_id` = '"+@guild_id+"' AND `holiday` = '1'",@char_id; if(!@char_id) { mes .@n$; mes "There is no member in the list."; close; } query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[0]+"'",@char_n$; set @menu$,"- "+@char_n$[0]; for( set @gm_s,1; @gm_s < getarraysize(@char_id); set @gm_s,@gm_s + 1) { query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[@gm_s]+"'",@char_n$; set @menu$,@menu$ + ":- "+@char_n$[@gm_s]; } switch(prompt(@menu$)) { default: set @h,@menu - 1; mes .@n$; mes "You have chosen "+ @char_n$[@h]; mes " "; mes "Wanna remove him/her?"; if(select("- Yes:- No") == 2) close; next; query_sql "SELECT `char_id` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `name` = '"+escape_sql(@char_n$[@h])+"'",@char_id_n; query_sql "UPDATE `guild_rank_mem` SET `holiday` = '0' WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id_n+"'"; mes .@n$; mes "The member "+@char_n$[@h]+" has been removed from the List."; close; case 255: goto G_Quit; break; } // **********************************************************************// // // Showing Holiday List \\ // // **********************************************************************// case 3: mes .@n$; mes "These members has been"; mes "put on the list:"; next; query_sql "SELECT `char_id` FROM `guild_rank_mem` WHERE `guild_id` = '"+@guild_id+"' AND `holiday` = '1'",@char_id; if(!@char_id) { mes .@n$; mes "There is no member"; mes "in the list."; close; } query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[0]+"'",@char_n$; mes @char_n$[0]; for( set @gm_s,1; @gm_s < getarraysize(@char_id); set @gm_s,@gm_s + 1) { query_sql "SELECT `name` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' AND `char_id` = '"+@char_id[@gm_s]+"'",@char_n$; mes @char_n$[@gm_s]; } close; case 4: goto G_Quit; break; } // **********************************************************************// // // Guild Registering \\ // // **********************************************************************// G_Register: mes .@n$; mes "You want to register your Guild for the our Ranking System?"; mes "^FF0000Note: This ranking will be permanent until you are disbanding the guild.^000000"; if(select("- Yes, please:- No, thanks") - 1) { close; } else { next; mes .@n$; mes "What type is your Guild?"; set @type,select("- WoE:- Non-WoE"); query_sql "INSERT INTO `guild_rank_guild` ( `guild_id` , `type` , `rank` , `woe` , `donate` , `donate_min` , `donate_max` ) VALUES ( '"+@guild_id+"' , '"+@type+"' , '0' , '0' , '0' , '0' , '0' )"; query_sql "SELECT `char_id` FROM `guild_member` WHERE `guild_id` = '"+@guild_id+"' ORDER BY `char_id` ASC",@char_id; for( set @g,0; @g < getarraysize(@char_id); set @g,@g+1) { query_sql "INSERT INTO `guild_rank_mem` ( `guild_id` , `char_id` , `holiday` ) VALUES ( '"+@guild_id+"' , '"+@char_id[@g]+"' , '0' )"; } close; } // **********************************************************************// // // GM Menu \\ // // **********************************************************************// G_GM: next; mes .@n$; mes "Hello "+strcharinfo(0)+","; if($gld_ranker_tbl) { mes "how can I help you?"; next; switch(select("- Guild Ranks:- Re-Check Rank List:- Delete Tables")) { case 1: query_sql "SELECT `guild_id` , `rank` , `woe` , FROM `guild_rank_guild` WHERE `rank` > '0' ORDER BY `rank` DESC",.@r_gld,.@r_rank,.@r_woe; mes .@n$; mes "Only Guilds with Ranking Points will be displayed!"; if(.@r_gld[0] == 0) { mes "There is no guild to display."; close; } mes "The format of the list"; mes "will be like this:"; mes " "; mes " Guild Name: Points"; mes "===== Emp Breaks: ==="; mes "x"; mes "*******************"; for( set @r,0; @r < getarraysize(.@r_gld); set @r,@r + 1) { next; mes getguildname(.@r_gld[@r])+": "+.@r_rank; mes "===== Emp Breaks: ==="; mes .@r_woe[@r]; mes "*******************"; } close; case 2: mes .@n$; mes "I will now re-check the Ranking Status for all guilds."; close2; doevent "GuildRanks#Events::OnRankCheck"; end; case 3: mes .@n$; mes "Are you sure to delete everything?"; next; if(select("- Delete:- Nevermind") - 1) { close; } else { close2; query_sql "DROP TABLE IF EXISTS `guild_rank_guild`"; query_sql "DROP TABLE IF EXISTS `guild_rank_mem`"; disablenpc "GuildRanks#Events"; announce "The Guild Ranking System is offline.",0,0xFF0000; set $gld_ranker_tbl,0; end; } } } else { mes "I'm sorry, but the ranking has not been activated yet,"; mes "but it's also necessary to install the required entries in"; mes "your database."; next; mes .@n$; mes "First I will check if you installed it through the entries at the top of the script file."; mes "Then I will activate it."; mes "If that is not the case, I will install and activate the system for you if you want."; next; query_sql "SHOW TABLES LIKE 'guild_rank_guild'",.@c_tbl$; if(.@c_tbl$[0] == "") { mes .@n$; mes "Result:"; mes "The entries are not yet installed wanna install them?"; next; if(select("- Install it~:- Na, it would fail!") - 1) { mes .@n$; mes "How do you wanna know without installing it!!"; emotion e_bzz; percentheal -99,-99; close2; sleep2 2000; percentheal 100,100; end; } else { mes .@n$; mes "Here we go~"; //= Member Table: query_sql "CREATE TABLE `guild_rank_mem` ( `char_id` int(10) , `guild_id` smallint(5) , `rank` smallint(5) , `woe` smallint(5) , `donate` int(11) , `donate_am` int(11) , `holiday` smallint(5) )"; //= Guild Table: query_sql "CREATE TABLE `guild_rank_guild` ( `guild_id` smallint(5) , `type` smallint(5) , `rank` smallint(5) , `woe` smallint(5) , `donate` int(11) , `donate_min` int(11) , `donate_max` int(11) )"; enablenpc "GuildRanks#Events"; announce "The Guild Ranking System is online.",0,0x00FF00; set $gld_ranker_tbl,1; close; } } else { mes .@n$; mes "It seems like the entries has been installed,"; mes "then I will activate the system if you want."; if(select("- Please proceed~:- Stop please") - 1) { close; } else { enablenpc "GuildRanks#Events"; announce "The Guild Ranking System is online.",0,0x00FF00; set $gld_ranker_tbl,1; close; } } } // **********************************************************************// // // Closing Message \\ // // **********************************************************************// G_Quit: mes .@n$; mes "See ya again."; close; G_Array: set @r_menu$,""; set .@rew_it_list$,""; deletearray .@c_tbl$[0],getarraysize(.@c_tbl$); deletearray @gld_mem$[0],getarraysize(@gld_mem$); deletearray @char_id[0],getarraysize(@char_id); deletearray @donate[0],getarraysize(@donate); deletearray @donate_am[0],getarraysize(@donate_am); deletearray @woe[0],getarraysize(@woe); deletearray @rank[0],getarraysize(@rank); deletearray .@r_gld[0],getarraysize(.@r_gld); deletearray .@r_rank[0],getarraysize(.@r_rank); deletearray .@r_woe[0],getarraysize(.@r_woe); return; OnInit: // Guild Rewards: // .rew_woe: Item ID, when you put 1 it will give Zeny as Reward. // .rew_woe_am: Amount of the Items or Zeny. // .rew_woe_need: The points needed // For Emp Breaking setarray .rew_woe[0],1,969; setarray .rew_woe_am[0],50000,10; setarray .rew_woe_need[0],1,5; // Maximum Zeny for Donation Account set .don_limit,2000000000; // 2b Zeny // Attaching Items To the Shop npcshopdelitem "GUILD_SHOP",512; setarray .gshop_id[0],7619,7620; setarray .gshop_cost[0],200000,200000; for ( set .@s,0; .@s < getarraysize(.gshop_id); set .@s,.@s + 1 ) { npcshopadditem "GUILD_SHOP",.gshop_id[.@s],.gshop_cost[.@s]; } end; }