From 522c562e05de576fac8975e63dce449c0960a69f Mon Sep 17 00:00:00 2001 From: actboy168 Date: Mon, 23 Dec 2013 16:22:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=AE=BE=E7=BD=AE=E4=BC=A4?= =?UTF-8?q?=E5=AE=B3=E5=A4=B1=E6=95=88=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Warcraft3/yd_jass_api/EventDamageData.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Development/Editor/Plugin/Warcraft3/yd_jass_api/EventDamageData.cpp b/Development/Editor/Plugin/Warcraft3/yd_jass_api/EventDamageData.cpp index 84b0ab0fc..26490867c 100644 --- a/Development/Editor/Plugin/Warcraft3/yd_jass_api/EventDamageData.cpp +++ b/Development/Editor/Plugin/Warcraft3/yd_jass_api/EventDamageData.cpp @@ -57,12 +57,14 @@ struct event_damage_data bool change; war3_event_damage_data* data; uint32_t old_amount; + uint32_t new_amount; event_damage_data(uint32_t is_physical, war3_event_damage_data* ptr) : physical(!!is_physical) , change(false) , data(ptr) , old_amount(0) + , new_amount(0) { } bool is_same(uint32_t* damage1, uint32_t* damage2) const @@ -71,7 +73,7 @@ struct event_damage_data { return true; } - + if ((*damage1 ^ *damage2) != 0x80000000) { return false; @@ -104,7 +106,7 @@ uint32_t __cdecl FakeGetEventDamage() event_damage_data& edd = g_edd.back(); if (edd.change) { - return g_edd.back().data->amount; + return g_edd.back().new_amount; } } @@ -120,7 +122,7 @@ uint32_t __fastcall FakeUnitDamageDoneFunc(uint32_t _this, uint32_t _edx, uint32 if (edd.change && edd.is_same(damage1, damage2)) { edd.change = false; - float d = jass::from_real(edd.data->amount); + float d = jass::from_real(edd.new_amount); uint32_t new_damage1 = jass::to_real(d); uint32_t new_damage2 = jass::to_real(-d); return aero::fast_call(RealUnitDamageDoneFunc, _this, _edx, &new_damage1, &new_damage2); @@ -198,11 +200,8 @@ bool __cdecl EXSetEventDamage(uint32_t value) event_damage_data& edd = g_edd.back(); edd.change = true; - if (!edd.old_amount) - { - edd.old_amount = edd.data->amount; - } - edd.data->amount = *(uint32_t*)value; + edd.old_amount = edd.data->amount; + edd.new_amount = *(uint32_t*)value; return true; }