From 5a68c32a446c33281a82041e6fcaaeb08e9ffa91 Mon Sep 17 00:00:00 2001 From: salix5 Date: Sun, 29 Sep 2024 22:50:07 +0800 Subject: [PATCH 1/4] SD47+WPP5 --- c12172567.lua | 79 ++++++++++++++++++++++++++ c16699558.lua | 100 +++++++++++++++++++++++++++++++++ c17725109.lua | 123 +++++++++++++++++++++++++++++++++++++++++ c17947697.lua | 102 ++++++++++++++++++++++++++++++++++ c42097666.lua | 109 ++++++++++++++++++++++++++++++++++++ c43219114.lua | 59 ++++++++++++++++++++ c44175358.lua | 84 ++++++++++++++++++++++++++++ c48705086.lua | 61 +++++++++++++++++++++ c54332792.lua | 98 +++++++++++++++++++++++++++++++++ c58570206.lua | 122 +++++++++++++++++++++++++++++++++++++++++ c72782945.lua | 74 +++++++++++++++++++++++++ c80326401.lua | 99 +++++++++++++++++++++++++++++++++ c8170654.lua | 73 +++++++++++++++++++++++++ c85687952.lua | 122 +++++++++++++++++++++++++++++++++++++++++ c89604813.lua | 88 +++++++++++++++++++++++++++++ c93053159.lua | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++ 16 files changed, 1542 insertions(+) create mode 100644 c12172567.lua create mode 100644 c16699558.lua create mode 100644 c17725109.lua create mode 100644 c17947697.lua create mode 100644 c42097666.lua create mode 100644 c43219114.lua create mode 100644 c44175358.lua create mode 100644 c48705086.lua create mode 100644 c54332792.lua create mode 100644 c58570206.lua create mode 100644 c72782945.lua create mode 100644 c80326401.lua create mode 100644 c8170654.lua create mode 100644 c85687952.lua create mode 100644 c89604813.lua create mode 100644 c93053159.lua diff --git a/c12172567.lua b/c12172567.lua new file mode 100644 index 000000000..33daa3391 --- /dev/null +++ b/c12172567.lua @@ -0,0 +1,79 @@ +--Mind Castlin +local s,id,o=GetID() +function s.initial_effect(c) + --Synchro summon + aux.AddSynchroProcedure(c,nil,aux.NonTuner(nil),1) + c:EnableReviveLimit() + --swapcontorl1 + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_CONTROL) + e1:SetProperty(EFFECT_FLAG_CARD_TARGET) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_MZONE) + e1:SetCountLimit(1,id) + e1:SetTarget(s.target) + e1:SetOperation(s.operation) + c:RegisterEffect(e1) + --swapcontrol2 + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetCategory(CATEGORY_CONTROL) + e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) + e2:SetProperty(EFFECT_FLAG_DELAY) + e2:SetCode(EVENT_TO_GRAVE) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET) + e2:SetCountLimit(1,id+o) + e2:SetCondition(s.ctcon) + e2:SetTarget(s.cttg) + e2:SetOperation(s.ctop) + c:RegisterEffect(e2) +end +function s.swapfilter(c) + local tp=c:GetControler() + return c:IsAbleToChangeControler() and Duel.GetMZoneCount(tp,c,tp,LOCATION_REASON_CONTROL)>0 and c:IsFaceup() +end +function s.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsControler(1-tp) and s.swapfilter(chkc) end + if chk==0 then return e:GetHandler():IsAbleToChangeControler() + and Duel.GetMZoneCount(tp,e:GetHandler(),tp,LOCATION_REASON_CONTROL)>0 + and Duel.IsExistingTarget(s.swapfilter,tp,0,LOCATION_MZONE,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CONTROL) + local mon=Duel.SelectTarget(tp,s.swapfilter,tp,0,LOCATION_MZONE,1,1,nil) + mon:AddCard(e:GetHandler()) + Duel.SetOperationInfo(0,CATEGORY_CONTROL,mon,2,0,0) +end +function s.operation(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + local c=e:GetHandler() + if c:IsRelateToEffect(e) and tc and tc:IsRelateToEffect(e) then + Duel.SwapControl(c,tc) + end +end +function s.ctcon(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + return c:IsPreviousLocation(LOCATION_MZONE) and c:IsSummonType(SUMMON_TYPE_SYNCHRO) +end +function s.ctfilter(c) + local tp=c:GetControler() + return c:IsAbleToChangeControler() and Duel.GetMZoneCount(tp,c,tp,LOCATION_REASON_CONTROL)>0 and c:IsFaceup() +end +function s.cttg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return false end + if chk==0 then return Duel.IsExistingTarget(s.ctfilter,tp,0,LOCATION_MZONE,1,nil) + and Duel.IsExistingTarget(s.ctfilter,tp,LOCATION_MZONE,0,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CONTROL) + local g1=Duel.SelectTarget(tp,s.ctfilter,tp,0,LOCATION_MZONE,1,1,nil) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CONTROL) + local g2=Duel.SelectTarget(tp,s.ctfilter,tp,LOCATION_MZONE,0,1,1,nil) + g1:Merge(g2) + Duel.SetOperationInfo(0,CATEGORY_CONTROL,g1,2,0,0) +end +function s.ctop(e,tp,eg,ep,ev,re,r,rp) + local g=Duel.GetChainInfo(0,CHAININFO_TARGET_CARDS) + local a=g:GetFirst() + local b=g:GetNext() + if a:IsRelateToEffect(e) and b:IsRelateToEffect(e) then + Duel.SwapControl(a,b) + end +end \ No newline at end of file diff --git a/c16699558.lua b/c16699558.lua new file mode 100644 index 000000000..9fc3f76ef --- /dev/null +++ b/c16699558.lua @@ -0,0 +1,100 @@ +--藍眼の銀龍 +local s,id,o=GetID() +function s.initial_effect(c) + --xyz summon + aux.AddXyzProcedure(c,aux.FilterBoolFunction(Card.IsRace,RACE_DRAGON),8,2) + c:EnableReviveLimit() + --negate + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_DISABLE) + e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) + e1:SetCode(EVENT_SPSUMMON_SUCCESS) + e1:SetProperty(EFFECT_FLAG_DELAY) + e1:SetCountLimit(1,id) + e1:SetCondition(s.discon) + e1:SetTarget(s.distg) + e1:SetOperation(s.disop) + c:RegisterEffect(e1) + --cannot direct attack + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_CANNOT_DIRECT_ATTACK) + e2:SetCondition(s.dircon) + c:RegisterEffect(e2) + --spsummon + local e3=Effect.CreateEffect(c) + e3:SetDescription(aux.Stringid(id,1)) + e3:SetCategory(CATEGORY_SPECIAL_SUMMON+CATEGORY_ATKCHANGE) + e3:SetType(EFFECT_TYPE_IGNITION) + e3:SetRange(LOCATION_MZONE) + e3:SetProperty(EFFECT_FLAG_CARD_TARGET) + e3:SetCountLimit(1,id+o) + e3:SetCost(s.spcost) + e3:SetTarget(s.sptg) + e3:SetOperation(s.spop) + c:RegisterEffect(e3) +end +function s.discon(e,tp,eg,ep,ev,re,r,rp) + return e:GetHandler():IsSummonType(SUMMON_TYPE_XYZ) +end +function s.distg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.IsExistingMatchingCard(aux.NegateAnyFilter,tp,0,LOCATION_ONFIELD,1,nil) end + local g=Duel.GetMatchingGroup(aux.NegateAnyFilter,tp,0,LOCATION_ONFIELD,nil) + Duel.SetOperationInfo(0,CATEGORY_DISABLE,g,g:GetCount(),0,0) +end +function s.disop(e,tp,eg,ep,ev,re,r,rp) + local g=Duel.GetMatchingGroup(aux.NegateAnyFilter,tp,0,LOCATION_ONFIELD,nil) + for tc in aux.Next(g) do + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_DISABLE) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e1) + local e2=Effect.CreateEffect(e:GetHandler()) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_DISABLE_EFFECT) + e2:SetValue(RESET_TURN_SET) + e2:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e2) + if tc:IsType(TYPE_TRAPMONSTER) then + local e3=Effect.CreateEffect(e:GetHandler()) + e3:SetType(EFFECT_TYPE_SINGLE) + e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e3:SetCode(EFFECT_DISABLE_TRAPMONSTER) + e3:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e3) + end + end +end +function s.dircon(e) + return e:GetHandler():GetOverlayGroup():FilterCount(Card.IsType,nil,TYPE_NORMAL)==0 +end +function s.spcost(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return e:GetHandler():CheckRemoveOverlayCard(tp,1,REASON_COST) end + e:GetHandler():RemoveOverlayCard(tp,1,1,REASON_COST) +end +function s.spfilter(c,e,tp) + return c:IsFaceupEx() and c:IsType(TYPE_NORMAL) and c:IsCanBeSpecialSummoned(e,0,tp,false,false) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsLocation(LOCATION_GRAVE+LOCATION_REMOVED) and chkc:IsControler(tp) and s.spfilter(chkc,e,tp) end + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and Duel.IsExistingTarget(s.spfilter,tp,LOCATION_GRAVE+LOCATION_REMOVED,0,1,nil,e,tp) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local g=Duel.SelectTarget(tp,s.spfilter,tp,LOCATION_GRAVE+LOCATION_REMOVED,0,1,1,nil,e,tp) + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,g,1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local tc=Duel.GetFirstTarget() + if tc:IsRelateToEffect(e) and aux.NecroValleyFilter()(tc) and Duel.SpecialSummonStep(tc,0,tp,tp,false,false,POS_FACEUP) then + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_UPDATE_ATTACK) + e1:SetValue(1000) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e1) + end + Duel.SpecialSummonComplete() +end \ No newline at end of file diff --git a/c17725109.lua b/c17725109.lua new file mode 100644 index 000000000..93ebc3735 --- /dev/null +++ b/c17725109.lua @@ -0,0 +1,123 @@ +--青眼龍轟臨 +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,89631139) + --Activate + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetCountLimit(1,id) + e1:SetTarget(s.target) + e1:SetOperation(s.activate) + c:RegisterEffect(e1) + --fusion summon + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetCategory(CATEGORY_FUSION_SUMMON+CATEGORY_SPECIAL_SUMMON) + e2:SetType(EFFECT_TYPE_IGNITION) + e2:SetRange(LOCATION_GRAVE) + e2:SetCountLimit(1,id) + e2:SetCost(aux.bfgcost) + e2:SetTarget(s.fsptg) + e2:SetOperation(s.fspop) + c:RegisterEffect(e2) +end +function s.spfilter(c,e,tp) + local sp=Duel.IsExistingMatchingCard(aux.AND(Card.IsFaceup,Card.IsCode),tp,LOCATION_ONFIELD,0,1,nil,89631139) + return c:IsFaceupEx() and c:IsSetCard(0xdd) + and (sp or c:IsCode(89631139)) + and c:IsCanBeSpecialSummoned(e,0,tp,false,false,POS_FACEUP_DEFENSE) +end +function s.target(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and Duel.IsExistingMatchingCard(s.spfilter,tp,LOCATION_DECK+LOCATION_GRAVE+LOCATION_REMOVED,0,1,nil,e,tp) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_DECK+LOCATION_GRAVE+LOCATION_REMOVED) +end +function s.activate(e,tp,eg,ep,ev,re,r,rp) + if Duel.GetLocationCount(tp,LOCATION_MZONE)<=0 then return end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.spfilter),tp,LOCATION_DECK+LOCATION_GRAVE+LOCATION_REMOVED,0,1,1,nil,e,tp) + if g:GetCount()>0 then + Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP_DEFENSE) + end + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) + e1:SetTargetRange(1,0) + e1:SetTarget(s.splimit) + e1:SetReset(RESET_PHASE+PHASE_END) + Duel.RegisterEffect(e1,tp) +end +function s.splimit(e,c) + return not c:IsRace(RACE_DRAGON) and c:IsLocation(LOCATION_EXTRA) +end +function s.filter1(c,e) + return not c:IsImmuneToEffect(e) +end +function s.filter2(c,e,tp,m,f,chkf) + return c:IsType(TYPE_FUSION) and (not f or f(c)) + and c:IsCanBeSpecialSummoned(e,SUMMON_TYPE_FUSION,tp,false,false) and c:CheckFusionMaterial(m,nil,chkf) +end +function s.fcheck(tp,sg,fc) + return sg:IsExists(Card.IsSetCard,1,nil,0xdd) +end +function s.fsptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then + local chkf=tp + local mg1=Duel.GetFusionMaterial(tp) + aux.FCheckAdditional=s.fcheck + local res=Duel.IsExistingMatchingCard(s.filter2,tp,LOCATION_EXTRA,0,1,nil,e,tp,mg1,nil,chkf) + aux.FCheckAdditional=nil + if not res then + local ce=Duel.GetChainMaterial(tp) + if ce~=nil then + local fgroup=ce:GetTarget() + local mg2=fgroup(ce,e,tp) + local mf=ce:GetValue() + res=Duel.IsExistingMatchingCard(s.filter2,tp,LOCATION_EXTRA,0,1,nil,e,tp,mg2,mf,chkf) + end + end + return res + end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_EXTRA) +end +function s.fspop(e,tp,eg,ep,ev,re,r,rp) + local chkf=tp + local mg1=Duel.GetFusionMaterial(tp):Filter(s.filter1,nil,e) + aux.FCheckAdditional=s.fcheck + local sg1=Duel.GetMatchingGroup(s.filter2,tp,LOCATION_EXTRA,0,nil,e,tp,mg1,nil,chkf) + aux.FCheckAdditional=nil + local mg2=nil + local sg2=nil + local ce=Duel.GetChainMaterial(tp) + if ce~=nil then + local fgroup=ce:GetTarget() + mg2=fgroup(ce,e,tp) + local mf=ce:GetValue() + sg2=Duel.GetMatchingGroup(s.filter2,tp,LOCATION_EXTRA,0,nil,e,tp,mg2,mf,chkf) + end + if sg1:GetCount()>0 or (sg2~=nil and sg2:GetCount()>0) then + local sg=sg1:Clone() + if sg2 then sg:Merge(sg2) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local tg=sg:Select(tp,1,1,nil) + local tc=tg:GetFirst() + if sg1:IsContains(tc) and (sg2==nil or not sg2:IsContains(tc) or ce and not Duel.SelectYesNo(tp,ce:GetDescription())) then + aux.FCheckAdditional=s.fcheck + local mat1=Duel.SelectFusionMaterial(tp,tc,mg1,nil,chkf) + aux.FCheckAdditional=nil + tc:SetMaterial(mat1) + Duel.SendtoGrave(mat1,REASON_EFFECT+REASON_MATERIAL+REASON_FUSION) + Duel.BreakEffect() + Duel.SpecialSummon(tc,SUMMON_TYPE_FUSION,tp,tp,false,false,POS_FACEUP) + elseif ce then + local mat2=Duel.SelectFusionMaterial(tp,tc,mg2,nil,chkf) + local fop=ce:GetOperation() + fop(ce,e,tp,tc,mat2) + end + tc:CompleteProcedure() + end +end diff --git a/c17947697.lua b/c17947697.lua new file mode 100644 index 000000000..99199cd24 --- /dev/null +++ b/c17947697.lua @@ -0,0 +1,102 @@ +--白き乙女 +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,89631139,62089826) + --same effect send this card to grave and spsummon another card check + local e0=aux.AddThisCardInGraveAlreadyCheck(c) + --set + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_HAND+LOCATION_MZONE) + e1:SetCountLimit(1,id) + e1:SetCost(s.pcost) + e1:SetTarget(s.ptg) + e1:SetOperation(s.pop) + c:RegisterEffect(e1) + --spsummon + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetCategory(CATEGORY_SPECIAL_SUMMON) + e2:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) + e2:SetProperty(EFFECT_FLAG_DELAY) + e2:SetCode(EVENT_SPSUMMON_SUCCESS) + e2:SetRange(LOCATION_GRAVE) + e2:SetCountLimit(1,id+o) + e2:SetLabelObject(e0) + e2:SetCondition(s.spcon) + e2:SetTarget(s.sptg) + e2:SetOperation(s.spop) + c:RegisterEffect(e2) + --spsummon + local e3=Effect.CreateEffect(c) + e3:SetDescription(aux.Stringid(id,2)) + e3:SetCategory(CATEGORY_SPECIAL_SUMMON) + e3:SetType(EFFECT_TYPE_QUICK_O) + e3:SetRange(LOCATION_MZONE) + e3:SetCode(EVENT_BECOME_TARGET) + e3:SetCountLimit(1,id+o*2) + e3:SetCondition(s.spcon2) + e3:SetTarget(s.sptg2) + e3:SetOperation(s.spop2) + c:RegisterEffect(e3) + local e4=e3:Clone() + e4:SetCode(EVENT_BE_BATTLE_TARGET) + c:RegisterEffect(e4) +end +function s.pcost(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return e:GetHandler():IsAbleToGraveAsCost() and e:GetHandler():IsAbleToGraveAsCost() end + Duel.SendtoGrave(e:GetHandler(),REASON_COST) +end +function s.pfilter(c,tp) + return c:IsCode(62089826) + and not c:IsForbidden() and c:CheckUniqueOnField(tp) +end +function s.ptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_SZONE)>0 + and Duel.IsExistingMatchingCard(s.pfilter,tp,LOCATION_DECK+LOCATION_HAND+LOCATION_GRAVE,0,1,nil,tp) end +end +function s.pop(e,tp,eg,ep,ev,re,r,rp) + if Duel.GetLocationCount(tp,LOCATION_SZONE)<=0 then return end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOFIELD) + local tc=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.pfilter),tp,LOCATION_DECK+LOCATION_HAND+LOCATION_GRAVE,0,1,1,nil,tp):GetFirst() + if tc then Duel.MoveToField(tc,tp,tp,LOCATION_SZONE,POS_FACEUP,true) end +end +function s.cfilter(c,tp,se) + return c:IsFaceup() and c:IsSummonPlayer(tp) and c:IsCode(89631139) + and (se==nil or c:GetReasonEffect()~=se) +end +function s.spcon(e,tp,eg,ep,ev,re,r,rp) + local se=e:GetLabelObject():GetLabelObject() + return eg:IsExists(s.cfilter,1,nil,tp,se) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if not c:IsRelateToEffect(e) or not aux.NecroValleyFilter()(c) then return end + Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP) +end +function s.spcon2(e,tp,eg,ep,ev,re,r,rp) + return eg:IsContains(e:GetHandler()) +end +function s.spfilter(c,e,tp) + return (c:IsCode(89631139) or c:IsLevel(1) and c:IsType(TYPE_TUNER) and c:IsAttribute(ATTRIBUTE_LIGHT)) + and c:IsCanBeSpecialSummoned(e,0,tp,false,false) +end +function s.sptg2(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and Duel.IsExistingMatchingCard(s.spfilter,tp,LOCATION_GRAVE,0,1,nil,e,tp) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_GRAVE) +end +function s.spop2(e,tp,eg,ep,ev,re,r,rp) + if Duel.GetLocationCount(tp,LOCATION_MZONE)<=0 then return end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.spfilter),tp,LOCATION_GRAVE,0,1,1,nil,e,tp) + if g:GetCount()>0 then + Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP) + end +end \ No newline at end of file diff --git a/c42097666.lua b/c42097666.lua new file mode 100644 index 000000000..2f5043fa7 --- /dev/null +++ b/c42097666.lua @@ -0,0 +1,109 @@ +--青き眼の精霊 +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,24382602) + --link summon + aux.AddLinkProcedure(c,s.mfilter,1,1) + c:EnableReviveLimit() + --to hand or grave + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH+CATEGORY_TOGRAVE) + e1:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) + e1:SetProperty(EFFECT_FLAG_DELAY) + e1:SetCode(EVENT_SPSUMMON_SUCCESS) + e1:SetCountLimit(1,id) + e1:SetCondition(s.condition) + e1:SetTarget(s.target) + e1:SetOperation(s.operation) + c:RegisterEffect(e1) + --splimit + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_FIELD) + e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e2:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) + e2:SetRange(LOCATION_MZONE) + e2:SetTargetRange(1,0) + e2:SetTarget(s.splimit) + c:RegisterEffect(e2) + --spsummon + 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+o) + e3:SetCost(s.spcost) + e3:SetTarget(s.sptg) + e3:SetOperation(s.spop) + c:RegisterEffect(e3) +end +function s.mfilter(c) + return (c:IsLinkRace(RACE_DRAGON) or c:IsLinkRace(RACE_SPELLCASTER)) and c:IsLevelBelow(4) +end +function s.condition(e,tp,eg,ep,ev,re,r,rp) + return e:GetHandler():IsSummonType(SUMMON_TYPE_LINK) +end +function s.cfilter(c) + return c:IsCode(24382602) and (c:IsAbleToHand() or c:IsAbleToGrave()) +end +function s.target(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.IsExistingMatchingCard(s.cfilter,tp,LOCATION_DECK,0,1,nil) end + Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK) + Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,nil,1,tp,LOCATION_DECK) +end +function s.operation(e,tp,eg,ep,ev,re,r,rp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_OPERATECARD) + local g=Duel.SelectMatchingCard(tp,s.cfilter,tp,LOCATION_DECK,0,1,1,nil) + if g:GetCount()>0 then + local tc=g:GetFirst() + if tc:IsAbleToHand() and (not tc:IsAbleToGrave() or Duel.SelectOption(tp,1190,1191)==0) then + Duel.SendtoHand(tc,nil,REASON_EFFECT) + Duel.ConfirmCards(1-tp,tc) + else + Duel.SendtoGrave(tc,REASON_EFFECT) + end + end +end +function s.splimit(e,c,sump,sumtype,sumpos,targetp) + return not c:IsRace(RACE_DRAGON) +end +function s.spcost(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return e:GetHandler():IsReleasable() end + Duel.Release(e:GetHandler(),REASON_COST) +end +function s.spfilter(c,e,tp) + return c:IsSetCard(0xdd) and c:IsCanBeSpecialSummoned(e,0,tp,false,false) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetMZoneCount(tp,e:GetHandler())>0 + and Duel.IsExistingMatchingCard(s.spfilter,tp,LOCATION_GRAVE+LOCATION_HAND,0,1,nil,e,tp) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_GRAVE+LOCATION_HAND) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + if Duel.GetLocationCount(tp,LOCATION_MZONE)<=0 then return end + if Duel.GetMatchingGroupCount(aux.NecroValleyFilter(s.spfilter),tp,LOCATION_GRAVE+LOCATION_HAND,0,nil,e,tp)==0 then return end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local c=e:GetHandler() + local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.spfilter),tp,LOCATION_GRAVE+LOCATION_HAND,0,1,1,nil,e,tp) + local tc=g:GetFirst() + if Duel.SpecialSummonStep(tc,0,tp,tp,false,false,POS_FACEUP) and tc:IsSummonLocation(LOCATION_GRAVE) and tc:IsType(TYPE_EFFECT) then + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_DISABLE) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e1) + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_DISABLE_EFFECT) + e2:SetValue(RESET_TURN_SET) + e2:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e2) + local e3=Effect.CreateEffect(c) + e3:SetType(EFFECT_TYPE_SINGLE) + e3:SetCode(EFFECT_CANNOT_ATTACK) + e3:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e3) + end + Duel.SpecialSummonComplete() +end \ No newline at end of file diff --git a/c43219114.lua b/c43219114.lua new file mode 100644 index 000000000..073a65d9f --- /dev/null +++ b/c43219114.lua @@ -0,0 +1,59 @@ +--白き龍の威光 +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,89631139) + --destroy + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_DESTROY) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetCountLimit(1,id) + e1:SetHintTiming(0,TIMINGS_CHECK_MONSTER+TIMING_END_PHASE) + e1:SetTarget(s.target) + e1:SetOperation(s.activate) + c:RegisterEffect(e1) + --spsummon + local e2=aux.AddRitualProcEqual2(c,nil,nil,nil,s.mfilter,true) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetType(EFFECT_TYPE_QUICK_O) + e2:SetCode(EVENT_FREE_CHAIN) + e2:SetCountLimit(1,id+o) + e2:SetHintTiming(0,TIMING_END_PHASE) + e2:SetRange(LOCATION_GRAVE) + e2:SetCost(aux.bfgcost) + c:RegisterEffect(e2) +end +function s.chkfilter(c) + return c:IsFaceupEx() and c:IsCode(89631139) +end +function s.target(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.IsExistingMatchingCard(s.chkfilter,tp,LOCATION_HAND+LOCATION_GRAVE+LOCATION_MZONE,0,1,nil) + and Duel.IsExistingMatchingCard(nil,tp,0,LOCATION_ONFIELD,1,nil) end + local g=Duel.GetMatchingGroup(nil,tp,0,LOCATION_ONFIELD,nil) + Duel.SetOperationInfo(0,CATEGORY_DESTROY,g,1,0,0) +end +function s.activate(e,tp,eg,ep,ev,re,r,rp) + local dg=Duel.GetMatchingGroup(nil,tp,0,LOCATION_ONFIELD,nil) + local g=Duel.GetMatchingGroup(s.chkfilter,tp,LOCATION_HAND+LOCATION_GRAVE+LOCATION_MZONE,0,nil) + local ct=math.min(3,math.min(dg:GetCount(),g:GetCount())) + if ct==0 then return end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_CONFIRM) + local rg=g:Select(tp,1,ct,nil) + if rg:GetCount()>0 then + local hg=rg:Filter(Card.IsLocation,nil,LOCATION_HAND) + local og=rg-hg + Duel.ConfirmCards(1-tp,hg) + Duel.HintSelection(og) + if hg:GetCount()>=1 then + Duel.ShuffleHand(tp) + end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY) + local sg=dg:Select(tp,rg:GetCount(),rg:GetCount(),nil) + Duel.HintSelection(sg) + Duel.Destroy(sg,REASON_EFFECT) + end +end +function s.mfilter(c,e,tp,chk) + return (not chk or c~=e:GetHandler()) and c:IsCode(89631139) +end \ No newline at end of file diff --git a/c44175358.lua b/c44175358.lua new file mode 100644 index 000000000..70c871f98 --- /dev/null +++ b/c44175358.lua @@ -0,0 +1,84 @@ +--分裂するプラナリア +local s,id,o=GetID() +function s.initial_effect(c) + --special summon + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_MZONE) + e1:SetCountLimit(1,id) + e1:SetCost(aux.bfgcost) + e1:SetTarget(s.sptg) + e1:SetOperation(s.spop) + c:RegisterEffect(e1) +end +function s.filter(c,e,tp) + return c:IsLevel(3) and c:IsRace(RACE_INSECT) and c:IsCanBeSpecialSummoned(e,0,tp,false,false) +end +function s.fselect(g) + return g:GetClassCount(Card.GetCode)==1 +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + local g=Duel.GetMatchingGroup(s.filter,tp,LOCATION_DECK,0,nil,e,tp) + if chk==0 then return not Duel.IsPlayerAffectedByEffect(tp,59822133) + and Duel.GetMZoneCount(tp,e:GetHandler())>1 + and g:CheckSubGroup(s.fselect,2,2) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,2,tp,LOCATION_DECK) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + if Duel.IsPlayerAffectedByEffect(tp,59822133) then return end + if Duel.GetLocationCount(tp,LOCATION_MZONE)<2 then return end + local c=e:GetHandler() + local g=Duel.GetMatchingGroup(s.filter,tp,LOCATION_DECK,0,nil,e,tp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local sg=g:SelectSubGroup(tp,s.fselect,false,2,2) + if sg:GetCount()==2 then + local fid=e:GetHandler():GetFieldID() + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + for tc in aux.Next(sg) do + Duel.SpecialSummonStep(tc,0,tp,tp,false,false,POS_FACEUP) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_DISABLE) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e1) + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_DISABLE_EFFECT) + e2:SetValue(RESET_TURN_SET) + e2:SetReset(RESET_EVENT+RESETS_STANDARD) + tc:RegisterEffect(e2) + tc:RegisterFlagEffect(id,RESET_EVENT+RESETS_STANDARD,0,1,fid) + end + Duel.SpecialSummonComplete() + sg:KeepAlive() + local e3=Effect.CreateEffect(c) + e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + e3:SetCode(EVENT_PHASE+PHASE_END) + e3:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE) + e3:SetCountLimit(1) + e3:SetLabel(fid) + e3:SetLabelObject(sg) + e3:SetCondition(s.descon) + e3:SetOperation(s.desop) + Duel.RegisterEffect(e3,tp) + end +end +function s.desfilter(c,fid) + return c:GetFlagEffectLabel(id)==fid +end +function s.descon(e,tp,eg,ep,ev,re,r,rp) + local g=e:GetLabelObject() + if not g:IsExists(s.desfilter,1,nil,e:GetLabel()) then + g:DeleteGroup() + e:Reset() + return false + else return true end +end +function s.desop(e,tp,eg,ep,ev,re,r,rp) + local g=e:GetLabelObject() + local tg=g:Filter(s.desfilter,nil,e:GetLabel()) + Duel.Remove(tg,POS_FACEUP,REASON_EFFECT) +end + diff --git a/c48705086.lua b/c48705086.lua new file mode 100644 index 000000000..00dc158b2 --- /dev/null +++ b/c48705086.lua @@ -0,0 +1,61 @@ +--玲瓏竜クンツァイド +local s,id,o=GetID() +function s.initial_effect(c) + --spsummon + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_TOGRAVE+CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_HAND) + e1:SetCountLimit(1,id) + e1:SetTarget(s.sptg) + e1:SetOperation(s.spop) + c:RegisterEffect(e1) + --spsummon + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetCategory(CATEGORY_SPECIAL_SUMMON) + e2:SetType(EFFECT_TYPE_IGNITION) + e2:SetRange(LOCATION_GRAVE) + e2:SetCountLimit(1,id) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET) + e2:SetCost(aux.bfgcost) + e2:SetTarget(s.sptg2) + e2:SetOperation(s.spop2) + c:RegisterEffect(e2) +end +function s.tgfilter(c) + return c:IsLevelAbove(7) and c:IsType(TYPE_NORMAL) and c:IsAbleToGrave() +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + local c=e:GetHandler() + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and c:IsCanBeSpecialSummoned(e,0,tp,false,false) + and Duel.IsExistingMatchingCard(s.tgfilter,tp,LOCATION_DECK+LOCATION_HAND,0,1,c) end + Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,nil,1,tp,LOCATION_DECK+LOCATION_HAND) + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,c,1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local tc=Duel.SelectMatchingCard(tp,s.tgfilter,tp,LOCATION_DECK+LOCATION_HAND,0,1,1,aux.ExceptThisCard(e)):GetFirst() + if tc and Duel.SendtoGrave(tc,REASON_EFFECT) and tc:IsLocation(LOCATION_GRAVE) and c:IsRelateToEffect(e) then + Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP) + end +end +function s.spfilter(c,e,tp) + return c:IsType(TYPE_NORMAL) and c:IsCanBeSpecialSummoned(e,0,tp,false,false,POS_FACEUP_DEFENSE) +end +function s.sptg2(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsLocation(LOCATION_GRAVE) and chkc:IsControler(tp) and s.spfilter(chkc,e,tp) end + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and Duel.IsExistingTarget(s.spfilter,tp,LOCATION_GRAVE,0,1,e:GetHandler(),e,tp) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local g=Duel.SelectTarget(tp,s.spfilter,tp,LOCATION_GRAVE,0,1,1,nil,e,tp) + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,g,1,0,0) +end +function s.spop2(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + if tc:IsRelateToEffect(e) and aux.NecroValleyFilter()(tc) then + Duel.SpecialSummon(tc,0,tp,tp,false,false,POS_FACEUP_DEFENSE) + end +end \ No newline at end of file diff --git a/c54332792.lua b/c54332792.lua new file mode 100644 index 000000000..718aaf56a --- /dev/null +++ b/c54332792.lua @@ -0,0 +1,98 @@ +--ネオ・カイザ・シーホース +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,89631139) + --special summon + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_HAND) + e1:SetCountLimit(1,id) + e1:SetCondition(s.spcon) + e1:SetTarget(s.sptg) + e1:SetOperation(s.spop) + c:RegisterEffect(e1) + --level change + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET) + e2:SetType(EFFECT_TYPE_IGNITION) + e2:SetRange(LOCATION_MZONE) + e2:SetCountLimit(1,id+o) + e2:SetTarget(s.lvtg) + e2:SetOperation(s.lvop) + c:RegisterEffect(e2) + --tograve + local e3=Effect.CreateEffect(c) + e3:SetDescription(aux.Stringid(id,2)) + e3:SetCategory(CATEGORY_TOGRAVE) + e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) + e3:SetProperty(EFFECT_FLAG_DELAY) + e3:SetCode(EVENT_TO_GRAVE) + e3:SetCountLimit(1,id+o*2) + e3:SetCondition(s.tgcon) + e3:SetTarget(s.tgtg) + e3:SetOperation(s.tgop) + c:RegisterEffect(e3) +end +function s.cfilter(c) + return c:IsFaceup() and c:IsCode(89631139) +end +function s.spcon(e,tp,eg,ep,ev,re,r,rp) + return Duel.IsExistingMatchingCard(s.cfilter,tp,LOCATION_ONFIELD,0,1,nil) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if not c:IsRelateToEffect(e) then return end + Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP) +end +function s.filter(c) + return c:IsFaceup() and c:IsLevelAbove(1) and c:IsAttribute(ATTRIBUTE_LIGHT) and c:IsType(TYPE_TUNER) +end +function s.lvtg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_MZONE) and s.filter(chkc) end + if chk==0 then return Duel.IsExistingTarget(s.filter,tp,LOCATION_MZONE,0,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP) + local g=Duel.SelectTarget(tp,s.filter,tp,LOCATION_MZONE,0,1,1,nil) +end +function s.lvop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local tc=Duel.GetFirstTarget() + if tc:IsFaceup() and tc:IsType(TYPE_MONSTER) and tc:IsRelateToEffect(e) then + local op=0 + if tc:IsLevel(1) then op=1 + else op=aux.SelectFromOptions(tp, + {true,aux.Stringid(id,3),1}, + {true,aux.Stringid(id,4),-1}) + end + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_UPDATE_LEVEL) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + e1:SetValue(op) + tc:RegisterEffect(e1) + end +end +function s.tgcon(e,tp,eg,ep,ev,re,r,rp) + return e:GetHandler():IsPreviousLocation(LOCATION_ONFIELD) +end +function s.tgfilter(c) + return (c:IsSetCard(0xdd) or aux.IsCodeListed(c,89631139)) and c:IsAbleToGrave() and not c:IsCode(id) and c:IsType(TYPE_MONSTER) +end +function s.tgtg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.IsExistingMatchingCard(s.tgfilter,tp,LOCATION_DECK,0,1,nil) end + Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,nil,1,tp,LOCATION_DECK) +end +function s.tgop(e,tp,eg,ep,ev,re,r,rp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOGRAVE) + local g=Duel.SelectMatchingCard(tp,s.tgfilter,tp,LOCATION_DECK,0,1,1,nil) + if g:GetCount()>0 then + Duel.SendtoGrave(g,REASON_EFFECT) + end +end \ No newline at end of file diff --git a/c58570206.lua b/c58570206.lua new file mode 100644 index 000000000..8321a874f --- /dev/null +++ b/c58570206.lua @@ -0,0 +1,122 @@ +--Heavy Polymerization +local s,id,o=GetID() +function s.initial_effect(c) + --Activate + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON+CATEGORY_FUSION_SUMMON) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetTarget(s.target) + e1:SetOperation(s.activate) + c:RegisterEffect(e1) +end +s.fusion_effect=true +function s.fcheck1(ct) + return function(tp,sg,fc) + if ct>0 and sg:FilterCount(Card.IsLocation,nil,LOCATION_EXTRA)>ct then + return false + end + return true + end + +end +function s.fcheck2(tp,sg,fc) + return sg:GetCount()>=3 +end +function s.filter0(c) + return c:IsType(TYPE_MONSTER) and c:IsCanBeFusionMaterial() and c:IsAbleToRemove() +end +function s.filter2(c,e,tp,m,f,chkf) + return c:IsType(TYPE_FUSION) and (not f or f(c)) + and c:IsCanBeSpecialSummoned(e,SUMMON_TYPE_FUSION,tp,false,false) and c:CheckFusionMaterial(m,nil,chkf) +end +function s.target(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then + local chkf=tp + local mg=Duel.GetFusionMaterial(tp):Filter(aux.NOT(Card.IsImmuneToEffect),nil,e) + local ct=Duel.GetFieldGroupCount(tp,0,LOCATION_MZONE) + if ct>0 then + local mg2=Duel.GetMatchingGroup(s.filter0,tp,LOCATION_EXTRA,0,nil) + if mg2:GetCount()>0 then + mg:Merge(mg2) + end + end + aux.FCheckAdditional=s.fcheck1(ct) + aux.FGoalCheckAdditional=s.fcheck2 + local res=Duel.IsExistingMatchingCard(s.filter2,tp,LOCATION_EXTRA,0,1,nil,e,tp,mg,nil,chkf) + aux.FCheckAdditional=nil + aux.FGoalCheckAdditional=nil + if not res then + local ce=Duel.GetChainMaterial(tp) + if ce~=nil then + local fgroup=ce:GetTarget() + local mg3=fgroup(ce,e,tp) + local mf=ce:GetValue() + res=Duel.IsExistingMatchingCard(s.filter2,tp,LOCATION_EXTRA,0,1,nil,e,tp,mg3,mf,chkf) + end + end + return res + end +end +function s.activate(e,tp,eg,ep,ev,re,r,rp) + local chkf=tp + local mg1=Duel.GetFusionMaterial(tp):Filter(aux.NOT(Card.IsImmuneToEffect),nil,e) + local ct=Duel.GetFieldGroupCount(tp,0,LOCATION_MZONE) + if ct>0 then + local mg2=Duel.GetMatchingGroup(s.filter0,tp,LOCATION_EXTRA,0,nil) + if mg2:GetCount()>0 then + mg1:Merge(mg2) + end + end + aux.FCheckAdditional=s.fcheck1(ct) + aux.FGoalCheckAdditional=s.fcheck2 + local sg1=Duel.GetMatchingGroup(s.filter2,tp,LOCATION_EXTRA,0,nil,e,tp,mg1,nil,chkf) + local mg2=nil + local sg2=nil + local ce=Duel.GetChainMaterial(tp) + if ce~=nil then + local fgroup=ce:GetTarget() + mg2=fgroup(ce,e,tp) + local mf=ce:GetValue() + sg2=Duel.GetMatchingGroup(s.filter2,tp,LOCATION_EXTRA,0,nil,e,tp,mg2,mf,chkf) + end + local sg=sg1:Clone() + if sg2 then sg:Merge(sg2) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local tg=sg:Select(tp,1,1,nil) + local tc=tg:GetFirst() + if not tc then return end + if sg1:IsContains(tc) and (sg2==nil or not sg2:IsContains(tc) or ce and not Duel.SelectYesNo(tp,ce:GetDescription())) then + aux.FCheckAdditional=s.fcheck1(ct) + aux.FGoalCheckAdditional=s.fcheck2 + local mat1=Duel.SelectFusionMaterial(tp,tc,mg1,nil,chkf) + aux.FCheckAdditional=nil + aux.FGoalCheckAdditional=nil + tc:SetMaterial(mat1) + local rg=mat1:Filter(Card.IsLocation,nil,LOCATION_EXTRA) + mat1:Sub(rg) + Duel.SendtoGrave(mat1,REASON_EFFECT+REASON_MATERIAL+REASON_FUSION) + Duel.Remove(rg,POS_FACEUP,REASON_EFFECT+REASON_MATERIAL+REASON_FUSION) + Duel.BreakEffect() + Duel.SpecialSummonStep(tc,SUMMON_TYPE_FUSION,tp,tp,false,false,POS_FACEUP) + elseif ce then + local mat2=Duel.SelectFusionMaterial(tp,tc,mg2,nil,chkf) + local fop=ce:GetOperation() + fop(ce,e,tp,tc,mat2) + end + local exmat=tc:GetMaterial():Filter(Card.IsPreviousLocation,nil,LOCATION_EXTRA) + if #exmat>0 then + local dam=exmat:GetSum(Card.GetAttack) + local lp=Duel.GetLP(tp) + if lp>=dam then + Duel.SetLP(tp,lp-dam) + else + Duel.SetLP(tp,0) + end + end + Duel.SpecialSummonComplete() + tc:CompleteProcedure() + aux.FCheckAdditional=nil + aux.FGoalCheckAdditional=nil +end diff --git a/c72782945.lua b/c72782945.lua new file mode 100644 index 000000000..9d5c11338 --- /dev/null +++ b/c72782945.lua @@ -0,0 +1,74 @@ +--OToNaRiサンダー +local s,id,o=GetID() +function s.initial_effect(c) + --special summon + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_IGNITION) + e1:SetRange(LOCATION_HAND+LOCATION_GRAVE) + e1:SetCountLimit(1,id) + e1:SetCondition(s.spcon) + e1:SetTarget(s.sptg) + e1:SetOperation(s.spop) + c:RegisterEffect(e1) + --attach + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetType(EFFECT_TYPE_IGNITION) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET) + e2:SetRange(LOCATION_MZONE) + e2:SetCountLimit(1,id+o) + e2:SetTarget(s.xtg) + e2:SetOperation(s.xop) + c:RegisterEffect(e2) +end +function s.cfilter(c) + return c:IsFaceup() and c:IsRace(RACE_THUNDER) +end +function s.spcon(e,tp,eg,ep,ev,re,r,rp) + return Duel.IsExistingMatchingCard(s.cfilter,tp,LOCATION_MZONE,0,2,nil) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + local c=e:GetHandler() + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and c:IsCanBeSpecialSummoned(e,0,tp,false,false) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,c,1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if c:IsRelateToEffect(e) and Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP)>0 then + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e1:SetCode(EFFECT_LEAVE_FIELD_REDIRECT) + e1:SetValue(LOCATION_REMOVED) + e1:SetReset(RESET_EVENT+RESETS_REDIRECT) + c:RegisterEffect(e1,true) + end +end +function s.xfilter(c) + return c:IsFaceup() and c:IsType(TYPE_XYZ) +end +function s.xyzfilter(c,tp,e) + return c:IsControler(tp) and c:IsFaceupEx() and c:IsLevel(4) and c:IsAttribute(ATTRIBUTE_LIGHT) and c:IsRace(RACE_THUNDER) and c:IsCanOverlay() and not c:IsImmuneToEffect(e) +end +function s.xtg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + local c=e:GetHandler() + if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.xfilter(chkc) and chkc~=c end + if chk==0 then return Duel.IsExistingTarget(s.xfilter,tp,LOCATION_MZONE,0,1,c) + and s.xyzfilter(c,tp,e) and Duel.IsExistingMatchingCard(s.xyzfilter,tp,LOCATION_MZONE+LOCATION_HAND+LOCATION_GRAVE,0,1,c,tp,e) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP) + Duel.SelectTarget(tp,s.xfilter,tp,LOCATION_MZONE,0,1,1,c) +end +function s.xop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if not c:IsRelateToEffect(e) or not c:IsLocation(LOCATION_ONFIELD) or not s.xyzfilter(c,tp,e) then return end + local tc=Duel.GetFirstTarget() + if not tc:IsRelateToEffect(e) or tc:IsImmuneToEffect(e) then return end + local g=Duel.GetMatchingGroup(aux.NecroValleyFilter(s.xyzfilter),tp,LOCATION_MZONE+LOCATION_HAND+LOCATION_GRAVE,0,c,tp,e) + if g:GetCount()>0 then + local mg=Group.__add(c,g:Select(tp,1,1,c)) + if mg:GetCount()==2 then Duel.Overlay(tc,mg) end + end +end \ No newline at end of file diff --git a/c80326401.lua b/c80326401.lua new file mode 100644 index 000000000..789c4f884 --- /dev/null +++ b/c80326401.lua @@ -0,0 +1,99 @@ +--青き眼の祈り +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,89631139) + --Activate + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH) + e1:SetType(EFFECT_TYPE_ACTIVATE) + e1:SetCode(EVENT_FREE_CHAIN) + e1:SetCountLimit(1,id) + e1:SetCost(s.cost) + e1:SetTarget(s.target) + e1:SetOperation(s.activate) + c:RegisterEffect(e1) + --equip + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetCategory(CATEGORY_EQUIP) + e2:SetType(EFFECT_TYPE_IGNITION) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET) + e2:SetRange(LOCATION_GRAVE) + e2:SetCountLimit(1,id+o) + e2:SetCost(aux.bfgcost) + e2:SetTarget(s.eqtg) + e2:SetOperation(s.eqop) + c:RegisterEffect(e2) +end +function s.cost(e,tp,eg,ep,ev,re,r,rp,chk) + local c=e:GetHandler() + if chk==0 then return Duel.IsExistingMatchingCard(Card.IsDiscardable,tp,LOCATION_HAND,0,1,c) end + Duel.DiscardHand(tp,Card.IsDiscardable,1,1,REASON_COST+REASON_DISCARD,nil) +end +function s.thfilter1(c,tp) + return not c:IsCode(id) and aux.IsCodeListed(c,89631139) and c:IsType(TYPE_SPELL+TYPE_TRAP) and c:IsAbleToHand() + and Duel.IsExistingMatchingCard(s.thfilter2,tp,LOCATION_DECK,0,1,c) +end +function s.thfilter2(c) + return c:IsLevel(1) and c:IsType(TYPE_TUNER) and c:IsAttribute(ATTRIBUTE_LIGHT) and c:IsAbleToHand() +end +function s.target(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.IsExistingMatchingCard(s.thfilter1,tp,LOCATION_DECK,0,1,nil,tp) end + Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,2,tp,LOCATION_DECK) +end +function s.activate(e,tp,eg,ep,ev,re,r,rp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND) + local tc=Duel.SelectMatchingCard(tp,s.thfilter1,tp,LOCATION_DECK,0,1,1,nil,tp):GetFirst() + if tc and Duel.IsExistingMatchingCard(s.thfilter2,tp,LOCATION_DECK,0,1,tc) then + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATOHAND) + local g=Duel.SelectMatchingCard(tp,s.thfilter2,tp,LOCATION_DECK,0,1,1,tc) + g:AddCard(tc) + Duel.SendtoHand(g,nil,REASON_EFFECT) + Duel.ConfirmCards(1-tp,g) + end +end +function s.tgfilter(c) + return c:IsFaceup() and c:IsCode(89631139) +end +function s.eqfilter(c) + return c:IsSetCard(0xdd) and c:IsType(TYPE_MONSTER) +end +function s.eqtg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + if chkc then return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.tgfilter(chkc) end + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_SZONE)>0 + and Duel.IsExistingTarget(s.tgfilter,tp,LOCATION_MZONE,0,1,nil) + and Duel.IsExistingMatchingCard(s.eqfilter,tp,LOCATION_EXTRA,0,1,nil) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP) + Duel.SelectTarget(tp,s.tgfilter,tp,LOCATION_MZONE,0,1,1,nil) + Duel.SetOperationInfo(0,CATEGORY_EQUIP,nil,1,tp,LOCATION_EXTRA) +end +function s.eqop(e,tp,eg,ep,ev,re,r,rp) + local tc=Duel.GetFirstTarget() + if tc:IsRelateToEffect(e) and tc:IsFaceup() and Duel.GetLocationCount(tp,LOCATION_SZONE)>0 then + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP) + local g=Duel.SelectMatchingCard(tp,s.eqfilter,tp,LOCATION_EXTRA,0,1,1,nil) + local ec=g:GetFirst() + if ec then + if not Duel.Equip(tp,ec,tc) then return end + --equip limit + local e1=Effect.CreateEffect(e:GetHandler()) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_EQUIP_LIMIT) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e1:SetLabelObject(tc) + e1:SetValue(s.eqlimit) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + ec:RegisterEffect(e1) + local e2=Effect.CreateEffect(e:GetHandler()) + e2:SetType(EFFECT_TYPE_EQUIP) + e2:SetCode(EFFECT_UPDATE_ATTACK) + e2:SetValue(400) + e2:SetReset(RESET_EVENT+RESETS_STANDARD) + ec:RegisterEffect(e2) + end + end +end +function s.eqlimit(e,c) + return c==e:GetLabelObject() +end \ No newline at end of file diff --git a/c8170654.lua b/c8170654.lua new file mode 100644 index 000000000..686d18780 --- /dev/null +++ b/c8170654.lua @@ -0,0 +1,73 @@ +--ジャイアント・タコーン +local s,id,o=GetID() +function s.initial_effect(c) + --spsummon + local e1=Effect.CreateEffect(c) + e1:SetDescription(aux.Stringid(id,0)) + e1:SetCategory(CATEGORY_SPECIAL_SUMMON) + e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) + e1:SetCode(EVENT_ATTACK_ANNOUNCE) + e1:SetRange(LOCATION_HAND) + e1:SetCountLimit(1,id) + e1:SetCondition(s.spcon) + e1:SetTarget(s.sptg) + e1:SetOperation(s.spop) + c:RegisterEffect(e1) + --atk change + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetProperty(EFFECT_FLAG_CARD_TARGET) + e2:SetType(EFFECT_TYPE_IGNITION) + e2:SetRange(LOCATION_MZONE) + e2:SetCountLimit(1,id+o) + e2:SetTarget(s.atktg) + e2:SetOperation(s.atkop) + c:RegisterEffect(e2) +end +function s.spcon(e,tp,eg,ep,ev,re,r,rp) + return Duel.GetAttacker():GetControler()~=tp +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + local c=e:GetHandler() + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and c:IsCanBeSpecialSummoned(e,0,tp,false,false,POS_FACEUP_DEFENSE) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,c,1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local a=Duel.GetAttacker() + if c:IsRelateToEffect(e) and Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP_DEFENSE)~=0 and a:IsAttackable() and not a:IsImmuneToEffect(e) then + Duel.CalculateDamage(a,c) + end +end +function s.atkfilter(c,ac) + return c:IsFaceup() and c:IsRace(RACE_PLANT) and not c:IsCode(id) and c~=ac and c:GetBaseAttack()+ac:GetBaseAttack()>0 +end +function s.atktg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) + local c=e:GetHandler() + if chkc then return chkc:IsControler(tp) and chkc~=c and chkc:IsLocation(LOCATION_MZONE) and s.atkfilter(chkc) end + if chk==0 then return Duel.IsExistingTarget(s.atkfilter,tp,LOCATION_MZONE,0,1,c,c) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TARGET) + Duel.SelectTarget(tp,s.atkfilter,tp,LOCATION_MZONE,0,1,1,c,c) +end +function s.atkop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + local tc=Duel.GetFirstTarget() + if c:IsFaceup() and c:IsRelateToEffect(e) and tc:IsFaceup() and tc:IsRelateToEffect(e) then + local atk=c:GetBaseAttack()+tc:GetBaseAttack() + local e1=Effect.CreateEffect(c) + e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_SET_ATTACK) + e1:SetReset(RESET_EVENT+RESETS_STANDARD) + e1:SetValue(atk) + c:RegisterEffect(e1) + local e2=Effect.CreateEffect(c) + e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_SET_ATTACK) + e2:SetReset(RESET_EVENT+RESETS_STANDARD) + e2:SetValue(atk) + tc:RegisterEffect(e2) + end +end \ No newline at end of file diff --git a/c85687952.lua b/c85687952.lua new file mode 100644 index 000000000..bef44cb5d --- /dev/null +++ b/c85687952.lua @@ -0,0 +1,122 @@ +--Theia, the Primal Being +local s,id,o=GetID() +function s.initial_effect(c) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) + e1:SetRange(LOCATION_MZONE) + e1:SetCode(EVENT_SUMMON_SUCCESS) + e1:SetOperation(s.checkop) + c:RegisterEffect(e1) + local e2=e1:Clone() + e2:SetCode(EVENT_SPSUMMON_SUCCESS) + c:RegisterEffect(e2) + --special summon + local e3=Effect.CreateEffect(c) + e3:SetDescription(aux.Stringid(id,0)) + e3:SetCategory(CATEGORY_SPECIAL_SUMMON) + e3:SetType(EFFECT_TYPE_QUICK_O) + e3:SetRange(LOCATION_HAND) + e3:SetCode(EVENT_FREE_CHAIN) + e3:SetHintTiming(0,TIMING_MAIN_END) + e3:SetCountLimit(1,id) + e3:SetCondition(s.spcon) + e3:SetCost(s.spcost) + e3:SetTarget(s.sptg) + e3:SetOperation(s.spop) + c:RegisterEffect(e3) +end +function s.checkop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if eg:IsContains(c) then return end + for p=0,1 do + if eg:IsExists(Card.IsSummonPlayer,1,nil,p) then + c:RegisterFlagEffect(id,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,0,1,p) + end + end + local tptable=table.pack(c:GetFlagEffectLabel(id)) + local tpvalue={0,0} + for i,v in ipairs(tptable) do + if v==0 then + tpvalue[1]=tpvalue[1]+1 + elseif v==1 then + tpvalue[2]=tpvalue[2]+1 + end + end + for p=0,1 do + if tpvalue[p+1]<4 then + --spsummon count limit + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_SPSUMMON_COUNT_LIMIT) + e1:SetRange(LOCATION_MZONE) + e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e1:SetTargetRange(1,1) + e1:SetValue(4-tpvalue[p+1]) + e1:SetLabel(p) + e1:SetTarget(s.splimit) + e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END) + c:RegisterEffect(e1) + elseif tpvalue[p+1]==4 then + --disable summon + local e2=Effect.CreateEffect(c) + e2:SetType(EFFECT_TYPE_FIELD) + e2:SetRange(LOCATION_MZONE) + e2:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) + e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e2:SetTargetRange(1,1) + e2:SetLabel(p) + e2:SetTarget(s.splimit) + e2:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END) + c:RegisterEffect(e2) + local e3=e2:Clone() + e3:SetCode(EFFECT_CANNOT_SUMMON) + c:RegisterEffect(e3) + end + end +end +function s.splimit(e,c,sp,st) + return sp==e:GetLabel() +end +function s.relgoal(sg,tp) + Duel.SetSelectedCard(sg) + return sg:CheckWithSumGreater(Card.GetLevel,11) and aux.mzctcheckrel(sg,tp) +end +function s.spcon(e,tp,eg,ep,ev,re,r,rp) + local ph=Duel.GetCurrentPhase() + return ph==PHASE_MAIN1 or ph==PHASE_MAIN2 +end +function s.rfilter(c) + return c:IsType(TYPE_MONSTER) and c:IsLevelAbove(1) +end +function s.spcost(e,tp,eg,ep,ev,re,r,rp,chk) + local mg=Duel.GetReleaseGroup(tp):Filter(s.rfilter,nil) + if chk==0 then return mg:CheckSubGroup(s.relgoal,1,12,tp) end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RELEASE) + local sg=mg:SelectSubGroup(tp,s.relgoal,false,1,12,tp) + aux.UseExtraReleaseCount(sg,tp) + Duel.Release(sg,REASON_COST) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return e:GetHandler():IsCanBeSpecialSummoned(e,0,tp,false,false) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,e:GetHandler(),1,0,0) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if not c:IsRelateToEffect(e) then return end + if Duel.SpecialSummon(c,0,tp,tp,false,false,POS_FACEUP)~=0 and not Duel.IsExistingMatchingCard(aux.TRUE,tp,LOCATION_MZONE,0,1,e:GetHandler()) + and Duel.GetMatchingGroupCount(Card.IsFaceup,tp,LOCATION_MZONE,LOCATION_MZONE,nil)>0 + and Duel.SelectYesNo(tp,aux.Stringid(id,1)) then + local g=Duel.GetMatchingGroup(Card.IsFaceup,tp,LOCATION_MZONE,LOCATION_MZONE,nil) + if g:GetCount()>0 then + local tg=g:GetMaxGroup(Card.GetAttack) + if tg:GetCount()>1 then + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY) + local sg=tg:Select(tp,1,1,nil) + Duel.HintSelection(sg) + Duel.Destroy(sg,REASON_EFFECT) + else + Duel.Destroy(tg,REASON_EFFECT) + end + end + end +end diff --git a/c89604813.lua b/c89604813.lua new file mode 100644 index 000000000..68b5a24c5 --- /dev/null +++ b/c89604813.lua @@ -0,0 +1,88 @@ +--青眼の究極霊竜 +local s,id,o=GetID() +function s.initial_effect(c) + --synchro summon + aux.AddSynchroMixProcedure(c,aux.NonTuner(Card.IsSetCard,0xdd),nil,nil,aux.Tuner(nil),2,99) + c:EnableReviveLimit() + --cannot remove + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_FIELD) + e1:SetCode(EFFECT_CANNOT_REMOVE) + e1:SetRange(LOCATION_MZONE) + e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET) + e1:SetTargetRange(1,1) + e1:SetTarget(s.rmlimit) + c:RegisterEffect(e1) + --negate & atk up + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,1)) + e2:SetCategory(CATEGORY_NEGATE+CATEGORY_ATKCHANGE) + e2:SetType(EFFECT_TYPE_QUICK_O) + e2:SetProperty(EFFECT_FLAG_DAMAGE_STEP+EFFECT_FLAG_DAMAGE_CAL) + e2:SetCode(EVENT_CHAINING) + e2:SetCountLimit(1,id) + e2:SetRange(LOCATION_MZONE) + e2:SetCondition(s.negcon) + e2:SetTarget(s.negtg) + e2:SetOperation(s.negop) + c:RegisterEffect(e2) + --Special Summon + local e3=Effect.CreateEffect(c) + e3:SetDescription(aux.Stringid(id,2)) + e3:SetCategory(CATEGORY_SPECIAL_SUMMON) + e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) + e3:SetProperty(EFFECT_FLAG_DELAY) + e3:SetCode(EVENT_DESTROYED) + e3:SetCountLimit(1,id+o) + e3:SetCondition(s.spcon) + e3:SetTarget(s.sptg) + e3:SetOperation(s.spop) + c:RegisterEffect(e3) +end +function s.rmlimit(e,c,rp,r,re) + local tp=e:GetHandlerPlayer() + return c:IsControler(tp) and c:IsLocation(LOCATION_GRAVE) and re:GetOwnerPlayer()~=tp +end +function s.negcon(e,tp,eg,ep,ev,re,r,rp) + local loc=Duel.GetChainInfo(ev,CHAININFO_TRIGGERING_LOCATION) + return not e:GetHandler():IsStatus(STATUS_BATTLE_DESTROYED) + and loc&LOCATION_ONFIELD~=0 + and Duel.IsChainNegatable(ev) +end +function s.negtg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return true end + Duel.SetOperationInfo(0,CATEGORY_NEGATE,eg,1,0,0) +end +function s.negop(e,tp,eg,ep,ev,re,r,rp) + local c=e:GetHandler() + if Duel.NegateActivation(ev) and c:IsRelateToEffect(e) and c:IsFaceup() then + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetCode(EFFECT_UPDATE_ATTACK) + e1:SetValue(1000) + e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE) + e1:SetRange(LOCATION_MZONE) + e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_DISABLE+RESET_PHASE+PHASE_END) + c:RegisterEffect(e1) + end +end +function s.spcon(e,tp,eg,ep,ev,re,r,rp) + return bit.band(r,REASON_EFFECT+REASON_BATTLE)~=0 +end +function s.spfilter(c,e,tp) + return not c:IsCode(id) and c:IsRace(RACE_DRAGON) and c:IsAttribute(ATTRIBUTE_LIGHT) + and c:IsCanBeSpecialSummoned(e,0,tp,false,false,POS_FACEUP) +end +function s.sptg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.GetLocationCount(tp,LOCATION_MZONE)>0 + and Duel.IsExistingMatchingCard(s.spfilter,tp,LOCATION_GRAVE,0,1,nil,e,tp) end + Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_GRAVE) +end +function s.spop(e,tp,eg,ep,ev,re,r,rp) + if Duel.GetLocationCount(tp,LOCATION_MZONE)<=0 then return end + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_SPSUMMON) + local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.spfilter),tp,LOCATION_GRAVE,0,1,1,nil,e,tp) + if g:GetCount()>0 then + Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP) + end +end \ No newline at end of file diff --git a/c93053159.lua b/c93053159.lua new file mode 100644 index 000000000..757777004 --- /dev/null +++ b/c93053159.lua @@ -0,0 +1,149 @@ +--白の枢機竜 +local s,id,o=GetID() +function s.initial_effect(c) + aux.AddCodeList(c,68468459) + aux.AddMaterialCodeList(c,68468459) + --aux.AddFusionProcCodeFun(c,68468459,s.mfilter,6,true,true) + c:EnableReviveLimit() + local e0=Effect.CreateEffect(c) + e0:SetType(EFFECT_TYPE_SINGLE) + e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e0:SetCode(EFFECT_FUSION_MATERIAL) + e0:SetCondition(s.Alba_System_Drugmata_Fusion_Condition()) + e0:SetOperation(s.Alba_System_Drugmata_Fusion_Operation()) + c:RegisterEffect(e0) + local e1=Effect.CreateEffect(c) + e1:SetType(EFFECT_TYPE_SINGLE) + e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE+EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE) + e1:SetCode(EFFECT_SPSUMMON_CONDITION) + e1:SetRange(LOCATION_EXTRA) + e1:SetValue(s.splimit) + c:RegisterEffect(e1) + local e2=Effect.CreateEffect(c) + e2:SetDescription(aux.Stringid(id,0)) + e2:SetType(EFFECT_TYPE_SINGLE) + e2:SetCode(EFFECT_ATTACK_ALL) + e2:SetValue(1) + c:RegisterEffect(e2) + local e3=Effect.CreateEffect(c) + e3:SetDescription(aux.Stringid(id,1)) + e3:SetType(EFFECT_TYPE_SINGLE) + e3:SetCode(EFFECT_ATTACK_COST) + e3:SetCost(s.atcost) + e3:SetOperation(s.atop) + c:RegisterEffect(e3) + local e4=Effect.CreateEffect(c) + e4:SetDescription(aux.Stringid(id,2)) + e4:SetType(EFFECT_TYPE_IGNITION) + e4:SetRange(LOCATION_MZONE) + e4:SetCountLimit(1) + e4:SetCondition(s.tgcon) + e4:SetTarget(s.tgtg) + e4:SetOperation(s.tgop) + c:RegisterEffect(e4) +end +function s.splimit(e,se,sp,st) + return bit.band(st,SUMMON_TYPE_FUSION)==SUMMON_TYPE_FUSION +end +function s.Alba_System_Drugmata_Fusion_Filter(c,mg,fc,tp,chkf,gc) + if not c:IsFusionCode(68468459) and not c:IsHasEffect(EFFECT_FUSION_SUBSTITUTE) then return false end + local g=mg:Filter(s.matfilter,c,tp) + aux.GCheckAdditional=aux.dncheck + local res=g:CheckSubGroup(s.Alba_System_Drugmata_Fusion_Gcheck,6,6,fc,tp,c,chkf,gc) + aux.GCheckAdditional=nil + return res +end +function s.matfilter(c,tp) + return c:IsLocation(LOCATION_GRAVE) and c:IsControler(tp) and not c:IsHasEffect(6205579) +end +function s.Alba_System_Drugmata_Fusion_Gcheck(g,fc,tp,ec,chkf,gc) + local sg=g:Clone() + sg:AddCard(ec) + if sg:IsExists(aux.TuneMagicianCheckX,1,nil,sg,EFFECT_TUNE_MAGICIAN_F) then return false end + if gc and not sg:IsContains(gc) then return false end + if aux.FCheckAdditional and not aux.FCheckAdditional(tp,sg,fc) + or aux.FGoalCheckAdditional and not aux.FGoalCheckAdditional(tp,sg,fc) then return false end + return g:GetClassCount(Card.GetFusionCode)==g:GetCount() + and (chkf==PLAYER_NONE or Duel.GetLocationCountFromEx(tp,tp,sg,fc)>0) +end +function s.Alba_System_Drugmata_Fusion_Condition() + return function(e,g,gc,chkf) + if g==nil then return aux.MustMaterialCheck(nil,e:GetHandlerPlayer(),EFFECT_MUST_BE_FMATERIAL) end + local fc=e:GetHandler() + local tp=e:GetHandlerPlayer() + if gc then + if not g:IsContains(gc) then return false end + return g:IsExists(s.Alba_System_Drugmata_Fusion_Filter,1,nil,g,fc,tp,chkf,gc) + end + return g:IsExists(s.Alba_System_Drugmata_Fusion_Filter,1,nil,g,fc,tp,chkf,nil) + end +end +function s.Alba_System_Drugmata_Fusion_Operation() + return function(e,tp,eg,ep,ev,re,r,rp,gc,chkf) + local fc=e:GetHandler() + local tp=e:GetHandlerPlayer() + local fg=eg:Clone() + local g=nil + local sg=nil + while not sg do + if g then + fg:AddCard(g:GetFirst()) + end + if gc then + if s.Alba_System_Drugmata_Fusion_Filter(gc,fg,fc,tp,chkf) then + g=Group.FromCards(gc) + fg:RemoveCard(gc) + local mg=fg:Filter(s.matfilter,fc,tp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + sg=mg:SelectSubGroup(tp,s.Alba_System_Drugmata_Fusion_Gcheck,false,6,6,fc,tp,g:GetFirst(),chkf,gc) + else + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + g=fg:FilterSelect(tp,s.Alba_System_Drugmata_Fusion_Filter,1,1,nil,fg,fc,tp,chkf,gc) + fg:Sub(g) + local mg=fg:Filter(s.matfilter,fc,tp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + sg=mg:SelectSubGroup(tp,s.Alba_System_Drugmata_Fusion_Gcheck,true,6,6,fc,tp,g:GetFirst(),chkf,gc) + end + else + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + g=fg:FilterSelect(tp,s.Alba_System_Drugmata_Fusion_Filter,1,1,nil,fg,fc,tp,chkf,nil) + fg:Sub(g) + local mg=fg:Filter(s.matfilter,fc,tp) + aux.GCheckAdditional=aux.dncheck + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FMATERIAL) + sg=mg:SelectSubGroup(tp,s.Alba_System_Drugmata_Fusion_Gcheck,true,6,6,fc,tp,g:GetFirst(),chkf) + aux.GCheckAdditional=nil + end + end + g:Merge(sg) + Duel.SetFusionMaterial(g) + end +end +function s.costfilter(c) + return c:IsAbleToGraveAsCost() +end +function s.atcost(e,c,tp) + return Duel.IsExistingMatchingCard(s.costfilter,tp,LOCATION_EXTRA,0,1,nil) +end +function s.atop(e,tp,eg,ep,ev,re,r,rp) + Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOGRAVE) + local cg=Duel.SelectMatchingCard(tp,s.costfilter,tp,LOCATION_EXTRA,0,1,1,nil) + Duel.SendtoGrave(cg,REASON_COST) +end +function s.cfilter(c) + return aux.IsMaterialListCode(c,68468459) +end +function s.tgcon(e,tp,eg,ep,ev,re,r,rp) + local g=Duel.GetMatchingGroup(s.cfilter,tp,LOCATION_GRAVE,0,nil) + return e:GetHandler():IsSummonType(SUMMON_TYPE_FUSION) + and g:GetClassCount(Card.GetCode)>5 +end +function s.tgtg(e,tp,eg,ep,ev,re,r,rp,chk) + if chk==0 then return Duel.IsExistingMatchingCard(Card.IsAbleToGrave,tp,LOCATION_EXTRA,LOCATION_EXTRA,1,nil) end + local g=Duel.GetMatchingGroup(Card.IsAbleToGrave,tp,LOCATION_EXTRA,LOCATION_EXTRA,nil) + Duel.SetOperationInfo(0,CATEGORY_TOGRAVE,g,g:GetCount(),0,0) +end +function s.tgop(e,tp,eg,ep,ev,re,r,rp) + local g=Duel.GetMatchingGroup(Card.IsAbleToGrave,tp,LOCATION_EXTRA,LOCATION_EXTRA,nil) + Duel.SendtoGrave(g,REASON_EFFECT) +end \ No newline at end of file From 7153ea419e68b523c0a3ec352e57954d4ac45544 Mon Sep 17 00:00:00 2001 From: salix5 Date: Sun, 29 Sep 2024 23:05:24 +0800 Subject: [PATCH 2/4] newline --- c12172567.lua | 2 +- c16699558.lua | 2 +- c17947697.lua | 2 +- c42097666.lua | 2 +- c43219114.lua | 2 +- c48705086.lua | 2 +- c54332792.lua | 2 +- c72782945.lua | 2 +- c80326401.lua | 2 +- c8170654.lua | 2 +- c89604813.lua | 2 +- c93053159.lua | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/c12172567.lua b/c12172567.lua index 33daa3391..43024c095 100644 --- a/c12172567.lua +++ b/c12172567.lua @@ -76,4 +76,4 @@ function s.ctop(e,tp,eg,ep,ev,re,r,rp) if a:IsRelateToEffect(e) and b:IsRelateToEffect(e) then Duel.SwapControl(a,b) end -end \ No newline at end of file +end diff --git a/c16699558.lua b/c16699558.lua index 9fc3f76ef..68e8ca83c 100644 --- a/c16699558.lua +++ b/c16699558.lua @@ -97,4 +97,4 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp) tc:RegisterEffect(e1) end Duel.SpecialSummonComplete() -end \ No newline at end of file +end diff --git a/c17947697.lua b/c17947697.lua index 99199cd24..3db51ac86 100644 --- a/c17947697.lua +++ b/c17947697.lua @@ -99,4 +99,4 @@ function s.spop2(e,tp,eg,ep,ev,re,r,rp) if g:GetCount()>0 then Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP) end -end \ No newline at end of file +end diff --git a/c42097666.lua b/c42097666.lua index 2f5043fa7..54dfccb4b 100644 --- a/c42097666.lua +++ b/c42097666.lua @@ -106,4 +106,4 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp) tc:RegisterEffect(e3) end Duel.SpecialSummonComplete() -end \ No newline at end of file +end diff --git a/c43219114.lua b/c43219114.lua index 073a65d9f..5bd67555f 100644 --- a/c43219114.lua +++ b/c43219114.lua @@ -56,4 +56,4 @@ function s.activate(e,tp,eg,ep,ev,re,r,rp) end function s.mfilter(c,e,tp,chk) return (not chk or c~=e:GetHandler()) and c:IsCode(89631139) -end \ No newline at end of file +end diff --git a/c48705086.lua b/c48705086.lua index 00dc158b2..877589bae 100644 --- a/c48705086.lua +++ b/c48705086.lua @@ -58,4 +58,4 @@ function s.spop2(e,tp,eg,ep,ev,re,r,rp) if tc:IsRelateToEffect(e) and aux.NecroValleyFilter()(tc) then Duel.SpecialSummon(tc,0,tp,tp,false,false,POS_FACEUP_DEFENSE) end -end \ No newline at end of file +end diff --git a/c54332792.lua b/c54332792.lua index 718aaf56a..451580656 100644 --- a/c54332792.lua +++ b/c54332792.lua @@ -95,4 +95,4 @@ function s.tgop(e,tp,eg,ep,ev,re,r,rp) if g:GetCount()>0 then Duel.SendtoGrave(g,REASON_EFFECT) end -end \ No newline at end of file +end diff --git a/c72782945.lua b/c72782945.lua index 9d5c11338..6edcfd1da 100644 --- a/c72782945.lua +++ b/c72782945.lua @@ -71,4 +71,4 @@ function s.xop(e,tp,eg,ep,ev,re,r,rp) local mg=Group.__add(c,g:Select(tp,1,1,c)) if mg:GetCount()==2 then Duel.Overlay(tc,mg) end end -end \ No newline at end of file +end diff --git a/c80326401.lua b/c80326401.lua index 789c4f884..60329b95c 100644 --- a/c80326401.lua +++ b/c80326401.lua @@ -96,4 +96,4 @@ function s.eqop(e,tp,eg,ep,ev,re,r,rp) end function s.eqlimit(e,c) return c==e:GetLabelObject() -end \ No newline at end of file +end diff --git a/c8170654.lua b/c8170654.lua index 686d18780..2d8699b2d 100644 --- a/c8170654.lua +++ b/c8170654.lua @@ -70,4 +70,4 @@ function s.atkop(e,tp,eg,ep,ev,re,r,rp) e2:SetValue(atk) tc:RegisterEffect(e2) end -end \ No newline at end of file +end diff --git a/c89604813.lua b/c89604813.lua index 68b5a24c5..9b10a4b4f 100644 --- a/c89604813.lua +++ b/c89604813.lua @@ -85,4 +85,4 @@ function s.spop(e,tp,eg,ep,ev,re,r,rp) if g:GetCount()>0 then Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP) end -end \ No newline at end of file +end diff --git a/c93053159.lua b/c93053159.lua index 757777004..b9ac6b9b0 100644 --- a/c93053159.lua +++ b/c93053159.lua @@ -146,4 +146,4 @@ end function s.tgop(e,tp,eg,ep,ev,re,r,rp) local g=Duel.GetMatchingGroup(Card.IsAbleToGrave,tp,LOCATION_EXTRA,LOCATION_EXTRA,nil) Duel.SendtoGrave(g,REASON_EFFECT) -end \ No newline at end of file +end From 2008c090587bfafb3f742b575ca2457f87b402c7 Mon Sep 17 00:00:00 2001 From: salix5 Date: Sun, 29 Sep 2024 23:04:17 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix=20OToNaRi=E3=82=B5=E3=83=B3=E3=83=80?= =?UTF-8?q?=E3=83=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- c72782945.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/c72782945.lua b/c72782945.lua index 6edcfd1da..b027a852c 100644 --- a/c72782945.lua +++ b/c72782945.lua @@ -66,9 +66,9 @@ function s.xop(e,tp,eg,ep,ev,re,r,rp) if not c:IsRelateToEffect(e) or not c:IsLocation(LOCATION_ONFIELD) or not s.xyzfilter(c,tp,e) then return end local tc=Duel.GetFirstTarget() if not tc:IsRelateToEffect(e) or tc:IsImmuneToEffect(e) then return end - local g=Duel.GetMatchingGroup(aux.NecroValleyFilter(s.xyzfilter),tp,LOCATION_MZONE+LOCATION_HAND+LOCATION_GRAVE,0,c,tp,e) + local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.xyzfilter),tp,LOCATION_MZONE+LOCATION_HAND+LOCATION_GRAVE,0,1,1,c,tp,e) if g:GetCount()>0 then - local mg=Group.__add(c,g:Select(tp,1,1,c)) - if mg:GetCount()==2 then Duel.Overlay(tc,mg) end + local mg=c+g + Duel.Overlay(tc,mg) end end From 5fe5dba224f3e9533747054792fbf7771e9c9168 Mon Sep 17 00:00:00 2001 From: a597449807 <148566174+a597449807@users.noreply.github.com> Date: Sun, 3 Nov 2024 12:02:59 +0800 Subject: [PATCH 4/4] Fix Mind Castlin (#2720) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复②效果脚本里写了两个SetProperty,导致在某些情况下不能正常使用的问题。 --- c12172567.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/c12172567.lua b/c12172567.lua index 43024c095..dd89f5e92 100644 --- a/c12172567.lua +++ b/c12172567.lua @@ -20,9 +20,8 @@ function s.initial_effect(c) e2:SetDescription(aux.Stringid(id,1)) e2:SetCategory(CATEGORY_CONTROL) e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) - e2:SetProperty(EFFECT_FLAG_DELAY) + e2:SetProperty(EFFECT_FLAG_DELAY+EFFECT_FLAG_CARD_TARGET) e2:SetCode(EVENT_TO_GRAVE) - e2:SetProperty(EFFECT_FLAG_CARD_TARGET) e2:SetCountLimit(1,id+o) e2:SetCondition(s.ctcon) e2:SetTarget(s.cttg)