¿Hi how can i add timer invasion?
I want a NPC that show when the invasion will be start.
There is the scripts :
- 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",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(!. 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) + .@),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])) save .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(.@ {
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(.@ {
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(.@ {
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 && !.@ {
set .@a,.@a - 1;
set .@b,compare("_"+.@w$,"_ "+.@a$[.@a]);
}
if(.@ 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;
}
Thanks in advance