Levia-Dragoon - Daedalus
- Card ID:
78579058 - Format: Standard
- Script:
Scripts/c78579058.lua
Stats
| Field | Value |
|---|---|
| Type | 0x4000021 |
| ATK | 2600 |
| DEF | 7 |
| Level/Rank/Link | 0x3 |
| Race | 0x40000 |
| Attribute | 0x2 |
| Category | 0x40140 |
Card Text
text
3 WATER monsters
This card's name becomes "Umi" while in the Monster Zone.
You can only use each of the following effects of "Levia-Dragoon - Daedalus" once per turn.
If this card is Link Summoned: You can Special Summon 1 monster that mentions "Atlantis, City of the Sea Dragon" from your Deck.
During the Main Phase (Quick Effect): You can send 1 face-up "Umi" you control to the GY; discard your opponent's entire hand, and if you do, they draw the same number of cards.
Neither player can activate cards or effects in response to this effect's activation.Detected API Calls
Auxiliary.AddCodeListAuxiliary.AddLinkProcedureAuxiliary.EnableChangeCodeAuxiliary.FALSEAuxiliary.IsCodeListedAuxiliary.MustMaterialCounterFilterAuxiliary.NextAuxiliary.StringidAuxiliary.TRUECard.EnableReviveLimitCard.GetControlerCard.GetLinkCard.IsAbleToGraveAsCostCard.IsCanBeLinkMaterialCard.IsCanBeSpecialSummonedCard.IsCodeCard.IsFacedownCard.IsFaceupCard.IsHasEffectCard.IsLinkAttributeCard.IsLinkTypeCard.IsOnFieldCard.IsTypeCard.RegisterEffectCard.SetMaterialDuel.BreakEffectDuel.DrawDuel.GetFieldGroupDuel.GetFieldGroupCountDuel.GetLocationCountDuel.GetLocationCountFromExDuel.GetMatchingGroupDuel.GetMustMaterialDuel.HintDuel.IsExistingMatchingCardDuel.IsMainPhaseDuel.IsPlayerAffectedByEffectDuel.IsPlayerCanDrawDuel.IsSummonCancelableDuel.SelectMatchingCard- ...and 36 more
Script
lua
--真海竜騎-ダイダロス
local s,id,o=GetID()
function s.initial_effect(c)
aux.AddCodeList(c,38391684,22702055)
aux.EnableChangeCode(c,22702055)
--link summon
c:EnableReviveLimit()
--aux.AddLinkProcedure(c,s.mfilter,2,3,s.glcheck)
local e0=Effect.CreateEffect(c)
e0:SetDescription(aux.Stringid(id,0))
e0:SetType(EFFECT_TYPE_FIELD)
e0:SetCode(EFFECT_SPSUMMON_PROC)
e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE)
e0:SetRange(LOCATION_EXTRA)
e0:SetCondition(s.LinkCondition(s.mfilter,2,3,s.glcheck))
e0:SetTarget(s.LinkTarget(s.mfilter,2,3,s.glcheck))
e0:SetOperation(s.LinkOperation(s.mfilter,2,3,s.glcheck))
e0:SetValue(SUMMON_TYPE_LINK)
c:RegisterEffect(e0)
--special summon
local e1=Effect.CreateEffect(c)
e1:SetDescription(aux.Stringid(id,1))
e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
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.spcon)
e1:SetTarget(s.sptg)
e1:SetOperation(s.spop)
c:RegisterEffect(e1)
--handes & draw
local e2=Effect.CreateEffect(c)
e2:SetDescription(aux.Stringid(id,2))
e2:SetCategory(CATEGORY_DRAW+CATEGORY_HANDES_OPPO)
e2:SetType(EFFECT_TYPE_QUICK_O)
e2:SetCode(EVENT_FREE_CHAIN)
e2:SetRange(LOCATION_MZONE)
e2:SetCountLimit(1,id+o)
e2:SetHintTiming(0,TIMINGS_CHECK_MONSTER+TIMING_MAIN_END)
e2:SetCondition(s.drcon)
e2:SetCost(s.drcost)
e2:SetTarget(s.drtg)
e2:SetOperation(s.drop)
c:RegisterEffect(e2)
end
function s.mfilter(c)
return c:IsLinkAttribute(ATTRIBUTE_WATER)
end
function s.glcheck(g,c,tp)
return Duel.IsPlayerAffectedByEffect(tp,38391684) or g:GetCount()==3
end
function s.LConditionFilter(c,f,lc,e)
return (c:IsFaceup() or not c:IsOnField() or e:IsHasProperty(EFFECT_FLAG_SET_AVAILABLE))
and c:IsCanBeLinkMaterial(lc) and (not f or f(c))
end
function s.LExtraFilter(c,f,lc,tp)
if c:IsOnField() and c:IsFacedown() then return false end
if not c:IsCanBeLinkMaterial(lc) or f and not f(c) then return false end
local le={c:IsHasEffect(EFFECT_EXTRA_LINK_MATERIAL,tp)}
for _,te in pairs(le) do
local tf=te:GetValue()
local related,valid=tf(te,lc,nil,c,tp)
if related then return true end
end
return false
end
function s.GetLinkCount(c)
if c:IsLinkType(TYPE_LINK) and c:GetLink()>1 then
return 1+0x10000*c:GetLink()
else return 1 end
end
function s.GetLinkMaterials(tp,f,lc,e)
local mg=Duel.GetMatchingGroup(s.LConditionFilter,tp,LOCATION_MZONE,0,nil,f,lc,e)
local mg2=Duel.GetMatchingGroup(s.LExtraFilter,tp,LOCATION_HAND+LOCATION_SZONE,LOCATION_ONFIELD,nil,f,lc,tp)
if mg2:GetCount()>0 then mg:Merge(mg2) end
return mg
end
function s.LCheckOtherMaterial(c,mg,lc,tp)
local le={c:IsHasEffect(EFFECT_EXTRA_LINK_MATERIAL,tp)}
local res1=false
local res2=true
for _,te in pairs(le) do
local f=te:GetValue()
local related,valid=f(te,lc,mg,c,tp)
if related then res2=false end
if related and valid then res1=true end
end
return res1 or res2
end
function s.LUncompatibilityFilter(c,sg,lc,tp)
local mg=sg:Filter(aux.TRUE,c)
return not s.LCheckOtherMaterial(c,mg,lc,tp)
end
function s.LCheckGoal(sg,tp,lc,gf,lmat)
return (Duel.IsPlayerAffectedByEffect(tp,38391684)
and sg:CheckWithSumEqual(s.GetLinkCount,2,#sg,#sg)
or sg:CheckWithSumEqual(s.GetLinkCount,lc:GetLink(),#sg,#sg))
and Duel.GetLocationCountFromEx(tp,tp,sg,lc)>0 and (not gf or gf(sg,lc,tp))
and not sg:IsExists(s.LUncompatibilityFilter,1,nil,sg,lc,tp)
and (not lmat or sg:IsContains(lmat))
end
function s.LExtraMaterialCount(mg,lc,tp)
for tc in aux.Next(mg) do
local le={tc:IsHasEffect(EFFECT_EXTRA_LINK_MATERIAL,tp)}
for _,te in pairs(le) do
local sg=mg:Filter(aux.TRUE,tc)
local f=te:GetValue()
local related,valid=f(te,lc,sg,tc,tp)
if related and valid then
te:UseCountLimit(tp)
end
end
end
end
function s.LinkCondition(f,minct,maxct,gf)
return function(e,c,og,lmat,min,max)
if c==nil then return true end
if c:IsType(TYPE_PENDULUM) and c:IsFaceup() then return false end
local minc=minct
local maxc=maxct
if min then
if min>minc then minc=min end
if max<maxc then maxc=max end
if minc>maxc then return false end
end
local tp=c:GetControler()
local mg=nil
if og then
mg=og:Filter(s.LConditionFilter,nil,f,c,e)
else
mg=s.GetLinkMaterials(tp,f,c,e)
end
if lmat~=nil then
if not s.LConditionFilter(lmat,f,c,e) then return false end
mg:AddCard(lmat)
end
local fg=Duel.GetMustMaterial(tp,EFFECT_MUST_BE_LMATERIAL)
if fg:IsExists(aux.MustMaterialCounterFilter,1,nil,mg) then return false end
Duel.SetSelectedCard(fg)
return mg:CheckSubGroup(s.LCheckGoal,minc,maxc,tp,c,gf,lmat)
end
end
function s.LinkTarget(f,minct,maxct,gf)
return function(e,tp,eg,ep,ev,re,r,rp,chk,c,og,lmat,min,max)
local minc=minct
local maxc=maxct
if min then
if min>minc then minc=min end
if max<maxc then maxc=max end
if minc>maxc then return false end
end
local mg=nil
if og then
mg=og:Filter(s.LConditionFilter,nil,f,c,e)
else
mg=s.GetLinkMaterials(tp,f,c,e)
end
if lmat~=nil then
if not s.LConditionFilter(lmat,f,c,e) then return false end
mg:AddCard(lmat)
end
local fg=Duel.GetMustMaterial(tp,EFFECT_MUST_BE_LMATERIAL)
Duel.SetSelectedCard(fg)
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_LMATERIAL)
local cancel=Duel.IsSummonCancelable()
local sg=mg:SelectSubGroup(tp,s.LCheckGoal,cancel,minc,maxc,tp,c,gf,lmat)
if sg then
sg:KeepAlive()
e:SetLabelObject(sg)
return true
else return false end
end
end
function s.LinkOperation(f,minct,maxct,gf)
return function(e,tp,eg,ep,ev,re,r,rp,c,og,lmat,min,max)
local g=e:GetLabelObject()
c:SetMaterial(g)
s.LExtraMaterialCount(g,c,tp)
Duel.SendtoGrave(g,REASON_MATERIAL+REASON_LINK)
g:DeleteGroup()
end
end
function s.spcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():IsSummonType(SUMMON_TYPE_LINK)
end
function s.spfilter(c,e,tp)
return aux.IsCodeListed(c,38391684) 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.GetLocationCount(tp,LOCATION_MZONE)>0
and Duel.IsExistingMatchingCard(s.spfilter,tp,LOCATION_DECK,0,1,nil,e,tp) end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_DECK)
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,s.spfilter,tp,LOCATION_DECK,0,1,1,nil,e,tp)
if g:GetCount()>0 then
Duel.SpecialSummon(g,0,tp,tp,false,false,POS_FACEUP)
end
end
function s.costfilter(c)
return c:IsFaceup() and c:IsCode(22702055) and c:IsAbleToGraveAsCost()
end
function s.drcon(e,tp,eg,ep,ev,re,r,rp)
return Duel.IsMainPhase()
end
function s.drcost(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return Duel.IsExistingMatchingCard(s.costfilter,tp,LOCATION_ONFIELD,0,1,nil) end
Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TOGRAVE)
local g=Duel.SelectMatchingCard(tp,s.costfilter,tp,LOCATION_ONFIELD,0,1,1,nil)
Duel.SendtoGrave(g,REASON_COST)
end
function s.drtg(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then
local h=Duel.GetFieldGroupCount(tp,0,LOCATION_HAND)
return h>0 and Duel.IsPlayerCanDraw(1-tp,h)
end
Duel.SetOperationInfo(0,CATEGORY_HANDES_OPPO,nil,0,1-tp,1)
Duel.SetOperationInfo(0,CATEGORY_DRAW,nil,0,1-tp,1)
Duel.SetChainLimit(aux.FALSE)
end
function s.drop(e,tp,eg,ep,ev,re,r,rp)
local h=Duel.GetFieldGroupCount(tp,0,LOCATION_HAND)
local g=Duel.GetFieldGroup(tp,0,LOCATION_HAND)
if Duel.SendtoGrave(g,REASON_EFFECT+REASON_DISCARD)>0 then
Duel.BreakEffect()
Duel.Draw(1-tp,h,REASON_EFFECT)
end
end