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