Questa non vuole essere una guida vera e propria, ma più una piccola raccolta di fix e modifiche che ho fatto nel tempo, da aggiungere ai vari cloni che nascono ogni giorno su questo forum.
Perciò prendetela come semplice riferimento per chi si sta cimentando per la prima volta sulla creazione di un Retrò di Travian.
Importante... versioni di retrò ce ne sono tantissime in giro, ma più o meno derivano tutte da uno stesso ceppo, quindi questi fix/modifiche che vi posterò al 90% vanno bene per tutti i retrò in circolazione.
Con calma inserirò molti altri fix e correzioni, se li metto tutti adesso poi vi annoiate.
Errore Duplicate key
Causa:
Errore dovuto, come dice la descrizione, alla duplicazione di una chiave (indice) nel database del game. Questo errore compare perchè il codice tenta di inserire un valore già esistente nella tabella s1_vdata. Questa tabella è quella che contiene tutti i parametri dei villaggi del server. Praticamente viene inviato al database una richiesta di creazione di un villaggio che già esiste, e quindi il server va in errore poichè non è ammesso che un villaggio abbia come indice di riferimento, che si trova nel campo "wref" un valore già esistente.
Soluzione:
Per adesso non esiste un vero fix che corregga per sempre il problema ma esistono varie procedure che permettono di far ripartire il game.
Per i più bravi
aprite PhpMyAdmin del vostro server, andate nella tabella s1_vdata (nelca so aveste cambiato prefisso s1_, mettete il vostro) premete il pulsate SQL e inserite questo codice:
SELECT * FROM `s1_vdata` WHERE `wref`=XXXX (al poste delle XXXX mettete il numero della chiave che genere l'errore)
verrà visualizzata una sola riga, selezionatela e cancellatela tutta. Ripetete se necessario più volte la procedura fin quando il server non smetterà di dare l'errore.
Per i meno bravi
dovete creare due file:
fix_duplicate.php
inserite questo codice:
poi create questo file:
fix_duplicate_key.php
e inserite questo codice:
Fatto questo, copiate entrambi i file nella root del vostro game, quando comparirà il messaggio di errore del DUPLICATE KEY, non dovete far altro che richiamare il primo file fix_duplicate.php dalla barra degli indirizzi del vostro browser, inserire il numero della key da cancellare e premere ok.
tutto qui.
Errore Warning: Cannot modify header information - headers already sent by (output started at
Causa:
Errore dovuto, come da descrizione, alla chiamata della funzione header() dopo un output HTML o PHP (anche righe o spazi vuoti). E' un errore comune leggere files con funzioni include(), o require() che possano emettere in output spazi o linee vuote prima di una chiamata della funzione header(). Lo stesso problema esiste nell'utilizzare file PHP/HTML.
Soluzione:
I fix possibili sono due... il primo più lungo e macchino consiste nel rileggere il codice di tutte le pagine richiamate da quella che emette l'errore, e andare a cancellare materialmente tutte le righe vuote che ci sono all'inizio del codice. é un lavoro lungo ma una volta corretto funziona tutto alla perfezione.
La seconda soluzione... è la più semplice, ma ovviamente mette un pò sotto pressione il server.
Andate nella pagina che ha generato l'errore, e all'inzio del codice PHP che trovate, subito dopo l'apertura dello script <?php, inserite questo comando:
ob_start();
Questo comando, praticamente utilizza la memoria del server per "creare la pagina da visualizzare" prima di inviarla al browser eliminando così i possibili spazi vuoti che potrebbero generare l'errore.
Fatto questa aggiunta, salvate il file e avrete fixato l'errore.
Errore Warning: include(../GameEngine/config.php) [function.include]: failed to open stream: No such file or directory
Causa:
Errore dovuto, come da descrizione, alla richiesta della funzione php include() non andata a buon fine di "inclusione" di un file non trovato.
Soluzione:
A meno che non creiate una gestione degli errori con le funzioni try/catch, dovete necessariamente aprire la pagina che ha generato l'errore di inclusione, trovare il comando include() e modificare il percorso del file da includere, in questo caso config.php.
Di solito basta aggiungere o togliere i "../ " per risolvere il problema, praticamente dipende dai livelli di sottocartelle in cui si trova la pagina che richiama il file da includere. Quindi non vi resta che fare delle prove tipo:
.../../GameEngine/config.php oppure GameEngine/config.php
e risolverete il problema.
Localizzare i messaggi di in arrivo, cioè aggiustare l'orario dei messaggi.
aprite il file Generator.php (GameEngine/Generator.php)
cercate questo codice:
andate a questa linea:
e al posto del 7 mettete il fuso orario che preferite, per esempio se i messaggi sono di 7 ore avanti al nostro orario, mettete 0 e avrete corretto immediatamente tutti gli orari dei messaggi inviati/ricevuti.
Localizzare il server, cioè aggiustare l'orario del server.
aprite il file config.php (GameEngine/config.php)
all'inizio, e subito dopo i commenti, inserite questo codice per l'italia:
date_default_timezone_set('Europe/Rome');
ovviamente se volete cambiare time zone, tipo localizzare il server per la germania al posto di Europe/Rome mettete Europe/Berlin.
Consultate il manuale PHP a questo link
Perciò prendetela come semplice riferimento per chi si sta cimentando per la prima volta sulla creazione di un Retrò di Travian.
Importante... versioni di retrò ce ne sono tantissime in giro, ma più o meno derivano tutte da uno stesso ceppo, quindi questi fix/modifiche che vi posterò al 90% vanno bene per tutti i retrò in circolazione.
Con calma inserirò molti altri fix e correzioni, se li metto tutti adesso poi vi annoiate.
Alcuni messaggi di Errori frequenti.
Errore Duplicate key
Causa:
Errore dovuto, come dice la descrizione, alla duplicazione di una chiave (indice) nel database del game. Questo errore compare perchè il codice tenta di inserire un valore già esistente nella tabella s1_vdata. Questa tabella è quella che contiene tutti i parametri dei villaggi del server. Praticamente viene inviato al database una richiesta di creazione di un villaggio che già esiste, e quindi il server va in errore poichè non è ammesso che un villaggio abbia come indice di riferimento, che si trova nel campo "wref" un valore già esistente.
Soluzione:
Per adesso non esiste un vero fix che corregga per sempre il problema ma esistono varie procedure che permettono di far ripartire il game.
Per i più bravi
aprite PhpMyAdmin del vostro server, andate nella tabella s1_vdata (nelca so aveste cambiato prefisso s1_, mettete il vostro) premete il pulsate SQL e inserite questo codice:
SELECT * FROM `s1_vdata` WHERE `wref`=XXXX (al poste delle XXXX mettete il numero della chiave che genere l'errore)
verrà visualizzata una sola riga, selezionatela e cancellatela tutta. Ripetete se necessario più volte la procedura fin quando il server non smetterà di dare l'errore.
Per i meno bravi
dovete creare due file:
fix_duplicate.php
inserite questo codice:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
poi create questo file:
fix_duplicate_key.php
e inserite questo codice:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Fatto questo, copiate entrambi i file nella root del vostro game, quando comparirà il messaggio di errore del DUPLICATE KEY, non dovete far altro che richiamare il primo file fix_duplicate.php dalla barra degli indirizzi del vostro browser, inserire il numero della key da cancellare e premere ok.
tutto qui.
Errore Warning: Cannot modify header information - headers already sent by (output started at
Causa:
Errore dovuto, come da descrizione, alla chiamata della funzione header() dopo un output HTML o PHP (anche righe o spazi vuoti). E' un errore comune leggere files con funzioni include(), o require() che possano emettere in output spazi o linee vuote prima di una chiamata della funzione header(). Lo stesso problema esiste nell'utilizzare file PHP/HTML.
Soluzione:
I fix possibili sono due... il primo più lungo e macchino consiste nel rileggere il codice di tutte le pagine richiamate da quella che emette l'errore, e andare a cancellare materialmente tutte le righe vuote che ci sono all'inizio del codice. é un lavoro lungo ma una volta corretto funziona tutto alla perfezione.
La seconda soluzione... è la più semplice, ma ovviamente mette un pò sotto pressione il server.
Andate nella pagina che ha generato l'errore, e all'inzio del codice PHP che trovate, subito dopo l'apertura dello script <?php, inserite questo comando:
ob_start();
Questo comando, praticamente utilizza la memoria del server per "creare la pagina da visualizzare" prima di inviarla al browser eliminando così i possibili spazi vuoti che potrebbero generare l'errore.
Fatto questa aggiunta, salvate il file e avrete fixato l'errore.
Errore Warning: include(../GameEngine/config.php) [function.include]: failed to open stream: No such file or directory
Causa:
Errore dovuto, come da descrizione, alla richiesta della funzione php include() non andata a buon fine di "inclusione" di un file non trovato.
Soluzione:
A meno che non creiate una gestione degli errori con le funzioni try/catch, dovete necessariamente aprire la pagina che ha generato l'errore di inclusione, trovare il comando include() e modificare il percorso del file da includere, in questo caso config.php.
Di solito basta aggiungere o togliere i "../ " per risolvere il problema, praticamente dipende dai livelli di sottocartelle in cui si trova la pagina che richiama il file da includere. Quindi non vi resta che fare delle prove tipo:
.../../GameEngine/config.php oppure GameEngine/config.php
e risolverete il problema.
Piccoli fix per il retrò.
Localizzare i messaggi di in arrivo, cioè aggiustare l'orario dei messaggi.
aprite il file Generator.php (GameEngine/Generator.php)
cercate questo codice:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
andate a questa linea:
PHP:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
e al posto del 7 mettete il fuso orario che preferite, per esempio se i messaggi sono di 7 ore avanti al nostro orario, mettete 0 e avrete corretto immediatamente tutti gli orari dei messaggi inviati/ricevuti.
Localizzare il server, cioè aggiustare l'orario del server.
aprite il file config.php (GameEngine/config.php)
all'inizio, e subito dopo i commenti, inserite questo codice per l'italia:
date_default_timezone_set('Europe/Rome');
ovviamente se volete cambiare time zone, tipo localizzare il server per la germania al posto di Europe/Rome mettete Europe/Berlin.
Consultate il manuale PHP a questo link
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
per avere tutti i TIME ZONE supportati.