/*====================================================================================*/
/*==============================Monster Invasion Event================================*/
/*====================================================================================*/
/*==============================By:Night Terror=======================================*/
/*====================================================================================*/
/*===Inspired by: Automated MVP Event by xMachina / Acetito and Emistry===============*/
/*====================================================================================*/
/*=== v0.9 ================================================English Version============*/
function script F_IsMapValid { //Check if Map is set
if(getarg(0)!="")
return "["+getarg(0)+"]";
else
return "";
}
function script F_IsItemValid { //Check if Item is set
if(getarg(0)!=0)
return "["+getitemname(getarg(0))+" x "+$@Amount+"]";
else
return "";
}
function script F_IsMobValid { //Check if Monster is set
if(getarg(0)!=0)
return "["+getmonsterinfo(getarg(0),0) + " x " +getarg(1)+"]";
else
return "";
}
function script F_ChooseMob { //Monster & Monster amount list
switch(select("Weaker Monsters:Stronger Monsters")) {
Case 1:
set @Monsters[getarg(0)],$@Monsteridstrong[select("Arclouse:Baba Yaga:Baby Leopard:Baphomet Jr.:Bloody Butterfly:Dark Frame:Dragon Tail:Evil Cloud Hermit:Giant Whisper:Grand Peco:Greatest General:High Orc:Hill Wind:Hyegun:Hylozoist:Li Me Mang Ryang / Jing Guai:Live Peach Tree / Enchanted Peach Tree:Marine Sphere:Miyabi Ningyo / Miyabi Doll:Myst Case:Nereid:Orc Archer:Orc Baby:Raydric Archer:Remover:Sea Otter:Side Winder:Stone Shooter:Wanderer:Wind Ghost:Wooden Golem")];
break;
Case 2:
set @Monsters[getarg(0)],$@Monsteridweak[select("Am Mut:Ancient Mummy:Firelock Soldier:Armeyer Dinze:Bloody Knight:Bloody Murderer:Bow Guardian:Cat o' Nine Tails:Dark Illusion:Eremes Guile:Errende Ebecee:Howard Alt-Eisen:Ice Titan:Imp:Kavach Icarus:Knight of Abyss:Loli Ruri:Margaretha Sorin:Mutant Dragonoid:Observation:Owl Duke:Ragged Zombie:Laurell Weinder:Retribution:Sword Guardian:The Paper:Tirfing/Ogretooth:Wickebine Tres:Wicked Nymph:Zealotus:Zombie Prisoner")]; set @Monsters[getarg(0)],$@Monsteridweak[select("Am Mut:Ancient Mummy:Firelock Soldier:Armeyer Dinze:Bloody Knight:Bloody Murderer:Bow Guardian:Cat o' Nine Tails:Dark Illusion:Eremes Guile:Errende Ebecee:Howard Alt-Eisen:Ice Titan:Imp:Kavach Icarus:Knight of Abyss:Loli Ruri:Margaretha Sorin:Mutant Dragonoid:Observation:Owl Duke:Ragged Zombie:Laurell Weinder:Retribution:Sword Guardian:The Paper:Tirfing/Ogretooth:Wickebine Tres:Wicked Nymph:Zealotus:Zombie Prisoner")];
break;
}
for (set @i,0; @i < 7; set @i,@i+1) //Check if Monster is already chosen
if (@Monsters[getarg(0)]==@Monsters[@i] && @i!=getarg(0)) //Clean Monster from list if Monster is already chosen
set @Monsters[getarg(0)],0;
input @MobAmount[getarg(0)],20,300;
return 0;
}
function script F_ClearGarbagez { //Clean previous inputs
cleararray @Monsters,0,7;
cleararray @MobAmount,0,7;
set $@ItemID,0;
set $@Map$,"prontera";
return 0;
}
prontera,139,173,5 script Monster Invasion Helper::MonsterInvasion 402,{
//define monsterlist and itemlist
setarray $@Monsteridweak[1],1301,1297,1403,1654,1268,1507,1830,1307,1302,1635,1655,1636,1777,1837,1656,1219,1502,1637,1262,1700,1320,1865,1657,1702,1829,1375,1204,1653,1416,1200,1197;
setarray $@Monsteridstrong[1],1194,1882,1415,1101,1408,1260,1321,1412,1186,1369,1277,1213,1680,1512,1510,1517,1410,1142,1404,1249,1255,1189,1686,1276,1682,1323,1037,1495,1208,1236,1497;
setarray $@Healitem[1],521,12321,505,548,547,12123,12299,12320,12016,607;
setarray $@Useableitem[1],662,12354,12257,12704,14598,12212,12135,14607,12268,12128,12266,12310,14601,12019;
if(getgmlevel() < 20) //check if GM Lvl is high enough
warp "prontera",156,184;
if($@Event!=0) { //check if Event is already running
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Event is already running!";
close;
}
set $@Map$,"prontera"; //default map=prontera
while(1) {
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Please choose your parameters.";
next;
switch(select("Item "+callfunc("F_IsItemValid",$@ItemID)+":Map " +callfunc("F_IsMapValid",$@Map$)+":Monster:Clear current values:Start Event!")){
Case 1:
mes "[ ^0C66C0Event Helper^000000 ]";
mes "The reward for the top 10 killers.";
mes "The player with the most kills gets the amount of items you choose, the following ranks get 10% less per rank.";
next;
message strcharinfo(0),"Please choose the item!";
switch(select("RMS Healing Items:RMS Useable Items")){ //Item & Item amount list, sorted like rms does
Case 1:
set $@ItemID,$@Healitem[select("Aloe Leaflet:Arunafeltz Desert Sandwich:Blue Potion:Cheese:White Slim Potion:Honey Pastry:Status Resist Potion:Poison Bottle:Schwartzwald Pine Jubilee:Speed Potion:Yggdrasil Berry")];
break;
Case 2:
set $@ItemID,$@Useableitem[select("Authoritative Badge:Buche De Noel:Cold Medicine:Elixir of Life:Ghostring Scroll:Giant Fly Wing:Green Ale:Luxurious Western Food:Rainbow Cake:Royal Cooking Kit:Sesame Pastry:Spray Of Flowers:Tyr's Blessing:Holy Egg")];
break;
}
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Choose the desired amount, 1 is the minimum, 100 the maximum.";
next;
input $@Amount,1,100;
break;
Case 2:
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Please choose your desired map!";
mes "Obviously, the map has to be valid.";
next;
do{ //Loop to ensure valid map
input $@Map$; } while(getmapmobs($@Map$) == -1 );
break;
Case 3:
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Which monster do you want to spawn?";
mes "You can spawn 7 different monsters.";
mes "Minimum monster amount is 20, maximum is 300";
next;
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Please choose the desired monster and the desired amount.";
next;
//Stay in menu until player has chosen all monsters he wants
while(1) {
set @ChosenPlace,select("Mob 1 - "+callfunc("F_IsMobValid",@Monsters[0],@MobAmount[0])+":Mob 2 - "+callfunc("F_IsMobValid",@Monsters[1],@MobAmount[1])+":Mob 3 - "+callfunc("F_IsMobValid",@Monsters[2],@MobAmount[2])+":Mob 4 - "+callfunc("F_IsMobValid",@Monsters[3],@MobAmount[3])+":Mob 5 - "+callfunc("F_IsMobValid",@Monsters[4],@MobAmount[4])+":Mob 6 - "+callfunc("F_IsMobValid",@Monsters[5],@MobAmount[5])+":Mob 7 - "+callfunc("F_IsMobValid",@Monsters[6],@MobAmount[6])+":No more monsters.")-1;
if(@ChosenPlace>6) break;
callfunc("F_ChooseMob",@ChosenPlace);
}
break;
Case 4:
callfunc("F_ClearGarbagez");
break;
Case 5:
if( $@Map$ == "" || @Monsters[0] == 0){ //Check if Map and Monsters are set
mes "[ ^0C66C0Event Helper^000000 ]";
mes "Please check your parameters.";
next;
break;
}
setarray $@randnum[0],rand(30,60),rand(200,300),rand(450,500),rand(900,1000);
mes "[ ^0C66C0Event Helper^000000 ]";
mes "The Event has been started!";
set $@Event,1;
close2;
announce "Monsters have been sighted at "+$@Map$+"! Keep pushing them back!",bc_all,0xFFFF86;
if ($@ItemID != 0)
announce "The reward for the best killer will be "+$@Amount+" x "+getitemname($@ItemID)+". Subsequent killers receive 10% less per rank until rank 10." ,bc_all,0xFFFF86;
sleep2 2500;
announce "The following monsters have been sighted:",bc_all,0xB7D2E9;
sleep2 1000;
for(set @i,0; @i < 7; set @i,@i+1) //Spawn Monsters and announce them
if(@Monsters[@i]!=0){
announce getmonsterinfo(@Monsters[@i],0)+" x "+@MobAmount[@i],bc_all,0xB7D2E9;
monster $@Map$,0,0,"--ja--",@Monsters[@i],@MobAmount[@i],strnpcinfo(3)+"::OnMobKill";
}
end;
}
}
OnMobKill:
if (mobcount($@Map$,strnpcinfo(3)+"::OnMobKill") <= $@randnum[0] && mobcount($@Map$,strnpcinfo(3)+"::OnMobKill") > 5 ||
mobcount($@Map$,strnpcinfo(3)+"::OnMobKill") == $@randnum[1] || mobcount($@Map$,strnpcinfo(3)+"::OnMobKill") == $@randnum[2] ||
mobcount($@Map$,strnpcinfo(3)+"::OnMobKill") == $@randnum[3])
announce "Only "+mobcount($@Map$,strnpcinfo(3)+"::OnMobKill")+" Monsters left to kill.",bc_all,0xFFFF46; //announce remaining monsters
for(set @i,0; @i < 127; set @i,@i+1){ //Register the killer and add points
if($@killer$[@i] == ""){
for(set @j,0; @j < 127; set @j,@j+1){
if($@killer$[@i]==$@killer$[@j] && $@killer$[@i]!= "")
goto Nameexists;
}
set $@killer$[@i],strcharinfo(0);
set $@kills[@i],$@kills[@i]+1;
}
else if($@killer$[@i] == strcharinfo(0)){
Nameexists:
set $@kills[@i],$@kills[@i]+1;
break;
}
}
if(mobcount($@Map$,strnpcinfo(3)+"::OnMobKill") <=5){ //If 5 or less mobs remain: kill all mobs, bubblesort the top 15 killers,announce the top 15 killers and give items (if set) to the Top 10.
killmonster $@Map$,"All";
announce "Most of the monsters have been defeated!",bc_all,0xFFFF46;
sleep2 2000;
announce "Our local guards managed to fend the remaining monsters off.",bc_all,0xFFFF46;
sleep2 2000;
announce "Let's look at the results:",bc_all,0xFFFF46;
sleep2 1000;
for (set @i,0; @i < 15; set @i,@i+1){ //Do the Bubblesort
for (set @j,0; @j < 15; set @j,@j+1){
if ($@kills[@j] < $@kills[@j+1]) {
set @tmpkills, $@kills[@j+1];
set @tmpkillers$, $@killer$[@j+1];
set $@kills[@j+1], $@kills[@j];
set $@killer$[@j+1],$@killer$[@j];
set $@kills[@j], @tmpkills;
set $@killer$[@j], @tmpkillers$;
}
}
}
for(set @i,0; @i < 15; set @i,@i+1) //Announce Top 15
if($@killer$[@i] != "")
announce @i+1+". Place: "+$@killer$[@i]+" with "+$@kills[@i]+" Monsters killed.",bc_all,0xB7D2E9;
if ($@ItemID != 0) //Give item if set, 10% less per rank
for(set @i,0; @i < 10; set @i,@i+1)
if ($@killer$[@i]!="")
getitem $@ItemID,$@Amount-$@Amount*@i/10,getcharid(3,$@killer$[@i]);
logmes "Monster Invasion complete, the Top 1 Killer is " + $@killer$[0] + " with "+$@kills[0]+ " Kills. The reward was " +getitemname($@ItemID)+ " x "+$@Amount+". This was the "+$Invasioncount+". custom Monster Invasion.";
set $Invasioncount,$Invasioncount+1;
//Clear variables
cleararray $@kills[0],0,200;
cleararray $@killer$[0],"",200;
cleararray $@flag[0],0,10;
set $@Event,0;
}
}