summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
Diffstat (limited to 'npc')
-rw-r--r--npc/003-0/_import.txt1
-rw-r--r--npc/003-0/sage.txt199
2 files changed, 200 insertions, 0 deletions
diff --git a/npc/003-0/_import.txt b/npc/003-0/_import.txt
index fda237c3c..a59b9c25d 100644
--- a/npc/003-0/_import.txt
+++ b/npc/003-0/_import.txt
@@ -5,5 +5,6 @@
"npc/003-0/berserk.txt",
"npc/003-0/mages.txt",
"npc/003-0/paladin.txt",
+"npc/003-0/sage.txt",
"npc/003-0/tanker.txt",
"npc/003-0/warriors.txt",
diff --git a/npc/003-0/sage.txt b/npc/003-0/sage.txt
new file mode 100644
index 000000000..fccea67c6
--- /dev/null
+++ b/npc/003-0/sage.txt
@@ -0,0 +1,199 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Leader of the SAGE class
+
+003-0,34,37,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;
+ 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), l("Learn Action Casting")),
+ rif(sk_intcost(SA_DRAGONOLOGY) && getskilllv(SA_DRAGONOLOGY) < (1+degree_subclass()/2), l("Improve Dragon Slayer")),
+ rif(sk_intcost(TMW2_SAGE) && sk_canlvup(TMW2_SAGE), l("Improve Mana Exp Gain")),
+ 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) {
+ // SA_FREECAST, SA_DRAGONOLOGY, TMW2_SAGE
+ case 1:
+ case 2:
+ case 3:
+ mesc l("[Party Area Defense]");
+ mesc l("Raises defense of the whole party in 5% for a while.");
+ mes "";
+ mesn;
+ mesq l("This useful skill will only require:");
+ mesc l("@@/@@ @@", countitem(PiberriesInfusion), (getskilllv(AL_ANGELUS)+1)*10, getitemlink(PiberriesInfusion));
+ mesc l("@@/@@ @@", countitem(BlackMambaEgg), (getskilllv(AL_ANGELUS)+1)*2, getitemlink(BlackMambaEgg));
+ mesc l("@@/@@ @@", countitem(MoubooSteak), (getskilllv(AL_ANGELUS)+1)*4, getitemlink(MoubooSteak));
+ mesc l("@@/@@ @@", countitem(IronIngot), (getskilllv(AL_ANGELUS)+1)*1, getitemlink(IronIngot));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (
+ countitem(PiberriesInfusion) < (getskilllv(AL_ANGELUS)+1)*10 ||
+ countitem(BlackMambaEgg) < (getskilllv(AL_ANGELUS)+1)*2 ||
+ countitem(MoubooSteak) < (getskilllv(AL_ANGELUS)+1)*4 ||
+ countitem(IronIngot) < (getskilllv(AL_ANGELUS)+1)*1) goto L_Missing;
+
+ delitem PiberriesInfusion, (getskilllv(AL_ANGELUS)+1)*10;
+ delitem BlackMambaEgg, (getskilllv(AL_ANGELUS)+1)*2;
+ delitem MoubooSteak, (getskilllv(AL_ANGELUS)+1)*4;
+ delitem IronIngot, (getskilllv(AL_ANGELUS)+1)*1;
+
+ sk_lvup(AL_ANGELUS);
+
+ 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(0, .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;
+}
+