Commit cb52dcb1 authored by VanillaSalt's avatar VanillaSalt

fix xmaterial_effect

parent 21824200
......@@ -1921,6 +1921,8 @@ void card::filter_effect(int32 code, effect_set* eset, uint8 sort) {
rg = (*cit)->xmaterial_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first) {
peffect = rg.first->second;
if (peffect->type & EFFECT_TYPE_FIELD)
continue;
if (peffect->is_available() && is_affect_by_effect(peffect))
eset->add_item(peffect);
}
......@@ -1957,8 +1959,12 @@ void card::filter_single_continuous_effect(int32 code, effect_set* eset, uint8 s
}
for (auto cit = xyz_materials.begin(); cit != xyz_materials.end(); ++cit) {
rg = (*cit)->xmaterial_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first)
eset->add_item(rg.first->second);
for (; rg.first != rg.second; ++rg.first) {
effect* peffect = rg.first->second;
if (peffect->type & EFFECT_TYPE_FIELD)
continue;
eset->add_item(peffect);
}
}
if(sort)
eset->sort();
......@@ -1985,6 +1991,8 @@ void card::filter_immune_effect() {
rg = (*cit)->xmaterial_effect.equal_range(EFFECT_IMMUNE_EFFECT);
for (; rg.first != rg.second; ++rg.first) {
peffect = rg.first->second;
if (peffect->type & EFFECT_TYPE_FIELD)
continue;
if (peffect->is_available())
immune_effect.add_item(peffect);
}
......@@ -2178,6 +2186,8 @@ effect* card::is_affected_by_effect(int32 code) {
rg = (*cit)->xmaterial_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first) {
peffect = rg.first->second;
if (peffect->type & EFFECT_TYPE_FIELD)
continue;
if (peffect->is_available() && is_affect_by_effect(peffect))
return peffect;
}
......@@ -2212,6 +2222,8 @@ effect* card::is_affected_by_effect(int32 code, card* target) {
rg = (*cit)->xmaterial_effect.equal_range(code);
for (; rg.first != rg.second; ++rg.first) {
peffect = rg.first->second;
if (peffect->type & EFFECT_TYPE_FIELD)
continue;
if (peffect->is_available() && is_affect_by_effect(peffect) && peffect->get_value(target))
return peffect;
}
......@@ -2239,6 +2251,8 @@ effect* card::check_control_effect() {
auto rg = (*cit)->xmaterial_effect.equal_range(EFFECT_SET_CONTROL);
for (; rg.first != rg.second; ++rg.first) {
effect* peffect = rg.first->second;
if (peffect->type & EFFECT_TYPE_FIELD)
continue;
if(!ret_effect || peffect->id > ret_effect->id)
ret_effect = peffect;
}
......
......@@ -423,7 +423,7 @@ int32 effect::is_activate_check(uint8 playerid, const tevent& e, int32 neglect_c
int32 effect::is_target(card* pcard) {
if(type & EFFECT_TYPE_ACTIONS)
return FALSE;
if(type & (EFFECT_TYPE_SINGLE | EFFECT_TYPE_EQUIP | EFFECT_TYPE_XMATERIAL))
if(type & (EFFECT_TYPE_SINGLE | EFFECT_TYPE_EQUIP | EFFECT_TYPE_XMATERIAL) && !(type & EFFECT_TYPE_FIELD))
return TRUE;
if(pcard && !is_flag(EFFECT_FLAG_SET_AVAILABLE) && (pcard->current.location & LOCATION_ONFIELD)
&& !pcard->is_position(POS_FACEUP))
......@@ -680,7 +680,7 @@ uint8 effect::get_handler_player() {
}
int32 effect::in_range(int32 loc, int32 seq) {
if(type & EFFECT_TYPE_XMATERIAL)
return (int32)(!!handler->overlay_target);
return handler->overlay_target ? TRUE : FALSE;
if(loc != LOCATION_SZONE)
return range & loc;
if(seq < 5)
......
......@@ -1187,7 +1187,6 @@ int32 scriptlib::duel_shuffle_setcard(lua_State *L) {
uint8 seq[5];
uint8 tp = 2;
uint8 ct = 0;
card* pcard = 0;
for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
card* pcard = *cit;
if(pcard->current.location != LOCATION_MZONE || (pcard->current.position & POS_FACEUP) || (tp != 2 && (pcard->current.controler != tp)))
......
......@@ -5133,9 +5133,8 @@ int32 field::adjust_step(uint16 step) {
core.control_adjust_set[0].clear();
core.control_adjust_set[1].clear();
effect_set eset;
uint32 res = 0;
filter_field_effect(EFFECT_REMOVE_BRAINWASHING, &eset, FALSE);
res = eset.size() ? TRUE : FALSE;
uint32 res = eset.size() ? TRUE : FALSE;
if(res) {
for(uint8 p = 0; p < 2; ++p) {
for(uint8 i = 0; i < 5; ++i) {
......
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