diff options
Diffstat (limited to 'npc/magic/final.txt')
-rw-r--r-- | npc/magic/final.txt | 259 |
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; +} + |