// TMW2 scripts.
// Authors:
// Jesusalva and TMW Org.
// Description:
// Sagratha (variables SAGRATHA_SCORE and SAGRATHA_FRIENDSHIP)
// SaggyScoreUpdate( amount )
function script SaggyScoreUpdate {
.@val=getarg(0);
SAGRATHA_SCORE=limit(-50, SAGRATHA_SCORE+.@val, 50);
return;
}
function script SaggyMobCount {
switch (killedrid) {
// She gets angry
case AlphaMouboo:
SaggyScoreUpdate(-3);
break;
case Mouboo:
SaggyScoreUpdate(any(-2, -3));
break;
case Pollet:
case Fluffy:
case IcedFluffy:
SaggyScoreUpdate(any(-1, -2, -3));
break;
case PoisonSpikyMushroom:
case LogHead:
case ForestMushroom:
SaggyScoreUpdate(any(-1, -2));
break;
case Squirrel:
case SpringSquirrel:
case LofSquirrel:
case FrozenSquirrel:
case FairysSquirrel:
case MananaTree:
SaggyScoreUpdate(-1);
break;
// She may get happy. Who knows.
case ViciousSquirrel:
case WickedMushroom:
case Bluepar:
case BlackScorpion:
case Bandit:
case RobinBandit:
SaggyScoreUpdate(any(0,0,0,0,1));
break;
}
// Full hate vs Ghosts, Undead and shadow
.@mr=getmonsterinfo(killedrid, MOB_ELEMENT);
switch (.@mr) {
case Ele_Dark:
case Ele_Ghost:
//case Ele_Undead:
SaggyScoreUpdate(any(0,0,0,0,1));
break;
}
return;
}
014-5-1,33,37,0 script Sagratha NPC_SAGRATHA,{
function teachMagic;
function requireHelp;
if (array_find(.SaggyHats, getequipid(EQI_HEAD_TOP)) >= 0)
goto L_HatAttack;
.@q=getq(HurnscaldQuest_Sagratha);
.@m=getq(HurnscaldQuest_InjuriedMouboo);
// Safety - Impossible Situation
if (.@m < 2 || .@m > 3 || .@q < 6) {
Exception("Player found cheating/breaking the rules. Character banned. Please contact GM Staff if you believe this is an error.", RB_DEFAULT|RB_SPEECH);
//atcommand "@jailfor 7h "+strcharinfo(0);
Exception ("Exception at exception, shutting down! (m is "+.@m+", q is "+.@q+")", RB_SPEECH|RB_ISFATAL);
close;
}
mesn;
if (SAGRATHA_FRIENDSHIP >= 2)
mesc l("@@ nods as she notices you.", .name$);
else if (SAGRATHA_FRIENDSHIP == 1)
mesc l("@@ raises an eyebrow as you address her.", .name$);
else
mesc l("@@ glances at you, suspicion evident in her eyes.", .name$);
mesq l("Hello.");
next;
if (.@m == 2 && .@q >= 6)
goto L_Reward;
if (.@q == 6)
goto L_Finish;
if (SAGRATHA_SCORE < 0)
goto L_Unhappy;
do
{
.@x=getq(General_Sagratha);
mesn strcharinfo(0);
select
l("Can I return to the shrine?"),
l("I would like some Mouboo Milk."),
l("Can you teach me magic? Pretty please?"),
l("Can I help you with something?"),
l("What can you tell me about the Moubootaur?"),
l("Good bye.");
mes "";
switch (@menu) {
// XXX: Sealed Shrine
case 1:
mesn;
mesq l("Why would you want to go back there?");
mesc l("@@ snarls.", .name$);
next;
mesn;
mesq l("That was a Moubootaur's temple. It is not the kind of place to give a stroll on the park.");
next;
mesn;
mesq l("Did you noticed how no monster got close to it?");
next;
select
l("You're right. Sorry."),
l("Don't worry, I'll stay at the caves."),
l("I want to pay my respects as a fellow Pink Mouboo cult member."),
l("But I need to!");
mes "";
if (@menu == 3) {
mesn;
mesq l("As a what?");
next;
}
else if (@menu == 4) {
mesn;
mesq l("No you don't. Don't disturb the forest for no reason.");
close;
}
else if (@menu == 1) {
mesn;
mesq l("Hmpf. Wise choice.");
next;
break; // Return to the while loop
}
mesn;
mesq l("As you wish. But do not mess with things you don't understand.");
next;
closeclientdialog;
warp "015-8", 99, 178;
close;
// XXX: Mouboo Milk
case 2:
if (SAGRATHA_SCORE < 45) {
mesn;
mesq l("You don't need, nor deserve it.");
next;
mesn;
mesq l("Learn milking a Mouboo. And if you harm them, I'll cast a lightning bolt at you!");
next;
break;
}
if (SAGRATHA_MILK > gettimeparam(GETTIME_HOUR)) {
mesn;
mesq l("I just gave you it. Come back later.");
next;
break;
}
inventoryplace Milk, 2;
SAGRATHA_SCORE-=8; // :o
SAGRATHA_MILK=gettimeparam(GETTIME_HOUR)+4;
getitem Milk, any(1,1,1,1,1,1,2);
mesn;
mesq l("Here. You know that milking Mouboos won't cause them harm, right? It's a different story with @@.", getitemlink(MoubooSteak));
close;
break;
// XXX: Teach magic / etc
case 3:
case 4:
if (.@x % 2 == 0)
teachMagic();
else
requireHelp();
break;
// XXX: Moubootaur
case 5:
mesn;
mesq l("It's a scary legend of old. It's truth, but I don't know how much it is.");
next;
mesn;
mesq l("Anyway, the Moubootaur certainly existed, and probably is still alive.");
next;
mesn;
mesq l("How powerful they were or are, their cruelty, their judgment against the Terranite Civilization and the other bloody details of the legend... I cannot confirm them to you.");
next;
break;
default:
closeclientdialog;
goodbye;
close;
}
} while (true);
close;
L_Finish:
// WHAT
if (.@m != 3) {
Exception("Player found cheating/breaking the rules. Character banned. Please contact GM Staff if you believe this is an error.", RB_DEFAULT|RB_SPEECH);
atcommand "@jailfor 7h "+strcharinfo(0);
close;
}
mesn;
mesq l("I haven't thanked you yet.");
next;
select
l("You're welcome."),
l("For the rescue? You didn't seemed to be in need of aid."),
l("Yes, I'm awesome, praise me more."),
l("For the mouboo? I was only doing my duty.");
mes "";
mesn;
if (@menu != 4)
mesq l("Not for that! For helping out the injuried mouboo, of course.");
else
mesq l("Hmpf, it's good to see you're at least trying to follow Wyara's example.");
next;
mesn;
mesq l("Anyway, Wyara told me about the assassins. I'm surprised they followed me until the ruins.");
next;
mesn;
mesq l("I thought I would be safe in the shrine, but seems like they are after the Moubootaur. Great danger will befall all forest creatures if they accomplish that.");
next;
mesn;
mesq l("This will affect humans, too, so don't act as if it is not your bussiness either.");
next;
mesn;
mesq l("For now, take this @@. I hope that you will use this power for something good now.", getitemlink(AlchemyBlueprintB));
inventoryplace AlchemyBlueprintB, 1;
getitem AlchemyBlueprintB, 1;
getexp 24000, 0; // ~70% from level 40 (quest estimate level)
Zeny+=3000; // About 50 carps sold
SAGRATHA_FRIENDSHIP+=1;
setq HurnscaldQuest_Sagratha, 7;
close;
L_Reward:
select
l("Hi! My name is @@.", strcharinfo(0)),
l("Are you Sagratha?"),
l("Good bye.");
mes "";
if (@menu == 3)
close;
if (@menu == 1) {
mesn;
mesq l("Ah.");
next;
select
l("Are you Sagratha?"),
l("Erm... Good bye.");
mes "";
if (@menu == 2)
close;
}
mesn;
mesq l("Yes.");
next;
mesn;
mesq l("Do you need something from me?");
next;
// A check is not needed, because quest pre-requisites
// If you don't have the quest in clearable state... CHEAT!
select
l("Yep. There was a cursed mouboo on the road."),
l("Not really.");
mes "";
if (@menu == 2) {
mesn;
mesq l("Okay then.");
close;
}
mesn;
mesq l("Yes, the cursed Mouboo you told me earlier, on the way out.");
next;
mesn;
mesq l("The curse was done by nobody less than... the Moubootaur.");
next;
mesn;
mesq l("Well. I'll take care of that, don't worry with that.");
next;
mesn;
mesq l("It's my duty to protect the beings in the forest... Not all of them are monsters as @@s like you think.", get_race());
compareandsetq HurnscaldQuest_InjuriedMouboo, 2, 3;
SAGRATHA_FRIENDSHIP+=1;
close;
L_HatAttack:
mesn;
mesc l("@@ seems to be trembling with disgust as she stares at your headgear.", .name$);
next;
mesn;
mesq l("Do you think that is funny?");
mesc l("@@ snarls.", .name$);
next;
mesn;
mesq l("You have no idea what that poor creature felt!");
next;
mesn;
mesc l("She snaps her fingers.");
mesq l("Let me show you...");
specialeffect 312, SELF, getcharid(3);
percentheal -30, 0;
close;
L_Unhappy:
mesn;
mesc l("@@ glares at you in anger.", .name$);
mesq l("I wonder if you can still sleep after killing those innocent forest creatures!");
next;
mesn;
mesq l("I am sure that they will come back to haunt you in your dreams!");
close;
// Functions - TODO: Where are Mouboo Summon? Loghead summon? etc.?
function teachMagic {
.@x=getarg(0,getq(General_Sagratha));
switch (.@x) {
case 0:
if (MAGIC_LVL < 1)
goto L_Magicless;
mesn;
mesc l("@@ nods.", .name$);
mesq l("For now, yes. But you will have to prove that you really care about more than yourself.");
next;
mesn;
mesq l("I'll teach you a spell. It is called CUTE HEART. It summons Fluffies. They are so cute, I want to hug them...");
skill TMW2_CUTEHEART, 1, 0;
setq General_Sagratha, 1;
break;
case 2:
if (MAGIC_LVL < 2)
goto L_Magicless;
mesn;
mesc l("@@ nods.", .name$);
mesq l("Be careful, because the more magic power you ask the Mana Seed, the more difficult to control it will be.");
next;
mesn;
mesq l("This is how the Monster King became evil. Keep practicing magic, so you get more comfortable with it and fail less often.");
next;
mesn;
mesq l("Anyway. This is the KALBOO spell. It'll summon mouboos.");
next;
mesn;
mesq l("The world belong to Mouboos. They are sublime creatures!");
skill TMW2_KALBOO, 1, 0;
setq General_Sagratha, 3;
break;
case 4:
if (MAGIC_LVL < 3)
goto L_Magicless;
mesn;
mesc l("@@ nods.", .name$);
mesq l("You've been doing well. Be careful out there.");
next;
mesn;
mesq l("Anyway. This is the KALWULF spell. It'll spawn Wolverns.");
next;
mesn;
mesq l("Wolverns are fierce creatures who likes cold places. Their fur is soft.");
next;
mesn;
mesq l("You can also use PLANT KINGDOM to spawn several plants at once, too. Let's make this world more green.");
skill TMW2_KALWULF, 1, 0;
skill TMW2_PLANTKINGDOM, 1, 0;
setq General_Sagratha, 5;
break;
case 6:
if (MAGIC_LVL < 4)
goto L_Magicless;
mesn;
mesc l("@@ nods.", .name$);
mesq l("You've been doing quite well, indeed. Ever visited Lilit?");
next;
mesn;
mesq l("Lilit is the fairy kingdom, governed by Lilit the Fairy.");
next;
mesn;
mesq l("Anyway. This is the FAIRY KINGDOM spell. It'll spawn fairies.");
next;
mesn;
mesq l("Fairies usually behaves well, but they hate snakes, so avoid casting halhiss and fairy kingdom at once. You never know.");
skill TMW2_FAIRYKINGDOM, 1, 0;
setq General_Sagratha, 7;
break;
case 8:
if (MAGIC_LVL < 5)
goto L_Magicless;
mesn;
mesc l("@@ nods.", .name$);
mesq l("You've been doing very well, I'm surprised.");
next;
mesn;
mesq l("The most powerful spells can, sometimes, summon some monster you didn't wanted to.");
next;
mesn;
mesq l("This is the FROZENHEART spell. It'll summon... Yeti.");
next;
mesn;
mesq l("But if you're not skilled enough, or lose control of it, a Moggun might be spawned instead. Which is a young, weak, baby Yeti.");
skill TMW2_FROZENHEART, 1, 0;
setq General_Sagratha, 9;
break;
case 10:
if (MAGIC_LVL < 6)
goto L_Magicless;
mesn;
mesc l("@@ nods.", .name$);
mesq l("You've been asking for way too much power from the Mana Seed.");
next;
mesn;
mesq l("Too much power can corrupt you. I've seen this happening before... countless times.");
next;
mesn;
mesq l("This is the STONEHEART spell. It'll summon the fierce Terranite.");
next;
mesn;
mesq l("They used to be an advanced civilization long long ago, but they decided to go against the Moubootaur.");
next;
mesn;
mesq l("They are now like most monsters. I pity them. Their sacrifice was not in vain, though.");
skill TMW2_STONEHEART, 1, 0;
setq General_Sagratha, 11;
break;
case 12:
if (MAGIC_LVL < 7)
goto L_Magicless;
mesn;
mesc l("@@ nods reluctantly.", .name$);
mesq l("If you try take any more power from the Mana Seed, I'll kill you.");
next;
mesn;
mesq l("Seven levels is what the Mana Seed may give to any race but Saviors.");
next;
mesn;
mesq l("Of course, the Savior race is extinct as far as history book concern with.");
next;
mesn;
mesq l("This is the FAIRYEMPIRE spell. It'll summon Pixies.");
next;
mesn;
mesq l("For simple-minded individuals like you, pixies are fairies.");
skill TMW2_FAIRYEMPIRE, 1, 0;
setq General_Sagratha, 13;
break;
}
/*
Plants Lv 1
Kalmurk Lv 10
Zarkor Lv 15
Fluffy Lv 15
Poison Spiky Mushroom Lv 25
Limerizer Lv 30 → Unused
Mouboo Lv 35
Halhiss Lv 40
Wolvern Lv 45
Fairy Kingdom Lv 50
Frozenheart Lv 60
Dragokin Lv 70 → Unused (Lilit reward)
Stoneheart Lv 80
Pixies Lv 90
Never released:
TODO Scorpions Lv 30~50
TODO Black Mamba Lv 80
TODO Moonshroom Lv 80
TODO Centaur Lv 80
skill TMW2_DRAGOKIN, 5;
*/
next;
return;
}
function requireHelp {
.@x=getarg(0,getq(General_Sagratha));
switch (.@x) {
case 1:
mesn;
mesq l("I need help because, you see, I don't carry a cauldron around.");
next;
mesn;
mesq l("I need @@ @@, if you could arrange me that I would be grateful.", 35, getitemlink(PiberriesInfusion));
if (countitem(PiberriesInfusion) < 35)
break;
next;
mesc l("Deliver the potions to Sagratha?");
if (askyesno() == ASK_YES) {
delitem PiberriesInfusion, 35;
getexp 800, 0;
mesn;
mesq l("Thanks. Do you know the KALSPIKE magic? It allows you to summon Poison Spiky Mushroom. Just use a spore.");
skill TMW2_KALSPIKE, 1, 0;
setq General_Sagratha, 2;
}
break;
case 3:
.@m=Wolvern;
if (BaseLevel < getmonsterinfo(.@m, MOB_LV)) {
mesn;
mesq l("When you're stronger I may consider asking for your help.");
break;
}
mesn;
mesq l("I need help because, you see, I don't carry a cauldron around.");
next;
mesn;
mesq l("I need @@ @@, if you could arrange me that I would be grateful.", 1, getitemlink(GoldenApple));
if (countitem(GoldenApple) < 1)
break;
next;
mesc l("Deliver the items to Sagratha?");
if (askyesno() == ASK_YES) {
delitem GoldenApple, 1;
.@xp=getmonsterinfo(.@m, MOB_BASEEXP);
.@jp=getmonsterinfo(.@m, MOB_JOBEXP);
getexp .@xp*20, .@jp*15;
mesn;
mesq l("Thanks. I am willing to share you more magic, if you're interested.");
setq General_Sagratha, 4;
}
break;
case 5:
.@m=FireFairy;
if (BaseLevel < getmonsterinfo(.@m, MOB_LV)) {
mesn;
mesq l("When you're stronger I may consider asking for your help.");
break;
}
mesn;
mesq l("I need help because, you see, I don't carry a cauldron around.");
next;
mesn;
mesq l("I need @@ @@, if you could arrange me that I would be grateful.", 1, getitemlink(LilitWarpCrystal));
if (countitem(LilitWarpCrystal) < 1)
break;
next;
mesc l("Deliver the items to Sagratha?");
if (askyesno() == ASK_YES) {
delitem LilitWarpCrystal, 1;
.@xp=getmonsterinfo(.@m, MOB_BASEEXP);
.@jp=getmonsterinfo(.@m, MOB_JOBEXP);
getexp .@xp*20, .@jp*15;
mesn;
mesq l("Thanks. I am willing to share you more magic, if you're interested.");
setq General_Sagratha, 6;
}
break;
case 7:
.@m=Yeti;
if (BaseLevel < getmonsterinfo(.@m, MOB_LV)) {
mesn;
mesq l("When you're stronger I may consider asking for your help.");
break;
}
mesn;
mesq l("I need help because, you see, I don't carry a cauldron around.");
next;
mesn;
mesq l("I need @@ @@, if you could arrange me that I would be grateful.", 20, getitemlink(SacredManaPotion));
if (countitem(SacredManaPotion) < 20)
break;
next;
mesc l("Deliver the items to Sagratha?");
if (askyesno() == ASK_YES) {
delitem SacredManaPotion, 20;
.@xp=getmonsterinfo(.@m, MOB_BASEEXP);
.@jp=getmonsterinfo(.@m, MOB_JOBEXP);
getexp .@xp*20, .@jp*15;
mesn;
mesq l("Thanks. I am willing to share you more magic, if you're interested.");
setq General_Sagratha, 8;
}
break;
case 9:
.@m=Terranite;
if (BaseLevel < getmonsterinfo(.@m, MOB_LV)) {
mesn;
mesq l("When you're stronger I may consider asking for your help.");
break;
}
mesn;
mesq l("I need help because, you see, I don't carry a cauldron around.");
next;
mesn;
mesq l("I need @@ @@, if you could arrange me that I would be grateful.", 20, getitemlink(SacredImmortalityPotion));
if (countitem(SacredImmortalityPotion) < 20)
break;
mesq l("Ah! I also want @@ @@.", 1, getitemlink(Arcanum));
if (countitem(Arcanum) < 1)
break;
next;
mesc l("Deliver the items to Sagratha?");
if (askyesno() == ASK_YES) {
delitem SacredImmortalityPotion, 20;
delitem Arcanum, 1;
.@xp=getmonsterinfo(.@m, MOB_BASEEXP);
.@jp=getmonsterinfo(.@m, MOB_JOBEXP);
getexp .@xp*20, .@jp*15;
mesn;
mesq l("Thanks. I am willing to share you more magic, if you're interested.");
setq General_Sagratha, 10;
}
break;
default:
mesn;
mesq l("Maybe. Come back later.");
next;
break;
}
next;
return;
}
L_Lie:
mesn;
mesq l("I'm not blind.");
close;
L_Magicless:
mesn;
mesq l("Not yet. You have to ask the mana seed to give you more power.");
next;
mesn;
mesq l("Your skill in magic is not great enough to use some of the spells yet, so keep practicing and visiting the mana seed until it is.");
close;
OnInit:
setarray .SaggyHats, FluffyHat, MoubooHat, AlphaMoubooHat;
.distance=5;
npcsit;
end;
OnInstanceInit:
disablenpc instance_npcname(.name$);
end;
}