game maker
Gebruikersnaam:
Wachtwoord:
Home Info Forums Help
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?
+  Forums
|-+  Werken met Game Maker
| |-+  Tutorials en Uitbreidingen (Moderator: Maarten Baert)
| | |-+  [scr + tool] Auto-updater
Pagina's: [1] 2 3 ... 7
« vorige volgende »
Print
Advertenties

Naud1234
Gebruiker


Offline Offline

Berichten: 715


« Gepost op: 6 Januari 2010, 21:47:04 »

Auto-updater

GM-versie:  Game Maker 6 en  Game Maker 7 en GameMaker 8
Registratie vereist: Ja
Niveau: Beginner (om te gebruiken) / gevorderd (om te begrijpen)

Inleiding
Als je een spel hebt waarvan je regelmatig nieuwe versies upload en op je website of game-maker.nl zet, dan weten mensen die je spel opstarten niet of er een nieuwe versie is en ze moeten je spel steeds handmatig downloaden. Met deze auto-updater controleert het spel of er een nieuwe versie is. Als er een nieuwe versie is wordt deze gedownload en opgestart en wordt het huidige spel afgesloten en verwijderd.

Versies
Er zijn 2 versies van de auto-updater.
Versie 1 download version.ini met downloaddll.dll en haalt daar gegevens uit dmv ini_read_string() en ini_read_real(). Je kan extra variabelen in version.ini stoppen, maar dan moet je ze zelf uitlezen door het script update_alarm0 aan te passen met een extra regel ini_read_string() of ini_read_real().
Versie 2 leest version.ini met NetRead.dll en voert hem uit dmv execute_string(). Je kan extra variabelen in version.ini stoppen door in het bestand " variabele = 'string' " toe te voegen. Je kan ook andere codes toevoegen.

Bestanden
Je hebt 3 bestanden nodig:
Versie 1:
  • auto-updater downloaddll.gml (deze moet je importen in je spel)
  • downloaddll.dll (deze moet je in de map zetten waar je spel ook in staat)
  • DownloadManager2.dll (deze moet je in de map zetten waar je spel ook in staat)
Hier kan je deze 3 bestanden downloaden.

Versie 2:
  • auto-updater ini.gml (deze moet je importen in je spel)
  • NetRead.dll (deze moet je in de map zetten waar je spel ook in staat)
  • DownloadManager2.dll (deze moet je in de map zetten waar je spel ook in staat)
Hier kan je deze 3 bestanden downloaden.

Auto-updater ontwerper: Download

Example:
Versie 1: voorbeeldspel (versie1).exe
Versie 2: voorbeeldspel (versie1).exe

GMK file:
Versie 1: voorbeeldspel (versie1).gmk
Versie 2: voorbeeldspel (versie1).gmk

Ini file maken
Versie 1:
Eerst moet je een ini file maken. Neem de onderstaande tekst over en vul achter version de versie van het nieuwste spel in en bij location de downloadlink. Je kan ook andere variabelen erin zetten, maar die moet je dan wel zelf uitlezen.
Code:
[data]
version = versie2
location = http://updo.nl/file/89228b04.exe
Upload je ini file via je webhost op je website zodat de downloadlink steeds hetzelfde blijft. Dus bijvoorbeeld 'www.website.nl/version.ini' of 'www.website.nl/spel.ini' enz.

Versie 2:
Eerst moet je een ini file maken. Neem de onderstaande tekst over en vul achter newversion de versie van het nieuwste spel in en bij location de downloadlink. Je kan ook andere variabelen erin zetten. Als je de variabelen in obj_update wilt gebruiken hoef je geen global te gebruiken, anders wel.
Code:
newversion=""
location=""
Upload je ini file via je webhost op je website zodat de downloadlink steeds hetzelfde blijft. Dus bijvoorbeeld 'www.website.nl/version.ini' of 'www.website.nl/spel.ini' enz.

Scripts gebruiken
De scripts zijn voor Versie 1 en voor Versie 2 van de auto-updater gelijk.

Maak obj_update aan.

GM123 Create - Zet in het create event:
GML:
update_create(naam,versie)
Bij 'naam' moet je de naam van je spel invullen.
Bij 'versie' moet je de versie van je spel invullen. Als je versie bijv versie1 is kan je invullen: 'versie1' of 'V1' of '1' of iets anders, je kan ook bijvoorbeeld 'bta' invullen als je spel een bta versie is.
Als je bij spel: 'voorbeeldspel' invult en bij versie: 'versie1' dan moet de exe de naam: 'voorbeeldspel (versie1).exe' hebben.

