Commit 49225a65 authored by VanillaSalt's avatar VanillaSalt

fix

parent d919474e
...@@ -3129,7 +3129,7 @@ int32 card::is_capable_change_position(uint8 playerid) { ...@@ -3129,7 +3129,7 @@ int32 card::is_capable_change_position(uint8 playerid) {
return TRUE; return TRUE;
} }
int32 card::is_capable_turn_set(uint8 playerid) { int32 card::is_capable_turn_set(uint8 playerid) {
if(data.type & TYPE_TOKEN) if(data.type & (TYPE_LINK | TYPE_TOKEN))
return FALSE; return FALSE;
if(is_position(POS_FACEDOWN)) if(is_position(POS_FACEDOWN))
return FALSE; return FALSE;
......
...@@ -150,7 +150,7 @@ void field::add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence ...@@ -150,7 +150,7 @@ void field::add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence
return; return;
if (!is_location_useable(playerid, location, sequence)) if (!is_location_useable(playerid, location, sequence))
return; return;
if((pcard->data.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ)) && (location & (LOCATION_HAND | LOCATION_DECK))) { if((pcard->data.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && (location & (LOCATION_HAND | LOCATION_DECK))) {
location = LOCATION_EXTRA; location = LOCATION_EXTRA;
pcard->operation_param = (pcard->operation_param & 0x00ffffff) | (POS_FACEDOWN_DEFENSE << 24); pcard->operation_param = (pcard->operation_param & 0x00ffffff) | (POS_FACEDOWN_DEFENSE << 24);
} }
...@@ -280,7 +280,7 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc ...@@ -280,7 +280,7 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc
return; return;
uint8 preplayer = pcard->current.controler; uint8 preplayer = pcard->current.controler;
uint8 presequence = pcard->current.sequence; uint8 presequence = pcard->current.sequence;
if((pcard->data.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ)) && (location & (LOCATION_HAND | LOCATION_DECK))) { if((pcard->data.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) && (location & (LOCATION_HAND | LOCATION_DECK))) {
location = LOCATION_EXTRA; location = LOCATION_EXTRA;
pcard->operation_param = (pcard->operation_param & 0x00ffffff) | (POS_FACEDOWN_DEFENSE << 24); pcard->operation_param = (pcard->operation_param & 0x00ffffff) | (POS_FACEDOWN_DEFENSE << 24);
} }
...@@ -706,7 +706,7 @@ void field::swap_deck_and_grave(uint8 playerid) { ...@@ -706,7 +706,7 @@ void field::swap_deck_and_grave(uint8 playerid) {
player[playerid].list_grave.swap(player[playerid].list_main); player[playerid].list_grave.swap(player[playerid].list_main);
card_vector ex; card_vector ex;
for(auto clit = player[playerid].list_main.begin(); clit != player[playerid].list_main.end(); ) { for(auto clit = player[playerid].list_main.begin(); clit != player[playerid].list_main.end(); ) {
if((*clit)->data.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ)) { if((*clit)->data.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK)) {
ex.push_back(*clit); ex.push_back(*clit);
clit = player[playerid].list_main.erase(clit); clit = player[playerid].list_main.erase(clit);
} else } else
...@@ -2552,11 +2552,15 @@ int32 field::is_player_can_spsummon(uint8 playerid) { ...@@ -2552,11 +2552,15 @@ int32 field::is_player_can_spsummon(uint8 playerid) {
} }
return is_player_can_spsummon_count(playerid, 1); return is_player_can_spsummon_count(playerid, 1);
} }
int32 field::is_player_can_spsummon(effect * peffect, uint32 sumtype, uint8 sumpos, uint8 playerid, uint8 toplayer, card * pcard) { int32 field::is_player_can_spsummon(effect* peffect, uint32 sumtype, uint8 sumpos, uint8 playerid, uint8 toplayer, card* pcard) {
if(pcard->is_affected_by_effect(EFFECT_CANNOT_SPECIAL_SUMMON)) if(pcard->is_affected_by_effect(EFFECT_CANNOT_SPECIAL_SUMMON))
return FALSE; return FALSE;
if(pcard->is_status(STATUS_FORBIDDEN)) if(pcard->is_status(STATUS_FORBIDDEN))
return FALSE; return FALSE;
if(pcard->data.type & TYPE_LINK)
sumpos &= POS_FACEUP_ATTACK;
if(sumpos == 0)
return FALSE;
sumtype |= SUMMON_TYPE_SPECIAL; sumtype |= SUMMON_TYPE_SPECIAL;
save_lp_cost(); save_lp_cost();
effect_set eset; effect_set eset;
......
...@@ -283,6 +283,13 @@ int32 scriptlib::card_get_linked_group_count(lua_State *L) { ...@@ -283,6 +283,13 @@ int32 scriptlib::card_get_linked_group_count(lua_State *L) {
lua_pushinteger(L, cset.size()); lua_pushinteger(L, cset.size());
return 1; return 1;
} }
int32 scriptlib::card_get_linked_zone(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
lua_pushinteger(L, pcard->get_linked_zone());
return 1;
}
int32 scriptlib::card_get_attribute(lua_State *L) { int32 scriptlib::card_get_attribute(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);
...@@ -1114,13 +1121,6 @@ int32 scriptlib::card_get_effect_count(lua_State *L) { ...@@ -1114,13 +1121,6 @@ int32 scriptlib::card_get_effect_count(lua_State *L) {
lua_pushinteger(L, eset.size()); lua_pushinteger(L, eset.size());
return 1; return 1;
} }
int32 scriptlib::card_get_linked_zone(lua_State *L) {
check_param_count(L, 1);
check_param(L, PARAM_TYPE_CARD, 1);
card* pcard = *(card**) lua_touserdata(L, 1);
lua_pushinteger(L, pcard->get_linked_zone());
return 1;
}
int32 scriptlib::card_register_flag_effect(lua_State *L) { int32 scriptlib::card_register_flag_effect(lua_State *L) {
check_param_count(L, 5); check_param_count(L, 5);
check_param(L, PARAM_TYPE_CARD, 1); check_param(L, PARAM_TYPE_CARD, 1);
......
...@@ -2711,7 +2711,15 @@ int32 field::special_summon(uint16 step, effect * reason_effect, uint8 reason_pl ...@@ -2711,7 +2711,15 @@ int32 field::special_summon(uint16 step, effect * reason_effect, uint8 reason_pl
raise_single_event(*cit, 0, EVENT_SPSUMMON_SUCCESS, (*cit)->current.reason_effect, 0, (*cit)->current.reason_player, (*cit)->summon_player, 0); raise_single_event(*cit, 0, EVENT_SPSUMMON_SUCCESS, (*cit)->current.reason_effect, 0, (*cit)->current.reason_player, (*cit)->summon_player, 0);
int32 summontype = (*cit)->summon_info & 0xff000000; int32 summontype = (*cit)->summon_info & 0xff000000;
if(summontype && (*cit)->material_cards.size()) { if(summontype && (*cit)->material_cards.size()) {
int32 matreason = (summontype == SUMMON_TYPE_FUSION) ? REASON_FUSION : (summontype == SUMMON_TYPE_RITUAL) ? REASON_RITUAL : (summontype == SUMMON_TYPE_XYZ) ? REASON_XYZ : 0; int32 matreason = 0;
if(summontype == SUMMON_TYPE_FUSION)
matreason = REASON_FUSION;
else if(summontype == SUMMON_TYPE_RITUAL)
matreason = REASON_RITUAL;
else if(summontype == SUMMON_TYPE_XYZ)
matreason = REASON_XYZ;
else if(summontype == SUMMON_TYPE_LINK)
matreason = REASON_LINK;
for(auto mit = (*cit)->material_cards.begin(); mit != (*cit)->material_cards.end(); ++mit) for(auto mit = (*cit)->material_cards.begin(); mit != (*cit)->material_cards.end(); ++mit)
raise_single_event(*mit, &targets->container, EVENT_BE_MATERIAL, (*cit)->current.reason_effect, matreason, (*cit)->current.reason_player, (*cit)->summon_player, 0); raise_single_event(*mit, &targets->container, EVENT_BE_MATERIAL, (*cit)->current.reason_effect, matreason, (*cit)->current.reason_player, (*cit)->summon_player, 0);
raise_event(&((*cit)->material_cards), EVENT_BE_MATERIAL, reason_effect, matreason, reason_player, (*cit)->summon_player, 0); raise_event(&((*cit)->material_cards), EVENT_BE_MATERIAL, reason_effect, matreason, reason_player, (*cit)->summon_player, 0);
...@@ -3936,6 +3944,10 @@ int32 field::move_to_field(uint16 step, card* target, uint32 enable, uint32 ret, ...@@ -3936,6 +3944,10 @@ int32 field::move_to_field(uint16 step, card* target, uint32 enable, uint32 ret,
returns.ivalue[0] = positions; returns.ivalue[0] = positions;
return FALSE; return FALSE;
} }
if(target->data.type & TYPE_LINK) {
returns.ivalue[0] = POS_FACEUP_ATTACK;
return FALSE;
}
add_process(PROCESSOR_SELECT_POSITION, 0, 0, 0, (positions << 16) + move_player, target->data.code); add_process(PROCESSOR_SELECT_POSITION, 0, 0, 0, (positions << 16) + move_player, target->data.code);
return FALSE; return FALSE;
} }
......
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