Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Query Automatica
Forum - PHP - Query Automatica

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:25
Martedì, 20/10/2015
Salve ragazzi.

Attualmente sfrutto MyBB.

un forum software a cui sto lavorando ad un progetto abbastanza ambizioso.
sia con l'aiuto del WebGL che con il flash.

In pratica è un gioco basato su forum dove ogni persona può interagire con l'altra ovviamente
e compiere alcune azioni come acquisto di oggetti, negozio, etc. direttamente nei post del forum.

Andando direttamente al mio problema, non sò se siete ferrati negli argomenti Fantasy, ma voglio descrivervi
ciò che voglio fare.


Gli utenti, hanno un proprio inventario personale, dove ognuno può accederci dal suo profilo.

http://s10.postimg.org/o4h2tqnrd/Cattura.png


Alcuni oggetti sono Craftabili, ovvero che mischiando i vari oggetti si ottiene uno nuovo.
Un esempio e come mischiare Latte e Caffè per ottenere un cappuccino. (Spero di essere stato chiaro )

Ora, vorrei che quando un utente mescoli dei vari ingredienti, venga generato un tempo
di cui dipende dall'oggetto.

tipo [Erba] + 5 sec.
      [Legno] + 10 sec.
      [Ferro] + 50 sec.

----

65 sec. totali


Vorrei fare in modo che quando l'utente inizi la mescola, anche chiudendo il Browser il tempo continuasse a scorrere
(Non sò ne dove e come si possa fare questo )

Terminato il tempo, l'oggetto viene creato ( In questo caso viene eseguita una query sul database)

Sapete indicarmi un modo per fare ciò?

Con il Jquery o Javascript il Browser deve rimanere aperto altrimenti il conto alla rovescia si interrompe.
Come potrei fare?



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:02
Martedì, 20/10/2015
Devi farlo sul server, non sul lato client (anche perchè sul lato client qualcuno potrebbe barare!).


Il mio blog: https://piero.dev
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:08
Martedì, 20/10/2015
Sul server piero?

Uhm non sò proprio da dove iniziare, anche perché non ho un server ma un host dedicato semplicemente.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 16:38
Martedì, 20/10/2015
Potresti creare una tabella di craft, con id dell'oggetto, dell'utente e momento in cui l'oggetto sara completato (tempo di inizio più i secondi necessari)
Con controlli gestiti dal client quando l'oggetto dovrebbe essere finito ricarichi le informazioni e lasci al server il compito di controllare ed eliminare il craft dalla relativa tabella e inoltre aggiungere il nuovo elemento all'inventario. Questo è il classico sistema implementato nei browsergame.

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 16:44
Martedì, 20/10/2015
Dipende dalla piattaforma che usi lato server. Non ho ben capito che ruolo ha MyBB, stai sviluppando il gioco basandoti su quell'engine per forum? In tal caso immagino tu stia usando PHP. Inoltre dipende da come vuoi notificare l'utente del completamento della procedura. Se ho capito bene cosa intendi, comunque, a grandi linee io farei così:
Quando l'utente lancia il crafting parte una richiesta ajax dalla pagina client ad una sorta di API che implementi sul server, ad es /craft.php?obj=cappuccino; questa deve leggere dal database l'inventario dell'utente, e prendere "caffè" e "latte" decrementandoli della quantità necessaria (e restituendo errore se non ce ne sono a sufficienza); fatto questo aggiunge un record ad una tabella, ad es. operazioniCrafting, che tiene traccia dell'utente che ha avviato l'operazione, l'oggetto richiesto, e soprattutto l'orario/timestamp di inizio dell'operazione. Il client, poi, manda man mano richieste ajax ad una pagina del tipo /craftingStatus.php che deve elencare ogni crafting dell'utente e calcolarne il tempo rimanente (basandosi sul timestamp attuale, quello salvato nel DB e la durata dell'operazione); in questo modo sul client l'utente può vedere quanto manca per ogni operazione in sospeso. Questa pagina, inoltre, quando il tempo restante per un crafting diventa 0, inserisce l'oggetto nell'inventario del giocatore nel DB.
In questo modo se l'utente chiude il browser e poi lo riapre, vedrà comunque quanto tempo manca, e se il tempo è finito vedrà l'oggetto nell'inventario. Se l'oggetto deve finire nell'inventario anche se l'utente non è connesso, questa parte si potrebbe spostare in un cron job che ogni tot secondi (pochi) controlla se è passato più del tempo necessario per ogni operazione e in caso affermativo rimuove il record dalla tabella del crafting e aggiorna l'inventario del giocatore.

