Commit 82c26632 authored by VanillaSalt's avatar VanillaSalt

Merge pull request #1482 from DailyShana/patch-5

fix Lose 1 Turn and immune effect
parents e6881797 a7d84db7
...@@ -1907,7 +1907,7 @@ int32 card::get_set_tribute_count() { ...@@ -1907,7 +1907,7 @@ int32 card::get_set_tribute_count() {
return min + (max << 16); return min + (max << 16);
} }
int32 card::is_can_be_flip_summoned(uint8 playerid) { int32 card::is_can_be_flip_summoned(uint8 playerid) {
if(is_status(STATUS_SUMMON_TURN) || is_status(STATUS_FLIP_SUMMON_TURN) || is_status(STATUS_FORM_CHANGED)) if(is_status(STATUS_SUMMON_TURN) || is_status(STATUS_FLIP_SUMMON_TURN) || is_status(STATUS_SPSUMMON_TURN) || is_status(STATUS_FORM_CHANGED))
return FALSE; return FALSE;
if(announce_count > 0) if(announce_count > 0)
return FALSE; return FALSE;
...@@ -2363,7 +2363,7 @@ int32 card::is_capable_attack_announce(uint8 playerid) { ...@@ -2363,7 +2363,7 @@ int32 card::is_capable_attack_announce(uint8 playerid) {
return TRUE; return TRUE;
} }
int32 card::is_capable_change_position(uint8 playerid) { int32 card::is_capable_change_position(uint8 playerid) {
if(is_status(STATUS_SUMMON_TURN) || is_status(STATUS_FLIP_SUMMON_TURN) || is_status(STATUS_FORM_CHANGED)) if(is_status(STATUS_SUMMON_TURN) || is_status(STATUS_FLIP_SUMMON_TURN) || is_status(STATUS_SPSUMMON_TURN) || is_status(STATUS_FORM_CHANGED))
return FALSE; return FALSE;
if(announce_count > 0) if(announce_count > 0)
return FALSE; return FALSE;
......
...@@ -406,6 +406,7 @@ public: ...@@ -406,6 +406,7 @@ public:
#define STATUS_ACT_FROM_HAND 0x8000000 #define STATUS_ACT_FROM_HAND 0x8000000
#define STATUS_OPPO_BATTLE 0x10000000 #define STATUS_OPPO_BATTLE 0x10000000
#define STATUS_FLIP_SUMMON_TURN 0x20000000 #define STATUS_FLIP_SUMMON_TURN 0x20000000
#define STATUS_SPSUMMON_TURN 0x40000000
//Counter //Counter
#define COUNTER_NEED_PERMIT 0x1000 #define COUNTER_NEED_PERMIT 0x1000
#define COUNTER_NEED_ENABLE 0x2000 #define COUNTER_NEED_ENABLE 0x2000
......
...@@ -1549,10 +1549,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc, ...@@ -1549,10 +1549,10 @@ int32 field::summon(uint16 step, uint8 sumplayer, card * target, effect * proc,
oeit->second = 0; oeit->second = 0;
} }
target->set_status(STATUS_SUMMONING, FALSE); target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_SUMMON_TURN, TRUE);
target->enable_field_effect(TRUE); target->enable_field_effect(TRUE);
if(target->is_status(STATUS_DISABLED)) if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT); target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_SUMMON_TURN, TRUE);
core.summoning_card = 0; core.summoning_card = 0;
return FALSE; return FALSE;
} }
...@@ -2221,10 +2221,10 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui ...@@ -2221,10 +2221,10 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
if(oeit->second == core.units.begin()->peffect) if(oeit->second == core.units.begin()->peffect)
oeit->second = 0; oeit->second = 0;
target->set_status(STATUS_SUMMONING, FALSE); target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_PROC_COMPLETE | STATUS_SPSUMMON_TURN, TRUE);
target->enable_field_effect(TRUE); target->enable_field_effect(TRUE);
if(target->is_status(STATUS_DISABLED)) if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT); target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_PROC_COMPLETE | STATUS_SUMMON_TURN, TRUE);
core.summoning_card = 0; core.summoning_card = 0;
return FALSE; return FALSE;
} }
...@@ -2377,10 +2377,10 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui ...@@ -2377,10 +2377,10 @@ int32 field::special_summon_rule(uint16 step, uint8 sumplayer, card * target, ui
oeit->second = 0; oeit->second = 0;
for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) { for(auto cit = pgroup->container.begin(); cit != pgroup->container.end(); ++cit) {
(*cit)->set_status(STATUS_SUMMONING, FALSE); (*cit)->set_status(STATUS_SUMMONING, FALSE);
(*cit)->set_status(STATUS_SPSUMMON_TURN, TRUE);
(*cit)->enable_field_effect(TRUE); (*cit)->enable_field_effect(TRUE);
if((*cit)->is_status(STATUS_DISABLED)) if((*cit)->is_status(STATUS_DISABLED))
(*cit)->reset(RESET_DISABLE, RESET_EVENT); (*cit)->reset(RESET_DISABLE, RESET_EVENT);
(*cit)->set_status(STATUS_SUMMON_TURN, TRUE);
} }
return FALSE; return FALSE;
} }
...@@ -2535,7 +2535,7 @@ int32 field::special_summon(uint16 step, effect * reason_effect, uint8 reason_pl ...@@ -2535,7 +2535,7 @@ int32 field::special_summon(uint16 step, effect * reason_effect, uint8 reason_pl
core.spsummon_once_map[1][*cit]++; core.spsummon_once_map[1][*cit]++;
for(auto cit = targets->container.begin(); cit != targets->container.end(); ++cit) { for(auto cit = targets->container.begin(); cit != targets->container.end(); ++cit) {
(*cit)->set_status(STATUS_SPSUMMON_STEP, FALSE); (*cit)->set_status(STATUS_SPSUMMON_STEP, FALSE);
(*cit)->set_status(STATUS_SUMMON_TURN, TRUE); (*cit)->set_status(STATUS_SPSUMMON_TURN, TRUE);
if((*cit)->is_position(POS_FACEUP)) if((*cit)->is_position(POS_FACEUP))
(*cit)->enable_field_effect(TRUE); (*cit)->enable_field_effect(TRUE);
} }
...@@ -3656,6 +3656,7 @@ int32 field::move_to_field(uint16 step, card * target, uint32 enable, uint32 ret ...@@ -3656,6 +3656,7 @@ int32 field::move_to_field(uint16 step, card * target, uint32 enable, uint32 ret
if(target->turnid != infos.turn_id) { if(target->turnid != infos.turn_id) {
target->set_status(STATUS_SUMMON_TURN, FALSE); target->set_status(STATUS_SUMMON_TURN, FALSE);
target->set_status(STATUS_FLIP_SUMMON_TURN, FALSE); target->set_status(STATUS_FLIP_SUMMON_TURN, FALSE);
target->set_status(STATUS_SPSUMMON_TURN, FALSE);
target->set_status(STATUS_SET_TURN, FALSE); target->set_status(STATUS_SET_TURN, FALSE);
target->set_status(STATUS_FORM_CHANGED, FALSE); target->set_status(STATUS_FORM_CHANGED, FALSE);
} }
......
...@@ -4016,6 +4016,7 @@ int32 field::process_turn(uint16 step, uint8 turn_player) { ...@@ -4016,6 +4016,7 @@ int32 field::process_turn(uint16 step, uint8 turn_player) {
continue; continue;
pcard->set_status(STATUS_SUMMON_TURN, FALSE); pcard->set_status(STATUS_SUMMON_TURN, FALSE);
pcard->set_status(STATUS_FLIP_SUMMON_TURN, FALSE); pcard->set_status(STATUS_FLIP_SUMMON_TURN, FALSE);
pcard->set_status(STATUS_SPSUMMON_TURN, FALSE);
pcard->set_status(STATUS_SET_TURN, FALSE); pcard->set_status(STATUS_SET_TURN, FALSE);
pcard->set_status(STATUS_FORM_CHANGED, FALSE); pcard->set_status(STATUS_FORM_CHANGED, FALSE);
pcard->announce_count = 0; pcard->announce_count = 0;
......
...@@ -19,6 +19,18 @@ function c1995985.initial_effect(c) ...@@ -19,6 +19,18 @@ function c1995985.initial_effect(c)
e2:SetTarget(c1995985.sptg) e2:SetTarget(c1995985.sptg)
e2:SetOperation(c1995985.spop) e2:SetOperation(c1995985.spop)
c:RegisterEffect(e2) c:RegisterEffect(e2)
--reg
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e3:SetCode(EVENT_SUMMON_SUCCESS)
e3:SetOperation(c1995985.regop)
c:RegisterEffect(e3)
local e4=e3:Clone()
e4:SetCode(EVENT_SPSUMMON_SUCCESS)
c:RegisterEffect(e4)
local e5=e3:Clone()
e5:SetCode(EVENT_FLIP)
c:RegisterEffect(e5)
end end
c1995985.lvupcount=1 c1995985.lvupcount=1
c1995985.lvup={74388798} c1995985.lvup={74388798}
...@@ -30,8 +42,11 @@ function c1995985.disop(e,tp,eg,ep,ev,re,r,rp) ...@@ -30,8 +42,11 @@ function c1995985.disop(e,tp,eg,ep,ev,re,r,rp)
Duel.NegateEffect(ev) Duel.NegateEffect(ev)
end end
end end
function c1995985.regop(e,tp,eg,ep,ev,re,r,rp)
e:GetHandler():RegisterFlagEffect(1995985,RESET_EVENT+0x1ec0000+RESET_PHASE+RESET_END,0,1)
end
function c1995985.spcon(e,tp,eg,ep,ev,re,r,rp) function c1995985.spcon(e,tp,eg,ep,ev,re,r,rp)
return tp==Duel.GetTurnPlayer() and not e:GetHandler():IsStatus(STATUS_SUMMON_TURN) return tp==Duel.GetTurnPlayer() and e:GetHandler():GetFlagEffect(1995985)==0
end end
function c1995985.spcost(e,tp,eg,ep,ev,re,r,rp,chk) function c1995985.spcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end
......
...@@ -27,21 +27,6 @@ function c24348804.initial_effect(c) ...@@ -27,21 +27,6 @@ function c24348804.initial_effect(c)
e3:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE) e3:SetTargetRange(LOCATION_MZONE,LOCATION_MZONE)
e3:SetTarget(c24348804.distg) e3:SetTarget(c24348804.distg)
c:RegisterEffect(e3) c:RegisterEffect(e3)
if not c24348804.global_check then
c24348804.global_check=true
local ge1=Effect.CreateEffect(c)
ge1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
ge1:SetCode(EVENT_SPSUMMON_SUCCESS)
ge1:SetOperation(c24348804.checkop)
Duel.RegisterEffect(ge1,0)
end
end
function c24348804.checkop(e,tp,eg,ep,ev,re,r,rp)
local tc=eg:GetFirst()
while tc do
tc:RegisterFlagEffect(24348804,RESET_EVENT+0x1ec0000+RESET_PHASE+PHASE_END,0,1)
tc=eg:GetNext()
end
end end
function c24348804.cfilter(c) function c24348804.cfilter(c)
return bit.band(c:GetSummonType(),SUMMON_TYPE_SPECIAL)==SUMMON_TYPE_SPECIAL return bit.band(c:GetSummonType(),SUMMON_TYPE_SPECIAL)==SUMMON_TYPE_SPECIAL
...@@ -80,5 +65,5 @@ function c24348804.operation(e,tp,eg,ep,ev,re,r,rp) ...@@ -80,5 +65,5 @@ function c24348804.operation(e,tp,eg,ep,ev,re,r,rp)
end end
end end
function c24348804.distg(e,c) function c24348804.distg(e,c)
return c:GetFlagEffect(24348804)~=0 return c:IsStatus(STATUS_SPSUMMON_TURN) and bit.band(c:GetSummonType(),SUMMON_TYPE_SPECIAL)==SUMMON_TYPE_SPECIAL
end end
...@@ -21,6 +21,18 @@ function c34088136.initial_effect(c) ...@@ -21,6 +21,18 @@ function c34088136.initial_effect(c)
e2:SetTarget(c34088136.sptg) e2:SetTarget(c34088136.sptg)
e2:SetOperation(c34088136.spop) e2:SetOperation(c34088136.spop)
c:RegisterEffect(e2) c:RegisterEffect(e2)
--reg
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e3:SetCode(EVENT_SUMMON_SUCCESS)
e3:SetOperation(c34088136.regop)
c:RegisterEffect(e3)
local e4=e3:Clone()
e4:SetCode(EVENT_SPSUMMON_SUCCESS)
c:RegisterEffect(e4)
local e5=e3:Clone()
e5:SetCode(EVENT_FLIP)
c:RegisterEffect(e5)
end end
c34088136.lvupcount=2 c34088136.lvupcount=2
c34088136.lvup={49441499,34830502} c34088136.lvup={49441499,34830502}
...@@ -29,8 +41,11 @@ c34088136.lvdn={49441499} ...@@ -29,8 +41,11 @@ c34088136.lvdn={49441499}
function c34088136.con(e) function c34088136.con(e)
return e:GetHandler():GetFlagEffect(34088136)~=0 return e:GetHandler():GetFlagEffect(34088136)~=0
end end
function c34088136.regop(e,tp,eg,ep,ev,re,r,rp)
e:GetHandler():RegisterFlagEffect(34088137,RESET_EVENT+0x1ec0000+RESET_PHASE+RESET_END,0,1)
end
function c34088136.spcon(e,tp,eg,ep,ev,re,r,rp) function c34088136.spcon(e,tp,eg,ep,ev,re,r,rp)
return tp==Duel.GetTurnPlayer() and not e:GetHandler():IsStatus(STATUS_SUMMON_TURN) return tp==Duel.GetTurnPlayer() and e:GetHandler():GetFlagEffect(34088137)==0
end end
function c34088136.spcost(e,tp,eg,ep,ev,re,r,rp,chk) function c34088136.spcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end
......
...@@ -21,6 +21,18 @@ function c34830502.initial_effect(c) ...@@ -21,6 +21,18 @@ function c34830502.initial_effect(c)
e2:SetTarget(c34830502.sptg) e2:SetTarget(c34830502.sptg)
e2:SetOperation(c34830502.spop) e2:SetOperation(c34830502.spop)
c:RegisterEffect(e2) c:RegisterEffect(e2)
--reg
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e3:SetCode(EVENT_SUMMON_SUCCESS)
e3:SetOperation(c34830502.regop)
c:RegisterEffect(e3)
local e4=e3:Clone()
e4:SetCode(EVENT_SPSUMMON_SUCCESS)
c:RegisterEffect(e4)
local e5=e3:Clone()
e5:SetCode(EVENT_FLIP)
c:RegisterEffect(e5)
end end
c34830502.lvupcount=2 c34830502.lvupcount=2
c34830502.lvup={34088136,19877898} c34830502.lvup={34088136,19877898}
...@@ -29,8 +41,11 @@ c34830502.lvdn={49441499,34088136} ...@@ -29,8 +41,11 @@ c34830502.lvdn={49441499,34088136}
function c34830502.con(e) function c34830502.con(e)
return e:GetHandler():GetFlagEffect(34830502)~=0 return e:GetHandler():GetFlagEffect(34830502)~=0
end end
function c34830502.regop(e,tp,eg,ep,ev,re,r,rp)
e:GetHandler():RegisterFlagEffect(34830503,RESET_EVENT+0x1ec0000+RESET_PHASE+RESET_END,0,1)
end
function c34830502.spcon(e,tp,eg,ep,ev,re,r,rp) function c34830502.spcon(e,tp,eg,ep,ev,re,r,rp)
return tp==Duel.GetTurnPlayer() and not e:GetHandler():IsStatus(STATUS_SUMMON_TURN) return tp==Duel.GetTurnPlayer() and e:GetHandler():GetFlagEffect(34830503)==0
end end
function c34830502.spcost(e,tp,eg,ep,ev,re,r,rp,chk) function c34830502.spcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end
......
...@@ -20,14 +20,29 @@ function c49441499.initial_effect(c) ...@@ -20,14 +20,29 @@ function c49441499.initial_effect(c)
e2:SetTarget(c49441499.sptg) e2:SetTarget(c49441499.sptg)
e2:SetOperation(c49441499.spop) e2:SetOperation(c49441499.spop)
c:RegisterEffect(e2) c:RegisterEffect(e2)
--reg
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e3:SetCode(EVENT_SUMMON_SUCCESS)
e3:SetOperation(c49441499.regop)
c:RegisterEffect(e3)
local e4=e3:Clone()
e4:SetCode(EVENT_SPSUMMON_SUCCESS)
c:RegisterEffect(e4)
local e5=e3:Clone()
e5:SetCode(EVENT_FLIP)
c:RegisterEffect(e5)
end end
c49441499.lvupcount=1 c49441499.lvupcount=1
c49441499.lvup={34088136} c49441499.lvup={34088136}
function c49441499.efilter(e,te) function c49441499.efilter(e,te)
return te:IsActiveType(TYPE_SPELL) return te:IsActiveType(TYPE_SPELL)
end end
function c49441499.regop(e,tp,eg,ep,ev,re,r,rp)
e:GetHandler():RegisterFlagEffect(49441499,RESET_EVENT+0x1ec0000+RESET_PHASE+RESET_END,0,1)
end
function c49441499.spcon(e,tp,eg,ep,ev,re,r,rp) function c49441499.spcon(e,tp,eg,ep,ev,re,r,rp)
return tp==Duel.GetTurnPlayer() and not e:GetHandler():IsStatus(STATUS_SUMMON_TURN) return tp==Duel.GetTurnPlayer() and e:GetHandler():GetFlagEffect(49441499)==0
end end
function c49441499.spcost(e,tp,eg,ep,ev,re,r,rp,chk) function c49441499.spcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() end
......
...@@ -10,5 +10,5 @@ function c59380081.initial_effect(c) ...@@ -10,5 +10,5 @@ function c59380081.initial_effect(c)
c:RegisterEffect(e1) c:RegisterEffect(e1)
end end
function c59380081.target(e,c) function c59380081.target(e,c)
return c:IsStatus(STATUS_SUMMON_TURN+STATUS_FLIP_SUMMON_TURN) return c:IsStatus(STATUS_SUMMON_TURN+STATUS_FLIP_SUMMON_TURN+STATUS_SPSUMMON_TURN)
end end
...@@ -24,5 +24,5 @@ function c69296555.target(e,tp,eg,ep,ev,re,r,rp,chk) ...@@ -24,5 +24,5 @@ function c69296555.target(e,tp,eg,ep,ev,re,r,rp,chk)
e:GetHandler():SetHint(CHINT_RACE,rc) e:GetHandler():SetHint(CHINT_RACE,rc)
end end
function c69296555.atktg(e,c) function c69296555.atktg(e,c)
return c:IsStatus(STATUS_SUMMON_TURN+STATUS_FLIP_SUMMON_TURN) and c:IsRace(e:GetLabel()) return c:IsStatus(STATUS_SUMMON_TURN+STATUS_FLIP_SUMMON_TURN+STATUS_SPSUMMON_TURN) and c:IsRace(e:GetLabel())
end end
...@@ -15,5 +15,5 @@ function c95220856.initial_effect(c) ...@@ -15,5 +15,5 @@ function c95220856.initial_effect(c)
c:RegisterEffect(e2) c:RegisterEffect(e2)
end end
function c95220856.target(e,c) function c95220856.target(e,c)
return c:IsStatus(STATUS_SUMMON_TURN+STATUS_FLIP_SUMMON_TURN) return c:IsStatus(STATUS_SUMMON_TURN+STATUS_FLIP_SUMMON_TURN+STATUS_SPSUMMON_TURN)
end end
...@@ -135,7 +135,7 @@ STATUS_SPSUMMON_STEP =0x0080 --效果特召處理中 ...@@ -135,7 +135,7 @@ STATUS_SPSUMMON_STEP =0x0080 --效果特召處理中
STATUS_FORM_CHANGED =0x0100 --改变过表示形式 STATUS_FORM_CHANGED =0x0100 --改变过表示形式
STATUS_SUMMONING =0x0200 --召唤中 STATUS_SUMMONING =0x0200 --召唤中
STATUS_EFFECT_ENABLED =0x0400 --效果有效 STATUS_EFFECT_ENABLED =0x0400 --效果有效
STATUS_SUMMON_TURN =0x0800 --在本回合召喚/SET/特殊召喚 STATUS_SUMMON_TURN =0x0800 --在本回合召喚/SET
STATUS_DESTROY_CONFIRMED =0x1000 --破坏确定 STATUS_DESTROY_CONFIRMED =0x1000 --破坏确定
STATUS_LEAVE_CONFIRMED =0x2000 --連鎖處理完後送去墓地的魔法陷阱 STATUS_LEAVE_CONFIRMED =0x2000 --連鎖處理完後送去墓地的魔法陷阱
STATUS_BATTLE_DESTROYED =0x4000 --战斗破坏确定 STATUS_BATTLE_DESTROYED =0x4000 --战斗破坏确定
...@@ -154,6 +154,7 @@ STATUS_IS_PUBLIC =0x4000000 --公开展示 ...@@ -154,6 +154,7 @@ STATUS_IS_PUBLIC =0x4000000 --公开展示
STATUS_ACT_FROM_HAND =0x8000000 --從手牌发动 STATUS_ACT_FROM_HAND =0x8000000 --從手牌发动
STATUS_OPPO_BATTLE =0x10000000 --和對手的怪兽戰鬥 STATUS_OPPO_BATTLE =0x10000000 --和對手的怪兽戰鬥
STATUS_FLIP_SUMMON_TURN =0x20000000 --在本回合反转召唤 STATUS_FLIP_SUMMON_TURN =0x20000000 --在本回合反转召唤
STATUS_SPSUMMON_TURN =0x40000000 --在本回合特殊召唤
--Assume --Assume
ASSUME_CODE =1 ASSUME_CODE =1
ASSUME_TYPE =2 ASSUME_TYPE =2
......
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