Исходник [ARZ PC & MOBILE] Кастомные уведомления в своих скриптах

MTG MODS

Активный
Автор темы
260
181
Доброго времени суток всем, кто читает эту тему.

И так, начну с того, что на Аризоне уже давно существуют свои кастомные уведомления.

Так вот, сегодня вы узнаете как использовать настраиваемые уведомления в игре.

1721549090237.png
1692882251744.png


И так, как же это использовать:

1) Откройте свой lua скрипт, и вставьте код
Lua:
function show_arz_notify(type, title, text, time)
    if MONET_VERSION ~= nil then
        if type == 'info' then
            type = 3
        elseif type == 'error' then
            type = 2
        elseif type == 'success' then
            type = 1
        end
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, 62)
        raknetBitStreamWriteInt8(bs, 6)
        raknetBitStreamWriteBool(bs, true)
        raknetEmulPacketReceiveBitStream(220, bs)
        raknetDeleteBitStream(bs)
        local json = encodeJson({
            styleInt = type,
            title = title,
            text = text,
            duration = time
        })
        local interfaceid = 6
        local subid = 0
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, 84)
        raknetBitStreamWriteInt8(bs, interfaceid)
        raknetBitStreamWriteInt8(bs, subid)
        raknetBitStreamWriteInt32(bs, #json)
        raknetBitStreamWriteString(bs, json)
        raknetEmulPacketReceiveBitStream(220, bs)
        raknetDeleteBitStream(bs)
    else
        local str = ('window.executeEvent(\'event.notify.initialize\', \'["%s", "%s", "%s", "%s"]\');'):format(type, title, text, time)
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, 17)
        raknetBitStreamWriteInt32(bs, 0)
        raknetBitStreamWriteInt32(bs, #str)
        raknetBitStreamWriteString(bs, str)
        raknetEmulPacketReceiveBitStream(220, bs)
        raknetDeleteBitStream(bs)
    end
end
2) Для показа уведомления в нужном вам фрагменте кода используйте эту функцию:
Lua:
show_arz_notify(type, title, text, time)
Данная функция имеет 4 аргумента:
1) type - тип уведомления:
info / error / success / halloween
(последний тип halloween работает только на пк)
2) title - текст заголовка
3) text - текст содержимого уведомления
4) time - время отображения уведомления в миллисекундах

Давайте наведу пример:
Lua:
show_arz_notify('error', 'Ошибка!', 'Вы не можете войти в это здание, оно закрыто.', 2000)
В этом случае вы увидите такое уведомление, которое будет отображатся 2 секунды.
1692882251744.png

Зависимости: MoonLoader 0.26.5 / MonetLoader актуальной версии
 
Последнее редактирование:

chapo

чопа сребдс // @moujeek
Модератор
8,934
11,702
Извините, а ваши родители случайно не VRush и Kaban Bunya? А откуда у вас такой говнокод?
1. почему тип передается как число? Почему их всего 2 если их 4?
1692890856267.png

2. зачем добавлять в либу копирайты, если ты просто добавил говнокод к функции егора?
3. зачем мейн?
4. зачем вызывать evalcef через pcall если он не крашнется и ничего не вернет?
5. зачем создавать экспортируемую функцию и в ней через pcall вызывать функцию, в которой уже есть pcall?

Убираем все говно и получаем:
Lua:
--[[
    АФТАР ИТАВА СКРЕБДА КОТОРИ ДАБАВЛЯИТ УВИДАМЛЕНЯ НИВЕРЛАНЕ И ЧОПА СРЕБДС
]]

---@param type 'info' | 'error' | 'success' | 'halloween'
---@param title string
---@param text string
---@param time number
function EXPORTS.addArizonaNotification(type, title, text, time)
    assert(type == 'info' or type == 'error' or type == 'success' or type == 'halloween', 'Invalid notification type!');
    local str = ('window.executeEvent(\'event.notify.initialize\', \'["%s", "%s", "%s", "%s"]\');'):format(type, title, text, time);
    local bs = raknetNewBitStream();
    raknetBitStreamWriteInt8(bs, 17);
    raknetBitStreamWriteInt32(bs, 0);
    raknetBitStreamWriteInt32(bs, #str);
    raknetBitStreamWriteString(bs, str);
    raknetEmulPacketReceiveBitStream(220, bs);
    raknetDeleteBitStream(bs);
end
 

MTG MODS

Активный
Автор темы
260
181
Почему их всего 2 если их 4?
Не знал что есть 4, самостоятельно обнаружил только 2
пробовал без него, ничего не работало
зачем вызывать evalcef через pcall если он не крашнется
Если какой-то аргумент указать неправильно, может крашнуться, вот и защита такая
 
Последнее редактирование:

chapo

чопа сребдс // @moujeek
Модератор
8,934
11,702
пробовал без него, ничего не работало
потому что ты зачем то сделал это на import/export (и все ровно говоришь что бы кидали в \lib), хотя тут можно спокойно обойтись и без этого:
Lua:
---@param type 'info' | 'error' | 'success' | 'halloween'
---@param title string
---@param text string
---@param time number
return function(type, title, text, time)
    assert(type == 'info' or type == 'error' or type == 'success' or type == 'halloween', 'Invalid notification type!');
    local str = ('window.executeEvent(\'event.notify.initialize\', \'["%s", "%s", "%s", "%s"]\');'):format(type, title, text, time);
    local bs = raknetNewBitStream();
    raknetBitStreamWriteInt8(bs, 17);
    raknetBitStreamWriteInt32(bs, 0);
    raknetBitStreamWriteInt32(bs, #str);
    raknetBitStreamWriteString(bs, str);
    raknetEmulPacketReceiveBitStream(220, bs);
    raknetDeleteBitStream(bs);
end
Использование:
Lua:
local arizonaNotification = require('lib.arizonaNotification');

arizonaNotification('info', 'Заголовок', 'Текст', 1500);

-- или (сойдет если хочешь вызвать только 1 раз)
require('lib.arizonaNotification')('info', 'Заголовок', 'Текст', 1500);
 

MTG MODS

Активный
Автор темы
260
181
потому что ты зачем то сделал это на import/export (и все ровно говоришь что бы кидали в \lib), хотя тут можно спокойно обойтись и без этого:
Lua:
---@param type 'info' | 'error' | 'success' | 'halloween'
---@param title string
---@param text string
---@param time number
return function(type, title, text, time)
    assert(type == 'info' or type == 'error' or type == 'success' or type == 'halloween', 'Invalid notification type!');
    local str = ('window.executeEvent(\'event.notify.initialize\', \'["%s", "%s", "%s", "%s"]\');'):format(type, title, text, time);
    local bs = raknetNewBitStream();
    raknetBitStreamWriteInt8(bs, 17);
    raknetBitStreamWriteInt32(bs, 0);
    raknetBitStreamWriteInt32(bs, #str);
    raknetBitStreamWriteString(bs, str);
    raknetEmulPacketReceiveBitStream(220, bs);
    raknetDeleteBitStream(bs);
end
Использование:
Lua:
local arizonaNotification = require('lib.arizonaNotification');

arizonaNotification('info', 'Заголовок', 'Текст', 1500);

-- или (сойдет если хочешь вызвать только 1 раз)
require('lib.arizonaNotification')('info', 'Заголовок', 'Текст', 1500);
Перезалил, теперь всё ок, спасибо за советы
 

MrCreepTon

Неизвестный
Всефорумный модератор
2,213
5,023