// TMW2/LoF scripts.
// Authors:
// Jesusalva
// Description:
// Deploys an Homunculus in a mission during your offline time
// Variables
// HOMUN_DEPLOYDATE
// When the Homunculus is scheduled to arrive
// HOMUN_DEPLOYFIELD
// ID of the field which Homunculus was deployed
017-10,61,34,0 script Erik NPC_JOURNALMAN,{
function lootField;
mesn;
mesq l("Hello. My name is Erik, and I have Homunculus go out in errands in my stead.");
// If you haven't summoned yet, or killed it...
if (!gethominfo(0)) {
mesc l("You do not own an Homunculus."), 1;
close;
}
// Check what your homunculus is up to
switch (homstatus()) {
case 0:
mesc l("Your homunculus is ready!"), 2;
break;
case 1:
mesc l("Your homunculus is sleeping! Wake them up!"), 3;
close;
break;
case 2:
mesc l("Your homunculus is already on a mission!"), 1;
// Homunculus should return from mission
if (gettimetick(2) > HOMUN_DEPLOYDATE) {
select
l("Recall");
.@xp=lootField(HOMUN_DEPLOYFIELD);
recallhomunculus();
gethomunexp(.@xp);
.@lv=gethominfo(6);
getexp 0, (.@lv*min(10000, gethominfo(3))/10000)*5;
close;
}
mesc l("It should be back in @@", FuzzyTime(HOMUN_DEPLOYDATE)), 1;
close;
break;
default:
Exception("ERROR! homstatus code "+homstatus(), RB_DEFAULT|RB_SPEECH|RB_ISFATAL);
break;
}
// This is a bug: They are ready but shouldn't be.
if (gettimetick(2) < HOMUN_DEPLOYDATE) {
Exception("ERROR: YOU WERE BANNED FROM USING ERIK SERVICES. (might be a bug).", RB_SPEECH|RB_ISFATAL);
close;
}
L_Main:
select
l("Deploy to Piou Fields [1h]"),
l("Deploy to Herb Fields [1h]"),
rif(gethominfo(6) >= 10, l("Deploy to Ore Mines [2h]")),
rif(gethominfo(6) >= 10, l("Deploy to Rare Mines [2h]")),
rif(gethominfo(6) >= 15, l("Deploy to Slime Nest [2h]")),
rif(gethominfo(6) >= 30, l("Deploy to Snake Pit [3h]")),
rif(gethominfo(6) >= 55, l("Deploy to Dangerous Area [6h]")),
rif(gethominfo(6) >= 80 && $GAME_STORYLINE >= 4, l("Deploy to Monster King Basement [8h]")),
"",
l("Deploy to The Market [1h]"),
l("Don't deploy");
mes "";
// Common drops: At least 90% drop
// Rare drops: 5% or less drop rate
switch (@menu) {
case 1:
mesc ".:: " + l("Piou Fields") + " ::.";
mesc l("The most basic grinding camp for your homunculus.");
mesc l("Average EXP: "+100), 3;
mesc l("Common Drops: "+
getitemlink(PiouFeathers));
mesc l("Regular Drops: "+
getitemlink(PiouLegs)+
getitemlink(HalfEggshell));
mesc l("Rare Drops: "+
getitemlink(GoldenApple));
next;
.@dest=HCD_PIOUFIELDS;
.@hours=1;
break;
case 2:
mesc ".:: " + l("Herb Fields") + " ::.";
mesc l("If you need more herbs, the best place to look.");
mesc l("Average EXP: "+5), 3;
mesc l("Common Drops: "+
getitemlink(ArtichokeHerb));
mesc l("Regular Drops: "+
getitemlink(CobaltHerb)+
getitemlink(GambogeHerb)+
getitemlink(MauveHerb)+
getitemlink(AlizarinHerb));
mesc l("Rare Drops: "+
getitemlink(ReedBundle));
next;
.@dest=HCD_HERBFIELDS;
.@hours=1;
break;
case 3:
mesc ".:: " + l("Ore Mines") + " ::.";
mesc l("Send your Homunculus to mineration!");
mesc l("Average EXP: "+12), 3;
mesc l("Common Drops: "+
getitemlink(Coal));
mesc l("Regular Drops: "+
getitemlink(IronOre)+
getitemlink(CopperOre)+
getitemlink(SilverOre)+
getitemlink(GoldOre));
mesc l("Rare Drops: "+
getitemlink(TinOre)+
getitemlink(LeadOre)+
getitemlink(TitaniumOre)+
getitemlink(IridiumOre)+
getitemlink(PlatinumOre));
next;
.@dest=HCD_OREMINES;
.@hours=2;
break;
case 4:
mesc ".:: " + l("Rare Mines") + " ::.";
mesc l("Send your Homunculus to mineration!");
mesc l("Average EXP: "+15), 3;
mesc l("Common Drops: "+
getitemlink(Pearl));
mesc l("Regular Drops: "+
getitemlink(Diamond)+
getitemlink(Ruby)+
getitemlink(Emerald)+
getitemlink(Sapphire)+
getitemlink(Topaz)+
getitemlink(Amethyst));
mesc l("Rare Drops: "+
getitemlink(LightGreenDiamond)+
getitemlink(BlackPearl)+
getitemlink(BlueManaPearl));
next;
.@dest=HCD_RAREMINES;
.@hours=2;
break;
case 5:
mesc ".:: " + l("Slime Nest") + " ::.";
mesc l("Send your Homunculus to a slime nest!");
mesc l("Average EXP: "+800), 3;
mesc l("Common Drops: "+
getitemlink(MaggotSlime)+
getitemlink(Arrow));
mesc l("Regular Drops: "+
getitemlink(IronArrow)+
getitemlink(TreasureKey)+
getitemlink(CactusDrink)+
getitemlink(CoinBag)+
getitemlink(CasinoCoins)+
getitemlink(Coal)+
getitemlink(Dagger)+
getitemlink(Candy)+
getitemlink(ChocolateBar));
mesc l("Rare Drops: "+
getitemlink(Milk)+
getitemlink(IcedBottle));
next;
.@dest=HCD_SLIMENEST;
.@hours=2;
break;
case 6:
mesc ".:: " + l("Snake Pit") + " ::.";
mesc l("Send your Homunculus to hold off snakes!");
mesc l("Average EXP: "+format_number(2250)), 3;
mesc l("Common Drops: "+
getitemlink(SnakeEgg)+
getitemlink(SnakeTongue));
mesc l("Regular Drops: "+
getitemlink(SnakeSkin));
mesc l("Rare Drops: "+
getitemlink(JeansShorts)+
getitemlink(DivineApple)+
getitemlink(Kanabo));
next;
.@dest=HCD_SNAKEPIT;
.@hours=3;
break;
case 7:
mesc ".:: " + l("Dangerous Area") + " ::.";
mesc l("Send your Homunculus to loot the Impregnable Fortress!");
mesc l("Average EXP: "+format_number(70000)), 3;
mesc l("Common Drops: None");
mesc l("Regular Drops: "+
getitemlink(MoubooSteak)+
getitemlink(HastePotion)+
getitemlink(StrengthPotion)+
getitemlink(SmokeGrenade)+
getitemlink(Grenade)+
getitemlink(MercBoxA)+
getitemlink(AncientBlueprint)+
getitemlink(Lockpicks)+
getitemlink(StatusResetPotion)+
getitemlink(TreasureMap));
mesc l("Rare Drops: "+
getitemlink(MagicApple));
next;
.@dest=HCD_DANGERAREA;
.@hours=6;
break;
case 8:
mesc ".:: " + l("Monster King Basement") + " ::.";
mesc l("Send your Homunculus to one of the most dangerous...!");
mesc l("Average EXP: "+format_number(1000000)), 3;
mesc l("Common Drops: None");
mesc l("Regular Drops: "+
getitemlink(Curshroom)+
getitemlink(HastePotion)+
getitemlink(StrengthPotion)+
getitemlink(SmokeGrenade)+
getitemlink(Grenade)+
getitemlink(AncientBlueprint)+
getitemlink(TreasureMap)+
getitemlink(CrazyRum)+
getitemlink(MercBoxB));
mesc l("Rare Drops: "+
getitemlink(WhiskeyAle)+
getitemlink(GoldenApple)+
getitemlink(DivineApple)+
getitemlink(MagicApple));
next;
.@dest=HCD_MKBASEMENT;
.@hours=8;
break;
case 10:
mesc ".:: " + l("The Market") + " ::.";
mesc l("Send your Homunculus to make money!");
mesc l("Average EXP: "+8), 3;
mesc l("Maximum Profit: @@ GP", format_number(.zenycap)), 3;
mesc l("Common Drops: "+
getitemlink(Piberries));
mesc l("Regular Drops: "+
getitemlink(Bread)+
getitemlink(Cheese)+
getitemlink(Beer));
mesc l("Rare Drops: "+
getitemlink(TreasureMap));
next;
.@dest=HCD_MARKET;
.@hours=1;
break;
default:
close;
}
// Confirmation
mesc l("Really deploy your homunculus?"), 1;
if (askyesno() == ASK_NO)
goto L_Main;
// Deploy Homunculus (if possible)
if (!homstatus() && gethominfo(0)) {
deployhomunculus();
mesc l("Deployed!"), 2;
HOMUN_DEPLOYFIELD=.@dest;
HOMUN_DEPLOYDATE=gettimetick(2)+(60*60*.@hours);
}
close;
// lootField (Field ID)
// Returns amount of Homunculus EXP to get
function lootField {
// Ensure you have free space
inventoryplace Iten, 3, NPCEyes, 9;
.@lv=gethominfo(6);
// Base EXP is based on Homunculus level and intimacy
.@val=.@lv*min(10000, gethominfo(3))/10000;
switch (getarg(0)) {
case HCD_PIOUFIELDS:
.@val+=100;
anyloot(PiouFeathers, .@lv, 10000,
PiouLegs, max(1, .@lv/2), 8000,
HalfEggshell, .@lv, 6000,
GoldenApple, 1, 100);
break;
case HCD_HERBFIELDS:
.@val+=5;
anyloot(ArtichokeHerb, .@lv, 10000,
CobaltHerb, max(1, .@lv/2), 6000,
GambogeHerb, max(1, .@lv/2), 6000,
MauveHerb, max(1, .@lv/2), 6000,
AlizarinHerb, max(1, .@lv/2), 6000,
ShadowHerb, max(1, .@lv/3), 4000,
ReedBundle, 2, 800);
break;
case HCD_OREMINES:
.@val+=12;
anyloot(Coal, .@lv, 9999,
IronOre, max(1, .@lv/2), 2000,
CopperOre, max(1, .@lv/2), 1000,
SilverOre, max(1, .@lv/3), 700,
GoldOre, max(1, .@lv/4), 450,
TinOre, max(1, .@lv/5), 350,
LeadOre, max(1, .@lv/6), 300,
TitaniumOre, max(1, .@lv/8), 100,
(REBIRTH ? IridiumOre : TitaniumOre), max(1, .@lv/10), 80,
(REBIRTH ? PlatinumOre : IridiumOre), 1, 20);
break;
case HCD_RAREMINES:
.@val+=15;
anyloot(Pearl, 1, 9999,
Diamond, limit(1, .@lv/2, 3), 2000,
Ruby, limit(1, .@lv/2, 3), 1700,
Emerald, limit(1, .@lv/2, 3), 1400,
Sapphire, limit(1, .@lv/2, 3), 1100,
Topaz, limit(1, .@lv/2, 3), 800,
Amethyst, limit(1, .@lv/2, 3), 500,
LightGreenDiamond, 1, 100,
BlackPearl, 1, 10,
BlueManaPearl, 1, 1);
break;
case HCD_SLIMENEST:
.@val+=800;
anyloot(MaggotSlime, .@lv, 10000,
Arrow, .@lv, 9000,
IronArrow, .@lv, 4000,
TreasureKey, max(1, .@lv/10), 6000,
CactusDrink, limit(1, .@lv/10, 3), 4000,
CoinBag, limit(1, .@lv/8, 5), 4000,
CasinoCoins, limit(1, .@lv/6, 10), 3200,
Coal, limit(1, .@lv/10, 3), 3000,
Dagger, limit(1, .@lv/15, 3), 3000,
Candy, limit(1, .@lv/5, 6), 2000,
ChocolateBar, limit(1, .@lv/20, 3), 1000,
Milk, 1, 200,
IcedBottle, 1, 60);
break;
case HCD_SNAKEPIT:
.@val+=2250;
anyloot(SnakeEgg, limit(1, .@lv/8, 10), 9600,
SnakeTongue, limit(1, .@lv/16, 5), 9500,
SnakeSkin, limit(1, .@lv/20, 3), 7000,
JeansShorts, 1, 300,
DivineApple, 1, 10,
Kanabo, 1, 1); // Teasing Xanthem for mapping here
break;
case HCD_DANGERAREA:
.@val+=70000;
anyloot(HastePotion, limit(1, .@lv/20, 10), 4000,
StrengthPotion, limit(1, .@lv/20, 10), 4000,
SmokeGrenade, limit(1, .@lv/18, 8), 4000,
Grenade, limit(1, .@lv/28, 6), 3000,
MoubooSteak, limit(1, .@lv/28, 6), 2500,
MercBoxA, 1, 2000,
AncientBlueprint, 1, 1500,
Lockpicks, limit(1, .@lv/30, 4), 1000,
StatusResetPotion, 1, 1000,
TreasureMap, 1, 700,
MagicApple, 1, 40);
break;
case HCD_MKBASEMENT:
.@val+=1000000;
anyloot(HastePotion, limit(1, .@lv/20, 10), 6000,
StrengthPotion, limit(1, .@lv/20, 10), 6000,
Curshroom, limit(1, .@lv/28, 6), 4500,
SmokeGrenade, limit(1, .@lv/18, 8), 4500,
Grenade, limit(1, .@lv/28, 6), 3500,
AncientBlueprint, 1, 2500,
TreasureMap, 1, 2000,
CrazyRum, 1, 1500,
MercBoxB, 1, 1000,
WhiskeyAle, 1, 400,
GoldenApple, 1, 80,
DivineApple, 1, 60,
MagicApple, 1, 45);
break;
case HCD_MARKET:
.@val+=8;
// Sending a fresh homun in market may yield no GP.
Zeny+=min(.zenycap, 1000*.@lv*min(10000, gethominfo(3))/100000);
anyloot(Piberries, .@lv, 9000,
Bread, limit(1, .@lv/3, 12), 7000,
Cheese, .@lv, 5000,
Beer, limit(1, .@lv/10, 10), 1200,
TreasureMap, 1, 420);
break;
}
// A final boost for sake of randomness
.@val+=rand2(0, 3);
return .@val;
}
OnInit:
.sex=G_MALE;
.distance=5;
// Old Maximum Profit: 10,000 GP
// Coin Bag farming: 180 mobs, at 5% drop rate: 5,000 GP max
.zenycap=7500;
end;
}