summaryrefslogtreecommitdiff
path: root/npc/003-0/tanker.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/003-0/tanker.txt')
-rw-r--r--npc/003-0/tanker.txt220
1 files changed, 220 insertions, 0 deletions
diff --git a/npc/003-0/tanker.txt b/npc/003-0/tanker.txt
new file mode 100644
index 000000000..7f7e7d72d
--- /dev/null
+++ b/npc/003-0/tanker.txt
@@ -0,0 +1,220 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Leader of the TANKER class
+
+003-0,38,41,2 script Tanker Master NPC_PLAYER,{
+ /*
+ if (!is_staff())
+ goto L_Close;
+ */
+ if (!(MAGIC_SUBCLASS & CL_TANKER))
+ 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(MAGIC_WARRIOR) < 2)
+ goto L_Close;
+ mesn;
+ mesq l("Hey there! Do you want to join the Tanker 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_TANKER;
+ mesn;
+ mesq l("Welcome to the tanker 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
+// Tanker
+// CR_TRUST (raise Max HP in 200 and Holy Resistance in 5%, passive)
+// CR_AUTOGUARD (5% chance to complety block attack. Freeze you for a while. Req. Shield. Last 5m.)
+// CR_DEFENDER (less damage from ranged attacks, but lowers move & attack speed. Req. Shield) - max lv 4 plz. Last 3m.
+// SM_RECOVERY (insignificant HP recovery every 10s without moving. Better with higher level.) - low mp cost
+
+L_Member:
+ mesn;
+ mesq l("Hey there! Do you want to learn new skills for a very small teaching fee?");
+ select
+ rif(sk_intcost(CR_TRUST) && getskilllv(CR_TRUST) < 1+(degree_subclass()/2), l("Learn Last Standing Man")),
+ "",
+ //rif(sk_intcost(CR_AUTOGUARD) && sk_canlvup(CR_AUTOGUARD), l("Improve Guard")),
+ rif(sk_intcost(CR_DEFENDER) && sk_canlvup(CR_DEFENDER), l("Improve Arrow Shield")),
+ rif(sk_intcost(SM_RECOVERY) && sk_canlvup(SM_RECOVERY), l("Improve Standing HP Regen")),
+ l("Leave Subclass"),
+ l("Nothing at the moment.");
+ mes "";
+ switch (@menu) {
+ case 1:
+ mesc l("[Last Standing Man]");
+ mesc l("Raises max HP and holy resistance. Passive.");
+ mes "";
+ mesn;
+ mesq l("This useful skill will only require:");
+ mesc l("@@/@@ @@", countitem(Cheese), (getskilllv(CR_TRUST)+1)*50, getitemlink(Cheese));
+ mesc l("@@/@@ @@", countitem(Coral), (getskilllv(CR_TRUST)+1)*30, getitemlink(Coral));
+ mesc l("@@/@@ @@", countitem(PiberriesInfusion), (getskilllv(CR_TRUST)+1)*20, getitemlink(PiberriesInfusion));
+ mesc l("@@/@@ @@", countitem(FluoPowder), (getskilllv(CR_TRUST)+1)*15, getitemlink(FluoPowder));
+ mesc l("@@/@@ @@", countitem(HastePotion), (getskilllv(CR_TRUST)+1)*10, getitemlink(HastePotion));
+ mesc l("@@/@@ @@", countitem(DiamondPowder), (getskilllv(CR_TRUST)+1)*3, getitemlink(DiamondPowder));
+ mesc l("@@/@@ @@", countitem(GrassCarp), (getskilllv(CR_TRUST)+1)*1, getitemlink(GrassCarp));
+ mesc l("@@/@@ @@", countitem(ElixirOfLife), (getskilllv(CR_TRUST)+1)*1, getitemlink(ElixirOfLife));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (
+ countitem(Cheese) < (getskilllv(CR_TRUST)+1)*50 ||
+ countitem(Coral) < (getskilllv(CR_TRUST)+1)*30 ||
+ countitem(PiberriesInfusion) < (getskilllv(CR_TRUST)+1)*20 ||
+ countitem(FluoPowder) < (getskilllv(CR_TRUST)+1)*15 ||
+ countitem(HastePotion) < (getskilllv(CR_TRUST)+1)*10 ||
+ countitem(DiamondPowder) < (getskilllv(CR_TRUST)+1)*3 ||
+ countitem(GrassCarp) < (getskilllv(CR_TRUST)+1)*1 ||
+ countitem(ElixirOfLife) < (getskilllv(CR_TRUST)+1)*1) goto L_Missing;
+
+ delitem Cheese, (getskilllv(CR_TRUST)+1)*50;
+ delitem Coral, (getskilllv(CR_TRUST)+1)*30;
+ delitem PiberriesInfusion, (getskilllv(CR_TRUST)+1)*20;
+ delitem FluoPowder, (getskilllv(CR_TRUST)+1)*15;
+ delitem HastePotion, (getskilllv(CR_TRUST)+1)*10;
+ delitem DiamondPowder, (getskilllv(CR_TRUST)+1)*3;
+ delitem GrassCarp, (getskilllv(CR_TRUST)+1)*1;
+ delitem ElixirOfLife, (getskilllv(CR_TRUST)+1)*1;
+
+ sk_lvup(CR_TRUST);
+
+ next;
+ }
+ break;
+ case 2:
+ mesc l("[Guard]");
+ mesc l("Raises chance to entirely block an attack, but freezes you for a while. Req. Shield.");
+ mes "";
+ // TODO: Requirem, quest, agree
+ sk_lvup(CR_AUTOGUARD);
+ break;
+ case 3:
+ mesc l("[Arrow Shield]");
+ mesc l("Decrease ranged damage taken for a few minutes, in exchange of agi and move speed. Req. Shield.");
+ mes "";
+ mesn;
+ mesq l("This useful skill will only require:");
+ mesc l("@@/@@ @@", countitem(PiouFeathers), (getskilllv(CR_DEFENDER)+1)*60, getitemlink(PiouFeathers));
+ mesc l("@@/@@ @@", countitem(PoisonArrow), (getskilllv(CR_DEFENDER)+1)*10, getitemlink(PoisonArrow));
+ mesc l("@@/@@ @@", countitem(CursedArrow), (getskilllv(CR_DEFENDER)+1)*10, getitemlink(CursedArrow));
+ mesc l("@@/@@ @@", countitem(OrangeCupcake), (getskilllv(CR_DEFENDER)+1)*6, getitemlink(OrangeCupcake));
+ mesc l("@@/@@ @@", countitem(Mashmallow), (getskilllv(CR_DEFENDER)+1)*5, getitemlink(Mashmallow));
+ mesc l("@@/@@ @@", countitem(Orange), (getskilllv(CR_DEFENDER)+1)*4, getitemlink(Orange));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (
+ countitem(PiouFeathers) < (getskilllv(CR_DEFENDER)+1)*60 ||
+ countitem(PoisonArrow) < (getskilllv(CR_DEFENDER)+1)*10 ||
+ countitem(CursedArrow) < (getskilllv(CR_DEFENDER)+1)*10 ||
+ countitem(OrangeCupcake) < (getskilllv(CR_DEFENDER)+1)*6 ||
+ countitem(Mashmallow) < (getskilllv(CR_DEFENDER)+1)*5 ||
+ countitem(Orange) < (getskilllv(CR_DEFENDER)+1)*4) goto L_Missing;
+
+ delitem PiouFeathers, (getskilllv(CR_DEFENDER)+1)*60;
+ delitem PoisonArrow, (getskilllv(CR_DEFENDER)+1)*10;
+ delitem CursedArrow, (getskilllv(CR_DEFENDER)+1)*10;
+ delitem PrangeCupcake, (getskilllv(CR_DEFENDER)+1)*6;
+ delitem Mashmallow, (getskilllv(CR_DEFENDER)+1)*5;
+ delitem Orange, (getskilllv(CR_DEFENDER)+1)*4;
+
+ sk_lvup(CR_DEFENDER);
+
+ next;
+ }
+ break;
+ case 4:
+ mesc l("[Standing Regen]");
+ mesc l("Regenerate HP every 5 seconds, as if you were always eating a healing item.");
+ mes "";
+ mesn;
+ mesq l("This useful skill will only require:");
+ mesc l("@@/@@ @@", countitem(PiberriesInfusion), (getskilllv(SM_RECOVERY)+1)*10, getitemlink(PiberriesInfusion));
+ mesc l("@@/@@ @@", countitem(BlackMambaEgg), (getskilllv(SM_RECOVERY)+1)*6, getitemlink(BlackMambaEgg));
+ mesc l("@@/@@ @@", countitem(MoubooSteak), (getskilllv(SM_RECOVERY)+1)*4, getitemlink(MoubooSteak));
+ mesc l("@@/@@ @@", countitem(TonoriDelight), (getskilllv(SM_RECOVERY)+1)*8, getitemlink(TonoriDelight));
+ next;
+ if (askyesno() == ASK_YES) {
+ if (
+ countitem(PiberriesInfusion) < (getskilllv(SM_RECOVERY)+1)*10 ||
+ countitem(BlackMambaEgg) < (getskilllv(SM_RECOVERY)+1)*6 ||
+ countitem(MoubooSteak) < (getskilllv(SM_RECOVERY)+1)*4 ||
+ countitem(TonoriDelight) < (getskilllv(SM_RECOVERY)+1)*8) goto L_Missing;
+
+ delitem PiberriesInfusion, (getskilllv(SM_RECOVERY)+1)*10;
+ delitem BlackMambaEgg, (getskilllv(SM_RECOVERY)+1)*6;
+ delitem MoubooSteak, (getskilllv(SM_RECOVERY)+1)*4;
+ delitem TonoriDelight, (getskilllv(SM_RECOVERY)+1)*8;
+
+ sk_lvup(SM_RECOVERY);
+ //mesc l("This skill can be further improved with Job Points");
+
+ next;
+ }
+ break;
+ case 5:
+ // 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 CR_TRUST, 0, 0;
+ skill CR_AUTOGUARD, 0, 0;
+ skill CR_DEFENDER, 0, 0;
+ skill SM_RECOVERY, 0, 0;
+ MAGIC_SUBCLASS=MAGIC_SUBCLASS^CL_TANKER;
+ mesc l("You abandoned the TANKER 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);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, WarlordPlate);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, SteelShield);
+ setunitdata(.@npcId, UDT_WEAPON, JeansChaps);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 2);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 4);
+
+ .sex=G_MALE;
+ .distance=5;
+ end;
+}
+