Добавлен Берги,
не публикуется
Раздел:
Основы
Всем привет, всё ещё вводите длинный код через строку чата? А вы в курсе, что можно вообще ничего не вводить? Прогресс не стоит на месте и между игровыми сессиями данные можно сохранять автоматически (вернее это можно было всегда делать), сейчас на простых примерах я покажу как это делается:
Отступление
Элементарно
Продвинуто
Защищённо
Мультиплеерно
Отступление
Элементарно
Отступление
Сразу скажу, я не читал аналогичные старые статьи и не работал по ним (ну только с Дата менеджером ), и в целом до материала в этой статье дошёл практически сам и очень давно, а ещё я слишком мало играл в варкрафт и тем более в карты с сейвкодом, например это карты Goblin Survival со времён гарены, помнится надо было находить код в файлах игры и копипастить его в чат варкарфта. Ещё я играл в xgm.guru/p/wc3/darkworldorpg и там тоже надо вводить\копипастить код. И я понимаю, ведь героев то может быть несколько и если делать автосейв, но опять таки мы говорим вообще не об рпг, те кто делают рпг они и так знаю что делают, оставим их там, а мы поговорим про карты любого типа, прогресс можно прикрутить вообще к чему угодно и сейвить практически всё:
- число игр
- настройку управления
- уровни героев
- предметы
- состояние фреймов
- очки
- можно обмениваться данными между картами для вывода глобальной статистики, как это делает LTW
- можно делать мультиплеерные кампании на отдельных картах, где происходит авто перенос героев
Элементарно
Наша задача даже при работе на lua, сформировать вот такой файл на джассе (да на нём родимом )
function PreloadFiles takes nothing returns nothing
call BlzSetAbilityTooltip ('Agyv',"Тут наш код для передачи данных",0)
endfunction
На самом деле файл может получиться грязным типа вот таким, но не нас это не волнует особо
грязный файл
function PreloadFiles takes nothing returns nothing
call PreloadStart()
call Preload( "")
call BlzSetAbilityTooltip ('Agyv',"MTM5NTAw",0)
//" )
call PreloadEnd( 239.9 )
endfunction
В чём тут 2 фишки: 1, мы записываем наш код в тултип способности, 2 при работе с луа у нас нет ограничений на длину строки, прям нет вообще, совсем нет, лично я проверял 10к символов, это не фишка рефа, а фишка именно луа на рефе, на хайве доводилось найти нужную инфу, если кто-то захочет пруфов - то так и быть я это докажу. На джасе не помню, 1000? Информация обновляется и проверяется.
Это я далеко зашел кажись, откатимся назад, формируем файл в "редакторе код будет выглядеть примерно вот так:
Это я далеко зашел кажись, откатимся назад, формируем файл в "редакторе код будет выглядеть примерно вот так:
function SaveResult(SaveCode)
Preload("\")\ncall BlzSetAbilityTooltip ('Agyv',\"" .. SaveCode .. "\",0)" .. "\n//")
PreloadGenEnd(SavePath)
PreloadGenClear()
end
Ещё раз, при вызове функции
SaveResult(GameStartCount+1 ) -- где GameStartCount число
Например число игр равное N+1 для каждой игры, например бы делаем соло рпг, и сделали в ней режим НОВАЯ ИГРА ПЛЮС, которая активируется автоматически, и усложняет следующий забег, добавляя реиграбельсти для соло проектов. Или наоборот игра будет упрощаться, если игрок часто проигрывает.
Я походу не могу без отступлений да?.
Ну и чтобы загрузить наш код при старте достаточно вызвать следующую функцию
Я походу не могу без отступлений да?.
Ну и чтобы загрузить наш код при старте достаточно вызвать следующую функцию
function InitPreloadStartSimple()
SavePath = "save\\TestGameStart.txt" --путь до файла что мы формировали
Preloader(SavePath) --в этот момент данные записываются в имя способности, для каждого игрока свои данные
GameStartCount = BlzGetAbilityTooltip(FourCC('Agyv'), 0)-- при первом запуска там описание способности
if tonumber(GameStartCount) then
-- код может быть числом
print("Сыграно игр "..GameStartCount)
else
print("Первая игра")
GameStartCount=0
end
end
Ну и карта пример, каждый раз при рестарте, переменная GameStartCount увеличивается на 1 и мы видим сообщение.
Таким образом мы сделали обрезанный дата менеджер в пару строк, я решил начать с самого простого, потому что эта вещь довольно сложная для понимания, многих дата менеджер отпугивает ещё со времён 2012.
В доказательство что всё работает - смотрим видосик
Таким образом мы сделали обрезанный дата менеджер в пару строк, я решил начать с самого простого, потому что эта вещь довольно сложная для понимания, многих дата менеджер отпугивает ещё со времён 2012.
В доказательство что всё работает - смотрим видосик
Вот где смотреть сейв файл Documents\Warcraft III\CustomMapData\
Ну и карта пример, где я собрал всё до кучи
Запомнили? идём дальше
Запомнили? идём дальше
весь код целиком
do
GameStartCount=0
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
TimerStart(CreateTimer(), 1, false, function()
InitPreloadStartSimple()
SaveResult(math.floor(GameStartCount + 1))
end)
end
end
function InitPreloadStartSimple()
SavePath = "save\\TestGameStart.txt" --путь до файла что мы формировали
Preloader(SavePath) --в этот момент данные записываются в имя способности, для каждого игрока свои данные
GameStartCount = BlzGetAbilityTooltip(FourCC('Agyv'), 0)
if tonumber(GameStartCount) then
-- код может быть числом
print("Сыграно игр "..GameStartCount)
else
print("Первая игра")
GameStartCount=0
end
end
function SaveResult(SaveCode)
Preload("\")\ncall BlzSetAbilityTooltip ('Agyv',\"" .. SaveCode .. "\",0)" .. "\n//")
PreloadGenEnd(SavePath)
PreloadGenClear()
end
Продвинуто
Статья ещё в процессе производства...
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Рекомендую к чтению.
Я уже давно решил не дописывать статью, унесу это с собой в могилу, а вы и дальше продолжайте десинхать