· 8 years ago · Jun 24, 2018, 02:44 AM
1// Emperium Ladder
2// By: Max Ng
3
4// add callfunc "AddEmpKill"; after map announce on agit breaks for this to work
5// WOE SE agit scripts and agit_template.txt
6// woe agits scripts add before sleep command
7
8- script EmpLadder -1,{
9
10L_Start:
11
12 //ECO
13 setarray .@maps$[0], "aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
14 "gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
15 "payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
16 "prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
17 "nguild_alde","nguild_gef","nguild_pay","nguild_prt",
18 "schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05",
19 "arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05";
20 //<<<< ECO
21
22 cleararray @char_id[0],0,getarraysize(@char_id);
23 cleararray @guild_id[0],0,getarraysize(@guild_id);
24 cleararray @kills[0],0,getarraysize(@kills);
25 cleararray @g_kills[0],0,getarraysize(@g_kills);
26 cleararray @char_name$[0],0,getarraysize(@char_name$);
27 mes "[Emperium Ladder]";
28 mes "Hello there, what do you to check?";
29 if (getgmlevel() >= 99) {
30 menu "Agit Standings",L_TopAgits,"WoE Kills Ladder",L_woekill,"Top Emperium Breakers",L_ByPeople,"Top Emperium Breaking Guilds",L_ByGuilds,"Reset Ladder",L_Reset;
31 } else {
32 menu "Agit Standings",L_TopAgits,"WoE Kills Ladder",L_woekill,"Top Emperium Breakers",L_ByPeople,"Top Emperium Breaking Guilds",L_ByGuilds;
33 }
34
35L_TopAgits:
36next;
37 mes "[Emperium Ladder]";
38 mes "Herewith is the list of the Top 8 Agits arranged according to ^0000FFCastle Economy^000000 as reference for the upcoming G.O.M.";
39 mes "Please click on each item to view the information.";
40
41
42//ECO
43 setarray .@maps$[0], "aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
44 "gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
45 "payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
46 "prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
47 "nguild_alde","nguild_gef","nguild_pay","nguild_prt",
48 "schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05",
49 "arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05";
50
51 // castle_id, master, economy, defense
52//query_sql "SELECT guild_castle.castle_id, guild.`name`, guild_castle.economy, guild_castle.defense FROM guild_castle inner JOIN guild ON guild_castle.guild_id=guild.guild_id ORDER BY guild_castle.economy desc, guild_castle.priority asc LIMIT 8", .@castle_id,.@name$,.@economy,.@defense;
53
54//new query nov 23, 2010 to not include novice castles in list
55query_sql "SELECT guild_castle.castle_id, guild.`name`, guild_castle.economy, guild_castle.defense FROM guild_castle inner JOIN guild ON guild_castle.guild_id=guild.guild_id WHERE guild_castle.castle_id NOT BETWEEN 20 AND 23 ORDER BY guild_castle.economy desc, guild_castle.priority asc LIMIT 8", .@castle_id,.@name$,.@economy,.@defense;
56
57
58
59 // generate menu
60 for( set .@i,0; .@i<getarraysize(.@castle_id); set .@i,.@i+1 )
61 set .@menu$, .@menu$ + getcastlename(.@maps$[.@castle_id[.@i]])+" > "+.@name$[.@i]+" > "+.@economy[.@i]+" > "+.@defense[.@i] +":";
62 // pick a castle
63 set .@castle$, .@maps$[.@castle_id[select(.@menu$) -1]];
64
65
66 switch(select( getgmlevel()>=99 ? "View info:Change economy:Change defense":"View info" )) {
67 case 1:
68 next;
69 // use 'getcastledata' for the most updated info
70 mes "Castle Name: ^0000FF"+getcastlename(.@castle$)+" ("+.@castle$+")^000000";
71 mes "Guild Name: ^0000FF"+getguildname(getcastledata(.@castle$,1))+"^000000";
72 mes "Guild Master: ^0000FF"+getguildmaster(getcastledata(.@castle$,1))+"^000000";
73 mes "Economy: ^0000FF"+getcastledata(.@castle$,2)+"^000000";
74 mes "Defense: ^0000FF"+getcastledata(.@castle$,3)+"^000000";
75 break;
76 case 2:
77 next;
78 mes "[^0000FF"+getcastlename(.@castle$)+" ("+.@castle$+")^000000]";
79 mes "Economy: ^0000FF"+getcastledata(.@castle$,2)+"^000000";
80 mes "Enter new Economy:";
81 input .@eco;
82 if( .@eco<0 || .@eco>100) {
83 mes "^FF0000Economy can be between 0-100";
84 close;
85 }
86 setcastledata .@castle$,2, .@eco;
87 mes "Economy: ^0000FF"+getcastledata(.@castle$,2)+"^000000";
88 break;
89 case 3:
90 next;
91 mes "[^0000FF"+getcastlename(.@castle$)+" ("+.@castle$+")^000000]";
92 mes "Defense: ^0000FF"+getcastledata(.@castle$,3)+"^000000";
93 mes "Enter new Defense:";
94 input .@def;
95 if( .@def<0 || .@def>100) {
96 mes "^FF0000Defense can be between 0-100";
97 close;
98 }
99 setcastledata .@castle$,3, .@def;
100 mes "Defense: ^0000FF"+getcastledata(.@castle$,3)+"^000000";
101 break;
102 }
103 close;
104
105
106L_ByPeople:
107 next;
108 query_sql("SELECT `char_id`,`kills` FROM `ek_accounts` ORDER BY `kills` DESC LIMIT 10",@char_id,@kills);
109 mes "[Emperium Ladder]";
110 mes "The Top 10 Breakers are:";
111 for (set @i,0; @i < getarraysize(@char_id); set @i,@i + 1) {
112 query_sql("SELECT `name`,`class` FROM `char` WHERE `char_id` = '" + @char_id[@i] + "' LIMIT 1",@char_name$,@class_id);
113 mes @i + 1 + ". " + @char_name$[0] + " - ^00FF00 " + jobname(@class_id[0]) + " ^000000 - [^FF0000 " + @kills[@i] + " ^000000]";
114 }
115 close;
116
117L_ByGuilds:
118 next;
119 query_sql("SELECT `guild_id`,`kills` FROM `ek_guilds` ORDER BY `kills` DESC LIMIT 10",@guild_id,@g_kills);
120 mes "[Emperium Ladder]";
121 mes "The Top 10 Breaker Guilds are:";
122for (set @i,0; @i < getarraysize(@guild_id); set @i,@i + 1) {
123 query_sql("SELECT `name` FROM `guild` WHERE `guild_id` = '" + @guild_id[@i] + "' LIMIT 1",@guild_name$);
124 mes @i + 1 + ". " + @guild_name$[0] + " ^000000 - [ ^FF0000 " + @g_kills[@i] + " ^000000 ]";
125}
126 close;
127
128
129//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
130
131
132
133
134L_woekill:
135mes "I am a Custom Ladder NPC.";
136next;
137switch( select( "^FF0000Information^000000",
138 "Check Ladder",
139 ( getgmlevel() < 20 || .Ladder )?"":"^0000FF[GM]^000000 Start Ladder",
140 ( getgmlevel() < 20 || !.Ladder )?"":"^0000FF[GM]^000000 Stop Ladder",
141 ( getgmlevel() < 20 || .Ladder )?"":"^0000FF[GM]^000000 RESET Ladder",
142 ( getgmlevel() < 90 || .Ladder )?"":"^0000FF[ADMIN]^000000 Create MySQL Table" )){
143 Case 1:
144 mes "This Custom Ladder will only take place in several Maps.";
145 mes "^0000FF_____________________________^000000";
146 mes "Current Status : "+( ( .Ladder )?"^0000FFON":"^0000FFOFF")+" ";
147 mes "^0000FF_____________________________^000000";
148 for( set .@i,0; .@i < getarraysize( .Map$ ); set .@i,.@i + 1 )
149 mes "^FF0000Map "+( .@i + 1 )+" = ^0000FF"+.Map$[.@i]+"^000000";
150 mes "^0000FF_____________________________^000000";
151 close;
152 Case 2:
153 mes "Rank - - - - - Name - - - - - Kill";
154 mes "^0000FF_____________________________^000000";
155 set .@i,query_sql("SELECT Char_Kills,Char_Name FROM `CharLadder` ORDER BY `Char_Kills` DESC LIMIT 30",.@CKills,.@CName$);
156 if( !.@i ){
157 mes "^FF0000DID NOT HAVE RECORD YET^000000";
158 }else{
159 for( set .@i,0; .@i < 30; set .@i,.@i + 1 ){
160 if( !.@CKills[.@i] ) break;
161 mes "^FF0000[ "+(.@i + 1)+" ] ^0000FF"+escape_sql( .@CName$[.@i] )+" - "+.@CKills[.@i]+" Kills ";
162 if( .@i % 10 == 0 ) mes "^0000FF_____________________________^000000";
163 }
164 }
165 close;
166 Case 3:
167 set .Ladder,1;
168 mes "Ladder has Started and End after "+.HourLimit+" Hours.";
169 set .CLadderTime,gettimetick(2) + ( .HourLimit * 3600 );
170 announce "Custom Ladder has now Begin in Specific Map for next 5 Hours.",0;
171 close;
172 Case 4:
173 set .Ladder,0;
174 mes "Ladder has End";
175 set .CLadderTime,gettimetick(2);
176 announce "Custom Ladder has End.",0;
177 close;
178 Case 5:
179 query_sql "DROP TABLE `CharLadder`;";
180 query_sql("CREATE TABLE IF NOT EXISTS `CharLadder` ( `Char_ID` INT NOT NULL ,`Char_Name` varchar(25) NOT NULL ,`Char_Kills` INT NOT NULL,PRIMARY KEY ( `Char_ID` ) )");
181 mes "Ladder has Been Reset.";
182 close;
183 Case 6:
184 mes "Please make sure your MySQL Table named \'^FF0000CharLadder^000000\' is ^FF0000NOT EXIST^000000.";
185 mes "Otherswise , this will Mess up the Ranking Lists.";
186 next;
187 if( select("Cancel:^FF0000Create Table^000000") == 1 )close;
188 query_sql "DROP TABLE `CharLadder`;";
189 query_sql("CREATE TABLE IF NOT EXISTS `CharLadder` ( `Char_ID` INT NOT NULL ,`Char_Name` varchar(25) NOT NULL ,`Char_Kills` INT NOT NULL,PRIMARY KEY ( `Char_ID` ) )");
190 mes "MySQL Table named \'^FF0000CharLadder^000000\' has been Created.";
191 mes "^0000FF_____________________________^000000";
192 mes "To Reset / Remove Ladder more efficient ";
193 mes "^FF0000Shut Down Server and Delete the Table in MySQL.";
194 mes "^0000FF_____________________________^000000";
195 close;
196 }
197
198OnAgitStart:
199set .Ladder,1;
200end;
201
202OnAgitEnd:
203set .Ladder,0;
204end;
205
206OnPCKillEvent:
207for( set .@i,0; .@i < getarraysize( .Map$ ); set .@i,.@i + 1 ){
208 if( strcharinfo(3) == .Map$[.@i] && .Ladder ){
209 debugmes strnpcinfo(0)+" "+.@i+","+strcharinfo(3)+","+.Map$[.@i]+","+.Ladder+","+@CKills;
210 query_sql("SELECT Char_Kills FROM `CharLadder` WHERE `Char_ID`="+getcharid(0)+"", @CKills );
211 debugmes ""+.@i+","+strcharinfo(3)+","+.Map$[.@i]+","+.Ladder+","+@CKills;
212 set @CKills,@CKills + 1;
213 message strcharinfo(0),"Custom Ladder Kill Increased. Total "+@CKills+" Kills";
214 query_sql("INSERT INTO `CharLadder` ( Char_ID,Char_Name,Char_Kills ) VALUES ("+getcharid(0)+",'"+strcharinfo(0)+"',"+@CKIlls+") ON DUPLICATE KEY UPDATE Char_Kills="+@CKills+";");
215 }
216 }
217end;
218
219OnInit:
220set .HourLimit,5;
221setarray .Map$[0], "aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
222 "gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
223 "payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
224 "prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
225 "nguild_alde","nguild_gef","nguild_pay","nguild_prt",
226 "schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05",
227 "arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05";
228end;
229
230
231
232
233//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
234
235
236L_Reset:
237 next;
238 mes "[Emperium Ladder]";
239 mes "Are you sure you want to reset the ladder?";
240 switch (select("Yes:No")) {
241 case 1:
242 query_sql "TRUNCATE TABLE `ek_accounts`";
243 query_sql "TRUNCATE TABLE `ek_guilds`";
244 mes "Done!";
245 close;
246 case 2:
247 mes "Alright.";
248 close;
249 }
250 close;
251// said to remove by dzerox since error on onnpckillevent
252//OnNPCKillEvent:
253// if (killedrid == 1288) {
254// callfunc "AddEmpKill";
255// getmapxy(@map$,@x,@y,0);
256// mapannounce @map$,"[ " + strcharinfo(0) + " ] destroyed the Emperium.",bc_all;
257// }
258// end;
259
260//removed since there is already sql table. uncomment if new install
261//OnInit:
262// // DO NOT EDIT
263// query_sql("CREATE TABLE IF NOT EXISTS `ek_accounts` (`account_id` INT(11) NOT NULL DEFAULT '0',`char_id` INT(11) NOT NULL DEFAULT '0',`kills` INT(20) NOT NULL DEFAULT '0') TYPE = MyISAM");
264// query_sql("CREATE TABLE IF NOT EXISTS `ek_guilds` (`guild_id` INT(11) NOT NULL DEFAULT '0',`kills` INT(20) NOT NULL DEFAULT '0') TYPE = MyISAM");
265// end;
266
267}
268
269function script AddEmpKill {
270 if (query_sql("SELECT `kills` FROM `ek_accounts` WHERE `char_id` = '" + getcharid(0) + "' LIMIT 1",@kills) <= 0) {
271 query_sql("INSERT INTO `ek_accounts` VALUES ('" + getcharid(3) + "','" + getcharid(0) + "','1')");
272 } else {
273 set @kills[0],@kills[0] + 1;
274 query_sql("UPDATE `ek_accounts` SET `kills` = '" + @kills[0] + "' WHERE `char_id` = '" + getcharid(0) + "' LIMIT 1");
275 }
276 if (getcharid(2) != 0) {
277 if (query_sql("SELECT `kills` FROM `ek_guilds` WHERE `guild_id` = '" + getcharid(2) + "' LIMIT 1",@g_kills) <= 0) {
278 query_sql("INSERT INTO `ek_guilds` VALUES ('" + getcharid(2) + "','1')");
279 } else {
280 set @g_kills[0],@g_kills[0] + 1;
281 query_sql("UPDATE `ek_guilds` SET `kills` = '" + @g_kills[0] + "' WHERE `guild_id` = '" + getcharid(2) + "' LIMIT 1");
282 }
283 }
284 return;
285}
286
287
288// Main NPC for Duplicate.... to avoid of multi NPC event get triggered when running.
289prontera,155,181,5 script Emperium Ladder 743,{
290 donpcevent "EmpLadder::L_Start";
291}
292
293
294// my additions
295turbo_room,76,100,6 duplicate(Emperium Ladder) Emperium Ladder#2 743
296payon,119,230,4 duplicate(Emperium Ladder) Emperium Ladder#3 743
297prontera,146,76,5 duplicate(Emperium Ladder) Emperium Ladder#4 743
298
299izlude,136,135,6 duplicate(Emperium Ladder) Emperium Ladder#5 743
300
301alberta,137,73,3 duplicate(Emperium Ladder) Emperium Ladder#6 743
302alberta,39,253,5 duplicate(Emperium Ladder) Emperium Ladder#7 743
303
304amatsu,97,140,5 duplicate(Emperium Ladder) Emperium Ladder#8 743
305
306morocc,151,258,5 duplicate(Emperium Ladder) Emperium Ladder#9 743
307morocc,136,106,3 duplicate(Emperium Ladder) Emperium Ladder#10 743
308
309yuno,176,187,3 duplicate(Emperium Ladder) Emperium Ladder#11 743
310
311gonryun,147,142,5 duplicate(Emperium Ladder) Emperium Ladder#12 743
312hugel,106,139,3 duplicate(Emperium Ladder) Emperium Ladder#13 743
313
314geffen,114,54,8 duplicate(Emperium Ladder) Emperium Ladder#14 743
315geffen,168,124,5 duplicate(Emperium Ladder) Emperium Ladder#15 743
316
317prontera,170,305,3 duplicate(Emperium Ladder) Emperium Ladder#16 743
318prontera,38,226,5 duplicate(Emperium Ladder) Emperium Ladder#17 743
319prontera,278,223,3 duplicate(Emperium Ladder) Emperium Ladder#18 743
320
321aldebaran,114,124,5 duplicate(Emperium Ladder) Emperium Ladder#19 743