LlSetClickAction

来自人工智能助力教育知识百科
Mkx讨论 | 贡献2020年8月26日 (三) 04:05的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Template:Needs Translation/


函数名
Function: llSetClickAction( integer action );
参数:• integer action – CLICK_ACTION_* flag
返回值:设置单击prim时执行的操作(又名单击操作)。

当光标悬停在prim上时,它的图像会改变以反映操作。

注意事项
当在一个对象的根中设置时,所选的CLICK_ACTION_*将是为孩子们也即使他们有自己的llSetClickAction集(它将被覆盖)。然而(例如在触摸)如果CLICK_ACTION_ *在根中设置,但不是所有的孩子(包括事件脚本在他们没有联系(这将创建一个默认CLICK_ACTION_TOUCH))的影响根源CLICK_ACTION_ *未见但CLICK_ACTION_ *点击使用。为了使用和看到正确的光标,CLICK_ACTION_*标志必须在子目录和根目录中匹配。

如果llSetClickAction是CLICK_ACTION_PAY,那么您必须有一个money事件,否则它将恢复为CLICK_ACTION_NONE。

当此功能工作或附加对象(可以更改单击操作)时,查看器将忽略配置的附件单击操作。查看器的行为始终像一个附加对象已经设置了CLICK_ACTION_TOUCH。

示例
make sitting easier
default
{
    state_entry()
    {
        llSetClickAction(CLICK_ACTION_SIT);
        llRemoveInventory(llGetScriptName());
    }
}
//  simple tipjar
 
default
{
    state_entry()
    {
        llSetClickAction(CLICK_ACTION_BUY);
 
//启用了自己的金额编辑字段,所有快速支付按钮隐藏
        llSetPayPrice(PAY_DEFAULT, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }
 
    money(key id, integer amount)
    {
        string name = llKey2Name(id);
 
        llInstantMessage(id, "Thank you for the tip, " + name + "!");
    }
}
//Sit Only with Permission
 
list gAvWhitelist = ["953d10f1-44ce-462a-8bc1-f634333ee031","599dce91-a2b8-48c5-b96d-54965433022b"];
 
default
{
    state_entry()
    {
        llSitTarget(<0.0,0.0,0.5>,ZERO_ROTATION);
    }
 
    changed(integer change)
    {
        if(change & CHANGED_LINK)
        {
            list Properties = llGetObjectDetails(llGetKey(),[OBJECT_CLICK_ACTION]);
            integer Click = llList2Integer(Properties,0);
            key Av = llAvatarOnSitTarget();
            if ((Av != NULL_KEY) && (!Click))
            {
                llSay(0,"Please click first for permission to sit.");
                llUnSit(Av);
            }
        }
    }
    touch_start(integer total_number)
    {
        list Properties = llGetObjectDetails(llGetKey(),[OBJECT_CLICK_ACTION]);
        integer Click = llList2Integer(Properties,0);
        if (!Click && (~llListFindList(gAvWhitelist,[(string)llDetectedKey(0)])) )
        {
            llSetClickAction(CLICK_ACTION_SIT);
            llSetTimerEvent(10.0);
            llSay(0,"Please take a seat.");
        }
        else
        {
            llSetClickAction(CLICK_ACTION_TOUCH);
            if (llAvatarOnSitTarget() != NULL_KEY)
            {
                llSay(0,"Good bye!");
            }
            else
            {
                llSay(0,"Sorry.  You are not allowed to sit here.");
            }
            llUnSit(llDetectedKey(0));
        }            
    }
 
    timer()
    {
        llSetTimerEvent(0.0);
        llSetClickAction(CLICK_ACTION_TOUCH);
    }
}
相关函数
llPassTouches
相关事件
touch_start

touch

touch_end

附录:(表格)

Flag Description
CLICK_ACTION_BUY 2 当点击prim时,会打开buy对话框
CLICK_ACTION_DISABLED 8 没有点击动作。没有检测到或传递触摸。
CLICK_ACTION_NONE 0 执行默认动作:当prim被触摸时,触摸事件被触发
CLICK_ACTION_OPEN 4 当触摸prim时,对象库存对话框打开
CLICK_ACTION_OPEN_MEDIA 6 触摸播放包裹媒体,没有暂停
CLICK_ACTION_PAY 3 当点击prim时,pay对话框打开
CLICK_ACTION_PLAY 5 播放或暂停包裹媒体触摸
CLICK_ACTION_SIT 1 当触碰物体时,化身就坐在它上面
CLICK_ACTION_TOUCH 0 当prim被触摸时,触摸事件被触发
CLICK_ACTION_ZOOM 7 Zoom (Viewer 2)