[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 provare
if($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 :3
Edit: 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 provare
if($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!
Storie di Agarthi ↗
AlterEgo ↗
Tibia ↗
Cafuné ↗
Project Entropy ↗
RAID Shadow Legends ↗
Fallen Gods ↗