Commit 52f4efa0 authored by mercury233's avatar mercury233 Committed by GitHub

add Effect.IsCostChecked (#454)

parent 0799fec5
...@@ -63,6 +63,7 @@ effect::effect(duel* pd) { ...@@ -63,6 +63,7 @@ effect::effect(duel* pd) {
target = 0; target = 0;
value = 0; value = 0;
operation = 0; operation = 0;
cost_checked = FALSE;
} }
int32 effect::is_disable_related() { int32 effect::is_disable_related() {
if (code == EFFECT_IMMUNE_EFFECT || code == EFFECT_DISABLE || code == EFFECT_CANNOT_DISABLE || code == EFFECT_FORBIDDEN) if (code == EFFECT_IMMUNE_EFFECT || code == EFFECT_DISABLE || code == EFFECT_CANNOT_DISABLE || code == EFFECT_FORBIDDEN)
...@@ -410,18 +411,22 @@ int32 effect::is_activate_ready(effect* reason_effect, uint8 playerid, const tev ...@@ -410,18 +411,22 @@ int32 effect::is_activate_ready(effect* reason_effect, uint8 playerid, const tev
return FALSE; return FALSE;
} }
} }
if(!neglect_cost && cost && !(type & EFFECT_TYPE_CONTINUOUS)) { if(!neglect_cost && !(type & EFFECT_TYPE_CONTINUOUS)) {
pduel->lua->add_param(reason_effect, PARAM_TYPE_EFFECT); cost_checked = TRUE;
pduel->lua->add_param(playerid, PARAM_TYPE_INT); if(cost) {
pduel->lua->add_param(e.event_cards, PARAM_TYPE_GROUP); pduel->lua->add_param(reason_effect, PARAM_TYPE_EFFECT);
pduel->lua->add_param(e.event_player, PARAM_TYPE_INT); pduel->lua->add_param(playerid, PARAM_TYPE_INT);
pduel->lua->add_param(e.event_value, PARAM_TYPE_INT); pduel->lua->add_param(e.event_cards, PARAM_TYPE_GROUP);
pduel->lua->add_param(e.reason_effect, PARAM_TYPE_EFFECT); pduel->lua->add_param(e.event_player, PARAM_TYPE_INT);
pduel->lua->add_param(e.reason, PARAM_TYPE_INT); pduel->lua->add_param(e.event_value, PARAM_TYPE_INT);
pduel->lua->add_param(e.reason_player, PARAM_TYPE_INT); pduel->lua->add_param(e.reason_effect, PARAM_TYPE_EFFECT);
pduel->lua->add_param((ptr)0, PARAM_TYPE_INT); pduel->lua->add_param(e.reason, PARAM_TYPE_INT);
if(!pduel->lua->check_condition(cost, 9)) { pduel->lua->add_param(e.reason_player, PARAM_TYPE_INT);
return FALSE; pduel->lua->add_param((ptr)0, PARAM_TYPE_INT);
if(!pduel->lua->check_condition(cost, 9)) {
cost_checked = FALSE;
return FALSE;
}
} }
} }
if(!neglect_target && target) { if(!neglect_target && target) {
...@@ -435,9 +440,11 @@ int32 effect::is_activate_ready(effect* reason_effect, uint8 playerid, const tev ...@@ -435,9 +440,11 @@ int32 effect::is_activate_ready(effect* reason_effect, uint8 playerid, const tev
pduel->lua->add_param(e.reason_player, PARAM_TYPE_INT); pduel->lua->add_param(e.reason_player, PARAM_TYPE_INT);
pduel->lua->add_param((ptr)0, PARAM_TYPE_INT); pduel->lua->add_param((ptr)0, PARAM_TYPE_INT);
if(!pduel->lua->check_condition(target, 9)) { if(!pduel->lua->check_condition(target, 9)) {
cost_checked = FALSE;
return FALSE; return FALSE;
} }
} }
cost_checked = FALSE;
return TRUE; return TRUE;
} }
int32 effect::is_activate_ready(uint8 playerid, const tevent& e, int32 neglect_cond, int32 neglect_cost, int32 neglect_target) { int32 effect::is_activate_ready(uint8 playerid, const tevent& e, int32 neglect_cond, int32 neglect_cost, int32 neglect_target) {
......
...@@ -61,6 +61,7 @@ public: ...@@ -61,6 +61,7 @@ public:
int32 target; int32 target;
int32 value; int32 value;
int32 operation; int32 operation;
uint8 cost_checked;
explicit effect(duel* pd); explicit effect(duel* pd);
~effect() = default; ~effect() = default;
......
...@@ -512,13 +512,20 @@ int32 scriptlib::effect_is_activatable(lua_State *L) { ...@@ -512,13 +512,20 @@ int32 scriptlib::effect_is_activatable(lua_State *L) {
lua_pushboolean(L, peffect->is_activateable(playerid, peffect->pduel->game_field->nil_event, 0, 0, neglect_target, neglect_loc)); lua_pushboolean(L, peffect->is_activateable(playerid, peffect->pduel->game_field->nil_event, 0, 0, neglect_target, neglect_loc));
return 1; return 1;
} }
int32 scriptlib::effect_is_activated(lua_State * L) { int32 scriptlib::effect_is_activated(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
check_param(L, PARAM_TYPE_EFFECT, 1); check_param(L, PARAM_TYPE_EFFECT, 1);
effect* peffect = *(effect**) lua_touserdata(L, 1); effect* peffect = *(effect**) lua_touserdata(L, 1);
lua_pushboolean(L, (peffect->type & 0x7f0)); lua_pushboolean(L, (peffect->type & 0x7f0));
return 1; return 1;
} }
int32 scriptlib::effect_is_cost_checked(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_EFFECT, 1);
effect* peffect = *(effect**)lua_touserdata(L, 1);
lua_pushboolean(L, peffect->cost_checked);
return 1;
}
int32 scriptlib::effect_get_activate_location(lua_State *L) { int32 scriptlib::effect_get_activate_location(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
check_param(L, PARAM_TYPE_EFFECT, 1); check_param(L, PARAM_TYPE_EFFECT, 1);
...@@ -610,6 +617,7 @@ static const struct luaL_Reg effectlib[] = { ...@@ -610,6 +617,7 @@ static const struct luaL_Reg effectlib[] = {
{ "IsHasType", scriptlib::effect_is_has_type }, { "IsHasType", scriptlib::effect_is_has_type },
{ "IsActivatable", scriptlib::effect_is_activatable }, { "IsActivatable", scriptlib::effect_is_activatable },
{ "IsActivated", scriptlib::effect_is_activated }, { "IsActivated", scriptlib::effect_is_activated },
{ "IsCostChecked", scriptlib::effect_is_cost_checked },
{ "GetActivateLocation", scriptlib::effect_get_activate_location }, { "GetActivateLocation", scriptlib::effect_get_activate_location },
{ "GetActivateSequence", scriptlib::effect_get_activate_sequence }, { "GetActivateSequence", scriptlib::effect_get_activate_sequence },
{ "CheckCountLimit", scriptlib::effect_check_count_limit }, { "CheckCountLimit", scriptlib::effect_check_count_limit },
......
...@@ -329,6 +329,7 @@ public: ...@@ -329,6 +329,7 @@ public:
static int32 effect_is_has_type(lua_State *L); static int32 effect_is_has_type(lua_State *L);
static int32 effect_is_activatable(lua_State *L); static int32 effect_is_activatable(lua_State *L);
static int32 effect_is_activated(lua_State *L); static int32 effect_is_activated(lua_State *L);
static int32 effect_is_cost_checked(lua_State *L);
static int32 effect_get_activate_location(lua_State *L); static int32 effect_get_activate_location(lua_State *L);
static int32 effect_get_activate_sequence(lua_State *L); static int32 effect_get_activate_sequence(lua_State *L);
static int32 effect_check_count_limit(lua_State *L); static int32 effect_check_count_limit(lua_State *L);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment