помогите со скриптом

X:Y:Z

Новичок
Автор темы
5
2
Версия MoonLoader
Другое
Сделал скрипт на смену погоды и времени, вроде работает нормально, однако когда указываешь в /setweather(команда смены погоды) не целое чисто а допустим буквы, тогда вылазит ошибка но со значением nil, а мне желательно чтобы выводилась ошибка как написано в скрипте, тобишь /setweather [0-45]

816723.PNG


1snWlWrGkXc.jpg


Lua:
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Скрипт загружен')
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Автор: {5A90CE}XYZ')
    sampRegisterChatCommand('setweather', cmd_sw)
    sampRegisterChatCommand('settime', cmd_st)
    while true do wait(0)
    setTimeOfDay(time, 1)
    end
end

function cmd_sw(param)
    local weather = tonumber(param)
    if weather ~= nil and weather >= 0 and weather <= 45 then
        forceWeatherNow(weather)
    end
    if #param == 0 then
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/setweather {5A90CE}[0-45]')
    else
    local swinf = string.format('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили погоду {5A90CE}№%s', weather)
    sampAddChatMessage(swinf, 0)
    end
end

function cmd_st(param)
    local hour = tonumber(param)
    if hour ~= nil and hour >= 0 and hour <= 23 then
    time = hour
    samp_set_time(true)
    else
    samp_set_time(false)
    hour = nil
    end
    if #param == 0 then
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/settime {5A90CE}[0-23]')
    else
    local stinf = string.format('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили время {5A90CE}%s:00', hour)
    sampAddChatMessage(stinf, 0)
    end
end

function samp_set_time(enable)
    if enable and default ~= nil then
    default = readMemory(sampGetBase() + 0x9C0A0, 4, true)
    writeMemory(sampGetBase() + 0x9C0A0, 4, 0x000008C2, true)
    elseif enable == false and default ~= nil then
    writeMemory(sampGetBase() + 0x9C0A0, 4, default, true)
    default = nil
    end
end
 

X:Y:Z

Новичок
Автор темы
5
2
делай проверку на число, например
Lua:
if tonumber(arg) then -- если аргумент число, то
-- code
end
Типо вот так?

Lua:
function cmd_sw(param)
    local weather = tonumber(param)
    if tonumber(arg) then
    if weather ~= nil and weather >= 0 and weather <= 45 then
        forceWeatherNow(weather)
    end
    end
    if #param == 0 then
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/setweather {5A90CE}[0-45]')
    else
    local swinf = string.format('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили погоду {5A90CE}№%s', weather)
    sampAddChatMessage(swinf, 0)
    end
end

Или

Lua:
function cmd_sw(param)
    if tonumber(arg) then
    if weather ~= nil and weather >= 0 and weather <= 45 then
        forceWeatherNow(weather)
    end
    end
    if #param == 0 then
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/setweather {5A90CE}[0-45]')
    else
    local swinf = string.format('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили погоду {5A90CE}№%s', weather)
    sampAddChatMessage(swinf, 0)
    end
end

Если нет то напиши пожалуйста как будет правильно :)
Исходя из моего кода
 

X:Y:Z

Новичок
Автор темы
5
2
И сразу хотелось бы задать ещё один вопрос, как сделать чтобы функция работала только при закрытом чате, допустим я поставил клавишу и на эту клавишу сделал функцию отправки сообщения в чат, так вот, как сделать чтобы когда я открывал чат эта кнопка была неактивна?
 

X:Y:Z

