viewing paste Unknown #17440 | Athena

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
// 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;
}
Viewed 584 times, submitted by Guest.