GM126 Step - Zet in de step event:
GML:
update_step()

GM125 Alarm 0 - Zet in het alarm0 event:
GML:
update_alarm0(locatie,afsluittijd,wachttijd)
Bij locatie moet je de link naar je ini file invullen.
Bij afsluittijd moet je het aantal stappen invullen voordat spel wordt afgesloten als de nieuwe versie opgestart wordt, zodat de speler de tekst 'Nieuwe versie wordt opgestart' kan zien.
Bij wachttijd moet je het aantal stappen invullen voordat spel verdergaat als je de nieuwste versie hebt. Bijvoorbeeld naar een volgende room gaan of obj_update verwijderen.

GM125 Alarm 1 - Zet in het alarm1 event:
GML:
game_end()

GM125 Alarm 2 - In het alarm2 event kan je verschillende dingen invullen:
1. Als je obj_update in de eerste room hebt staan en je naar het hoofdmenu wilt moet je deze code gebruiken:
GML:
room_goto(hoofdmenu)
Vul wel de naam van de room van je hoofdmenu in.
2. Als je obj_update in het hoofdmenu hebt staan moet je deze code gebruiken:
GML:
instance_destroy()
Om ervoor te zorgen dat acties van het hoofdmenu niet uitgevoerd worden (zoals klikken op knoppen of keuzes selecteren met pijltjestoetsen of uitkiezen met bijv enter) moet je deze code in de bestaande object(en) invullen:
GML:
if ! instance_exists(obj_update)
    {
    //actions
    }

 GM131 Draw - Zet in het draw event:
GML:
update_draw(plaatje boven,kleur boven,plaatje onder,kleur onder,kleur rand boven,kleur rand onder,tekstkleur boven,tekstkleur onder,backcolor,mincolor,maxcolor,border)
Je ziet steeds boven en onder staan. Op het plaatje hieronder zie je 2 vlakken. In het bovenste vlak staat 'Auto-updater' met de versie erachter. In het onderste vlak staat wat er gebeurt op dat moment.



Het meeste spreekt voor zich, maar ik leg er toch een paar uit:
Bij plaatje boven/onder vul je 1 in als je een plaatje wilt gebruiken, anders 0. Je moet wel spr_boven of spr_onder aanmaken.
Bij kleur rand boven/onder vul je een kleur voor een rand in. Als je -1 invult krijg je geen rand.
Bij backcolor vul je de kleur in voor de achtergrondkleur van de download progress bar. Als je -1 invult is er geen achtergrond.
Bij mincolor vul je de minimale kleur in van de download progress bar (bij 0%)
Bij maxcolor vul je de maximale kleur in van de download progress bar (bij 100%)
Bij border vul je 1 in als je een rand wilt om de download progress bar, anders 0.

Auto-updater ontwerper
Je kan die code invullen als je precies weet wat je wilt, weet je dat niet dan zou je elke keer iets anders in moeten vullen en het spel opnieuw op moeten starten. Dat is een heel gedoe. Daarom heb ik een auto-updater ontwerper gemaakt. Met deze tool kan je je auto-updater ontwerpen zodat je de code gewoon in het spel kan plakken. Hier kan je deze tool downloaden: Download

Credits
Credits geven is verplicht, want ik heb er lang aan gewerkt. Je kan 'Naud1234' of 'Naud van Dalen' in de credits zetten. Kijk maar wat het beste past bij de rest van je credits (bijvoorbeeld alleen gebruikersnamen van game-maker.nl of echte namen).
Als je een spel maakt met mijn auto-updater erin en het spel staat online, kan je me een persoonlijk bericht sturen dat je mijn auto-updater gebruikt. Het is niet verplicht, maar dan weet ik tenminste wie mijn auto-updater gebruikt voor welke spellen. Anders moet ik maar raden of iemand mijn auto-updater gebruikt. Tong Ik start je spel dan op om te kijken hoe je de auto-updater hebt ingesteld (design, maar misschien ook extra features). Ik speel je spel daarna gewoon verder, totdat ik geen zin meer heb en daarna zet ik een reactie in je topic. Dus we hebben er dan allebei voordeel van.  Blij

« Laatste verandering: 27 Februari 2011, 11:56:11 door Naud1234 »

Naar boven Gelogd

Maarten Baert
Forumbeheerder


Offline Offline

Berichten: 4942

Gelieve quote te gebruiken als je PMs beantwoordt.


WWW
« Antwoord #1 Gepost op: 7 Januari 2010, 20:40:03 »

