hasObjectBeenDamaged()

Ya Zaregalsya

Известный
Автор темы
387
135
Версия MoonLoader
.026-beta
Нужно узнать, был ли выстрел по объекту. По идее функция hasObjectBeenDamaged() нужна именно для этого, так? Сделал значит вот такой код:

Lua:
function nerabotaet()
    znak = createObject(19980, 1280, -1820, 11.5)
    while true do
        if hasObjectBeenDamaged(znak) == true then
            print("popal")
        end
        wait(1)
    end
end

Но функция всегда возвращает false, каким оружием или кулаком не наносился бы урон по объекту. Возможно её надо использовать не в цикле, а как-нибудь иначе. В чем проблема?
 

Ya Zaregalsya

Известный
Автор темы
387
135
весь код покажи
Вот :

Lua:
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("nerabotaet", nerabotaet)
    wait(-1)
end

function nerabotaet()
    lua_thread.create(function ()
        znak = createObject(19980, 1280, -1820, 11.5)
        while true do
            objectDamaged = hasObjectBeenDamaged(znak)
            print(objectDamaged) -- Всегда выводит false, никогда не выводит true. Проверял по логу, через поиск.
            if objectDamaged == true then
                print("popal") -- Никогда не выводит.
            end
            wait(1)
        end
    end)
end
 
Последнее редактирование:

Ya Zaregalsya

Известный
Автор темы
387
135
Странно, но функция работает только на разрушаемые объекты, фонарь и т.п
Действительно, причем срабатывает не после первого попадания, а лишь когда здоровье упадёт до определённого уровня, и после этого значение true остаётся навсегда.

А можно ли как-нибудь узнать, был ли выстрел только что и по любым объектам? Как-нибудь перехватить это. ГТА ведь по идее знает такие вещи, раз каждому объекту проигрывает свой 2D эффект и звук.

Разрабы, @FYP , @hnnssy , @EvgeN 1137 , шо вы наделали?
 
Последнее редактирование:

AnWu

https://t.me/anwublog
Всефорумный модератор
4,760
5,367
Действительно, причем срабатывает не после первого попадания, а лишь когда здоровье упадёт до определённого уровня, и после этого значение true остаётся навсегда.

А можно ли как-нибудь узнать, был ли выстрел только что и по любым объектам? Как-нибудь перехватить это. ГТА ведь по идее знает такие вещи, раз каждому объекту проигрывает свой 2D эффект и звук.
Разрабы, @FYP , @hnnssy , @EvgeN 1137 , шо вы наделали?
как варит работать с буллет синхрой если это самп
 
  • Нравится
Реакции: Ya Zaregalsya

Ya Zaregalsya

Известный
Автор темы
387
135
как варит работать с буллет синхрой если это самп
Lua:
function sampev.onSendBulletSync(bulletSync)
    print("tType: ".. bulletSync.targetType.. "; tID: ".. bulletSync.targetId)
    print("tXYZ: ".. bulletSync.target.x.. ", ".. bulletSync.target.y.. ", ".. bulletSync.target.z.. ".")
    if locateObject3d(znak, bulletSync.target.x, bulletSync.target.y, bulletSync.target.z, 1, 1, 1, 0) == true then
        print("popal")
    end
end

Вот так работает, но locateObject3d() ориентируется именно на центр объекта, а не на его коллизию. Как узнать, находится (или касается) ли точка внутри коллизии объекта? Вроде все функции по объектам перерыл.
 
Последнее редактирование:

Ya Zaregalsya

Известный
Автор темы
387
135
Всем спасибо.

Lua:
require "lib.moonloader"
local sampev = require 'lib.samp.events'

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("ocreate", ocreate)
    wait(-1)
end

function ocreate()
    znak = createObject(1232, 1280, -1820, 11.5)
end


function sampev.onSendBulletSync(bulletSync)
    _, znakX, znakY, znakZ = getObjectCoordinates(znak)
    presult, pizdec = processLineOfSight(bulletSync.target.x, bulletSync.target.y, bulletSync.target.z, znakX, znakY, znakZ,
        true, false, false, true, false, false, false, false)
    if presult == true then
        distanceToT = getDistanceBetweenCoords3d(bulletSync.target.x, bulletSync.target.y, bulletSync.target.z, pizdec.pos[1], pizdec.pos[2], pizdec.pos[3])
        if distanceToT < 0.01 then
            print("popal")
        end
    end
end


😎 👍
 
Последнее редактирование:

Ya Zaregalsya

Известный
Автор темы
387
135
UPD: Нифига не работает. 😕

Функция сталкивается с эффектами, хотя должна их игнорировать. Вообще нужно, чтобы она игнорировала всё, кроме одного единственного объекта. Это можно как-нибудь провернуть?
 
Последнее редактирование: