[RISOLTO - GDRCD 5.6.0.5] Chat private ed exp
[RISOLTO - GDRCD 5.6.0.5] Chat private ed exp postato il 06/02/2023 15:27:23 nel forum programmazione, open source e hosting e modificato da emendil il 03/03/2023 11:42:50
Buongiorno!Ho un problemino con l'ultima versione di GDRCD....anche impostando l'exp per chat private a OFF da config.php continua a conteggiarla come se risultasse sempre ON, qualcuno ha avuto lo stesso problema? Non ho toccato altro se non impostare il parametro a OFF...
Pagine → 1
08/02/2023 15:04:07
Ciao! 😃Ho dato una veloce occhiata al file ref_header.inc.php e credo di aver capito come mai comunque assegna gli exp.
if($PARAMETERS['mode']['exp_by_chat'] == 'ON') { /* entro in questo blocco se sono attivi gli exp in chat */ if($PARAMETERS['mode']['exp_in_private'] == 'ON') { /*entro in questo blocco se sono attivi gli exp in private */ if($mappa['privata']==0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } else { /* entro qui se ho impostato exp_in_private = 'OFF' ma comunque, aggiorna il valore di esperienza qui mi sembra ci sia l'errore*/ if($m_type == 'A' || $m_type == 'P' || $m_type == 'M') { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }}
Questo blocco di codice è alla linea 231 del ref_header.inc.php.In pratica, quando Imposti $PARAMETERS['mode']['exp_in_private'] = 'OFF' sembra che comunque aggiorni gli exp in caso di Parlato, Azione o Master. Ed in ogni caso, mi sembra un blocco errato. io lo cambierei così, se vuoi provareif($PARAMETERS['mode']['exp_by_chat'] == 'ON') { /* entro in questo blocco se sono attivi gli exp in chat */ if($PARAMETERS['mode']['exp_in_private'] == 'OFF') { if($mappa['privata']== 0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } else { /* entro qui se ho impostato exp_in_private = 'OFF' ma comunque, aggiorna il valore di esperienza */ if($m_type == 'A' || $m_type == 'P' || $m_type == 'M') { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }}
14/02/2023 13:49:50 e modificato da emendil il 14/02/2023 15:42:17
Ciao e grazie per la risposta! Faccio un paio di prove e ti dico :3Edit: niente da fare ç_ç
cbr89 ha scritto: Ciao! 😃Ho dato una veloce occhiata al file ref_header.inc.php e credo di aver capito come mai comunque assegna gli exp.
if($PARAMETERS['mode']['exp_by_chat'] == 'ON') { /* entro in questo blocco se sono attivi gli exp in chat */ if($PARAMETERS['mode']['exp_in_private'] == 'ON') { /*entro in questo blocco se sono attivi gli exp in private */ if($mappa['privata']==0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } else { /* entro qui se ho impostato exp_in_private = 'OFF' ma comunque, aggiorna il valore di esperienza qui mi sembra ci sia l'errore*/ if($m_type == 'A' || $m_type == 'P' || $m_type == 'M') { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }}
Questo blocco di codice è alla linea 231 del ref_header.inc.php.In pratica, quando Imposti $PARAMETERS['mode']['exp_in_private'] = 'OFF' sembra che comunque aggiorni gli exp in caso di Parlato, Azione o Master. Ed in ogni caso, mi sembra un blocco errato. io lo cambierei così, se vuoi provareif($PARAMETERS['mode']['exp_by_chat'] == 'ON') { /* entro in questo blocco se sono attivi gli exp in chat */ if($PARAMETERS['mode']['exp_in_private'] == 'OFF') { if($mappa['privata']== 0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } else { /* entro qui se ho impostato exp_in_private = 'OFF' ma comunque, aggiorna il valore di esperienza */ if($m_type == 'A' || $m_type == 'P' || $m_type == 'M') { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }}
15/02/2023 11:11:24
C'è un errore logico nella versione di GDRCD.Di fatto, in questo passaggio:
if($PARAMETERS['mode']['exp_in_private'] == 'ON') { if($mappa['privata']==0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }
viene fatto dapprima un controllo se il parametro $PARAMETERS['mode']['exp_in_private'] è stato impostato e poi se la chat è effettivamente privata per poter accedere quindi all'assegnazione dell'esperienza. Ma per essere privata una chat deve avere la colonna 'privata' nella tabella 'mappa' impostata a 1, non a 0 come invece viene controllato qui. I record con 'mappa.privata' uguale a 0 rappresentano le chat pubbliche. Tra l'altro, questo controllo è sbagliato perchè se fosse stato vero avrebbe assegnato l'esperienza SOLO alle chat private e non in quelle pubbliche, perchè non contempla le altre casistiche. Andrebbe proprio riscritto tutto, da così:if($PARAMETERS['mode']['exp_by_chat'] == 'ON') { /* entro in questo blocco se sono attivi gli exp in chat */ if($PARAMETERS['mode']['exp_in_private'] == 'ON') { /*entro in questo blocco se sono attivi gli exp in private */ if($mappa['privata']==0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } else { /* entro qui se ho impostato exp_in_private = 'OFF' ma comunque, aggiorna il valore di esperienza qui mi sembra ci sia l'errore*/ if($m_type == 'A' || $m_type == 'P' || $m_type == 'M') { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }}
a così:// Assegnazione esperienza per i messaggi in chat if($PARAMETERS['mode']['exp_by_chat'] == 'ON') { // Messaggio in chat pubblica if($mappa['privata'] == 0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } // Messaggio in chat privata (solo se impostato in config) if($mappa['privata'] == 1 && $PARAMETERS['mode']['exp_in_private'] == 'ON' && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } }
Ho aggiunto un poco di commenti per far comprendere meglio i passaggi.Potresti verificare se ti torna?Kasa.
15/02/2023 14:01:02
I record con 'mappa.privata' uguale a 0 rappresentano le chat pubbliche.
Grazie per la precisazione!
15/02/2023 16:13:53 e modificato da kasa il 15/02/2023 16:21:39
Tra l'altro, mi sono accorto che nella versione 5.6.0.5 di GDRCD nel file config.inc.php il parametro dedicato all'assegnazione dell'esperienza nelle chat private si presenta così:
$PARAMETERS['mode']['exp_in_private'] == 'ON';
il che è un errore, poichè non è propriamente una dichiarazione ma un "confronto". Andrebbe quindi scritto così:$PARAMETERS['mode']['exp_in_private'] = 'ON';
Kasa.
15/02/2023 23:36:28 e modificato da gdr-online.com il 16/02/2023 11:57:34
Ciao! Allora, nella land in rifacimento che sto facendo funziona così:
if($PARAMETERS['mode']['exp_by_chat'] == 'ON') { if($PARAMETERS['mode']['exp_in_private'] == 'OFF') { if($mappa['privata']==0 && ($m_type == 'A' || $m_type == 'P' || $m_type == 'M')){ if($msg_length>=$char_needed) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } } else { if($m_type == 'A' || $m_type == 'P' || $m_type == 'M'){ if ($msg_length >= $char_needed) { gdrcd_query("UPDATE personaggio SET esperienza = esperienza + ".$exp_bonus." WHERE nome = '".$_SESSION['login']."' LIMIT 1"); } } } }
E questo funziona, mentre nella land che attualmente è online niente, non riesco a farla funzionare in nessun modo ç_ç ma probabilmente lascio così come sta, è stata rimaneggiata troppe volte da altre mani! Grazie comunque per l'aiuto <3
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!