Софт RakSAMP Lite

Rei

Известный
Автор темы
Друг
1,612
1,670
Обнаружил проблему, что имеется как будто кд на отправку RPC серверного сообщения, на счет других рпц и пакетов не проверял.
Простой пример - цикл от 1 до 5 на отправку рандомного сообщения. При отсутствии какой-либо задержки отправляет одно сообщение, при 200 - два, и только при 500 мс отправляет все. В конфике всё по умолчанию, т.е. network=5.
так может это сервер не пропускает флуд? в обычном сампе тоже что-то такое есть

После обновления клиент начал крашиться (перестает отвечать) при вызове команд через функцию runCommand.
и где? у меня ничего не крашит, да и в этой части ничего не менялось емнип. парни, если репортите баги, то пишите как их воспроизвести хотя бы
 

Hatiko

Известный
Проверенный
1,502
620
так может это сервер не пропускает флуд?
Перепроверил с другими RPC (как минимум с onSendDialogResponse дополнительно проверил), проблема именно в отправке 101/50 RPC (sendInput). Это не ограничения сервера, именно что-то ограничивает в механике клиента на данные rpc.

и где? у меня ничего не крашит
Крашит при вызове функции с командой !reloadlua - runCommand("!reloadlua"), при чем только при вызове в событии onRunCommand или в потоке. До обновы не крашило, делал сокращение команды - !rl, такой кстати эффект у RakBot имеется. С другими командами зависания/краша клиента не наблюдается.
 
Последнее редактирование:
  • Bug
Реакции: Rei

danny228

Участник
56
11
как выключить автореконнект?

Screenshot_572.png

Screenshot_573.png
Screenshot_574.png

и выставляешь туда огромное число какое нибудь (хотя и на костылях но работать скорее всего будет)

 

sаnеk

Всефорумный sanek
Друг
2,111
2,093

Посмотреть вложение 188984

Посмотреть вложение 188985Посмотреть вложение 188986

и выставляешь туда огромное число какое нибудь (хотя и на костылях но работать скорее всего будет)

выставлял 999999999, потом 9999999 и т.д и один хуй реконнектит через 15 сек
 
  • Грустно
Реакции: danny228

danny228

Участник
56
11
это норм что не работает команда !labels? (!labels - вывести список 3д текстов)
в зоне видимости есть 3д текст, но при вводе команды пишет "Command labels was not found"

Screenshot_582.png
 

sport_noname

Активный
388
84
@Rei , как тебе идея сделать хелпер команд в раксампе? (Ну типо нажимаешь на > и там высвечивается все команды раксампа лайта
 

EgorVratar

Новичок
1
0
а может кто помочь как запустить его на сервер крмп (01.gtarp.ru:7777) ip
он у меня просто не коннектится
не хуесосьте пж, я просто реально ничего не понимаю в этом
 

CaJlaT

07.11.2024 14:55
Модератор
2,833
2,668
В рандомное время проигрывается 8-битный писк, что это значит?
 
  • Эм
Реакции: Rei

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
Функция позволяет получать исходящие данные синхронизации из любого участка кода.
Принимает в себя 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
 

Rei

Известный
Автор темы
Друг
1,612
1,670
Функция позволяет получать исходящие данные синхронизации из любого участка кода.
Принимает в себя 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
Lua:
function samp_create_sync_data(sync_type)
	-- from SAMP.Lua
	local raknet = require 'samp.raknet'
	require 'samp.synchronization'

	local sync_traits = {
		player = {'PlayerSyncData', raknet.PACKET.PLAYER_SYNC },
		vehicle = {'VehicleSyncData', raknet.PACKET.VEHICLE_SYNC },
		passenger = {'PassengerSyncData', raknet.PACKET.PASSENGER_SYNC },
		aim = {'AimSyncData', raknet.PACKET.AIM_SYNC },
		trailer = {'TrailerSyncData', raknet.PACKET.TRAILER_SYNC },
		unoccupied = {'UnoccupiedSyncData', raknet.PACKET.UNOCCUPIED_SYNC },
		bullet = {'BulletSyncData', raknet.PACKET.BULLET_SYNC },
		spectator = {'SpectatorSyncData', raknet.PACKET.SPECTATOR_SYNC }
	}
	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)))

	-- function to send packet
	local func_send = function()
		local bs = bitStream.new()
		bs:writeUInt8(sync_info[2])
		bs:writeBuffer(raw_data_ptr, ffi.sizeof(data))
		bs:sendPacketEx(HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 1)
		bs:reset()
	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
но нужно вручную заполнять поля
Lua:
local data = samp_create_sync_data("player")
data.position.x, data.position.y, data.position.z = getBotPosition()
data.quaternion[0], data.quaternion[1], data.quaternion[2], data.quaternion[3] = getBotQuaternion()
data.health = getBotHealth()
data.armor = getBotArmor()
-- анимку и флаги бы еще
data.send()
 
  • Нравится
Реакции: fantomas69 и Rafinad