· 6 years ago · Sep 23, 2019, 11:32 AM
1
2/*
3CREATE TABLE IF NOT EXISTS `ero_pvp_rank` (
4 `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
5 `cid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
6 `kill_cid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
7 `map` NVARCHAR(30) NOT NULL DEFAULT '',
8 `time` DATETIME,
9 `year` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
10 `month` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
11 `day` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
12 `week` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
13 PRIMARY KEY (`id`)
14) ENGINE=MyISAM;
15*/
16
17
18
19/* -------- You can remove this part
20
21prontera,143,179,7 script PvP Rank 866,{
22 doevent "pvp_rank_main::OnTalk";
23 end;
24
25OnInit:
26 // Auto-generate
27 query_sql("CREATE TABLE IF NOT EXISTS `ero_pvp_rank` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `cid` INT(11) UNSIGNED NOT NULL DEFAULT '0', `kill_cid` INT(11) UNSIGNED NOT NULL DEFAULT '0', `map` NVARCHAR(30) NOT NULL DEFAULT '', `time` DATETIME, `year` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0', `month` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', `day` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', `week` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=MyISAM");
28 waitingroom "[ PvP Rank ]",0;
29 end;
30
31// OnInit:
32 sleep 1000;
33 .@cid_list_size = query_sql("SELECT `char_id` FROM `char` WHERE `char_id` > 1000", .@cid_list);
34 // query_sql("TRUNCATE `ero_pvp_rank`");
35 .@sql$ = "INSERT INTO `ero_pvp_rank` (`cid`,`kill_cid`,`time`) VALUES ";
36 for (.@total = 1; .@total <= 1000; .@total++) {
37 if (.@total && .@total % 20 == 0) {
38 if (.@sql$ != "") {
39 query_sql(.@sql$);
40 // consolemes(CONSOLEMES_INFO, "added "+(.@total-20)+" ~ "+.@total);
41 }
42 .@sql$ = "INSERT INTO `ero_pvp_rank` (`cid`,`kill_cid`,`time`) VALUES ";
43 .@i = 0;
44 sleep 1;
45 }
46
47 do {
48 .@cid = .@cid_list[rand(.@cid_list_size)];
49 .@kill_cid = .@cid_list[rand(.@cid_list_size)];
50 } while (.@cid == .@kill_cid);
51 .@map$ = F_Rand("prontera", "izlude", "payon", "morocc", "prt_fild01", "pay_fild04", "pay_dun02", "pay_fild02", "prt_fild02");
52 .@now$ = sprintf("2019-%02d-%02d %02d:%02d:%02d", rand(10), rand(31), rand(24), rand(60), rand(60));
53 .@sql$ += ((.@i > 0)? ",":"") + "("+.@cid+","+.@kill_cid+",'"+.@now$+"')";
54 .@i++;
55 }
56 query_sql("DELETE FROM `ero_pvp_rank` WHERE `time` = '0000-00-00 00:00:00'");
57 query_sql("UPDATE `ero_pvp_rank` SET `year` = YEAR(`time`), `month` = MONTH(`time`), `day` = DAYOFMONTH(`time`), `week` = WEEKOFYEAR(`time`) WHERE 1=1");
58 end;
59}
60
61------------- Until this part--------------*/
62
63
64prontera,143,179,7 script PvP Rank 866,{
65 .@cid = getcharid(0);
66 while (1) {
67 switch(select(
68 "Mis estadisticas.",
69 "Ranking global (Top "+.top_rank_global+").",
70 "Ranking mensual (Top "+.top_rank_monthly+").",
71 "Ranking semanal (Top "+.top_rank_weekly+").",
72 "Mis enemigos (Top "+.top_enemies+").",
73 "Información, leyenda y premios.",
74 "Salir."
75 )) {
76 case 1:
77 mes "[ ^2e9c99Mis estadisticas^000000 ]";
78 query_sql("SELECT COUNT(`id`) FROM `ero_pvp_rank` WHERE `year` = "+.year+" AND`cid` = "+.@cid+" "+.disabled_map_query$+" GROUP BY `cid`", .@total_kill);
79 query_sql("SELECT COUNT(`id`) FROM `ero_pvp_rank` WHERE `year` = "+.year+" AND`kill_cid` = "+.@cid+" "+.disabled_map_query$+" GROUP BY `kill_cid`", .@total_death);
80 mes "Asesinatos Totales: " + "^FF0000[" + F_InsertComma(.@total_kill) +"]^000000";
81 mes "Muertes Totales: " + "^FF0000[" + F_InsertComma(.@total_death) +"]^000000";
82 mes " ";
83 query_sql("SELECT c.name FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`kill_cid` WHERE rank.`year` = "+.year+" AND rank.`cid` = "+.@cid+" "+.disabled_map_query$+" ORDER BY `id` DESC LIMIT 1", .@kill_name$);
84 query_sql("SELECT c.name FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`cid` WHERE rank.`year` = "+.year+" AND rank.`kill_cid` = "+.@cid+" "+.disabled_map_query$+" ORDER BY `id` DESC LIMIT 1", .@killed_name$);
85 mes "Último Asesinato: "+ "^0055FF" + .@kill_name$ + "^000000";
86 mes "Última Muerte: "+ "^FF8C00" + .@killed_name$ + "^000000";
87 break;
88 case 2:
89 mes "[ ^2e9c99Top "+.top_rank_global+" Global^000000 ]";
90 .@sql$ = "SELECT c.name, COUNT(rank.`id`) AS `total` FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`cid` WHERE rank.`year` = "+.year+" "+.disabled_map_query$+" GROUP BY rank.`cid` ORDER BY `total` DESC LIMIT "+.top_rank_global;
91 .@size = query_sql(.@sql$, .@name$, .@total);
92 if (.@size) {
93 for (.@i = 0; .@i < .@size; .@i++)
94 mes "Top "+(.@i+1)+": ^0055FF"+.@name$[.@i]+"^000000 - ^FF0000"+.@total[.@i]+"^000000 asesinato(s).";
95 }
96 else {
97 mes "~ ^FF0000No hay registros^000000.";
98 }
99 break;
100 case 3:
101 .@month = select(
102 "~ Mes actual.",
103 "Enero.",
104 "Febrero.",
105 "Marzo.",
106 "Abril.",
107 "Mayo.",
108 "Junio.",
109 "Julio.",
110 "Agosto.",
111 "Septiembre.",
112 "Octubre.",
113 "Noviembre.",
114 "Diciembre."
115 ) - 1;
116 if (.@month <= 0)
117 .@month = .month;
118 mes "[ ^2e9c99Top "+.top_rank_monthly+" Mensual - Mes #"+.@month+"^000000 ]";
119 .@sql$ = "SELECT c.name, COUNT(rank.`id`) AS `total` FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`cid` WHERE rank.`year` = "+.year+" AND rank.`month` = "+.@month+" "+.disabled_map_query$+" GROUP BY rank.`cid` ORDER BY `total` DESC LIMIT "+.top_rank_monthly;
120 .@size = query_sql(.@sql$, .@name$, .@total);
121 if (.@size) {
122 for (.@i = 0; .@i < .@size; .@i++)
123 mes "Top "+(.@i+1)+": ^0055FF"+.@name$[.@i]+"^000000 - ^FF0000"+.@total[.@i]+"^000000 asesinato(s).";
124 }
125 else {
126 mes "~ ^FF0000No hay registros^000000.";
127 }
128 break;
129 case 4:
130 mes "[ ^2e9c99Top "+.top_rank_weekly+" Semanal - Semana #"+.week+"^000000 ]";
131 .@sql$ = "SELECT c.name, COUNT(rank.`id`) AS `total` FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`cid` WHERE rank.`year` = "+.year+" AND rank.`week` = "+.week+" "+.disabled_map_query$+" GROUP BY rank.`cid` ORDER BY `total` DESC LIMIT "+.top_rank_weekly;
132 .@size = query_sql(.@sql$, .@name$, .@total);
133 if (.@size) {
134 for (.@i = 0; .@i < .@size; .@i++)
135 mes "Top "+(.@i+1)+": ^0055FF"+.@name$[.@i]+"^000000 - ^FF0000"+.@total[.@i]+"^000000 asesinato(s).";
136 }
137 else {
138 mes "~ ^FF0000No hay registros^000000.";
139 }
140 break;
141 case 5:
142 mes "[ ^2e9c99Mis enemigos Top "+.top_enemies+"^000000 ]";
143 .@sql$ = "SELECT c.name, COUNT(rank.`id`) AS `total` FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`cid` WHERE rank.`kill_cid` = "+.@cid+" "+.disabled_map_query$+" GROUP BY rank.`cid` ORDER BY `total` DESC LIMIT "+.top_enemies;
144 .@size = query_sql(.@sql$, .@name$, .@total);
145 if (.@size) {
146 for (.@i = 0; .@i < .@size; .@i++)
147 mes "Top "+(.@i+1)+": ^FF8C00"+.@name$[.@i]+"^000000 - ^FF0000"+.@total[.@i]+"^000000 muerte(s).";
148 }
149 else {
150 mes "~ ^FF0000No hay registros^000000.";
151 }
152 break;
153 case 6:
154 mes "[ ^2e9c99Información^000000 ]";
155 mes "¡Hola!";
156 mes "Conmigo podrás ver el registro de todos los ^0055FFasesinatos^000000 y todas las ^FF8C00muertes^000000 que sucedan en ^2e9c99Iridium RO^000000.";
157 next;
158 mes "[ ^2e9c99Información^000000 ]";
159 mes "Es mi deber mostrar a los jugadores las estadisticas globables, mensuales y semanales.";
160 next;
161 mes "[ ^2e9c99Leyenda^000000 ]";
162 mes "^0055FFAsesinato^000000: Matar a otro player.";
163 mes "Ejemplo - Ranking Global (Top 25):";
164 mes "Top 1: ^0055FFCharon^000000 - ^FF000096^000000 asesinatos(s). Significa que Charon ha matado 96 players.";
165 next;
166 mes "[ ^2e9c99Leyenda^000000 ]";
167 mes "^FF8C00Muerte^000000: Sufrir la muerte por otro player.";
168 mes "Ejemplo - Mis Enemigos (Top 10):";
169 mes "Top 1: ^FF8C00Charon^000000 - ^FF000069^000000 muerte(s). Significa que Charon te ha matado 69 veces.";
170 next;
171 mes "[ ^2e9c99Premios^000000 ]";
172 mes "Los premios se darán ^800080mensualmente^000000 a los jugadores TOP 3 del Ranking.";
173 mes "~ ^FF0000Nota: El Ranking contará todos los asesinatos y todas las muertes que sucedan en los mapas PK^000000.";
174 next;
175 mes "[ ^2e9c99Premios^000000 ]";
176 mes "======== Premios ========";
177 mes "^009900Primer lugar^000000: 45,000,000 Zeny + Aun no lo se";
178 mes " ";
179 mes "^00BFFFSegundo lugar^000000: 30,000,000 Zeny + Aun no lo se";
180 mes " ";
181 mes "^FF33E6Tercer lugar^000000: 15,000,000 Zeny + Aun no lo se";
182 next;
183 mes "[ ^2e9c99Premios^000000 ]";
184 mes "Cada fin de ^800080mes^000000, los ganadores recibirán sus premios vía RoDEX (Mail).";
185 mes "-----------------------------------";
186 mes "~ ^777777Demuestra quién eres en PvP^000000.";
187 break;
188 default:
189 close;
190 }
191 next;
192 }
193 close;
194
195 OnInit:
196 query_sql("CREATE TABLE IF NOT EXISTS `ero_pvp_rank` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `cid` INT(11) UNSIGNED NOT NULL DEFAULT '0', `kill_cid` INT(11) UNSIGNED NOT NULL DEFAULT '0', `map` NVARCHAR(30) NOT NULL DEFAULT '', `time` DATETIME, `year` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0', `month` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', `day` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', `week` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=MyISAM");
197 waitingroom "[ PvP Rank ]",0;
198
199 // exclude gm lv1 and above.
200 .gm_level = 60;
201 // top kill rank are listed.
202 .top_rank_global = 25;
203 .top_rank_monthly = 25;
204 .top_rank_weekly = 25;
205 // top 10 enemy are listed.
206 .top_enemies = 10;
207 // top 3 every month are rewarded.
208 .top_rank_reward = 3;
209
210 // disabled maps
211 setarray .disabled_map$, "06guild_%", "%cas_g%", "%@%"; // "prontera";
212 .disabled_map_size = getarraysize(.disabled_map$);
213 for (.@i = 0; .@i < .disabled_map_size; .@i++)
214 .disabled_map_query$ += "AND `map` NOT LIKE '"+escape_sql(.disabled_map$[.@i])+"' ";
215
216 OnClock0000:
217 // assign rodex reward at 1st of every month.
218 if (.day == 1 && .month > 0) {
219 .@sql$ = "SELECT rank.cid, COUNT(rank.`id`) AS `total` FROM `ero_pvp_rank` rank INNER JOIN `char` c ON c.`char_id` = rank.`cid` WHERE rank.`year` = "+.year+" AND rank.`month` = "+.month+" "+.disabled_map_query$+" GROUP BY rank.`cid` ORDER BY `total` DESC LIMIT "+.top_rank_reward;
220 .@size = query_sql(.@sql$, .@cid, .@total);
221 for (.@i = 0; .@i < .@size; .@i++) {
222 .@rank = .@i+1;
223 switch (.@rank) {
224 case 1: // Top Rank 1 reward
225 .@zeny = 5000000;
226 setarray .@itemid, 501, 502, 503;
227 setarray .@amount, 100, 100, 100;
228 break;
229 case 2: // Top Rank 2 reward
230 .@zeny = 500000;
231 setarray .@itemid, 501, 502, 503;
232 setarray .@amount, 10, 10, 10;
233 break;
234 case 3: // Top Rank 3 reward
235 .@zeny = 5000;
236 setarray .@itemid, 501, 502, 503;
237 setarray .@amount, 1, 1, 1;
238 break;
239 default: continue;
240 }
241 mail .@cid[.@i], "SYSTEM", "**TOP #"+.@rank+" PVP RANK (MONTHLY) **", "Congratulation! You are rewarded for being Top #"+.@rank+" in the Monthly PVP Rank.", .@zeny, .@itemid, .@amount;
242 }
243 }
244 // update date info
245 query_sql("SELECT DAYOFMONTH(NOW()), MONTH(NOW()), YEAR(NOW()), WEEKOFYEAR(NOW())", .day, .month, .year, .week);
246 end;
247
248 OnPCKillEvent:
249 .@killedrid = killedrid;
250 if (.@killedrid != getcharid(3) && (!.gm_level || getgmlevel() < .gm_level)) {
251 .@cid = getcharid(0);
252 .@map$ = strcharinfo(3);
253 if (attachrid(.@killedrid))
254 query_sql("INSERT INTO `ero_pvp_rank` (`cid`,`kill_cid`,`map`,`time`,`year`,`month`,`day`,`week`) VALUES ("+.@cid+","+getcharid(0)+",'"+escape_sql(.@map$)+"',NOW(),"+.year+","+.month+","+.day+","+.week+")");
255 }
256 end;
257}