zmref Posted February 8, 2013 Posted February 8, 2013 NPC that: - displays top 10 emperium breaker (Rank, Char Name, Guild Name, Breaker Points) - when a player was the last to break the emp after the WoE he will get 1 point - selection which enables the player to trade their points into TCG (item id: 7227) but their break points are still displayed Quote
Brian Posted February 10, 2013 Posted February 10, 2013 1. edit these 2 guild files like so: Index: npc/guild2/agit_main_se.txt =================================================================== --- npc/guild2/agit_main_se.txt (revision 17127) +++ npc/guild2/agit_main_se.txt (working copy) @@ -601,6 +601,7 @@ end; OnStartArena: + set breaker_points, breaker_points +1; set .@GID,getcharid(2); set .@region$, (compare(strnpcinfo(4),"arug"))?"Valfreyja":"Nithafjoll"; // Lower castle Economy Index: npc/guild/agit_main.txt =================================================================== --- npc/guild/agit_main.txt (revision 17127) +++ npc/guild/agit_main.txt (working copy) @@ -99,6 +99,7 @@ // The Emperium has been broken. OnAgitBreak: + set breaker_points, breaker_points +1; set .@GID,getcharid(2); // Show and log error if an unguilded player breaks the Emperium. (Should NEVER happen) if (.@GID <= 0) { 2. load this script: http://rathena.kpaste.net/934c?rawprontera,155,188,0 script Emp Break Ladder 910,{ switch(select("View Emp Break Ladder:Redeem points for TCG:More Info")) { case 1: query_sql "SELECT `char`.`name`, guild.`name`, CAST(`value` AS UNSIGNED) " + "FROM global_reg_value " + "LEFT JOIN `char` ON global_reg_value.char_id=`char`.char_id " + "LEFT JOIN `guild` ON `char`.guild_id=guild.guild_id " + "WHERE global_reg_value.`str`='breaker_points' " + "ORDER BY CAST(`value` AS UNSIGNED) DESC LIMIT 10", .@name$, .@guild$, .@points; mes "[Top 10 Emp Breakers]"; for (set .@i,0; .@i<getarraysize(.@name$); set .@i,.@i+1) { mes (.@i+1) +". ^0000FF"+ .@name$[.@i] +"^000000, "+ .@guild$[.@i] +" ("+ .@points[.@i] +((.@points[.@i]==1)?" pt":" pts")+")"; } break; case 2: mes "[Emp Break Ladder]"; mes "Total Emp Breaks: " + breaker_points; mes "Available Points: " + (breaker_points - breaker_tcg); if (breaker_points == 0) { mes "You have not broke the emp yet!"; } else if (breaker_points <= breaker_tcg) { mes "You've already exchanged all your points for TCG."; mes "Come back after you break the emp again!"; } else { set .@reward, breaker_points - breaker_tcg; if (select("Redeem points for "+.@reward+" TCG:Cancel") == 2) { mes "Come back if you change your mind."; } else if (checkweight(7227, .@reward) == 0) { mes "You are overweight or carrying too many items."; } else { getitem 7227, .@reward; set breaker_tcg, breaker_tcg + .@reward mes "Here are your "+.@reward+" TCG!"; } } break; case 3: mes "[Emp Break Ladder]"; mes "Each time you break the emp, you earn 1 point."; mes "Then, talk to me to redeem your point(s) for TCG."; break; } close; } 2 Quote
zmref Posted February 10, 2013 Author Posted February 10, 2013 It's an honor that you're the one answered my request. Ok I'll try this one thanks in advance! Quote
Brian Posted February 17, 2013 Posted February 17, 2013 Stop your map/char/login servers. execute these SQL queries:DELETE FROM global_reg_value WHERE `str`='breaker_points'; DELETE FROM global_reg_value WHERE `str`='breaker_tcg'; Quote
zmref Posted February 17, 2013 Author Posted February 17, 2013 Thank you very much Brian, really.. thanks.. ) Sir, is it possible to reset the breaker points without stopping the map/char/login servers? Quote
caspa Posted February 17, 2013 Posted February 17, 2013 Sir bry........ how to add job class on this script and also...... the points will be receive whenever you destroyed the emperium and not just the last one who broke the emperium...... i would also like it to reset the ladder w/o closing the mapserver/char/login Quote
zmref Posted February 17, 2013 Author Posted February 17, 2013 // http://rathena.org/board/topic/78486-breaker-rankings-npc/ // NPC that: // - displays top 10 emperium breaker (Rank, Char Name, Guild Name, Breaker Points) // - when a player was the last to break the emp after the WoE he will get 1 point // - selection which enables the player to trade their points into TCG (item id: 7227) // but their break points are still displayed // RESET STATS negel,172,231,5 script Emp Breaker Ladder 857,{ switch(select("View Emp Break Ladder:Redeem points for TCG:More Info")) { case 1: query_sql "SELECT `char`.`name`, guild.`name`, CAST(`value` AS UNSIGNED) " + "FROM global_reg_value " + "LEFT JOIN `char` ON global_reg_value.char_id=`char`.char_id " + "LEFT JOIN `guild` ON `char`.guild_id=guild.guild_id " + "WHERE global_reg_value.`str`='breaker_points' " + "ORDER BY CAST(`value` AS UNSIGNED) DESC LIMIT 10", .@name$, .@guild$, .@points; mes "[Top 10 Emp Breakers]"; mes "Rank, Name, Guild (break points)"; for (set .@i,0; .@i<getarraysize(.@name$); set .@i,.@i+1) { mes (.@i+1) +". ^0000FF"+ .@name$[.@i] +"^000000, "+ .@guild$[.@i] +" ("+ .@points[.@i] +((.@points[.@i]==1)?" pt":" pts")+")"; } break; case 2: mes "[Emp Break Ladder]"; mes "Total Emp Breaks: " + breaker_points; mes "Available Points: " + (breaker_points - breaker_tcg); if (breaker_points == 0) { mes "You have not broke the emp yet!"; } else if (breaker_points <= breaker_tcg) { mes "You've already exchanged all your points for TCG."; mes "Come back after you break the emp again!"; } else { set .@reward, breaker_points - breaker_tcg; if (select("Redeem points for "+.@reward+" TCG:Cancel") == 2) { mes "Come back if you change your mind."; } else if (checkweight(7227, .@reward) == 0) { mes "You are overweight or carrying too many items."; } else { getitem 7227, .@reward; set breaker_tcg, breaker_tcg + .@reward; mes "Here are your "+.@reward+" TCG!"; } } break; case 3: mes "[Emp Break Ladder]"; mes "Each time you break the emp, you earn 1 point."; mes "Then, talk to me to redeem your point(s) for TCG."; break; } close; } please make me a reset select menu based on this query or correct me DELETE FROM global_reg_value WHERE `str`='breaker_points'; Quote
Brian Posted February 17, 2013 Posted February 17, 2013 Sir, is it possible to reset the breaker points without stopping the map/char/login servers? Use this script snippet: // reset for offline chars query_sql "DELETE FROM global_reg_value WHERE `str`='breaker_points'"; query_sql "DELETE FROM global_reg_value WHERE `str`='breaker_tcg'"; // for each online char, reset breaker_points to 0 while (getusers(1) > .@count) { set .@count, .@count + query_sql("SELECT account_id FROM `char` WHERE online=1 LIMIT 128 OFFSET "+.@count, .@account_id); set .@i, 0; while (.@i < getarraysize(.@account_id)) { if (attachrid(.@account_id[.@i])) doevent strnpcinfo(3)+"::OnResetBreakerPoints"; set .@i, .@i +1; } deletearray .@account_id, 128; sleep 1; // prevent infinity loop } close; OnResetBreakerPoints: set breaker_points, 0; set breaker_tcg, 0; end; You could create a new menu within the NPC, or trigger that script snippet with an OnTime label, or make a separate GM npc that GMs could click or PM to reset the ladder -- however you want to do it. how to add job class on this script? http://rathena.kpaste.net/60f0ec?rawthe points will be receive whenever you destroyed the emperium and not just the last one who broke the emperium.Actually I misread the original request and forgot to make it "just the last one who broke the emp". Currently, the script records every empbreak.PS: another way (that allows resetting the ladder while the server is online) is store the "emp break points" in a new column in the `char` SQL table like this: http://trac.assembla.com/raijero/changeset/536/#file1 query_sql "UPDATE `char` SET `empbreak` = `empbreak`+1 WHERE `char_id` = "+ getcharid(0); 1 Quote
zmref Posted February 20, 2013 Author Posted February 20, 2013 Sir my client stops after I click the Reset Ladder here's the error Quote
Brian Posted February 20, 2013 Posted February 20, 2013 oops! I forgot to attachrid back to the invoking character. To fix, add these 2 lines so the fixed script looks like this: http://rathena.kpaste.net/60f0ec?raw 1 Quote
DJFUNK Posted March 2, 2013 Posted March 2, 2013 (edited) I've got an error sir: Edited March 2, 2013 by DJFUNK Quote
nanakiwurtz Posted March 2, 2013 Posted March 2, 2013 Change (.@job[.i@]) into (.@job[.@i]) in this line: mes (.@i+1) +". ^0000FF"+ .@name$[.@i] +"^000000, "+jobname(.@job[.i@])+", "+ .@guild$[.@i] +" ("+ .@points[.@i] +((.@points[.@i]==1)?" pt":" pts")+")"; 1 Quote
GM Takumirai Posted March 5, 2013 Posted March 5, 2013 how to change the need of points, example you need to get 5 points before you can trade 1 TCG? Quote
nanakiwurtz Posted March 5, 2013 Posted March 5, 2013 // http://rathena.org/board/topic/78486-breaker-rankings-npc/ // NPC that: // - displays top 10 emperium breaker (Rank, Char Name, Guild Name, Breaker Points) // - when a player was the last to break the emp after the WoE he will get 1 point // - selection which enables the player to trade their points into TCG (item id: 7227) // but their break points are still displayed prontera,155,188,0 script Emp Break Ladder 910,{ switch(select("View Emp Break Ladder:Redeem points for TCG:More Info:" + ((getgmlevel()>=99) ? "Reset Ladder":""))) { case 1: query_sql "SELECT `char`.`name`, `char`.`class`, guild.`name`, CAST(`value` AS UNSIGNED) " + "FROM global_reg_value " + "LEFT JOIN `char` ON global_reg_value.char_id=`char`.char_id " + "LEFT JOIN `guild` ON `char`.guild_id=guild.guild_id " + "WHERE global_reg_value.`str`='breaker_points' " + "ORDER BY CAST(`value` AS UNSIGNED) DESC LIMIT 10", .@name$, .@job, .@guild$, .@points; mes "[Top 10 Emp Breakers]"; for (set .@i,0; .@i<getarraysize(.@name$); set .@i,.@i+1) { mes (.@i+1) +". ^0000FF"+ .@name$[.@i] +"^000000, "+jobname(.@job[.i@])+", "+ .@guild$[.@i] +" ("+ .@points[.@i] +((.@points[.@i]==1)?" pt":" pts")+")"; } break; case 2: mes "[Emp Break Ladder]"; mes "Total Emp Breaks: " + breaker_points; mes "Available Points: " + (breaker_points - breaker_tcg); if (breaker_points == 0) { mes "You have not broke the emp yet!"; } else if (breaker_points <= breaker_tcg) { mes "You've already exchanged all your points for TCG."; mes "Come back after you break the emp again!"; } else if (breaker_points-breaker_tcg < 5) { mes "You need at least 5 breaker points to exchange for 1 TCG."; } else { set .@reward, (breaker_points-breaker_tcg)/5; if (select("Redeem points for "+.@reward+" TCG:Cancel") == 2) { mes "Come back if you change your mind."; } else if (checkweight(7227, .@reward) == 0) { mes "You are overweight or carrying too many items."; } else { getitem 7227, .@reward; set breaker_tcg, breaker_tcg + (.@reward*5); mes "Here are your "+.@reward+" TCG!"; } } break; case 3: mes "[Emp Break Ladder]"; mes "Each time you break the emp, you earn 1 point."; mes "Then, talk to me to redeem 5 points for 1 TCG."; break; case 4: if (getgmlevel() < 99) end; set .@AID, playerattached(); // reset for offline chars query_sql "DELETE FROM global_reg_value WHERE `str`='breaker_points'"; query_sql "DELETE FROM global_reg_value WHERE `str`='breaker_tcg'"; // for each online char, reset breaker_points to 0 while (getusers(1) > .@count) { set .@count, .@count + query_sql("SELECT account_id FROM `char` WHERE online=1 LIMIT 128 OFFSET "+.@count, .@account_id); set .@i, 0; while (.@i < getarraysize(.@account_id)) { if (attachrid(.@account_id[.@i])) doevent strnpcinfo(3)+"::OnResetBreakerPoints"; set .@i, .@i +1; } deletearray .@account_id, 128; sleep 1; // prevent infinity loop } attachrid .@AID; mes "Emp Break Ladder has been reset."; break; } close; OnResetBreakerPoints: set breaker_points, 0; set breaker_tcg, 0; end; } 1 Quote
Question
zmref
NPC that:
- displays top 10 emperium breaker (Rank, Char Name, Guild Name, Breaker Points)
- when a player was the last to break the emp after the WoE he will get 1 point
- selection which enables the player to trade their points into TCG (item id: 7227)
but their break points are still displayed
16 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.