Jump to content
  • 0

Adding a Time Info


fictionx

Question


  • Group:  Members
  • Topic Count:  30
  • Topics Per Day:  0.01
  • Content Count:  122
  • Reputation:   17
  • Joined:  12/10/12
  • Last Seen:  

¿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

Edited by fictionx
Link to comment
Share on other sites

1 answer to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  30
  • Topics Per Day:  0.01
  • Content Count:  122
  • Reputation:   17
  • Joined:  12/10/12
  • Last Seen:  

bump*

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...