viewing paste Monster Invasion v0.9 | Athena

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
/*====================================================================================*/
/*==============================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;
        }
}
Viewed 328 times, submitted by unknown.