Создание автообновления для игры
|
|
MrIncrof | Дата: Среда, 09 Ноября 2011, 13:44 | Сообщение # 1 |
Lite Programmer
Сейчас нет на сайте
| Привет! Сейчас я расскажу как можно сделать автоматическое обновление игры. Как это работает: сначала качается текстовый файл в котором написана самая новая версия, потом сравнивается это значение со значением версии самой игры. Если новейшая версия больше текущей версии, тогда начинается закачка файла, иначе выдаётся сообщение о том что текущая версия не требуется в обновлении. Для начала, необходимо скачать DLL библиотеку отсюда. Весит она чуть больше килобайта. Далее необходимо распаковать содержимое архива в папку с игрой. Заходим в ГМ => Scripts => Import Scripts.. Этим действием мы импортировали необходимые скрипты. Создаём два скрипта: check_new_version, через этот скрипт будет качаться файл с версией игры и сравниваться с текущей версией. Ещё один скрипт: download_update, через этот скрипт будет качаться сами файлы. В 1-ый скрипт пишем: Code URL='http://mysite.ru/v.txt'; // Полный путь до текстового файла File='v.txt'; // Название файла Download=dll_download(URL,File); // Загружаем файл
if Download{ // Если загрузка удалась FileOpen=file_text_open_read(working_directory+'\v.txt'); // Открывается скачанный файл FileRead=file_text_read_real(FileOpen); // Читаем содержимое файла Version=1.1; // Текущая версия игры if Version<FileRead{ // Если версия игры меньше новейшей show_message('Найдена новая версия'); // Выводится сообщение download_update(); // Начинается загрузка file_delete(File); // Удаляется файл } else{ // Иначе show_message('У вас новейшая версия'); // Выводим сообщение file_delete(File); // И удаляем файл } }else{ // Если файл не может скачаться show_message('Ошибка!'); // Выводим сообщение об ошибке if file_exists(File){ // Если файл существует file_delete(File); // Удаляем его } } Первый скрипт готов! Осталось только написать скрипт загрузки файлов игры, для этого во 2-ой скрипт пишем: Code URL='http://mysite.ru/game.exe'; // Полный путь до файла File='game.exe'; // Название файла Download=dll_download(URL,File); // Загружаем файл if Download{ // Если загрузка прошла успешно show_message('Загрузка прошла успешо!); // Выводим сообщение execute_shell(File,0); // Запускаем игру game_end(); // Выходим из программы }else{ // Если невозможно загрузить файл show_message('Ошибка!'); // Выводим сообщение об ошибке game_end(); // Выходим из программы } Вот и всё! Вам осталось только изменить переменные на нужные вам. Вы можете свободно использовать данную библиотеку даже в коммерческих целях. Урок закончен, ждите новых уроков.
|
|
| |
Syank | Дата: Среда, 09 Ноября 2011, 14:34 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Охо-хо, супер урок! Пора бы админам снять ограничение на повтор "плюсов" через 7 дней. Начинает бесить:D А я всё думал как это реализуется в GM. По ходу - ты у меня мысли читаешь?
|
|
| |
MrIncrof | Дата: Среда, 09 Ноября 2011, 14:46 | Сообщение # 3 |
Lite Programmer
Сейчас нет на сайте
| Syank, можешь сделать для своего проекта =D
|
|
| |
Syank | Дата: Среда, 09 Ноября 2011, 14:56 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Да, это бы было круто. Осталось только сделать проект
|
|
| |
|
GameMix | Дата: Среда, 09 Ноября 2011, 18:24 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| 4aBo, ещё один полезный урок. Многим пригодится. Требую ещё статьи!
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
Морриарте | Дата: Среда, 09 Ноября 2011, 19:01 | Сообщение # 7 |
LINUX ФАНАТ
Сейчас нет на сайте
| Отлично написано.
Сообщение отредактировал Buran - Среда, 09 Ноября 2011, 19:02 |
|
| |
MrIncrof | Дата: Среда, 09 Ноября 2011, 19:04 | Сообщение # 8 |
Lite Programmer
Сейчас нет на сайте
| GameMix, Buran, спасибо, сейчас я улучшаю урок по модификации игры
|
|
| |
noTformaT | Дата: Среда, 09 Ноября 2011, 19:14 | Сообщение # 9 |
Ukrainian independent game developer
Сейчас нет на сайте
| ммм,если игра сейчас запущенна, то как ос даст удалить ее файлы????
@noTformaT
|
|
| |
Морриарте | Дата: Среда, 09 Ноября 2011, 19:16 | Сообщение # 10 |
LINUX ФАНАТ
Сейчас нет на сайте
| noTformaT, там скачивается файл и заменяется наскольно я помню, потом игра выключится и надо будет запустить её еще раз.
|
|
| |
Syank | Дата: Понедельник, 28 Ноября 2011, 05:21 | Сообщение # 11 |
участник
Сейчас нет на сайте
| Как заменяется?О_О Если он запущен. Можно создать ещё один спец файл и при запуске новой версии, если этот файл есть, то удалять старую... правда путь к ней найти тяжеловато будет, если игра не будет в определённой папке.Добавлено (28.11.2011, 05:01) --------------------------------------------- Ухуху! Я ошибку нашёл! (Решил использовать) в последнем скрипте show_message('Загрузка прошла успешо!'); // Выводим сообщение А вдруг кто не заметитXD Добавлено (28.11.2011, 05:21) --------------------------------------------- Я ещё кое что заметил. После импорта файла gml у вас появляется 2 скрипта: dll_download и ini_dll_download. Если так их и запустить, то выдаст ошибку, что переменная _au_download не известна. А она назначается в ini_dll_download. И если всё из ini_dll_download скопировать в начало dll_download, то всё работает. Кто либо вообще пробовал скрипт этот использовать? Я кстати не качал... только версию сверял.
|
|
| |
BrightSpot | Дата: Понедельник, 28 Ноября 2011, 16:20 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| ппц... хотел написать такой урок, но меня опередили=))) могу добавить что для большей продуктивности обновлений следует код игры выносить во внешние файлы(мой ммо марио так сделан) для этого нужно создать текстовый фйал с названием(если не мелочится то просто code с кодами все игры, а если больше разбивать то можно каждое событие внести в отдлельный файл) где будет написано:
object_event_add(xxx,yyy,numb, " zzz " ) // xxx - назвние обьекта(obj_hero,obj_player и т.д), , ууу - событие(ev_create,ev_step и т.д),numb - номер события(если аларм то номер аларма или, если колизия, то название обькта с которой происходит колизия),zzz - это сам код который должен быть в событии(лучше сначало его в самом ГМ-е делать, а потом вырезать и вставлять в txt файл(хотя расширение любое сойдет) таких событий может быть куча(у меня каждый файл на отдельный обьект) дальше создаем обьект загрузки и в нем пишем(у меня в create): execute_file('bin\file_name.txt')// bin- папка где лежат фалы, file_name - название фала, txt - расширения файла(кушает любое или почти любое... у меня wom) и все... тогда обновлять можно только код, не качая заново exe файл(подобно обновлениям ммо игр)
З.Ы. автор если надо добавь в статью... кому то да понадобится=)))
Более мощный компьютер глючит быстрее и точнее.
Сообщение отредактировал BrightSpot - Понедельник, 28 Ноября 2011, 16:22 |
|
| |
MrIncrof | Дата: Понедельник, 28 Ноября 2011, 20:44 | Сообщение # 13 |
Lite Programmer
Сейчас нет на сайте
| BrightSpot, хорошая идея, но этот урок я обновлять больше не буду, если ты не против, я напишу новый урок по твоему методу, но добавлю кое-что ещё Если ты не против...Добавлено (28.11.2011, 20:44) --------------------------------------------- + ещё можно шифрование сделать
|
|
| |
BrightSpot | Дата: Понедельник, 28 Ноября 2011, 23:35 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| я дал идею, а как ее использовать твое дело(мне все равно на репу)
Более мощный компьютер глючит быстрее и точнее.
|
|
| |
MyACT | Дата: Среда, 28 Декабря 2011, 16:10 | Сообщение # 15 |
C# CODERS
Сейчас нет на сайте
| MrIncrof, слушай у меня в 1 скрипте ошибка
3дэшечки: https://sketchfab.com/myactyindie Курентли воркс он: https://myacty.itch.io/raskopnik
|
|
| |
MrIncrof | Дата: Среда, 28 Декабря 2011, 17:55 | Сообщение # 16 |
Lite Programmer
Сейчас нет на сайте
| MyACT, я не экстрасенс, выкладывай код ошибки) + если изменил, даже немного, кидай код
|
|
| |
MyACT | Дата: Четверг, 29 Декабря 2011, 04:26 | Сообщение # 17 |
C# CODERS
Сейчас нет на сайте
| Там он чегото в объекте download_update не понимает
3дэшечки: https://sketchfab.com/myactyindie Курентли воркс он: https://myacty.itch.io/raskopnik
|
|
| |