Commit e362886c authored by nanahira's avatar nanahira

Merge branch 'patch-allow-synchro' into develop

parents 8245a7b7 dc2a6c41
...@@ -1066,47 +1066,29 @@ uint32_t card::get_link() { ...@@ -1066,47 +1066,29 @@ uint32_t card::get_link() {
return 0; return 0;
return data.level; return data.level;
} }
uint32_t card::get_synchro_level(card* pcard) {
if((data.type & (TYPE_XYZ | TYPE_LINK)) || (status & STATUS_NO_LEVEL)) uint32_t get_mat_level_from_effect(card* pcard, uint32_t effect_code) {
{ if(!effect_code)
uint32_t lev; return 0;
effect_set eset;
filter_effect(EFFECT_ALLOW_SYNCHRO_KOISHI, &eset);
if(eset.size())
lev = eset[0]->get_value(pcard);
else
lev = 0;
return lev;
}
//return 0;
uint32_t lev;
effect_set eset; effect_set eset;
filter_effect(EFFECT_SYNCHRO_LEVEL, &eset); pduel->game_field->filter_effect(effect_code, &eset);
if(eset.size()) for(int32_t i = 0; i < eset.size(); ++i) {
lev = eset[0]->get_value(pcard); uint32_t lev = eset[i]->get_value(pcard);
else if(lev)
lev = get_level(); return lev;
return lev;
}
uint32_t card::get_ritual_level(card* pcard) {
effect_set eset_g;
filter_effect(EFFECT_MINIATURE_GARDEN_GIRL, &eset_g);
for(int32_t i = 0; i < eset_g.size(); ++i) {
pduel->lua->add_param(eset_g[i], PARAM_TYPE_EFFECT);
pduel->lua->add_param(pcard, PARAM_TYPE_CARD);
if(pduel->lua->check_condition(eset_g[i]->target, 2))
return pcard->get_level();
} }
return 0;
}
uint32_t card::get_mat_level(card* pcard, uint32_t level_effect_code, uint32_t allow_effect_code) {
if((data.type & (TYPE_XYZ | TYPE_LINK)) || (status & STATUS_NO_LEVEL)) if((data.type & (TYPE_XYZ | TYPE_LINK)) || (status & STATUS_NO_LEVEL))
return 0; return get_mat_level_from_effect(pcard, allow_effect_code);
uint32_t lev; return get_mat_level_from_effect(pcard, level_effect_code) || get_level();
effect_set eset; }
filter_effect(EFFECT_RITUAL_LEVEL, &eset); uint32_t card::get_synchro_level(card* pcard) {
if(eset.size()) return get_mat_level(pcard, EFFECT_SYNCHRO_LEVEL, EFFECT_ALLOW_FOR_SYNCHRO);
lev = eset[0]->get_value(pcard); }
else uint32_t card::get_ritual_level(card* pcard) {
lev = get_level(); return get_mat_level(pcard, EFFECT_RITUAL_LEVEL, EFFECT_ALLOW_FOR_RITUAL);
return lev;
} }
uint32_t card::check_xyz_level(card* pcard, uint32_t lv) { uint32_t card::check_xyz_level(card* pcard, uint32_t lv) {
if(status & STATUS_NO_LEVEL) if(status & STATUS_NO_LEVEL)
...@@ -4216,8 +4198,7 @@ int32_t card::is_can_be_fusion_material(card* fcard, uint32_t summon_type) { ...@@ -4216,8 +4198,7 @@ int32_t card::is_can_be_fusion_material(card* fcard, uint32_t summon_type) {
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) {
//support urara if((data.type & (TYPE_XYZ | TYPE_LINK)) && !get_synchro_level(scard))
if(data.type & (TYPE_XYZ | TYPE_LINK) && !is_affected_by_effect(EFFECT_ALLOW_SYNCHRO_KOISHI))
return FALSE; return FALSE;
if(!(get_synchro_type() & TYPE_MONSTER)) if(!(get_synchro_type() & TYPE_MONSTER))
return FALSE; return FALSE;
......
...@@ -253,6 +253,8 @@ public: ...@@ -253,6 +253,8 @@ public:
uint32_t get_level(); uint32_t get_level();
uint32_t get_rank(); uint32_t get_rank();
uint32_t get_link(); uint32_t get_link();
uint32_t get_mat_level_from_effect(card* pcard, uint32_t effect_code);
uint32_t get_mat_level(card* pcard, uint32_t level_effect_code, uint32_t allow_effect_code = 0);
uint32_t get_synchro_level(card* pcard); uint32_t get_synchro_level(card* pcard);
uint32_t get_ritual_level(card* pcard); uint32_t get_ritual_level(card* pcard);
uint32_t check_xyz_level(card* pcard, uint32_t lv); uint32_t check_xyz_level(card* pcard, uint32_t lv);
......
...@@ -133,14 +133,11 @@ public: ...@@ -133,14 +133,11 @@ public:
#define EFFECT_CANNOT_LOSE_KOISHI 37564153 #define EFFECT_CANNOT_LOSE_KOISHI 37564153
#define EFFECT_EXTRA_TOMAIN_KOISHI 37564154 #define EFFECT_EXTRA_TOMAIN_KOISHI 37564154
#define EFFECT_OVERLAY_REMOVE_COST_CHANGE_KOISHI 37564155 #define EFFECT_OVERLAY_REMOVE_COST_CHANGE_KOISHI 37564155
#define EFFECT_ALLOW_SYNCHRO_KOISHI 37564156
#define EFFECT_MINIATURE_GARDEN_GIRL 37564157
#define EFFECT_ADD_SUMMON_TYPE_KOISHI 37564158 #define EFFECT_ADD_SUMMON_TYPE_KOISHI 37564158
#define EFFECT_REMOVE_SUMMON_TYPE_KOISHI 37564159 #define EFFECT_REMOVE_SUMMON_TYPE_KOISHI 37564159
#define EFFECT_CHANGE_SUMMON_TYPE_KOISHI 37564160 #define EFFECT_CHANGE_SUMMON_TYPE_KOISHI 37564160
#define EFFECT_CHANGE_SUMMON_LOCATION_KOISHI 37564161 #define EFFECT_CHANGE_SUMMON_LOCATION_KOISHI 37564161
#define EFFECT_LINK_SPELL_KOISHI 37564162 #define EFFECT_LINK_SPELL_KOISHI 37564162
#define EFFECT_SEA_PULSE 37564163
#define EFFECT_MAP_OF_HEAVEN 77702007 #define EFFECT_MAP_OF_HEAVEN 77702007
//status //status
...@@ -550,6 +547,8 @@ const std::map<uint64_t, uint64_t> category_checklist{ ...@@ -550,6 +547,8 @@ const std::map<uint64_t, uint64_t> category_checklist{
#define EFFECT_KAISER_COLOSSEUM 370 #define EFFECT_KAISER_COLOSSEUM 370
#define EFFECT_REPLACE_DAMAGE 371 #define EFFECT_REPLACE_DAMAGE 371
#define EFFECT_XYZ_MIN_COUNT 372 #define EFFECT_XYZ_MIN_COUNT 372
#define EFFECT_ALLOW_FOR_SYNCHRO 373
#define EFFECT_ALLOW_FOR_RITUAL 374
//#define EVENT_STARTUP 1000 //#define EVENT_STARTUP 1000
#define EVENT_FLIP 1001 #define EVENT_FLIP 1001
......
...@@ -1868,11 +1868,11 @@ void field::get_ritual_material(uint8_t playerid, effect* peffect, card_set* mat ...@@ -1868,11 +1868,11 @@ void field::get_ritual_material(uint8_t playerid, effect* peffect, card_set* mat
for(auto& pcard : player[playerid].list_mzone) { for(auto& pcard : player[playerid].list_mzone) {
if(pcard && pcard->is_affect_by_effect(peffect) if(pcard && pcard->is_affect_by_effect(peffect)
&& pcard->is_releasable_by_nonsummon(playerid, REASON_EFFECT) && pcard->is_releasable_by_effect(playerid, peffect) && pcard->is_releasable_by_nonsummon(playerid, REASON_EFFECT) && pcard->is_releasable_by_effect(playerid, peffect)
&& (no_level || pcard->get_level() > 0 || pcard->is_affected_by_effect(EFFECT_MINIATURE_GARDEN_GIRL))) && (no_level || pcard->get_level() > 0 || pcard->is_affected_by_effect(EFFECT_ALLOW_FOR_RITUAL)))
material->insert(pcard); material->insert(pcard);
if(pcard && pcard->is_affected_by_effect(EFFECT_OVERLAY_RITUAL_MATERIAL)) if(pcard && pcard->is_affected_by_effect(EFFECT_OVERLAY_RITUAL_MATERIAL))
for(auto& mcard : pcard->xyz_materials) for(auto& mcard : pcard->xyz_materials)
if (no_level || mcard->get_level() > 0) if (no_level || mcard->get_level() > 0 || pcard->is_affected_by_effect(EFFECT_ALLOW_FOR_RITUAL))
material->insert(mcard); material->insert(mcard);
} }
for(auto& pcard : player[1 - playerid].list_mzone) { for(auto& pcard : player[1 - playerid].list_mzone) {
...@@ -1888,11 +1888,11 @@ void field::get_ritual_material(uint8_t playerid, effect* peffect, card_set* mat ...@@ -1888,11 +1888,11 @@ void field::get_ritual_material(uint8_t playerid, effect* peffect, card_set* mat
for(auto& pcard : player[playerid].list_grave) for(auto& pcard : player[playerid].list_grave)
if((pcard->data.type & TYPE_MONSTER) if((pcard->data.type & TYPE_MONSTER)
&& pcard->is_affected_by_effect(EFFECT_EXTRA_RITUAL_MATERIAL) && pcard->is_removeable(playerid, POS_FACEUP, REASON_EFFECT) && pcard->is_affected_by_effect(EFFECT_EXTRA_RITUAL_MATERIAL) && pcard->is_removeable(playerid, POS_FACEUP, REASON_EFFECT)
&& (no_level || pcard->get_level() > 0)) && (no_level || pcard->get_level() > 0 || pcard->is_affected_by_effect(EFFECT_ALLOW_FOR_RITUAL)))
material->insert(pcard); material->insert(pcard);
for(auto& pcard : player[playerid].list_extra) for(auto& pcard : player[playerid].list_extra)
if(((pcard->is_affected_by_effect(EFFECT_EXTRA_RITUAL_MATERIAL) || pcard->data.type & TYPE_MONSTER) && pcard->is_affected_by_effect(EFFECT_MAP_OF_HEAVEN) && pcard->is_capable_send_to_grave(playerid)) if(((pcard->is_affected_by_effect(EFFECT_EXTRA_RITUAL_MATERIAL) || pcard->data.type & TYPE_MONSTER) && pcard->is_affected_by_effect(EFFECT_MAP_OF_HEAVEN) && pcard->is_capable_send_to_grave(playerid))
&& (no_level || pcard->get_level() > 0)) && (no_level || pcard->get_level() > 0 || pcard->is_affected_by_effect(EFFECT_ALLOW_FOR_RITUAL)))
material->insert(pcard); material->insert(pcard);
} }
void field::get_fusion_material(uint8_t playerid, card_set* material_all, card_set* material_base, uint32_t location) { void field::get_fusion_material(uint8_t playerid, card_set* material_all, card_set* material_base, uint32_t location) {
......
...@@ -99,10 +99,10 @@ interpreter::interpreter(duel* pd): coroutines(256) { ...@@ -99,10 +99,10 @@ interpreter::interpreter(duel* pd): coroutines(256) {
lua_setglobal(lua_state, "EFFECT_EXTRA_TOMAIN_KOISHI"); lua_setglobal(lua_state, "EFFECT_EXTRA_TOMAIN_KOISHI");
lua_pushinteger(lua_state, EFFECT_OVERLAY_REMOVE_COST_CHANGE_KOISHI); lua_pushinteger(lua_state, EFFECT_OVERLAY_REMOVE_COST_CHANGE_KOISHI);
lua_setglobal(lua_state, "EFFECT_OVERLAY_REMOVE_COST_CHANGE_KOISHI"); lua_setglobal(lua_state, "EFFECT_OVERLAY_REMOVE_COST_CHANGE_KOISHI");
lua_pushinteger(lua_state, EFFECT_ALLOW_SYNCHRO_KOISHI); lua_pushinteger(lua_state, EFFECT_ALLOW_FOR_SYNCHRO);
lua_setglobal(lua_state, "EFFECT_ALLOW_SYNCHRO_KOISHI"); lua_setglobal(lua_state, "EFFECT_ALLOW_SYNCHRO_KOISHI"); // for compat only
lua_pushinteger(lua_state, EFFECT_MINIATURE_GARDEN_GIRL); // lua_pushinteger(lua_state, EFFECT_MINIATURE_GARDEN_GIRL);
lua_setglobal(lua_state, "EFFECT_MINIATURE_GARDEN_GIRL"); // lua_setglobal(lua_state, "EFFECT_MINIATURE_GARDEN_GIRL");
lua_pushinteger(lua_state, EFFECT_ADD_SUMMON_TYPE_KOISHI); lua_pushinteger(lua_state, EFFECT_ADD_SUMMON_TYPE_KOISHI);
lua_setglobal(lua_state, "EFFECT_ADD_SUMMON_TYPE_KOISHI"); lua_setglobal(lua_state, "EFFECT_ADD_SUMMON_TYPE_KOISHI");
lua_pushinteger(lua_state, EFFECT_REMOVE_SUMMON_TYPE_KOISHI); lua_pushinteger(lua_state, EFFECT_REMOVE_SUMMON_TYPE_KOISHI);
......
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