From 72c736b7174ed2ee828095ef36571cdc814ccdbe Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Wed, 18 Jul 2018 12:13:15 -0300 Subject: Initial version of Sage --- npc/003-0/_import.txt | 1 + npc/003-0/sage.txt | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 npc/003-0/sage.txt (limited to 'npc/003-0') 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; +} + -- cgit v1.2.3-60-g2f50