// TMW-2 Script
// Author:
// Jesusalva
// Description:
// GM Bot for the Monster King.
000-0,0,0,0 script Monster King NPC_HIDDEN,{
OnSlaveDie:
end;
OnBourneAgain:
channelmes("#world", strcharinfo(0)+" did an act worth of notice.");
dispbottom l("Oh well, this sucks, but that was only an illusion.");
dispbottom l("The real Monster King is probably on his fortress. It'll take more than that to take him down.");
getexp BaseLevel**3, 0;
Mobpt = Mobpt + 165;
// We need to start over
OnInit:
$@MK=monster("boss", 45, 45, "The Monster King", MonsterKing, 1, "Monster King::OnBourneAgain");
// Variables which other NPCs must take in account
$@MK_AGGRO=0;
$@MK_SCENE=0;
// Variables only for this NPC
.users=getusers(1);
.nearby=getusers(8);
.@mp$="boss";
.aid="200000";
.cid="150002";
// Constants
.MK_SIEGE=1;
.MK_BONUS=2;
.MK_MANAF=3;
// We should jump straight to loop (it runs every 62 seconds)
OnTimer62000:
// Regenerate some data, and kill spurious mobs
.users=getusers(1);
if (mobcount(.@mp$, "Monster King::OnSlaveDie")) {
announce ("Monster King: Noobs, you are all a bunch of noobs!"), bc_map|bc_npc;
killmonster(.@mp$, "Monster King::OnSlaveDie");
}
// We are on an event, so skip this loop
if ($@MK_SCENE)
initnpctimer;
// The Monster King is online. This loop is not needed
if (isloggedin(.aid, .cid)) {
if (!$@MK_SCENE)
unitwarp($@MK, "boss", 45, 45);
else
rodex_sendmail(.cid, "MKBot", "Running Event", "An event is currently running by the MK Bot. Please logout and suppress it.");
initnpctimer;
}
// If too few players are online, we don't need an event AT ALL!
if (.users < rand(2,4))
initnpctimer;
// Raise aggro
$@MK_AGGRO+=.users;
// Mana Stone
if (.@mp$ == "011-1")
enablenpc "Mana Stone";
// Select a random map. Never shows up at Candor and cities, nor indoors. Not all caves either.
.@m=rand(1,30);
switch (.@m) {
// MPE
case 1: .@mp$="001-1"; break;
case 2: .@mp$="001-3"; break;
case 3: .@mp$="001-4"; break;
case 4: .@mp$="001-5"; break;
case 5: .@mp$="001-6"; break;
case 6: .@mp$="001-7"; break;
// Desert
case 7: .@mp$="003-1"; break;
case 8: .@mp$="003-1-3"; break;
case 9: .@mp$="004-1"; break;
case 10: .@mp$="004-2"; break;
case 11: .@mp$="007-1"; break;
case 12: .@mp$="010-1"; break;
case 13: .@mp$="010-1-1"; break;
case 14: .@mp$="010-2"; break;
case 15: .@mp$="011-1"; break; // Special case
// Woodlands
case 16: .@mp$="014-1"; break;
case 17: .@mp$="014-2"; break;
case 18: .@mp$="014-3"; break;
case 19: .@mp$="014-4"; break;
case 20: .@mp$="014-5"; break;
case 21: .@mp$="015-1"; break;
case 22: .@mp$="015-2"; break;
case 23: .@mp$="015-3"; break;
case 24: .@mp$="018-1-1"; break;
case 25: .@mp$="018-2"; break;
case 26: .@mp$="018-3"; break;
case 27: .@mp$="018-4"; break;
case 28: .@mp$="018-4-1"; break;
default: .@mp$="boss"; break;
}
// Try to warp randomly, up to 30 attempts
.@e=0;
while (!checkcell(.@mp$, .@x, .@y, cell_chkpass))
{
if (.@e == 30) {
.@mp$="boss";
.@x=45;
.@y=45;
break;
}
.@x = rand(20, 300);
.@y = rand(20, 300);
++.@e;
}
unitwarp($@MK, .@mp$, .@x, .@y);
.nearby=getusers(8);
// Handle Mana Stone
if (.@mp$ == "011-1")
disablenpc "Mana Stone";
// Decide if we should have an event here
if (.nearby > 1 && $@MK_AGGRO >= rand(0,100)){
// We should decide event kind, but that's NYI
announce ("Monster King: I smell humans! Humans must die!"), bc_map|bc_npc;
getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@MK);
// 50% more monsters at night time
if (is_night())
$@MK_AGGRO=$@MK_AGGRO*3/2;
// Spawn stuff
areamonster(.@m$, .@x-20, .@y-20, .@x+20, .@y+20, "Monster", ManaGhost, $@MK_AGGRO, "Monster King::OnSlaveDie");
$@MK_AGGRO=0;
}
// We're done, restart loop timer
initnpctimer;
end;
}