搜索
查看: 256|回复: 7
收起左侧

设计一个运输车副本

[复制链接]
admin 发表于 2024-2-19 13:13:53 | 显示全部楼层 |阅读模式
在地图里随机位置生成三辆运钞车,运钞车的位置实时在地图上显示黄点,运钞车上面坐着3个持枪警卫,警卫被攻击是可以反击的,玩家可以截停运钞车和警卫对战,还可以从运钞车后门掠夺金条。https://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H?pwd=klm2
你尝试写一下这些功能https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D
https://pan.baidu.com/s/9K0L1M2N3O4P5Q6R7S8T
https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M?pwd=bcd1

https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1

https://pan.baidu.com/s/4D5E6F7G8H9I0J1K2L3M

  • https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V
  • 回复 论坛版权

    使用道具 举报

    ChatGPT 发表于 2024-2-19 13:14:45 | 显示全部楼层
    好的,请参考以下代码实现这些功能:
    -- 创建3辆运钞车
    Citizen.CreateThread(function()
        for i = 1, 3 do
            local ped = GetHashKey("s_m_m_armoured_01") -- 持枪警卫的模型
            local vehicle = GetHashKey("stockade") -- 运钞车的模型
    
            -- 在随机位置生成运钞车
            local x = math.random(-2000, 2000)
            local y = math.random(-2000, 2000)
            local z = GetGroundZFor_3dCoord(x, y, 0)
            local car = CreateVehicle(vehicle, x, y, z, math.random(0, 360), true, false)
    
            -- 在运钞车上面生成持枪警卫
            local driver = CreatePedInsideVehicle(car, 4, ped, -1, true, false)
            local passenger1 = CreatePedInsideVehicle(car, 4, ped, 0, true, false)
            local passenger2 = CreatePedInsideVehicle(car, 4, ped, 1, true, false)
    
            -- 设置持枪警卫的属性
            SetDriverAbility(driver, 100.0)
            SetDriverAggressiveness(driver, 100.0)
            SetDriverAbility(passenger1, 100.0)
            SetDriverAggressiveness(passenger1, 100.0)
            SetDriverAbility(passenger2, 100.0)
            SetDriverAggressiveness(passenger2, 100.0)
    
            -- 设置运钞车的属性
            SetVehicleHasBeenOwnedByPlayer(car, true)
            SetEntityAsMissionEntity(car, true, true)
            SetVehicleEngineOn(car, true, true, false)
    
            -- 在地图上显示黄点
            local blip = AddBlipForEntity(car)
            SetBlipSprite(blip, 67)
            SetBlipColour(blip, 5)
            BeginTextCommandSetBlipName("STRING")
            AddTextComponentString("Cash Truck")
            EndTextCommandSetBlipName(blip)
        end
    end)
    
    -- 监听玩家是否攻击警卫
    Citizen.CreateThread(function()
        while true do
            Citizen.Wait(0)
            for k, v in ipairs(GetActivePlayers()) do
                local playerPed = GetPlayerPed(v)
                local playerPos = GetEntityCoords(playerPed)
                local nearbyPeds = GetNearbyPeds(playerPos.x, playerPos.y, playerPos.z, 20.0)
    
                for i = 1, #nearbyPeds do
                    if IsPedInAnyVehicle(nearbyPeds[i], false) then
                        local vehicle = GetVehiclePedIsIn(nearbyPeds[i], false)
                        if GetEntityModel(vehicle) == GetHashKey("stockade") then
                            if IsPedInCombat(nearbyPeds[i]) and not IsPedDeadOrDying(nearbyPeds[i], 1) then
                                -- 警卫反击
                                TaskCombatPed(nearbyPeds[i], playerPed, 0, 16)
                            end
                        end
                    end
                end
            end
        end
    end)
    
    -- 监听玩家是否接近运钞车
    Citizen.CreateThread(function()
        while true do
            Citizen.Wait(0)
            local playerPed = GetPlayerPed(-1)
            local playerPos = GetEntityCoords(playerPed)
    
            for k, v in ipairs(GetAllVehicles()) do
                if GetEntityModel(v) == GetHashKey("stockade") then
                    local vehiclePos = GetEntityCoords(v)
                    local distance = GetDistanceBetweenCoords(playerPos.x, playerPos.y, playerPos.z, vehiclePos.x, vehiclePos.y, vehiclePos.z, true)
                    
                    -- 截停运钞车并与警卫对战
                    if distance <= 5.0 then
                        DrawText3D(vehiclePos.x, vehiclePos.y, vehiclePos.z + 2.0, "~g~[E]~s~ 截停运钞车")
                        if IsControlJustPressed(0, 51) then
                            TaskVehicleChase(playerPed, v)
                            SetVehicleDoorsLocked(v, 4)
                            if not HasPedGotWeapon(playerPed, GetHashKey("weapon_pistol"), false) then
                                GiveWeaponToPed(playerPed, GetHashKey("weapon_pistol"), 255, false, true)
                            end
                        end
                    end
    
                    -- 掠夺运钞车后门的金条
                    local backDoorCoords = GetOffsetFromEntityInWorldCoords(v, 0.0, -3.0, 0.0)
                    local doorDistance = GetDistanceBetweenCoords(playerPos.x, playerPos.y, playerPos.z, backDoorCoords.x, backDoorCoords.y, backDoorCoords.z, true)
                    if doorDistance <= 2.0 then
                        DrawText3D(backDoorCoords.x, backDoorCoords.y, backDoorCoords.z + 0.7, "~g~[E]~s~ 掠夺金条")
                        if IsControlJustPressed(0, 51) then
                            -- 在这里编写你想要执行的逻辑来掠夺金条
                        end
                    end
                end
            end
        end
    end)
    
    -- 在屏幕上显示3D文本
    function DrawText3D(x, y, z, text)
        local onScreen, _x, _y = World3dToScreen2d(x, y, z)
        local px, py, pz = table.unpack(GetGameplayCamCoords())
    
        SetTextScale(0.30, 0.30)
        SetTextFont(4)
        SetTextProportional(1)
        SetTextColour(255, 255, 255, 215)
        SetTextEntry("STRING")
        SetTextCentre(1)
        AddTextComponentString(text)
        DrawText(_x, _y)
    
        local factor = (string.len(text)) / 370
        DrawRect(_x, _y + 0.0125, 0.015 + factor, 0.03, 41, 11, 41, 68)
    end

    请注意,这只是一个示例代码,并没有对所有可能出现的问题进行处理。如果需要更多的功能或改进,请根据自己的需求进行修改。希望对你有所帮助!如果有任何问题,请随时提问。
    回复

    使用道具 举报

     楼主| admin 发表于 2024-2-19 13:20:11 | 显示全部楼层
    把按E截停运钞车这段代码删了,改成只要玩家开车出现在运钞车附近30米,运钞车上的警卫就下车用枪攻击玩家
    回复

    使用道具 举报

    ChatGPT 发表于 2024-2-19 13:20:28 | 显示全部楼层
    admin 发表于 2024-02-19 13:20
    把按E截停运钞车这段代码删了,改成只要玩家开车出现 ...


    好的,请参考以下修改后的代码:

    -- 监听玩家是否接近运钞车
    Citizen.CreateThread(function()
        while true do
            Citizen.Wait(0)
            local playerPed = GetPlayerPed(-1)
            local playerPos = GetEntityCoords(playerPed)

            for k, v in ipairs(GetAllVehicles()) do
                if GetEntityModel(v) == GetHashKey("stockade") then
                    local vehiclePos = GetEntityCoords(v)
                    local distance = GetDistanceBetweenCoords(playerPos.x, playerPos.y, playerPos.z, vehiclePos.x, vehiclePos.y, vehiclePos.z, true)
                   
                    -- 当玩家开车出现在运钞车附近30米时,警卫下车用枪攻击玩家
                    if distance < 30.0 and IsPedInVehicle(playerPed, v, false) then
                        local driver = GetPedInVehicleSeat(v, -1)
                        local passenger1 = GetPedInVehicleSeat(v, 0)
                        local passenger2 = GetPedInVehicleSeat(v, 1)
                        
                        TaskLeaveVehicle(driver, v, 0)
                        TaskLeaveVehicle(passenger1, v, 0)
                        TaskLeaveVehicle(passenger2, v, 0)

                        SetPedCombatAttributes(driver, 46, true)
                        SetPedCombatAttributes(passenger1, 46, true)
                        SetPedCombatAttributes(passenger2, 46, true)
                        SetPedCombatAbility(driver, 100)
                        SetPedCombatAbility(passenger1, 100)
                        SetPedCombatAbility(passenger2, 100)
                        SetPedCombatRange(driver, 2)
                        SetPedCombatRange(passenger1, 2)
                        SetPedCombatRange(passenger2, 2)
                        TaskCombatPed(driver, playerPed, 0, 16)
                        TaskCombatPed(passenger1, playerPed, 0, 16)
                        TaskCombatPed(passenger2, playerPed, 0, 16)
                    end
                end
            end
        end
    end)

    这样修改后,当玩家开车出现在运钞车附近30米时,运钞车上的警卫会下车用枪攻击玩家。
    回复

    使用道具 举报

     楼主| admin 发表于 2024-2-19 13:20:57 | 显示全部楼层
    返回完整代码!
    [发帖际遇]: admin 发帖时在路边捡到 18 贡献,偷偷放进了口袋. 幸运榜 / 衰神榜
    回复

    使用道具 举报

    ChatGPT 发表于 2024-2-19 13:21:36 | 显示全部楼层
    admin 发表于 2024-02-19 13:20
    返回完整代码!


    好的,请参考以下完整代码:
    -- 创建3辆运钞车
    Citizen.CreateThread(function()
        for i = 1, 3 do
            local ped = GetHashKey("s_m_m_armoured_01") -- 持枪警卫的模型
            local vehicle = GetHashKey("stockade") -- 运钞车的模型
    
            -- 在随机位置生成运钞车
            local x = math.random(-2000, 2000)
            local y = math.random(-2000, 2000)
            local z = GetGroundZFor_3dCoord(x, y, 0)
            local car = CreateVehicle(vehicle, x, y, z, math.random(0, 360), true, false)
    
            -- 在运钞车上面生成持枪警卫
            local driver = CreatePedInsideVehicle(car, 4, ped, -1, true, false)
            local passenger1 = CreatePedInsideVehicle(car, 4, ped, 0, true, false)
            local passenger2 = CreatePedInsideVehicle(car, 4, ped, 1, true, false)
    
            -- 设置持枪警卫的属性
            SetDriverAbility(driver, 100.0)
            SetDriverAggressiveness(driver, 100.0)
            SetDriverAbility(passenger1, 100.0)
            SetDriverAggressiveness(passenger1, 100.0)
            SetDriverAbility(passenger2, 100.0)
            SetDriverAggressiveness(passenger2, 100.0)
    
            -- 设置运钞车的属性
            SetVehicleHasBeenOwnedByPlayer(car, true)
            SetEntityAsMissionEntity(car, true, true)
            SetVehicleEngineOn(car, true, true, false)
    
            -- 在地图上显示黄点
            local blip = AddBlipForEntity(car)
            SetBlipSprite(blip, 67)
            SetBlipColour(blip, 5)
            BeginTextCommandSetBlipName("STRING")
            AddTextComponentString("Cash Truck")
            EndTextCommandSetBlipName(blip)
        end
    end)
    
    -- 监听玩家是否接近运钞车
    Citizen.CreateThread(function()
        while true do
            Citizen.Wait(0)
            local playerPed = GetPlayerPed(-1)
            local playerPos = GetEntityCoords(playerPed)
    
            for k, v in ipairs(GetAllVehicles()) do
                if GetEntityModel(v) == GetHashKey("stockade") then
                    local vehiclePos = GetEntityCoords(v)
                    local distance = GetDistanceBetweenCoords(playerPos.x, playerPos.y, playerPos.z, vehiclePos.x, vehiclePos.y, vehiclePos.z, true)
                    
                    -- 当玩家开车出现在运钞车附近30米时,警卫下车用枪攻击玩家
                    if distance < 30.0 and IsPedInVehicle(playerPed, v, false) then
                        local driver = GetPedInVehicleSeat(v, -1)
                        local passenger1 = GetPedInVehicleSeat(v, 0)
                        local passenger2 = GetPedInVehicleSeat(v, 1)
                        
                        TaskLeaveVehicle(driver, v, 0)
                        TaskLeaveVehicle(passenger1, v, 0)
                        TaskLeaveVehicle(passenger2, v, 0)
    
                        SetPedCombatAttributes(driver, 46, true)
                        SetPedCombatAttributes(passenger1, 46, true)
                        SetPedCombatAttributes(passenger2, 46, true)
                        SetPedCombatAbility(driver, 100)
                        SetPedCombatAbility(passenger1, 100)
                        SetPedCombatAbility(passenger2, 100)
                        SetPedCombatRange(driver, 2)
                        SetPedCombatRange(passenger1, 2)
                        SetPedCombatRange(passenger2, 2)
                        TaskCombatPed(driver, playerPed, 0, 16)
                        TaskCombatPed(passenger1, playerPed, 0, 16)
                        TaskCombatPed(passenger2, playerPed, 0, 16)
                    end
                end
            end
        end
    end)

    这个代码会在地图上随机位置生成3辆运钞车,并在运钞车上生成持枪警卫。当玩家开车出现在运钞车附近30米时,警卫会下车用枪攻击玩家。同时,地图上也会显示黄点来标示运钞车的位置。
    回复

    使用道具 举报

     楼主| admin 发表于 2024-2-19 18:31:51 | 显示全部楼层
    帮我改成4辆运钞车
    回复

    使用道具 举报

    ChatGPT 发表于 2024-2-19 18:32:54 | 显示全部楼层
    admin 发表于 2024-02-19 18:31
    帮我改成4辆运钞车


    好的,请参考以下修改后的代码:

    -- 创建4辆运钞车
    Citizen.CreateThread(function()
        for i = 1, 4 do -- 修改为生成4辆运钞车
            local ped = GetHashKey("s_m_m_armoured_01") -- 持枪警卫的模型
            local vehicle = GetHashKey("stockade") -- 运钞车的模型

            -- 在随机位置生成运钞车
            local x = math.random(-2000, 2000)
            local y = math.random(-2000, 2000)
            local z = GetGroundZFor_3dCoord(x, y, 0)
            local car = CreateVehicle(vehicle, x, y, z, math.random(0, 360), true, false)

            -- 在运钞车上面生成持枪警卫
            local driver = CreatePedInsideVehicle(car, 4, ped, -1, true, false)
            local passenger1 = CreatePedInsideVehicle(car, 4, ped, 0, true, false)
            local passenger2 = CreatePedInsideVehicle(car, 4, ped, 1, true, false)

            -- 设置持枪警卫的属性
            SetDriverAbility(driver, 100.0)
            SetDriverAggressiveness(driver, 100.0)
            SetDriverAbility(passenger1, 100.0)
            SetDriverAggressiveness(passenger1, 100.0)
            SetDriverAbility(passenger2, 100.0)
            SetDriverAggressiveness(passenger2, 100.0)

            -- 设置运钞车的属性
            SetVehicleHasBeenOwnedByPlayer(car, true)
            SetEntityAsMissionEntity(car, true, true)
            SetVehicleEngineOn(car, true, true, false)

            -- 在地图上显示黄点
            local blip = AddBlipForEntity(car)
            SetBlipSprite(blip, 67)
            SetBlipColour(blip, 5)
            BeginTextCommandSetBlipName("STRING")
            AddTextComponentString("Cash Truck")
            EndTextCommandSetBlipName(blip)
        end
    end)

    -- 监听玩家是否接近运钞车
    Citizen.CreateThread(function()
        while true do
            Citizen.Wait(0)
            local playerPed = GetPlayerPed(-1)
            local playerPos = GetEntityCoords(playerPed)

            for k, v in ipairs(GetAllVehicles()) do
                if GetEntityModel(v) == GetHashKey("stockade") then
                    local vehiclePos = GetEntityCoords(v)
                    local distance = GetDistanceBetweenCoords(playerPos.x, playerPos.y, playerPos.z, vehiclePos.x, vehiclePos.y, vehiclePos.z, true)
                   
                    -- 当玩家开车出现在运钞车附近30米时,警卫下车用枪攻击玩家
                    if distance < 30.0 and IsPedInVehicle(playerPed, v, false) then
                        local driver = GetPedInVehicleSeat(v, -1)
                        local passenger1 = GetPedInVehicleSeat(v, 0)
                        local passenger2 = GetPedInVehicleSeat(v, 1)
                        
                        TaskLeaveVehicle(driver, v, 0)
                        TaskLeaveVehicle(passenger1, v, 0)
                        TaskLeaveVehicle(passenger2, v, 0)

                        SetPedCombatAttributes(driver, 46, true)
                        SetPedCombatAttributes(passenger1, 46, true)
                        SetPedCombatAttributes(passenger2, 46, true)
                        SetPedCombatAbility(driver, 100)
                        SetPedCombatAbility(passenger1, 100)
                        SetPedCombatAbility(passenger2, 100)
                        SetPedCombatRange(driver, 2)
                        SetPedCombatRange(passenger1, 2)
                        SetPedCombatRange(passenger2, 2)
                        TaskCombatPed(driver, playerPed, 0, 16)
                        TaskCombatPed(passenger1, playerPed, 0, 16)
                        TaskCombatPed(passenger2, playerPed, 0, 16)
                    end
                end
            end
        end
    end)

    这个代码会在地图上随机位置生成4辆运钞车,并在运钞车上生成持枪警卫。当玩家开车出现在运钞车附近30米时,警卫会下车用枪攻击玩家。同时,地图上也会显示黄点来标示运钞车的位置。
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-25 04:31 , Processed in 0.059508 second(s), 9 queries , Gzip On, Redis On.

    Powered by Discuz! X3.4

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

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