Commit d5accce9 authored by Chen Bill's avatar Chen Bill

update PROCESSOR_SELECT_SYNCHRO

parent 26b4ce92
......@@ -150,12 +150,14 @@ struct processor_unit {
uint32 arg2{ 0 };
uint32 arg3{ 0 };
uint32 arg4{ 0 };
void* ptr1{ nullptr };
void* ptr2{ nullptr };
int32 value1{ 0 };
int32 value2{ 0 };
int32 value3{ 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_IVALUE = SIZE_RETURN_VALUE / 4;
......
......@@ -3220,10 +3220,10 @@ int32 scriptlib::duel_select_synchro_material(lua_State *L) {
check_param(L, PARAM_TYPE_GROUP, 8);
mg = *(group**) lua_touserdata(L, 8);
}
if(mg)
pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 0, (effect*)mg, (group*)pcard, playerid, min + (max << 16));
if (mg)
pduel->game_field->add_process(PROCESSOR_SELECT_SYNCHRO, 0, nullptr, nullptr, playerid, min + (max << 16), 0, 0, pcard, mg);
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, 4);
lua_pushvalue(L, 2);
......@@ -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.push_back(tuner);
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, 5);
lua_pushvalue(L, 2);
......
......@@ -5516,8 +5516,8 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
select_cards->swap(core.select_cards);
card_vector* must_select_cards = new card_vector;
must_select_cards->swap(core.must_select_cards);
core.units.begin()->ptr1 = select_cards;
core.units.begin()->ptr2 = must_select_cards;
core.units.begin()->ptr3 = select_cards;
core.units.begin()->ptr4 = must_select_cards;
pduel->write_buffer8(MSG_HINT);
pduel->write_buffer8(HINT_SELECTMSG);
pduel->write_buffer8(playerid);
......@@ -5527,10 +5527,10 @@ int32 field::select_synchro_material(int16 step, uint8 playerid, card* pcard, in
}
case 6: {
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);
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);
select_cards->swap(core.select_cards);
must_select_cards->swap(core.must_select_cards);
......
......@@ -610,9 +610,9 @@ uint32 field::process() {
case PROCESSOR_SELECT_SYNCHRO: {
int32 ret = TRUE;
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
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)
core.units.pop_front();
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