Commit 23e6b1f9 authored by mercury233's avatar mercury233
parents 53e59d45 4aa2025e
...@@ -3458,7 +3458,17 @@ int32 scriptlib::duel_select_disable_field(lua_State * L) { ...@@ -3458,7 +3458,17 @@ int32 scriptlib::duel_select_disable_field(lua_State * L) {
ct4 = pduel->game_field->get_useable_count(NULL, 1 - playerid, LOCATION_SZONE, PLAYER_NONE, 0, 0xff, &plist); ct4 = pduel->game_field->get_useable_count(NULL, 1 - playerid, LOCATION_SZONE, PLAYER_NONE, 0, 0xff, &plist);
flag = (flag & 0xffffff) | (plist << 24); flag = (flag & 0xffffff) | (plist << 24);
} }
flag |= filter | 0xe0e0e0e0; if((location1 & LOCATION_MZONE) && (location2 & LOCATION_MZONE) && pduel->game_field->core.duel_rule >= 4) {
if(pduel->game_field->is_location_useable(playerid, LOCATION_MZONE, 5)) {
flag &= ~(0x1 << 5);
ct1 += 1;
}
if(pduel->game_field->is_location_useable(playerid, LOCATION_MZONE, 6)) {
flag &= ~(0x1 << 6);
ct1 += 1;
}
}
flag |= filter | 0xe080e080;
if(count > ct1 + ct2 + ct3 + ct4) if(count > ct1 + ct2 + ct3 + ct4)
count = ct1 + ct2 + ct3 + ct4; count = ct1 + ct2 + ct3 + ct4;
if(count == 0) if(count == 0)
...@@ -3477,6 +3487,10 @@ int32 scriptlib::duel_select_disable_field(lua_State * L) { ...@@ -3477,6 +3487,10 @@ int32 scriptlib::duel_select_disable_field(lua_State * L) {
dfflag |= 0x1u << (s + (p == playerid ? 0 : 16) + (l == LOCATION_MZONE ? 0 : 8)); dfflag |= 0x1u << (s + (p == playerid ? 0 : 16) + (l == LOCATION_MZONE ? 0 : 8));
pa += 3; pa += 3;
} }
if(dfflag & (0x1 << 5))
dfflag |= 0x1 << (16 + 6);
if(dfflag & (0x1 << 6))
dfflag |= 0x1 << (16 + 5);
lua_pushinteger(L, dfflag); lua_pushinteger(L, dfflag);
return 1; return 1;
}); });
......
...@@ -408,6 +408,16 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso ...@@ -408,6 +408,16 @@ int32 field::draw(uint16 step, effect* reason_effect, uint32 reason, uint8 reaso
shuffle(playerid, LOCATION_HAND); shuffle(playerid, LOCATION_HAND);
} }
for (auto& pcard : *drawed_set) { for (auto& pcard : *drawed_set) {
if(pcard->owner != pcard->current.controler) {
effect* deffect = pduel->new_effect();
deffect->owner = pcard;
deffect->code = 0;
deffect->type = EFFECT_TYPE_SINGLE;
deffect->flag[0] = EFFECT_FLAG_CANNOT_DISABLE | EFFECT_FLAG_CLIENT_HINT;
deffect->description = 67;
deffect->reset_flag = RESET_EVENT + 0x1fe0000;
pcard->add_effect(deffect);
}
raise_single_event(pcard, 0, EVENT_DRAW, reason_effect, reason, reason_player, playerid, 0); raise_single_event(pcard, 0, EVENT_DRAW, reason_effect, reason, reason_player, playerid, 0);
raise_single_event(pcard, 0, EVENT_TO_HAND, reason_effect, reason, reason_player, playerid, 0); raise_single_event(pcard, 0, EVENT_TO_HAND, reason_effect, reason, reason_player, playerid, 0);
raise_single_event(pcard, 0, EVENT_MOVE, reason_effect, reason, reason_player, playerid, 0); raise_single_event(pcard, 0, EVENT_MOVE, reason_effect, reason, reason_player, playerid, 0);
...@@ -4063,6 +4073,16 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3 ...@@ -4063,6 +4073,16 @@ int32 field::send_to(uint16 step, group * targets, effect * reason_effect, uint3
} }
pcard->clear_card_target(); pcard->clear_card_target();
if(nloc == LOCATION_HAND) { if(nloc == LOCATION_HAND) {
if(pcard->owner != pcard->current.controler) {
effect* deffect = pduel->new_effect();
deffect->owner = pcard;
deffect->code = 0;
deffect->type = EFFECT_TYPE_SINGLE;
deffect->flag[0] = EFFECT_FLAG_CANNOT_DISABLE | EFFECT_FLAG_CLIENT_HINT;
deffect->description = 67;
deffect->reset_flag = RESET_EVENT + 0x1fe0000;
pcard->add_effect(deffect);
}
tohand.insert(pcard); tohand.insert(pcard);
raise_single_event(pcard, 0, EVENT_TO_HAND, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0); raise_single_event(pcard, 0, EVENT_TO_HAND, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
} }
...@@ -4221,6 +4241,16 @@ int32 field::discard_deck(uint16 step, uint8 playerid, uint8 count, uint32 reaso ...@@ -4221,6 +4241,16 @@ int32 field::discard_deck(uint16 step, uint8 playerid, uint8 count, uint32 reaso
pduel->write_buffer8(pcard->current.position); pduel->write_buffer8(pcard->current.position);
pduel->write_buffer32(pcard->current.reason); pduel->write_buffer32(pcard->current.reason);
if(dest == LOCATION_HAND) { if(dest == LOCATION_HAND) {
if(pcard->owner != pcard->current.controler) {
effect* deffect = pduel->new_effect();
deffect->owner = pcard;
deffect->code = 0;
deffect->type = EFFECT_TYPE_SINGLE;
deffect->flag[0] = EFFECT_FLAG_CANNOT_DISABLE | EFFECT_FLAG_CLIENT_HINT;
deffect->description = 67;
deffect->reset_flag = RESET_EVENT + 0x1fe0000;
pcard->add_effect(deffect);
}
tohand.insert(pcard); tohand.insert(pcard);
raise_single_event(pcard, 0, EVENT_TO_HAND, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0); raise_single_event(pcard, 0, EVENT_TO_HAND, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
} else if(dest == LOCATION_DECK || dest == LOCATION_EXTRA) { } else if(dest == LOCATION_DECK || dest == LOCATION_EXTRA) {
...@@ -6033,7 +6063,8 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -6033,7 +6063,8 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
process_instant_event(); process_instant_event();
} else { } else {
solve_continuous(peffect->get_handler_player(), peffect, e); solve_continuous(peffect->get_handler_player(), peffect, e);
core.units.begin()->step = 1; //call Duel.SetCoinResult in operation if necessary
return TRUE;
} }
return FALSE; return FALSE;
} }
...@@ -6042,11 +6073,6 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -6042,11 +6073,6 @@ int32 field::toss_coin(uint16 step, effect * reason_effect, uint8 reason_player,
process_instant_event(); process_instant_event();
return TRUE; return TRUE;
} }
case 2: {
for(uint8 i = 0; i < 5; ++i)
core.coin_result[i] = (returns.ivalue[0] >> (i * 4)) & 0xf;
return TRUE;
}
} }
return TRUE; return TRUE;
} }
...@@ -6094,7 +6120,8 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -6094,7 +6120,8 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
process_instant_event(); process_instant_event();
} else { } else {
solve_continuous(peffect->get_handler_player(), peffect, e); solve_continuous(peffect->get_handler_player(), peffect, e);
core.units.begin()->step = 1; //call Duel.SetDiceResult in operation if necessary
return TRUE;
} }
return FALSE; return FALSE;
} }
...@@ -6103,11 +6130,6 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player, ...@@ -6103,11 +6130,6 @@ int32 field::toss_dice(uint16 step, effect * reason_effect, uint8 reason_player,
process_instant_event(); process_instant_event();
return TRUE; return TRUE;
} }
case 2: {
for(uint8 i = 0; i < 5; ++i)
core.dice_result[i] = (returns.ivalue[0] >> (i * 4)) & 0xf;
return TRUE;
}
} }
return TRUE; return TRUE;
} }
......
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