查看“LlRemoteLoadScriptPin”的源代码
←
LlRemoteLoadScriptPin
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: llRemoteLoadScriptPin( key target, string name, integer pin, integer running, integer start_param ); |参数= 参数:• key target – 在同一区域的[[prim]] [[UUID]] • string name – 脚本所在的prim目录中的脚本 • integer pin – 必须匹配pin设置[[llSetRemoteScriptAccessPin]] • integer running – [[boolean]],如果[[TRUE]]脚本设置为运行,如果[[FALSE]]脚本没有设置为运行 • integer start_param –在目标脚本中[[llGetStartParameter]]返回的值。 |返回值= 返回值:复制脚本名称到目标和设置为运行与start_param只有当目标的[[pin]]匹配pin 只有当脚本所有者可以修改目标时才有效。 |注意事项=这个函数使脚本休眠3.0秒。 如果目标不属于同一个人,并且名称没有传输权限,则[[DEBUG_CHANNEL]]上将显示错误。 如果名称权限不允许复制,则传输失败,并在[[DEBUG_CHANNEL]]上显示错误。 如果目标不在同一区域,则在[[DEBUG_CHANNEL]]上显示错误。 当脚本在库存之间被复制或移动时,它们的状态将无法在转移中保存下来。内存、事件队列和执行位置都被丢弃。 如果名称没有出现在prim的目录中,或者它不是一个脚本,那么DEBUG_CHANNEL将显示错误。 如果名称出现在目标prim的目录中,那么它将被悄悄地替换。 start_param只持续到脚本被重置。 只有附件的拥有者才能在佩戴时修改它。 如果目标是由不同用户拥有的附件,无论授予了什么对象修改权限,此函数都将以静默方式失败。 如果目标由不同的用户拥有,并且通过[[Edit, delete, or take my objects]]将修改权限授予脚本所有者,那么脚本所有者必须连接到sim,以便此函数成功执行。 如果pin不匹配,[[DEBUG_CHANNEL]]会显示错误“Task ~Prim~试图非法加载脚本到Task ~Other_Prim~!”“~Prim~”和“~Other_Prim~”用适用的Prim名称替换。 如果target是脚本的父(target == llGetKey()),那么在[[DEBUG_CHANNEL]]上会喊“无法添加项目!”。 如果包含此脚本的对象被转发到一个组,则脚本名需要传输权限;即使目标定约到同一组。 当脚本被设置为运行时(带有运行复选框或[[llSetScriptState]]), [[state_entry]]将被排队。 |示例= '''Basic Example''' Script copier <pre> //将脚本复制到第二个基本物体 integer PIN=1341134; default { state_entry() { llRemoteLoadScriptPin( llGetLinkKey(2), "some script", PIN, TRUE, 0xBEEEEEEF ); } } </pre> Pin setter 用于为prim设置大头针的简单脚本,以便稍后可以使用llRemoteLoadScriptPin向它发送脚本。 <pre> //Child Prim PIN setter integer PIN=1341134; default { state_entry() { llOwnerSay(llGetObjectName()+" : "+(string)llGetKey()+" is ready to accept a describer script using the agreed upon PIN."); llSetRemoteScriptAccessPin(PIN); } } </pre> '''Rez and copy a file from a control object''' 注意:目前启动消息上没有签名,只检查了所有者。 这个示例从inventory中调用了一个prim,其中包含一个基本的控制文件,并执行了一个基本的握手操作来设置pin并传输脚本。 在转移之后,rezzed prim中的helper脚本将删除自己。 Control prim <pre> integer controlchan = 0; integer controlid = -1; start() { llSetTimerEvent(0); talkingto = NULL_KEY; integer a = (integer)llFrand(43); controlchan = a * a; controlchan -= controlchan * 3; controlid = llListen(controlchan,"","","set-connect"); llRezObject("card",llGetPos()+<0,0,0.1>,<0,0,0>,ZERO_ROTATION,a); llSetTimerEvent(60); } key talkingto = NULL_KEY; integer busy = FALSE; integer accesspin = 0; default { timer() { llSetTimerEvent(0); llOwnerSay("Lost connection!"); llListenRemove(controlid); busy = FALSE; } listen(integer chan,string name,key id,string message) { if(chan == controlchan) { if(llGetOwnerKey(id) == llGetOwner()) { if(talkingto == NULL_KEY) { if(message == "set-connect") { llSetTimerEvent(0); talkingto = id; llListenRemove(controlid); controlid = llListen(controlchan,"",talkingto,"ready"); llRegionSayTo(id,controlchan,"auto-connect"); llSetTimerEvent(60); } } else if(id == talkingto) { if(message == "ready") { llSetTimerEvent(0); accesspin = (integer)llFrand(2345)+213; llListenRemove(controlid); controlid = llListen(controlchan,"",talkingto,"pinset"); llSleep(1); llRegionSayTo(talkingto,controlchan,(string)accesspin); llSetTimerEvent(60); } else if(message == "pinset") { llSetTimerEvent(0); llListenRemove(controlid); llRemoteLoadScriptPin(talkingto,"demo.lsl",accesspin,1,0); llSleep(3); llRegionSayTo(talkingto,controlchan,"finished"); llOwnerSay("Transfer of file finished - control file should have auto deleted itself!"); busy = FALSE; } } } } } touch_end(integer a) { if(busy == FALSE) { busy = TRUE; if(llGetOwner() == llDetectedKey(0)) { start(); } } } } </pre> rezzed prim <pre> integer listen_id = -1; integer listen_chan = -1; key details_from = NULL_KEY; default { on_rez(integer a) { if(a == 0) { llOwnerSay("- Direct rez -"); } else { llOwnerSay("- Awaiting config connection -"); listen_chan = a * a; listen_chan -= listen_chan * 3; listen_id = llListen(listen_chan,"","","auto-connect"); llWhisper(listen_chan,"set-connect"); llSetTimerEvent(30); } } timer() { llOwnerSay("Failed to connect to rezzer deleting myself!"); llSetTimerEvent(0); llDie(); } listen(integer chan,string name,key id,string message) { if(llGetOwnerKey(id) == llGetOwner()) { if(message == "auto-connect") { llSetTimerEvent(0); llListenRemove(listen_id); listen_id = llListen(listen_chan,"",id,""); llRegionSayTo(id,listen_chan,"ready"); details_from = id; llSetTimerEvent(30); } else if(details_from != NULL_KEY) { llSetTimerEvent(0); if(message == "finished") { llSetRemoteScriptAccessPin((integer)message); llRemoveInventory(llGetScriptName()); } else { llSetRemoteScriptAccessPin((integer)message); llRegionSayTo(id,listen_chan,"pinset"); } llSetTimerEvent(30); } } } } </pre> |相关函数= • [[llSetRemoteScriptAccessPin]] – 用于设置用于远程加载的prim • [[llSetScriptState]] – 设置脚本运行状态 • [[llResetOtherScript]] – 在prim中重置另一个脚本 }}
该页面使用的模板:
模板:LSL Header
(
查看源代码
)
模板:LSLC
(
查看源代码
)
模板:LSLGC
(
查看源代码
)
模板:Multi-lang
(
查看源代码
)
模板:函数详情
(
查看源代码
)
返回至
LlRemoteLoadScriptPin
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
网站首页
知识百科
编辑帮助
最近更改
工具
链入页面
相关更改
特殊页面
页面信息