Jump to content

Как создать ped который будет стрелять по ближайшему игроку?


Recommended Posts

Как создать ped который будет стрелять по ближайшему игроку?

Мой ped почему то крутится в обратную от игрока сторону... (Хотя после создания, первую пулю он выпускает в игрока)

Посмотрите пожалуйста код, в чем ошибка?

Серверная часть: (Создание педа)

  
ped = {} 
ped_n = 1 
  
function create_Ped(playerSource) --Создаем педа 
  
local rotz = getPedRotation(playerSource) 
local x,y,z = getElementPosition(playerSource) 
-- Определяем позицию перед игроком 
x = x + ( math.cos ( math.rad ( rotz+90 ) ) * 3) 
y = y + ( math.sin ( math.rad ( rotz+90 ) ) * 3) 
    if (x) and (y) then --Если позиция существует, тогда создать педа 
         
        ped[ped_n] = createPed ( 120, x, y, z )  
            if (ped[ped_n]) then --Если пед создан, тогда 
                giveWeapon ( ped[ped_n], 31, 20000 ) --Выбать оружие педу (M4) 
                setPedWeaponSlot ( ped[ped_n], 5 ) --Поставить слот с этим оружием (Rifle) 
                triggerClientEvent(playerSource,"fire",playerSource,ped[ped_n]) --Заставить Ped стрелять 
                local nameTag = getPlayerNametagText ( playerSource ) 
                outputDebugString ("Ped "..ped_n.." was created by: "..nameTag)  
                ped_n = ped_n+1 
            else 
                outputDebugString ( "Ped wasn't created") 
            end 
    else 
        outputDebugString ( "X or Y wasn't find") 
    end 
  
end 
addCommandHandler ( "ped", create_Ped) 
  
  

Клиентская часть: (Стрельба педа)

local Max_Dist = 150 --Максимальная дистанция до цели 
local length = 100 --Длительность таймера, который отвечает за изменение "setPedControlState" 
  
addEvent("fire",true)  
addEventHandler("fire",root, 
    function (thePed) 
        setTimer ( gunShoot, length + 200, 0, thePed)  
    end 
) 
  
  
  
function gunShoot(thePed) --Функция стрельбы педа 
    if (isElement(thePed)) then  
        local theTarget, dist, enemyPos_x, enemyPos_y, enemyPos_z = getNearestTarget(thePed)  
        local name_target = getPlayerName ( theTarget ) 
            if isPedDucked(theTarget) then --Если Цель присела, тогда 
                setPedAimTarget ( thePed, enemyPos_x, enemyPos_y, enemyPos_z-.5 ) 
            else 
                setPedAimTarget ( thePed, enemyPos_x, enemyPos_y, enemyPos_z ) 
            end 
        setPedControlState ( thePed, "fire", true ) 
        setTimer ( function (thePed)  
                        if ( isElement ( thePed ) ) then  
                            setPedControlState ( thePed, "fire", false)  
                        end  
                   end, length, 1, thePed ) --Таймер, который чередует setPedControlState 
     
             
    else 
        outputDebugString ("There isn't thePed") 
    end 
end 
      
  
function getNearestTarget(thePed) --Функция, получения, ближайшего к элементу, игрока. 
local Min_Dist = Max_Dist --Минимальная дистанция равна Максимальной 
for _,target in ipairs(getElementsByType("player")) do --Начинаем перебирать всех игроков (Текущим перебирающимся игроком является Target) 
    local pedhp = getElementHealth ( thePed )  
    if (getElementType(target) == "player") and (isPlayerDead(target) == false) and (pedhp > 0) then --Если цель это игрок, он жив тогда 
        local px,py,pz=getElementPosition(thePed) 
        local tx,ty,tz=getElementPosition(target) 
        local isclear = isLineOfSightClear (px,py,pz+.6, tx,ty,tz+.6, true, false, false, true, false, false, false)  
            if (isclear == true) then --Если от педа до цели нет объектов тогда 
            local distance = getDistanceBetweenPoints3D (px,py,pz,tx,ty,tz) --Получаем дистанцию между игроком и педом 
                if (distance) then 
                    if (distance < Min_Dist) then  
                        Min_Dist = math.floor(distance)  
                        NearestTarget = target 
                        cor_x,cor_y,cor_z = getElementPosition(NearestTarget) 
                    end 
                end 
            end 
    end 
end 
return NearestTarget, Min_Dist, cor_x, cor_y, cor_z --Возвращяем Ближайшего игрока, дистанцию до него, и его координаты. 
end 
  

Link to comment
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...