// TMW2 scripts.
// Authors:
// Jesusalva
// Description:
// Leader of the SAGE class
003-0,61,25,0 script Sage Master NPC_PLAYER,{
/*
if (!is_staff())
goto L_Close;
*/
if (!(MAGIC_SUBCLASS & CL_SAGE))
goto L_SignUp;
goto L_Member;
// Sign Up
L_SignUp:
// Not allowed if subclass filled or not from main class
if (total_subclass() >= max_subclass() || getskilllv(WIZARD_MAGE) < 2)
goto L_Close;
mesn;
mesq l("Hey there! Do you want to join the Sage Class?");
mesc l("Warning: If you join a subclass, you can't leave it later!"), 1;
mesc b(l("Warning: This class haven't been tested/balanced yet. Feedback is required!")), 1;
next;
if (askyesno() != ASK_YES)
close;
// TODO: Requeriment for signing up to a subclass? Or is the tier + skill quest hard enough?
MAGIC_SUBCLASS=MAGIC_SUBCLASS|CL_SAGE;
mesn;
mesq l("Welcome to the sage guild!");
close;
// Close
L_Close:
goodbye;
closedialog;
close;
L_Missing:
mesn;
mesq l("Hey hey! You don't have that stuff, CAN'T YOU READ?!");
percentheal 0, -10;
next;
goto L_Member;
// Membership area
// Sage
// CR_TRUST (raise Max HP in 200 and Holy Resistance in 5%, passive)
// AL_ANGELUS (DEF Increase 5% for 15s/LVL, 14x14 area for PARTY)
// PR_REDEMPTIO (suicide with death penalty. Revive dead party members on a 29x29 area. Min. 1% xp. 0.01% xp penalty reduction per revive)
// MER_INCAGI (raise agi and move speed for 20s/LVL. Have an HP cost.)
// SM_BASH up to level 4 (+220% dmg and +20% acc). PS. If you have MP, SM_BASH is very powerful.
L_Member:
mesn;
mesq l("Hey there! Do you want to learn new skills for a very small teaching fee?");
select
rif(sk_intcost(SA_FREECAST) && getskilllv(SA_FREECAST) < (1+degree_subclass()/2), l("Learn Action Casting")),
rif(sk_intcost(SA_DRAGONOLOGY) && getskilllv(SA_DRAGONOLOGY) < (1+degree_subclass()/2), l("Learn Dragon Slayer")),
rif(sk_intcost(TMW2_SAGE) && sk_canlvup(TMW2_SAGE), l("Improve Mana Wisdom")),
rif(sk_intcost(SA_FLAMELAUNCHER) && sk_canlvup(SA_FLAMELAUNCHER), l("Improve Fire Weapon")),
rif(sk_intcost(SA_FROSTWEAPON) && sk_canlvup(SA_FROSTWEAPON), l("Improve Ice Weapon")),
rif(sk_intcost(SA_LIGHTNINGLOADER) && sk_canlvup(SA_LIGHTNINGLOADER), l("Improve Wind Weapon")),
rif(sk_intcost(SA_SEISMICWEAPON) && sk_canlvup(SA_SEISMICWEAPON), l("Improve Earth Weapon")),
l("Leave Subclass"),
l("Nothing at the moment.");
mes "";
switch (@menu) {
case 1:
mesc l("[Action Casting]");
mesc l("Allows to move/attack while casting. (Melee attacks still interrupt casting!)");
mes "";
mesn;
mesq l("This useful skill will only require:");
mesc l("@@/@@ @@", countitem(Tentacle), (getskilllv(SA_FREECAST)+1)*10, getitemlink(Tentacle));
mesc l("@@/@@ @@", countitem(MushroomSpores), (getskilllv(SA_FREECAST)+1)*5, getitemlink(MushroomSpores));
mesc l("@@/@@ @@", countitem(WolvernTooth), (getskilllv(SA_FREECAST)+1)*3, getitemlink(WolvernTooth));
mesc l("@@/@@ @@", countitem(RedScorpionClaw), (getskilllv(SA_FREECAST)+1)*1, getitemlink(RedScorpionClaw));
next;
if (askyesno() == ASK_YES) {
if (
countitem(Tentacle) < (getskilllv(SA_FREECAST)+1)*10 ||
countitem(MushroomSpores) < (getskilllv(SA_FREECAST)+1)*5 ||
countitem(WolvernTooth) < (getskilllv(SA_FREECAST)+1)*3 ||
countitem(RedScorpionClaw) < (getskilllv(SA_FREECAST)+1)*1) goto L_Missing;
delitem Tentacle, (getskilllv(SA_FREECAST)+1)*10;
delitem MushroomSpores, (getskilllv(SA_FREECAST)+1)*5;
delitem WolvernTooth, (getskilllv(SA_FREECAST)+1)*3;
delitem RedScorpionClaw, (getskilllv(SA_FREECAST)+1)*1;
sk_lvup(SA_FREECAST);
next;
}
break;
case 2:
mesc l("[Dragon Slayer]");
mesc l("Raises attack and resistance against dragons. Also raises int. Passive.");
mes "";
mesn;
mesq l("This useful skill will only require:");
mesc l("@@/@@ @@", countitem(Acorn), (getskilllv(SA_DRAGONOLOGY)+1)*70, getitemlink(Acorn));
mesc l("@@/@@ @@", countitem(Root), (getskilllv(SA_DRAGONOLOGY)+1)*10, getitemlink(Root));
mesc l("@@/@@ @@", countitem(FrozenYetiTear),(getskilllv(SA_DRAGONOLOGY)+1)*2, getitemlink(FrozenYetiTear));
mesc l("@@/@@ @@", countitem(FluoPowder), (getskilllv(SA_DRAGONOLOGY)+1)*1, getitemlink(FluoPowder));
next;
if (askyesno() == ASK_YES) {
if (
countitem(Acorn) < (getskilllv(SA_DRAGONOLOGY)+1)*70 ||
countitem(Root) < (getskilllv(SA_DRAGONOLOGY)+1)*10 ||
countitem(FrozenYetiTear) < (getskilllv(SA_DRAGONOLOGY)+1)*2 ||
countitem(FluoPowder) < (getskilllv(SA_DRAGONOLOGY)+1)*1) goto L_Missing;
delitem Acorn, (getskilllv(SA_DRAGONOLOGY)+1)*70;
delitem Root, (getskilllv(SA_DRAGONOLOGY)+1)*10;
delitem FrozenYetiTear, (getskilllv(SA_DRAGONOLOGY)+1)*2;
delitem FluoPowder, (getskilllv(SA_DRAGONOLOGY)+1)*1;
sk_lvup(SA_DRAGONOLOGY);
next;
}
break;
case 3:
mesc l("[Mana Wisdom]");
mesc l("Increase mana experience gain, when using mana skills.");
mes "";
mesn;
mesq l("This useful skill will only require:");
mesc l("@@/@@ @@", countitem(Acorn), (getskilllv(TMW2_SAGE)+1)*60, getitemlink(Acorn));
mesc l("@@/@@ @@", countitem(Bread), (getskilllv(TMW2_SAGE)+1)*30, getitemlink(Bread));
mesc l("@@/@@ @@", countitem(SmallMushroom), (getskilllv(TMW2_SAGE)+1)*20, getitemlink(SmallMushroom));
mesc l("@@/@@ @@", countitem(PinkBlobime), (getskilllv(TMW2_SAGE)+1)*20, getitemlink(PinkBlobime));
mesc l("@@/@@ @@", countitem(RedApple), (getskilllv(TMW2_SAGE)+1)*15, getitemlink(RedApple));
next;
if (askyesno() == ASK_YES) {
if (
countitem(Acorn) < (getskilllv(TMW2_SAGE)+1)*60 ||
countitem(Bread) < (getskilllv(TMW2_SAGE)+1)*30 ||
countitem(SmallMushroom) < (getskilllv(TMW2_SAGE)+1)*20 ||
countitem(PinkBlobime) < (getskilllv(TMW2_SAGE)+1)*20 ||
countitem(RedApple) < (getskilllv(TMW2_SAGE)+1)*15) goto L_Missing;
delitem Acorn, (getskilllv(TMW2_SAGE)+1)*60;
delitem Bread, (getskilllv(TMW2_SAGE)+1)*30;
delitem SmallMushroom, (getskilllv(TMW2_SAGE)+1)*20;
delitem PinkBlobime, (getskilllv(TMW2_SAGE)+1)*20;
delitem RedApple, (getskilllv(TMW2_SAGE)+1)*15;
sk_lvup(TMW2_SAGE);
next;
}
break;
// Weapon Enhance
case 4:
case 5:
case 6:
case 7:
setarray .@ASkill, SA_FLAMELAUNCHER, SA_FROSTWEAPON, SA_LIGHTNINGLOADER, SA_SEISMICWEAPON;
setarray .@AItem, Curshroom, Coral, BatWing, PileOfAsh;
setarray .@BItem, Ruby, Sapphire, Emerald, Topaz;
setarray .@ASkill$, "Fire", "Ice", "Wind", "Earth";
.@index=@menu-4;
.@Skill$=.@ASkill$[.@index];
.@Skill=.@ASkill[.@index];
.@Item=.@AItem[.@index];
.@ItemB=.@BItem[.@index];
deletearray(.@ASkill);
deletearray(.@AItem);
deletearray(.@BItem);
deletearray(.@ASkill$);
mesc l("[@@ Weapon]", .@Skill$);
mesc l("Temporaly switch weapon element to @@. Success rate is fixed at 70%.", .@Skill$);
mes "";
mesn;
mesq l("This useful skill will only require:");
mesc l("@@/@@ @@", countitem(.@Item), (getskilllv(.@Skill)+1)*30, getitemlink(.@Item));
mesc l("@@/@@ @@", countitem(FluoPowder), (getskilllv(.@Skill)+1)*15, getitemlink(FluoPowder));
mesc l("@@/@@ @@", countitem(HerbalTea), (getskilllv(.@Skill)+1)*3, getitemlink(HastePotion));
mesc l("@@/@@ @@", countitem(WoodenLog), (getskilllv(.@Skill)+1)*2, getitemlink(DiamondPowder));
mesc l("@@/@@ @@", countitem(.@ItemB), (getskilllv(.@Skill)+1)*1, getitemlink(.@ItemB));
next;
if (askyesno() == ASK_YES) {
if (
countitem(.@Item) < (getskilllv(.@Skill)+1)*30 ||
countitem(FluoPowder) < (getskilllv(.@Skill)+1)*15 ||
countitem(HerbalTea) < (getskilllv(.@Skill)+1)*3 ||
countitem(WoodenLog) < (getskilllv(.@Skill)+1)*2 ||
countitem(.@ItemB) < (getskilllv(.@Skill)+1)*1) goto L_Missing;
delitem .@Item, (getskilllv(.@Skill)+1)*30;
delitem FluoPowder, (getskilllv(.@Skill)+1)*15;
delitem HerbalTea, (getskilllv(.@Skill)+1)*3;
delitem WoodenLog, (getskilllv(.@Skill)+1)*2;
delitem .@ItemB, (getskilllv(.@Skill)+1)*1;
sk_lvup(.@Skill);
next;
}
break;
case 8:
// All skills related may include the basic class skills if they're related.
mesc l("WARNING: If you leave the subclass, you'll lose all skills related to it!"), 1;
mesc l("This cannot be undone. Are you sure?"), 1;
mes "";
if (askyesno() == ASK_YES) {
mes "";
if (validatepin()) {
skill SA_FREECAST, 0, 0;
skill SA_DRAGONOLOGY, 0, 0;
skill TMW2_SAGE, 0, 0;
skill SA_FLAMELAUNCHER, 0, 0;
skill SA_FROSTWEAPON, 0, 0;
skill SA_LIGHTNINGLOADER, 0, 0;
skill SA_SEISMICWEAPON, 0, 0;
MAGIC_SUBCLASS=MAGIC_SUBCLASS^CL_SAGE;
mesc l("You abandoned the SAGE class!"), 1;
close;
} else {
mesc l("Failed to validate pin. Aborting.");
next;
}
} else {
mes "";
mesc l("Operation aborted. Phew!");
next;
}
break;
default:
goto L_Close;
}
goto L_Member;
OnInit:
.@npcId = getnpcid(.name$);
//setunitdata(.@npcId, UDT_HEADTOP, WarlordHelmet); // TODO: wizard hat
setunitdata(.@npcId, UDT_HEADMIDDLE, SorcererRobe);
setunitdata(.@npcId, UDT_HEADBOTTOM, NPCEyes);
setunitdata(.@npcId, UDT_WEAPON, JeansChaps);
setunitdata(.@npcId, UDT_HAIRSTYLE, 2);
setunitdata(.@npcId, UDT_HAIRCOLOR, 4);
.sex=G_MALE;
.distance=5;
end;
}