Commit ac0471ae authored by VanillaSalt's avatar VanillaSalt

update

parent 8ecee326
...@@ -1492,11 +1492,13 @@ int32 scriptlib::duel_get_location_count(lua_State *L) { ...@@ -1492,11 +1492,13 @@ int32 scriptlib::duel_get_location_count(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
uint32 uplayer = pduel->game_field->core.reason_player; uint32 uplayer = pduel->game_field->core.reason_player;
uint32 reason = LOCATION_REASON_TOFIELD; uint32 reason = LOCATION_REASON_TOFIELD;
if(lua_gettop(L) > 2) if(lua_gettop(L) >= 3)
uplayer = lua_tointeger(L, 3); uplayer = lua_tointeger(L, 3);
if(lua_gettop(L) > 3) if(lua_gettop(L) >= 4)
reason = lua_tointeger(L, 4); reason = lua_tointeger(L, 4);
uint32 zone = 0xff; uint32 zone = 0xff;
if(lua_gettop(L) >= 5)
zone = lua_tointeger(L, 5);
lua_pushinteger(L, pduel->game_field->get_useable_count(playerid, location, uplayer, reason, zone)); lua_pushinteger(L, pduel->game_field->get_useable_count(playerid, location, uplayer, reason, zone));
return 1; return 1;
} }
...@@ -1512,8 +1514,8 @@ int32 scriptlib::duel_get_location_count_fromex(lua_State *L) { ...@@ -1512,8 +1514,8 @@ int32 scriptlib::duel_get_location_count_fromex(lua_State *L) {
bool swapped = false; bool swapped = false;
card* mcard = 0; card* mcard = 0;
group* mgroup = 0; group* mgroup = 0;
uint32 used_location = 0; uint32 used_location[2] = {0, 0};
player_info::card_vector list_mzone; player_info::card_vector list_mzone[2];
if(lua_gettop(L) >= 3 && !lua_isnil(L, 3)) { if(lua_gettop(L) >= 3 && !lua_isnil(L, 3)) {
if(check_param(L, PARAM_TYPE_CARD, 3, TRUE)) { if(check_param(L, PARAM_TYPE_CARD, 3, TRUE)) {
mcard = *(card**) lua_touserdata(L, 3); mcard = *(card**) lua_touserdata(L, 3);
...@@ -1521,19 +1523,21 @@ int32 scriptlib::duel_get_location_count_fromex(lua_State *L) { ...@@ -1521,19 +1523,21 @@ int32 scriptlib::duel_get_location_count_fromex(lua_State *L) {
mgroup = *(group**) lua_touserdata(L, 3); mgroup = *(group**) lua_touserdata(L, 3);
} else } else
luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 3); luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 3);
for(int32 p = 0; p < 2; p++) {
uint32 digit = 1; uint32 digit = 1;
for(auto cit = pduel->game_field->player[playerid].list_mzone.begin(); cit != pduel->game_field->player[playerid].list_mzone.end(); ++cit) { for(auto cit = pduel->game_field->player[p].list_mzone.begin(); cit != pduel->game_field->player[p].list_mzone.end(); ++cit) {
card* pcard = *cit; card* pcard = *cit;
if(pcard && pcard != mcard && !(mgroup && mgroup->container.find(pcard) != mgroup->container.end())) { if(pcard && pcard != mcard && !(mgroup && mgroup->container.find(pcard) != mgroup->container.end())) {
used_location |= digit; used_location[p] |= digit;
list_mzone.push_back(pcard); list_mzone[p].push_back(pcard);
} else } else
list_mzone.push_back(0); list_mzone[p].push_back(0);
digit <<= 1; digit <<= 1;
} }
used_location |= pduel->game_field->player[playerid].used_location & 0xff00; used_location[p] |= pduel->game_field->player[p].used_location & 0xff00;
std::swap(used_location, pduel->game_field->player[playerid].used_location); std::swap(used_location[p], pduel->game_field->player[p].used_location);
pduel->game_field->player[playerid].list_mzone.swap(list_mzone); pduel->game_field->player[p].list_mzone.swap(list_mzone[p]);
}
swapped = true; swapped = true;
} }
card* scard = 0; card* scard = 0;
...@@ -1547,8 +1551,10 @@ int32 scriptlib::duel_get_location_count_fromex(lua_State *L) { ...@@ -1547,8 +1551,10 @@ int32 scriptlib::duel_get_location_count_fromex(lua_State *L) {
else else
lua_pushinteger(L, pduel->game_field->get_useable_count(playerid, LOCATION_MZONE, uplayer, LOCATION_REASON_TOFIELD, zone)); lua_pushinteger(L, pduel->game_field->get_useable_count(playerid, LOCATION_MZONE, uplayer, LOCATION_REASON_TOFIELD, zone));
if(swapped) { if(swapped) {
pduel->game_field->player[playerid].used_location = used_location; pduel->game_field->player[0].used_location = used_location[0];
pduel->game_field->player[playerid].list_mzone.swap(list_mzone); pduel->game_field->player[1].used_location = used_location[1];
pduel->game_field->player[0].list_mzone.swap(list_mzone[0]);
pduel->game_field->player[1].list_mzone.swap(list_mzone[1]);
} }
return 1; return 1;
} }
......
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