I’m trying to write a script to override the material on a Redshift proxy.
I can’t access the proxy material from the proxy rollout.
I’m stuck at this point — any help would be appreciated.

attach script here:
macroScript RS_Proxy_Overdrive
category:"Hihead"
toolTip:"RS_Proxy_Overdrive"
ButtonText:"RS_Proxy_Overdrive"
-- version:0
(
local selID = #MyRollout_SelectionChanged
try destroydialog(RS_Proxy_Overdrive)catch()
rollout RS_Proxy_Overdrive "RS_Proxy_Overdrive" width:180 height:385
(
local prefix = "prefix_"
fn findDuble matname =(
dubmat = undefined
for m in sceneMaterials where classof m == Multimaterial do(
for s=1 to m.numsubs do(
if m[s] != undefined and m[s].name == matname do
(
dubmat = m[s]
exit
)
)
)
dubmat
)
fn updateUI =
(
if selection.count == 0 then(
RS_Proxy_Overdrive.lblSel.text = "No selection"
RS_Proxy_Overdrive.dncText.Text = ""
)else(
if classof selection[1] != proxy then(
RS_Proxy_Overdrive.lblSel.text = "Not Proxy"
RS_Proxy_Overdrive.dncText.Text = ""
)else(
local existMat = ""
local prefix = RS_Proxy_Overdrive.et_prefix.text
if selection[1].material != undefined and classof selection[1].material == Multimaterial then(
local m = selection[1].material
for i=1 to m.numsubs do
(
local sm = m[i]
if sm != undefined do (existMat =existMat + (substring sm.name (prefix.count+1) sm.name.count) + "")
)
)
RS_Proxy_Overdrive.lblSel.text = ("Selected: " + selection[1].name)
RS_Proxy_Overdrive.dncText.Text = existMat
)
)
)
label lblSel "No selection"
group "Proxy Material"
(
dotNetControl dncText "System.Windows.Forms.Textbox" width:165 height:170 align:#center
)
group "Setting"
(
edittext et_prefix "Prefix mat:" text:prefix
checkbox ch_instance "Assign to instance" checked:true
checkbox ch_uniqueMat "Unique Mat for proxy" checked:false
checkbox ch_hide "Hide After"
materialbutton bnmtl_tmp "Select material"
)
button bn_start "Apply to selection" enabled:false
on RS_Proxy_Overdrive open do
(
updateUI()
callbacks.removeScripts id:selID
callbacks.addScript #selectionSetChanged "try(RS_Proxy_Overdrive.updateUI())catch()" id:selID
dncText.AcceptsReturn = true;
dncText.AcceptsTab = true;
dncText.WordWrap = false;
dncText.Multiline = true;
dncText.ScrollBars = dncText.ScrollBars.Vertical;
)
on RS_Proxy_Overdrive close do
(
callbacks.removeScripts id:selID
)
on et_prefix changed state do(
updateUI()
)
on bnmtl_tmp picked mtl do(
bnmtl_tmp.text = mtl.name
bn_start.enabled=true
)
on dncText keydown pressedKey do
(
if (pressedKey.keyvalue == 13) do dncText.paste("");
)
on bn_start pressed do(
local PR = selection[1]
if classof PR ==proxy then(
local tmat = bnmtl_tmp.material
local RSprefix = et_prefix.text
local RSMatsString = dncText.Text
local instanceNodes = for obj in objects where classof obj == proxy and obj.file == PR.file collect obj
local RSMatsArr = for str in (filterString RSMatsString "") collect (RSprefix+str)
local RSOvverideMat = Multimaterial name:PR.name numsubs:RSMatsArr.count
for i=1 to RSMatsArr.count do(
local dubSubmat = undefined
local submat = copy tmat
submat.name = RSMatsArr[i]
if ch_uniqueMat.state !=true then(dubSubmat = findDuble (submat.name))
if dubSubmat!=undefined then(
replaceInstances dubSubmat submat
RSOvverideMat[i] = submat
)
else
(
RSOvverideMat[i] = submat
)
)
if instanceNodes.count!=0 then(
for obj in instanceNodes do
(
obj.material = RSOvverideMat
obj.materialmode=2
obj.namematchprefix = RSprefix
)
)
if ch_hide.state == true then hide instanceNodes
)
)
)
createdialog RS_Proxy_Overdrive
)