name: Cyberdark
card_text: You can discard 1 Spell/Trap; add 1 "Power Bond" from your Deck to your hand, you can only use Dragon or Machine "Cyber" monsters as Fusion Material this turn, also once when you Fusion Summon this turn, you can also banish monster(s) from your GY as material. If this card is sent to the GY: You can send 1 "Cyberdark" monster from your Deck to the GY, with a different name from the cards in your GY. You can only use each effect of "Cyberdark Chimera" once per turn.
external_ids: local CARD_ID_0 = 37630732 --Power Bond
  local SETCARD_ID_0 = 0x93 --Cyber
  local SETCARD_ID_1 = 0x4093 --Cyberdark
  
lua: local CARD_ID_0 = 37630732 --Power Bond
  local SETCARD_ID_0 = 0x93 --Cyber
  local SETCARD_ID_1 = 0x4093 --Cyberdark
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--to hand
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCost(s.thcost)
  	e1:SetTarget(s.thtg)
  	e1:SetOperation(s.thop)
  	c:RegisterEffect(e1)
  	--to grave
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_TOGRAVE)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_TO_GRAVE)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCountLimit(1, id + o)
  	e2:SetTarget(s.tgtg)
  	e2:SetOperation(s.tgop)
  	c:RegisterEffect(e2)
  end
  function s.costfilter(c)
  	return c:IsType(TYPE_SPELL + TYPE_TRAP) and c:IsDiscardable()
  end
  function s.thcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.costfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.DiscardHand(tp, s.costfilter, 1, 1, REASON_COST + REASON_DISCARD, nil)
  end
  function s.thfilter(c)
  	return c:IsCode(CARD_ID_0) and c:IsAbleToHand()
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  	local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
  	if g:GetCount() > 0 then
  		Duel.SendtoHand(g, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, g)
  	end
  	-- Can only use Dragon or Machine "Cyber" monsters as Fusion Material this turn
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_CANNOT_BE_FUSION_MATERIAL)
  	e1:SetProperty(EFFECT_FLAG_SET_AVAILABLE + EFFECT_FLAG_IGNORE_IMMUNE)
  	e1:SetTargetRange(0xff, 0xff)
  	e1:SetTarget(s.limittg)
  	e1:SetValue(s.fuslimit)
  	e1:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e1, tp)
  	-- Can also banish monsters from your GY as material once when you Fusion Summon this turn
  	local e2 = Effect.CreateEffect(e:GetHandler())
  	e2:SetDescription(aux.Stringid(id, 2))
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_EXTRA_FUSION_MATERIAL)
  	e2:SetTargetRange(LOCATION_GRAVE, 0)
  	e2:SetCountLimit(1)
  	e2:SetTarget(s.mttg)
  	e2:SetOperation(function()
  		return FusionSpell.FUSION_OPERATION_BANISH
  	end)
  	e2:SetValue(function(extra_material_effect, c)
  		return c and c:IsControler(extra_material_effect:GetHandlerPlayer())
  	end)
  	e2:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e2, tp)
  end
  function s.limittg(e, c)
  	return not (c:IsRace(RACE_DRAGON + RACE_MACHINE) and c:IsSetCard(SETCARD_ID_1))
  end
  function s.fuslimit(e, c, sumtype)
  	if not c then
  		return false
  	end
  	return c:IsControler(e:GetHandlerPlayer())
  end
  function s.mttg(e, c)
  	return c:IsType(TYPE_MONSTER) and c:IsAbleToRemove()
  end
  function s.tgfilter(c, tp)
  	return c:IsSetCard(SETCARD_ID_1) and c:IsType(TYPE_MONSTER) and not Duel.IsExistingMatchingCard(Card.IsCode, tp, LOCATION_GRAVE, 0, 1, nil, c:GetCode()) and c:IsAbleToGrave()
  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, tp)
  	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, tp)
  	if g:GetCount() > 0 then
  		Duel.SendtoGrave(g, REASON_EFFECT)
  	end
  end
  
  
