Commit 3e5e6dca authored by POLYMER's avatar POLYMER

fix

parent 7465d3e8
......@@ -17,8 +17,8 @@ function cm.sptg(ct)
local c=e:GetHandler()
local g=Duel.GetReleaseGroup(tp,true):Filter(Card.IsLevelAbove,c,7)
if chk==0 then return #g>=ct and g:CheckSubGroup(cm.gfilter,ct,ct,tp) end
Duel.Hint(HINT_SELECTMSG,tp,e:GetDescription())
Duel.Hint(HINT_SELECTMSG,1-tp,e:GetDescription())
Duel.Hint(HINT_OPSELECTED,tp,e:GetDescription())
Duel.Hint(HINT_OPSELECTED,1-tp,e:GetDescription())
Duel.SetOperationInfo(0,CATEGORY_RELEASE,nil,ct,tp,LOCATION_HAND+LOCATION_MZONE)
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,c,1,0,0)
if ct==3 then
......
......@@ -21,9 +21,17 @@ function cm.initial_effect(c)
cm.global_check=true
local _Equip=Duel.Equip
Duel.Equip=function(p,c,...)
c:RegisterFlagEffect(m,RESET_CHAIN,0,1)
if not c:IsOnField() then c:RegisterFlagEffect(m,RESET_CHAIN,0,1) end
local res=_Equip(p,c,...)
c:ResetFlagEffect(m)
return res
end
local _CRegisterEffect=Card.RegisterEffect
function Card.RegisterEffect(c,e,bool)
local res=_CRegisterEffect(c,e,bool)
if e:GetCode()==EFFECT_EQUIP_LIMIT and c:GetFlagEffect(m)>0 then
c:ResetFlagEffect(m)
Duel.RaiseEvent(Group.FromCards(c),EVENT_CUSTOM+m,e,0,0,0,0)
end
return res
end
local e1=Effect.CreateEffect(c)
......@@ -59,7 +67,7 @@ function cm.costchk(e,c,tp,st)
return false
end
function cm.filter(c,e)
if not (c:IsOnField() and (c:IsFacedown() or c:IsStatus(STATUS_EFFECT_ENABLED) or c:GetFlagEffect(m)>0)) then return false end
if not (c:IsOnField() and (c:IsFacedown() or c:IsStatus(STATUS_EFFECT_ENABLED))) or c:GetFlagEffect(m)>0 then return false end
if e:GetCode()==EVENT_MOVE then
local b1,g1=Duel.CheckEvent(EVENT_SUMMON_SUCCESS,true)
local b2,g2=Duel.CheckEvent(EVENT_SPSUMMON_SUCCESS,true)
......@@ -73,7 +81,7 @@ function cm.descon(e,tp,eg,ep,ev,re,r,rp)
end
function cm.desop2(e,tp,eg,ep,ev,re,r,rp)
if (re and re:GetHandler():GetOriginalCode()==m) then return end
Duel.RaiseEvent(eg,EVENT_CUSTOM+m,re,r,rp,ep,ev)
if eg then Duel.RaiseEvent(eg,EVENT_CUSTOM+m,re,r,rp,ep,ev) end
end
function cm.descon3(e,tp,eg,ep,ev,re,r,rp)
return re:IsHasType(EFFECT_TYPE_ACTIVATE) and re:GetHandler():GetFieldID()==re:GetHandler():GetRealFieldID()
......@@ -83,7 +91,7 @@ function cm.desop3(e,tp,eg,ep,ev,re,r,rp)
end
function cm.activate(e,tp,eg,ep,ev,re,r,rp)
--if EVO_GAME then return end
--EVO_GAME=true
EVO_GAME=true
local c=e:GetHandler()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
......
......@@ -33,7 +33,7 @@ function cm.initial_effect(c)
cm.hand_effect[c]=e3
end
function cm.filter(c)
return c:GetOriginalType()&TYPE_LINK==0
return c:GetOriginalType()&TYPE_LINK==0 and not c:IsStatus(STATUS_BATTLE_DESTROYED)
end
function cm.SpiritReturnReg(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
......@@ -95,7 +95,7 @@ function cm.smfilter(c,e,tp,fg)
local eset2={c:IsHasEffect(EFFECT_LIMIT_SET_PROC)}
local eset3={c:IsHasEffect(EFFECT_SUMMON_PROC)}
local eset4={c:IsHasEffect(EFFECT_SET_PROC)}
local e1,e2=Effect.CreateEffect(c),Effect.CreateEffect(c)
local e1,e2=Effect.CreateEffect(e:GetHandler()),Effect.CreateEffect(e:GetHandler())
local _CheckTribute=Duel.CheckTribute
local _GetLocationCount=Duel.GetLocationCount
local _GetMZoneCount=Duel.GetMZoneCount
......
......@@ -29,7 +29,8 @@ function cm.initial_effect(c)
e3:SetTarget(cm.sumtg)
e3:SetOperation(cm.sumop)
c:RegisterEffect(e3)
cm.hand_effect=e3
cm.hand_effect=cm.hand_effect or {}
cm.hand_effect[c]=e3
end
function cm.filter(c)
return c:IsAbleToDeck() or c:IsAbleToHand()
......@@ -59,13 +60,13 @@ function cm.SpiritReturnReg(e,tp,eg,ep,ev,re,r,rp)
c:RegisterEffect(e2)
end
function cm.cpfilter(c,tp)
return c:GetOriginalType()&TYPE_LINK==0 and Duel.IsExistingMatchingCard(cm.cpfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,1,c,tp,c)
return c:GetOriginalType()&TYPE_LINK==0 and not c:IsStatus(STATUS_BATTLE_DESTROYED) and Duel.IsExistingMatchingCard(cm.cpfilter2,tp,LOCATION_MZONE,LOCATION_MZONE,1,c,tp,c)
end
function cm.cpfilter2(c,tp,tc)
local fg=Group.CreateGroup()
if c:IsFacedown() then fg:AddCard(tc) end
if tc:IsFacedown() then fg:AddCard(c) end
return c:GetOriginalType()&TYPE_LINK==0 and c:GetPosition()~=tc:GetPosition() and Duel.IsExistingMatchingCard(cm.smfilter,tp,LOCATION_HAND+LOCATION_MZONE,0,1,fg) and not fg:IsExists(function(c) return c:IsFaceup() and not c:IsCanTurnSet() end,1,nil)
return c:GetOriginalType()&TYPE_LINK==0 and not c:IsStatus(STATUS_BATTLE_DESTROYED) and c:GetPosition()~=tc:GetPosition() and Duel.IsExistingMatchingCard(cm.smfilter,tp,LOCATION_HAND+LOCATION_MZONE,0,1,fg) and not fg:IsExists(function(c) return c:IsFaceup() and not c:IsCanTurnSet() end,1,nil)
end
function cm.sumcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(cm.cpfilter,tp,LOCATION_MZONE,LOCATION_MZONE,1,nil,tp) and e:GetHandler():GetFlagEffect(m)==0 end
......
......@@ -118,6 +118,10 @@ end
function cm.ptcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsPreviousPosition(POS_FACEDOWN) and e:GetHandler():IsPreviousLocation(LOCATION_ONFIELD)
end
local _IsCanChangePosition=Card.IsCanChangePosition
function Card.IsCanChangePosition(c)
return _IsCanChangePosition(c) and not c:IsStatus(STATUS_BATTLE_DESTROYED)
end
function cm.pttg(e,tp,eg,ep,ev,re,r,rp,chk)
local cg=Duel.GetMatchingGroup(Card.IsCanChangePosition,tp,LOCATION_MZONE,0,nil)
if chk==0 then return #cg>0 end
......
......@@ -64,6 +64,10 @@ function cm.drtg(e,tp,eg,ep,ev,re,r,rp,chk)
local cg=Duel.GetMatchingGroup(Card.IsCanChangePosition,tp,0,LOCATION_MZONE,nil)
if chk==0 then return #cg>0 end
end
local _IsCanChangePosition=Card.IsCanChangePosition
function Card.IsCanChangePosition(c)
return _IsCanChangePosition(c) and not c:IsStatus(STATUS_BATTLE_DESTROYED)
end
function cm.drop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
local cg=Duel.GetMatchingGroup(Card.IsCanChangePosition,tp,0,LOCATION_MZONE,nil)
......
......@@ -69,7 +69,7 @@ function cm.condition(e,tp,eg,ep,ev,re,r,rp)
end
local _IsCanTurnSet=Card.IsCanTurnSet
function Card.IsCanTurnSet(c)
return (c:IsSSetable(true) and c:IsLocation(LOCATION_SZONE)) or ((_IsCanTurnSet(c) and not c:IsLocation(LOCATION_SZONE)))
return (c:IsSSetable(true) and c:IsLocation(LOCATION_SZONE)) or ((_IsCanTurnSet(c) and not c:IsLocation(LOCATION_SZONE) and not c:IsStatus(STATUS_BATTLE_DESTROYED)))
end
function cm.dsfilter(c)
return c:IsFaceup() and c:IsCanTurnSet()
......
--魔导飞行队 芙萝丝忒·诺娃
pnflpf=pnflpf or {}
function pnfl_prophecy_flight_initial(c)
PNFL_PROPHECY_FLIGHT_CHECK=true
PNFL_PROPHECY_FLIGHT_DEBUG=false
PNFL_PROPHECY_FLIGHT_OPERATION_PERMIT=true
PNFL_PROPHECY_FLIGHT_TACTIC_VIEW=false
pnflpf[0]=0
pnflpf[1]=0
pnflpf.coinsequence={}
local _TossCoin=Duel.TossCoin
local _SetCoinResult=Duel.SetCoinResult
function Duel.SetCoinResult(...)
local ct0=#pnflpf.coinsequence
local res0={Duel.GetCoinResult()}
if pnflpf.res and #res0>0 then
for i=1,#res0 do pnflpf.coinsequence[ct0+i]=res0[i] end
end
pnflpf.res=nil
_SetCoinResult(...)
end
function Duel.TossCoin(p,ct)
local ct0=#pnflpf.coinsequence
local res0={Duel.GetCoinResult()}
--before replaced by this coin, register last coin.
if pnflpf.res and #res0>0 then
for i=1,ct do pnflpf.coinsequence[ct0+i]=res0[i] end
end
pnflpf.res=res0
ct0=#pnflpf.coinsequence
local res={_TossCoin(p,ct)}
local ct1=#pnflpf.coinsequence
--if this coin isn't replaced, register it.
if pnflpf.res and ct0==ct1 then
for i=1,ct do pnflpf.coinsequence[ct1+i]=res[i] end
end
local str="实际投掷结果:"
for i=1,#res do
if res[i]==1 then str=str.."[表]" else str=str.."[里]" end
end
--Debug.Message(str)
pnflpf.res=nil
return table.unpack(res)
end
--[[function Duel.TossCoin(p,ct)
local dic={}
local ct0=#pnflpf.coinsequence
for i=1,ct do table.insert(pnflpf.coinsequence,2) end
local res={_TossCoin(p,ct)}
local bool1,bool2=true,true
while bool1 or bool2 do
local s0,s1=false,false
for _,r in ipairs(res) do if r==0 then s0=true end end
for _,r in ipairs(res) do if r==1 then s1=true end end
local b1=Duel.IsCanRemoveCounter(p,1,0,0x1972,1,REASON_EFFECT) and s0
local b2=Duel.IsCanRemoveCounter(p,1,0,0x1971,1,REASON_EFFECT) and s1
local off=1
local ops,opval={},{}
if b1 then
ops[off]=aux.Stringid(11451856,0)
opval[off]=0
off=off+1
end
if b2 then
ops[off]=aux.Stringid(11451856,1)
opval[off]=1
off=off+1
end
ops[off]=aux.Stringid(11451856,2)
opval[off]=2
if off==1 then
bool1=false
else
local op=Duel.SelectOption(p,table.unpack(ops))+1
local sel=opval[op]
if sel==0 then
Duel.RemoveCounter(p,1,0,0x1972,1,REASON_EFFECT)
for i,r in ipairs(res) do res[i]=1 end
elseif sel==1 then
Duel.RemoveCounter(p,1,0,0x1971,1,REASON_EFFECT)
for i,r in ipairs(res) do res[i]=0 end
else
bool1=false
end
end
local s0,s1=false,false
for _,r in ipairs(res) do if r==0 then s0=true end end
for _,r in ipairs(res) do if r==1 then s1=true end end
local b1=Duel.IsCanRemoveCounter(1-p,1,0,0x1972,1,REASON_EFFECT) and s0
local b2=Duel.IsCanRemoveCounter(1-p,1,0,0x1971,1,REASON_EFFECT) and s1
local off=1
local ops,opval={},{}
if b1 then
ops[off]=aux.Stringid(11451856,0)
opval[off]=0
off=off+1
end
if b2 then
ops[off]=aux.Stringid(11451856,1)
opval[off]=1
off=off+1
end
ops[off]=aux.Stringid(11451856,2)
opval[off]=2
if off==1 then
bool2=false
else
local op=Duel.SelectOption(1-p,table.unpack(ops))+1
local sel=opval[op]
if sel==0 then
Duel.RemoveCounter(1-p,1,0,0x1972,1,REASON_EFFECT)
for i,r in ipairs(res) do res[i]=1 end
elseif sel==1 then
Duel.RemoveCounter(1-p,1,0,0x1971,1,REASON_EFFECT)
for i,r in ipairs(res) do res[i]=0 end
else
bool2=false
end
end
end
for i=1,ct do pnflpf.coinsequence[ct0+i]=res[i] end
return table.unpack(res)
end--]]
--increase by Card.ReverseInDeck
local ge0=Effect.CreateEffect(c)
ge0:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
ge0:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
ge0:SetCode(EVENT_ADJUST)
ge0:SetCondition(function() return not pnfl_adjusting end)
ge0:SetOperation(pnflpf.resetop)
Duel.RegisterEffect(ge0,0)
--decrease by leaving from deck
local ge1=ge0:Clone()
ge1:SetCode(EVENT_MOVE)
Duel.RegisterEffect(ge1,0)
--tactic view
local ge4=Effect.CreateEffect(c)
ge4:SetDescription(aux.Stringid(11451851,4))
ge4:SetType(EFFECT_TYPE_FIELD)
ge4:SetCode(EFFECT_SPSUMMON_PROC_G)
ge4:SetRange(0xff)
ge4:SetOperation(pnflpf.debug)
c:RegisterEffect(ge4)
end
function pnflpf.resetop(e,tp,eg,ep,ev,re,r,rp)
local g0=Duel.GetMatchingGroup(Card.IsHasEffect,0,LOCATION_DECK,0,nil,11451851)
local g1=Duel.GetMatchingGroup(Card.IsHasEffect,1,LOCATION_DECK,0,nil,11451851)
local res0=pnflpf[0]~=#g0 and pnflpf[0]>0 and #g0>0
local res1=pnflpf[1]~=#g1 and pnflpf[1]>0 and #g1>0
pnflpf[0]=#g0
pnflpf[1]=#g1
if res0 or res1 then
if PNFL_PROPHECY_FLIGHT_DEBUG then Debug.Message("reset") end
if res0 then for tc in aux.Next(g0) do tc:ResetFlagEffect(11451851) end end
if res1 then for tc in aux.Next(g1) do tc:ResetFlagEffect(11451851) end end
Duel.Readjust()
end
end
function pnflpf.tdfilter(c)
return c:GetTurnID()==Duel.GetTurnCount()
end
function pnflpf.debug(e,tp,eg,ep,ev,re,r,rp)
if not PNFL_PROPHECY_FLIGHT_TACTIC_VIEW then
PNFL_PROPHECY_FLIGHT_TACTIC_VIEW=Duel.SelectYesNo(tp,aux.Stringid(11451851,3))
elseif PNFL_PROPHECY_FLIGHT_TACTIC_VIEW then
local opt=Duel.SelectOption(tp,aux.Stringid(11451851,4),aux.Stringid(11451851,5))
if opt==0 then
local g=Duel.GetMatchingGroup(Card.IsHasEffect,tp,LOCATION_DECK,0,nil,11451851)
local g1=g:Filter(pnflpf.tdfilter,nil)
local g2=g-g1
local tpg=Group.CreateGroup()
if #g1>0 then
Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(11451851,6))
Duel.DisableShuffleCheck()
Group.SelectUnselect(g1,tpg,tp,true,true,#g1,#g1)
end
if #g2>0 then
Duel.Hint(HINT_SELECTMSG,tp,aux.Stringid(11451851,7))
Duel.DisableShuffleCheck()
Group.SelectUnselect(g2,tpg,tp,true,true,#g2,#g2)
end
tpg:DeleteGroup()
else
PNFL_PROPHECY_FLIGHT_TACTIC_VIEW=false
end
end
if PNFL_PROPHECY_FLIGHT_OPERATION_PERMIT then
PNFL_PROPHECY_FLIGHT_OPERATION_PERMIT=not Duel.SelectYesNo(tp,aux.Stringid(11451851,8))
else
PNFL_PROPHECY_FLIGHT_OPERATION_PERMIT=Duel.SelectYesNo(tp,aux.Stringid(11451851,9))
end
end
--
local cm,m=GetID()
function cm.initial_effect(c)
if not PNFL_PROPHECY_FLIGHT_CHECK then
dofile("expansions/script/c11451851.lua")
pnfl_prophecy_flight_initial(c)
end
--check
......@@ -198,7 +389,7 @@ function cm.nnfilter(c,tc)
end
local _IsCanTurnSet=Card.IsCanTurnSet
function Card.IsCanTurnSet(c)
return (c:IsSSetable(true) and c:IsLocation(LOCATION_SZONE)) or ((_IsCanTurnSet(c) and not c:IsLocation(LOCATION_SZONE)))
return (c:IsSSetable(true) and c:IsLocation(LOCATION_SZONE)) or ((_IsCanTurnSet(c) and not c:IsLocation(LOCATION_SZONE) and not c:IsStatus(STATUS_BATTLE_DESTROYED)))
end
function cm.dsfilter(c)
return c:IsFaceup() and c:IsCanTurnSet() and not c:IsStatus(STATUS_BATTLE_DESTROYED)
......
......@@ -177,14 +177,14 @@ function cm.Peacecho(c,typ)
e9:SetOperation(cm.UpRegi)
c:RegisterEffect(e9)
end
GM_global_to_deck_check=true
cm.global_to_deck_check=true
function cm.ThirdPeacechotgrepfilter(c)
local tp=c:GetOwner()
return c.main_peacecho and (c:GetLeaveFieldDest()==0 and not c:IsHasEffect(EFFECT_TO_GRAVE_REDIRECT)) and c:GetDestination()==LOCATION_GRAVE and ((c:IsLocation(LOCATION_DECK) and (Duel.GetFieldGroup(tp,LOCATION_DECK,0):GetMinGroup(Card.GetSequence):GetFirst()~=c or c:IsControler(1-tp))) or (not c:IsLocation(LOCATION_DECK) and c:IsAbleToDeck()))
return c.main_peacecho and c:GetDestination()==LOCATION_GRAVE and ((c:IsLocation(LOCATION_DECK) and (Duel.GetFieldGroup(tp,LOCATION_DECK,0):GetMinGroup(Card.GetSequence):GetFirst()~=c or c:IsControler(1-tp))) or (not c:IsLocation(LOCATION_DECK) and c:IsAbleToDeck()))
end
function cm.ThirdPeacechotg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return GM_global_to_deck_check and eg:IsExists(cm.ThirdPeacechotgrepfilter,1,nil) end
GM_global_to_deck_check=false
if chk==0 then return cm.global_to_deck_check and eg:IsExists(cm.ThirdPeacechotgrepfilter,1,nil) end
cm.global_to_deck_check=false
for i,xp in ipairs({0,1}) do
local xyzg=eg:Filter(function(c,p)return c:GetOverlayGroup():IsExists(function(c,p)return c.main_peacecho and c:GetOwner()==p and c:IsAbleToDeck()end,1,nil,p)end,nil,xp)
if #xyzg>0 then Duel.RegisterFlagEffect(xp,53707600,RESET_CHAIN,0,0) end
......@@ -235,7 +235,7 @@ function cm.ThirdPeacechotg(e,tp,eg,ep,ev,re,r,rp,chk)
end
end
end
GM_global_to_deck_check=true
cm.global_to_deck_check=true
return true
end
function cm.ThirdPeacechoval(e,c)
......@@ -245,6 +245,7 @@ function cm.ThirdPeacechotdfilter(c)
return c:GetFlagEffect(53707500)~=0
end
function cm.ThirdPeacechotdop(e,tp,eg,ep,ev,re,r,rp)
e:Reset()
local g=Duel.GetMatchingGroup(cm.ThirdPeacechotdfilter,tp,LOCATION_DECK,0,nil)
if #g==0 then return end
if Duel.GetFlagEffect(tp,53707600)==0 then
......@@ -257,7 +258,6 @@ function cm.ThirdPeacechotdop(e,tp,eg,ep,ev,re,r,rp)
Duel.ResetFlagEffect(tp,53707600)
else Duel.RegisterFlagEffect(tp,53707700,RESET_CHAIN,0,0) end
Duel.ResetFlagEffect(tp,53707000)
e:Reset()
end
function cm.ThirdPeacechoxyztd(e,tp,eg,ep,ev,re,r,rp)
local g=eg:Filter(function(c)return c.main_peacecho and c:IsPreviousLocation(LOCATION_OVERLAY)end,nil)
......
......@@ -56,8 +56,8 @@ function c98920152.initial_effect(c)
Duel.RegisterEffect(ge1,0)
end
end
function c98920152.eqlimit(e,c)
return c:IsRace(RACE_MACHINE) or e:GetHandler():GetEquipTarget()==c
function c98920152.eqlimit(c)
return c:IsRace(RACE_MACHINE)
end
function c98920152.filter(c)
local ct1,ct2=c:GetUnionCount()
......
--机甲载体
function c98920478.initial_effect(c)
aux.EnableUnionAttribute(c,c98920478.eqlimit)
aux.EnableUnionAttribute(c,c98920478.ufilter)
c:SetSPSummonOnce(98920478)
c:EnableReviveLimit()
--link summon
......@@ -123,6 +123,6 @@ function c98920478.rdcon(e)
return Duel.GetAttackTarget()==nil
and c:GetEffectCount(EFFECT_DIRECT_ATTACK)<2 and Duel.GetFieldGroupCount(tp,0,LOCATION_MZONE)>0
end
function c98920478.eqlimit(e,c)
return c:IsRace(RACE_MACHINE) or e:GetHandler():GetEquipTarget()==c
function c98920478.ufilter(c)
return c:IsRace(RACE_MACHINE)
end
......@@ -146,8 +146,12 @@ function Auxiliary.PreloadUds()
end
local _IsCanTurnSet=Card.IsCanTurnSet
function Card.IsCanTurnSet(c,...)
return (c:IsLocation(LOCATION_SZONE) and c:IsSSetable(true)) or (not c:IsLocation(LOCATION_SZONE) and _IsCanTurnSet(c,...))
function Card.IsCanTurnSet(c)
return (c:IsSSetable(true) and c:IsLocation(LOCATION_SZONE)) or ((_IsCanTurnSet(c) and not c:IsLocation(LOCATION_SZONE) and not c:IsStatus(STATUS_BATTLE_DESTROYED)))
end
local _IsCanChangePosition=Card.IsCanChangePosition
function Card.IsCanChangePosition(c)
return _IsCanChangePosition(c) and not c:IsStatus(STATUS_BATTLE_DESTROYED)
end
local _IsTuner=Card.IsTuner
......
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