Commit 010d7f7b authored by mercury233's avatar mercury233
parents 151e5c38 42418b3e
......@@ -982,7 +982,7 @@ void field::filter_player_effect(uint8 playerid, uint32 code, effect_set* eset,
if(sort)
eset->sort();
}
int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, uint32 location2, group* pgroup, card* pexception, uint32 extraargs, card** pret, int32 fcount, int32 is_target) {
int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, uint32 location2, group* pgroup, card* pexception, group* pexgroup, uint32 extraargs, card** pret, int32 fcount, int32 is_target) {
if(self != 0 && self != 1)
return FALSE;
card* pcard;
......@@ -993,7 +993,8 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
for(uint32 i = 0; i < 5; ++i) {
pcard = player[self].list_mzone[i];
if(pcard && !pcard->get_status(STATUS_SUMMONING | STATUS_SUMMON_DISABLED | STATUS_SPSUMMON_STEP)
&& pcard != pexception && pduel->lua->check_matching(pcard, findex, extraargs)
&& pcard != pexception && !(pexgroup && pexgroup->has_card(pcard))
&& pduel->lua->check_matching(pcard, findex, extraargs)
&& (!is_target || pcard->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = pcard;
......@@ -1011,7 +1012,9 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
if(location & LOCATION_SZONE) {
for(uint32 i = 0; i < 8; ++i) {
pcard = player[self].list_szone[i];
if(pcard && !pcard->is_status(STATUS_ACTIVATE_DISABLED) && pcard != pexception && pduel->lua->check_matching(pcard, findex, extraargs)
if(pcard && !pcard->is_status(STATUS_ACTIVATE_DISABLED)
&& pcard != pexception && !(pexgroup && pexgroup->has_card(pcard))
&& pduel->lua->check_matching(pcard, findex, extraargs)
&& (!is_target || pcard->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = pcard;
......@@ -1028,7 +1031,8 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
}
if(location & LOCATION_DECK) {
for(auto cit = player[self].list_main.rbegin(); cit != player[self].list_main.rend(); ++cit) {
if(*cit != pexception && pduel->lua->check_matching(*cit, findex, extraargs)
if(*cit != pexception && !(pexgroup && pexgroup->has_card(*cit))
&& pduel->lua->check_matching(*cit, findex, extraargs)
&& (!is_target || (*cit)->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = *cit;
......@@ -1045,7 +1049,8 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
}
if(location & LOCATION_EXTRA) {
for(auto cit = player[self].list_extra.rbegin(); cit != player[self].list_extra.rend(); ++cit) {
if(*cit != pexception && pduel->lua->check_matching(*cit, findex, extraargs)
if(*cit != pexception && !(pexgroup && pexgroup->has_card(*cit))
&& pduel->lua->check_matching(*cit, findex, extraargs)
&& (!is_target || (*cit)->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = *cit;
......@@ -1062,7 +1067,8 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
}
if(location & LOCATION_HAND) {
for(auto cit = player[self].list_hand.begin(); cit != player[self].list_hand.end(); ++cit) {
if(*cit != pexception && pduel->lua->check_matching(*cit, findex, extraargs)
if(*cit != pexception && !(pexgroup && pexgroup->has_card(*cit))
&& pduel->lua->check_matching(*cit, findex, extraargs)
&& (!is_target || (*cit)->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = *cit;
......@@ -1079,7 +1085,8 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
}
if(location & LOCATION_GRAVE) {
for(auto cit = player[self].list_grave.rbegin(); cit != player[self].list_grave.rend(); ++cit) {
if(*cit != pexception && pduel->lua->check_matching(*cit, findex, extraargs)
if(*cit != pexception && !(pexgroup && pexgroup->has_card(*cit))
&& pduel->lua->check_matching(*cit, findex, extraargs)
&& (!is_target || (*cit)->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = *cit;
......@@ -1096,7 +1103,8 @@ int32 field::filter_matching_card(int32 findex, uint8 self, uint32 location1, ui
}
if(location & LOCATION_REMOVED) {
for(auto cit = player[self].list_remove.rbegin(); cit != player[self].list_remove.rend(); ++cit) {
if(*cit != pexception && pduel->lua->check_matching(*cit, findex, extraargs)
if(*cit != pexception && !(pexgroup && pexgroup->has_card(*cit))
&& pduel->lua->check_matching(*cit, findex, extraargs)
&& (!is_target || (*cit)->is_capable_be_effect_target(core.reason_effect, core.reason_player))) {
if(pret) {
*pret = *cit;
......@@ -1183,12 +1191,12 @@ effect* field::is_player_affected_by_effect(uint8 playerid, uint32 code) {
}
return 0;
}
int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set* ex_list, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exp) {
int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set* ex_list, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exc, group* exg) {
card* pcard;
uint32 rcount = 0;
for(uint32 i = 0; i < 5; ++i) {
pcard = player[playerid].list_mzone[i];
if(pcard && pcard != exp && pcard->is_releasable_by_nonsummon(playerid)
if(pcard && pcard != exc && !(exg && exg->has_card(pcard)) && pcard->is_releasable_by_nonsummon(playerid)
&& (!use_con || pduel->lua->check_matching(pcard, fun, exarg))) {
if(release_list)
release_list->insert(pcard);
......@@ -1199,7 +1207,7 @@ int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set*
if(use_hand) {
for(uint32 i = 0; i < player[playerid].list_hand.size(); ++i) {
pcard = player[playerid].list_hand[i];
if(pcard && pcard != exp && pcard->is_releasable_by_nonsummon(playerid)
if(pcard && pcard != exc && !(exg && exg->has_card(pcard)) && pcard->is_releasable_by_nonsummon(playerid)
&& (!use_con || pduel->lua->check_matching(pcard, fun, exarg))) {
if(release_list)
release_list->insert(pcard);
......@@ -1210,7 +1218,7 @@ int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set*
}
for(uint32 i = 0; i < 5; ++i) {
pcard = player[1 - playerid].list_mzone[i];
if(pcard && pcard != exp && (pcard->is_position(POS_FACEUP) || !use_con) && pcard->is_affected_by_effect(EFFECT_EXTRA_RELEASE)
if(pcard && pcard != exc && !(exg && exg->has_card(pcard)) && (pcard->is_position(POS_FACEUP) || !use_con) && pcard->is_affected_by_effect(EFFECT_EXTRA_RELEASE)
&& pcard->is_releasable_by_nonsummon(playerid) && (!use_con || pduel->lua->check_matching(pcard, fun, exarg))) {
if(ex_list)
ex_list->insert(pcard);
......@@ -1220,11 +1228,11 @@ int32 field::get_release_list(uint8 playerid, card_set* release_list, card_set*
}
return rcount;
}
int32 field::check_release_list(uint8 playerid, int32 count, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exp) {
int32 field::check_release_list(uint8 playerid, int32 count, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exc, group* exg) {
card* pcard;
for(uint32 i = 0; i < 5; ++i) {
pcard = player[playerid].list_mzone[i];
if(pcard && pcard != exp && pcard->is_releasable_by_nonsummon(playerid)
if(pcard && pcard != exc && !(exg && exg->has_card(pcard)) && pcard->is_releasable_by_nonsummon(playerid)
&& (!use_con || pduel->lua->check_matching(pcard, fun, exarg))) {
count--;
if(count == 0)
......@@ -1234,7 +1242,7 @@ int32 field::check_release_list(uint8 playerid, int32 count, int32 use_con, int3
if(use_hand) {
for(uint32 i = 0; i < player[playerid].list_hand.size(); ++i) {
pcard = player[playerid].list_hand[i];
if(pcard && pcard != exp && pcard->is_releasable_by_nonsummon(playerid)
if(pcard && pcard != exc && !(exg && exg->has_card(pcard)) && pcard->is_releasable_by_nonsummon(playerid)
&& (!use_con || pduel->lua->check_matching(pcard, fun, exarg))) {
count--;
if(count == 0)
......@@ -1244,7 +1252,7 @@ int32 field::check_release_list(uint8 playerid, int32 count, int32 use_con, int3
}
for(uint32 i = 0; i < 5; ++i) {
pcard = player[1 - playerid].list_mzone[i];
if(pcard && pcard != exp && (!use_con || pcard->is_position(POS_FACEUP)) && pcard->is_affected_by_effect(EFFECT_EXTRA_RELEASE)
if(pcard && pcard != exc && !(exg && exg->has_card(pcard)) && (!use_con || pcard->is_position(POS_FACEUP)) && pcard->is_affected_by_effect(EFFECT_EXTRA_RELEASE)
&& pcard->is_releasable_by_nonsummon(playerid) && (!use_con || pduel->lua->check_matching(pcard, fun, exarg))) {
count--;
if(count == 0)
......
......@@ -104,7 +104,7 @@ struct field_effect {
effect_collection cheff;
effect_collection rechargeable;
effect_collection spsummon_count_eff;
std::list<card*> disable_check_list;
std::unordered_set<card*> disable_check_set;
};
......@@ -294,6 +294,8 @@ struct processor {
uint8 attack_state_count[2];
uint8 battle_phase_count[2];
uint8 battled_count[2];
uint8 tossed_coin_count[2];
uint8 tossed_dice_count[2];
uint8 phase_action;
uint32 hint_timing[2];
uint8 current_player;
......@@ -333,7 +335,7 @@ public:
explicit field(duel* pduel);
~field();
void reload_field_info();
void add_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence);
void remove_card(card* pcard);
void move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequence);
......@@ -346,7 +348,7 @@ public:
void swap_deck_and_grave(uint8 playerid);
void reverse_deck(uint8 playerid);
void tag_swap(uint8 playerid);
void add_effect(effect* peffect, uint8 owner_player = 2);
void remove_effect(effect* peffect);
void remove_oath_effect(effect* reason_effect);
......@@ -355,16 +357,16 @@ public:
void add_effect_code(uint32 code, uint32 playerid);
uint32 get_effect_code(uint32 code, uint32 playerid);
void dec_effect_code(uint32 code, uint32 playerid);
void filter_field_effect(uint32 code, effect_set* eset, uint8 sort = TRUE);
void filter_affected_cards(effect* peffect, card_set* cset);
void filter_player_effect(uint8 playerid, uint32 code, effect_set* eset, uint8 sort = TRUE);
int32 filter_matching_card(int32 findex, uint8 self, uint32 location1, uint32 location2, group* pgroup, card* pexception, uint32 extraargs, card** pret = 0, int32 fcount = 0, int32 is_target = FALSE);
int32 filter_matching_card(int32 findex, uint8 self, uint32 location1, uint32 location2, group* pgroup, card* pexception, group* pexgroup, uint32 extraargs, card** pret = 0, int32 fcount = 0, int32 is_target = FALSE);
int32 filter_field_card(uint8 self, uint32 location, uint32 location2, group* pgroup);
effect* is_player_affected_by_effect(uint8 playerid, uint32 code);
int32 get_release_list(uint8 playerid, card_set* release_list, card_set* ex_list, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exp);
int32 check_release_list(uint8 playerid, int32 count, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exp);
int32 get_release_list(uint8 playerid, card_set* release_list, card_set* ex_list, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exc, group* exg);
int32 check_release_list(uint8 playerid, int32 count, int32 use_con, int32 use_hand, int32 fun, int32 exarg, card* exc, group* exg);
int32 get_summon_release_list(card* target, card_set* release_list, card_set* ex_list, card_set* ex_list_sum, group* mg = NULL, uint32 ex = 0);
int32 get_summon_count_limit(uint8 playerid);
int32 get_draw_count(uint8 playerid);
......@@ -386,7 +388,7 @@ public:
void check_chain_counter(effect* peffect, int32 playerid, int32 chainid, bool cancel = false);
void set_spsummon_counter(uint8 playerid, bool add = true, bool chain = false);
int32 check_spsummon_counter(uint8 playerid, uint8 ct = 1);
int32 check_lp_cost(uint8 playerid, uint32 cost);
void save_lp_cost();
void restore_lp_cost();
......@@ -405,7 +407,7 @@ public:
static int32 check_with_sum_greater_limit(const card_vector& mats, int32 acc, int32 index, int32 opmin);
static int32 check_with_sum_greater_limit_m(const card_vector& mats, int32 acc, int32 index, int32 opmin, int32 must_count);
int32 check_xyz_material(card* pcard, int32 findex, int32 lv, int32 min, int32 max, group* mg);
int32 is_player_can_draw(uint8 playerid);
int32 is_player_can_discard_deck(uint8 playerid, int32 count);
int32 is_player_can_discard_deck_as_cost(uint8 playerid, int32 count);
......
......@@ -506,6 +506,8 @@ static const struct luaL_Reg duellib[] = {
{ "AddCustomActivityCounter", scriptlib::duel_add_custom_activity_counter },
{ "GetCustomActivityCount", scriptlib::duel_get_custom_activity_count },
{ "GetBattledCount", scriptlib::duel_get_battled_count },
{ "GetTossedCoinCount", scriptlib::duel_get_tossed_coin_count },
{ "GetTossedDiceCount", scriptlib::duel_get_tossed_dice_count },
{ "IsAbleToEnterBP", scriptlib::duel_is_able_to_enter_bp },
{ "VenomSwampCheck", scriptlib::duel_venom_swamp_check },
{ "SwapDeckAndGrave", scriptlib::duel_swap_deck_and_grave },
......
This diff is collapsed.
......@@ -29,12 +29,10 @@ int32 scriptlib::group_clone(lua_State *L) {
int32 scriptlib::group_from_cards(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L);
group* pgroup = pduel->new_group();
card* pcard;
void* p;
for(int32 i = 0; i < lua_gettop(L); ++i) {
p = lua_touserdata(L, i + 1);
void* p = lua_touserdata(L, i + 1);
if(p) {
pcard = *(card**)p;
card* pcard = *(card**)p;
pgroup->container.insert(pcard);
}
}
......@@ -144,17 +142,21 @@ int32 scriptlib::group_filter(lua_State *L) {
check_param_count(L, 3);
check_param(L, PARAM_TYPE_GROUP, 1);
check_param(L, PARAM_TYPE_FUNCTION, 2);
card* pexception = 0;
if(!lua_isnil(L, 3)) {
check_param(L, PARAM_TYPE_CARD, 3);
pexception = *(card**) lua_touserdata(L, 3);
}
group* pgroup = *(group**) lua_touserdata(L, 1);
field::card_set cset(pgroup->container);
if(check_param(L, PARAM_TYPE_CARD, 3, TRUE)) {
card* pexception = *(card**) lua_touserdata(L, 3);
cset.erase(pexception);
} else if(check_param(L, PARAM_TYPE_GROUP, 3, TRUE)) {
group* pexgroup = *(group**) lua_touserdata(L, 3);
for(auto cit = pexgroup->container.begin(); cit != pexgroup->container.end(); ++cit)
cset.erase(*cit);
}
duel* pduel = pgroup->pduel;
group* new_group = pduel->new_group();
uint32 extraargs = lua_gettop(L) - 3;
for (auto it = pgroup->container.begin(); it != pgroup->container.end(); ++it) {
if((*it) != pexception && pduel->lua->check_matching(*it, 2, extraargs)) {
for(auto it = cset.begin(); it != cset.end(); ++it) {
if(pduel->lua->check_matching(*it, 2, extraargs)) {
new_group->container.insert(*it);
}
}
......@@ -165,17 +167,21 @@ int32 scriptlib::group_filter_count(lua_State *L) {
check_param_count(L, 3);
check_param(L, PARAM_TYPE_GROUP, 1);
check_param(L, PARAM_TYPE_FUNCTION, 2);
card* pexception = 0;
if(!lua_isnil(L, 3)) {
check_param(L, PARAM_TYPE_CARD, 3);
pexception = *(card**) lua_touserdata(L, 3);
}
group* pgroup = *(group**) lua_touserdata(L, 1);
field::card_set cset(pgroup->container);
if(check_param(L, PARAM_TYPE_CARD, 3, TRUE)) {
card* pexception = *(card**) lua_touserdata(L, 3);
cset.erase(pexception);
} else if(check_param(L, PARAM_TYPE_GROUP, 3, TRUE)) {
group* pexgroup = *(group**) lua_touserdata(L, 3);
for(auto cit = pexgroup->container.begin(); cit != pexgroup->container.end(); ++cit)
cset.erase(*cit);
}
duel* pduel = pgroup->pduel;
uint32 extraargs = lua_gettop(L) - 3;
uint32 count = 0;
for (auto it = pgroup->container.begin(); it != pgroup->container.end(); ++it) {
if((*it) != pexception && pduel->lua->check_matching(*it, 2, extraargs))
for (auto it = cset.begin(); it != cset.end(); ++it) {
if(pduel->lua->check_matching(*it, 2, extraargs))
count++;
}
lua_pushinteger(L, count);
......@@ -186,12 +192,16 @@ int32 scriptlib::group_filter_select(lua_State *L) {
check_param_count(L, 6);
check_param(L, PARAM_TYPE_GROUP, 1);
check_param(L, PARAM_TYPE_FUNCTION, 3);
card* pexception = 0;
if(!lua_isnil(L, 6)) {
check_param(L, PARAM_TYPE_CARD, 6);
pexception = *(card**) lua_touserdata(L, 6);
}
group* pgroup = *(group**) lua_touserdata(L, 1);
field::card_set cset(pgroup->container);
if(check_param(L, PARAM_TYPE_CARD, 6, TRUE)) {
card* pexception = *(card**) lua_touserdata(L, 6);
cset.erase(pexception);
} else if(check_param(L, PARAM_TYPE_GROUP, 6, TRUE)) {
group* pexgroup = *(group**) lua_touserdata(L, 6);
for(auto cit = pexgroup->container.begin(); cit != pexgroup->container.end(); ++cit)
cset.erase(*cit);
}
duel* pduel = pgroup->pduel;
uint32 playerid = lua_tointeger(L, 2);
if(playerid != 0 && playerid != 1)
......@@ -200,8 +210,8 @@ int32 scriptlib::group_filter_select(lua_State *L) {
uint32 max = lua_tointeger(L, 5);
uint32 extraargs = lua_gettop(L) - 6;
pduel->game_field->core.select_cards.clear();
for (auto it = pgroup->container.begin(); it != pgroup->container.end(); ++it) {
if((*it) != pexception && pduel->lua->check_matching(*it, 3, extraargs))
for (auto it = cset.begin(); it != cset.end(); ++it) {
if(pduel->lua->check_matching(*it, 3, extraargs))
pduel->game_field->core.select_cards.push_back(*it);
}
pduel->game_field->add_process(PROCESSOR_SELECT_CARD_S, 0, 0, 0, playerid, min + (max << 16));
......@@ -211,12 +221,16 @@ int32 scriptlib::group_select(lua_State *L) {
check_action_permission(L);
check_param_count(L, 5);
check_param(L, PARAM_TYPE_GROUP, 1);
card* pexception = 0;
if(!lua_isnil(L, 5)) {
check_param(L, PARAM_TYPE_CARD, 5);
pexception = *(card**) lua_touserdata(L, 5);
}
group* pgroup = *(group**) lua_touserdata(L, 1);
field::card_set cset(pgroup->container);
if(check_param(L, PARAM_TYPE_CARD, 5, TRUE)) {
card* pexception = *(card**) lua_touserdata(L, 5);
cset.erase(pexception);
} else if(check_param(L, PARAM_TYPE_GROUP, 5, TRUE)) {
group* pexgroup = *(group**) lua_touserdata(L, 5);
for(auto cit = pexgroup->container.begin(); cit != pexgroup->container.end(); ++cit)
cset.erase(*cit);
}
duel* pduel = pgroup->pduel;
uint32 playerid = lua_tointeger(L, 2);
if(playerid != 0 && playerid != 1)
......@@ -224,9 +238,8 @@ int32 scriptlib::group_select(lua_State *L) {
uint32 min = lua_tointeger(L, 3);
uint32 max = lua_tointeger(L, 4);
pduel->game_field->core.select_cards.clear();
for (auto it = pgroup->container.begin(); it != pgroup->container.end(); ++it) {
if((*it) != pexception)
pduel->game_field->core.select_cards.push_back(*it);
for (auto it = cset.begin(); it != cset.end(); ++it) {
pduel->game_field->core.select_cards.push_back(*it);
}
pduel->game_field->add_process(PROCESSOR_SELECT_CARD_S, 0, 0, 0, playerid, min + (max << 16));
return lua_yield(L, 0);
......@@ -244,19 +257,23 @@ int32 scriptlib::group_is_exists(lua_State *L) {
check_param_count(L, 4);
check_param(L, PARAM_TYPE_GROUP, 1);
check_param(L, PARAM_TYPE_FUNCTION, 2);
card* pcard = 0;
if(!lua_isnil(L, 4)) {
check_param(L, PARAM_TYPE_CARD, 4);
pcard = *(card**) lua_touserdata(L, 4);
}
group* pgroup = *(group**) lua_touserdata(L, 1);
field::card_set cset(pgroup->container);
if(check_param(L, PARAM_TYPE_CARD, 4, TRUE)) {
card* pexception = *(card**) lua_touserdata(L, 4);
cset.erase(pexception);
} else if(check_param(L, PARAM_TYPE_GROUP, 4, TRUE)) {
group* pexgroup = *(group**) lua_touserdata(L, 4);
for(auto cit = pexgroup->container.begin(); cit != pexgroup->container.end(); ++cit)
cset.erase(*cit);
}
duel* pduel = pgroup->pduel;
uint32 count = lua_tointeger(L, 3);
uint32 extraargs = lua_gettop(L) - 4;
uint32 fcount = 0;
uint32 result = FALSE;
for (auto it = pgroup->container.begin(); it != pgroup->container.end(); ++it) {
if((*it) != pcard && pduel->lua->check_matching(*it, 2, extraargs)) {
for (auto it = cset.begin(); it != cset.end(); ++it) {
if(pduel->lua->check_matching(*it, 2, extraargs)) {
fcount++;
if(fcount >= count) {
result = TRUE;
......
......@@ -3623,7 +3623,7 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
retgrave.insert(pcard);
raise_single_event(pcard, 0, EVENT_RETURN_TO_GRAVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
} else {
tograve.insert(pcard);
tograve.insert(pcard);
raise_single_event(pcard, 0, EVENT_TO_GRAVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
}
}
......@@ -5051,6 +5051,7 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
pduel->write_buffer8(count);
for(int32 i = 0; i < count; ++i) {
core.coin_result[i] = pduel->get_next_integer(0, 1);
core.tossed_coin_count[playerid]++;
pduel->write_buffer8(core.coin_result[i]);
}
raise_event((card*)0, EVENT_TOSS_COIN_NEGATE, reason_effect, 0, reason_player, playerid, count);
......@@ -5096,6 +5097,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
pduel->write_buffer8(count1);
for(int32 i = 0; i < count1; ++i) {
core.dice_result[i] = pduel->get_next_integer(1, 6);
core.tossed_dice_count[playerid]++;
pduel->write_buffer8(core.dice_result[i]);
}
if(count2 > 0) {
......@@ -5104,6 +5106,7 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
pduel->write_buffer8(count2);
for(int32 i = 0; i < count2; ++i) {
core.dice_result[count1 + i] = pduel->get_next_integer(1, 6);
core.tossed_dice_count[1 - playerid]++;
pduel->write_buffer8(core.dice_result[count1 + i]);
}
}
......
......@@ -1409,7 +1409,7 @@ int32 field::process_phase_event(int16 step, int32 phase) {
core.hint_timing[infos.turn_player] = TIMING_BATTLE_START;
else if(phase == PHASE_BATTLE)
core.hint_timing[infos.turn_player] = TIMING_BATTLE_END;
else
else
core.hint_timing[infos.turn_player] = TIMING_END_PHASE;
pr = effects.activate_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) {
......@@ -2720,7 +2720,7 @@ int32 field::process_idle_command(uint16 step) {
add_process(PROCESSOR_SELECT_POSITION, 0, 0, 0, infos.turn_player + (positions << 16), target->data.code);
core.units.begin()->step = 12;
return FALSE;
} else
} else
add_process(PROCESSOR_FLIP_SUMMON, 0, 0, (group*)target, target->current.controler, 0);
target->set_status(STATUS_FORM_CHANGED, TRUE);
core.units.begin()->step = -1;
......@@ -3126,7 +3126,7 @@ int32 field::process_battle_command(uint16 step) {
core.units.begin()->arg1 = 2;
if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE))
core.units.begin()->arg2 = 1;
else
else
core.units.begin()->arg2 = 0;
reset_phase(PHASE_DAMAGE);
if(core.attacker->fieldid_r == afid && !atk_disabled) {
......@@ -3643,7 +3643,7 @@ int32 field::process_battle_command(uint16 step) {
// normal end of battle step
if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE))
core.units.begin()->arg2 = 1;
else
else
core.units.begin()->arg2 = 0;
infos.phase = PHASE_BATTLE;
add_process(PROCESSOR_PHASE_EVENT, 0, 0, 0, PHASE_BATTLE, 0);
......@@ -3936,6 +3936,8 @@ int32 field::process_turn(uint16 step, uint8 turn_player) {
core.attack_state_count[p] = 0;
core.battle_phase_count[p] = 0;
core.battled_count[p] = 0;
core.tossed_coin_count[p] = 0;
core.tossed_dice_count[p] = 0;
core.summon_count[p] = 0;
core.extra_summon[p] = 0;
core.spsummon_once_map[p].clear();
......
......@@ -16,7 +16,7 @@ public:
static int32 check_param(lua_State* L, int32 param_type, int32 index, BOOL retfalse = FALSE);
static int32 check_param_count(lua_State* L, int32 count);
static int32 check_action_permission(lua_State* L);
//card lib
static int32 card_get_code(lua_State *L);
static int32 card_get_origin_code(lua_State *L);
......@@ -229,7 +229,7 @@ public:
static int32 card_reset_negate_effect(lua_State *L);
static int32 card_assume_prop(lua_State *L);
static int32 card_set_spsummon_once(lua_State *L);
//Effect functions
static int32 effect_new(lua_State *L);
static int32 effect_newex(lua_State *L);
......@@ -363,7 +363,7 @@ public:
static int32 duel_check_timing(lua_State *L);
static int32 duel_get_environment(lua_State *L);
static int32 duel_is_environment(lua_State *L);
static int32 duel_win(lua_State *L);
static int32 duel_draw(lua_State *L);
static int32 duel_damage(lua_State *L);
......@@ -412,7 +412,7 @@ public:
static int32 duel_chain_attack(lua_State *L);
static int32 duel_readjust(lua_State *L);
static int32 duel_adjust_instantly(lua_State *L);
static int32 duel_get_field_group(lua_State *L);
static int32 duel_get_field_group_count(lua_State *L);
static int32 duel_get_decktop_group(lua_State *L);
......@@ -459,7 +459,7 @@ public:
static int32 duel_get_overlay_count(lua_State *L);
static int32 duel_check_remove_overlay_card(lua_State *L);
static int32 duel_remove_overlay_card(lua_State *L);
static int32 duel_hint(lua_State *L);
static int32 duel_hint_selection(lua_State *L);
static int32 duel_select_effect_yesno(lua_State *L);
......@@ -482,7 +482,7 @@ public:
static int32 duel_get_dice_result(lua_State *L);
static int32 duel_set_coin_result(lua_State *L);
static int32 duel_set_dice_result(lua_State *L);
static int32 duel_is_player_affected_by_effect(lua_State *L);
static int32 duel_is_player_can_draw(lua_State *L);
static int32 duel_is_player_can_discard_deck(lua_State *L);
......@@ -507,12 +507,14 @@ public:
static int32 duel_get_custom_activity_count(lua_State *L);
static int32 duel_is_able_to_enter_bp(lua_State *L);
static int32 duel_get_battled_count(lua_State *L);
static int32 duel_get_tossed_coin_count(lua_State *L);
static int32 duel_get_tossed_dice_count(lua_State *L);
//specific card functions
static int32 duel_venom_swamp_check(lua_State *L);
static int32 duel_swap_deck_and_grave(lua_State *L);
static int32 duel_majestic_copy(lua_State *L);
//preload
static int32 debug_message(lua_State *L);
static int32 debug_add_card(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