Flaker Posted May 12, 2012 Share Posted May 12, 2012 Как создать 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
mjr Posted May 21, 2012 Share Posted May 21, 2012 Никогда таким не занимался, но можно предположить, что стрельба и прицеливание должны быть в цикле Link to comment
Flaker Posted May 21, 2012 Author Share Posted May 21, 2012 Да, в цикле. Я уже сделал этот скрипт, так что топик закрыт. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now