Commit 3385a07e authored by argon.sun's avatar argon.sun

fix

parent 75fba7e9
...@@ -975,6 +975,8 @@ int32 card::refresh_disable_status() { ...@@ -975,6 +975,8 @@ int32 card::refresh_disable_status() {
} }
uint8 card::refresh_control_status() { uint8 card::refresh_control_status() {
uint8 final = owner; uint8 final = owner;
if(pduel->game_field->core.remove_brainwashing)
return final;
effect_set eset; effect_set eset;
filter_effect(EFFECT_SET_CONTROL, &eset); filter_effect(EFFECT_SET_CONTROL, &eset);
if(eset.count) if(eset.count)
......
...@@ -336,6 +336,7 @@ public: ...@@ -336,6 +336,7 @@ public:
#define EFFECT_FORBIDDEN 292 #define EFFECT_FORBIDDEN 292
#define EFFECT_NECRO_VALLEY_IM 293 #define EFFECT_NECRO_VALLEY_IM 293
#define EFFECT_REVERSE_DECK 294 #define EFFECT_REVERSE_DECK 294
#define EFFECT_REMOVE_BRAINWASHING 295
#define EVENT_STARTUP 1000 #define EVENT_STARTUP 1000
#define EVENT_FLIP 1001 #define EVENT_FLIP 1001
......
...@@ -71,6 +71,7 @@ field::field(duel* pduel) { ...@@ -71,6 +71,7 @@ field::field(duel* pduel) {
core.attacker = 0; core.attacker = 0;
core.attack_target = 0; core.attack_target = 0;
core.deck_reversed = FALSE; core.deck_reversed = FALSE;
core.remove_brainwashing = FALSE;
core.effect_damage_step = FALSE; core.effect_damage_step = FALSE;
nil_event.event_code = 0; nil_event.event_code = 0;
nil_event.event_cards = 0; nil_event.event_cards = 0;
...@@ -300,7 +301,7 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc ...@@ -300,7 +301,7 @@ void field::move_card(uint8 playerid, card* pcard, uint8 location, uint8 sequenc
add_card(playerid, pcard, location, sequence); add_card(playerid, pcard, location, sequence);
} }
void field::set_control(card* pcard, uint8 playerid, uint8 reset_phase, uint8 reset_count) { void field::set_control(card* pcard, uint8 playerid, uint8 reset_phase, uint8 reset_count) {
if(pcard->refresh_control_status() == playerid) if(core.remove_brainwashing || pcard->refresh_control_status() == playerid)
return; return;
effect* peffect = pduel->new_effect(); effect* peffect = pduel->new_effect();
if(core.reason_effect) if(core.reason_effect)
......
...@@ -240,6 +240,7 @@ struct processor { ...@@ -240,6 +240,7 @@ struct processor {
uint8 shuffle_hand_check[2]; uint8 shuffle_hand_check[2];
uint8 shuffle_deck_check[2]; uint8 shuffle_deck_check[2];
uint8 deck_reversed; uint8 deck_reversed;
uint8 remove_brainwashing;
uint8 flip_delayed; uint8 flip_delayed;
uint8 damage_calculated; uint8 damage_calculated;
uint8 summon_state[2]; uint8 summon_state[2];
......
...@@ -1597,18 +1597,19 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) { ...@@ -1597,18 +1597,19 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) {
case 2: { case 2: {
//forced trigger //forced trigger
for (auto clit = core.new_fchain_s.begin(); clit != core.new_fchain_s.end(); ++clit) { for (auto clit = core.new_fchain_s.begin(); clit != core.new_fchain_s.end(); ++clit) {
if(!(clit->triggering_effect->flag & EFFECT_FLAG_EVENT_PLAYER)) { effect* peffect = clit->triggering_effect;
if(clit->triggering_effect->handler->current.reason & REASON_TEMPORARY) if(!(peffect->flag & EFFECT_FLAG_EVENT_PLAYER) && peffect->handler->is_has_relation(peffect)) {
clit->triggering_player = clit->triggering_effect->handler->previous.controler; clit->triggering_player = peffect->handler->current.controler;
else clit->triggering_controler = peffect->handler->current.controler;
clit->triggering_player = clit->triggering_effect->handler->current.controler; clit->triggering_location = peffect->handler->current.location;
clit->triggering_sequence = peffect->handler->current.sequence;
} }
if(clit->triggering_effect->is_chainable(clit->triggering_player) && clit->triggering_effect->is_activateable(clit->triggering_player, clit->evt, TRUE)) { if(peffect->is_chainable(clit->triggering_player) && peffect->is_activateable(clit->triggering_player, clit->evt, TRUE)) {
if(clit->triggering_player == infos.turn_player) if(clit->triggering_player == infos.turn_player)
core.tpchain.push_back(*clit); core.tpchain.push_back(*clit);
else else
core.ntpchain.push_back(*clit); core.ntpchain.push_back(*clit);
clit->triggering_effect->handler->set_status(STATUS_CHAINING, TRUE); peffect->handler->set_status(STATUS_CHAINING, TRUE);
} }
} }
if(core.tpchain.size() > 1) if(core.tpchain.size() > 1)
...@@ -1632,11 +1633,12 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) { ...@@ -1632,11 +1633,12 @@ int32 field::process_point_event(int16 step, int32 special, int32 skip_new) {
return FALSE; return FALSE;
} }
for (auto clit = core.new_ochain_s.begin(); clit != core.new_ochain_s.end(); ++clit) { for (auto clit = core.new_ochain_s.begin(); clit != core.new_ochain_s.end(); ++clit) {
if(!(clit->triggering_effect->flag & EFFECT_FLAG_EVENT_PLAYER)) { effect* peffect = clit->triggering_effect;
if(clit->triggering_effect->handler->current.reason & REASON_TEMPORARY) if(!(peffect->flag & EFFECT_FLAG_EVENT_PLAYER) && peffect->handler->is_has_relation(peffect)) {
clit->triggering_player = clit->triggering_effect->handler->previous.controler; clit->triggering_player = peffect->handler->current.controler;
else clit->triggering_controler = peffect->handler->current.controler;
clit->triggering_player = clit->triggering_effect->handler->current.controler; clit->triggering_location = peffect->handler->current.location;
clit->triggering_sequence = peffect->handler->current.sequence;
} }
if(clit->triggering_player == infos.turn_player) if(clit->triggering_player == infos.turn_player)
core.tpchain.push_back(*clit); core.tpchain.push_back(*clit);
...@@ -4332,7 +4334,6 @@ int32 field::adjust_step(uint16 step) { ...@@ -4332,7 +4334,6 @@ int32 field::adjust_step(uint16 step) {
//win, isable, control, self_des, equip, position, trap_monster //win, isable, control, self_des, equip, position, trap_monster
switch(step) { switch(step) {
case 0: { case 0: {
core.units.begin()->arg1 = FALSE;
core.re_adjust = FALSE; core.re_adjust = FALSE;
return FALSE; return FALSE;
} }
...@@ -4412,7 +4413,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -4412,7 +4413,7 @@ int32 field::adjust_step(uint16 step) {
pcard->reset(RESET_TURN_SET, RESET_EVENT); pcard->reset(RESET_TURN_SET, RESET_EVENT);
refresh_location_info_instant(); refresh_location_info_instant();
move_to_field(pcard, tp, tp, LOCATION_SZONE, pcard->current.position); move_to_field(pcard, tp, tp, LOCATION_SZONE, pcard->current.position);
core.units.begin()->arg1 = TRUE; core.re_adjust = TRUE;
} }
} }
tp = 1 - tp; tp = 1 - tp;
...@@ -4439,7 +4440,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -4439,7 +4440,7 @@ int32 field::adjust_step(uint16 step) {
tp = 1 - tp; tp = 1 - tp;
} }
if(core.control_adjust_set[0].size() || core.control_adjust_set[1].size()) { if(core.control_adjust_set[0].size() || core.control_adjust_set[1].size()) {
core.units.begin()->arg1 = TRUE; core.re_adjust = TRUE;
add_process(PROCESSOR_CONTROL_ADJUST, 0, 0, 0, 0, 0); add_process(PROCESSOR_CONTROL_ADJUST, 0, 0, 0, 0, 0);
} }
core.units.begin()->step = 7; core.units.begin()->step = 7;
...@@ -4491,7 +4492,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -4491,7 +4492,7 @@ int32 field::adjust_step(uint16 step) {
} }
case 9: { case 9: {
if(returns.ivalue[0] > 0) if(returns.ivalue[0] > 0)
core.units.begin()->arg1 = TRUE; core.re_adjust = TRUE;
//equip check //equip check
uint8 tp = infos.turn_player; uint8 tp = infos.turn_player;
card* pcard; card* pcard;
...@@ -4505,7 +4506,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -4505,7 +4506,7 @@ int32 field::adjust_step(uint16 step) {
tp = 1 - tp; tp = 1 - tp;
} }
if(core.destroy_set.size()) { if(core.destroy_set.size()) {
core.units.begin()->arg1 = TRUE; core.re_adjust = TRUE;
destroy(&core.destroy_set, 0, REASON_RULE, PLAYER_NONE); destroy(&core.destroy_set, 0, REASON_RULE, PLAYER_NONE);
} }
return FALSE; return FALSE;
...@@ -4540,7 +4541,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -4540,7 +4541,7 @@ int32 field::adjust_step(uint16 step) {
tp = 1 - tp; tp = 1 - tp;
} }
if(pos_adjust.size()) { if(pos_adjust.size()) {
core.units.begin()->arg1 = TRUE; core.re_adjust = TRUE;
group* ng = pduel->new_group(); group* ng = pduel->new_group();
ng->container = pos_adjust; ng->container = pos_adjust;
ng->is_readonly = TRUE; ng->is_readonly = TRUE;
...@@ -4571,15 +4572,15 @@ int32 field::adjust_step(uint16 step) { ...@@ -4571,15 +4572,15 @@ int32 field::adjust_step(uint16 step) {
return FALSE; return FALSE;
} }
case 12: { case 12: {
//reverse_deck //reverse_deck && remove brainwashing
effect_set eset; effect_set eset;
filter_field_effect(EFFECT_REVERSE_DECK, &eset, FALSE); filter_field_effect(EFFECT_REVERSE_DECK, &eset, FALSE);
uint8 rv = eset.count ? TRUE : FALSE; uint8 res = eset.count ? TRUE : FALSE;
if(core.deck_reversed ^ rv) { if(core.deck_reversed ^ res) {
reverse_deck(0); reverse_deck(0);
reverse_deck(1); reverse_deck(1);
pduel->write_buffer8(MSG_REVERSE_DECK); pduel->write_buffer8(MSG_REVERSE_DECK);
if(rv) { if(res) {
if(player[0].list_main.size()) { if(player[0].list_main.size()) {
pduel->write_buffer8(MSG_DECK_TOP); pduel->write_buffer8(MSG_DECK_TOP);
pduel->write_buffer8(0); pduel->write_buffer8(0);
...@@ -4594,7 +4595,23 @@ int32 field::adjust_step(uint16 step) { ...@@ -4594,7 +4595,23 @@ int32 field::adjust_step(uint16 step) {
} }
} }
} }
core.deck_reversed = rv; core.deck_reversed = res;
filter_field_effect(EFFECT_REMOVE_BRAINWASHING, &eset, FALSE);
res = eset.count ? TRUE : FALSE;
if(res && !core.remove_brainwashing) {
for(int i = 0; i < 5; ++i) {
card* pcard = player[0].list_mzone[i];
if(pcard)
pcard->reset(EFFECT_SET_CONTROL, RESET_CODE);
}
for(int i = 0; i < 5; ++i) {
card* pcard = player[1].list_mzone[i];
if(pcard)
pcard->reset(EFFECT_SET_CONTROL, RESET_CODE);
}
core.re_adjust = TRUE;
}
core.remove_brainwashing = res;
return FALSE; return FALSE;
} }
case 13: { case 13: {
...@@ -4603,7 +4620,7 @@ int32 field::adjust_step(uint16 step) { ...@@ -4603,7 +4620,7 @@ int32 field::adjust_step(uint16 step) {
return FALSE; return FALSE;
} }
case 14: { case 14: {
if(core.re_adjust || core.units.begin()->arg1) { if(core.re_adjust) {
core.units.begin()->step = -1; core.units.begin()->step = -1;
return FALSE; return FALSE;
} }
......
--洗脳解除
function c94739788.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
c:RegisterEffect(e1)
--
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD)
e2:SetCode(EFFECT_REMOVE_BRAINWASHING)
e2:SetRange(LOCATION_SZONE)
c:RegisterEffect(e2)
end
--所有者の刻印
function c9720537.initial_effect(c)
--Activate
local e1=Effect.CreateEffect(c)
e1:SetCategory(CATEGORY_CONTROL)
e1:SetType(EFFECT_TYPE_ACTIVATE)
e1:SetCode(EVENT_FREE_CHAIN)
e1:SetTarget(c9720537.target)
e1:SetOperation(c9720537.activate)
c:RegisterEffect(e1)
end
function c9720537.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.GetFieldGroupCount(tp,LOCATION_MZONE,LOCATION_MZONE)>0 end
end
function c9720537.activate(e,tp,eg,ep,ev,re,r,rp)
local g=Duel.GetFieldGroup(tp,LOCATION_MZONE,LOCATION_MZONE)
local tc=g:GetFirst()
while tc do
tc:ResetEffect(EFFECT_SET_CONTROL,RESET_CODE)
tc=g:GetNext()
end
end
...@@ -414,6 +414,7 @@ EFFECT_NECRO_VALLEY =291 ...@@ -414,6 +414,7 @@ EFFECT_NECRO_VALLEY =291
EFFECT_FORBIDDEN =292 EFFECT_FORBIDDEN =292
EFFECT_NECRO_VALLEY_IM =293 EFFECT_NECRO_VALLEY_IM =293
EFFECT_REVERSE_DECK =294 EFFECT_REVERSE_DECK =294
EFFECT_REMOVE_BRAINWASHING =295
EVENT_STARTUP =1000 EVENT_STARTUP =1000
EVENT_FLIP =1001 EVENT_FLIP =1001
...@@ -432,7 +433,7 @@ EVENT_CHAIN_SOLVING =1020 ...@@ -432,7 +433,7 @@ EVENT_CHAIN_SOLVING =1020
EVENT_CHAIN_ACTIVATING =1021 EVENT_CHAIN_ACTIVATING =1021
EVENT_CHAIN_SOLVED =1022 EVENT_CHAIN_SOLVED =1022
EVENT_CHAIN_ACTIVATED =1023 EVENT_CHAIN_ACTIVATED =1023
EVENT_CHAIN_NEGATED =1024 EVENT_CHAIN_NEGATED =1024
EVENT_CHAIN_DISABLED =1025 EVENT_CHAIN_DISABLED =1025
EVENT_CHAIN_END =1026 EVENT_CHAIN_END =1026
EVENT_CHAINING =1027 EVENT_CHAINING =1027
......
...@@ -9,5 +9,5 @@ lastdeck = test ...@@ -9,5 +9,5 @@ lastdeck = test
textfont = c:/windows/fonts/simsun.ttc 14 textfont = c:/windows/fonts/simsun.ttc 14
numfont = c:/windows/fonts/arialbd.ttf numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911 serverport = 7911
lastip = 192.168.3.235 lastip = 192.168.2.100
lastport = 7911 lastport = 7911
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