Jump to content
  • 0
Sign in to follow this  
jaBote

Making Ivion mob invasion script compatible with Hercules

Question

Hello.

 

This topic is forwarded from this Spanish Support topic, on its script section: compatibilizar invacion de Ivion

 

User says this script won't work in Hercules because when an invasion starts, it instantly ends. I haven't been able to spot the issue on its code (couldn't test since my local MySQL engine is broken for good) and it parses OK according to Haru's script checker.

 

Script is quite old (ancient I'd say :P) and obfuscated, but to my knowledge it's allowed to be redistributed and edited without any problems.

 

Here's a copy of the script:

 

//// [========================================================]// [===========           The Invasor            ===========]// [========================================================]// [ Version 8                                              ]// [========================================================]// [ Original script by: Ivion                              ]// [========================================================]// [ Description:                                           ]// [--------------------------------------------------------]// [                                                        ]// [ - Automatic invasion events.                           ]// [ - 24 randomly selected cities.                         ]// [ - 15 different types of invasion.                      ]// [ - Invasion events are divided into 3 difficulty stages.]// [ - GM Control Panel whispering to NPC:invasor.          ]// [========================================================]// [ Changelog: (5 last updates)                            ]// [--------------------------------------------------------]// [                                                        ]// [ v4: [Ivion]                                            ]// [ - Nuevos mobs balanceados, añadidos a la db.           ]// [ - 2 nuevos tipos de invasiones.                        ]// [ - Ahora los mobs dropean items.                        ]// [ - Recompensas y penalizaciones globales.               ]// [ - Acceso ingame mediante OnWhisperGlobal.              ]// [ - Nuevas opciones de configuración.                    ]// [ - Reescrito casi todo el código.                       ]// [                                                        ]// [ v5: [Ivion]                                            ]// [ - Varios bugfixes.                                     ]// [ - Optimización del script.                             ]// [ - Añadido mid_camp.                                    ]// [ - Nuevos mobs sin tanta db.                            ]// [ - Nuevos bosses.                                       ]// [ - Nuevas invasiones: Ice, Nature, Dragon, Kaos y       ]// [   Takeshi.                                             ]// [ - Incremento de rates del servidor a +20%.             ]// [ - Retirado el sistema de penalizaciones.               ]// [ - Los spawns no disminuirán al matar los bosses.       ]// [ - Sistema para Save Point alternativo.                 ]// [                                                        ]// [ v5.1: [Ivion]                                          ]// [ - Bugfix: Corregido un pequeño error en mob_db2 que    ]// [   producía errores en el map-server.                   ]// [                                                        ]// [ v6: [Ivion]                                            ]// [ - Translated into english.                             ]// [ - Added new 13.2 episode cities.                       ]// [ - Global delayed announcements system.                 ]// [ - Rates increment won't affect other possible bonnuses ]// [   from other scripts.                                  ]// [ - Bugfix: Mapflags used while the invasion event will  ]// [   be cleared according to their inicial state.         ]// [ - Some mobs has been replaced.                         ]// [ - Bugfix: Removed Ghoul and Angeling mobs from the 3rd ]// [   stage of the Undead invasion.                        ]// [ - Some bosses has been replaced.                       ]// [ - Some balance adjustments to the stats of the bosses. ]// [ - Bugfix: Some bosses had range2 = 0.                  ]// [ - The control panel won't be displayed to              ]// [   multiple gms at once.                                ]// [ - Mobs and bosses will drop Poring Coins.              ]// [                                                        ]// [ v7: [Ivion]                                            ]// [ - Bugfix: Incorrect map cells in Amatsu and Juno.      ]// [ - Added teleport skill to the bosses.                  ]// [ - Updated the skills of the 13.1 monsters.             ]// [                                                        ]// [ v8: [Ivion]                                            ]// [ - The init timer won't reset when reloading scripts.   ]// [ - Added some information about the invasion progress in]// [   the GMs Control Panel.                               ]// [========================================================]// [ http://www.eathena.ws/board/index.php?showtopic=224056 ]// [========================================================]-	script	invasor	-1,{OnInit:// [========================================================]// [ Configuration:                                         ]// [--------------------------------------------------------]	set .t1,2*24;		// Minimum time to activate a new invasion event. (h)	set .t2,4*24;		// Maximum time to activate a new invasion event. (h)	set .t3,24*120;		// Maximum duration of the invasion event. (min)	set .r1,50000;			// Mob rate. (%)	set .pci,8905;		// Item reward dropped by mobs and bosses. (Default = Poring Coin)	set .pcr1,1;		// Rate of item rewards dropped by mobs. (0 = off | %)	set .pcr2,10;		// Rate of item rewards dropped by bosses. (0 = off | %)				// After successfully completing the invasion, the experience rates will be increased for a time.	set .t4,60;		// Duration of the experience event. (0 = off | min)	set .r2,30;		// Experience rates 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,"Comodo","comodo",22;	callsub Onc0,"Einbech","einbech",11;	callsub Onc0,"Einbroch","einbroch",22;	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",25;	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;	// Invasion types:	// getarg(0): Name.	// getarg(1 .. 9): Mobs.	// getarg(10 .. 12): Bosses.	callsub Onc1,"Aqua",1068,1071,1071,1069,1044,1144,1045,1065,1264,1894,2016,1112;	callsub Onc1,"Demon",1146,1109,1101,1149,1632,1773,1382,1292,1208,1920,1389,1929;	callsub Onc1,"Dragon",1715,1718,1155,1380,1206,1385,1717,1714,1716,1262,1720,2022;	callsub Onc1,"Earth",1784,1782,1165,1517,1615,1516,1378,1386,1602,1919,1785,1916;	callsub Onc1,"Fire",1836,1367,1383,1072,1384,1381,1318,1837,1366,1833,1831,1832;	callsub Onc1,"Ghost",1509,1179,1186,1143,1510,1192,1506,1375,1291,1704,1921,1768;	callsub Onc1,"Ice",1243,1789,1776,1778,1323,1317,1775,1515,1319,1777,1252,1779;	callsub Onc1,"Insect",1054,1100,1139,1279,1099,1625,1304,1194,1305,1618,2087,1147;	callsub Onc1,"Kaos",1140,1508,1163,1276,1504,1132,1698,1505,1507,1702,1268,2018;	callsub Onc1,"Machina",1151,1616,1745,1682,1270,1622,1202,1678,1673,1978,1623,1685;	callsub Onc1,"Nature",1162,1118,1880,1500,1497,1410,1780,1884,1314,1991,1885,1957;	callsub Onc1,"Takeshi",1026,1188,1404,1584,1609,1512,1416,1405,1401,1518,1492,1418;	callsub Onc1,"Undead",1403,1169,1041,1196,1197,1117,1297,1866,1098,1870,1038,1373;	callsub Onc1,"Venom",1621,1256,1037,1402,1209,1216,1207,1883,1148,1987,1871,1874;	callsub Onc1,"Wind",1627,1156,1253,1263,1633,1692,1412,1774,1259,1992,1918,1931;	//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.                                  ]// [========================================================]	set .br,getbattleflag("base_exp_rate");	set .jr,getbattleflag("job_exp_rate");	// Fix incorrect map cells:	setcell "amatsu",314,267,314,314,0,0;	setcell "yuno",205,219,205,218,0,0;	donpcevent "invasor::On0";	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;On0:	while(1) {		set .a,0;		set .b,0;		set .c,0;		set .@t,gettimetick(2) / 60;		if($TIt <= .@t) set $TIt,.@t + rand(.t1 * 60,.t2 * 60);		sleep ($TIt - .@t) * 60 * 1000;		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]+" ESTA SUFRIENDO UNA TERRIBLE INVACION!!!.",bc_all,0xffaa00;		while(.a > 0) {			if(!.d) {				set .d,4 - .a;				killmonster .c2$[.b],"invasor::onm9";				if(.a > 1) callsub Addmsg,"Los ejércitos invasores nuevamente entran en la ciudad.","ffaa00",.c2$[.b];				monster .c2$[.b],0,0,"--ja--",getd(".m"+((.c * 12) + .a + 8)),4 - .a,"invasor::onm9";			}			if(mobcount(.c2$[.b],"invasor::onm"+((.a * 3) - 3)) < (.i[.b] * .r1 / 20)) monster .c2$[.b],0,0,"--ja--",getd(".m"+((.c * 12) + (.a * 3) - 3)),.i[.b],"invasor::onm"+((.a * 3) - 3);			if(mobcount(.c2$[.b],"invasor::onm"+((.a * 3) - 2)) < (.i[.b] * .r1 / 20)) monster .c2$[.b],0,0,"--ja--",getd(".m"+((.c * 12) + (.a * 3) - 2)),.i[.b],"invasor::onm"+((.a * 3) - 2);			if(mobcount(.c2$[.b],"invasor::onm"+((.a * 3) - 1)) < (.i[.b] * .r1 / 20)) monster .c2$[.b],0,0,"--ja--",getd(".m"+((.c * 12) + (.a * 3) - 1)),.i[.b],"invasor::onm"+((.a * 3) - 1);			if(.a > 0) sleep 20000;		}		set .d,0;		set .@a,12;		while(.@a > 0) {			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,"Recompensa: Experiencia aumento de rates a "+.r2+"%. ("+.t4+" min)","ffaa00";			setbattleflag "base_exp_rate",getbattleflag("base_exp_rate") + (.br * .r2 / 100);			setbattleflag "job_exp_rate",getbattleflag("job_exp_rate") + (.jr * .r2 / 100);			sleep .t4 * 60 * 1000;			setbattleflag "base_exp_rate",getbattleflag("base_exp_rate") - (.br * .r2 / 100);			setbattleflag "job_exp_rate",getbattleflag("job_exp_rate") - (.jr * .r2 / 100);			announce "Los rates de la experiencia ha sido restaurados.",bc_all,0xffaa00;		}	}	end;onm0:onm1:onm2:	if(playerattached() && .pcr1) if(!rand(100 * 100 / .pcr1)) getitem .pci,1;	end;onm3:onm4:onm5:	if(playerattached() && .pcr1) if(!rand(75 * 100 / .pcr1)) getitem .pci,1;	end;onm6:onm7:onm8:	if(playerattached() && .pcr1) if(!rand(50 * 100 / .pcr1)) getitem .pci,1;	end;onm9:	if(.a < 1) end;	set .d,.d - 1;	if(.a != 3) {		if(.a == 1) set .@a$,"Sbirro";		if(.a == 2) set .@a$,"Hero";		set .@b$,callsub(Grammar_a_an,.n$[.c]);		if(playerattached()) {			set .@a$,strcharinfo(0)+" ha muerto "+.@b$+" "+.n$[.c]+" "+.@a$+".";			if(.a == 1) getitem .pci,2 * .pcr2 / 100;			if(.a == 2) getitem .pci,3 * .pcr2 / 100;		}		else set .@a$,.@b$+" "+.n$[.c]+" "+.@a$+" haz sido asesinado.";		callsub Addmsg,.@a$+" ("+(4 - .a - .d)+"/"+(4 - .a)+")","ffaa00",.c2$[.b];		if(!.d) set .a,.a + 1;	}	else {		if(playerattached()) {			set .@a$,strcharinfo(0)+" ha matado a la "+.n$[.c]+" Deux.";			getitem .pci,1 * .pcr2 / 100;		}		else set .@a$,"El "+.n$[.c]+" Deux a sido asesinado.";		callsub Addmsg,.@a$,"ffaa00",.c2$[.b];		callsub Addmsg,"El ejército invasor de "+.c1$[.b]+" ha sido derrotado.","ffaa00";		if(.t4 && .r2) set .a,-1;		else set .a,0;		awake "invasor";	}	end;OnTimer:	sleep .t3 * 120 * 1000;	if(.a < 1) end;	set .a,0;	awake "invasor";	callsub Clrmsg;	callsub Addmsg,"Las defensas de "+.c1$[.b]+" han sido derrotadas por los ejércitos invasores.","ffaa00";	callsub Addmsg,"Hoy será recordado como un día negro para el servidor Apolo-RO /sob.","ffaa00";	end;OnPCLoginEvent:	if(.a > 0) {		sleep2 3000;		if(.a > 0) announce "¡¡S.O.S.!! "+.c1$[.b]+" está sufriendo de una terrible invasión.",bc_self,0xffaa00;	}	else if(.a == -1) {		sleep2 3000;		if(.a == -1) announce "La experiencia de rates ha sido aumentada a "+.r2+"%.",bc_self,0xffaa00;	}	end;OnPCDieEvent:	if((.a > 0) && (getsavepoint(0) == .c2$[.b])) save .s$,.sx,.sy;	end;OnWhisperGlobal:	if(getgmlevel() < .gm) end;	set .@n$,"^008888The Invasor^000000";	mes .@n$;	mes "Este es el panel de control del sistema de Invasor.";	if(!.a) {		mes "Actualmente no hay ninguna invasión en curso.";		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 "Próximo evento de la invasión automática tendrá lugar en "+.@t$+".";		next;		set .@b,select("^880000Exit^000000","Start 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]);			mes .@n$;			set .@a,.@a - 1;			mes "Seleccione una clase para la invasión.";			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]);			mes .@n$;			set .@b,.@b - 1;			if(.a) {				mes "En este momento, no se puede iniciar una nueva invasión.";				mes "Regresa mas tarde.";				close;			}			set .b,.@a;			set .c,.@b;			awake "invasor";			mes "Una nueva invasión se ha iniciado.";			close;		}	}	else if(.a > 0) {		mes "Actualmente no existe "+callsub(Grammar_a_an,.n$[.c])+" "+.n$[.c]+" invasión que tienen lugar en "+.c1$[.b]+".";		next;		set .@b,select("^880000Exit^000000","Cancelar la actual invasión.") - 1;		mes .@n$;		if(.@ {			if(.a < 1) {				mes "Actualmente no hay ninguna invasión en curso.";				close;			}			set .a,0;			announce "La invasion en "+.c1$[.b]+" ha sido cancelada.",bc_all,0xffaa00;			mes "la invasion en "+.c1$[.b]+" ha sido cancelada.";			awake "invasor";			close;		}	}	else {		mes "Experiencia de rates aumentada "+.r2+"% como una recompensa por la invasión anterior.";		next;		set .@b,select("^880000Exit^000000","Restaurar rates.") - 1;		mes .@n$;		if(.@ {			if(.a != -1) {				mes "Actualmente los rates no son modificados por el sistema de Invasor.";				close;			}			awake "invasor";			mes "Los rates han sido restaurados.";			close;		}	}	mes "Hasta pronto.";	close;// Adds 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);	if(	compare("_init_"+.@w$,"_init_A") ||		compare("_init_"+.@w$,"_init_E") ||		compare("_init_"+.@w$,"_init_I") ||		compare("_init_"+.@w$,"_init_O") ||		compare("_init_"+.@w$,"_init_U")	) return "an";	else return "a";}// 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;}

 

Not sure why he uses v8 instead of the last version released in rAthena, which is v10, but it's edited by the user.

 

Thanks a lot in advance!

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

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.   Restore formatting

  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.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.