summaryrefslogtreecommitdiff
path: root/npc/magic/final.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/magic/final.txt')
-rw-r--r--npc/magic/final.txt259
1 files changed, 259 insertions, 0 deletions
diff --git a/npc/magic/final.txt b/npc/magic/final.txt
new file mode 100644
index 00000000..30dce5e9
--- /dev/null
+++ b/npc/magic/final.txt
@@ -0,0 +1,259 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// TMW Org.
+// Description:
+// HUB functions (Magic)
+// HUB_SkillInvoke ( )
+function script HUB_SkillInvoke {
+ // Something is... wrong
+ if (!@skillId) {
+ Exception("ILLEGAL SKILL PASSED TO HUB. It has been compromised, Jim.", RB_DEBUGMES|RB_IRCBROADCAST);
+ debugmes "Legal Caster: %s", strcharinfo(0);
+ debugmes "Effective Caster: %d", @skillCaster;
+ return;
+ }
+
+ /* *********************************************************************** */
+ // TODO: Detect what was script-cast and what was player-case. Then, readd RB_IRCBROADCAST
+ // If you can't do this: You can't do this
+ if (getskilllv(@skillId) < @skillLv && @skillId != BS_GREED)
+ Exception("System ERROR, HSI."+@skillId+" INVALID CAST (got "+@skillLv+" expected "+getskilllv(@skillId)+", sub-LC."+(getcharid(3)-2000000)+")", RB_DEBUGMES|RB_ISFATAL);
+ // You are AFK for over 3 minutes, that's crazy, disregard
+ if (checkidle() > 180)
+ return;
+
+ // Record to database
+ skillInvoke[@skillId] = skillInvoke[@skillId] + 1;
+
+ // Script-based skills
+ /* *********************************************************************** */
+ switch (@skillId) {
+ case TMW2_FAKESKILL:
+ charcommand("@refresh"); // Possibly broken on too up-to-date Herc
+ break;
+ // Level 0
+ case SKILL_CONFRINGO:
+ SK_Confringo(); break;
+ case SKILL_REAPERCRY:
+ Reapercry(); break;
+ // Level 1
+ case SKILL_ABIZIT:
+ SK_Abizit(); break;
+ case SKILL_MONSTERINFO:
+ SK_Miteyo(); break;
+ case EVOL_AREA_PROVOKE:
+ SK_Itenplz(); break;
+ case SKILL_FLAR:
+ SK_Flar(); break;
+ case SKILL_MODRIPHOO:
+ case SKILL_MODRISUMP:
+ case SKILL_MODRIYIKAM:
+ case SKILL_MODRILAX:
+ SK_GrowPlants(); break; // FIXME: Unreleased/cannot be learned
+ case SKILL_LUM:
+ SK_Lum(); break;
+ case SKILL_CHIZA:
+ SK_Chiza(); break;
+ case SKILL_PARUM:
+ case SKILL_GOLE:
+ SK_Transmute(); break;
+ // Level 2
+ case SKILL_INMA:
+ SK_Inma(); break;
+ case SKILL_JOYPLIM:
+ SK_Joyplim(); break;
+ case SKILL_CHIPCHIP:
+ SK_Shear(); break;
+ case SKILL_KALAKARENK:
+ case SKILL_KALBOO:
+ case SKILL_KALGINA:
+ case SKILL_KALRENK:
+ SK_SummonLv2(); break;
+ case SKILL_HALHISS:
+ case SKILL_HELORP:
+ SK_SummonLv2(); break;
+ case SKILL_KAFLOSH:
+ SK_Kaflosh(); break;
+ case SKILL_BETSANC:
+ SK_Betsanc(); break;
+ case SKILL_ASORM:
+ SK_Asorm(); break;
+ case SKILL_INGRAV:
+ SK_Ingrav(); break;
+ case SKILL_UPMARMU:
+ SK_Uparmu(); break;
+ case SKILL_FRILLYAR:
+ SK_Frillyar(); break;
+ case SKILL_PHLEX:
+ SK_Phlex(); break;
+ case SKILL_KULARZUFRILL:
+ case SKILL_ZUKMINBIRF:
+ case SKILL_PATMUPLOO:
+ case SKILL_PATVILOREE:
+ case SKILL_PATLOREE:
+ case SKILL_MANPAHIL:
+ SK_Transmute(); break;
+ // Level 3
+ // Level 4
+ // Level 5
+ ////////////////////////////////
+ /* XXX: Fire Class
+ // (May burn targets for damage over time)
+ case TMW2_ARMAGEDDON:
+ .@PW=140+(10*@skillLv);
+ .@RG=5+(@skillLv/5);
+ // 18% chance, 3s, 3x3 radius
+ areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire);
+ areasc(.@RG, 6000, SC_BLOODING, BL_MOB|BL_PC|BL_HOM|BL_MER, 1, "filter_hostile", @skillTarget, 1800);
+ GetManaExp(TMW2_FIREBALL, 3);
+ break;
+ ////////////////////////////////
+ // XXX: Earth Class
+ case TMW2_GAIABREAK:
+ .@PWA=170+(30*@skillLv);
+ .@PWB=110+(10*@skillLv);
+ .@dmg=AdjustSpellpower(.@PWA);
+ .@dsub=AdjustSpellpower(.@PWB);
+ harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Earth);
+ rectharm(@skillTarget, 2, 5, .@dsub, HARM_MAGI, Ele_Earth);
+ areasc(2, 5000, SC_INCDEFRATE, BL_PC, 10, "filter_friendly");
+ GetManaExp(TMW2_METEORSTRIKE, 3);
+ break;
+ ////////////////////////////////
+ // XXX: Physical Class (Regular)
+ case TMW2_FALKONSTRIKE:
+ .@PW=100+(25*@skillLv);
+ .@ST=0+(10*@skillLv);
+ .@TM=100+(90*@skillLv);
+ harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
+ sc_start SC_STUN, .@TM, 1, .@ST, SCFLAG_NONE, @skillTarget;
+ GetManaExp(@skillId, 1);
+ break;
+ case TMW2_GROUNDSTRIKE:
+ .@PW=50+(40*@skillLv);
+ .@dmg=AdjustAttackpower(.@PW);
+ .@RG=2+(@skillLv/5);
+ .@TM=100+(@skillLv*200);
+ .@ST=500+(100*@skillLv);
+ .@EF=any(SC_STUN, SC_BLIND, SC_BLOODING, SC_BLIND, SC_BLOODING);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral);
+ areasc(.@RG, .@TM, .@EF, BL_MOB | BL_PC | BL_HOM | BL_MER, 1, "filter_hostile", @skillTarget, .@ST);
+ GetManaExp(@skillId, 1);
+ break;
+ case TMW2_SUPREMEATTACK:
+ .@PW=100+(50*@skillLv);
+ harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
+ GetManaExp(@skillId, 1);
+ break;
+ ////////////////////////////////
+ // Summons which never fail
+ case TMW2_ZARKOR:
+ SummonMagic(@skillId, CaveMaggot, 2, @skillLv);
+ GetManaExp(@skillId, 1);
+ break;
+ // Summons which may fail
+ case TMW2_KALWULF:
+ SK_summon(Wolvern, 4, any(3,4));
+ break;
+ // More complex summons
+ case TMW2_FROZENHEART:
+ .@mobId=Moggun;
+ if (rand2(6,12) < abizit()+1)
+ {
+ .@mobId=Yeti;
+ }
+ SK_summon(.@mobId, 4, any(3,4));
+ break;
+ case TMW2_STONEHEART:
+ .@mobId=Terranite;
+ if (rand2(9,12) < abizit()+1 &&
+ BaseLevel > 80)
+ {
+ .@mobId=TerraniteProtector;
+ }
+ SK_summon(.@mobId, 4, any(4,5));
+ break;
+ */
+
+ // Experience only
+ default:
+ GetManaExp(@skillId, 1);
+ break;
+ }
+
+ // Debug
+ if ($@GM_OVERRIDE)
+ debugmes "Cast skill %d on level %d - Target %d",
+ @skillId, @skillLv, @skillTarget;
+
+ // Cleanup (double-safe)
+ @skillTarget = 0;
+ return;
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// HUB_PCBonus ()
+function script HUB_PCBonus {
+ /* Passive Skills */
+ if (FOCUSING & FSKILL_ASTRAL_SOUL) {
+ bonus bMatkRate, 3*getskilllv(SKILL_ASTRAL_SOUL);
+ }
+ if (FOCUSING & FSKILL_RAGING) {
+ bonus bCritical, 2*getskilllv(SKILL_RAGING);
+ }
+ if (FOCUSING & FSKILL_SPEED) {
+ bonus bSpeedAddRate, 1*getskilllv(SKILL_SPEED);
+ bonus bAspd, 2*getskilllv(SKILL_SPEED);
+ }
+ if (FOCUSING & FSKILL_RESIST_POISON) {
+ .@l=5*getskilllv(SKILL_RESIST_POISON);
+ bonus2(bResEff, Eff_Silence, .@l);
+ bonus2(bResEff, Eff_Poison, .@l);
+ bonus2(bResEff, Eff_DPoison, .@l);
+ bonus2(bResEff, Eff_Curse, .@l);
+ bonus2(bResEff, Eff_Blind, .@l);
+ }
+ if (FOCUSING & FSKILL_BRAWLING) {
+ if (getequipid(EQI_HAND_R) < 1) {
+ bonus bAtk, 10*getskilllv(SKILL_BRAWLING);
+ } else if (getiteminfo(
+ getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) == W_FIST) {
+ bonus bAtk, 10*getskilllv(SKILL_BRAWLING);
+ }
+ }
+ if (FOCUSING & FSKILL_MALLARDS_EYE) {
+ bonus bAtkRange, (2+getskilllv(SKILL_MALLARDS_EYE))/3;
+ bonus bHit, 5*getskilllv(SKILL_MALLARDS_EYE);
+ }
+ return;
+}
+