//===== rAthena Script ======================================= //= Goblin Invasion //===== By: ================================================== //= Mysterious //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= // Goblins spawn randomly in a given town. Once all Goblins are killed // the Goblin Leader spawns. //===== TODO: ================================================ // - Change more coding //===== Additional Comments: ================================= //= v1.0 - First release [Mysterious] //= v1.1 - Fixed Bugs [Mysterious] //= v1.2 - Fixed Sentence structures [Mysterious] //= v1.3 - Added Proper Notes [Mysterious] //= v1.4 - Made it obvious on what players have to change [Mysterious] //= v1.5 - Proper Sentence Structures and Typos fixed [Mysterious] //= v1.6 - Fixed mobs not counting down properly [Mysterious] //============================================================ xxx,xxx,xxx,xxx script Goblin Invasion 459,{ set .gm,40;//GM Level to access the GM Menu. Default: 40 // GM menu | Game Masters Level 40 or more are allowed to Start and Stop invasions. if (getgmlevel()>.gm) { if (.mobs_left) { mes "[Invasion]"; mes "An invasion is already in progress! Details:"; mes "Location: " + .Map$; mes "^FF0000"+.mobs_left+"^000000 Goblins left"; mes " "; mes "Would you like to Stop the invasion?"; if(select("- No:- Yes")==1) close; donpcevent "Invasion NPC::OnTimer1805000"; mes "Invasion stopped"; announce "The Invasion has been stopped by "+strcharinfo(0),bc_all; close; } mes "[Invasion]"; mes "Please customize the Invasion event before starting it."; mes "Note - The Goblin Leader drops x5 of the prize."; Main: next; mes "[Invasion]"; switch(select("Item [" + getitemname(.ItemID) + "]:Start Event")) { case 1: mes "Which item would you like the Goblin Leader to drop?"; mes "Please input the item ID:"; input .ItemID; goto Main; case 2: mes "The event is going to begin shortly."; close2; goto OnStart; } //If a player clicks the NPC, the NPC will tell the player how much Mobs are left on the certain map. mes "[Invasion]"; mes "There are "+.mobs_left+" Goblins who've invaded "+.Map$[.rand_map]+"!"; close; ///////////////////////// //The actual NPC Script// ///////////////////////// OnMinute50: // Change this to your liking (When you want the event to start) OnStart: set .mobs_left, 1; sleep2 1000; set $@ran, rand(1,6); if ($@ran == 6) set .Map$,"splendide"; if ($@ran == 5) set .Map$,"izlude"; if ($@ran == 4) set .Map$,"payon"; if ($@ran == 3) set .Map$,"geffen"; if ($@ran == 2) set .Map$,"morocc"; if ($@ran == 1) set .Map$,"prontera"; sleep2 1000; announce "[ Rune-Midgard Guard ]: We have trouble here in the fabulous town known as " + .Map$ + "!", bc_all; sleep2 5000; announce "[ Rune-Midgard Guard ]: Everyone, we need your help to get rid of these Goblins!", bc_all; monster .Map$,0,0,"Goblin",1258,250,"Goblin Invasion::OnMyMobDead"; set .mobs_left, 250; end; OnTimer1805000: // 30 minutes later, kills all the mobs. killmonster .Map$,"Goblin Invasion::OnMyMobDead"; set .mobs_left, 0; OnStop://When the event is stopped by a GM, or all monsters dead. killmonster .Map$,"Goblin Invasion::OnMyMobDead"; killmonster .Map$,"Goblin Invasion::OnSpecialMobDead"; announce "It seems that "+strcharinfo(0)+" has ended the Invasion!",bc_all; end; OnMyMobDead: //When a Goblin is killed set .mobs_left, .mobs_left-1; if (.mobs_left==0) { announce "[ Rune-Midgard Guard ]: The Goblin Leader has spawned in " + .Map$ + "!", bc_all; monster .Map$,0,0,"Goblin Leader",1299,1,"Goblin Invasion::OnSpecialMobDead"; } else { announce "["+.mobs_left+"/250] Goblins left.",bc_map; } end; OnSpecialMobDead: announce strcharinfo(0)+" has fought off the Goblin Invasion and has been awarded a worthy prize!", bc_all; getitem .ItemID,5; //Change the [5] to the amount you wish to hand out. donpcevent "Goblin Invasion::OnStop"; } end; }