Commit bae4dae8 authored by nanahira's avatar nanahira

Merge branch 'koishibuild' of https://github.com/purerosefallen/ygopro-7210srv into koishibuild

parents ee1cac72 5f2feb70
version: '{build}'
skip_tags: true
install:
- git submodule update --init --recursive
......@@ -56,9 +55,14 @@ after_build:
- mv -f irrklang\bin\win32-visualStudio\irrKlang.dll .
- mv -f irrklang\bin\win32-visualStudio\ikpMP3.dll .
- bash -c "curl --retry 5 --connect-timeout 30 --location --remote-header-name --remote-name https://github.com/Fluorohydride/ygopro-scripts/archive/master.zip ; exit 0"
- bash -c "curl --retry 5 --connect-timeout 30 --location --remote-header-name --remote-name https://github.com/Smile-DK/ygopro-scripts/archive/master.zip ; exit 0"
- 7z x ygopro-scripts-master.zip
- mv -f ygopro-scripts-master script
- rm -rf ygopro-scripts-master.zip
- bash -c "curl --retry 5 --connect-timeout 30 --location --remote-header-name --remote-name https://github.com/Fluorohydride/ygopro-scripts/archive/master.zip ; exit 0"
- 7z x ygopro-scripts-master.zip
- cp -rf ygopro-scripts-master/*.lua script
- bash -c "curl --retry 5 --connect-timeout 30 --location --remote-header-name --remote-name https://github.com/HuangYuNan/ygopro222-images/archive/master.zip ; exit 0"
- 7z x ygopro222-images-master.zip
......
......@@ -28,7 +28,10 @@ int32 field::select_battle_command(uint16 step, uint8 playerid) {
for(i = 0; i < core.select_chains.size(); ++i) {
peffect = core.select_chains[i].triggering_effect;
pcard = peffect->get_handler();
pduel->write_buffer32(pcard->data.code);
if(!peffect->is_flag(EFFECT_FLAG_FIELD_ONLY))
pduel->write_buffer32(pcard->data.code);
else
pduel->write_buffer32(pcard->data.code | 0x80000000);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->current.sequence);
......@@ -126,7 +129,10 @@ int32 field::select_idle_command(uint16 step, uint8 playerid) {
for(i = 0; i < core.select_chains.size(); ++i) {
peffect = core.select_chains[i].triggering_effect;
pcard = peffect->get_handler();
pduel->write_buffer32(pcard->data.code);
if(!peffect->is_flag(EFFECT_FLAG_FIELD_ONLY))
pduel->write_buffer32(pcard->data.code);
else
pduel->write_buffer32(pcard->data.code | 0x80000000);
pduel->write_buffer8(pcard->current.controler);
pduel->write_buffer8(pcard->current.location);
pduel->write_buffer8(pcard->current.sequence);
......
......@@ -1371,9 +1371,8 @@ int32 field::process_phase_event(int16 step, int32 phase) {
tf_count++;
}
pr = effects.continuous_effect.equal_range(phase_event);
for(; pr.first != pr.second;) {
for(; pr.first != pr.second; ++pr.first) {
peffect = pr.first->second;
++pr.first;
if(peffect->get_handler_player() != check_player || !peffect->is_activateable(check_player, nil_event))
continue;
peffect->id = infos.field_id++;
......@@ -1457,6 +1456,16 @@ int32 field::process_phase_event(int16 step, int32 phase) {
core.select_chains.push_back(newchain);
fc_count++;
}
pr = effects.continuous_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) {
peffect = pr.first->second;
if(peffect->get_handler_player() != check_player || !peffect->is_activateable(check_player, nil_event))
continue;
peffect->id = infos.field_id++;
newchain.triggering_effect = peffect;
core.select_chains.push_back(newchain);
fc_count++;
}
}
if(core.select_chains.size() == 0) {
returns.ivalue[0] = -1;
......@@ -1967,6 +1976,70 @@ int32 field::process_point_event(int16 step, int32 skip_trigger, int32 skip_free
core.units.begin()->step = 4;
return FALSE;
}
case 30: {
int32 check_player = infos.turn_player;
nil_event.event_code = EVENT_FREE_CHAIN;
chain newchain;
core.select_chains.clear();
core.spe_effect[check_player] = 0;
auto pr = effects.continuous_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) {
effect* peffect = pr.first->second;
newchain.triggering_effect = peffect;
if(peffect->get_handler_player() == check_player && peffect->is_activateable(check_player, nil_event)) {
core.select_chains.push_back(newchain);
core.spe_effect[check_player]++;
}
}
if(!core.select_chains.empty())
add_process(PROCESSOR_SELECT_CHAIN, 0, 0, 0, check_player, core.spe_effect[check_player]);
else
core.units.begin()->step = 31;
return FALSE;
}
case 31: {
if(returns.ivalue[0] == -1)
return FALSE;
const chain& newchain = core.select_chains[returns.ivalue[0]];
effect* peffect = newchain.triggering_effect;
core.select_chains.clear();
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, peffect, 0, peffect->get_handler_player(), 0);
core.units.begin()->step = 29;
return FALSE;
}
case 32: {
int32 check_player = 1 - infos.turn_player;
nil_event.event_code = EVENT_FREE_CHAIN;
chain newchain;
core.select_chains.clear();
core.spe_effect[check_player] = 0;
auto pr = effects.continuous_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) {
effect* peffect = pr.first->second;
newchain.triggering_effect = peffect;
if(peffect->get_handler_player() == check_player && peffect->is_activateable(check_player, nil_event)) {
core.select_chains.push_back(newchain);
core.spe_effect[check_player]++;
}
}
if(!core.select_chains.empty())
add_process(PROCESSOR_SELECT_CHAIN, 0, 0, 0, check_player, core.spe_effect[check_player]);
else
core.units.begin()->step = -1;
return FALSE;
}
case 33: {
if(returns.ivalue[0] == -1)
return FALSE;
const chain& newchain = core.select_chains[returns.ivalue[0]];
effect* peffect = newchain.triggering_effect;
core.select_chains.clear();
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, peffect, 0, peffect->get_handler_player(), 0);
core.units.begin()->step = 31;
return FALSE;
}
}
return TRUE;
}
......@@ -2518,6 +2591,13 @@ int32 field::process_idle_command(uint16 step) {
if(peffect->is_activateable(infos.turn_player, nil_event))
core.select_chains.push_back(newchain);
}
pr = effects.continuous_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) {
peffect = pr.first->second;
newchain.triggering_effect = peffect;
if(peffect->get_handler_player() == infos.turn_player && peffect->is_activateable(infos.turn_player, nil_event))
core.select_chains.push_back(newchain);
}
for(auto eit = effects.ignition_effect.begin(); eit != effects.ignition_effect.end(); ++eit) {
peffect = eit->second;
peffect->set_activate_location();
......@@ -2589,6 +2669,13 @@ int32 field::process_idle_command(uint16 step) {
if(ctype == 5) {
chain newchain = core.select_chains[sel];
effect* peffect = newchain.triggering_effect;
if(peffect->type & EFFECT_TYPE_CONTINUOUS) {
core.select_chains.clear();
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, peffect, 0, peffect->get_handler_player(), 0);
core.units.begin()->step = -1;
return FALSE;
}
card* phandler = peffect->get_handler();
newchain.flag = 0;
newchain.chain_id = infos.field_id++;
......@@ -2807,6 +2894,13 @@ int32 field::process_battle_command(uint16 step) {
if(peffect->is_activateable(infos.turn_player, nil_event))
core.select_chains.push_back(newchain);
}
pr = effects.continuous_effect.equal_range(EVENT_FREE_CHAIN);
for(; pr.first != pr.second; ++pr.first) {
peffect = pr.first->second;
newchain.triggering_effect = peffect;
if(peffect->get_handler_player() == infos.turn_player && peffect->is_activateable(infos.turn_player, nil_event))
core.select_chains.push_back(newchain);
}
core.attackable_cards.clear();
card_vector first_attack;
card_vector must_attack;
......@@ -2849,6 +2943,13 @@ int32 field::process_battle_command(uint16 step) {
if(ctype == 0) {
chain newchain = core.select_chains[sel];
effect* peffect = newchain.triggering_effect;
if(peffect->type & EFFECT_TYPE_CONTINUOUS) {
core.select_chains.clear();
core.sub_solving_event.push_back(nil_event);
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, peffect, 0, peffect->get_handler_player(), 0);
core.units.begin()->step = -1;
return FALSE;
}
card* phandler = peffect->get_handler();
newchain.flag = 0;
newchain.chain_id = infos.field_id++;
......@@ -3081,7 +3182,7 @@ int32 field::process_battle_command(uint16 step) {
pduel->write_buffer32(24);
core.hint_timing[0] = TIMING_BATTLE_PHASE;
core.hint_timing[1] = TIMING_BATTLE_PHASE;
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0, 0);
add_process(PROCESSOR_POINT_EVENT, 30, 0, 0, 0, 0);
return FALSE;
}
case 10: {
......
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