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 771 times, submitted by Guest.