Commit 1fa5d011 authored by POLYMER's avatar POLYMER

fix

parent 61a3ee67
......@@ -78,6 +78,7 @@ function cm.regop(e,tp,eg,ep,ev,re,r,rp)
e3:SetTargetRange(LOCATION_MZONE,0)
e3:SetTarget(cm.eftg)
e3:SetLabelObject(e2)
e3:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e3,tp)
end
function cm.eftg(e,c)
......
......@@ -57,7 +57,7 @@ end
function s.spcon2(e,tp,eg,ep,ev,re,r,rp)
local bt=Duel.GetAttackTarget()
return bt and bt:IsControler(tp) and bt:IsSetCard(0x3f50)
return bt and bt:IsControler(tp) and bt:IsSetCard(0x3f50) and bt:IsFaceup()
end
function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk)
......
--半魔的管家
-- 半魔的管家
local s,id=GetID()
function s.initial_effect(c)
aux.AddXyzProcedure(c,aux.FilterBoolFunction(Card.IsSetCard,0x3f50),7,2,nil,nil,99)
c:EnableReviveLimit()
local e0=Effect.CreateEffect(c)
e0:SetDescription(aux.Stringid(id,0))
e0:SetType(EFFECT_TYPE_FIELD)
......@@ -15,35 +14,29 @@ function s.initial_effect(c)
e0:SetOperation(s.ovop)
e0:SetValue(SUMMON_TYPE_XYZ)
c:RegisterEffect(e0)
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_SINGLE)
e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e1:SetCode(EFFECT_CANNOT_BE_XYZ_MATERIAL)
e1:SetValue(1)
c:RegisterEffect(e1)
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(id,1))
e2:SetCategory(CATEGORY_REMOVE+CATEGORY_TOHAND)
e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
e2:SetCode(EVENT_SPSUMMON_SUCCESS)
e2:SetProperty(EFFECT_FLAG_DELAY+EFFECT_FLAG_CARD_TARGET)
e2:SetCountLimit(1,id)
e2:SetTarget(s.rmtg)
e2:SetOperation(s.rmop)
c:RegisterEffect(e2)
local e3=Effect.CreateEffect(c)
e3:SetDescription(aux.Stringid(id,2))
e3:SetCategory(CATEGORY_SPECIAL_SUMMON)
e3:SetType(EFFECT_TYPE_IGNITION)
e3:SetRange(LOCATION_MZONE)
e3:SetCountLimit(1,id+1)
e3:SetTarget(s.sptg)
e3:SetOperation(s.spop)
c:RegisterEffect(e3)
if not s.global_check then
s.global_check=true
local ge1=Effect.CreateEffect(c)
......@@ -53,11 +46,10 @@ function s.initial_effect(c)
Duel.RegisterEffect(ge1,0)
end
end
function s.checkop(e,tp,eg,ep,ev,re,r,rp)
Duel.RegisterFlagEffect(0,id,RESET_PHASE+PHASE_END,0,1)
Duel.RegisterFlagEffect(1,id,RESET_PHASE+PHASE_END,0,1)
end
function s.ovfilter(c,tp,xyzc)
return c:IsFaceup() and c:IsSetCard(0x3f50) and c:IsCanBeXyzMaterial(xyzc)
and Duel.GetLocationCountFromEx(tp,tp,c,xyzc)>0
......@@ -65,7 +57,8 @@ end
function s.ovcon(e,c)
if c==nil then return true end
local tp=c:GetControler()
return Duel.GetFlagEffect(0,id)>0
return Duel.GetFlagEffect(tp,id)>0
and Duel.GetFlagEffect(tp,id+1)==0
and Duel.IsExistingMatchingCard(s.ovfilter,tp,LOCATION_MZONE,0,1,nil,tp,c)
end
function s.ovtg(e,tp,eg,ep,ev,re,r,rp,chk,c)
......@@ -84,11 +77,11 @@ end
function s.ovop(e,tp,eg,ep,ev,re,r,rp,c,sg,og)
local mg=e:GetLabelObject()
if not mg then return end
Duel.RegisterFlagEffect(tp,id+1,RESET_PHASE+PHASE_END,EFFECT_FLAG_OATH,1)
c:SetMaterial(mg)
Duel.Overlay(c,mg)
mg:DeleteGroup()
end
function s.rmfilter(c)
return c:IsSetCard(0x3f50) and c:IsAbleToHand()
end
......@@ -112,7 +105,6 @@ function s.rmop(e,tp,eg,ep,ev,re,r,rp)
end
end
end
function s.spfilter(c,e,tp,check_earl)
if not (c:IsSetCard(0x3f50) and c:IsCanBeSpecialSummoned(e,0,tp,false,false)) then return false end
if c:IsLocation(LOCATION_DECK) then return check_earl end
......@@ -122,13 +114,14 @@ function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk)
local check_earl=Duel.IsExistingMatchingCard(Card.IsCode,tp,LOCATION_GRAVE,0,1,nil,17337413)
if chk==0 then
return Duel.GetLocationCount(tp,LOCATION_MZONE)>0
and Duel.CheckRemoveOverlayCard(tp,1,1,1,REASON_EFFECT)
and e:GetHandler():CheckRemoveOverlayCard(tp,1,REASON_EFFECT)
and Duel.IsExistingMatchingCard(s.spfilter,tp,LOCATION_HAND+LOCATION_DECK+LOCATION_REMOVED,0,1,nil,e,tp,check_earl)
end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_HAND+LOCATION_DECK+LOCATION_REMOVED)
end
function s.spop(e,tp,eg,ep,ev,re,r,rp)
if Duel.RemoveOverlayCard(tp,1,1,1,1,REASON_EFFECT)~=0 then
local c=e:GetHandler()
if c:IsRelateToEffect(e) and c:RemoveOverlayCard(tp,1,1,REASON_EFFECT)~=0 then
local check_earl=Duel.IsExistingMatchingCard(Card.IsCode,tp,LOCATION_GRAVE,0,1,nil,17337413)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.spfilter),tp,LOCATION_HAND+LOCATION_DECK+LOCATION_REMOVED,0,1,1,nil,e,tp,check_earl)
......
......@@ -3,9 +3,7 @@ local s,id=GetID()
function s.initial_effect(c)
aux.AddCodeList(c,17337400)
c:EnableReviveLimit()
aux.AddLinkProcedure(c,aux.FilterBoolFunction(Card.IsSetCard,0x3f50),2,4,s.lcheck)
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(id,0))
e1:SetCategory(CATEGORY_TOHAND+CATEGORY_DRAW+CATEGORY_TODECK)
......@@ -20,18 +18,15 @@ function s.initial_effect(c)
c:RegisterEffect(e1)
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e2:SetCode(EVENT_LEAVE_FIELD)
e2:SetRange(LOCATION_GRAVE)
e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_CONTINUOUS)
e2:SetCode(EVENT_TO_GRAVE)
e2:SetCondition(s.regcon)
e2:SetOperation(s.regop)
c:RegisterEffect(e2)
end
function s.lcheck(g,lc)
return g:IsExists(Card.IsFusionCode,1,nil,17337400)
end
function s.thfilter(c)
return (c:IsSetCard(0x3f50) or aux.IsCodeListed(c,17337400)) and c:IsAbleToHand() and c:IsFaceup()
end
......@@ -40,17 +35,14 @@ function s.thtg(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
local ct=Duel.GetFieldGroupCount(tp,LOCATION_MZONE,0)
if chk==0 then return ct>0 and Duel.IsExistingTarget(s.thfilter,tp,LOCATION_ONFIELD+LOCATION_GRAVE,0,1,nil)
and Duel.IsPlayerCanDraw(tp,ct) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RTOHAND)
local g=Duel.SelectTarget(tp,s.thfilter,tp,LOCATION_ONFIELD+LOCATION_GRAVE,0,1,1,nil)
Duel.SetOperationInfo(0,CATEGORY_TOHAND,g,1,0,0)
Duel.SetOperationInfo(0,CATEGORY_DRAW,nil,0,tp,ct)
end
function s.thop(e,tp,eg,ep,ev,re,r,rp)
local tc=Duel.GetFirstTarget()
if not (tc and tc:IsRelateToEffect(e)) then return end
local ct=Duel.GetFieldGroupCount(tp,LOCATION_MZONE,0)
if ct>0 and Duel.Draw(tp,ct,REASON_EFFECT)==ct then
Duel.ShuffleHand(tp)
......@@ -65,25 +57,18 @@ function s.thop(e,tp,eg,ep,ev,re,r,rp)
end
end
end
function s.vfilter(c,tp)
return c:IsPreviousControler(tp) and c:IsPreviousLocation(LOCATION_MZONE)
and (c:IsSetCard(0x3f50) or aux.IsCodeListed(c,17337400))
and c:IsReason(REASON_BATTLE+REASON_EFFECT)
and (not c:IsReason(REASON_EFFECT) or c:GetReasonPlayer()==1-tp)
end
function s.regcon(e,tp,eg,ep,ev,re,r,rp)
return eg:IsExists(s.vfilter,1,nil,tp) and Duel.GetFlagEffect(tp,id+1)==0
return e:GetHandler():IsReason(REASON_BATTLE+REASON_EFFECT)
end
function s.regop(e,tp,eg,ep,ev,re,r,rp)
if Duel.GetFlagEffect(tp,id+1)~=0 then return end
local c=e:GetHandler()
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetCode(EVENT_CHAIN_SOLVED)
e1:SetOperation(s.spop_step)
e1:SetReset(RESET_CHAIN)
e1:SetReset(RESET_CHAIN)
Duel.RegisterEffect(e1,tp)
local e2=Effect.CreateEffect(c)
e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e2:SetCode(EVENT_ADJUST)
......@@ -91,19 +76,24 @@ function s.regop(e,tp,eg,ep,ev,re,r,rp)
e2:SetReset(RESET_PHASE+PHASE_END)
Duel.RegisterEffect(e2,tp)
end
function s.vfilter(c,tp)
return c:IsPreviousPosition(POS_FACEUP) and c:IsPreviousControler(tp)
and c:IsPreviousLocation(LOCATION_MZONE)
and (c:IsSetCard(0x3f50) or aux.IsCodeListed(c,17337400))
and (c:IsReason(REASON_BATTLE) or (c:IsReason(REASON_EFFECT) and c:GetReasonPlayer()==1-tp))
end
function s.spop_step(e,tp,eg,ep,ev,re,r,rp)
if Duel.GetFlagEffect(tp,id)~=0 then
if Duel.GetFlagEffect(tp,id+1)~=0 then
e:Reset()
return
end
local g=Duel.GetMatchingGroup(s.vfilter,tp,LOCATION_GRAVE,LOCATION_GRAVE,nil,tp)
if #g==0 then return end
local c=e:GetOwner()
if c:IsLocation(LOCATION_GRAVE) and Duel.GetLocationCount(tp,LOCATION_MZONE)>0
and c:IsCanBeSpecialSummoned(e,0,tp,false,false) then
Duel.RegisterFlagEffect(tp,id+1,RESET_PHASE+PHASE_END,0,1)
Duel.Hint(HINT_CARD,0,id+1)
Duel.Hint(HINT_CARD,0,id)
Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP)
end
e:Reset()
......
......@@ -38,11 +38,13 @@ end
function c98920068.operation(e,tp,eg,ep,ev,re,r,rp)
local g=Duel.GetMatchingGroup(Card.IsAbleToHand,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,aux.ExceptThisCard(e))
local g2=Duel.GetFieldGroup(tp,0,LOCATION_ONFIELD)
local st=0
if g2:GetCount()==0 then st=1 end
if Duel.SendtoHand(g,nil,REASON_EFFECT) then
local og=Duel.GetOperatedGroup():Filter(Card.IsControler,nil,1-tp)
local cst=og:FilterCount(Card.IsLocation,nil,LOCATION_HAND)
local sg=Duel.GetMatchingGroup(c98920068.spfilter,tp,LOCATION_DECK+LOCATION_HAND+LOCATION_EXTRA+LOCATION_GRAVE,0,nil,e,tp)
if cst==#og and sg:GetCount()>0 and Duel.SelectYesNo(tp,aux.Stringid(98920068,1)) then
if not cst==#og and st=0 and sg:GetCount()>0 and Duel.SelectYesNo(tp,aux.Stringid(98920068,1)) then
Duel.BreakEffect()
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON)
local kg=sg:Select(tp,1,1,nil)
......
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