From 9847103a4169a5593a1da851d8f0823a158694b9 Mon Sep 17 00:00:00 2001 From: Inkfish Date: Wed, 20 May 2009 12:42:06 +0000 Subject: * 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) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13799 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 12 ++++++------ src/map/mob.c | 4 ++-- src/map/skill.c | 6 ++++++ src/map/status.c | 7 ++++--- src/map/unit.c | 2 +- 5 files changed, 19 insertions(+), 12 deletions(-) (limited to 'src') 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 || -- cgit v1.2.3-70-g09d2