[GDRCD 5.6.X] Px settimanali al login + Tetto massimo a update postato il 04/03/2023 10:55:01 nel forum programmazione, gdrcd e open source
Ciao a tutti
Sto cercando di implementare un sistema di assegnazione dell'esperienza automatico slegato dall'accumulo di px in chat in base ai caratteri/azioni: il risultato che vorrei è che ogni settimana i personaggi che hanno fatto almeno una role (4 azioni registrate in db) si vedono assegnato 1 px.
Ho inserito il codice in login.php (rifacendomi all'assegnazione dello stipendio) ed aggiunto un campo data ultima_exp nella tabella personaggio. Ora... se l'assegnazione fosse giornaliera il sistema funziona senza problemi, ma aggiungendo i controlli sulla data per fare l'update di sette giorni in sette giorni, non va.
Questo è il mio codice:
if($PARAMETERS['settings']['week_exp'] = 'ON') {
/*ESPERIENZA SETT*/
$row = gdrcd_query("SELECT esperienza, ultima_exp FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$ultimaexp = gdrcd_filter('out', $row['ultima_exp']);
$data = strftime("%Y-%m-%d");
$newdata = strtotime($ultimaexp ."+1 week");
if($newdata == $data){
$chat = gdrcd_query("SELECT COUNT(mittente) AS azione FROM chat WHERE DATE_SUB(NOW(),INTERVAL 1 WEEK) <= ora AND tipo = 'P' AND mittente = '".$_SESSION['login']."'");
if($chat['azione'] >= 4) {
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + 1, ultima_exp = NOW() WHERE nome = '".$_SESSION['login']."'");
} else {
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + 0, ultima_exp = NOW() WHERE nome = '".$_SESSION['login']."'");
}
}
}
Pagine → 1
04/03/2023 19:21:11
Ciao!
così, a prima vista c'è un errore nell IF statment
if($PARAMETERS['settings']['week_exp'] = 'ON')
if($PARAMETERS['settings']['week_exp'] == 'ON')
if($chat['azione'] >= 4
if( (int) $chat['azione'] >= 4
Claudio
06/03/2023 12:02:49
Oltre a quello che indica cbr89, mi viene un dubbio sul controllo effettuato, cioè questa parte:
if($newdata == $data){
Nothing is static. Everything is evolving. Everything is falling apart.
- Professoressa della penna rossa (cit.) -
06/03/2023 15:21:41
@cbr89: ho inserito le correzioni, appena vedo se funzionano ti do conferma. Intanto grazie :)
bunnyboo ha scritto: Questo controllo non comporta che se il giocatore non logga nel giorno preciso dato dall'ultima exp + 1 settimana, salti tutto per com'è fatto il codice?
07/03/2023 15:48:45 e modificato da cbr89 il 07/03/2023 15:49:48
Ciao Backwaters,
ho dato uno sguardo allo script che hai fatto.
Secondo me ci sono un paio di errori logici dentro, io ho provato a farti uno script che dovrebbe darti il risultato che speri.
dato che non ricordo bene la sintassi della funzione PHP diff su un oggetto date, ti chiedo di verificare quella roba.
if($PARAMETERS['settings']['week_exp'] == 'ON') {
/*ESPERIENZA SETT*/
$row = gdrcd_query("SELECT esperienza, ultima_exp FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$ultimaexp = new Date(gdrcd_filter('out', $row['ultima_exp']));
$oggi = new Date("now");
/*se dall'ultimo aggiornamento sono passati da 7 a più giorni*/
if( $oggi->diff($ultimaexp)->days >= 7 ){
/*questa query era potenzialmente sbagliata.
Nel senso che, se uno va in 4 chat qualunque, manda un messaggio tu gli aumenti gli exp. L'ho modificata per estrarre il numero di azioni per stanza nell'ultima settimana da ora. */
$chat = gdrcd_query("SELECT COUNT(mittente) AS azione FROM chat WHERE DATE_SUB(NOW(), INTERVAL 1 WEEK) >= ora AND tipo = 'P' AND mittente = '".$_SESSION['login']."' GROUP BY stanza HAVING COUNT(*) > 4", 'result');
if(gdrcd_query($chat, 'num_rows') > 0 ) {
/*Se è stato tornato un numero di righe, vuol dire che il pg ha fatto almeno 4 azioni nella stessa chat nella settimana */
gdrcd_query("UPDATE personaggio SET esperienza = esperienza + 1, ultima_exp = NOW() WHERE nome = '".$_SESSION['login']."'");
}
}
}
Claudio
13/03/2023 11:34:41
Scusa se rispondo solo ora, ma sono riuscita a mettermi sul codice solo in questi giorni.
Dai primi test mi sembra funzionare tutto, ho solo modificato new Date in new Datetime perché mi dava Uncaught Error e... grazie, di nuovo!
Discussione seguita da
Pagine → 1
Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD e Open Source Elenco Forum
Star Trek: Equilibrium: MQ6: Fronte di liberazione
✋😟
Abbiamo rilevato che stai usando un software per bloccare la pubblicità!
L'utilizzo di GDR-online.com è gratuito da oltre 18 anni ma è necessario coprire i costi per mantenerlo online... ti chiediamo di aiutarci disabilitando il blocco dei banner pubblicitari.
Togliere il blocco significa fare in modo che GDR-online.com possa continuare a far conoscere piccoli giochi amatoriali gratuitamente e offrire un servizio sempre migliore e adatto alle esigenze dei suoi giocatori!
Se questo avviso continua ad apparire nonostante tu abbia autorizzato il portale:
- Verifica nelle opzioni che venga disattivato AdBlock in tutto il dominio gdr-online.com e non solo in una pagina
- Controlla di non avere fra le estensioni installate altre analoghe ad AdBlock, come AdBlock Plusbr, ublock origin, ecc.
- Probabilmente sul tuo PC è installato un Antivirus che ha anche funzioni di blocco pubblicità
- Se usi Firefox impostare il "Blocco Contenuti" su "Normale" e non su "Restrittivo". Per farlo clicca sull'icona dello scudo vicino all'URL e clicca su "Disattiva Blocco per questo sito"
- Prova a premere CTRL + F5, riloggarti e vedi se il problema persiste