local sync = require 'lib.samp.events'
local key = require("vkeys")
function main()
repeat wait(0) until isSampAvailable()
sampRegisterChatCommand('invisible', function()
act = not act
sampAddChatMessage(act and '[Invisible]: Cheat Activated' or '[Invisible]: Cheat DeActivated', -1)
end)
while true do wait(0)
if not sampIsChatInputActive() then
if isKeyDown(key.VK_N) and act then
act = false
printStringNow('~r~Wait Please! Key Pressed N..', 1000)
local data = samp_create_sync_data('player')
data.keysData = data.keysData + 128
data.send()
wait(250)
act = true
end
end
if not sampIsChatInputActive() then
if isKeyDown(key.VK_MENU) and act then
act = false
printStringNow('~r~Wait Please! Key Pressed ALT..', 1000)
local data = samp_create_sync_data('player')
data.keysData = data.keysData + 1024
data.send()
wait(250)
act = true
end
end
end
end
function sync.onSendPlayerSync(data)
if act then
local X, Y, Z = getCharCoordinates(PLAYER_PED)
data.quaternion[0] = math.random(0,1)
data.quaternion[1] = math.random(0,0)
data.quaternion[2] = math.random(0,-1)
data.quaternion[3] = math.random(0,0)
data.position = {X-10, Y-12, Z-11}
printStringNow('~r~You Invisible', 1500)
end
end
function sync.onSendVehicleSync(data)
if act then
local X, Y, Z = getCharCoordinates(PLAYER_PED)
data.quaternion[0] = math.random(0,1)
data.quaternion[1] = math.random(0,0)
data.quaternion[2] = math.random(0,-1)
data.quaternion[3] = math.random(0,0)
data.position = {X-10, Y-12, Z-11}
printStringNow('~r~You Invisible', 1500)
end
end
--Nice Decompiled COD? =)
function samp_create_sync_data(sync_type, copy_from_player)
local ffi = require 'ffi'
local sampfuncs = require 'sampfuncs'
-- from SAMP.Luass
local raknet = require 'samp.raknet'
require 'samp.synchronization'
copy_from_player = copy_from_player or true
local sync_traits = {
player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC, sampStorePlayerOnfootData},
vehicle = {'VehicleSyncData', raknet.PACKET.VEHICLE_SYNC, sampStorePlayerIncarData},
passenger = {'PassengerSyncData', raknet.PACKET.PASSENGER_SYNC, sampStorePlayerPassengerData},
aim = {'AimSyncData', raknet.PACKET.AIM_SYNC, sampStorePlayerAimData},
trailer = {'TrailerSyncData', raknet.PACKET.TRAILER_SYNC, sampStorePlayerTrailerData},
unoccupied = {'UnoccupiedSyncData', raknet.PACKET.UNOCCUPIED_SYNC, nil},
bullet = {'BulletSyncData', raknet.PACKET.BULLET_SYNC, nil},
spectator = {'SpectatorSyncData', raknet.PACKET.SPECTATOR_SYNC, nil}
}
local sync_info = sync_traits[sync_type]
local data_type = 'struct ' .. sync_info[1]
local data = ffi.new(data_type, {})
local raw_data_ptr = tonumber(ffi.cast('uintptr_t', ffi.new(data_type .. '*', data)))
-- copy player's sync data to the allocated memory
if copy_from_player then
local copy_func = sync_info[3]
if copy_func then
local _, player_id
if copy_from_player == true then
_, player_id = sampGetPlayerIdByCharHandle(PLAYER_PED)
else
player_id = tonumber(copy_from_player)
end
copy_func(player_id, raw_data_ptr)
end
end
-- function to send packet
local func_send = function()
local bs = raknetNewBitStream()
raknetBitStreamWriteInt8(bs, sync_info[2])
raknetBitStreamWriteBuffer(bs, raw_data_ptr, ffi.sizeof(data))
raknetSendBitStreamEx(bs, sampfuncs.HIGH_PRIORITY, sampfuncs.UNRELIABLE_SEQUENCED, 1)
raknetDeleteBitStream(bs)
end
-- metatable to access sync data and 'send' function
local mt = {
__index = function(t, index)
return data[index]
end,
__newindex = function(t, index, value)
data[index] = value
end
}
return setmetatable({send = func_send}, mt)
end