- 1,898
- 3,073
Функция позволяет получать исходящие данные синхронизации из любого участка кода.
Принимает в себя ID пакета. При желании можно с легкостью переделать под входящую синхронизацию (если не забуду, то может сделаю) и сделать аналог функциям из муна sampStorePlayerOnfootData, sampStorePlayerIncarData и т.д
Принимает в себя ID пакета. При желании можно с легкостью переделать под входящую синхронизацию (если не забуду, то может сделаю) и сделать аналог функциям из муна sampStorePlayerOnfootData, sampStorePlayerIncarData и т.д
Lua:
local ffi = require("ffi")
require 'samp.synchronization'
require 'sampfuncs'
local storePackets = {
[PACKET_PLAYER_SYNC] = {},
[PACKET_VEHICLE_SYNC] = {},
[PACKET_AIM_SYNC] = {}
}
local syncTypes = {
[PACKET_PLAYER_SYNC] = "PlayerSyncData",
[PACKET_VEHICLE_SYNC] = "VehicleSyncData",
[PACKET_AIM_SYNC] = "AimSyncData"
}
registerHandler("onSendPacket", function(id, bs)
if storePackets[id] ~= nil and syncTypes[id] ~= nil then
bs:ignoreBits(8) -- skip packetid
local new_sync_data = ffi.new(syncTypes[id])
local syncPointer = tonumber(ffi.cast('intptr_t', ffi.cast('void*', new_sync_data)))
local result = bs:readBuffer(syncPointer, ffi.sizeof(new_sync_data))
if result then
storePackets[id] = new_sync_data
end
end
end)
function storeSyncData(packet_id)
return storePackets[packet_id]
end
-- example
function onRunCommand(command)
if command == "!test" then
local aim_sync_data = storeSyncData(PACKET_AIM_SYNC)
print(aim_sync_data.camMode) -- return cam mode
local player_sync_data = storeSyncData(PACKET_PLAYER_SYNC)
print(player_sync_data.specialAction) -- return special action
end
end