Если не вводить параметр зареганных команд скрипт ломается, шо робыть

americancop

Участник
Автор темы
41
7
Версия MoonLoader
.026-beta
говнокод:
local inicfg = require("inicfg")
local memory = require("memory")
local ffi = require 'ffi'
local cast = ffi.cast
local draw_dist = cast('float *', 0x00B7C4F0)

cast('unsigned char *', 0x005609FF)[0] = 0xEB
cast('unsigned char *', 0x00561344)[0] = 0xEB

local data =
{
    settings =
    {
        sst = 12,
        ssw = 1,
        ssd = 400.0,
        sss = true
    }
}

function main()
    repeat wait(0) until isSampAvailable()
    local values = inicfg.load(data, "wtd.ini")
    inicfg.save(values, "wtd.ini")
    sampRegisterChatCommand("sst", setTime)
    sampRegisterChatCommand("ssw", setWeather)
    sampRegisterChatCommand("ssd", setDistance)
    sampRegisterChatCommand("ssm", setStatic)
    while true do
        wait(0)
        local values = inicfg.load(data, "wtd.ini")
        if values.Settings.Static then
            if values.Settings.Time ~= memory.read(0xB70153, 1, false) then memory.write(0xB70153, values.Settings.Time, 1, false) end
            if values.Settings.Weather ~= memory.read(0xC81320, 2, false) then memory.write(0xC81320, values.Settings.Weather, 2, false) end
            if values.Settings.Distance ~= memory.read(0x00B7C4F0, 4, false) then weatmain(values.Settings.Distance) end
        end
    end
end

function setTime(time)
    local time = tonumber(time)
    if time < 0 or time > 23 then
    sampAddChatMessage("{F5DEB3}Укажите время, от {ffffff}0 {F5DEB3}до {ffffff}23{F5DEB3}.", -1) else
        sampAddChatMessage("{F5DEB3}Время установлено на {ffffff}"..time.."{F5DEB3}.", -1)
        local values = inicfg.load(data, "wtd.ini")
        if values.Settings.Static then
            values.Settings.Time = time
            inicfg.save(values, "wtd.ini")
        else memory.write(0xB70153, time, 1, false)
        end
    end
end

function setDistance(param)
    param = tonumber(param)
    if param > 3600.0 or param < 101.0 then sampAddChatMessage("{F5DEB3}Укажите дистанцию прорисовки, от {ffffff}101 {F5DEB3}до {ffffff}3600{F5DEB3}.", -1) return false end
    weatmain(param)
    sampAddChatMessage("{F5DEB3}Дистанция прорисовки установлена на {ffffff}"..param.."{F5DEB3}.", -1)
end

function weatmain(dist)
    local values = inicfg.load(data, "wtd.ini")
    draw_dist[0] = dist
    values.Settings.Distance = dist
    inicfg.save(values, "wtd.ini")
end

function setWeather(weather)
    local weather = tonumber(weather)
    if weather < 0 or weather > 45 then sampAddChatMessage("{F5DEB3}Укажите погоду, от {ffffff}0 {F5DEB3}до {ffffff}45{F5DEB3}.", -1) else
        if message then
            sampAddChatMessage("{F5DEB3}Погода установлена на {ffffff}"..weather.."{F5DEB3}.", -1)
        end
        local values = inicfg.load(data, "wtd.ini")
        if values.Settings.Static then
            memory.write(0xC81320, weather, 2, false)
            memory.write(0xC81318, weather, 2, false)
            values.Settings.Weather = weather
            inicfg.save(values, "wtd.ini")
        else
            memory.write(0xC81320, weather, 2, false)
        end
    end
end

function setStatic(static)
    if static == "on" then
        sampAddChatMessage("{F5DEB3}Статическое состояние активировано.", -1)
        local values = inicfg.load(data, "wtd.ini")
        values.Settings.Static = true
        inicfg.save(values, "wtd.ini")
    elseif static == "off" then
        sampAddChatMessage("{F5DEB3}Статическое состояние деактивировано.", -1)
        local values = inicfg.load(data, "wtd.ini")
        values.Settings.Static = false
        inicfg.save(values, "wtd.ini")
    end
end