Newsgroup: it.comp.www.php
Titolo: Variabili in mmorpg browser-based

Quali sono le modalità per creare delle variabili create settate 
dall'utente che successivamente si autoaggiornano all'interno del server 
secondo un certa logica anche dopo il logout dello stesso?
Esempio pratico: la gestione interna delle risorse in un mmorpg 
browser-based, che in automatico modificano i propri valori.
-- 
Minnasan, sayonara
Nicolò Nyo Armato
Nyo, The One Who Never Shutdown,
A Little, Just For Brain Processing Update
Who can stop me? Love Virus, ne? Hai yo! ^_^
Zai Jian, Sweetie.


automatico sti corni
cmq hai 2 opzioni
cookies
session
(con mysql)


 secondo un certa logica anche dopo il logout dello stesso?
Registrarle in un DB, associate all'utente, ed avere un processo che
gira costantemente (probabilmente sul server) che periodicamente va a
prenderle dal DB e le aggiorna (secondo una certa logica).
Bye.

 (con mysql)
Intanto inizio col dire che sono un computer musician/creative designer 
e non un webdeveloper con delle curiosità :D
Forse mi sono spiegato male, io non parlo di modifiche eseguite quando 
l'utente è loggato, ma modifiche che vengono costantemente eseguite 
anche se l'utente non si logga da mesi, quindi cookies e session non 
sono fondamentali per il ragionamento.
Nei mondi persistenti creati nei server tante variabili vengono 
costantemente modificate nel tempo in base a dei criteri impostati che 
vengono comunque variati in base agli eventi che accadono nel gioco, ma 
parliamo di programmi creati ad hoc che girano sui server, adesso per 
fare qualcosa del genere browser-based, un mio amico mi ha parlato di 
usare i crontab per variare le variabili timerizzando certe esecuzioni, 
ci sono alternative? Per questo tipo di applicazioni è possibile far uso 
di applicazioni residenti nel server che si interfaccino allo script ed 
al db in qualche modo?
Ripeto non mi interessa il discorso sessioni, cookies, cioè di quando 
l'utente è online (quello l'ho compreso già da prima), ma la gestione 
interna stile real-time delle variabili del gioco, quindi quello che si 
svolge dentro al server anche quando i giocatori sono offline da 
millenni :D, quindi.
Se conoscete, qualche link di script opensource che svolga il compito o 
altre risorse online, in modo da poter capire meglio il funzionamento.
Inoltre, c'è qualcuno che programma in qualche team di giochi 
browser-based, ed in particolar modo rpg/strategici?


Alessandro Pellizzari ha scritto:

Ecco, allora non mi ero espresso malaccio se te lo hai capito :D
Ora il punto è questo, non pretendo che qualcuno qui mi spieghi come 
funziona il tutto nei dettagli (ci mancherebbe), ma che magari mi 
rimandi a link di risorse che parlino di queste situazioni con esempi 
pratici, o magari progetti opensource con incorporata questa gestione?
Insomma, sto processo che gira costantemente ed internamente, oserei 
direi un silent processing, da cosa è composto e come si muove?


 direi un silent processing, da cosa è composto e come si muove?
E` composto come vuoi tu. Per esempio, se hai un server con Linux/Unix e
puoi "tocchignare" crontab, puoi fare uno script in php che:
- apre il DB
- legge i dati giocatore per giocatore
- li elabora
- li rimette nel DB
- chiude tutto
A quel punto lo metti sul web (protetto da password o come vuoi) e lo
richiami via cron con lynx (per esempio) ogni 10 minuti (o ogni ora, in
base alle tue esigenze).
Non sara` ne` piu` ne` meno che una pagina web come le altre, solo che
non fa output a video (ma magari ti manda una mail per segnalarti
problemi).
Altrimenti, se hai accesso totale al server, puoi farla in qualsiasi
linguaggio, con lo schemino di cui sopra, ma con in piu` un suo timer
interno (al posto di cron).
Se non hai accesso al server ti tocca fidarti della tua connessione, e
lasciare il tuo PC acceso 24h/24, sempre in cron, ma che fa richieste al
server remoto.
Bye.

 interno (al posto di cron).
Infatti, stile mmorpg server.
Comunque mi interesserebbe capire la dinamica interna di giochi come 
questo: 
www.ogame.it
 (magari qualcuno ci ha già giocato)


 settate su valore nullo e statico?