Новичок
Автор темы
5
2
делай проверку на число, например
Lua:
if tonumber(arg) then -- если аргумент число, то
-- code
end
попробовал в свой код разными способами встроить, не прокатило, можешь в мой код вписать это чтобы я понял что к чему? буду благодарен :(
 

MLycoris

Режим чтения
Проверенный
1,824
1,880
попробовал в свой код разными способами встроить, не прокатило, можешь в мой код вписать это чтобы я понял что к чему? буду благодарен :(
Lua:
local mem = require "memory"
local time = -1
local weather = -1
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Скрипт загружен')
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Автор: {5A90CE}XYZ')
    sampRegisterChatCommand('setweather', function(arg)
        if tonumber(arg) then -- является ли арг числом
            if tonumber(arg) <= 45 and tonumber(arg) >= 0 then -- соответствует ли арг требованиям
                weather = arg -- если да, то устанавливаем погоду
                sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили погоду {5A90CE} '..arg, -1)
            end      
        else -- если не число, то
            sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/setweather {5A90CE}[0-45]')
        end
    end)
    sampRegisterChatCommand('settime', function(arg)
        if tonumber(arg) then -- является ли арг числом
            if tonumber(arg) <= 23 and tonumber(arg) >= 0 then -- соответствует ли арг требованиям
                time = arg -- если да, то меняем значение
                sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили время {5A90CE}'..arg..':00', 0)
            end
        else -- если не число, то
            time = -1 -- задаём времени значение -1
            sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/settime {5A90CE}[0-23]')
        end
    end)
    while true do wait(0)
        if time ~= -1 then -- если время не -1, то устанавливается значение той переменной
            setTimeOfDay(time, 1)
        end
        if weather ~= -1 then
            mem.write(0xC81320, weather, 2, true)
        end
    end
end

И сразу хотелось бы задать ещё один вопрос, как сделать чтобы функция работала только при закрытом чате, допустим я поставил клавишу и на эту клавишу сделал функцию отправки сообщения в чат, так вот, как сделать чтобы когда я открывал чат эта кнопка была неактивна?
Lua:
if not sampIsChatInputActive() then -- если чат не открыт, то
    -- code
end
-- или
if not sampIsCursorActive() then -- эта лучше, проверяет активен ли курсор, это чтоб не вписывать кучу на диалоги и тд
end
 
  • Влюблен
Реакции: X:Y:Z

X:Y:Z

Новичок
Автор темы
5
2
Lua:
local mem = require "memory"
local time = -1
local weather = -1
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    repeat wait(0) until isSampAvailable()
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Скрипт загружен')
    sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Автор: {5A90CE}XYZ')
    sampRegisterChatCommand('setweather', function(arg)
        if tonumber(arg) then -- является ли арг числом
            if tonumber(arg) <= 45 and tonumber(arg) >= 0 then -- соответствует ли арг требованиям
                weather = arg -- если да, то устанавливаем погоду
                sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили погоду {5A90CE} '..arg, -1)
            end    
        else -- если не число, то
            sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/setweather {5A90CE}[0-45]')
        end
    end)
    sampRegisterChatCommand('settime', function(arg)
        if tonumber(arg) then -- является ли арг числом
            if tonumber(arg) <= 23 and tonumber(arg) >= 0 then -- соответствует ли арг требованиям
                time = arg -- если да, то меняем значение
                sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}Вы установили время {5A90CE}'..arg..':00', 0)
            end
        else -- если не число, то
            time = -1 -- задаём времени значение -1
            sampAddChatMessage('{5A90CE}[setWeather&Time]: {FFFFFF}/settime {5A90CE}[0-23]')
        end
    end)
    while true do wait(0)
        if time ~= -1 then -- если время не -1, то устанавливается значение той переменной
            setTimeOfDay(time, 1)
        end
        if weather ~= -1 then
            mem.write(0xC81320, weather, 2, true)
        end
    end
end


Lua:
if not sampIsChatInputActive() then -- если чат не открыт, то
    -- code
end
-- или
if not sampIsCursorActive() then -- эта лучше, проверяет активен ли курсор, это чтоб не вписывать кучу на диалоги и тд
end
Проверил, всё работает, большое спасибо


Хочу ещё один вопрос задать :)
Допустим смотри, мне нужно поменять стиль скрипта, чтобы он был не синим а зелёным, менять его можно через диалоговое окно выбрав один из пунктов(тобишь 2 стиль диалогового окна), так вот в чём вопрос, чтобы он так менялся по нажатию в диалоговом окне это надо с ini.cfg работать или как?
 
Последнее редактирование:
  • Нравится
Реакции: joumey и MLycoris