Aumentare Valore ogni ora
Aumentare Valore ogni ora postato il 17/08/2011 14:22:31 nel forum programmazione, open source e hosting
Salve a tutti,
vi scrivo ancora una volta perché non riesco ad andare avanti...
Sto tentando di modificare lo script "esp_up.php", che è possibile scaricare dalla sezione GDRCD, in modo tale che NON aumenti ogni 10min i punti esperienza dei presenti, bensì aumenti un'altro campo (i punti ferita dei PG) ogni 60min di un punto.
In sintesi, vorrei arrivare ad avere uno script che ogni ora aumenti di 1 punto un campo in database nella tabella Personaggio, se e soltanto se il valore nel campo è inferiore a 100.
Fin'ora ho modificato (e commentato) il codice in questo modo:
<?
$MySql = "SELECT UltimaEsp, (DATE_ADD(UltimaEsp, INTERVAL 1 MINUTE) < NOW()) AS Tempo FROM Personaggio WHERE Nome = '".pars($Login)."'"; //Seleziona Tempo ultima aggiunta PF
$Result = mysql_query($MySql);
$rs = mysql_fetch_array($Result);
$Tempo_ok = $rs['Tempo']; //Valorizza $Tempo_ok
$UltimaEsp = $rs['UltimaEsp']; //Valorizza UltimaEsp
$rs->close; //Chiude la query
$MySql = "SELECT PF WHERE Nome = '".pars($Login)."'"; // Seleziona $PF (che sono i Punti Ferita del PG)
$Result = mysql_query($MySql);
$rs = mysql_fetch_array($Result);
$PF = $rs['PF'];
$rs->close; //Chiude la query
if ($PF != 100) { //Controlla se i PF sono a 100 o meno. SE non lo sono, manda la query che aumenta di 1punto l'ora, se no, niente.
if ($Tempo_ok ==1) { //Controlla se è passato il tempo
$MySql = "UPDATE Personaggio SET PF = PF + '1' WHERE Nome = '".$Login."'"; //se sì Aumenta di 1 i PF
$Result = mysql_query($MySql);
$MySql = "UPDATE Personaggio SET UltimaEsp = NOW() WHERE Nome = '".$Login."'"; //Imposta a "ora" l'ultima data di aggiunta PG
$Result = mysql_query($MySql);
}
}
?>
Ora, a parte il codice che non ho ancora testato... ma ammesso che funzioni, come faccio a eseguirlo "autonomamente" senza che qualcuno debba eseguirlo di volta in volta? E come faccio a dirgli di selezionare TUTTI i PG in database e non solo quelli presenti al momento?
Grazie in anticipo ^^
Pagine → 1 2
17/08/2011 15:11:34 e modificato da darkside of breakfast il 17/08/2011 15:12:17
Scusami, non capisco il senso di selezionare l'ora dal database e fare tutti quei controlli.
Se devi fare un qualcosa che giri per TUTTI i pg del database a prescindere dal loro essere presenti, fai una crontab che ogni ora esegua uno script con una minuscola query che prende tutti i pg con pf < 100 e li aumenti (puoi farlo in una sola query o con un ciclo, se ti risulta più facile... tanto non credo che hai una enorme utenza e che tra questi saranno tantissimi i pg feriti).
Altrimenti, se vuoi farlo per i soli pg connessi, che mi sembra più logico, fai un minuscolo if sull'ora e se è esattamente a 0 minuti (es 12, 13, 14 spaccate) esegui la cosina sui pf, così ti togli di mezzo già una query. Ovviamente questo minuscolo if lo includi in un file che refresha ogni tanto di suo.
ps: ogni tanto ovvero maggiore di 60 sec, altrimenti c'è il rischio che la query si ripeta due volte all'ora perchè torna sempre nel minuto 00.
17/08/2011 17:21:07
Scusami, non capisco il senso di selezionare l'ora dal database e fare tutti quei controlli.
Se devi fare un qualcosa che giri per TUTTI i pg del database a prescindere dal loro essere presenti, fai una crontab che ogni ora esegua uno script con una minuscola query che prende tutti i pg con pf < 100 e li aumenti (puoi farlo in una sola query o con un ciclo, se ti risulta più facile...
La verità è che non sapevo nemmeno si potesse fare... e anzi, non so nemmeno cosa sia un crontab... Ora mi documento su google :-)
Grazie per la dritta^^
17/08/2011 17:42:49
Ecco fatto... trovato la gestione del crontab (chiamati cron jobs su pegaso hosting) ma non dico che sono punto e a capo...peggio perché la scritta:
Warning: You need to have a good knowledge of Linux commands before you can use cron jobs effectively. Check your script with your hosting administrator before adding a cron job.
Non promette affatto bene.
Ho "imparato" il PHP con non poca fatica mai comandi Linux sono tra l'arabo e l'ostrogoto per me.
La schermata che mi si presenta è questa:
Qualche idea su come impostare un incremento di +1 del campo "PF" nella Tabella "Personaggio" per ogni personaggio che abbia PF inferiori a 100?
17/08/2011 18:03:46
Devi creare uno script in PHP che esegua la query per tutti i pg.
Poi una volta che ce l'hai, nel cron job dici al server di eseguire quella pagina ogni x tempo inserendo nella linea del comando una cosa tipo questa:
/usr/bin/wget -O - -q http://miosito.it/miapagina.php >/dev/null 2>&1
Potresti fare una query che incrementa di 1 i punti di tutti coloro che non sono a 100 e farla eseguire ogni minuto.
Esiste un altro modo per fare questa cosa senza usare i cron job. Puoi fare eseguire una query ogni volta che una qualsiasi pagina del gdr pagina viene visitata. Invece di fare incrementare di 1, dovrai fare incrementare i punti della differenza tra NOW() e la data dell'ultima volta che gli sono stati alzati i punti. Quando non c'è nessuno che visita il gdr i punteggi non salgono, ma non appena qualcuno fa login o visita una pagina tutti i conteggi vengono aggiornati recuperando il tempo perso. Personalmente preferisco questa soluzione a quella del cronjob
17/08/2011 18:19:29
leoblacksoul ha scritto: Devi creare uno script in PHP che esegua la query per tutti i pg.
Poi una volta che ce l'hai, nel cron job dici al server di eseguire quella pagina ogni x tempo inserendo nella linea del comando una cosa tipo questa:
/usr/bin/wget -O - -q http://miosito.it/miapagina.php >/dev/null 2>&1
Potresti fare una query che incrementa di 1 i punti di tutti coloro che non sono a 100 e farla eseguire ogni minuto.
Esiste un altro modo per fare questa cosa senza usare i cron job. Puoi fare eseguire una query ogni volta che una qualsiasi pagina del gdr pagina viene visitata. Invece di fare incrementare di 1, dovrai fare incrementare i punti della differenza tra NOW() e la data dell'ultima volta che gli sono stati alzati i punti. Quando non c'è nessuno che visita il gdr i punteggi non salgono, ma non appena qualcuno fa login o visita una pagina tutti i conteggi vengono aggiornati recuperando il tempo perso. Personalmente preferisco questa soluzione a quella del cronjob
Intanto grazie per la stringa e per la spiegazione :-)
Credo che tenterò con il cron job per un semplice motivo. Nell'altro modo dovrei andare a salvarmi ogni "minuto" un dato in database (ovvero il NOW nella casella "data dell'ultima volta che gli sono stati alzati i punti") e questo per ogni PG.
Eseguire uno script, ogni tot di min/ore uguale per tutti e senza dover salvare altri dati in DB mi sembra più "snella" come soluzione :-)
17/08/2011 19:03:43
Scusate ma... ora mi sto impiccando, forse sto impazzendo ma...
Dal pannello di gestione del DB ho scritto questa query
UPDATE `Personaggio` SET `MaxMente` = `MaxMente` + '1' WHERE `MaxMente` < 100
E funziona...aggiorna tutti i PG che hanno maxmente < 100...E fin qui, tutto bene...
Ora sto scrivendo la paginetta in php, che poi vorrei far eseguire al cron job... Dovrebbe essere una cavolata... non mi da errori, ma quando apro la pagina test.php (inserendo www.miosito.it/test.php), i dati in DB non vengono modificati...
test.php contiene solamente:
<?php
$MySql = "UPDATE Personaggio SET MaxMente = 'MaxMente' + '1' WHERE MaxMente < '100'";
?>
Che cosa manca...?
17/08/2011 19:06:55
la chiamata mysql_query
17/08/2011 19:10:50
clemence ha scritto: la chiamata mysql_query
3 anni di Land...e ancora non so scrivere una query... che depressione.
ora ha funzionato...ma ha UPDATato la tabella inserendo a TUTTI quelli che non avevano MaxMente=100 -> MaxMente=1.
17/08/2011 19:28:29
Avevo messo male gli apici... mah... scusate per l'igonranza e grazie a tutti per il vostro aiuto :-)
17/08/2011 20:22:21 e modificato da sgc carter il 17/08/2011 20:56:46
Ahem.... scusate di nuovo...
Ora la parte php funziona... se apro direttamente
http://www.miosito.it/test.php
funziona...MA c'è qualche problema con il cron job... l'ho impostato seguendo il comando consigliato qualche post fa... ma niente... non vuole andare.
Ecco come ho impostato il cron job:
ed ecco il Job correttamente aggiunto... 
Ma ogni due minuti, non accade assolutamente nulla :-(
Dove sbaglio?
EDIT: Può dipendere dal path to php che ho trovato essere:
Paths and Directories include_path Windows: "path1;path2" c:phpincludes" .:/usr/lib/php:/usr/local/lib/php
?
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tiles Survive ↗
Exclusive Villa GdR ↗
CRSED: F.O.A.D. ↗
Imperion ↗
World of Warship ↗
Seconda Era ↗
The Coven ↗
Storie di Agarthi ↗
Tibia ↗
Project Entropy ↗
Raja Dunia ↗