Het ziet er heel handig uit. Wat gebeurt er eigenlijk met het gedownloade bestand? Wordt dat automatisch opgestart? En wordt het oude spel automatisch verwijderd? Is er ook ondersteuning voor externe bestanden?


Naar boven Gelogd

Naud1234
Gebruiker


Offline Offline

Berichten: 715


« Antwoord #2 Gepost op: 8 Januari 2010, 15:00:20 »

Het ziet er heel handig uit. Wat gebeurt er eigenlijk met het gedownloade bestand? Wordt dat automatisch opgestart? En wordt het oude spel automatisch verwijderd? Is er ook ondersteuning voor externe bestanden?
Als het downloaden is voltooid, wordt de nieuwe versie opgestart en zie je de tekst 'Nieuwe versie wordt opgestart' en na de afsluittijd die je ingesteld hebt wordt het spel afgesloten. Je moet die tijd niet te lang maken, want als de nieuwe versie is opgestart wordt de oude versie verwijderd, maar dan moet de oude versie wel al afgesloten zijn. Tong


Naar boven Gelogd

TimVN
Gebruiker


Offline Offline

Berichten: 5544


« Antwoord #3 Gepost op: 8 Januari 2010, 15:22:54 »

Mooi gedaan!

Ik heb momenteel dat ie alleen de benodigde bestanden download, en die laad ik in bij het opstarten.

Hoe verwijder je het oude bestand?

-EDIT-

file_delete, moest het zelf ook gebruiken >.<

« Laatste verandering: 8 Januari 2010, 17:56:49 door G-maker-T »
Naar boven Gelogd

djrune
Gebruiker


Offline Offline

Berichten: 173

www.f-games.be


WWW
« Antwoord #4 Gepost op: 8 Januari 2010, 16:13:10 »

