admin 发表于 2024-2-19 13:13:53

设计一个运输车副本

在地图里随机位置生成三辆运钞车,运钞车的位置实时在地图上显示黄点,运钞车上面坐着3个持枪警卫,警卫被攻击是可以反击的,玩家可以截停运钞车和警卫对战,还可以从运钞车后门掠夺金条。
你尝试写一下这些功能

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, false) then
                  local vehicle = GetVehiclePedIsIn(nearbyPeds, false)
                  if GetEntityModel(vehicle) == GetHashKey("stockade") then
                        if IsPedInCombat(nearbyPeds) and not IsPedDeadOrDying(nearbyPeds, 1) then
                            -- 警卫反击
                            TaskCombatPed(nearbyPeds, 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~~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~~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

返回完整代码!

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米时,警卫会下车用枪攻击玩家。同时,地图上也会显示黄点来标示运钞车的位置。
页: [1]
查看完整版本: 设计一个运输车副本