Добавлен , опубликован

Библиотека Lua-Warcraft3

Содержание:
Тип: Наработка
Классификация: Код
Платформа: WarCraft III, LUA, 1.31.x+
Описание:
Библиотека loader для save/load систем на Lua. Сделано с душой и любовью для программистов, коддеров-скриптовиков, и конечно же сверх-разумов. Покиньте JASSANIC, он тонет, пересядем на LUANIC!
Ну, если вкратце: «Простенькая библиотека для save\load систем дя LUA WCIII»
Error func
function error(errstr)
  print([[|cffcb0404ERROR:|r
|cffffcc00]]..errstr.."|r")
end
Заметка: Да-да, эта lib'а требует костыльную функцию error(), как и та прошлая UTF-8(tchar)
Список функций (Более подробный...)
loader.init()
loader.toint( str ) -- конветер кода в числа
loader.gen( num ) -- конвертер числа в код
loader.coding() -- преобразует числа в  коды
loader.encoding() -- преобразует коды в числа
loader.gc( opt, ... )  -- если опт на тру, то обнуляет таблицу с числами, ... числа, которые вбиваете в таблицу или таблицу в таблицу.
loader.ga( astr. isAdd) 
--[[ сгребает данных с чата, или можно вручную впрыснуть строку, где параметр isAdd позволяет пополнять таблицу, если astr == nil, то будет авто-сгребалка, которая будет игнорить первый параметр, который может быть -l1, -l2, -l3 или просто -l ]]--
loader.tabcpy(dest_table) -- копирует числа в таблицу 
--[[Внимание:
модель таблицы должна быть такая: { size=0, numt ={} }
myTable = { size=0, numt ={} }
--]]
loader.zip_options(cc,...) --[[ просто типа упаковывает несколько чисел в одно, хорошо для опциональность ваших примочек = ) 
— сс число-фактор упаковки от 8 до 1000, можно и 0, но это будет плохо для вас. но рекоммендую вам минимум от 4, 8, на классически будет 16.
— ... список чисел, но не переусердствуйте с этим.
— loader.zip_options(32,16,12,31) => 32144 
]]--
loader.unzip_options = function (cc,tb,nn) -- распаковывает  несколько чисел из общей суммы ы
--[[ сс - фактор упаковывания 
— tb таблица, в которую будем складывать полученные опции. Она должна быть, желательно пустой.
— nn число, которое является упаковкой
— loader.unzip_options(32,gt,32144) => 16 12 31  
]]--

loader.pa(plr,str) -- просто сохраняет сгенерированные коды в файл, и да он их дели на -lx + 9 сегментов в данном случае
Примеры:
  1. Простенький пример Save\Load
1.1 Карта-пример
Save+
function loader_save()
    if not LII then 
        loader.init()
        LII = true 
        print("Инициализация погрузщика................ [ |cffFFF015СИСТЕМА|r | |cff03FF03ДА|r ]")
    end
    if udg_H ~= nil then
        loader.gc(false, GetUnitTypeId(udg_H), GetItemTypeId(UnitItemInSlot(udg_H,0)), GetItemTypeId(UnitItemInSlot(udg_H,1)), GetItemTypeId(UnitItemInSlot(udg_H,2)), GetItemTypeId(UnitItemInSlot(udg_H,3)) )
        loader.gc(true, GetItemTypeId(UnitItemInSlot(udg_H,4)), GetItemTypeId(UnitItemInSlot(udg_H,5)) )
        loader.coding()
        loader.pa(Player(0),"foo\\sexyworgeness.txt") -- На самом деле это эльфы, ахахаххахах
        RemoveUnit(udg_H)
        udg_H = nil
        print("Герой был сохранён................ [ |cff03FF03ДА|r ]")
    else
        print("Герой был не сохранён................ [ |cffFF0303НЕУДАЧНО|r ]")
    end
end
Load+
LGA = false
LGA_p = 0

function loader_load()
    local ss = GetEventPlayerChatString()
    if not LII then 
        loader.init()
        LII = true 
        print("Инициализация погрузщика................ [ |cffFFF015СИСТЕМА|r | |cff03FF03ДА|r ]")
    end
    if udg_H == nil then
        if not LGA and ss == "-load start" then
            LGA = true
            LGA_p = 0 
            print("Якорь погрузчика задействован................ [ |cff03FF03ДА|r ]")
        elseif LGA and ss == "-load end" then
            LGA = false
            LGA_p = 0
            local tt = {size=0,numt={}}
            loader.encoding()
            loader.tabcpy(tt)
            udg_H = CreateUnit( Player(0), tt.numt[1], 0.0, 0.0, 90. )
            if udg_H ~= nil then
                for k = 2, 7 do 
                    UnitAddItemToSlotById( udg_H, tt.numt[k], k-2 )
                end
            else
                print("Загрузка героя................ [ |cffFF0303НЕУДАЧНО|r ]")
                print("[|cffFF0303СООБЩ. ОШБ|r ]: Плохой код")
            end
        end
    else
        print("Загрузка героя................ [ |cffFF0303НЕУДАЧНО|r ]")
        print("[|cffFF0303СООБЩ. ОШБ|r ]: Вы уже имеете героя в своё распоряжении")
    end
end



function loader_put()
    ss = GetEventPlayerChatString()
    if ss ~= "-load start" and ss ~= "-load end" then
        if LGA then
            if LGA_p == 0 then
                LGA_p = LGA_p + 1
                loader.ga(nil)
            else
                loader.ga(nil,true)
                LGA_p = LGA_p + 1
            end
            print(ss)
        else
            print("Погрузка аргументов................ [ |cffFF0303НЕУДАЧНО|r ]")
            print("[|cffFF0303СООБЩ. ОШБ|r ]: вы не ввели -load start, но чтобы загрузить введите -load end")
        end
    end
end
И.С.

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
28
5 лет назад
0
нарабтка
0
29
5 лет назад
Отредактирован Волчачка
0
PT153:
нарабтка
Исправлено, но лучше бы написал в ЛС, или в discord'е упомянул об этом.
Если будешь тестировать это чудо, то не забудь сообщить об ошибках, только обновлю архив немного, там лишняя pow инициируется.

upd
PS: Обновил, кек.
0
28
5 лет назад
Отредактирован PT153
0
Если будешь тестировать это чудо
Я пока не занимался save-load системами, даже на JASS.
0
29
5 лет назад
0
Я пока не занимался save-load системами, даже на JASS.
На jass'e их геморрно делать. Тем более на jass'е есть примеры save\load систем.
0
29
5 лет назад
Отредактирован Волчачка
0

Обновление 0.5

Что сделано

  • Подогнана под wc3
  • Немного обновлены настройки, если гблиззы введут int64
  • Добавлена функция loader.gc() для вставки чисел в общий буффер
  • Многочисленные поправки багов

Планируется (Если будет желание, то сделаем )

  • Сделать большое целое (Big integer), как показал опыт с рпг ТКоК, иногда такое чудовище, как Big integer может потребоваться для системы save\load, когда начинают имет огромный лор и нехилую таблицу достиженией.
  • По усмотрению, ещё возможно, но только возможно, введём сжатие чисел. К примеру чисел идентификаторов типов способностей, предметов или б.е.(боевых единиц, т.е. unit ).
Чтобы оставить комментарий, пожалуйста, войдите на сайт.