Commit d5accce9 authored by Chen Bill's avatar Chen Bill

update PROCESSOR_SELECT_SYNCHRO

parent 26b4ce92
...@@ -150,12 +150,14 @@ struct processor_unit { ...@@ -150,12 +150,14 @@ struct processor_unit {
uint32 arg2{ 0 }; uint32 arg2{ 0 };
uint32 arg3{ 0 }; uint32 arg3{ 0 };
uint32 arg4{ 0 }; uint32 arg4{ 0 };
void* ptr1{ nullptr };
void* ptr2{ nullptr };
int32 value1{ 0 }; int32 value1{ 0 };
int32 value2{ 0 }; int32 value2{ 0 };
int32 value3{ 0 }; int32 value3{ 0 };
int32 value4{ 0 }; int32 value4{ 0 };
void* ptr1{ nullptr };
void* ptr2{ nullptr };
void* ptr3{ nullptr };
void* ptr4{ nullptr };
}; };
constexpr int SIZE_SVALUE = SIZE_RETURN_VALUE / 2; constexpr int SIZE_SVALUE = SIZE_RETURN_VALUE / 2;
constexpr int SIZE_IVALUE = SIZE_RETURN_VALUE / 4; constexpr int SIZE_IVALUE = SIZE_RETURN_VALUE / 4;
......
...@@ -3220,10 +3220,10 @@ int32 scriptlib::duel_select_synchro_material(lua_State *L) { ...@@ -3220,10 +3220,10 @@ int32 scriptlib::duel_select_synchro_material(lua_State *L) {
check_param(L, PARAM_TYPE_GROUP, 8); check_param(L, PARAM_TYPE_GROUP, 8);
mg = *(group**) lua_touserdata(L, 8); mg = *(group**) lua_touserdata(L, 8);
} }
if(mg) if (mg)
pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 0, (effect*)mg, (group*)pcard, playerid, min + (max << 16)); pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 0, nullptr, nullptr, playerid, min + (max << 16), 0, 0, pcard, mg);
else else
pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 0, (effect*)smat, (group*)pcard, playerid + 0x10000, min + (max << 16)); pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 0, nullptr, nullptr, playerid + 0x10000, min + (max << 16), 0, 0, pcard, smat);
lua_pushvalue(L, 3); lua_pushvalue(L, 3);
lua_pushvalue(L, 4); lua_pushvalue(L, 4);
lua_pushvalue(L, 2); lua_pushvalue(L, 2);
...@@ -3283,7 +3283,7 @@ int32 scriptlib::duel_select_tuner_material(lua_State *L) { ...@@ -3283,7 +3283,7 @@ int32 scriptlib::duel_select_tuner_material(lua_State *L) {
pduel->game_field->core.select_cards.clear(); pduel->game_field->core.select_cards.clear();
pduel->game_field->core.select_cards.push_back(tuner); pduel->game_field->core.select_cards.push_back(tuner);
pduel->game_field->returns.bvalue[1] = 0; pduel->game_field->returns.bvalue[1] = 0;
pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 1, (effect*)mg, (group*)pcard, playerid, min + (max << 16)); pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 1, nullptr, nullptr, playerid, min + (max << 16), 0, 0, pcard, mg);
lua_pushvalue(L, 4); lua_pushvalue(L, 4);
lua_pushvalue(L, 5); lua_pushvalue(L, 5);
lua_pushvalue(L, 2); lua_pushvalue(L, 2);
......
...@@ -5516,8 +5516,8 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in ...@@ -5516,8 +5516,8 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
select_cards->swap(core.select_cards); select_cards->swap(core.select_cards);
card_vector* must_select_cards = new card_vector; card_vector* must_select_cards = new card_vector;
must_select_cards->swap(core.must_select_cards); must_select_cards->swap(core.must_select_cards);
core.units.begin()->ptr1 = select_cards; core.units.begin()->ptr3 = select_cards;
core.units.begin()->ptr2 = must_select_cards; core.units.begin()->ptr4 = must_select_cards;
pduel->write_buffer8(MSG_HINT); pduel->write_buffer8(MSG_HINT);
pduel->write_buffer8(HINT_SELECTMSG); pduel->write_buffer8(HINT_SELECTMSG);
pduel->write_buffer8(playerid); pduel->write_buffer8(playerid);
...@@ -5527,10 +5527,10 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in ...@@ -5527,10 +5527,10 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
} }
case 6: { case 6: {
card* pcard = core.select_cards[returns.bvalue[1]]; card* pcard = core.select_cards[returns.bvalue[1]];
card_vector* select_cards = (card_vector*)core.units.begin()->ptr1; card_vector* select_cards = (card_vector*)core.units.begin()->ptr3;
auto it = std::find(select_cards->begin(), select_cards->end(), pcard); auto it = std::find(select_cards->begin(), select_cards->end(), pcard);
select_cards->erase(it); select_cards->erase(it);
card_vector* must_select_cards = (card_vector*)core.units.begin()->ptr2; card_vector* must_select_cards = (card_vector*)core.units.begin()->ptr4;
must_select_cards->push_back(pcard); must_select_cards->push_back(pcard);
select_cards->swap(core.select_cards); select_cards->swap(core.select_cards);
must_select_cards->swap(core.must_select_cards); must_select_cards->swap(core.must_select_cards);
......
...@@ -610,9 +610,9 @@ uint32 field::process() { ...@@ -610,9 +610,9 @@ uint32 field::process() {
case PROCESSOR_SELECT_SYNCHRO: { case PROCESSOR_SELECT_SYNCHRO: {
int32 ret = TRUE; int32 ret = TRUE;
if(!(it->arg1 >> 16)) if(!(it->arg1 >> 16))
ret = select_synchro_material(it->step, it->arg1 & 0xffff, (card*)it->ptarget, it->arg2 & 0xffff, it->arg2 >> 16, 0, (group*)it->peffect); ret = select_synchro_material(it->step, it->arg1 & 0xffff, (card*)it->ptr1, it->arg2 & 0xffff, it->arg2 >> 16, nullptr, (group*)it->ptr2);
else else
ret = select_synchro_material(it->step, it->arg1 & 0xffff, (card*)it->ptarget, it->arg2 & 0xffff, it->arg2 >> 16, (card*)it->peffect, 0); ret = select_synchro_material(it->step, it->arg1 & 0xffff, (card*)it->ptr1, it->arg2 & 0xffff, it->arg2 >> 16, (card*)it->ptr2, nullptr);
if(ret) if(ret)
core.units.pop_front(); core.units.pop_front();
else else
......
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