diff options
author | Fedja Beader <fedja@protonmail.ch> | 2025-03-25 00:45:46 +0000 |
---|---|---|
committer | Jesusalva Jesusalva <jesusalva@tmw2.org> | 2025-03-25 00:45:46 +0000 |
commit | 1015f04948cd46de6a9e95a16e87b7a527a5dcad (patch) | |
tree | 73dacd88b65a5502bdc63cf2b4fc4037cb13a123 | |
parent | 16bd3c94fcea9a8c5a2cab817c35cc34ac5d8792 (diff) | |
download | serverdata-1015f04948cd46de6a9e95a16e87b7a527a5dcad.tar.gz serverdata-1015f04948cd46de6a9e95a16e87b7a527a5dcad.tar.bz2 serverdata-1015f04948cd46de6a9e95a16e87b7a527a5dcad.tar.xz serverdata-1015f04948cd46de6a9e95a16e87b7a527a5dcad.zip |
Fix harm() credit
Note: there are two harm() calls in `npc/config/traps`, but I don't know if NPCs can be the source of damage? And, if so, what to pass as damage source. Maybe npcinfo(0)?
+ made parlor code a tiny bit more readable
+ fixed Healing's broken debuff
* Apply fix suggested by jes
* Fix harm() credit
**** ml/serverdata!181
Reviewed-by: Jesusalva Jesusalva <jesusalva@tmw2.org>
-rw-r--r-- | npc/006-7/ctrl.txt | 2 | ||||
-rw-r--r-- | npc/026-7/boss.txt | 4 | ||||
-rw-r--r-- | npc/042-11/boss.txt | 4 | ||||
-rw-r--r-- | npc/functions/hub.txt | 84 |
4 files changed, 50 insertions, 44 deletions
diff --git a/npc/006-7/ctrl.txt b/npc/006-7/ctrl.txt index d82f11bf7..5bc441814 100644 --- a/npc/006-7/ctrl.txt +++ b/npc/006-7/ctrl.txt @@ -205,7 +205,7 @@ OnTimer5000: .@dsb = .@mtk * .@SPW / 100; sleep(1000); squareharm(.@mvp, .@RG, .@dsb, HARM_MAGI, Ele_Holy, .BOSS); - harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy); + harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy, .BOSS); break; // (3/6) Random Target (~60s) case 2: diff --git a/npc/026-7/boss.txt b/npc/026-7/boss.txt index 7398611f1..a0ee45faf 100644 --- a/npc/026-7/boss.txt +++ b/npc/026-7/boss.txt @@ -474,7 +474,7 @@ OnTimer10000: sleep(1000); specialeffect(FX_LIGHTNING, AREA, .@mvp); squareharm(.@mvp, .@RG, .@dsb, HARM_MAGI, Ele_Wind, .@mob); - harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy); + harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy, .@mob); break; case 18: .@msg$ = sprintf("Come forth, my minions! Wreak chaos and havoc!"); @@ -509,7 +509,7 @@ OnTimer10000: sleep(1000); specialeffect(FX_LIGHTNING, AREA, .@mvp); squareharm(.@mvp, .@RG, .@dsb, HARM_MAGI, Ele_Wind, .@mob); - harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy); + harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy, .@mob); break; case 21: .@msg$ = sprintf("##BMagic: Armageddon"); diff --git a/npc/042-11/boss.txt b/npc/042-11/boss.txt index d79a7951f..9e3afc070 100644 --- a/npc/042-11/boss.txt +++ b/npc/042-11/boss.txt @@ -233,7 +233,7 @@ OnTimer5000: sleep(1000); specialeffect(FX_LIGHTNING, AREA, .@mvp); squareharm(.@mvp, .@RG, .@dsb, HARM_MAGI, Ele_Wind, .@mob); - harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy); + harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy, .@mob); break; default: // First Attack Pattern: Napalm Beat (vs Random) @@ -245,7 +245,7 @@ OnTimer5000: sleep(1000); specialeffect(FX_LIGHTNING, AREA, .@rnd); squareharm(.@rnd, .@RG, .@dsb, HARM_MAGI, Ele_Wind, .@mob); - harm(.@rnd, .@dmg, HARM_MAGI, Ele_Holy); + harm(.@rnd, .@dmg, HARM_MAGI, Ele_Holy, .@mob); break; } unittalk(.@mob, .@msg$); diff --git a/npc/functions/hub.txt b/npc/functions/hub.txt index 18be56672..5db919aa1 100644 --- a/npc/functions/hub.txt +++ b/npc/functions/hub.txt @@ -671,10 +671,11 @@ function script HUB_SkillInvoke { break; case TMW2_HEALING: .@PW=130+(20*@skillLv); + .@heal = -AdjustSpellpower(.@PW); // Penalty if you have HALT_REGEN on and trying to self heal if (getstatus(SC_HALT_REGENERATION) && @skillTarget == getcharid(3)) .@heal /= 3; - harm(@skillTarget, -AdjustSpellpower(.@PW), HARM_MISC); + harm(@skillTarget, .@heal, HARM_MISC, Ele_Neutral, @skillCaster); GetManaExp(TMW2_HEALING, 2); break; case TMW2_MAGNUSHEAL: @@ -698,7 +699,7 @@ function script HUB_SkillInvoke { .@PW=140+(10*@skillLv); // 4% chance, 2.5s sc_start SC_BLOODING, 4500, 1, 400, SCFLAG_NONE, @skillTarget; - harm(@skillTarget, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire); + harm(@skillTarget, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire, @skillCaster); GetManaExp(TMW2_FIREBALL, 1); break; case TMW2_FIREBALL: @@ -725,14 +726,14 @@ function script HUB_SkillInvoke { .@dmg=AdjustSpellpower(.@PW); .@RG=2+(@skillLv/3); squareharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Holy, @skillCaster); - harm(@skillTarget, .@dmg/10, HARM_MAGI, Ele_Holy); + harm(@skillTarget, .@dmg/10, HARM_MAGI, Ele_Holy, @skillCaster); GetManaExp(TMW2_HOLYLIGHT, 1); break; case TMW2_HOLYLIGHT: .@PW=125+(25*@skillLv); .@dmg=AdjustSpellpower(.@PW); squareharm(@skillTarget, 1, .@dmg/5, HARM_MAGI, Ele_Holy, @skillCaster); - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy, @skillCaster); GetManaExp(TMW2_HOLYLIGHT, 2); break; case TMW2_JUDGMENT: @@ -742,7 +743,7 @@ function script HUB_SkillInvoke { .@dsub=AdjustSpellpower(.@SPW); .@RG=3+(@skillLv/5); squareharm(@skillTarget, .@RG, .@dsub, HARM_MAGI, Ele_Holy, @skillCaster); - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy, @skillCaster); GetManaExp(TMW2_HOLYLIGHT, 3); break; //////////////////////////////// @@ -751,13 +752,13 @@ function script HUB_SkillInvoke { case TMW2_MAGICSTRIKE: .@PW=125+(25*@skillLv); .@dmg=AdjustSpellpower(.@PW); - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Wind); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Wind, @skillCaster); GetManaExp(TMW2_LIGHTNINGBOLT, 1); break; case TMW2_LIGHTNINGBOLT: .@PW=150+(50*@skillLv); .@dmg=AdjustSpellpower(.@PW); - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Wind); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Wind, @skillCaster); GetManaExp(TMW2_LIGHTNINGBOLT, 2); break; case TMW2_TEMPEST: @@ -774,7 +775,7 @@ function script HUB_SkillInvoke { .@PW=80+(10*@skillLv); // 22% chance, 2.5s sc_start SC_FREEZE, 2500, 1, 2200, SCFLAG_NONE, @skillTarget; - harm(@skillTarget, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water); + harm(@skillTarget, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water, @skillCaster); GetManaExp(TMW2_NILFHEIM, 1); break; case TMW2_FROSTNOVA: @@ -802,7 +803,7 @@ function script HUB_SkillInvoke { .@dmg=AdjustSpellpower(.@PW); .@TM=1200+(@skillLv*300); sc_start SC_STUN, .@TM, 1, 800, SCFLAG_NONE, @skillTarget; - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Earth); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Earth, @skillCaster); GetManaExp(TMW2_METEORSTRIKE, 1); break; case TMW2_METEORSHOWER: @@ -821,16 +822,21 @@ function script HUB_SkillInvoke { .@dsub=AdjustSpellpower(.@PWB); areasc(2, 5000, SC_INCDEFRATE, BL_PC, 10, "filter_friendly"); rectharm(@skillTarget, 2, 5, .@dsub, HARM_MAGI, Ele_Earth, @skillCaster); - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Earth); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Earth, @skillCaster); GetManaExp(TMW2_METEORSTRIKE, 3); break; //////////////////////////////// // XXX: Parlor Tricks // (Pathetic skills) case TMW2_PARLORTRICK: - .@PW=(getmapmask(getmap()) & MASK_RAIN ? 30 : 0)+(20*@skillLv); + .@PW = 20*@skillLv; + // Rain bonus + if (playerattached()) { + if (getmapmask(getmap()) & MASK_RAIN) + .@PW += 30; + } .@dmg=AdjustSpellpower(.@PW); - harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Water); + harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Water, @skillCaster); //No Mana EXP break; /* @@ -935,7 +941,7 @@ function script HUB_SkillInvoke { .@PW=100; .@PW+=(5*@skillLv); @SCombo=@skillTarget; - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; case TMW2_DIAGONALSLASH: @@ -947,7 +953,7 @@ function script HUB_SkillInvoke { if (@SCombo != @skillTarget) .@PW=100; .@PW+=(5*@skillLv); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; case TMW2_VERTICALSLASH: @@ -961,7 +967,7 @@ function script HUB_SkillInvoke { if (@SCombo != @skillTarget) .@PW=100; .@PW+=(5*@skillLv); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; case TMW2_STAB: @@ -977,7 +983,7 @@ function script HUB_SkillInvoke { if (@SCombo != @skillTarget) .@PW=100; .@PW+=(5*@skillLv); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; case TMW2_GRANDBLAST: @@ -995,7 +1001,7 @@ function script HUB_SkillInvoke { if (@SCombo != @skillTarget) .@PW=100; .@PW+=(5*@skillLv); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Holy); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Holy, @skillCaster); GetManaExp(@skillId, rand2(2,3)); break; @@ -1007,7 +1013,7 @@ function script HUB_SkillInvoke { .@ST=0+(10*@skillLv); .@TM=100+(90*@skillLv); sc_start SC_STUN, .@TM, 1, .@ST, SCFLAG_NONE, @skillTarget; - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; case TMW2_GROUNDSTRIKE: @@ -1023,14 +1029,14 @@ function script HUB_SkillInvoke { break; case TMW2_SUPREMEATTACK: .@PW=100+(50*@skillLv); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; //////////////////////////////// // XXX: Physical Class (Archery) case TMW2_CHARGEDARROW: .@PW=100+(50*@skillLv); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); GetManaExp(@skillId, rand2(1,3)); break; case TMW2_ARROWSHOWER: @@ -1048,11 +1054,11 @@ function script HUB_SkillInvoke { // Using a shield, so power is halved if (getequipid(EQI_HAND_L) > 0) .@PW=.@PW/2; - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); break; case TMW2_BEARSTRIKE: // 60x5 = 300 @@ -1060,15 +1066,15 @@ function script HUB_SkillInvoke { // Using a shield, so power is halved if (getequipid(EQI_HAND_L) > 0) .@PW=.@PW/2; - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); break; case TMW2_ALLINONE: // 45x8 = 360 @@ -1076,20 +1082,20 @@ function script HUB_SkillInvoke { // Using a shield, so power is halved if (getequipid(EQI_HAND_L) > 0) .@PW=.@PW/2; - //harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Fire); + //harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Fire, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Water); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Water, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Earth); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Earth, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Wind); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Wind, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Holy); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Holy, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Shadow); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Shadow, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Ghost); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Ghost, @skillCaster); sleep2(10); // The main elemental-less blast hits all in same square, // and also hits behind (and on your square) @@ -1102,11 +1108,11 @@ function script HUB_SkillInvoke { // Using a shield, so power is halved if (getequipid(EQI_HAND_L) > 0) .@PW=.@PW/2; - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sleep2(10); - harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral); + harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral, @skillCaster); sc_start SC_STUN, .@TM, 1, 3333, SCFLAG_NONE, @skillTarget; break; |