source_text: Cyberdark
  You can discard 1 Spell/Trap; add 1 "Power Bond" from your Deck to your hand, you can only use Dragon or Machine "Cyber" monsters as Fusion Material this turn, also once when you Fusion Summon this turn, you can also banish monster(s) from your GY as material. If this card is sent to the GY: You can send 1 "Cyberdark" monster from your Deck to the GY, with a different name from the cards in your GY. You can only use each effect of "Cyberdark Chimera" once per turn.
target_text: -- Cyberdark
  local CARD_ID_0 = 37630732 --Power Bond
  local SETCARD_ID_0 = 0x93 --Cyber
  local SETCARD_ID_1 = 0x4093 --Cyberdark
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--to hand
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetCost(s.thcost)
  	e1:SetTarget(s.thtg)
  	e1:SetOperation(s.thop)
  	c:RegisterEffect(e1)
  	--to grave
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_TOGRAVE)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_TO_GRAVE)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCountLimit(1, id + o)
  	e2:SetTarget(s.tgtg)
  	e2:SetOperation(s.tgop)
  	c:RegisterEffect(e2)
  end
  function s.costfilter(c)
  	return c:IsType(TYPE_SPELL + TYPE_TRAP) and c:IsDiscardable()
  end
  function s.thcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.costfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.DiscardHand(tp, s.costfilter, 1, 1, REASON_COST + REASON_DISCARD, nil)
  end
  function s.thfilter(c)
  	return c:IsCode(CARD_ID_0) and c:IsAbleToHand()
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  	local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
  	if g:GetCount() > 0 then
  		Duel.SendtoHand(g, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, g)
  	end
  	-- Can only use Dragon or Machine "Cyber" monsters as Fusion Material this turn
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_CANNOT_BE_FUSION_MATERIAL)
  	e1:SetProperty(EFFECT_FLAG_SET_AVAILABLE + EFFECT_FLAG_IGNORE_IMMUNE)
  	e1:SetTargetRange(0xff, 0xff)
  	e1:SetTarget(s.limittg)
  	e1:SetValue(s.fuslimit)
  	e1:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e1, tp)
  	-- Can also banish monsters from your GY as material once when you Fusion Summon this turn
  	local e2 = Effect.CreateEffect(e:GetHandler())
  	e2:SetDescription(aux.Stringid(id, 2))
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_EXTRA_FUSION_MATERIAL)
  	e2:SetTargetRange(LOCATION_GRAVE, 0)
  	e2:SetCountLimit(1)
  	e2:SetTarget(s.mttg)
  	e2:SetOperation(function()
  		return FusionSpell.FUSION_OPERATION_BANISH
  	end)
  	e2:SetValue(function(extra_material_effect, c)
  		return c and c:IsControler(extra_material_effect:GetHandlerPlayer())
  	end)
  	e2:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e2, tp)
  end
  function s.limittg(e, c)
  	return not (c:IsRace(RACE_DRAGON + RACE_MACHINE) and c:IsSetCard(SETCARD_ID_1))
  end
  function s.fuslimit(e, c, sumtype)
  	if not c then
  		return false
  	end
  	return c:IsControler(e:GetHandlerPlayer())
  end
  function s.mttg(e, c)
  	return c:IsType(TYPE_MONSTER) and c:IsAbleToRemove()
  end
  function s.tgfilter(c, tp)
  	return c:IsSetCard(SETCARD_ID_1) and c:IsType(TYPE_MONSTER) and not Duel.IsExistingMatchingCard(Card.IsCode, tp, LOCATION_GRAVE, 0, 1, nil, c:GetCode()) and c:IsAbleToGrave()
  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, tp)
  	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, tp)
  	if g:GetCount() > 0 then
  		Duel.SendtoGrave(g, REASON_EFFECT)
  	end
  end
  
  