You need to sign in or sign up before continuing.
Commit cc6a9a5a authored by DailyShana's avatar DailyShana

fix comparing level, rank, attack, defense of trap monsters

Card.IsLevelAbove Card.IsLevelBelow
Card.IsRankAbove Card.IsRankBelow
Card.IsLinkAbove Card.IsLinkBelow
Card.IsAttack Card.IsAttackAbove Card.IsAttackBelow
Card.IsDefense Card.IsDefenseAbove Card.IsDefenseBelow

close Fluorohydride/ygopro#2312
parent 09230d32
......@@ -1026,7 +1026,7 @@ int32 scriptlib::card_is_attack(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
if(!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE))
if(!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER))
lua_pushboolean(L, 0);
else {
uint32 atk = pcard->get_attack();
......@@ -1049,7 +1049,8 @@ int32 scriptlib::card_is_defense(lua_State *L) {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
if((pcard->data.type & TYPE_LINK) || (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
if((pcard->data.type & TYPE_LINK)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER)))
lua_pushboolean(L, 0);
else {
uint32 def = pcard->get_defense();
......@@ -2465,11 +2466,11 @@ int32 scriptlib::card_is_level_below(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 lvl = (uint32)lua_tointeger(L, 2);
if((pcard->data.type & (TYPE_XYZ | TYPE_LINK)) || (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
uint32 plvl = pcard->get_level();
if(plvl == 0)
lua_pushboolean(L, 0);
else
lua_pushboolean(L, pcard->get_level() <= lvl);
lua_pushboolean(L, plvl <= lvl);
return 1;
}
int32 scriptlib::card_is_level_above(lua_State *L) {
......@@ -2477,11 +2478,11 @@ int32 scriptlib::card_is_level_above(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 lvl = (uint32)lua_tointeger(L, 2);
if((pcard->data.type & (TYPE_XYZ | TYPE_LINK)) || (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
uint32 plvl = pcard->get_level();
if(plvl == 0)
lua_pushboolean(L, 0);
else
lua_pushboolean(L, pcard->get_level() >= lvl);
lua_pushboolean(L, plvl >= lvl);
return 1;
}
int32 scriptlib::card_is_rank_below(lua_State *L) {
......@@ -2489,11 +2490,11 @@ int32 scriptlib::card_is_rank_below(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 rnk = (uint32)lua_tointeger(L, 2);
if(!(pcard->data.type & TYPE_XYZ) || (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
uint32 prnk = pcard->get_rank();
if(prnk == 0)
lua_pushboolean(L, 0);
else
lua_pushboolean(L, pcard->get_rank() <= rnk);
lua_pushboolean(L, prnk <= rnk);
return 1;
}
int32 scriptlib::card_is_rank_above(lua_State *L) {
......@@ -2501,11 +2502,11 @@ int32 scriptlib::card_is_rank_above(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 rnk = (uint32)lua_tointeger(L, 2);
if(!(pcard->data.type & TYPE_XYZ) || (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
uint32 prnk = pcard->get_rank();
if(prnk == 0)
lua_pushboolean(L, 0);
else
lua_pushboolean(L, pcard->get_rank() >= rnk);
lua_pushboolean(L, prnk >= rnk);
return 1;
}
int32 scriptlib::card_is_link_below(lua_State *L) {
......@@ -2513,11 +2514,11 @@ int32 scriptlib::card_is_link_below(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 lnk = (uint32)lua_tointeger(L, 2);
if(!(pcard->data.type & TYPE_LINK) || (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
uint32 plnk = pcard->get_link();
if(plnk == 0)
lua_pushboolean(L, 0);
else
lua_pushboolean(L, pcard->get_link() <= lnk);
lua_pushboolean(L, plnk <= lnk);
return 1;
}
int32 scriptlib::card_is_link_above(lua_State *L) {
......@@ -2525,11 +2526,11 @@ int32 scriptlib::card_is_link_above(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
uint32 lnk = (uint32)lua_tointeger(L, 2);
if(!(pcard->data.type & TYPE_LINK) || (pcard->status & STATUS_NO_LEVEL)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
uint32 plnk = pcard->get_link();
if(plnk == 0)
lua_pushboolean(L, 0);
else
lua_pushboolean(L, pcard->get_link() >= lnk);
lua_pushboolean(L, plnk >= lnk);
return 1;
}
int32 scriptlib::card_is_attack_below(lua_State *L) {
......@@ -2537,7 +2538,7 @@ int32 scriptlib::card_is_attack_below(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
int32 atk = (int32)lua_tointeger(L, 2);
if(!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE))
if(!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER))
lua_pushboolean(L, 0);
else {
int32 _atk = pcard->get_attack();
......@@ -2550,7 +2551,7 @@ int32 scriptlib::card_is_attack_above(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
int32 atk = (int32)lua_tointeger(L, 2);
if(!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE))
if(!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER))
lua_pushboolean(L, 0);
else {
int32 _atk = pcard->get_attack();
......@@ -2563,7 +2564,8 @@ int32 scriptlib::card_is_defense_below(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
int32 def = (int32)lua_tointeger(L, 2);
if((pcard->data.type & TYPE_LINK) || (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
if((pcard->data.type & TYPE_LINK)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER)))
lua_pushboolean(L, 0);
else {
int32 _def = pcard->get_defense();
......@@ -2576,7 +2578,8 @@ int32 scriptlib::card_is_defense_above(lua_State *L) {
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
int32 def = (int32)lua_tointeger(L, 2);
if((pcard->data.type & TYPE_LINK) || (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !(pcard->current.location & LOCATION_MZONE)))
if((pcard->data.type & TYPE_LINK)
|| (!(pcard->data.type & TYPE_MONSTER) && !(pcard->get_type() & TYPE_MONSTER) && !pcard->is_affected_by_effect(EFFECT_PRE_MONSTER)))
lua_pushboolean(L, 0);
else {
int32 _def = pcard->get_defense();
......
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