--[[ Viravolve Reaper Viravolve Mietitore Original Script by: Lyris Rescripted by: XGlitchy30 ]] local s,id=GetID() function s.initial_effect(c) Duel.EnableGlobalFlag(GLOBALFLAG_DETACH_EVENT) --xyz summon c:EnableReviveLimit() local e1=Effect.CreateEffect(c) e1:SetDescription(1165) e1:SetType(EFFECT_TYPE_FIELD) e1:SetCode(EFFECT_SPSUMMON_PROC) e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE|EFFECT_FLAG_UNCOPYABLE) e1:SetRange(LOCATION_EXTRA) e1:SetLabel(1) e1:SetCondition(Auxiliary.XyzLevelFreeCondition(s.ovfilter,s.xyzcheck,1,99)) e1:SetTarget(Auxiliary.XyzLevelFreeTarget(s.ovfilter,s.xyzcheck,1,99)) e1:SetOperation(s.XyzLevelFreeOperation(s.ovfilter,s.xyzcheck,1,99)) e1:SetValue(SUMMON_TYPE_XYZ) c:RegisterEffect(e1) --limit local e1=Effect.CreateEffect(c) e1:SetType(EFFECT_TYPE_SINGLE|EFFECT_TYPE_CONTINUOUS) e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) e1:SetCode(EVENT_SPSUMMON_SUCCESS) e1:SetCondition(s.regcon) e1:SetOperation(s.regop) c:RegisterEffect(e1) --atk local e2=Effect.CreateEffect(c) e2:SetType(EFFECT_TYPE_SINGLE) e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE) e2:SetCode(EFFECT_UPDATE_ATTACK) e2:SetRange(LOCATION_MZONE) e2:SetValue(s.atkval) c:RegisterEffect(e2) local e3=e2:Clone() e3:SetCode(EFFECT_UPDATE_DEFENSE) c:RegisterEffect(e3) --protect local e4=Effect.CreateEffect(c) e4:SetType(EFFECT_TYPE_CONTINUOUS|EFFECT_TYPE_SINGLE) e4:SetProperty(EFFECT_FLAG_SINGLE_RANGE) e4:SetCode(EFFECT_DESTROY_REPLACE) e4:SetRange(LOCATION_MZONE) e4:SetTarget(s.reptg) c:RegisterEffect(e4) --destroy local e5=Effect.CreateEffect(c) e5:Desc(0) e5:SetCategory(CATEGORY_DESTROY) e5:SetType(EFFECT_TYPE_FIELD|EFFECT_TYPE_TRIGGER_O) e5:SetProperty(EFFECT_FLAG_CARD_TARGET) e5:SetCode(EVENT_PHASE|PHASE_END) e5:SetRange(LOCATION_MZONE) e5:SetCountLimit(1) e5:SetCondition(s.descon) e5:SetTarget(s.destg) e5:SetOperation(s.desop) c:RegisterEffect(e5) if not s.global_check then s.global_check=true local ge1=Effect.CreateEffect(c) ge1:SetType(EFFECT_TYPE_FIELD|EFFECT_TYPE_CONTINUOUS) ge1:SetCode(EVENT_DETACH_MATERIAL) ge1:SetCondition(function(e,tp,eg,ep,ev,re,r,rp) return r&REASON_LOST_OVERLAY==0 end) ge1:SetOperation(s.flagop) Duel.RegisterEffect(ge1,0) end end function s.XyzLevelFreeOperation(f,gf,minct,maxct) return function(e,tp,eg,ep,ev,re,r,rp,c,og,min,max) if og and not min then local sg=Group.CreateGroup() local tc=og:GetFirst() while tc do local sg1=tc:GetOverlayGroup() sg:Merge(sg1) tc=og:GetNext() end Duel.SendtoGrave(sg,REASON_RULE) c:SetMaterial(og) Duel.Overlay(c,og) else local mg=e:GetLabelObject() if e:GetLabel()==1 then for mc in aux.Next(mg) do local mg2=mc:GetOverlayGroup() if mg2:GetCount()~=0 then Duel.Overlay(c,mg2) end end else local sg=Group.CreateGroup() local tc=mg:GetFirst() while tc do local sg1=tc:GetOverlayGroup() sg:Merge(sg1) tc=mg:GetNext() end Duel.SendtoGrave(sg,REASON_RULE) end c:SetMaterial(mg) Duel.Overlay(c,mg) mg:DeleteGroup() end end end --XYZ SUMMON function s.ovfilter(c,xyzc) return c:IsRace(RACE_CYBERSE) and (c:IsXyzLevel(xyzc,2) or (c:IsType(TYPE_XYZ) and c:IsRank(1,2))) end function s.xyzfilter(c) return c:IsRace(RACE_CYBERSE) and c:IsType(TYPE_XYZ) and c:IsRank(1,2) end function s.xyzcheck(g) local ct=g:FilterCount(s.xyzfilter,nil) return ct==#g or (ct==0 and #g==3) end --REGISTER FLAG function s.regfilter(c,p) return c:IsFaceup() and c:IsType(TYPE_XYZ) and c:IsControler(p) end function s.flagop(e,tp,eg,ep,ev,re,r,rp) for p=0,1 do if eg:IsExists(s.regfilter,1,nil,p) then Duel.RegisterFlagEffect(p,id,RESET_PHASE|PHASE_END,0,1) end end end --E1 function s.regcon(e,tp,eg,ep,ev,re,r,rp) return e:GetHandler():IsSummonType(SUMMON_TYPE_XYZ) end function s.regop(e,tp,eg,ep,ev,re,r,rp) local c=e:GetHandler() local e1=Effect.CreateEffect(c) e1:SetType(EFFECT_TYPE_FIELD) e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON) e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET) e1:SetTargetRange(1,0) e1:SetReset(RESET_PHASE|PHASE_END) e1:SetTarget(s.splimit) Duel.RegisterEffect(e1,c:GetSummonPlayer()) end function s.splimit(e,c,sump,sumtype,sumpos,targetp,se) return c:IsCode(id) and sumtype&SUMMON_TYPE_XYZ==SUMMON_TYPE_XYZ end --E2 function s.atkval(e,c) return c:GetOverlayCount()*500 end --E4 function s.reptg(e,tp,eg,ep,ev,re,r,rp,chk) local c=e:GetHandler() if chk==0 then return not c:IsReason(REASON_REPLACE) and c:CheckRemoveOverlayCard(tp,1,REASON_EFFECT) end if Duel.SelectEffectYesNo(tp,c,96) then c:RemoveOverlayCard(tp,1,1,REASON_EFFECT) return true else return false end end --E5 function s.descon(e,tp,eg,ep,ev,re,r,rp) return Duel.PlayerHasFlagEffect(tp,id) end function s.destg(e,tp,eg,ep,ev,re,r,rp,chk,chkc) if chkc then return chkc:IsOnField() end if chk==0 then return Duel.IsExistingTarget(nil,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,nil) end Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_DESTROY) local g=Duel.SelectTarget(tp,nil,tp,LOCATION_ONFIELD,LOCATION_ONFIELD,1,1,nil) Duel.SetCardOperationInfo(g,CATEGORY_DESTROY) end function s.desop(e,tp,eg,ep,ev,re,r,rp) local tc=Duel.GetFirstTarget() if tc:IsRelateToChain() then Duel.Destroy(tc,REASON_EFFECT) end end