考虑使用不代表现有链接号的link
参数调用llSetLinkPrimitiveParamsFast()
,例如:
llSetLinkPrimitiveParamsFast( -5, [PRIM_POSITION, <0.0, 0.0, 0.0>]);
llSetLinkPrimitiveParamsFast(1337, [PRIM_POSITION, <0.0, 0.0, 0.0>]);
在我的所有测试中,这似乎默默地失败而不会中断脚本或抛出任何错误。但是,文档没有说明在这种情况下的预期行为,我找不到任何其他来源的详细说明。
答案 0 :(得分:1)
如您所见,与LINK_*
标志不匹配的不存在的链接号将无声地失败。但是,这可能会在某一天发生变化,并且您不希望所有脚本突然向用户转储大量错误消息。
我的解决方案是使用0,然后在运行任何内容之前检查它是否为false(任何非零数字的计算结果为true)。在链接集中,没有prim是链接0(root从1开始)。如果llGetNumberOfPrims
返回1,那么如果您正在寻找链接的prims,则您已经知道您有问题。但同样,您不希望将链接0添加到任何命令,因为它们会影响根。
您还可以使用DEBUG_CHANNEL
作为最大整数进行评估,如果您确实需要在不进行评估的情况下运行链接集列表,那么几乎肯定不会将其作为链接号访问。避免使用负数来识别空链接。
答案 1 :(得分:0)
对于llSetLinkPrimitiveParams()
或Fast
而言,我们只需要一个当前不是链接号的值。但是作为未来的证明很好,因此我们尝试选择一个永远不会成为链接号的链接。为了避免将来扩展链接集限制,我们可以选择最高的32位带符号整数2147483647(或0x7FFFFFFF),幸运的是,在LSL中甚至有一个常数:
llSetLinkPrimitiveParams( DEBUG-CHANNEL, [ ... ] );
但是,林登斯没有双重猜测。之所以提供该常量是因为聊天通道空间正在快速填充,并且没有人将其用于现有内容。最终它也可以用于链接号中的其他内容!因此,作为第二种反乌托邦的实验,我研究了使用0
的原因,因为根本链接时根链接号更改为1
。但是,当脚本原语可以取消链接时,此操作将失败。我们需要一个变量,该变量在链接时给出0
,而在未链接时给出1
;
llSetLinkPrimitiveParams( prim_count==1, [ ... ] );
如果您仍然具有对链接进行计数的功能,则使用此方法可以正确评估两种方式,如果此后计数没有变化。在原色飞到零角之前,取消链接并不总是运行更改后的事件!因此,这里是DEBUG-CHANNEL
的替代方法,无论链接集,附件或座位如何,它都可以获取当前的安全处置值:
llSetLinkPrimitiveParams( !( ( llGetObjectPrimCount( llGetKey() ) > 1 ) || ( llGetNumberOfPrims() > 1 ) ), [ ... ] );
当然,值得注意的是,如果您只打算在此处使用伪值,因为所有参数都将声明与PRIM-LINK-TARGET
的链接,那么这一切都是没有原因的;无论如何,第一个链接号将被下一个链接声明丢弃。
答案 2 :(得分:-1)