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