Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // [========================================================]
- // [=========== The Invasor ===========]
- // [========================================================]
- // [ Version 10 ]
- // [========================================================]
- // [ Original script by: Ivion ]
- // [========================================================]
- - script invasor -1,{
- OnInit:
- // [========================================================]
- // [ Configuration: ]
- // [--------------------------------------------------------]
- set .t1,2*24; // Minimum time to activate a new invasion event. (h)
- set .t2,14*24; // Maximum time to activate a new invasion event. (h)
- set .t3,24*60; // Maximum duration of the invasion event. (min)
- set .r1,100; // Mob rate. (%)
- set .pci,7539; // Item reward dropped by mobs and bosses. (Default = Poring Coin)
- set .pcr1,100; // Rate of item rewards dropped by mobs. (0 = off | %)
- set .pcr2,100; // Rate of item rewards dropped by bosses. (0 = off | %)
- set .t4,60; // Duration of the experience event after defeating the invader armies. (0 = off | min)
- set .r2,100; // Base exp rate increment. (0 = off | %)
- set .r3,100; // Job exp rate increment. (0 = off | %)
- set .gm,60; // GM level required to access the Control Panel whispering to NPC:invasor.
- // Alternative Save Point:
- // If a player had saved in the map of the current invasion event, his respawn point will be changed to this one.
- set .s$,"prontera"; // Map.
- set .sx,156; // x.
- set .sy,161; // y.
- // Cities:
- // getarg(0): Name.
- // getarg(1): Map.
- // getarg(2): Intensity. (0 = off | Intensity)
- callsub Onc0,"Alberta","alberta",11;
- callsub Onc0,"Al De Baran","aldebaran",14;
- callsub Onc0,"Amatsu","amatsu",18;
- callsub Onc0,"Ayothaya","ayothaya",8;
- callsub Onc0,"Brasilis","brasilis",27;
- callsub Onc0,"Comodo","comodo",22;
- callsub Onc0,"Einbech","einbech",11;
- callsub Onc0,"Einbroch","einbroch",22;
- callsub Onc0,"El Dicastes","dicastes01",14;
- callsub Onc0,"Geffen","geffen",10;
- callsub Onc0,"Gonryun","gonryun",14;
- callsub Onc0,"Hugel","hugel",9;
- callsub Onc0,"Izlude","izlude",5;
- callsub Onc0,"Jawaii","jawaii",0; // 7
- callsub Onc0,"Juno","yuno",30;
- callsub Onc0,"Lighthalzen","lighthalzen",24;
- callsub Onc0,"Louyang","louyang",27;
- callsub Onc0,"Lutie","xmas",20;
- callsub Onc0,"Manuk","manuk",8;
- callsub Onc0,"Midgarts Expedition Camp","mid_camp",13;
- callsub Onc0,"Morroc","morocc",26;
- callsub Onc0,"Moscovia","moscovia",6;
- callsub Onc0,"Niflheim","niflheim",0; // 20
- callsub Onc0,"Payon","payon",19;
- callsub Onc0,"Prontera","prontera",0; // 30
- callsub Onc0,"Rachel","rachel",18;
- callsub Onc0,"Splendide","splendide",29;
- callsub Onc0,"Umbala","umbala",4;
- callsub Onc0,"Veins","veins",20;
- // Invaders:
- // getarg(0): Name.
- // getarg(1 .. 9): Mobs.
- // getarg(10 .. 12): Bosses.
- callsub Onc1,"Aqua",1001,1002,1002,1002,1002,1001,1002,1001,1002,1001,1002;
- // callsub Onc1,"Aqua",1068,1071,1228,1069,1044,1144,1045,1065,1264,2503,2504,2505;
- // callsub Onc1,"Demon",1146,1109,1101,1149,1632,1773,1382,1292,1208,2536,2537,2538;
- // callsub Onc1,"Dragon",1715,1718,1155,1380,1206,1385,1717,1714,1716,2524,2525,2526;
- // callsub Onc1,"Earth",1784,1782,1165,1517,1615,1516,1378,1386,1602,2512,2513,2514;
- // callsub Onc1,"Fire",1836,1367,1383,1072,1384,1381,1318,1837,1366,2500,2501,2502;
- // callsub Onc1,"Ghost",1509,1179,1186,1143,1510,1192,1506,1375,1291,2527,2528,2529;
- // callsub Onc1,"Ice",1243,1789,1776,1778,1323,1317,1775,1515,1319,2506,2507,2508;
- // callsub Onc1,"Insect",1054,1100,1139,1279,1099,1625,1304,1194,1305,2518,2519,2520;
- // callsub Onc1,"Kaos",1140,1508,1163,1276,1504,1132,1698,1505,1507,2539,2540,2541;
- // callsub Onc1,"Machina",1151,1616,1745,1682,1270,1622,1202,1678,1673,2515,2516,2517;
- // callsub Onc1,"Nature",1162,1118,1880,1500,1497,1410,1780,1884,1314,2509,2510,2511;
- // callsub Onc1,"Takeshi",1026,1188,1404,1584,1609,1512,1416,1405,1401,2542,2543,2544;
- // callsub Onc1,"Undead",1403,1169,1041,1196,1197,1117,1297,1866,1098,2533,2534,2535;
- // callsub Onc1,"Venom",1621,1256,1037,1402,1209,1216,1207,1883,1148,2521,2522,2523;
- // callsub Onc1,"Wind",1627,1156,1253,1263,1633,1692,1412,1774,1259,2530,2531,2532;
- // [--------------------------------------------------------]
- // [ End of configuration. ]
- // [========================================================]
- // Restore experience rates:
- if(checkcell("prontera",0,0,cell_water)) {
- setbattleflag "base_exp_rate",getbattleflag("base_exp_rate") - $TIbr;
- setbattleflag "job_exp_rate",getbattleflag("job_exp_rate") - $TIjr;
- set $TIbr,0;
- set $TIjr,0;
- setcell "prontera",0,0,0,0,cell_water,0;
- atcommand "@reloadmobdb";
- }
- // Fix incorrect map cells:
- setcell "amatsu",314,267,314,314,0,0;
- setcell "yuno",205,219,205,218,0,0;
- while(1) {
- set .a,0; // Stage.
- set .b,0; // Class.
- set .c,0; // City.
- set .@t,gettimetick(2) / 60;
- if($TIt <= .@t) set $TIt,.@t + rand(.t1 * 60,.t2 * 60);
- do {
- if(($TIt - .@t) / (24 * 60)) sleep 24 * 60 * 60 * 1000;
- else sleep ($TIt - .@t) * 60 * 1000;
- set .@t,gettimetick(2) / 60;
- } while(.@t < $TIt);
- set .a,1;
- set $TIt,0;
- set .@t,0;
- donpcevent "invasor::OnTimer";
- if(!.b) set .b,rand(1,getarraysize(.i));
- set .b,.b - 1;
- if(!.c) set .c,rand(1,getarraysize(.n$));
- set .c,.c - 1;
- set .mf1,getmapflag(.c2$[.b],1);
- set .mf4,getmapflag(.c2$[.b],4);
- setmapflag .c2$[.b],1; // noteleport
- setmapflag .c2$[.b],4; // nopenalty
- callsub Clrmsg;
- announce "S.O.S.!! "+.c1$[.b]+" is suffering from a terrible invasion.",bc_all,0xffaa00;
- while(.a > 0) {
- if(!.d) {
- set .d,4 - .a;
- killmonster .c2$[.b],"invasor::Onm9";
- if(.a > 1) callsub Addmsg,"New invader armies comes into the city.","ffaa00",.c2$[.b];
- monster .c2$[.b],0,0,"--ja--",getd(".m"+((.c * 12) + .a + 8)),4 - .a,"invasor::Onm9";
- }
- set .@a,3;
- while(.@a) {
- set .@b,(.i[.b] * .r1 / 20) - mobcount(.c2$[.b],"invasor::Onm"+((.a * 3) - .@a)) + 10;
- if(.@b > 0) {
- if(.@b > .i[.b]) set .@b,.i[.b];
- monster .c2$[.b],0,0,"--ja--",getd(".m"+((.c * 12) + (.a * 3) - .@a)),.@b,"invasor::Onm"+((.a * 3) - .@a);
- }
- set .@a,.@a - 1;
- }
- set .@b,0;
- sleep 30000;
- }
- set .d,0;
- set .@a,10;
- while(.@a) {
- set .@a,.@a - 1;
- killmonster .c2$[.b],"invasor::Onm"+.@a;
- }
- if(!.mf1) removemapflag .c2$[.b],1;
- if(!.mf4) removemapflag .c2$[.b],4;
- set .mf1,0;
- set .mf4,0;
- if(.a == -1) {
- callsub Addmsg,"Base and Job experience rates are increased by "+.r2+"%. ("+.t4+" min)","ffaa00";
- setbattleflag "base_exp_rate",getbattleflag("base_exp_rate") + set($TIbr,.r2);
- setbattleflag "job_exp_rate",getbattleflag("job_exp_rate") + set($TIjr,.r3);
- setcell "prontera",0,0,0,0,cell_water,1;
- atcommand "@reloadmobdb";
- sleep .t4 * 60 * 1000;
- setbattleflag "base_exp_rate",getbattleflag("base_exp_rate") - .r2;
- setbattleflag "job_exp_rate",getbattleflag("job_exp_rate") - .r3;
- set $TIbr,0;
- set $TIjr,0;
- setcell "prontera",0,0,0,0,cell_water,0;
- atcommand "@reloadmobdb";
- announce "The experience rates has been restored.",bc_all,0xffaa00;
- }
- }
- end;
- Onc0:
- if(getarg(2) > 0) {
- set .c1$[.c],getarg(0);
- set .c2$[.c],getarg(1);
- set .i[.c],getarg(2);
- set .c,.c + 1;
- }
- return;
- Onc1:
- set .@a,getarraysize(.n$);
- set .n$[.@a],getarg(0);
- while(.@b < 12) {
- set getd(".m"+((.@a * 12) + .@b)),getarg(.@b + 1);
- set .@b,.@b + 1;
- }
- return;
- OnTimer:
- sleep .t3 * 60 * 1000;
- if(.a > 0) {
- set .a,0;
- awake "invasor";
- callsub Clrmsg;
- callsub Addmsg,"The defences in "+.c1$[.b]+" have been defeated by the invader armies.","ffaa00";
- callsub Addmsg,"Today will be remembered as a black day for the server.","ffaa00";
- }
- end;
- Onm0:
- OnM1:
- OnM2:
- callsub Onms,1;
- OnM3:
- OnM4:
- OnM5:
- callsub Onms,2;
- OnM6:
- OnM7:
- OnM8:
- callsub Onms,3;
- Onms:
- if(playerattached() && .pcr1)
- if(!rand((5 - getarg(0)) * 2500 / .pcr1)) getitem .pci,1;
- end;
- OnM9:
- if(.a > 0) {
- set .d,.d - 1;
- if(.a != 3) {
- setarray .@a$[0],"Sbirro","Hero";
- set .@b$,callsub(Grammar_a_an,.n$[.c])+" "+.@a$[.a - 1];
- if(playerattached()) {
- set .@c$,strcharinfo(0)+" has killed a"+.@b$+".";
- getitem .pci,(1 + .a) * 10 * .pcr2 / 100;
- }
- else set .@c$,"A"+.@b$+" has been killed.";
- callsub Addmsg,.@c$+" ("+(4 - .a - .d)+"/"+(4 - .a)+")","ffaa00",.c2$[.b];
- if(!.d) set .a,.a + 1;
- }
- else {
- if(playerattached()) {
- set .@a$,strcharinfo(0)+" has killed the "+.n$[.c]+" Deux.";
- getitem .pci,60 * .pcr2 / 100;
- }
- else set .@a$,"The "+.n$[.c]+" Deux has been killed.";
- callsub Addmsg,.@a$,"ffaa00",.c2$[.b];
- callsub Addmsg,"The invader armies in "+.c1$[.b]+" has been defeated.","ffaa00";
- if(.t4 && .r2) set .a,-1;
- else set .a,0;
- awake "invasor";
- }
- }
- end;
- OnPCLoginEvent:
- if(.a > 0) {
- sleep2 3000;
- if(.a > 0) announce " S.O.S.!! "+.c1$[.b]+" is suffering from a terrible invasion.",bc_self,0xffaa00;
- }
- else if(.a == -1) {
- sleep2 3000;
- if(.a == -1) announce "Base and Job experience rates are increased by "+.r2+"%.",bc_self,0xffaa00;
- }
- end;
- OnPCDieEvent:
- if((.a > 0) && (getsavepoint(0) == .c2$[.b])) savepoint .s$,.sx,.sy;
- end;
- OnWhisperGlobal:
- if(getgmlevel() >= .gm) {
- set .@n$,"^008888The Invasor^000000";
- mes .@n$;
- mes "This is the Control Panel of The Invasor system.";
- if(!.a) {
- mes "Currently there isn't any invasion in progress.";
- set .@t,$TIt - (gettimetick(2) / 60);
- if(!.@t) set .@t$,"a few seconds";
- else if(.@t < 60) set .@t$,.@t+" minutes";
- else {
- set .@t,.@t / 60;
- if(.@t < 24) set .@t$,.@t+" hours";
- else set .@t$,(.@t / 24)+" days";
- }
- mes "Next automatic invasion event will take place in "+.@t$+".";
- next;
- set .@b,select("^880000Exit^000000","Start a new invasion.") - 1;
- mes .@n$;
- if(.@b) {
- mes "Select a city.";
- next;
- set .@a,select("^880000Random^000000",.c1$[0],.c1$[1],.c1$[2],.c1$[3],.c1$[4],.c1$[5],.c1$[6],.c1$[7],.c1$[8],.c1$[9],.c1$[10],.c1$[11],.c1$[12],.c1$[13],.c1$[14],.c1$[15],.c1$[16],.c1$[17],.c1$[18],.c1$[19],.c1$[20],.c1$[21],.c1$[22],.c1$[23],.c1$[24],.c1$[25],.c1$[26],.c1$[27],.c1$[28],.c1$[29],.c1$[30],.c1$[31],.c1$[32],.c1$[33],.c1$[34],.c1$[35],.c1$[36],.c1$[37],.c1$[38],.c1$[39]) - 1;
- mes .@n$;
- mes "Select a class for the invasion.";
- next;
- set .@b,select("^880000Random^000000",.n$[0],.n$[1],.n$[2],.n$[3],.n$[4],.n$[5],.n$[6],.n$[7],.n$[8],.n$[9],.n$[10],.n$[11],.n$[12],.n$[13],.n$[14],.n$[15],.n$[16],.n$[17],.n$[18],.n$[19],.n$[20],.n$[21],.n$[22],.n$[23],.n$[24]) - 1;
- mes .@n$;
- if(.a) {
- mes "Right now, you can't start a new invasion event.";
- mes "Come back in a while.";
- close;
- }
- set $TIt,0;
- set .b,.@a;
- set .c,.@b;
- awake "invasor";
- mes "A new invasion event has been started.";
- close;
- }
- }
- else if(.a > 0) {
- mes "Currently there is a"+callsub(Grammar_a_an,.n$[.c])+" invasion taking place in "+.c1$[.b]+".";
- next;
- set .@b,select("^880000Exit^000000","Cancel the current invasion.") - 1;
- mes .@n$;
- if(.@b) {
- if(.a < 1) {
- mes "Currently there isn't any invasion in progress.";
- close;
- }
- set .a,0;
- announce "The invasion in "+.c1$[.b]+" has been canceled.",bc_all,0xffaa00;
- mes "The invasion in "+.c1$[.b]+" has been canceled.";
- awake "invasor";
- close;
- }
- }
- else {
- mes "Base and Job experience rates are increased by "+.r2+"% as a reward for the previous invasion.";
- next;
- set .@b,select("^880000Exit^000000","Restore the experience rates.") - 1;
- mes .@n$;
- if(.@b) {
- if(.a != -1) {
- mes "Currently the experience rates aren't modified by The Invasor system.";
- close;
- }
- awake "invasor";
- mes "The experience rates has been restored.";
- close;
- }
- }
- mes "See you soon.";
- close;
- }
- end;
- // Add a new message to the announcement list:
- // getarg(0): Message.
- // getarg(1): Color.
- // getarg(2): Map. (optional)
- Addmsg:
- set .@a,getarraysize($@inv_msg0$);
- if(.@a >= 10) {
- deletearray $@inv_msg0$[0],.@a - 9;
- set .@a,9;
- }
- set $@inv_msg0$[.@a],getarg(0);
- set $@inv_msg1$[.@a],getarg(1);
- set $@inv_msg2$[.@a],getarg(2,"");
- if(!.@a) donpcevent "inv_msg::On0";
- return;
- // Clear the announcement list:
- Clrmsg:
- set .@a,getarraysize($@inv_msg0$);
- cleararray $@inv_msg0$[0],"",.@a;
- cleararray $@inv_msg1$[0],"",.@a;
- cleararray $@inv_msg2$[0],"",.@a;
- awake "inv_msg";
- return;
- Grammar_a_an:
- set .@w$," "+getarg(0);
- setarray .@a$[0],"a","e","i","o","u","h";
- set .@a,6;
- while(.@a && !.@b) {
- set .@a,.@a - 1;
- set .@b,compare("_"+.@w$,"_ "+.@a$[.@a]);
- }
- if(.@b) set .@w$,"n"+.@w$;
- return .@w$;
- }
- // Delayed announcements:
- // Announces a message from the announcement list every 3 seconds.
- - script inv_msg -1,{
- On0:
- while(getarraysize($@inv_msg0$)) {
- if($@inv_msg2$[0] == "") announce $@inv_msg0$[0],bc_all,"0x"+$@inv_msg1$[0];
- else mapannounce $@inv_msg2$[0],$@inv_msg0$[0],bc_all,"0x"+$@inv_msg1$[0];
- if(getarraysize($@inv_msg0$)) sleep 3000;
- deletearray $@inv_msg0$[0],1;
- deletearray $@inv_msg1$[0],1;
- deletearray $@inv_msg2$[0],1;
- }
- end;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement