Updates Poisonous Smoke behavior (#6263)

* Fixes #6199.
* Adjusts the interval to every 2 seconds.
* Adjusts the success rate to 50%.
* Fixes the Poison Weapon effect not applying the 'enemy' status to those inside of Poisonous Smoke.
* Venom Bleed should only be active for 15 seconds, not 5 minutes like the rest of the poisons.
* Pyrexia will now cancel skill cast on each damage input.
Thanks to @Everade!
This commit is contained in:
Aleos 2022-06-01 14:27:23 -04:00 committed by GitHub
parent c01c673313
commit 4aba94ca01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 5 deletions

View File

@ -20163,7 +20163,11 @@ Body:
Time: 240000 Time: 240000
- Level: 5 - Level: 5
Time: 300000 Time: 300000
Duration2: 300000 Duration2:
- Level: 1
Time: 15000
- Level: 2
Time: 300000
Requires: Requires:
SpCost: SpCost:
- Level: 1 - Level: 1
@ -20342,7 +20346,7 @@ Body:
Unit: Unit:
Id: Poisonsmoke Id: Poisonsmoke
Layout: 2 Layout: 2
Interval: 1000 Interval: 2000
Target: Enemy Target: Enemy
Flag: Flag:
NoOverlap: true NoOverlap: true

View File

@ -1778,7 +1778,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if (sc->data[SC_POISONINGWEAPON] && flag&BF_SHORT && (skill_id == 0 || skill_id == GC_VENOMPRESSURE) && damage > 0) { if (sc->data[SC_POISONINGWEAPON] && flag&BF_SHORT && (skill_id == 0 || skill_id == GC_VENOMPRESSURE) && damage > 0) {
damage += damage * 10 / 100; damage += damage * 10 / 100;
if (rnd() % 100 < sc->data[SC_POISONINGWEAPON]->val3) if (rnd() % 100 < sc->data[SC_POISONINGWEAPON]->val3)
sc_start4(src, bl, (sc_type)sc->data[SC_POISONINGWEAPON]->val2, 100, sc->data[SC_POISONINGWEAPON]->val1, 0, 1, 0, skill_get_time2(GC_POISONINGWEAPON, 1)); sc_start4(src, bl, (sc_type)sc->data[SC_POISONINGWEAPON]->val2, 100, sc->data[SC_POISONINGWEAPON]->val1, 0, 1, 0, (sc->data[SC_POISONINGWEAPON]->val2 == SC_VENOMBLEED ? skill_get_time2(GC_POISONINGWEAPON, 1) : skill_get_time2(GC_POISONINGWEAPON, 2)));
} }
if( sc->data[SC__DEADLYINFECT] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 ) if( sc->data[SC__DEADLYINFECT] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 )

View File

@ -15713,8 +15713,8 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t
break; break;
case UNT_POISONSMOKE: case UNT_POISONSMOKE:
if( battle_check_target(ss,bl,BCT_ENEMY) > 0 && !(tsc && tsc->data[sg->val2]) && rnd()%100 < 20 ) if( battle_check_target(ss,bl,BCT_ENEMY) > 0 && !(tsc && tsc->data[sg->val2]) && rnd()%100 < 50 )
sc_start(ss,bl,(sc_type)sg->val2,100,sg->val3,skill_get_time2(GC_POISONINGWEAPON, 1)); sc_start4(ss,bl,(sc_type)sg->val2,100,sg->val3,0,1,0,skill_get_time2(GC_POISONINGWEAPON, 1));
break; break;
case UNT_EPICLESIS: case UNT_EPICLESIS:

View File

@ -13240,6 +13240,7 @@ TIMER_FUNC(status_change_timer){
map_freeblock_lock(); map_freeblock_lock();
dounlock = true; dounlock = true;
status_fix_damage(bl, bl, 100, clif_damage(bl, bl, tick, status->amotion, status->dmotion + 500, 100, 1, DMG_NORMAL, 0, false),0); status_fix_damage(bl, bl, 100, clif_damage(bl, bl, tick, status->amotion, status->dmotion + 500, 100, 1, DMG_NORMAL, 0, false),0);
unit_skillcastcancel(bl, 2);
} }
break; break;