Модификация часов InterfaceEditor.asi в LUA

Dep2080

Новичок
Автор темы
1
0
Версия SA-MP
  1. 0.3.7 (R1)
В моде InterfaceEditor.asi есть часы сообщающие игровое время, эти часы из самой GTA San Andreas но в Samp их нет, как их реактивировать в moonloader?
 
Решение
Они есть в сампе и их можно включить.
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    repeat wait(100) until sampIsLocalPlayerSpawned()

    toggleClock(true)

    wait(-1)
end

function toggleClock(state)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteBool(bs, state or false)
    raknetEmulRpcReceiveBitStream(30, bs)
    raknetDeleteBitStream(bs)
end

Если сервер отключает часы через TogglePlayerClock, то в теории должно работать такое
Lua:
local ev = require 'samp.events'
function ev.onSetToggleClock(state)
    return true
end

0x18d036

Известный
408
109
В моде InterfaceEditor.asi есть часы сообщающие игровое время, эти часы из самой GTA San Andreas но в Samp их нет, как их реактивировать в moonloader?
Искал был тоже как это сделать и нашел твою тему. Если в сампе отключены часы - то при их изменении ничего не будет работать, потому что их банально нет. Но если ты хочешь добавить сами часы, то есть много других скриптов которые добавляют эту функцию, но немного по другому выглядят
 

Andrinall

Известный
678
531
Они есть в сампе и их можно включить.
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    repeat wait(100) until sampIsLocalPlayerSpawned()

    toggleClock(true)

    wait(-1)
end

function toggleClock(state)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteBool(bs, state or false)
    raknetEmulRpcReceiveBitStream(30, bs)
    raknetDeleteBitStream(bs)
end

Если сервер отключает часы через TogglePlayerClock, то в теории должно работать такое
Lua:
local ev = require 'samp.events'
function ev.onSetToggleClock(state)
    return true
end
 
  • Нравится
Реакции: Jefferson.!2. и ARMOR

Jefferson.!2.

Новичок
15
1
Они есть в сампе и их можно включить.
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    repeat wait(100) until sampIsLocalPlayerSpawned()

    toggleClock(true)

    wait(-1)
end

function toggleClock(state)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteBool(bs, state or false)
    raknetEmulRpcReceiveBitStream(30, bs)
    raknetDeleteBitStream(bs)
end

Если сервер отключает часы через TogglePlayerClock, то в теории должно работать такое
Lua:
local ev = require 'samp.events'
function ev.onSetToggleClock(state)
    return true
end
Я попытался сделать то же самое, и это сработало, но когда часы активируются, они не синхронизируются со временем сервера, например, если время сервера 15:00, часы активируются со временем 15:00, но время начинается пройти . Как это решить?
 

Andrinall

Известный
678
531
Я попытался сделать то же самое, и это сработало, но когда часы активируются, они не синхронизируются со временем сервера, например, если время сервера 15:00, часы активируются со временем 15:00, но время начинается пройти . Как это решить?
В мунапи есть такая вот функа
local hours, mins = getTimeOfDay()
Не уверен что это то, что нужно, но я не до конца понял суть вопроса.
 

Jefferson.!2.

Новичок
15
1
В мунапи есть такая вот функа
local hours, mins = getTimeOfDay()
Не уверен что это то, что нужно, но я не до конца понял суть вопроса.
Я имел в виду, что часы не синхронизированы с временем сервера, например, если время сервера 12:00, то когда я активирую часы, они начинаются с 12:00, но потом начинают переходить 12:01, 12:02. и так далее, а серверное время не пройдено
 

sazzas1978

Известный
120
119
Я имел в виду, что часы не синхронизированы с временем сервера, например, если время сервера 12:00, то когда я активирую часы, они начинаются с 12:00, но потом начинают переходить 12:01, 12:02. и так далее, а серверное время не пройдено
Можно синхронизировать через эмуляцию
  • SetPlayerTime - ID: 29​

Parameters: UINT8 bHour, UINT8 bMinute
Lua:
function setTime(hour, minute)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, hour)
    raknetBitStreamWriteInt8(bs, minute)
    raknetEmulRpcReceiveBitStream(29, bs)
    raknetDeleteBitStream(bs)
end

Вот скрипт, который устанавливает время с операционки в игре с помощью игровых часов:
Lua:
local os = require 'os'

function toggleClock(state)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteBool(bs, state)
    raknetEmulRpcReceiveBitStream(30, bs)
    raknetDeleteBitStream(bs)
end

function setTime(hour, minute)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, hour)
    raknetBitStreamWriteInt8(bs, minute)
    raknetEmulRpcReceiveBitStream(29, bs)
    raknetDeleteBitStream(bs)
end

function main()
    repeat wait(0) until isSampAvailable();
    toggleClock(true)
    local time = os.date("*t")
    setTime(time.hour, time.min)
end

Можно синхронизировать через эмуляцию
  • SetPlayerTime - ID: 29​




Вот скрипт, который устанавливает время с операционки в игре с помощью игровых часов:
Lua:
local os = require 'os'

function toggleClock(state)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteBool(bs, state)
    raknetEmulRpcReceiveBitStream(30, bs)
    raknetDeleteBitStream(bs)
end

function setTime(hour, minute)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, hour)
    raknetBitStreamWriteInt8(bs, minute)
    raknetEmulRpcReceiveBitStream(29, bs)
    raknetDeleteBitStream(bs)
end

function main()
    repeat wait(0) until isSampAvailable();
    toggleClock(true)
    local time = os.date("*t")
    setTime(time.hour, time.min)
end

Именно серверное время, установить можно только с помощью хуков диалога твоего сервера, по другому никак
 
Последнее редактирование:

Jefferson.!2.

Новичок
15
1
Можно синхронизировать через эмуляцию
  • SetPlayerTime - ID: 29​




Вот скрипт, который устанавливает время с операционки в игре с помощью игровых часов:
Lua:
local os = require 'os'

function toggleClock(state)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteBool(bs, state)
    raknetEmulRpcReceiveBitStream(30, bs)
    raknetDeleteBitStream(bs)
end

function setTime(hour, minute)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, hour)
    raknetBitStreamWriteInt8(bs, minute)
    raknetEmulRpcReceiveBitStream(29, bs)
    raknetDeleteBitStream(bs)
end

function main()
    repeat wait(0) until isSampAvailable();
    toggleClock(true)
    local time = os.date("*t")
    setTime(time.hour, time.min)
end



Именно серверное время, установить можно только с помощью хуков диалога твоего сервера, по другому никак
Сработало, спасибо