// TMW2 Script
// Author:
// Jesusalva, Saulc
// Description:
// This GM NPC controls spawns and item drops on Aeros
// Monsters are sorted alphabetically, except bif
001-1,250,20,0 script Mana Being#001-1 NPC_ALIGE_OUTSIDE_BARREL,{
function spawner { // (memo, ID, amount)
// First argument is a memorand for Script Writers, usually name. It must be present, but can have whatever value you want. (Unused)
areamonster("001-1", 171, 0, 339, 158, strmobinfo(1, getarg(1)), getarg(1), getarg(2), "Mana Being#001-1::OnAerosMobDeath");
}
if (!is_gm()) goto L_Unauthorized;
@log_spawns=0;
@log_ratio=$coinsrate;
mesn;
mes "Tired of walking the whole Aeros to spawn monsters, I was brought to existence.";
L_Menu:
mes "";
mes "Please select operation.";
menu
"Abort",L_Close,
"Start/End Event", L_EventHandler,
"Spawn",L_Spawn,
rif(countitem(StrangeCoin) >= 10, "Drop a Toothbrush! (10x Coins)"),L_Drop,
rif(countitem(StrangeCoin) >= 10, "Drop a Bronze Gift (10x Coins)"), L_Bgif,
rif(countitem(StrangeCoin) >= 10, "Drop a Silver Gift (10x Coins)"), L_Sgif,
"Adjust coins drop rate",L_Rate;
L_Unauthorized:
dispbottom l("I am too far away to talk. Weird floating thingy...");
end;
L_Close:
if (@log_spawns > 0) logmes "spawned "+str(@log_spawns)+" beigns at Aeros.", LOGMES_ATCOMMAND;
if (@log_ratio != $coinsrate) logmes "set aeros ratio from "+str(@log_ratio)+" to "+str($coinsrate), LOGMES_ATCOMMAND;
close;
L_Spawn:
mes "";
mes "Spawn from a preset (with intended levels) from this menu. Otherwise, use @aeros with same syntax.";
mes "(agr) means Agressive Monsters on the set, DO NOT ABUSE.";
next;
menu
"Abort", L_Menu,
"Presets", L_Preset,
"Normal", L_Norm,
"Slime", L_Sli,
"Plants", L_Plants,
"Aggressive", L_Agr,
"GM Event Only", L_EventOnly,
"Boss", L_Boss;
L_Preset:
select
"Abort", // 1
"20x Piou, Piousee, Ratto, 10x Croc", // 2
"20x Little Blub, 10x Plushroom Field", // 3
"(agr) 5x Tipiu, 10x Cave Maggot, 10x Bat", // 4
"20x Scorpion, 10x Duck, 10x Maggot", // 5
"10x Red Scorpion, 20x Fire Goblin, 5x Mana Ghost", // 6
"(agr) 1x Saxso Ghost, 20x House Maggot", // 7
"(agr) 5x Slime Blast, 5x Red Slime, 10x White Slime", // 8
"(agr) 5x Mouboo, 4x Bandit, 2x Black Scorpion", // 9
"10x Giant Maggot, 10x Cave Snake, 10x Mana Bug", // 10
"1x Golden/Night Scorpion, 2x Santa Slime, 5x Copper Slime", // 11
"(agr) 2x Fallen Guards", // 12
"10x Clover Path, 5 groups of 5 random Bifs", // 13
"5x Bifs, 4 groups of 5 random Bifs"; // 14
switch (@menu) {
case 1:
break;
case 2:
spawner(strmobinfo(1, Piou), Piou, 20);
spawner(strmobinfo(1, Piousee), Piousee, 20);
spawner(strmobinfo(1, Ratto), Ratto, 20);
spawner(strmobinfo(1, Croc), Croc, 10);
@log_spawns=@log_spawns+70;
break;
case 3:
spawner(strmobinfo(1, LittleBlub), LittleBlub, 20);
spawner(strmobinfo(1, PlushroomField), PlushroomField, 10);
@log_spawns=@log_spawns+30;
break;
case 4:
spawner(strmobinfo(1, Tipiu), Tipiu, 5);
spawner(strmobinfo(1, CaveMaggot), CaveMaggot, 10);
spawner(strmobinfo(1, Bat), Bat, 10);
@log_spawns=@log_spawns+25;
break;
case 5:
spawner(strmobinfo(1, Scorpion), Scorpion, 20);
spawner(strmobinfo(1, Duck), Duck, 10);
spawner(strmobinfo(1, Maggot), Maggot, 10);
@log_spawns=@log_spawns+40;
break;
case 6:
spawner(strmobinfo(1, RedScorpion), RedScorpion, 10);
spawner(strmobinfo(1, ManaBug), FireGoblin, 20);
spawner(strmobinfo(1, ManaGhost), ManaGhost, 5);
@log_spawns=@log_spawns+35;
break;
case 7:
spawner(strmobinfo(1, SaxsoGhost), SaxsoGhost, 1);
spawner(strmobinfo(1, HouseMaggot), HouseMaggot, 20);
@log_spawns=@log_spawns+21;
break;
case 8:
spawner(strmobinfo(1, SlimeBlast), SlimeBlast, 5);
spawner(strmobinfo(1, RedSlime), RedSlime, 5);
spawner(strmobinfo(1, WhiteSlime), WhiteSlime, 10);
@log_spawns=@log_spawns+20;
break;
case 9:
spawner(strmobinfo(1, Mouboo), Mouboo, 5);
spawner(strmobinfo(1, Bandit), Bandit, 4);
spawner(strmobinfo(1, BlackScorpion), BlackScorpion, 2);
@log_spawns=@log_spawns+11;
break;
case 10:
spawner(strmobinfo(1, GiantMaggot), GiantMaggot, 10);
spawner(strmobinfo(1, CaveSnake), CaveSnake, 10);
spawner(strmobinfo(1, ManaBug), ManaBug, 10);
@log_spawns=@log_spawns+30;
break;
case 11:
spawner(strmobinfo(1, GoldenScorpion), GoldenScorpion, 1);
spawner(strmobinfo(1, NightScorpion), NightScorpion, 1);
spawner(strmobinfo(1, SantaSlime), SantaSlime, 5);
spawner(strmobinfo(1, CopperSlime), CopperSlime, 10);
@log_spawns=@log_spawns+17;
break;
case 12:
spawner(strmobinfo(1, FallenGuard1), FallenGuard1, 1);
spawner(strmobinfo(1, FallenGuard2), FallenGuard2, 1);
@log_spawns=@log_spawns+2;
break;
//"10x Clover Path, 5 groups of 5 random Bifs", // 13
//"5x Bifs, 4 groups of 5 random Bifs"; // 14
case 13:
spawner(strmobinfo(1, CloverPatch), CloverPatch, 10);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
@log_spawns=@log_spawns+35;
break;
case 14:
spawner(strmobinfo(1, Bif), Bif, 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
spawner(l("Mysterious Bif"), rand(1098,1118), 5);
@log_spawns=@log_spawns+25;
break;
}
if (@menu == 1) goto L_Spawn;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Preset;
L_Norm:
select
"Abort", // 1
"Alpha Mouboo", // 2
"Bat", // 3
"Bee", // 4
"Blub", // 5
"Candor Scorpion", // 6
"Cave Snake", // 7
"Crafty", // 8
"Croc", // 9
"Desert Loghead", // 10
"Desert Maggot", // 11
"Duck", // 12
"Fire Goblin", // 13
"Fluffy", // 14
"Forest Mushroom", // 15
"Little Blub", // 16
"Giant Maggot", // 17
"Golden Scorpion", // 18
"Iced Fluffy", // 19
"LogHead", // 20
"Maggot", // 21
"Magic Goblin", // 22
"Mana Bug", // 23
"Mana Ghost" // 24
"Moggun", // 25
"Mouboo", // 26
"Ocean Croc", // 27
"Pinkie", // 28
"Piou", // 29
"Piousse", // 30
"Poison Spiky Mushroom", // 31
"Ratto", // 32
"Red Butterfly", // 33
"Red Mushroom", // 34
"Red Scorpion", // 35
"Scorpion", // 36
"Silk Worm", // 37
"Squirrel", // 38
"Tipiou", // 39
"Toppy Blub", // 40
"Tortuga";
input .@c, 0, 100;
switch (@menu) {
case 1:
goto L_Spawn;
break;
case 2:
spawner(("AlphaMouboo"), AlphaMouboo, .@c);
case 3:
spawner(("Bat"), Bat, .@c);
case 4:
spawner(("Bee"), Bee, .@c);
case 5:
spawner(("Blub"), Blub, .@c);
case 6:
spawner(("CandorScorpion"), CandorScorpion, .@c);
case 7:
spawner(("CaveSnake"), CaveSnake, .@c);
case 8:
spawner(("Crafty"), Crafty, .@c);
case 9:
spawner(("Croc"), Croc, .@c);
case 10:
spawner(("DesertLoghead"), DesertLoghead, .@c);
case 11:
spawner(("DesertMaggot"), DesertMaggot, .@c);
case 12:
spawner(("Duck"), Duck, .@c);
case 13:
spawner(("FireGoblin"), FireGoblin, .@c);
case 14:
spawner(("Fluffy"), Fluffy, .@c);
case 15:
spawner(("ForestMushroom"), ForestMushroom, .@c);
case 16:
spawner(("LittleBlub"), LittleBlub, .@c);
case 17:
spawner(("GiantMaggot"), GiantMaggot, .@c);
case 18:
spawner(("GoldenScorpion"), GoldenScorpion, .@c);
case 19:
spawner(("IcedFluffy"), IcedFluffy, .@c);
case 20:
spawner(("LogHead"), LogHead, .@c);
case 21:
spawner(("Maggot"), Maggot, .@c);
case 22:
spawner(("MagicGoblin"), MagicGoblin, .@c);
case 23:
spawner(("ManaBug"), ManaBug, .@c);
case 24:
spawner(("ManaGhost"), ManaGhost, .@c);
case :25
spawner(("Moggun"), Moggun, .@c);
case 26:
spawner(("Mouboo"), Mouboo, .@c);
case 27:
spawner(("OceanCroc"), OceanCroc, .@c);
case 28:
spawner(("Pinkie"), Pinkie, .@c);
case 29:
spawner(("Piou"), Piou, .@c);
case 30:
spawner(("Piousse"), Piousse, .@c);
case 31:
spawner(("PoisonSpikyMushroom"), PoisonSpikyMushroom, .@c);
case 32:
spawner(("Ratto"), Ratto, .@c);
case 33:
spawner(("RedButterfly"), RedButterfly, .@c);
case 34:
spawner(("RedMushroom"), RedMushroom, .@c);
case 35:
spawner(("RedScorpion"), RedScorpion, .@c);
case 36:
spawner(("Squirrel"), Squirrel, .@c);
case 37:
spawner(("Squirrel"), Squirrel, .@c);
case 38:
spawner(("Tipiou"), Tipiou, .@c);
case 39:
spawner(("ToppyBlub"), ToppyBlub, .@c);
case 40:
spawner(("Tortuga"), Tortuga, .@c);
}
@log_spawns=@log_spawns+.@c;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Norm;
L_Sli:
"Abort", // 1
"Azul Slime", // 2
"Blue Slime", // 3
"Candied Slime", // 4
"Copper Slime", // 5
"Green Slime", // 6
"Lava Slime", // 7
"Rudolph Slime", // 8
"Red Slime", // 9
"Santa Slime", // 10
"Sea Slime", // 11
"Slime Blast", // 12
"White Slime", // 13
"Yellow Slime"; // 14
input .@c, 0, 100;
switch (@menu) {
case 1:
goto L_Spawn;
break;
case 2:
spawner(("AzulSlime"), AzulSlime, .@c);
case 3:
spawner(("BlueSlime"), BlueSlime, .@c);
case 4:
spawner(("CandiedSlime"), CandiedSlime, .@c);
case 5:
spawner(("CopperSlime"), CopperSlime, .@c);
case 6:
spawner(("GreenSlime"), GreenSlime, .@c);
case 7:
spawner(("LavaSlime"), LavaSlime, .@c);
case 8:
spawner(("RudolphSlime"), RudolphSlime, .@c);
case 9:
spawner(("RedSlime"), RedSlime, .@c);
case 10:
spawner(("SantaSlime"), SantaSlime, .@c);
case 11:
spawner(("SeaSlime"), SeaSlime, .@c);
case 12:
spawner(("SlimeBlast"), SlimeBlast, .@c);
case 13:
spawner(("WhiteSlime"), WhiteSlime, .@c);
case 14:
spawner(("YellowSlime"), YellowSlime, .@c);
}
@log_spawns=@log_spawns+.@c;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Sli;
L_Plants:
select
"Abort", // 1
"Chagashroom Field", // 2
"Clover Patch", // 3
"Cobalt Plant", // 4
"Dummy", // 5
"Gamboge Plant", // 6
"Manana Tree", // 7
"Mauve Plant", // 8
"Plushroom Field", // 9
"Small Ruby Bif", // 10
"Small Topaz Bif", // 11
"Small Emerald Bif", // 12
"Small Diamond Bif", // 13
"Small Amethyst Bif", // 14
"Small Sapphire Bif", // 15
"Ruby Bif", // 16
"Topaz Bif", // 17
"Emerald Bif", // 18
"Diamond Bif", // 19
"Amethyst Bif", // 20
"Sapphire Bif", // 21
"Big Ruby Bif", // 22
"Big Topaz Bif", // 23
"Big Emerald Bif", // 24
"Big Diamond Bif", // 25
"Big Amethyst Bif", // 26
"Big Sapphire Bif"; // 27
input .@c, 0, 100;
switch (@menu) {
case 1:
goto L_Spawn;
break;
case 2:
spawner(("ChagashroomField"), ChagashroomField, .@c);
case 3:
spawner(("CloverPatch"), CloverPatch, .@c);
case 4:
spawner(("CobaltPlant"), CobaltPlant, .@c);
case 5:
spawner(("Dummy"), Dummy, .@c);
case 6:
spawner(("GambogePlant"), GambogePlant, .@c);
case 7:
spawner(("MananaTree"), MananaTree, .@c);
case 8:
spawner(("MauvePlant"), MauvePlant, .@c);
case 9:
spawner(("PlushroomField"), PlushroomField, .@c);
case 10:
spawner(("SmallRubyBif"), SmallRubyBif, .@c);
case 11:
spawner(("SmallTopazBif"), SmallTopazBif, .@c);
case 12:
spawner(("SmallEmeraldBif"), SmallEmeraldBif, .@c);
case 13:
spawner(("SmallDiamondBif"), SmallDiamondBif, .@c);
case 14:
spawner(("SmallAmethystBif"), SmallAmethystBif, .@c);
case 15:
spawner(("SmallSapphireBif"), SmallSapphireBif, .@c);
case 16:
spawner(("RubyBif"), RubyBif, .@c);
case 17:
spawner(("TopazBif"), TopazBif, .@c);
case 18:
spawner(("EmeraldBif"), EmeraldBif, .@c);
case 19:
spawner(("DiamondBif"), DiamondBif, .@c);
case 20:
spawner(("AmethystBif"), AmethystBif, .@c);
case 21:
spawner(("SapphireBif"), SapphireBif, .@c);
case 22:
spawner(("BigRubyBif"), BigRubyBif, .@c);
case 23:
spawner(("BigTopazBif"), BigTopazBif, .@c);
case 24:
spawner(("BigEmeraldBif"), BigEmeraldBif, .@c);
case 25:
spawner(("BigDiamondBif"), BigDiamondBif, .@c);
case 26:
spawner(("BigAmethystBif"), BigAmethystBif, .@c);
case 27:
spawner(("BigSapphireBif"), BigSapphireBif, .@c);
}
@log_spawns=@log_spawns+.@c;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Plant;
L_Agr:
select
"Abort"; // 1
"Angry Red Scorpion", // 2
"Angry Scorpion", // 3
"Bandit", // 4
"Black Scorpion", // 5
"Cave Maggot", // 6
"Centaur", // 7
"Dark Lizard", // 8
"Desert Bandit", // 9
"Frista Guard", // 10
"Forain", // 11
"Halin Guard", // 12
"House Maggot", // 13
"Magic Goblin", // 14
"Mountain Snake", // 15
"Ocean Pirate", // 16
"Sarracenus", // 17
"Skeleton", // 18
"Snake", // 19
"Tipiu", // 20
"Vampire Bat", // 21
"Wolvern", // 22
"Yeti", // 23
input .@c, 0, 100;
switch (@menu) {
case 1:
goto L_Spawn;
break;
case 2:
spawner(("AngryRedScorpion"), AngryRedScorpion, .@c);
case 3:
spawner(("AngryScorpion"), AngryScorpion, .@c);
case 4:
spawner(("Bandit"), Bandit, .@c);
case 5:
spawner(("BlackScorpion"), BlackScorpion, .@c);
case 6:
spawner(("CaveMaggot"), CaveMaggot, .@c);
case 7:
spawner(("Centaur"), Centaur, .@c);
case 8:
spawner(("DarkLizard"), DarkLizard, .@c);
case 9:
spawner(("DesertBandit"), DesertBandit, .@c);
case 10:
spawner(("Frostia Guard"), FallenGuard1, .@c);
case 11:
spawner(("Forain"), Forain, .@c);
case 12:
spawner(("Halin Guard"), FallenGuard2, .@c);
case 13:
spawner(("HouseMaggot"), HouseMaggot, .@c);
case 14:
spawner(("MagicGoblin"), MagicGoblin, .@c);
case 15:
spawner(("MountainSnake"), MountainSnake, .@c);
case 16:
spawner(("OceanPirate"), OceanPirate, .@c);
case 17:
spawner(("Sarracenus"), Sarracenus, .@c);
case 18:
spawner(("Skeleton"), Skeleton, .@c);
case 19:
spawner(("Snake"), Snake, .@c);
case 20:
spawner(("Tipiu"), Tipiu, .@c);
case 21:
spawner(("VampireBat"), VampireBat, .@c);
case 22:
spawner(("Wolvern"), Wolvern, .@c);
case 23:
spawner(("Yeti"), Yeti, .@c);
}
@log_spawns=@log_spawns+.@c;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Agr
if (@menu == 1) goto L_Spawn;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Agr;
L_EventOnly:
mes col("WARNING: Spawn these monsters with moderation!", 1);
mes col("Some of them have FORBIDDEN DROPS, which will be DELETED when their event starts!", 1);
mes "";
select
"Abort", // 1
"Bhop Fluffy", // 2
"Easter Mouboo", // 3
"Evil Scythe", // 4
"Jack'O", // 5
"Magic Ratto", // 6
"Moonshroom", // 7
"Small Magic Bif", // 8
"Magic Bif", // 9
"Big Magic Bif"; // 10
input .@c, 0, 1000;
switch (@menu) {
case 1:
goto L_Spawn;
break;
case 2:
spawner(("BhopFluffy"), BhopFluffy, .@c);
case 3:
spawner(("EasterMouboo"), EasterMouboo, .@c);
case 4:
spawner(("EvilScythe"), EvilScythe, .@c);
case 5:
spawner(("Jack'O"), Jack'O, .@c); // WUT
case 6:
spawner(("MagicRatto"), MagicRatto, .@c);
case 7:
spawner(("Moonshroom"), Moonshroom, .@c); // WUT
case 8:
spawner(("SmallMagicBif"), SmallMagicBif, .@c);
case 9:
spawner(("MagicBif"), MagicBif, .@c);
case 10:
spawner(("BigMagicBif"), BigMagicBif, .@c);
}
@log_spawns=@log_spawns+.@c;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_EventOnly;
L_Boss:
select
"Abort"; // 1
"Giant Mutated Bat" // 2
"Murderer Scorpion", // 3
"Night Scorpion" // 4
"Saxso Ghost" // 5
"The Yeti King", // 6
input .@c, 0, 1000;
switch (@menu) {
case 1:
goto L_Spawn;
break;
case :
spawner(("GiantMutatedBat"), GiantMutatedBat, .@c);
case :
spawner(("MurdererScorpion"), MurdererScorpion, .@c);
case :
spawner(("NightScorpion"), NightScorpion, .@c);
case :
spawner(("SaxsoGhost"), SaxsoGhost, .@c);
case :
spawner(("TheYetiKing"), TheYetiKing, .@c);
}
@log_spawns=@log_spawns+.@c;
mes "";
mes "Completed.";
mes "Total spawns: "+str(@log_spawns);
next;
goto L_Boss;
L_Drop:
delitem(StrangeCoin,10);
makeitem(Toothbrush, 1, "001-1", rand(171,319), rand(20,138));
mes "";
mes "Dropped.";
next;
goto L_Menu;
L_Bgif:
delitem(StrangeCoin,10);
makeitem(BronzeGift, 1, "001-1", rand(171,319), rand(20,138));
mes "";
mes "Bronze Gift Dropped.";
next;
goto L_Menu;
L_Sgif:
delitem(StrangeCoin,10);
makeitem(SilverGift, 1, "001-1", rand(171,319), rand(20,138));
mes "";
mes "Silver Gift Dropped.";
next;
goto L_Menu;
L_Rate:
mes "";
mes "Current drop rate: " + str($coinsrate);
mes "Insert drop rate (from 0 to 10000, capped at 5000 or 50%). Use -1 to disable.";
input $coinsrate;
if ($coinsrate > 5000)
$coinsrate=5000;
mes "";
mes "Ratio adjusted.";
next;
goto L_Menu;
L_EventHandler:
if($@GM_EVENT) {
announce l("The event is over!"), bc_all|bc_npc; // I haven't tested this yet.
$@GM_EVENT=0;
} else {
announce l("The mana bridge to Aeros is open! To participate on event, talk to ##BSoul Menhir##b!"), bc_all|bc_npc;
channelmes("#world", "An event is happening on Aeros! Hurry up!");
$@GM_EVENT=1;
}
close;
OnAerosMobDeath:
if ($coinsrate < 0) end;
// A level 100 monster can have a 4% drop bonus against a level 0 monster.
// $coinsrate acts stablishing a basic drop value. Advised value: 600 (up to 10% for normal mobs)
if (rand(10000) <= $coinsrate + (atoi(strmobinfo(3,killedrid))*4))
getmapxy(.@m$, .@x, .@y, 0);
makeitem(StrangeCoin, 1, .@m$, .@x, .@y);
end;
OnInit:
if ($coinsrate == 0)
$coinsrate=600; // Default value is 6% + mob str bonus
end;
}
- script @aeros 32767,{
end;
OnCall:
if (!is_admin())
end;
if (getmapname() != "001-1") {
dispbottom "This command can only be used at aeros.";
end;
}
//.@atcmd_parameters$ = strtoupper(strip( // nah
if (.@atcmd_numparameters != 2) {
dispbottom "Use the numeric ID provided by the wiki. This is a safeguard to ensure you are not overkilling players.";
dispbottom "Talk to Mana Being for a less fine-grained but much more optimized control over monsters.";
dispbottom "This command takes exactly this syntax: Mob ID <space> amount.";
end;
}
areamonster("001-1", 171, 0, 339, 158, strmobinfo(1, atoi(.@atcmd_parameters$[0])), atoi(.@atcmd_parameters$[0]), atoi(.@atcmd_parameters$[1]), "Mana Being#001-1::OnAerosMobDeath");
logmes "@aeros "+strmobinfo(1, atoi(.@atcmd_parameters$[0])) + " " + .@atcmd_parameters$[1], LOGMES_ATCOMMAND;
dispbottom "All monsters summoned.";
end;
OnInit:
bindatcmd "aeros", "@aeros::OnCall", 99, 99, 0;
}