P.S. all'inizio ho detto "dipende dalla piattaforma" perchè per qualche motivo avevo in mente nodejs. Con un sistema simile, si potrebbe risparmiare l'uso dei cron perchè invece che scrivere "pagine" si scrive una sorta di daemon che funge da server, quindi può effettuare operazioni in continuazione anche se non ci sono richieste.

Ultima modifica effettuata da GN il 20/10/2015 alle 16:46
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:06
Martedì, 20/10/2015
Due parole riferite a quanto scritto da GN.
Io proponevo di registrare il momento in cui il craft è terminato per poter calcolare solo in fase di inserimento il tempo di completamente, e non ogni volta che ne viene fatta richiesta al server, cosi da poter effettuare un semplice confronto del tipo, leggo il valore e verifico se è passato. Puo sembrare una banalità ma questa operazione su un server molto numeroso potrebbe portare via parecchi secondi ad ogni caricamento.
Inoltre lascerei perdere i crono tab e mi affiderei più a un principio fondamentale di natura "Se un albero cade nel bosco e nessuno puo percepirlo è veramente caduto?!" all'atto pratico se nessuno richiede l'inventario è inutile che il prodotto venga trascritto in esso, nel momento che qualcuno o qualcosa richiedere l'inventario aggiornato si andrà a controllare se deve essere integrato con elementi della tabella di craft.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:14
Martedì, 20/10/2015
Si credo che il metodo di Roby sia più performante e veloce da fare.
Userò sicuramente il tuo metodo.

Mentre ringrazio a tutti per i consigli ricevuti.
Li terrò sicuramente a mente Grazie mille


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 17:21
Martedì, 20/10/2015
Testo quotato

Postato originariamente da Roby94:
Inoltre lascerei perdere i crono tab e mi affiderei più a un principio fondamentale di natura "Se un albero cade nel bosco e nessuno puo percepirlo è veramente caduto?!" all'atto pratico se nessuno richiede l'inventario è inutile che il prodotto venga trascritto in esso


Ci avevo pensato anch'io infatti la cosa dei cron mi è venuta in mente dopo, perchè non sapendo dettagli sul gioco ho considerato che l'inventario potesse anche essere pubblico o comunque visibile anche da altri giocatori.
Pensandoci meglio però in effetti, anche in questo caso si potrebbe risparmiare l'uso dei crontab perchè quando chiunque richiede l'inventario del giocatore X oltre che la tabella degli oggetti per quel giocatore si guarda anche la tabella delle sue operazioni di crafting, filtrando per quelle completate.

Ultima modifica effettuata da GN il 20/10/2015 alle 17:22
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:27
Martedì, 20/10/2015
Testo quotato

Postato originariamente da GN:
Pensandoci meglio però in effetti, anche in questo caso si potrebbe risparmiare l'uso dei crontab perchè quando chiunque richiede l'inventario del giocatore X oltre che la tabella degli oggetti per quel giocatore si guarda anche la tabella delle sue operazioni di crafting, filtrando per quelle completate.


Assolutamente, implementata una classe inventario potrebbe essere benisimo riutilizzata sia per un interfaccia pubblica che privata, manentenedo i medesimi metodi tra cui la gestione dei crafting. I crono sono utili ma molte volte o non sono disponibili o a pagamento o semplicemente se ne puo fare a meno con sostanziali risparmi di risorse.
Io per esempio (e credo come molti) sfruttavo le richieste degli utenti alla pagina di intestazione per la connessione al DB. Quando veniva richiesta confrontavo il valore temporale corrente con quello dell'ultima operazione e se era trascorso un tempo prestabilito eseguivo il tab, lo so non è un metodo correttissimo ma in caso di un buon afflusso di persone sul proprio sito è quanto meno adoperabile.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo