Commit 284b7612 authored by nanahira's avatar nanahira

add Card.IsAbleToDecreaseAttackAsCpst & Card.IsAbleToDecreaseDefenseAsCost

parent 61ce69d0
...@@ -3328,6 +3328,28 @@ int32 card::is_removeable_as_cost(uint8 playerid) { ...@@ -3328,6 +3328,28 @@ int32 card::is_removeable_as_cost(uint8 playerid) {
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
int32 card::is_attack_decreasable_as_cost(uint8 playerid, int32 val) {
if(!(data.type & TYPE_MONSTER) && !(get_type() & TYPE_MONSTER))
return FALSE;
if(!(current.location & LOCATION_MZONE) || is_position(POS_FACEDOWN))
return FALSE;
if(is_affected_by_effect(EFFECT_SET_ATTACK_FINAL) || is_affected_by_effect(EFFECT_REVERSE_UPDATE))
return FALSE;
if(val && get_attack() < val)
return FALSE;
return TRUE;
}
int32 card::is_defense_decreasable_as_cost(uint8 playerid, int32 val) {
if(!(data.type & TYPE_MONSTER) && !(get_type() & TYPE_MONSTER))
return FALSE;
if(!(current.location & LOCATION_MZONE) || is_position(POS_FACEDOWN) || (data.type & TYPE_LINK))
return FALSE;
if(is_affected_by_effect(EFFECT_SET_DEFENSE_FINAL) || is_affected_by_effect(EFFECT_REVERSE_UPDATE))
return FALSE;
if(val && get_defense() < val)
return FALSE;
return TRUE;
}
int32 card::is_releasable_by_summon(uint8 playerid, card *pcard) { int32 card::is_releasable_by_summon(uint8 playerid, card *pcard) {
if(is_status(STATUS_SUMMONING)) if(is_status(STATUS_SUMMONING))
return FALSE; return FALSE;
......
...@@ -318,6 +318,8 @@ public: ...@@ -318,6 +318,8 @@ public:
int32 is_destructable_by_effect(effect* peffect, uint8 playerid); int32 is_destructable_by_effect(effect* peffect, uint8 playerid);
int32 is_removeable(uint8 playerid); int32 is_removeable(uint8 playerid);
int32 is_removeable_as_cost(uint8 playerid); int32 is_removeable_as_cost(uint8 playerid);
int32 is_attack_decreasable_as_cost(uint8 playerid, int32 val);
int32 is_defense_decreasable_as_cost(uint8 playerid, int32 val);
int32 is_releasable_by_summon(uint8 playerid, card* pcard); int32 is_releasable_by_summon(uint8 playerid, card* pcard);
int32 is_releasable_by_nonsummon(uint8 playerid); int32 is_releasable_by_nonsummon(uint8 playerid);
int32 is_releasable_by_effect(uint8 playerid, effect* peffect); int32 is_releasable_by_effect(uint8 playerid, effect* peffect);
......
...@@ -205,6 +205,8 @@ static const struct luaL_Reg cardlib[] = { ...@@ -205,6 +205,8 @@ static const struct luaL_Reg cardlib[] = {
{ "IsAbleToDeckOrExtraAsCost", scriptlib::card_is_able_to_deck_or_extra_as_cost }, { "IsAbleToDeckOrExtraAsCost", scriptlib::card_is_able_to_deck_or_extra_as_cost },
{ "IsAbleToGraveAsCost", scriptlib::card_is_able_to_grave_as_cost }, { "IsAbleToGraveAsCost", scriptlib::card_is_able_to_grave_as_cost },
{ "IsAbleToRemoveAsCost", scriptlib::card_is_able_to_remove_as_cost }, { "IsAbleToRemoveAsCost", scriptlib::card_is_able_to_remove_as_cost },
{ "IsAbleToDecreaseAttackAsCost", scriptlib::card_is_able_to_decrease_attack_as_cost },
{ "IsAbleToDecreaseDefenseAsCost", scriptlib::card_is_able_to_decrease_defense_as_cost },
{ "IsReleasable", scriptlib::card_is_releasable }, { "IsReleasable", scriptlib::card_is_releasable },
{ "IsReleasableByEffect", scriptlib::card_is_releasable_by_effect }, { "IsReleasableByEffect", scriptlib::card_is_releasable_by_effect },
{ "IsDiscardable", scriptlib::card_is_discardable }, { "IsDiscardable", scriptlib::card_is_discardable },
......
...@@ -2130,6 +2130,34 @@ int32 scriptlib::card_is_able_to_remove_as_cost(lua_State *L) { ...@@ -2130,6 +2130,34 @@ int32 scriptlib::card_is_able_to_remove_as_cost(lua_State *L) {
lua_pushboolean(L, 0); lua_pushboolean(L, 0);
return 1; return 1;
} }
int32 scriptlib::card_is_able_to_decrease_attack_as_cost(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 p = pcard->pduel->game_field->core.reason_player;
int32 val = 0;
if(lua_gettop(L) > 1)
val = lua_tointeger(L, 2);
if(pcard->is_attack_decreasable_as_cost(p, val))
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::card_is_able_to_decrease_defense_as_cost(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 p = pcard->pduel->game_field->core.reason_player;
int32 val = 0;
if(lua_gettop(L) > 1)
val = lua_tointeger(L, 2);
if(pcard->is_defense_decreasable_as_cost(p, val))
lua_pushboolean(L, 1);
else
lua_pushboolean(L, 0);
return 1;
}
int32 scriptlib::card_is_releasable(lua_State *L) { int32 scriptlib::card_is_releasable(lua_State *L) {
check_param_count(L, 1); check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
......
...@@ -207,6 +207,8 @@ public: ...@@ -207,6 +207,8 @@ public:
static int32 card_is_able_to_extra_as_cost(lua_State *L); static int32 card_is_able_to_extra_as_cost(lua_State *L);
static int32 card_is_able_to_deck_or_extra_as_cost(lua_State *L); static int32 card_is_able_to_deck_or_extra_as_cost(lua_State *L);
static int32 card_is_able_to_remove_as_cost(lua_State *L); static int32 card_is_able_to_remove_as_cost(lua_State *L);
static int32 card_is_able_to_decrease_attack_as_cost(lua_State *L);
static int32 card_is_able_to_decrease_defense_as_cost(lua_State *L);
static int32 card_is_releasable(lua_State *L); static int32 card_is_releasable(lua_State *L);
static int32 card_is_releasable_by_effect(lua_State *L); static int32 card_is_releasable_by_effect(lua_State *L);
static int32 card_is_discardable(lua_State *L); static int32 card_is_discardable(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