viewing paste Unknown #663 | C

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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
// Configure 'flagmaps' table using this custom flags
// 1: PvP
// 2: PvP No Party
// 4: PvP No Guild
// 8: GvG
// 16: GvG No Party
// 32: No Skill
// 64: Nightmare Drops (only rAthena)
 
// Function to Set / Unset the World Map Flags
function        script  applyMapFlags   {
        set $@MapFlagStatus,getarg(0);
        set .@Cnt,0;
        do {
                set .@Rows, query_sql("select map, flag from flagmaps where flag > 0 limit " + .@Page + ",100", .@Map$, .@Flags);
                set .@Flag, .@Flags[0];
                for (set .@x,0; .@x < .@Rows; set .@x, .@x + 1) {
                        set .@SelectedMap$, .@Map$[.@x];
                        if ($@MapFlagStatus) {
                                if (.@Flag & 1) setmapflag .@SelectedMap$, mf_pvp;
                                if (.@Flag & 2) setmapflag .@SelectedMap$, mf_pvp_noparty;
                                if (.@Flag & 4) setmapflag .@SelectedMap$, mf_pvp_noguild;
                                if (.@Flag & 8) setmapflag .@SelectedMap$, mf_gvg;
                                if (.@Flag & 16) setmapflag .@SelectedMap$, mf_gvg_noparty;
                                if (.@Flag & 32) setmapflag .@SelectedMap$, mf_noskill;
                                if (.@Flag & 64) setmapflag .@SelectedMap$, mf_nightmaredrop;
                        } else {
                                if (.@Flag & 1) removemapflag .@SelectedMap$, mf_pvp;
                                if (.@Flag & 2) removemapflag .@SelectedMap$, mf_pvp_noparty;
                                if (.@Flag & 4) removemapflag .@SelectedMap$, mf_pvp_noguild;
                                if (.@Flag & 8) removemapflag .@SelectedMap$, mf_gvg;
                                if (.@Flag & 16) removemapflag .@SelectedMap$, mf_gvg_noparty;
                                if (.@Flag & 32) removemapflag .@SelectedMap$, mf_noskill;
                                if (.@Flag & 64) removemapflag .@SelectedMap$, mf_nightmaredrop;
                        }
                }
                set .@Page, .@Page + 100; // Move to the Next Page
        } while(.@Rows);
        return;
}
 
// Broadcast
-       script  MFBC    -1,{
        OnInit:
                setarray .msgs$[0],
                        "The night is slowly taking over Rune midgard.","^FF4848",
                        "Weaklings and cowards stay in towns, while fierce warriors grab their weapons and prepare for bloody fights....","^FF4848",
                        "Players whose level is lower than lv40 can't kill/be killed by other players during NMM","^0080FF";
                end;
        Ontimer1000:
                for (set .@m,0; .@m < getarraysize(.msgs$); set .@m, .@m + 2) {
                        announce .msgs$[.@m],bc_all,.msgs$[.@m + 1];
                        sleep 5000;
                }
                stopnpctimer;
}
 
// Map Flag Manager
-       script  MFM     -1,{
        ceroLeft:
                set .@Num$, getarg(0);
                while (getstrlen(.@Num$) < getarg(1)) {
                        set .@Num$, "0" + .@Num$;
                }
                return .@Num$;
        setRates:
                setbattleflag "base_exp_rate", getarg(0);
                setbattleflag "job_exp_rate", getarg(1);
                atcommand "@reloadmobdb";
                return;
        OnInit:
                set .baseexp, getbattleflag("base_exp_rate");
                set .jobexp, getbattleflag("job_exp_rate");
       
                // Sample Configuration: These pairs of numbers are hours with minutes
            // (23:00 to 00:00 - 00:00 to 03:30 - 15:47 to 15:48)
            // Don't mix hours of two days (ie: "2300","0330") because doesn't work, in this cases add 2 consecutive ranges: "2300","2359","0000","0100"
                setarray .Changes$[0],"0300","0315","0600","0615","0900","0915","1200","1215","1500","1515","1800","1815","2100","2115","0000","0015","2202","2235";
                set .Count, getarraysize(.Changes$);
       
                sleep 2000;
 
        OnWhisperGlobal:
        OnTimer60000: // Check every 1 minute (support restarts)
                set .@PKEnable,0;
                for (set .@x,0; .@x < .Count; set .@x, .@x + 2) {
                        set .@CurrentHour$, callsub(ceroLeft,gettime(3),2) + callsub(ceroLeft,gettime(2),2);
                        set .@Hour1$, .Changes$[.@x];
                        set .@Hour2$, .Changes$[.@x + 1];
 
                        // If this is a valid range...
                        if (.@CurrentHour$ >= .@Hour1$ && .@CurrentHour$ <= .@Hour2$) {
                                set .@PKEnable,1;
                                if (!$@MapFlagStatus) {
                                        night;
                                        initnpctimer "MFBC"; // Broadcast in a separated thread
                                        debugmes "[" + .@CurrentHour$ + "] Enabling Nightmare Flags [" + .@Hour1$ + " to " + .@Hour2$ + "]";
                                        callfunc "applyMapFlags",1; // Activating Map Flags
                                        mapwarp "pvp_y_1-2","prontera",155,180; //warps the players in the pvp map
                                        callsub setRates, (2 * .baseexp), (2 * .jobexp);
                                }
                        }
                }
                // If there are not valid ranges but the nightmare mode is enabled...
                if (!.@PKEnable && $@MapFlagStatus) {
                        debugmes "[" + .@CurrentHour$ + "] Disabling Nightmare Flags [" + .@Hour1$ + " to " + .@Hour2$ + "]";
                        callfunc "applyMapFlags",0; // Disabling Map Flags
                        day;
                        announce "Nightmares: A new day is starting, you had sweet dreams ? Nightmare Mode deactivated! .",bc_all;
                        callsub setRates, .baseexp, .jobexp;
                }
                initnpctimer;
                end;
               
OnPCDieEvent:
                if (!$@MapFlagStatus) end;
                callfunc "PenaltyBaseExp", (killerrid > 1999999?2:1);
}
 
function        script  PenaltyBaseExp  {
        if (BaseExp) {
                set BaseExp, BaseExp - (BaseExp / 100 * getarg(0));
                announce "~ Nightmare Penalty: -" + getarg(0) + "% Base Exp", bc_self, 0xEAC8E7;
        }
        return;
}
Viewed 346 times, submitted by Myzter.