- 8,934
- 11,704
Описание:
Код:
Пример использования: отрисовка айди игроков на метках
(не спрашивайте что за квадрокоптер у меня вместо радардиска)
Еще один пример использования:
TransformRealWorldPointToRadarSpace
- конвертирует 3д координаты в координаты на радареTransformRadarPointToScreenSpace
- конвертирует координаты радара в экранныеIsPointInsideRadar
- проверяет находится ли точка в рамках радара (в качестве аргумента нужно использовать значения, полученные черезTransformRealWorldPointToRadarSpace
)
Lua:
local ffi = require('ffi')
ffi.cdef('struct CVector2D {float x, y;}')
local CRadar_TransformRealWorldPointToRadarSpace = ffi.cast('void (__cdecl*)(struct CVector2D*, struct CVector2D*)', 0x583530)
local CRadar_TransformRadarPointToScreenSpace = ffi.cast('void (__cdecl*)(struct CVector2D*, struct CVector2D*)', 0x583480)
local CRadar_IsPointInsideRadar = ffi.cast('bool (__cdecl*)(struct CVector2D*)', 0x584D40)
function TransformRealWorldPointToRadarSpace(x, y)
local RetVal = ffi.new('struct CVector2D', {0, 0})
CRadar_TransformRealWorldPointToRadarSpace(RetVal, ffi.new('struct CVector2D', {x, y}))
return RetVal.x, RetVal.y
end
function TransformRadarPointToScreenSpace(x, y)
local RetVal = ffi.new('struct CVector2D', {0, 0})
CRadar_TransformRadarPointToScreenSpace(RetVal, ffi.new('struct CVector2D', {x, y}))
return RetVal.x, RetVal.y
end
function IsPointInsideRadar(x, y)
return CRadar_IsPointInsideRadar(ffi.new('struct CVector2D', {x, y}))
end
Lua:
local ffi = require('ffi')
ffi.cdef('struct CVector2D {float x, y;}')
function TransformRealWorldPointToRadarSpace(x, y)
local RetVal = ffi.new('struct CVector2D', {0, 0})
ffi.cast('void (__cdecl*)(struct CVector2D*, struct CVector2D*)', 0x583530)(RetVal, ffi.new('struct CVector2D', {x, y}))
return RetVal.x, RetVal.y
end
function TransformRadarPointToScreenSpace(x, y)
local RetVal = ffi.new('struct CVector2D', {0, 0})
ffi.cast('void (__cdecl*)(struct CVector2D*, struct CVector2D*)', 0x583480)(RetVal, ffi.new('struct CVector2D', {x, y}))
return RetVal.x, RetVal.y
end
function IsPointInsideRadar(x, y)
return ffi.cast('bool (__cdecl*)(struct CVector2D*)', 0x584D40)(ffi.new('struct CVector2D', {x, y}))
end
Lua:
for _, ped in ipairs(getAllChars()) do
local result, id = sampGetPlayerIdByCharHandle(ped)
if result then
local RadarX, RadarY = TransformRealWorldPointToRadarSpace(getCharCoordinates(ped))
if IsPointInsideRadar(RadarX, RadarY) then
local x, y = TransformRadarPointToScreenSpace(RadarX, RadarY)
local text = sampIsPlayerNpc(id) and 'NPC' or id
local textSize = { x = renderGetFontDrawTextLength(Font, text), y = renderGetFontDrawHeight(Font) }
renderFontDrawText(Font, text, x - textSize.x / 2, y, sampGetPlayerColor(id))
if sampIsCursorActive() then -- show text if ID hovered
local curX, curY = getCursorPos()
if curX > x - textSize.x / 2 and curX < x + textSize.x / 2 and curY > y and curY < y + textSize.y then
renderFontDrawText(Font, ('%s [%d] LVL: %d'):format(sampGetPlayerNickname(id), id, sampGetPlayerScore(id)), x + 20, y, sampGetPlayerColor(id))
end
end
end
end
end
(не спрашивайте что за квадрокоптер у меня вместо радардиска)
Еще один пример использования:
Lua:
local RadarX, RadarY = TransformRealWorldPointToRadarSpace(0, 0)
local x, y = TransformRadarPointToScreenSpace(RadarX, RadarY)
if IsPointInsideRadar(RadarX, RadarY) then
renderFontDrawText(Font, 'ПРОДАМ ГАРАЖ, КУПЛЮ АЙФОН', x, y, 0xFFffffff)
end
Последнее редактирование: