Generate a YGOPro Lua script for the following Yu-Gi-Oh card effect:
Target 1 face-up card your opponent controls and 1 "Madolche" monster you control or in your GY; negate the effects of that opponent's card until the end of this turn, and if you do, return your monster to the hand. You can banish this card from your GY, then target 1 "Madolche" Xyz Monster you control; attach 1 "Madolche" monster from your hand, Deck, or GY, to it as material. You can only use 1 "Madolche Promenade" effect per turn, and only once that turn.
--マドルチェ・プロムナード
--Madolche Promenade
--Scripted by Eerie Code
local s,id=GetID()
function s.initial_effect(c)
	--Activate
	local e1=Effect.CreateEffect(c)
	e1:SetDescription(aux.Stringid(id,0))
	e1:SetCategory(CATEGORY_DISABLE+CATEGORY_TOHAND)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetHintTiming(0,TIMING_MAIN_END|TIMINGS_CHECK_MONSTER_E)
	e1:SetCountLimit(1,id)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
	--Attach 1 "Madolche" monster from your hand, Deck, or GY to 1 "Madolche" Xyz Monster you control
	local e2=Effect.CreateEffect(c)
	e2:SetDescription(aux.Stringid(id,1))
	e2:SetType(EFFECT_TYPE_QUICK_O)
	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
	e2:SetCode(EVENT_FREE_CHAIN)
	e2:SetRange(LOCATION_GRAVE)
	e2:SetHintTiming(0,TIMING_MAIN_END|TIMINGS_CHECK_MONSTER_E)
	e2:SetCountLimit(1,id)
	e2:SetCost(Cost.SelfBanish)
	e2:SetTarget(s.attachtg)
	e2:SetOperation(s.attachop)
	c:RegisterEffect(e2)
end
s.listed_series={SET_MADOLCHE}
function s.thfilter(c)
	return c:IsSetCard(SET_MADOLCHE) and c:IsMonster() and c:IsFaceup() and c:IsAbleToHand()
end
function s.target(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
	if chkc then return false end
	if chk==0 then return Duel.IsExistingTarget(Card.IsNegatable,tp,0,LOCATION_ONFIELD,1,nil) 
		and Duel.IsExistingTarget(s.thfilter,tp,LOCATION_MZONE|LOCATION_GRAVE,0,1,nil) end
	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_NEGATE)
	local dis_tc=Duel.SelectTarget(tp,Card.IsNegatable,tp,0,LOCATION_ONFIELD,1,1,nil):GetFirst()
	e:SetLabelObject(dis_tc)
	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_RTOHAND)
	local g=Duel.SelectTarget(tp,s.thfilter,tp,LOCATION_MZONE|LOCATION_GRAVE,0,1,1,nil)
	Duel.SetOperationInfo(0,CATEGORY_DISABLE,dis_tc,1,tp,0)
	Duel.SetOperationInfo(0,CATEGORY_TOHAND,g,1,tp,0)
end
function s.activate(e,tp,eg,ep,ev,re,r,rp)
	local dis_tc=e:GetLabelObject()
	if dis_tc:IsRelateToEffect(e) and dis_tc:IsFaceup() and dis_tc:IsControler(1-tp)
		and dis_tc:IsCanBeDisabledByEffect(e) then
		--Negate its effects until the end of this turn
		dis_tc:NegateEffects(e:GetHandler(),RESET_PHASE|PHASE_END,true)
		Duel.AdjustInstantly(dis_tc)
		local ret_tc=(Duel.GetTargetCards(e)-dis_tc):GetFirst()
		if ret_tc and ret_tc:IsControler(tp) then
			Duel.SendtoHand(ret_tc,nil,REASON_EFFECT)
		end
	end
end
function s.xyzfilter(c)
	return c:IsSetCard(SET_MADOLCHE) and c:IsType(TYPE_XYZ) and c:IsFaceup()
end
function s.attachfilter(c)
	return c:IsSetCard(SET_MADOLCHE) and c:IsMonster() and not c:IsForbidden()
end
function s.attachtg(e,tp,eg,ep,ev,re,r,rp,chk,chkc)
	if chkc then return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_MZONE) and s.xyzfilter(chkc) end
	if chk==0 then return Duel.IsExistingTarget(s.xyzfilter,tp,LOCATION_MZONE,0,1,nil)
		and Duel.IsExistingMatchingCard(s.attachfilter,tp,LOCATION_HAND|LOCATION_DECK|LOCATION_GRAVE,0,1,nil) end
	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_FACEUP)
	Duel.SelectTarget(tp,s.xyzfilter,tp,LOCATION_MZONE,0,1,1,nil)
end
function s.attachop(e,tp,eg,ep,ev,re,r,rp)
	local tc=Duel.GetFirstTarget()
	if not (tc:IsRelateToEffect(e) and not tc:IsImmuneToEffect(e)) then return end
	Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_ATTACH)
	local g=Duel.SelectMatchingCard(tp,aux.NecroValleyFilter(s.attachfilter),tp,LOCATION_HAND|LOCATION_DECK|LOCATION_GRAVE,0,1,1,nil)
	if #g>0 then
		Duel.Overlay(tc,g)
	end
end