From f3eab9dd4a690847ee7e726e9ece66de6d2455f1 Mon Sep 17 00:00:00 2001 From: Aleos Date: Mon, 18 Jun 2018 16:02:04 -0400 Subject: [PATCH] Corrected Cloud Kill behavior (#3127) * Fixes #2731. * Corrected Cloud Kill status being removed and not damaging players who are in the AoE. Thanks to @redlightliu! --- db/pre-re/skill_unit_db.txt | 2 +- db/re/skill_unit_db.txt | 2 +- src/map/script_constants.hpp | 2 +- src/map/skill.cpp | 14 ++++++-------- src/map/status.cpp | 21 +-------------------- src/map/status.hpp | 2 +- 6 files changed, 11 insertions(+), 32 deletions(-) diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index d264bd2117..0eb8dfe323 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -146,7 +146,7 @@ 2446,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_EARTHGRAVE 2447,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_DIAMONDDUST 2449,0xdf, , 0, 3:3:4:4:5,500,enemy, 0x018 //SO_PSYCHIC_WAVE -2450,0xe0, , 3, 0, -1,enemy, 0xA010 //SO_CLOUD_KILL +2450,0xe0, , 0, 3, 500,enemy, 0x8010 //SO_CLOUD_KILL 2452,0xe4, , 3, 0, -1,all, 0xA010 //SO_WARMER 2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x8010 //SO_VACUUM_EXTREME 2465,0xf1, , 1, 0, -1,all, 0x2010 //SO_FIRE_INSIGNIA diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index a3453b5242..df20be52f6 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -148,7 +148,7 @@ 2446,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_EARTHGRAVE 2447,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_DIAMONDDUST 2449,0xdf, , 0, 3:3:4:4:5,500,enemy, 0x018 //SO_PSYCHIC_WAVE -2450,0xe0, , 3, 0, -1,enemy, 0xA010 //SO_CLOUD_KILL +2450,0xe0, , 0, 3, 500,enemy, 0x8010 //SO_CLOUD_KILL 2452,0xe4, , 3, 0, -1,all, 0xA010 //SO_WARMER 2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x8010 //SO_VACUUM_EXTREME 2465,0xf1, , 1, 0, -1,all, 0x2010 //SO_FIRE_INSIGNIA diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 5f56440090..4eb356c564 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1449,7 +1449,7 @@ export_constant(SC_SHRIMP); export_constant(SC_FRESHSHRIMP); export_constant(SC_ACTIVE_MONSTER_TRANSFORM); - export_constant(SC_CLOUD_KILL); + export_deprecated_constant(SC_CLOUD_KILL); export_constant(SC_LJOSALFAR); export_constant(SC_MERMAID_LONGING); export_constant(SC_HAT_EFFECT); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index ed8ef00494..20fb248d16 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -13526,13 +13526,6 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, un status_change_start(ss, bl, type, 10000, sg->skill_lv, 0, 0, 0, sg->limit, SCSTART_NOICON); break; - case UNT_CLOUD_KILL: - if(!sce) { - sc_start4(ss, bl, type, 100, sg->skill_lv, ss->id, unit->bl.id, 0, skill_get_time(sg->skill_id, sg->skill_lv)); - status_change_start(ss, bl, SC_POISON, 10000, sg->skill_lv, ss->id, 0, 0, skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NOTICKDEF); - } - break; - case UNT_WARMER: if (!sce && bl->type == BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race != RC_DEMON) sc_start2(ss, bl, type, 100, sg->skill_lv, ss->id, skill_get_time(sg->skill_id, sg->skill_lv)); @@ -14174,6 +14167,12 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns sc_start(ss, bl, type, 100, sg->skill_lv, sg->interval); break; + case UNT_CLOUD_KILL: + if (tsc && !tsc->data[type]) + status_change_start(ss, bl, type, 10000, sg->skill_lv, ss->id, 0, 0, skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NOTICKDEF); + skill_attack(skill_get_type(sg->skill_id), ss, &unit->bl, bl, sg->skill_id, sg->skill_lv, tick, 0); + break; + case UNT_VACUUM_EXTREME: if (tsc && (tsc->data[SC_HALLUCINATIONWALK] || tsc->data[SC_HOVERING] || tsc->data[SC_VACUUM_EXTREME] || (tsc->data[SC_VACUUM_EXTREME_POSTDELAY] && tsc->data[SC_VACUUM_EXTREME_POSTDELAY]->val2 == sg->group_id))) // Ignore post delay from other vacuum (this will make stack effect enabled) @@ -14403,7 +14402,6 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, unsigned int tick) case EL_WATER_BARRIER: case EL_ZEPHYR: case EL_POWER_OF_GAIA: - case SO_CLOUD_KILL: case SO_WARMER: case SO_FIRE_INSIGNIA: case SO_WATER_INSIGNIA: diff --git a/src/map/status.cpp b/src/map/status.cpp index bb106f9649..95eb9c7504 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -778,7 +778,7 @@ void initChangeTables(void) set_sc( SO_ELECTRICWALK , SC_PROPERTYWALK , EFST_PROPERTYWALK , SCB_NONE ); set_sc( SO_SPELLFIST , SC_SPELLFIST , EFST_SPELLFIST , SCB_NONE ); set_sc_with_vfx( SO_DIAMONDDUST , SC_CRYSTALIZE , EFST_COLD , SCB_NONE ); - set_sc( SO_CLOUD_KILL , SC_CLOUD_KILL , EFST_CLOUD_KILL, SCB_NONE ); + set_sc( SO_CLOUD_KILL , SC_POISON , EFST_CLOUD_KILL, SCB_NONE ); set_sc( SO_STRIKING , SC_STRIKING , EFST_STRIKING , SCB_WATK|SCB_CRI ); set_sc( SO_WARMER , SC_WARMER , EFST_WARMER , SCB_NONE ); set_sc( SO_VACUUM_EXTREME , SC_VACUUM_EXTREME , EFST_VACUUM_EXTREME , SCB_NONE ); @@ -10485,11 +10485,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_PROPERTYWALK: val3 = 0; break; - case SC_CLOUD_KILL: - val4 = tick / 500; - tick = -1; // Duration sent to the client should be infinite - tick_time = 500; - break; case SC_STRIKING: // val2 = watk bonus already calc val3 = 6 - val1;// spcost = 6 - level (lvl1:5 ... lvl 5: 1) @@ -13236,20 +13231,6 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) } break; - case SC_CLOUD_KILL: { - struct block_list *src = map_id2bl(sce->val2), *unit_bl = map_id2bl(sce->val3); - - if (src && unit_bl){ - map_freeblock_lock(); - dounlock = true; - skill_attack(skill_get_type(status_sc2skill(type)), src, unit_bl, bl, SO_CLOUD_KILL, sce->val1, tick, 0); - if (!status_isdead(bl)) { - sc_timer_next(500 + tick); - } - } - } - break; - case SC_WARMER: { int hp = 0; struct status_change *ssc = status_get_sc(map_id2bl(sce->val2)); diff --git a/src/map/status.hpp b/src/map/status.hpp index 402bfae417..4a9418d424 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -780,7 +780,7 @@ enum sc_type : int16 { SC_ACTIVE_MONSTER_TRANSFORM, - SC_CLOUD_KILL, + SC_CLOUD_KILL, // Deprecated SC_LJOSALFAR, SC_MERMAID_LONGING,