Dipende da un'infinita` di fattori, ma comunque 2 volte al secondo per
me e` eccessivo in un gioco via web.
Credo comunque che con 100.000 utenti, ognuno con (metto a caso) 1000
"oggetti" da aggiornare nel DB, ti serva perlomeno un biprocessore 3 GHz
con 4-8 Gb di RAM e magari anche 7-8 dischi in RAID 5 su SCSI Ultra320.
Anche il doppio se lo stesso server deve tenere anche il sito e quindi i
collegamenti degli utenti.
Bye.

 collegamenti degli utenti.
...in effetti.
Thx for your advice.



qui devi studiare quello che vuoi, devi _analizzare il prpblema_


svolge dentro al server anche quando i giocatori sono offline
Sei sicuro che tutte queste informazioni debbano veramente essere
aggiornate (anche) all'interno dei dati dei giocatori?
In teoria potresti avere i dati dei giocatori che riguardano solo la
loro definizione (stats, skills, inventario, posizione, etc).
Credo dipenda molto dalla logica con cui e' costruito il gioco e da
come lo si sviluppi. Non sono un esperto di implementazione
MUD/MMORPG, ma da alcune docs che avevo letto, molti server MUD non
gestiscono aggiornamenti costanti anche nei files dei player offline.
'bye

 schiavo
Ok, non mi sono spiegato neanche stavolta o non ho capito il tuo 
discorso? xD, la memorizzazione su db, il concetto di sessione non è un 
problema, il problema è aggiornare delle variabili continuamente senza 
l'intervento dell'utente, aka, mentre sei a spasso con la ragazza per i 
negozi e pc spento (dimentica la sessione quindi), il carbone che stai 
raccogliendo nella miniera attraverso quei poveretti col piccone 
continua senza interuzioni, ed anche se sei offline ad es. ogni 3 
secondi ti aggiorna la variabile di un carbone aggiunto, comunque è ok, 
ho già parlato con qualche amico programmatore dei cron ed ho capito la 
situazione. Più che altro il problema adesso sarebbe se c'è un metodo 
più efficace e veloce dei cron capire cosa utilizzare per lo sviluppo, 
quante variabili aggiornare, con che refresh oltre al dimensionare il 
discorso di utenti in game e iscritti per fase produttiva..., che db 
utilizzare mysql? postgre? Oracle? (insomma evitare nel caso di un buon 
successo, soprese!) es. una cosa è progettare un sistema con 
aggiornamento di 2000 variabili, refresh 2 secondi per 100, 1000 utenti, 
un'altra per 100.000 utenti ovviamente :D
Insomma tutto sta nel gestione azioni, attacchi, difese, 
immagazzinamento risorse, sviluppo magie etc etc...senza l'intervento di 
nessuno, programmando il tutto da pannello di controllo utente, dove 
l'utente conoscerà in qualsiasi momento quando si loggerà (visto che si 
aggiorna ogni tot secondi) tutta la situazione nel momento in cui si 
logga, con tutte le variabili aggiornate fino a quel momento.
Anyway, thanks :)


 gestiscono aggiornamenti costanti anche nei files dei player offline.
Diciamo che le variabili del giocatore nei mmorpg comuni quando offline, 
se non hanno particolarità che si aggiornano anche in assenza del 
giocatore non cambiano, mentre cambiano costantemente e soltanto le 
variabili del mondo persistente che gira sul server.
Negli strategici in tempo reale (quindi non a turni) il fattore 
aggiornamento delle variabili penso sia indispensabile, altrimenti non 
sarebbe in tempo reale, volendo nella sessione corrente si potrebbero 
gestire i dati no?, ma se l'utente fa il logout il calcolo delle risorse 
e degli upgrade programmati continua. E' vero come ho accennato diciamo 
che comunque alcuni mmorpg alla fine quando il giocatore si scollega 
memorizzano i dati e chi si è visto si è visto, niente scorre oltre, 
mentre nel mio caso un misto tra mmorpg epico-fantasy e strategico in 
tempo reale, dove si hanno risorse che aumentano di minuto in minuto 
anche se sei offline, questo non può andare, per non parlare di tutta 
una serie di features che ho in mente.
L'avrò detto in tutte le salse ormai :D
Comunque ho trovato il programmatore-supporto cosi certi problemi 
spinosi manco me li pongo, e mi concentro sugli aspetti che mi 
riguardano, anche se non voglio restare all'oscuro di niente :D
Fammi sapere se mi sfugge qualcosa, il caldo mi fa brutti scherzi, e mi 
sento sempre un schifo, spesso manco il condizionatore mi aiuta xD


 si le variabili in un db tramite i cronjob, hai alternative più performanti?
Un programma in C che gira sul server e si collega al DB tramite socket
Unix invece della TCP/IP e` sicuramente piu` veloce, ma anche piu`
complicato da scrivere.
Poi e` tutto un discorso di ottimizzazione del codice.
Puoi avere un algoritmo ottimo in Java che gira su una VM scritta in PHP
come modulo su un webserver scritto in python che e` piu` veloce di un
algoritmo pessimo scritto in assembler e sta tutto nella cache del
processore.
In ogni caso se tu sei il project manager di questo gioco, spetta a te
sapere cosa deve fare, e spetta a te decidere le strategie migliori.
Altrimenti fallo fare a qualcun'altro e offriti di fare solo il concept
designer.
Bye.

 designer.
Infatti io non sono il project manager (in campo videoludico non ho le 
competenze necessarie) ma farei da Lead Game/Graphic Designer se l'idea 
viene approvata poi dal grande capo :D
Anyway, thxsomuch


L'avrò detto in tutte le salse ormai :D
:-)
Just an idea:
Lato web mi sembra che ti interessi solo l'interfaccia utente, in
pratica il giocatore al posto di scaricarsi ed installare il client si
limita a collegarsi con un browser a web per poter giocare.
Presumo che il tutto girera' su un server dedicato (visto anche il
numero di possibili giocatori coinvolti) quindi potresti separare
l'interfaccia utente dal motore del gioco e realizzare quest'ultimo in
un linguaggio diverso da PHP mentre l'interfaccia con l'utento potra'
benissimo essere PHP+XHTML+Javascript.
Per il motore del gioco potresti usare C/C++ oppure se preferisci
usare scripts e non linguaggi compilati scriverlo in Perl. Non avrai
piu' nemmeno bisogno di cronjobs e di richiamare pagine PHP sul server
web per eseguire il motore del gioco.
A questo punto non ti rimane che definire come gestire questo engine,
per esempio, una cosa simpatica che ho visto nei MUD di tipo LPC e' la
possibilita' di scrivere/modificare  il codice del gioco senza dover
fermare il server, i players continuano a giocare mentre i coders
lavorano :-)
'bye