Commit 5b7d6581 authored by mercury233's avatar mercury233
parents 2ad65dff fe782145
......@@ -553,6 +553,8 @@ static const struct luaL_Reg duellib[] = {
{ "IsPlayerCanDiscardDeck", scriptlib::duel_is_player_can_discard_deck },
{ "IsPlayerCanDiscardDeckAsCost", scriptlib::duel_is_player_can_discard_deck_as_cost },
{ "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 },
{ "IsPlayerCanFlipSummon", scriptlib::duel_is_player_can_flipsummon },
{ "IsPlayerCanSpecialSummonMonster", scriptlib::duel_is_player_can_spsummon_monster },
......
......@@ -3825,6 +3825,43 @@ int32 scriptlib::duel_is_player_can_summon(lua_State * L) {
}
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) {
check_param_count(L, 1);
int32 playerid = lua_tointeger(L, 1);
......
......@@ -4692,7 +4692,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe
}
case 1: {
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);
target->current.reason = target->temp.reason;
target->current.reason_effect = target->temp.reason_effect;
......@@ -4758,7 +4758,7 @@ int32 field::operation_replace(uint16 step, effect* replace_effect, group* targe
if (returns.ivalue[0]) {
for (auto cit = targets->container.begin(); cit != targets->container.end();) {
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_effect = (*rm)->temp.reason_effect;
(*rm)->current.reason_player = (*rm)->temp.reason_player;
......
......@@ -504,10 +504,11 @@ int32 field::process() {
if(it->step == 0) {
card* attacker = core.attacker;
if(!attacker
|| (attacker->fieldid_r != core.pre_field[0])
|| (attacker->current.location != LOCATION_MZONE)
|| !attacker->is_capable_attack()
|| !attacker->is_affect_by_effect(core.reason_effect)) {
|| core.effect_damage_step != 0
|| (attacker->fieldid_r != core.pre_field[0])
|| (attacker->current.location != LOCATION_MZONE)
|| !attacker->is_capable_attack()
|| !attacker->is_affect_by_effect(core.reason_effect)) {
returns.ivalue[0] = 0;
core.units.pop_front();
} else {
......
......@@ -549,6 +549,8 @@ public:
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_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_flipsummon(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