--Saintly Rainbow Ruler --Scripted by: XGlitchy30, Made By Swaggy local cid,id=GetID() --------------------------- function cid.initial_effect(c) --Time Loop c:EnableReviveLimit() aux.AddOrigTimeleapType(c,false) aux.AddTimeleapProc(c,5,cid.sumcon,cid.tlfilter,nil) --Draw local e1=Effect.CreateEffect(c) e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetCode(EVENT_PREDRAW) e1:SetRange(LOCATION_MZONE) e1:SetCondition(cid.drawcon) e1:SetOperation(cid.drawct) c:RegisterEffect(e1) --protect from damage local e2=Effect.CreateEffect(c) e2:SetDescription(aux.Stringid(id,0)) e2:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O) e2:SetProperty(EFFECT_FLAG_DAMAGE_STEP+EFFECT_FLAG_DELAY) e2:SetCode(EVENT_SPSUMMON_SUCCESS) e2:SetCondition(cid.tgcon) e2:SetOperation(cid.tgop) c:RegisterEffect(e2) --Plot Armor local e3=Effect.CreateEffect(c) e3:SetDescription(aux.Stringid(id,1)) e3:SetType(EFFECT_TYPE_QUICK_O) e3:SetProperty(EFFECT_FLAG_CARD_TARGET) e3:SetCode(EVENT_FREE_CHAIN) e3:SetRange(LOCATION_MZONE) e3:SetCountLimit(1) e3:SetTarget(cid.atktg) e3:SetOperation(cid.atkop) c:RegisterEffect(e3) --Come Back on the field local e4=Effect.CreateEffect(c) e4:SetDescription(aux.Stringid(id,2)) e4:SetCategory(CATEGORY_SPECIAL_SUMMON) e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O) e4:SetProperty(EFFECT_FLAG_DELAY+EFFECT_FLAG_DAMAGE_STEP) e4:SetCode(EVENT_LEAVE_FIELD) e4:SetRange(LOCATION_GRAVE) e4:SetCondition(cid.spcon) e4:SetTarget(cid.sptg) e4:SetOperation(cid.spop) c:RegisterEffect(e4) end cid.drawcount=0 cid.maxval=0 function cid.sumcon(e,c) local tp=c:GetControler() local g=Duel.GetFieldGroup(tp,LOCATION_MZONE,0):Filter(Card.IsType,nil,TYPE_MONSTER) local sg=g:Filter(cid.sumconfilter,nil) return #g>1 and sg:GetClassCount(Card.GetRace)==#g end function cid.sumconfilter(c) return c:IsFaceup() and c:IsType(TYPE_MONSTER) end function cid.tlfilter(c,e,mg) return c:IsAttribute(ATTRIBUTE_LIGHT) and c:GetLevel()==e:GetHandler():GetFuture()-1 end --DRAW function cid.drawcon(e,tp,eg,ep,ev,re,r,rp) return tp==Duel.GetTurnPlayer() and Duel.GetFieldGroupCount(tp,LOCATION_DECK,0)>0 and Duel.GetDrawCount(tp)>-1 end function cid.drawct(e,tp,eg,ep,ev,re,r,rp) local dt=Duel.GetDrawCount(tp) Duel.Hint(HINT_CARD,tp,id) local e1=Effect.CreateEffect(e:GetHandler()) e1:SetType(EFFECT_TYPE_FIELD) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET) e1:SetCode(EFFECT_DRAW_COUNT) e1:SetTargetRange(1,0) e1:SetReset(RESET_PHASE+PHASE_DRAW) e1:SetValue(dt+1) Duel.RegisterEffect(e1,tp) end -- function cid.tgcon(e,tp,eg,ep,ev,re,r,rp) return e:GetHandler():IsSummonType(SUMMON_TYPE_TIMELEAP) end function cid.tgop(e,tp,eg,ep,ev,re,r,rp) local e1=Effect.CreateEffect(e:GetHandler()) e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e1:SetCode(EVENT_PRE_BATTLE_DAMAGE) e1:SetOperation(cid.damop) if Duel.GetTurnPlayer()==1-tp and Duel.GetCurrentPhase()==PHASE_END then e1:SetReset(RESET_PHASE+PHASE_END+RESET_OPPO_TURN,2) else e1:SetReset(RESET_PHASE+PHASE_END+RESET_OPPO_TURN) end Duel.RegisterEffect(e1,tp) end function cid.damop(e,tp,eg,ep,ev,re,r,rp) Duel.ChangeBattleDamage(tp,0) end -- function cid.atktg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) if chkc then return false end if chk==0 then return Duel.IsExistingTarget(Card.IsType,tp,0,LOCATION_MZONE,1,nil,TYPE_MONSTER) and Duel.IsExistingTarget(Card.IsType,tp,LOCATION_MZONE,0,1,nil,TYPE_MONSTER) end Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TARGET) local g1=Duel.SelectTarget(tp,Card.IsType,tp,0,LOCATION_MZONE,1,1,nil,TYPE_MONSTER) g1:KeepAlive() g1:GetFirst():RegisterFlagEffect(id,RESET_CHAIN,EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SET_AVAILABLE,1) Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_TARGET) local g2=Duel.SelectTarget(tp,Card.IsType,tp,LOCATION_MZONE,0,1,1,nil,TYPE_MONSTER) g1:Merge(g2) e:SetLabelObject(g1) end function cid.atkop(e,tp,eg,ep,ev,re,r,rp) local c=e:GetHandler() local tg=e:GetLabelObject() local tc1=tg:GetFirst() if tc1:GetFlagEffect(id)<=0 then tc1=tg:GetNext() end tg:RemoveCard(tc1) local tc2=tg:GetFirst() if tc1:IsRelateToEffect(e) and tc2:IsRelateToEffect(e) then tc1:RegisterFlagEffect(id+100,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SET_AVAILABLE,1) tc2:RegisterFlagEffect(id+200,RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END,EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_IGNORE_IMMUNE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SET_AVAILABLE,1) local e0=Effect.CreateEffect(c) e0:SetType(EFFECT_TYPE_SINGLE) e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SET_AVAILABLE) e0:SetCode(EFFECT_MUST_ATTACK) e0:SetLabelObject(tc2) e0:SetCondition(cid.btcon) e0:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END) tc1:RegisterEffect(e0) local e1=Effect.CreateEffect(c) e1:SetType(EFFECT_TYPE_SINGLE) e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SET_AVAILABLE) e1:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET) e1:SetLabelObject(tc2) e1:SetCondition(cid.btcon) e1:SetValue(cid.bttg) e1:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END) tc1:RegisterEffect(e1) local e2=Effect.CreateEffect(c) e2:SetType(EFFECT_TYPE_SINGLE) e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE+EFFECT_FLAG_UNCOPYABLE+EFFECT_FLAG_SET_AVAILABLE) e2:SetCode(EFFECT_CANNOT_DIRECT_ATTACK) e2:SetLabelObject(tc2) e2:SetCondition(cid.btcon) e2:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END) tc1:RegisterEffect(e2) local e3=Effect.CreateEffect(c) e3:SetType(EFFECT_TYPE_SINGLE) e3:SetProperty(EFFECT_FLAG_SET_AVAILABLE) e3:SetCode(EFFECT_INDESTRUCTABLE_BATTLE) e3:SetReset(RESET_EVENT+RESETS_STANDARD+RESET_PHASE+PHASE_END) e3:SetValue(1) tc2:RegisterEffect(e3) end end function cid.attg(e,c) return c==e:GetLabelObject() end function cid.bttg(e,c) return c~=e:GetLabelObject() end function cid.btcon(e) local c=e:GetHandler() local tc=e:GetLabelObject() return c and tc and c:GetFlagEffect(id+100)>0 and tc:GetFlagEffect(id+200)>0 end -- function cid.spcfilter(c,tp) return c:GetSummonLocation()==LOCATION_EXTRA and c:GetPreviousControler()==tp and c:IsPreviousLocation(LOCATION_MZONE) and c:IsPreviousPosition(POS_FACEUP) and bit.band(c:GetPreviousRaceOnField(),RACE_FAIRY)>0 end function cid.spcon(e,tp,eg,ep,ev,re,r,rp) return eg:IsExists(cid.spcfilter,1,nil,tp) and not eg:IsContains(e:GetHandler()) end function cid.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 cid.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