搜索
查看: 192|回复: 3
收起左侧

玩家挂机动作

[复制链接]
admin 发表于 2024-2-19 13:24:31 | 显示全部楼层 |阅读模式
玩家站着不动挂机的时候,静止超过5秒钟就自动循环播放拍手动作,一直到玩家开始动才取消https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q?pwd=nop5
https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv
https://pan.baidu.com/s/8Y9Z0A1B2C3D4E5F6G7H?pwd=mno6
https://pan.baidu.com/s/4W5X6Y7Z8A9B0C1D2E3F
  • https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef
  • https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
    回复 论坛版权

    使用道具 举报

    ChatGPT 发表于 2024-2-19 13:24:56 | 显示全部楼层
    你可以使用以下代码来实现这个功能:
    local isIdle = false -- 玩家是否处于静止状态
    local timer = nil -- 定时器
    
    Citizen.CreateThread(function()
        while true do
            Citizen.Wait(0)
            
            local playerPed = PlayerPedId()
            local pedCoords = GetEntityCoords(playerPed)
    
            if IsPedStill(playerPed) and not isIdle then
                isIdle = true
                StartTimer()
            elseif not IsPedStill(playerPed) and isIdle then
                isIdle = false
                StopTimer()
            end
            
            if isIdle and IsTimerFinished() then
                PlayAnimation(playerPed, "anim@mp_player_intcelebrationmale@slow_clap", "slow_clap")
                ResetTimer()
            end
        end
    end)
    
    function StartTimer()
        timer = GetGameTimer()
    end
    
    function StopTimer()
        timer = nil
    end
    
    function ResetTimer()
        timer = GetGameTimer()
    end
    
    function IsTimerFinished()
        if GetGameTimer() - timer >= 5000 then
            return true
        else
            return false
        end
    end
    
    function PlayAnimation(ped, dictionary, animation)
        RequestAnimDict(dictionary)
        while not HasAnimDictLoaded(dictionary) do
            Citizen.Wait(100)
        end
        TaskPlayAnim(ped, dictionary, animation, 8.0, -8.0, -1, 16, 0, false, false, false)
        RemoveAnimDict(dictionary)
    end

    在这段代码中,我们首先创建了一个线程来检测玩家的状态。如果玩家处于静止状态并且之前不是静止状态,则启动一个计时器。当玩家开始移动时,停止计时器。

    如果玩家处于静止状态并且计时器已经超过了5秒钟,则执行拍手动作。这个动作使用了`anim@mp_player_intcelebrationmale@slow_clap`的动画字典和`slow_clap`的动画名称。你可以根据自己的需要修改这些参数。

    在代码中,我们用到了一些帮助函数,包括启动计时器、停止计时器、重置计时器、判断计时器是否完成,并将这些函数封装在了一个新的线程中。

    请确保将这段代码放入你的服务器脚本中,并使用正确的触发器来运行它。

    希望对你有所帮助!如果还有其他问题,请随时向我提问。
    回复

    使用道具 举报

     楼主| admin 发表于 2024-2-19 13:42:46 | 显示全部楼层
    你调用的这个动作anim@mp_player_intcelebrationmale@slow_clap,这个是在哪里存放的,我自己可以添加动作么?怎么添加
    回复

    使用道具 举报

    ChatGPT 发表于 2024-2-19 13:43:09 | 显示全部楼层
    admin 发表于 2024-02-19 13:42
    你调用的这个动作anim@mp_player_intcelebrationmale@ ...


    动画文件通常会存储在资源文件夹中的`stream`文件夹下。在FiveM中,你可以将自定义的动画文件添加到服务器资源中。以下是添加自定义动画的步骤:

    1. 创建一个包含动画文件的资源文件夹。你可以将资源文件夹放在服务器的资源文件夹中的任意位置。为了方便起见,你可以在服务器的`resources`文件夹下创建一个新文件夹,并将资源文件夹放置其中。

    2. 在资源文件夹中创建一个`stream`文件夹。这个文件夹用于存放动画文件。

    3. 在`stream`文件夹中添加一个命名为`__resource.lua`的脚本文件。此文件用于定义资源所需的元数据。

    4. 编辑`__resource.lua`文件,并使用以下代码模板进行配置:
    files {
        'stream/your_animation_dictionary.anim',
        'stream/your_animation_hierarchy.hierarchymeta'
    }
    
    data_file 'ANIM_DICT' 'stream/your_animation_dictionary.anim'
    data_file 'HIERARCHYINFO_FILE' 'stream/your_animation_hierarchy.hierarchymeta'

    请将上述代码中的`your_animation_dictionary`替换为你自己动画文件的字典名称,将`your_animation_hierarchy`替换为你自己动画文件的层级信息文件名称。确保文件扩展名与实际文件相匹配。

    5. 将你自己的动画文件(`.anim`和`.hierarchymeta`文件)添加到`stream`文件夹中。

    6. 保存并关闭`__resource.lua`文件。

    7. 在服务器配置文件(通常是`server.cfg`)中将你的资源名称添加到资源列表中。例如:`ensure your_resource_name`。

    8. 启动或重启服务器,使更改生效。

    一旦你添加了自己的动画文件,并在脚本中正确引用它们,你就可以在代码中使用新的动画字典和动画名称来播放自定义动画了。

    请注意,为了确保所有玩家都能看到和使用自定义动画,你需要确保他们都有下载和安装这些自定义资源。你可以通过将这些资源放在一个服务器资源包中,并要求玩家在加入服务器时自动下载该包来实现。

    希望这些步骤对你有所帮助!如果还有其他问题,请随时向我提问。
    回复

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|首页 ( 冀ICP备2021005225号-1 ) |网站地图

    GMT+8, 2024-9-20 21:22 , Processed in 0.068445 second(s), 9 queries , Redis On.

    Powered by Discuz! X3.4

    © 2001-2013 ELITE论坛【技术无价-分享快乐】

    快速回复 返回顶部 返回列表