Commit 5b7d6581 authored by mercury233's avatar mercury233
parents 2ad65dff fe782145
...@@ -553,6 +553,8 @@ static const struct luaL_Reg duellib[] = { ...@@ -553,6 +553,8 @@ static const struct luaL_Reg duellib[] = {
{ "IsPlayerCanDiscardDeck", scriptlib::duel_is_player_can_discard_deck }, { "IsPlayerCanDiscardDeck", scriptlib::duel_is_player_can_discard_deck },
{ "IsPlayerCanDiscardDeckAsCost", scriptlib::duel_is_player_can_discard_deck_as_cost }, { "IsPlayerCanDiscardDeckAsCost", scriptlib::duel_is_player_can_discard_deck_as_cost },
{ "IsPlayerCanSummon", scriptlib::duel_is_player_can_summon }, { "IsPlayerCanSummon", scriptlib::duel_is_player_can_summon },
{ "IsPlayerCanMSet", scriptlib::duel_is_player_can_mset },
{ "IsPlayerCanSSet", scriptlib::duel_is_player_can_sset },
{ "IsPlayerCanSpecialSummon", scriptlib::duel_is_player_can_spsummon }, { "IsPlayerCanSpecialSummon", scriptlib::duel_is_player_can_spsummon },
{ "IsPlayerCanFlipSummon", scriptlib::duel_is_player_can_flipsummon }, { "IsPlayerCanFlipSummon", scriptlib::duel_is_player_can_flipsummon },
{ "IsPlayerCanSpecialSummonMonster", scriptlib::duel_is_player_can_spsummon_monster }, { "IsPlayerCanSpecialSummonMonster", scriptlib::duel_is_player_can_spsummon_monster },
......
...@@ -3825,6 +3825,43 @@ int32 scriptlib::duel_is_player_can_summon(lua_State * L) { ...@@ -3825,6 +3825,43 @@ int32 scriptlib::duel_is_player_can_summon(lua_State * L) {
} }
return 1; return 1;
} }
int32 scriptlib::duel_is_player_can_mset(lua_State * L) {
check_param_count(L, 1);
int32 playerid = lua_tointeger(L, 1);
if(playerid != 0 && playerid != 1) {
lua_pushboolean(L, 0);
return 1;
}
duel* pduel = interpreter::get_duel_info(L);
if(lua_gettop(L) == 1)
lua_pushboolean(L, pduel->game_field->is_player_can_action(playerid, EFFECT_CANNOT_MSET));
else {
check_param_count(L, 3);
check_param(L, PARAM_TYPE_CARD, 3);
int32 sumtype = lua_tointeger(L, 2);
card* pcard = *(card**) lua_touserdata(L, 3);
lua_pushboolean(L, pduel->game_field->is_player_can_mset(sumtype, playerid, pcard, playerid));
}
return 1;
}
int32 scriptlib::duel_is_player_can_sset(lua_State * L) {
check_param_count(L, 1);
int32 playerid = lua_tointeger(L, 1);
if(playerid != 0 && playerid != 1) {
lua_pushboolean(L, 0);
return 1;
}
duel* pduel = interpreter::get_duel_info(L);
if(lua_gettop(L) == 1)
lua_pushboolean(L, pduel->game_field->is_player_can_action(playerid, EFFECT_CANNOT_SSET));
else {
check_param_count(L, 2);
check_param(L, PARAM_TYPE_CARD, 2);
card* pcard = *(card**) lua_touserdata(L, 2);
lua_pushboolean(L, pduel->game_field->is_player_can_sset(playerid, pcard));
}
return 1;
}
int32 scriptlib::duel_is_player_can_spsummon(lua_State * L) { int32 scriptlib::duel_is_player_can_spsummon(lua_State * L) {
check_param_count(L, 1); check_param_count(L, 1);
int32 playerid = lua_tointeger(L, 1); int32 playerid = lua_tointeger(L, 1);
......
...@@ -4692,7 +4692,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe ...@@ -4692,7 +4692,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe
} }
case 1: { case 1: {
if (returns.ivalue[0]) { if (returns.ivalue[0]) {
if(!target->current.reason_effect->is_self_destroy_related()) { if(!(target->current.reason_effect && target->current.reason_effect->is_self_destroy_related())) {
targets->container.erase(target); targets->container.erase(target);
target->current.reason = target->temp.reason; target->current.reason = target->temp.reason;
target->current.reason_effect = target->temp.reason_effect; target->current.reason_effect = target->temp.reason_effect;
...@@ -4758,7 +4758,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe ...@@ -4758,7 +4758,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe
if (returns.ivalue[0]) { if (returns.ivalue[0]) {
for (auto cit = targets->container.begin(); cit != targets->container.end();) { for (auto cit = targets->container.begin(); cit != targets->container.end();) {
auto rm = cit++; auto rm = cit++;
if (replace_effect->get_value(*rm) && !(*rm)->current.reason_effect->is_self_destroy_related()) { if(replace_effect->get_value(*rm) && !((*rm)->current.reason_effect && (*rm)->current.reason_effect->is_self_destroy_related())) {
(*rm)->current.reason = (*rm)->temp.reason; (*rm)->current.reason = (*rm)->temp.reason;
(*rm)->current.reason_effect = (*rm)->temp.reason_effect; (*rm)->current.reason_effect = (*rm)->temp.reason_effect;
(*rm)->current.reason_player = (*rm)->temp.reason_player; (*rm)->current.reason_player = (*rm)->temp.reason_player;
......
...@@ -504,6 +504,7 @@ int32 field::process() { ...@@ -504,6 +504,7 @@ int32 field::process() {
if(it->step == 0) { if(it->step == 0) {
card* attacker = core.attacker; card* attacker = core.attacker;
if(!attacker if(!attacker
|| core.effect_damage_step != 0
|| (attacker->fieldid_r != core.pre_field[0]) || (attacker->fieldid_r != core.pre_field[0])
|| (attacker->current.location != LOCATION_MZONE) || (attacker->current.location != LOCATION_MZONE)
|| !attacker->is_capable_attack() || !attacker->is_capable_attack()
......
...@@ -549,6 +549,8 @@ public: ...@@ -549,6 +549,8 @@ public:
static int32 duel_is_player_can_discard_deck(lua_State *L); static int32 duel_is_player_can_discard_deck(lua_State *L);
static int32 duel_is_player_can_discard_deck_as_cost(lua_State *L); static int32 duel_is_player_can_discard_deck_as_cost(lua_State *L);
static int32 duel_is_player_can_summon(lua_State *L); static int32 duel_is_player_can_summon(lua_State *L);
static int32 duel_is_player_can_mset(lua_State *L);
static int32 duel_is_player_can_sset(lua_State *L);
static int32 duel_is_player_can_spsummon(lua_State *L); static int32 duel_is_player_can_spsummon(lua_State *L);
static int32 duel_is_player_can_flipsummon(lua_State *L); static int32 duel_is_player_can_flipsummon(lua_State *L);
static int32 duel_is_player_can_spsummon_monster(lua_State *L); static int32 duel_is_player_can_spsummon_monster(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