Leuk gedaan!
Ik ga het zeker gebruiken in de de MyFarm reeks (http://www.game-maker.nl/forums/topic,47996.0)

Moeten er cred's in?




"Ik heb een groot probleem. Een vriend van mij heeft een screensaver op mijn computer gezet, maar iedere keer dat ik de muis beweeg, gaat hij weg."
Naar boven Gelogd

Naud1234
Gebruiker


Offline Offline

Berichten: 715


« Antwoord #5 Gepost op: 8 Januari 2010, 22:20:51 »

Leuk gedaan!
Ik ga het zeker gebruiken in de de MyFarm reeks (http://www.game-maker.nl/forums/topic,47996.0)

Moeten er cred's in?

Leuk dat je mijn auto-updater in je spel gebruikt! Blij Ik kijk uit naar het design en hoe je het in je spel hebt verwerkt.

Zet er maar credits in, ik heb er best lang aan gewerkt. Tong


Naar boven Gelogd

djrune
Gebruiker


Offline Offline

Berichten: 173

www.f-games.be


WWW
« Antwoord #6 Gepost op: 9 Januari 2010, 10:58:17 »

Leuk dat je mijn auto-updater in je spel gebruikt! Blij Ik kijk uit naar het design en hoe je het in je spel hebt verwerkt.

Zet er maar credits in, ik heb er best lang aan gewerkt. Tong
Ja,ok, maar ik krijg steeds een error over het script alarm0 ofso, ik heb al vanalles geprobeerd, niets werk (regel 15, teken27)




"Ik heb een groot probleem. Een vriend van mij heeft een screensaver op mijn computer gezet, maar iedere keer dat ik de muis beweeg, gaat hij weg."
Naar boven Gelogd

Naud1234
Gebruiker


Offline Offline

Berichten: 715


« Antwoord #7 Gepost op: 9 Januari 2010, 12:05:11 »

Ja,ok, maar ik krijg steeds een error over het script alarm0 ofso, ik heb al vanalles geprobeerd, niets werk (regel 15, teken27)

Dat is raar, ik heb een voorbeeldspel gemaakt en daar werkt het prima. Kijk even wat het verschil is tussen het voorbeeldspel en jouw spel.
Download

dit is regel 15:
GML:
if (!(iniversion = global.version))

Teken 27 is de 'v' van 'version'. Dus er moet iets mis zijn met version. Staat er dat version onbekend is? Eigenlijk zou je dan al veel eerder een error moeten krijgen.

Kopieer de error dan kan ik zien wat er mis is.

« Laatste verandering: 9 Januari 2010, 12:08:50 door Naud1234 »

Naar boven Gelogd

Gaming Power
Gebruiker


Offline Offline

Berichten: 928

Ga weer "Game Maker'en"!


WWW
« Antwoord #8 Gepost op: 9 Januari 2010, 18:35:14 »

Hey,

Mooi gemaakt! Gemoedelijk
Ga hem denk ik wel gebruiken in m'n programma's/games...

Heb alleen n probleem:
Ik kan ik die updater designer niks aanpassen. Twijfelachtig

Groeten,
Gaming Power


Groeten,
Gaming Power


Gaming Power - Since 5 Oktober 2008


Naar boven Gelogd

TimVN
Gebruiker


Offline Offline

Berichten: 5544


« Antwoord #9 Gepost op: 9 Januari 2010, 19:20:17 »

Je zou dit ook met netread+39dll kunnen doen maar dat boeit niet zo veel want het zijn evenveel dlls en 39dll heeft waarschijnlijk meer scripts heh Knipoog

Toch kan je met 39dll een auto-patcher maken, zo kan je bijvoorbeeld resources downloaden uit een database. Mijn patcher leest het updatebestand, kijkt wat je niet hebt, download wat je niet hebt.

Naar boven Gelogd

Naud1234
Gebruiker


Offline Offline

Berichten: 715


« Antwoord #10 Gepost op: 10 Januari 2010, 10:11:03 »

Je zou dit ook met netread+39dll kunnen doen maar dat boeit niet zo veel want het zijn evenveel dlls en 39dll heeft waarschijnlijk meer scripts heh Knipoog

Toch kan je met 39dll een auto-patcher maken, zo kan je bijvoorbeeld resources downloaden uit een database. Mijn patcher leest het updatebestand, kijkt wat je niet hebt, download wat je niet hebt.

Ik heb 39dll geprobeerd, maar ik vond de scripts te moeilijk. Volgens mij moest je vanalles instellen voordat je iets kon downloaden. Bij downloadmanager kan je
GML:
DM_Init
DM_CreateDownload(locatie van spel op internet,naam om op te slaan)//is een samenvoeging van 3 scripts die hetzelfde doen maar bij een fout precies kunnen vertellen waar het mis is gegaan.
DM_StartDownload(handle)//als je DM_CreateDownload voor het eerst gebruikt is handle: 1, de 2de keer 2 enz.
DM_GetProgress(handle)
DM_DownloadStatus(handle)
Dit zijn de enige scripts die ik ervoor gebruik. (Er zijn meer scripts in downloadmanager maar die heb ik verwijdert omdat ik alleen de scripts erin wil doen die gebruikt worden)
Ik gebruik ook download_file(locatie van spel op internet,naam om op te slaan) om de ini te downloaden want dan hoef ik niet te controleren of hij al klaar is met downloaden. Downloaddll.dll freezed het spel maar een ini file is toch heel klein.
Downloadmanager.dll laat het spel verdergaan omdat hij het bestand apart download. Dus moet je in de step event steeds kijken of hij klaar is met downloaden, en ook de progress. Dat is een beetje te veel werk om een ini file van 1 kb te downloaden.

Maar toch hangt mijn spel nu ineenkeer vast bij het controleren. Twijfelachtig Dat is nog nooit gebeurd! Ik heb wel internetverbinding maar toch hangt het spel. Twijfelachtig Met downloadmanager kan ik wel de status van de ini file controleren zodat ik weet dat hij het niet doet in plaats van dat het spel freezed en als het downloaden niet lukt vastloopt. Maar dan moet ik weer een extra alarm maken en extra variabelen.

Zo'n autopatcher zou je hier ook mee kunnen maken denk ik. Want in het ini bestand past alle informatie van de recourses.
Code:
[data]
version = versie...
location = http://www.easy-upload.nl/index.php/file/...
[recourses number]
1 = music_1.wav
2 = music_2.wav
3 = music_3.wav
4 = background_1.png
5 = background_2.png
[recourses url]
1 = http://www.easy-upload.nl/index.php/file/...
2 = http://www.easy-upload.nl/index.php/file/...
3 = http://www.easy-upload.nl/index.php/file/...
4 = http://www.easy-upload.nl/index.php/file/...
5 = http://www.easy-upload.nl/index.php/file/...
[recourses version]
1 = 2
2 = 2
3 = 3
4 = 5
5 = 3
Er wordt gekeken of een key onder de section 'recourses number' bestaat en als dat zo is wordt er gekeken of je dat bestand hebt. Als je dat bestand niet hebt dan wordt het gedownload vanaf een url die staat in de section 'recourses url'. Maar misschien is een background mooier gemaakt en staat hij erop met dezelfde naam en dan zou het spel die background niet downloaden omdat je die background al hebt. Daarom moet er ook een versie bij staan.

Het zou ook zo kunnen:
Code:
[data]
version = versie...
location = http://www.easy-upload.nl/index.php/file/...
[1]
name = music_1.wav
url = http://www.easy-upload.nl/index.php/file/...
version = 2
[2]
name = music_2.wav
url = http://www.easy-upload.nl/index.php/file/...
version = 2
[3]
name = music_3.wav
url = http://www.easy-upload.nl/index.php/file/...
version = 3
[4]
name = background_1.png
url = http://www.easy-upload.nl/index.php/file/...
version = 5
[5]
name = background_2.png
url = http://www.easy-upload.nl/index.php/file/...
version = 3
Hier is een recourse een section en staat de verschillende informatie verdeeld in keys. Dit is handiger als je een recourse wilt toevoegen, nu kan je een section toevoegen met name, url en version ipv bij de verschillende sections een nummer toevoegen.


Naar boven Gelogd

TimVN
Gebruiker


Offline Offline

Berichten: 5544


« Antwoord #11 Gepost op: 11 Januari 2010, 13:43:30 »

Ik lees eerst met netread de update-data uit mijn database, ik ga in een loopje checken welk bestand de speler wel of niet heeft, degene die diegene niet heeft worden gedownload. Je ziet hoeveel kb het is, welke file het is, een progress bar enz.
De updatedata bestaat uit links met tussen elke link een komma, de data eindigt op een , zodat het goed verloopt. Mocht een download niet bestaan, wordt dit ook aangegeven. De resterende data van het "mogelijke" item wordt ook gelezen en opgeslagen in het spel. (attack, defence, str, sta, dex, int lvlreq en uiteraard de naam.

link1,link2,link3,

Nadelen: Als je de bestandsnaam aanpast, denkt de patcher dat het bestand niet bestaat dus download hij het opnieuw, maar dat is de fout van de speler.

Je kan maximaal ongeveer 30.000 patch-bestanden uploaden.

Naar boven Gelogd

Naud1234
Gebruiker


Offline Offline

Berichten: 715


« Antwoord #12 Gepost op: 11 Januari 2010, 14:15:23 »

Ik lees eerst met netread de update-data uit mijn database, ik ga in een loopje checken welk bestand de speler wel of niet heeft, degene die diegene niet heeft worden gedownload. Je ziet hoeveel kb het is, welke file het is, een progress bar enz.
De updatedata bestaat uit links met tussen elke link een komma, de data eindigt op een , zodat het goed verloopt. Mocht een download niet bestaan, wordt dit ook aangegeven. De resterende data van het "mogelijke" item wordt ook gelezen en opgeslagen in het spel. (attack, defence, str, sta, dex, int lvlreq en uiteraard de naam.

link1,link2,link3,

Nadelen: Als je de bestandsnaam aanpast, denkt de patcher dat het bestand niet bestaat dus download hij het opnieuw, maar dat is de fout van de speler.

Je kan maximaal ongeveer 30.000 patch-bestanden uploaden.


Je bedoeld dat je extra items in je database kan zetten zodat de speler die items in het spel kan gebruiken. Waar sla je de informatie van een item in op? Want een spel blijft altijd hetzelfde totdat je het spel zelf update. Sla je het op in een ini file? Of ook in een database? Gebruik je dit in een online spel?


Naar boven Gelogd

TimVN
Gebruiker


Offline Offline

Berichten: 5544


« Antwoord #13 Gepost op: 11 Januari 2010, 14:22:57 »

Dit is inderdaad een online spel, de item informatie wordt in de database in een text bestand gezet, de client leest deze informatie. Je hebt bijvoorbeeld een link naar een plaatje: www.mijnhost.nl/plaatje.png , dan leest de client de volgende link: www.mijnhost.nl/plaatje.png.txt. Hierdoor kan ik de goede informatie bij het goede item zetten.

Naar boven Gelogd

jaapi
Gebruiker


Offline Offline

Berichten: 607

http://realonligames.110mb.com/


WWW
« Antwoord #14 Gepost op: 29 Januari 2010, 14:06:13 »

word de oude versie ook automatish verwijderd. zo niet is er ook een manier voor dat dat gebeurt wan die van mij is online


Naar boven Gelogd

Advertenties
« vorige volgende »
Pagina's: [1] 2 3 ... 7
Print


Topic Informatie
0 geregistreerde leden en 1 gast bekijken dit topic.

Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
www.game-maker.nl © 2003-2019 Nederlandse Game Maker Community