From 97ac6817ffdbebef3f7605e38c8a69420fa46cee Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Mon, 16 Jul 2018 15:33:49 -0300 Subject: Ragger Prototype --- db/constants.conf | 2 +- db/re/skill_tree.conf | 2 +- npc/003-0/_import.txt | 1 + npc/003-0/berserk.txt | 159 ++++++++++++++++++++++++++++++++++++++++++++++++ npc/functions/class.txt | 12 +++- npc/functions/util.txt | 2 +- npc/items/books.txt | 18 +++--- 7 files changed, 182 insertions(+), 14 deletions(-) create mode 100644 npc/003-0/berserk.txt diff --git a/db/constants.conf b/db/constants.conf index 27269ada7..112755d70 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -3850,7 +3850,7 @@ constants_db: { comment__: "magic subclass" CL_PALADIN: 1 CL_TANKER: 2 - CL_BERSEKER: 4 + CL_BERSERKER: 4 CL_RANGER: 8 CL_SNIPER: 16 CL_WIZARD: 32 diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf index 5aa1b695f..612e3aff1 100644 --- a/db/re/skill_tree.conf +++ b/db/re/skill_tree.conf @@ -70,7 +70,7 @@ Human: { CR_DEFENDER: 0 SM_RECOVERY: 0 - // Berseker + // Berserker KN_AUTOCOUNTER: 0 SM_ENDURE: 0 SM_AUTOBERSERK: 0 diff --git a/npc/003-0/_import.txt b/npc/003-0/_import.txt index ca0bf74e8..fda237c3c 100644 --- a/npc/003-0/_import.txt +++ b/npc/003-0/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/003-0/_warps.txt", "npc/003-0/audsbel.txt", +"npc/003-0/berserk.txt", "npc/003-0/mages.txt", "npc/003-0/paladin.txt", "npc/003-0/tanker.txt", diff --git a/npc/003-0/berserk.txt b/npc/003-0/berserk.txt new file mode 100644 index 000000000..de90fbaee --- /dev/null +++ b/npc/003-0/berserk.txt @@ -0,0 +1,159 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Leader of the BERSERK class + +003-0,34,45,4 script Ragger Master NPC_PLAYER,{ + if (!is_staff()) + goto L_Close; + if (!(MAGIC_SUBCLASS & CL_BERSERK)) + 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 Berserk (Ragger) 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_BERSERK; + mesn; + mesq l("Welcome to the berserker 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 +// Ragger +// KN_AUTOCOUNTER (Counter any attack with 2x critical rate and block attack for 0.5s) +// SM_ENDURE (deny stun penalty when hit, and MDEF bonus, for 10s) + +L_Member: + mesn; + mesq l("Hey there! Do you want to learn new skills for a very small teaching fee?"); + select + rif(sk_intcost(SM_BASH) && getskilllv(SM_BASH) < (3+degree_subclass()), l("Improve Bash Skill")), + rif(sk_intcost(SM_ENDURE) && sk_canlvup(SM_ENDURE), l("Improve Endure Skill")), + rif(sk_intcost(KN_AUTOCOUNTER) && sk_canlvup(KN_AUTOCOUNTER), l("Improve Counter Defense")), + l("Nothing at the moment."); + mes ""; + switch (@menu) { + case 1: + mesn; + mesq l("This useful skill will only require:"); + mesc l("@@/@@ @@", countitem(ManaPiouFeathers), (getskilllv(SM_ENDURE)+1)*15, getitemlink(ManaPiouFeathers)); + mesc l("@@/@@ @@", countitem(CaveSnakeSkin), (getskilllv(SM_ENDURE)+1)*4, getitemlink(CaveSnakeSkin)); + mesc l("@@/@@ @@", countitem(RubyPowder), (getskilllv(SM_ENDURE)+1)*2, getitemlink(RubyPowder)); + mesc l("@@/@@ @@", countitem(StrengthPotion), (getskilllv(SM_ENDURE)+1)*2, getitemlink(StrengthPotion)); + next; + if (askyesno() == ASK_YES) { + if ( + countitem(ManaPiouFeathers) < (getskilllv(SM_ENDURE)+1)*15 || + countitem(CaveSnakeSkin) < (getskilllv(SM_ENDURE)+1)*4 || + countitem(RubyPowder) < (getskilllv(SM_ENDURE)+1)*2 || + countitem(StrengthPotion) < (getskilllv(SM_ENDURE)+1)*2) goto L_Missing; + + delitem PiberriesInfusion, (getskilllv(SM_ENDURE)+1)*15; + delitem BlackMambaEgg, (getskilllv(SM_ENDURE)+1)*4; + delitem MoubooSteak, (getskilllv(SM_ENDURE)+1)*2; + delitem IronIngot, (getskilllv(SM_ENDURE)+1)*2; + + sk_lvup(SM_BASH); + + next; + } + break; + case 2: + mesn; + mesq l("This useful skill will only require:"); + mesc l("@@/@@ @@", countitem(PiberriesInfusion), (getskilllv(KN_AUTOCOUNTER)+1)*10, getitemlink(PiberriesInfusion)); + mesc l("@@/@@ @@", countitem(BlackMambaEgg), (getskilllv(KN_AUTOCOUNTER)+1)*2, getitemlink(BlackMambaEgg)); + mesc l("@@/@@ @@", countitem(MoubooSteak), (getskilllv(KN_AUTOCOUNTER)+1)*4, getitemlink(MoubooSteak)); + mesc l("@@/@@ @@", countitem(IronIngot), (getskilllv(KN_AUTOCOUNTER)+1)*1, getitemlink(IronIngot)); + next; + if (askyesno() == ASK_YES) { + if ( + countitem(PiberriesInfusion) < (getskilllv(KN_AUTOCOUNTER)+1)*10 || + countitem(BlackMambaEgg) < (getskilllv(KN_AUTOCOUNTER)+1)*2 || + countitem(MoubooSteak) < (getskilllv(KN_AUTOCOUNTER)+1)*4 || + countitem(IronIngot) < (getskilllv(KN_AUTOCOUNTER)+1)*1) goto L_Missing; + + delitem PiberriesInfusion, (getskilllv(KN_AUTOCOUNTER)+1)*10; + delitem BlackMambaEgg, (getskilllv(KN_AUTOCOUNTER)+1)*2; + delitem MoubooSteak, (getskilllv(KN_AUTOCOUNTER)+1)*4; + delitem IronIngot, (getskilllv(KN_AUTOCOUNTER)+1)*1; + + sk_lvup(KN_AUTOCOUNTER); + + next; + } + break; + case 3: + 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(HastePotion), (getskilllv(CR_TRUST)+1)*10, getitemlink(HastePotion)); + mesc l("@@/@@ @@", countitem(DiamondPowder), (getskilllv(CR_TRUST)+1)*3, getitemlink(DiamondPowder)); + 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(HastePotion) < (getskilllv(CR_TRUST)+1)*10 || + countitem(DiamondPowder) < (getskilllv(CR_TRUST)+1)*3 || + 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 HastePotion, (getskilllv(CR_TRUST)+1)*10; + delitem DiamondPowder, (getskilllv(CR_TRUST)+1)*3; + delitem ElixirOfLife, (getskilllv(CR_TRUST)+1)*1; + + sk_lvup(SM_ENDURE); + + next; + } + break; + default: + goto L_Close; + } + + goto L_Member; + +OnInit: + .@npcId = getnpcid(0, .name$); + setunitdata(.@npcId, UDT_HEADTOP, WarlordHelmet); + setunitdata(.@npcId, UDT_HEADMIDDLE, GoldenWarlordPlate); + setunitdata(.@npcId, UDT_HEADBOTTOM, ShortGladius); + setunitdata(.@npcId, UDT_WEAPON, JeansChaps); + setunitdata(.@npcId, UDT_HAIRSTYLE, 2); + setunitdata(.@npcId, UDT_HAIRCOLOR, 4); + + .sex=G_MALE; + .distance=5; + end; +} + diff --git a/npc/functions/class.txt b/npc/functions/class.txt index 427e32687..e10a6f399 100644 --- a/npc/functions/class.txt +++ b/npc/functions/class.txt @@ -25,8 +25,16 @@ function script ClassMaster { if (getskilllv(.@CLASS) == 1 && MAGIC_LVL >= 2 && ST_TIER >= 1) goto L_T2_S0; // Sanity check - if (getskilllv(.@SK_T1) >= 1) mesq l("Are you using my skill?"); - if (getskilllv(.@SK_T1) >= 1) close; + if (getskilllv(.@CLASS) >= 1) { + mesn; + mesq l("The Warriors have three other subclasses:"); + mesn lg("Paladin"); + mesc l("The well-round guy, with reasonable def and attack. Approximate from the Priest."); + mesn lg("Berserker"); + mesc l("The full-attack guy. Two hand swords works best!"); + mesn lg("Tanker"); + mesc l("The full-defense guy. Most skills require a shield."); + } close; L_SignUp: diff --git a/npc/functions/util.txt b/npc/functions/util.txt index de172bda6..a72d6e5fb 100644 --- a/npc/functions/util.txt +++ b/npc/functions/util.txt @@ -249,7 +249,7 @@ function script total_subclass { .@i+=1; if (MAGIC_SUBCLASS & CL_TANKER) .@i+=1; - if (MAGIC_SUBCLASS & CL_BERSEKER) + if (MAGIC_SUBCLASS & CL_BERSERKER) .@i+=1; if (MAGIC_SUBCLASS & CL_RANGER) .@i+=1; diff --git a/npc/items/books.txt b/npc/items/books.txt index a46a3f417..87877ec27 100644 --- a/npc/items/books.txt +++ b/npc/items/books.txt @@ -213,21 +213,21 @@ OnInit: case 3: mesc l("You currently have @@/@@ subclass(es).", total_subclass(),max_subclass()); if (MAGIC_SUBCLASS & CL_PALADIN) - mesc lg("* Paladin"); + mesc lg("Paladin"); if (MAGIC_SUBCLASS & CL_TANKER) - mesc lg("* Tanker"); - if (MAGIC_SUBCLASS & CL_BERSEKER) - mesc lg("* Berseker"); + mesc lg("Tanker"); + if (MAGIC_SUBCLASS & CL_BERSERKER) + mesc lg("Berserker"); if (MAGIC_SUBCLASS & CL_RANGER) - mesc lg("* Ranger"); + mesc lg("Ranger"); if (MAGIC_SUBCLASS & CL_SNIPER) - mesc lg("* Sniper"); + mesc lg("Sniper"); if (MAGIC_SUBCLASS & CL_WIZARD) - mesc lg("* Wizard"); + mesc lg("Wizard"); if (MAGIC_SUBCLASS & CL_SAGE) - mesc lg("* Sage"); + mesc lg("Sage"); if (MAGIC_SUBCLASS & CL_PRIEST) - mesc lg("* Priest"); + mesc lg("Priest"); next; break; case 4: -- cgit v1.2.3-60-g2f50