summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--src/map/battle.c12
-rw-r--r--src/map/mob.c4
-rw-r--r--src/map/skill.c6
-rw-r--r--src/map/status.c7
-rw-r--r--src/map/unit.c2
6 files changed, 22 insertions, 12 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 9ccd19ee3..cdd285754 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,9 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+09/05/20
+ * Now fiberlocking a fiberlocked target doesn't renew the timer but instead increases its fireweakness [Inkfish]
+ - This makes doublecasting firebolts on a double fiberlocked target having double damage from both 2 bolts possible = =(bugreport:3061)
09/05/19
* Added missing packet 0x2c9 and fixed 0x2da's length error. [Inkfish]
* Fiberlock now can trap multiple enemies on the same cell and its triggering area was reduced to 1x1. [Inkfish]
diff --git a/src/map/battle.c b/src/map/battle.c
index 224f01c62..3eced353a 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -252,13 +252,13 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
if(sc->data[SC_DELUGE] && atk_elem == ELE_WATER)
ratio += enchant_eff[sc->data[SC_DELUGE]->val1-1];
}
- if (tsc && tsc->count)
+ if( atk_elem == ELE_FIRE && tsc && tsc->count && tsc->data[SC_SPIDERWEB] )
{
- if(tsc->data[SC_SPIDERWEB] && atk_elem == ELE_FIRE)
- { // [Celest]
- damage <<= 1;
- status_change_end(target, SC_SPIDERWEB, -1);
- }
+ tsc->data[SC_SPIDERWEB]->val1 = 0; // free to move now
+ if( tsc->data[SC_SPIDERWEB]->val2-- > 0 )
+ damage <<= 1; // double damage
+ if( tsc->data[SC_SPIDERWEB]->val2 == 0 )
+ status_change_end(target,SC_SPIDERWEB,-1);
}
return damage*ratio/100;
}
diff --git a/src/map/mob.c b/src/map/mob.c
index 6fe109536..407c24456 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1339,7 +1339,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
{ //Rude attacked check.
if( !battle_check_range(&md->bl, tbl, md->status.rhw.range)
&& ( //Can't attack back and can't reach back.
- (!can_move && DIFF_TICK(tick, md->ud.canmove_tick) > 0 && (battle_config.mob_ai&0x2 || md->sc.data[SC_SPIDERWEB]))
+ (!can_move && DIFF_TICK(tick, md->ud.canmove_tick) > 0 && (battle_config.mob_ai&0x2 || (md->sc.data[SC_SPIDERWEB] && md->sc.data[SC_SPIDERWEB]->val1)))
|| !mob_can_reach(md, tbl, md->min_chase, MSS_RUSH)
)
&& md->state.attacked_count++ >= RUDE_ATTACKED_COUNT
@@ -1360,7 +1360,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
|| (battle_config.mob_ai&0x2 && !status_check_skilluse(&md->bl, abl, 0, 0)) // Cannot normal attack back to Attacker
|| (!battle_check_range(&md->bl, abl, md->status.rhw.range) // Not on Melee Range and ...
&& ( // Reach check
- (!can_move && DIFF_TICK(tick, md->ud.canmove_tick) > 0 && (battle_config.mob_ai&0x2 || md->sc.data[SC_SPIDERWEB]))
+ (!can_move && DIFF_TICK(tick, md->ud.canmove_tick) > 0 && (battle_config.mob_ai&0x2 || (md->sc.data[SC_SPIDERWEB] && md->sc.data[SC_SPIDERWEB]->val1)))
|| !mob_can_reach(md, abl, dist+md->db->range3, MSS_RUSH)
)
) )
diff --git a/src/map/skill.c b/src/map/skill.c
index 8c755434e..77f27f643 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -7355,6 +7355,12 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_SPIDERWEB:
+ if( tsc && tsc->data[SC_SPIDERWEB] && tsc->data[SC_SPIDERWEB]->val1 > 0 )
+ { // If you are fiberlocked and can't move, it will only increase your fireweakness level. [Inkfish]
+ tsc->data[SC_SPIDERWEB]->val2++;
+ sg->interval = -1;
+ break;
+ }
case UNT_ANKLESNARE:
if( ( sg->val2 == 0 || sg->unit_id == UNT_SPIDERWEB ) && tsc )
{
diff --git a/src/map/status.c b/src/map/status.c
index 8f09203d4..802b5181e 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -3535,7 +3535,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
flee += sc->data[SC_MOON_COMFORT]->val2;
if(sc->data[SC_CLOSECONFINE])
flee += 10;
- if(sc->data[SC_SPIDERWEB])
+ if(sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1)
flee -= flee * 50/100;
if(sc->data[SC_BERSERK])
flee -= flee * 50/100;
@@ -5814,8 +5814,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
tick /= 5; //TODO: Reduce skill's duration. But for how long?
break;
case SC_SPIDERWEB:
- if (bl->type == BL_PC)
- tick /=2;
+ if( bl->type == BL_PC )
+ tick /= 2;
+ val1 = val2 = 1;
break;
case SC_ARMOR:
//NPC_DEFENDER:
diff --git a/src/map/unit.c b/src/map/unit.c
index edb6bca03..485eb4d6e 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -741,7 +741,7 @@ int unit_can_move(struct block_list *bl)
|| sc->data[SC_TRICKDEAD]
|| sc->data[SC_BLADESTOP]
|| sc->data[SC_BLADESTOP_WAIT]
- || sc->data[SC_SPIDERWEB]
+ || (sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1)
|| (sc->data[SC_DANCING] && sc->data[SC_DANCING]->val4 && (
!sc->data[SC_LONGING] ||
(sc->data[SC_DANCING]->val1&0xFFFF) == CG_MOONLIT ||