Commit 72e05741 authored by nanahira's avatar nanahira

Merge branch 'develop-8888' of github.com:moecube/ygopro-core into develop

parents b5c28d27 d07479aa
...@@ -4189,14 +4189,6 @@ int32_t card::is_can_be_fusion_material(card* fcard, uint32_t summon_type) { ...@@ -4189,14 +4189,6 @@ int32_t card::is_can_be_fusion_material(card* fcard, uint32_t summon_type) {
if(eset[i]->get_value(fcard, 1)) if(eset[i]->get_value(fcard, 1))
return FALSE; return FALSE;
} }
eset.clear();
filter_effect(EFFECT_EXTRA_FUSION_MATERIAL, &eset);
if(eset.size()) {
for(effect_set::size_type i = 0; i < eset.size(); ++i)
if(eset[i]->get_value(fcard))
return TRUE;
return FALSE;
}
return TRUE; return TRUE;
} }
int32_t card::is_can_be_synchro_material(card* scard, card* tuner) { int32_t card::is_can_be_synchro_material(card* scard, card* tuner) {
......
...@@ -1944,14 +1944,26 @@ void field::get_fusion_material(uint8_t playerid, card_set* material_all, card_s ...@@ -1944,14 +1944,26 @@ void field::get_fusion_material(uint8_t playerid, card_set* material_all, card_s
material_base->insert(pcard); material_base->insert(pcard);
} }
} }
// Fullmetalfoes Alkahest etc
for(auto& pcard : player[playerid].list_szone) { for(auto& pcard : player[playerid].list_szone) {
if(pcard && pcard->is_affected_by_effect(EFFECT_EXTRA_FUSION_MATERIAL)) if(pcard && pcard->is_affected_by_effect(EFFECT_EXTRA_FUSION_MATERIAL))
material_all->insert(pcard); material_all->insert(pcard);
} }
// Lunalight Masquerade etc
for(auto& pcard : player[playerid].list_grave) { for(auto& pcard : player[playerid].list_grave) {
if(pcard->is_affected_by_effect(EFFECT_EXTRA_FUSION_MATERIAL)) if(pcard->is_affected_by_effect(EFFECT_EXTRA_FUSION_MATERIAL))
material_all->insert(pcard); material_all->insert(pcard);
} }
// Curse of the Shadow Prison
for (auto& pcard : player[1-playerid].list_mzone) {
if (pcard && pcard->is_affected_by_effect(EFFECT_EXTRA_FUSION_MATERIAL))
material_all->insert(pcard);
}
// Amazoness Secret Arts
for (auto& pcard : player[playerid].list_extra) {
if (pcard->is_affected_by_effect(EFFECT_EXTRA_FUSION_MATERIAL))
material_all->insert(pcard);
}
material_all->insert(material_base->begin(), material_base->end()); material_all->insert(material_base->begin(), material_base->end());
} }
void field::ritual_release(const card_set& material) { void field::ritual_release(const card_set& material) {
......
...@@ -368,12 +368,12 @@ int32_t scriptlib::group_random_select(lua_State *L) { ...@@ -368,12 +368,12 @@ int32_t scriptlib::group_random_select(lua_State *L) {
check_param(L, PARAM_TYPE_GROUP, 1); check_param(L, PARAM_TYPE_GROUP, 1);
group* pgroup = *(group**) lua_touserdata(L, 1); group* pgroup = *(group**) lua_touserdata(L, 1);
int32_t playerid = (int32_t)lua_tointeger(L, 2); int32_t playerid = (int32_t)lua_tointeger(L, 2);
uint32_t count = (uint32_t)lua_tointeger(L, 3); int32_t count = (int32_t)lua_tointeger(L, 3);
int32_t no_hint = lua_toboolean(L, 4); int32_t no_hint = lua_toboolean(L, 4);
duel* pduel = pgroup->pduel; duel* pduel = pgroup->pduel;
group* newgroup = pduel->new_group(); group* newgroup = pduel->new_group();
if(count > pgroup->container.size()) if (count > (int32_t)pgroup->container.size())
count = (uint32_t)pgroup->container.size(); count = (int32_t)pgroup->container.size();
if(count == 0) { if(count == 0) {
interpreter::group2value(L, newgroup); interpreter::group2value(L, newgroup);
return 1; return 1;
...@@ -381,12 +381,13 @@ int32_t scriptlib::group_random_select(lua_State *L) { ...@@ -381,12 +381,13 @@ int32_t scriptlib::group_random_select(lua_State *L) {
if(count == pgroup->container.size()) if(count == pgroup->container.size())
newgroup->container = pgroup->container; newgroup->container = pgroup->container;
else { else {
while(newgroup->container.size() < count) { card_vector cv(pgroup->container.begin(), pgroup->container.end());
int32_t i = pduel->get_next_integer(0, (int32_t)pgroup->container.size() - 1); int32_t back = (int32_t)cv.size() - 1;
auto cit = pgroup->container.begin(); for (int32_t i = 0; i < count; ++i) {
std::advance(cit, i); int32_t r = pduel->get_next_integer(i, back);
newgroup->container.insert(*cit); std::swap(cv[i], cv[r]);
} }
newgroup->container.insert(cv.begin(), cv.begin() + count);
} }
if(no_hint) { if(no_hint) {
interpreter::group2value(L, newgroup); interpreter::group2value(L, newgroup);
......
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