[GDRCD 5.5] Livello Pg in scheda
[GDRCD 5.5] Livello Pg in scheda postato il 18/03/2022 00:34:34 nel forum programmazione, open source e hosting e modificato da playergdr il 20/03/2022 13:00:36
Salve a tutti!
Torno qui a chiedervi una cosa dopo mesi!
Premetto che in questo periodo me la sono sempre cavata da solo dalla prima volta in cui scrissi qui 😅
Insomma, dopo le prime dritte, smanettando e facendo molti errori, ho preso il via su come destreggiarmi in maniera molto imbranata tra i codici sia css che php e sono riuscito ad andare avanti con la creazione del mio fantomatico GDR (Che poi capirete, è praticamente un progetto nato e fatto per giocare tra amici e pochi altri)
Ad ogni modo c'è una cosa che mi sta facendo impazzire!
Come, dove e in quale php devo inserire quale codice perchè mi compaia nella pagina di amministrazione di un utente, la possibilità di mettere il livello PG?
Vorrei far si che il level up sia manuale dai Gestori e non tramite upgrade dei punti esperienza.
Ammetto che ho provato varie cose anche modificando i codici Exp o salute che ho preso come standard sia sul configuratore, nella pagina scheda gestione, che nel vocabolario e via dicendo, ma niente. Non funge._
Ottengo solo o una doppia barra Exp oppure non funziona.
Ho controllato anche nella ref_header, ma in merito non ho trovato nulla. Anche se probabilmente sono io che non mi racapezzo.
Chiedo aiuto!!!
Grazie in anticipo <3
Pagine → 1
18/03/2022 07:42:31 e modificato da playergdr il 18/03/2022 11:23:59
Gentile utente,
è utile per chi risponde sapere quale versione del GDRCD stai usando, sempre che sia quell’OS.
18/03/2022 08:54:58 e modificato da ronald_wesley il 18/03/2022 08:56:53
Innanzitutto hai inserito un nuovo campo nel db, nella tabella personaggio, con le stesse impostazioni di una qualsiasi statistica del pg?
Dopodiché puoi creare il campo in scheda uguale ad una delle caratteristiche del pg modificando ovviamente solo il nome della colonna che viene richiamata… per fare in modo che la gestione possa essere l’unica a modificare quel campo, inoltre, c’è bisogno di andare a modificare anche la pagina scheda_modifica, inserendo il campo che ti permette di modificare il livello nella seconda parte della scheda, quella visibile solamente a chi ha una determinata carica e ricordando di inserire ad inizio pagina, un modifica_livello simile sempre a quello delle caratteristiche…. In più, se il valore in db non lo predefinisci come pari a 0 o 1, ricorda di andare a modificare anche la pagina di iscrizione in modo che ai nuovi pg venga caricato in db il livello di base
18/03/2022 19:01:27 e modificato da strix il 19/03/2022 00:06:15
playergdr ha scritto: Gentile utente,
è utile per chi risponde sapere quale versione del GDRCD stai usando, sempre che sia quell’OS.
Giustamente. Chiedo scusa! La versione è la 5.5!
ronald_wesley ha scritto: Innanzitutto hai inserito un nuovo campo nel db, nella tabella personaggio, con le stesse impostazioni di una qualsiasi statistica del pg?
Dopodiché puoi creare il campo in scheda uguale ad una delle caratteristiche del pg modificando ovviamente solo il nome della colonna che viene richiamata… per fare in modo che la gestione possa essere l’unica a modificare quel campo, inoltre, c’è bisogno di andare a modificare anche la pagina scheda_modifica, inserendo il campo che ti permette di modificare il livello nella seconda parte della scheda, quella visibile solamente a chi ha una determinata carica e ricordando di inserire ad inizio pagina, un modifica_livello simile sempre a quello delle caratteristiche…. In più, se il valore in db non lo predefinisci come pari a 0 o 1, ricorda di andare a modificare anche la pagina di iscrizione in modo che ai nuovi pg venga caricato in db il livello di base
Ecco no! Questo no! E ieri notte, proprio nel mentre che smanettavo e stavo provando a installare alcune patch (E stranamente ci sono riuscito senza problemi) In alcune guide c'era proprio l'istruzione di inserire il campo nella tabella, in merito alla patch. Quindi mi si è accesa la lampadina e ho pensato che forse avrei dovuto fare qualcosa di simile!
Tra poco appena mi rimetto sui Gdr, provo immediatamente a seguire le tue indicazioni. Grazie davvero!
Ti farò sapere se ci sono riuscito.
Non ci sono riuscito purtroppo. O meglio, riesco a farmi comparire la casellina dove scrivere i valori sulla modifica, ma questa è vuota. E se provo ad aggiungere un valore, Va a vuoto. Nel senso che non viene registrato e dunque non compare nella voce sulla scheda.
Premetto che ho usato di esempi i codici Della salute o della Banca.
E ho provato a mettere il livello iniziale del Pg, sia dalla pagina iscrizione che dal db, ma niente, non compare. Ho anche ritentato di screare un Parametro sul configuratore, ma sembra non prendermelo. Sicuramente sbaglio qualcosa nel codice. Ed infatti c'è una cosa che vedo strana. Per mia ignoranza. Prendendo i dati dell Salute, Che non capisco come mai sul codice php sono registrati come Status, mi dà questo:
}elseif (($_SESSION['permessi']>=GUILDMODERATOR)&&(gdrcd_filter('get',$_POST['op'])=='modify_status'))
{
gdrcd_query("UPDATE personaggio SET stato = '".gdrcd_filter('in',$_POST['modifica_status'])."', salute = ".gdrcd_filter('num',$_POST['modifica_salute'])." WHERE nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'");
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['warning']['modified']).'</div>';
Credo, per logica, io sia andato a fare una cosa del tipo
}elseif (($_SESSION['permessi']>=GUILDMODERATOR)&&(gdrcd_filter('get',$_POST['op'])=='modify_status'))
{
gdrcd_query("UPDATE personaggio SET livello = '".gdrcd_filter('in',$_POST['modifica_livello'])."', livello = ".gdrcd_filter('num',$_POST['modifica_livello'])." WHERE nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'");
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['warning']['modified']).'</div>';
Ora, quel ''mofidy_status'' nella prima riga, io l'ho anche cambiato in modify_livello
(livello è il nome che ho dato nel db)
Ma la situazione non cambia.
Da cosa viene preso? Perchè sono certo che salto qualche pezzo io.
Mentre i dati che messo per il livello sul db sono esattamente :
Nome: Livello
Tipo: INT
Predefinito: NULL
Predefinito ho provato anche a cambiarlo in 1 o 0, ma niente uguale.
Successivamente, tornando alla scheda modifica, dove ho anche messo la prima parte di codice che vi ho già scritto sopra, ho messo questo :
<!-- LIVELLO PROVA-->
<div class='form_label'>
<?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['modify_form']['level']); ?>
</div>
<div class='form_field'>
<input class="healt_input" name="modifica_livello" value="<?php echo $record['livello']; ?>" />
</div>
<!-- FINE LIVELLO PROVA-->
Nelle ultime quadre, occhio e croce, seguendo il codice che usano per la salute che riporta proprio ''Salute'' come termine, così come indicato anche nel db, ho dedotto ci andasse quindi livello. Cosa di cui non sono certo.
Mentre, sulla pagina Iscrizione, mi sono limitato a mettere
riga576 $PARAMETERS['settings']['lvl]) . ", " . gdrcd_filter('num',
Impostando lo stesso parametro anche nel configuratore dove ci sono anche tutti gli altri valori numerici, tipo denaro, exp, salute_ max ecc ecc... Ho impostato 1, come dovrebbe essere il livello iniziale.
Che pastrocchio ho combinato?
Grazie al cielo ho fatto il backup xD
19/03/2022 10:39:00
Premetto che non ho la stessa versione di gdrcd, ma comunque il discorso dovrebbe essere uguale. Il modify_status non devi modificarlo poiché praticamente quello che c’è scritto lì prima della parentesi graffa significa che se sei un guildmoderator e premi il tasto di modifica per modificare quei determinati campo, allora ti esegue quello che c’è nella parentesi graffa. Dunque tutto quello che sta scritto per lo status non devi copiarlo ed incollarlo di nuovo uguale, ma semplicemente devi andare ad aggiungere una riga a quello che c’è nella parentesi graffa, del tipo:
}elseif (($_SESSION['permessi']>=GUILDMODERATOR)&&(gdrcd_filter('get',$_POST['op'])=='modify_status'))
{
gdrcd_query("UPDATE personaggio SET stato = '".gdrcd_filter('in',$_POST['modifica_status'])."', salute = ".gdrcd_filter('num',$_POST['modifica_salute'])." , livello = ".gdrcd_filter('num',$_POST['modifica_livello'])." WHERE nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'");
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['warning']['modified']).'</div>';
Dovrebbe essere più o meno così…
19/03/2022 20:46:32 e modificato da strix il 19/03/2022 20:57:09
Ok! Ci sono riuscito! Sia a farlo apparire come Livello 1 in scheda dalla registrazione,
sia a creare la sezione in scheda modifica che mi permette poi di andarlo a modificare manualmente! Preciso che ovviamente non è collegato all'esperienza, quindi il livello non sale con l'esperienza.
Funziona tutto!!!
Se posso vorrei lasciare tutta la procedura precisa , nel caso in cui potrebbe servire a qualche altro negato come me in futuro!
Prima però Rispondo a Mathramstaff :D
Credo che tu abbia ragione, che il tuo metodo sia molto più semplice e svelto. Purtroppo però, come ne ho dato mostra, non essendo io un programmatore e neanche qualcuno che si destreggia da molto su questi codici (Considera che da quando mi ci sono messo, ho giusto 7/8 mesi da autodidatta sui codici php, css e html alle spalle, quindi nulla considerando che nemmeno ci sono troppo portato 🤣 ) preferisco andare avanti di backup e fare aggiunte piuttosto che togliere o creare cose a parte. Anche perchè non credo che senza esempi di codici sotto, cui fare riferimento, sarei in grado di fare granchè 🧐
Magari ci riderai su, ma tipo anche tutte le pagine che ho aggiunto sul Gdr, ho usato codici di pagine già esistenti modificandoli in un nuovo file php xD
E se volevo togliere qualcosa, lo rendevo commento. Giuro che non ho idea effettivamente come funzioni ancora tutto e non ci siano errori in giro! Credo che il sito stia su per disperazione proprio! xD
Quindi avrei un pò di timore, attualmente, ad usare questo metodo. Sempre se ho inteso bene cosa tu volevi dire eh! Perchè possibile che io abbia capito tutt'altro!!! In tal caso mi scuso!
E si, lo so, come mi è stato già consigliato, sarebbe il caso di prendere un programmatore vero, il punto è che essendo un gdr che sto facendo per giocare con un gruppo di amici, amici di amici e pochi altri che magari trovandolo per caso vorranno aggiungersi, quindi una cosa abbastanza casereccia e semplice, non trovo sia il caso. Anche perché allora mi priverei di un occasione in cui """Imparare""" qualcosa di nuovo!
Comunque magari in futuro, quando mi sentirò più sicuro, proverò anche il tuo metodo se mi servirà :P Con ciò ringrazio davvero molto entrambi per avermi assistito e consigliato!
Ora passo alla procedura!
Allora, per prima cosa sono andato sul DB, quindi PhpMyAdmin. Da lì, ho aperto la colonna sulla sinistra, che corrisponde al nome del GDR, con tutte le tabelle che compaiono sotto. Vado quindi su Personaggio, e ne creo una nuova intitolandola livello e dando i seguenti valori
Nome: livello
Tipo: INT
Predefinito: Come predefinito / 1 (Sulla barra vuota sotto)
Tutti gli altri campi li lascio vuoti!
Fatto questo salvo, ed ho la tabella del livello bella e pronta.
Quindi esco e vado sulla gestione file e mi vado a modificare il file config.inc.php nella sezione OPZIONI DI GIOCO (ovvero quella dove ci sono tutti i parametri di settaggio. Tipo first_map, first_money, post_per_page ecc... nella mia versione GDRCD 5.5 si trova alla riga 209) e aggiungo questo nuovo parametro:
$PARAMETERS['settings']['first_lvl'] =1; // PRIMO LIVELLO ALL'ISCRIZIONE//
Questo dato ''1'' corrisponde al livello che voglio abbiano tutti i PG al momento dell'iscrizione.
Applico e dunque salvo.
Ora vado sulla cartella Themes / basic (Io ho creato il gdr sul basic, in caso differente presumo tocca andare su advanced) Home ed andarsi a modificare il file Iscrizion.php alla riga 565 (In caso non abbiate già fatto modifiche prima e quindi la riga non corrisponde più)
quindi, in breve questo :
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza $lastpasschange_field) VALUES ('" . gdrcd_capital_letter(gdrcd_filter('in',
$_POST['nome'])) . "', '" . gdrcd_filter('in',
$_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_filter('in',
$_POST['email']) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num',
$_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num',
$_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num',
$_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num',
$_POST['car5']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['first_px']) . " $lastpasschange_value)");
Dove ci sono i vari Parameters, aggiungo quindi questo:
. ", " . gdrcd_filter('num',
$PARAMETERS['settings']['first_lvl']) .
Che va a richiamare i parametri che ho impostato nel configuratore.
Quindi, in breve, il codice che dovrebbe risultarvi a termine è questo qui
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza, livello $lastpasschange_field) VALUES ('" . gdrcd_capital_letter(gdrcd_filter('in',
$_POST['nome'])) . "', '" . gdrcd_filter('in',
$_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_filter('in',
$_POST['email']) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num',
$_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num',
$_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num',
$_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num',
$_POST['car5']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['first_px']) . ", " . gdrcd_filter('num',
$PARAMETERS['settings']['first_lvl']) . " $lastpasschange_value)");
E quindi applicate e salvate.
Prima di passare allo step successivo però vorrei far notare una cosa. Non so è capitato ad altri, ma a termine di tutta la procedura, quindi anche i passaggi successivi che ancora devo scrivere, quando ho provato ad iscrivere un nuovo Pg per vedere effettivamente come Test finale se tutto funzionasse bene e il livello si applicasse già da appena iscritti, al momento in cui dovevo completare ed ultimare la registrazione di un nuovo utente, mi dava due errori MySQL, inerenti alla pagina iscrizione.
Il primo riguardava la casella ultimo_luogo, sul database sempre su personaggio.
Ebbene, non risultava il valore giusto, poichè era impostato su null.
Occorre correggerlo dandogli un valore! Proprio come lo si è dato quando ho creato la casella livello, semplicemente con l'1.
Il secondo invece prevedeva un errore proprio nella riga iniziale della sezione, in iscrizioni, cui andiamo a fare l'aggiunta del nuovo parametro.
Se notate nei due codici che ho postato, difatti, nel primo non modificato ci sono solo 17 definizioni (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1 ecc ecc...) terminando con esperienza.
Occorre, come nel secondo, aggiungervi anche ''livello'', poichè lo si è andato ad aggiungere anche nei parametri e quindi il conteggio sembrerebbe che non ritorni, quindi da Errore.
Io l'ho capita e risolta così, ovviamente non so se tecnicamente è preciso, ma fatto in questo modo vedo che funge e non dà problemi!
Bene, passo ora ai codici che occorre aggiungere alla pagina scheda_modifica.php (Che si trova nella cartella Pages)
Qui copio ed incollo direttamente il codice che mi ha corretto e postato Ronald_Wesley, cui io sbagliavo nel riscrivere e modificare anche il campo prima della graffa e modify_status. Ha ragionissima! Deve essere tutto unico, quindi il codice corretto è:
/*Se un master o superiore ha richiesto di modificare lo status del pg*/
}elseif (($_SESSION['permessi']>=GUILDMODERATOR)&&(gdrcd_filter('get',$_POST['op'])=='modify_status'))
{
gdrcd_query("UPDATE personaggio SET stato = '".gdrcd_filter('in',$_POST['modifica_status'])."', salute = ".gdrcd_filter('num',$_POST['modifica_salute'])." , livello = ".gdrcd_filter('num',$_POST['modifica_livello'])." WHERE nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'");
echo '<div class="warning">' . gdrcd_filter('out', $MESSAGE['warning']['modified']) . '</div>';
il codice " , livello = ".gdrcd_filter('num',$_POST['modifica_livello']) lo devo solo aggiungere a quello già esistente, e non riscriverne uno da capo.
Come suggerisce anche il commento, va messo nella prima parte della scheda, nella sezione dedicata a chi ha i permessi. Io l'ho alla riga 101
Poi sotto, dopo il commento <!-- Form master status --> scendendo nella seconda parte della pagina, si va ad aggiungere il codice corrispettivo.
<div class='form_label'>
<?php echo gdrcd_filter('out',
$MESSAGE['interface']['sheet']['modify_form']['livelo']); ?>
</div>
<div class='form_field'>
<input class="livelo_input" name="modifica_livello"
value="<?php echo $record['livello']; ?>"/>
</div>
$MESSAGE['interface']['sheet']['modify_form']['livelo'] dovrete crearlo nel vocabolario, io l'ho nominato livelo appunto, assegnandogli la voce che verrà riportata ''Livello''
quindi sarà , in vocabolario, $MESSAGE['interface']['sheet']['modify_form']['livelo'] = 'Livello';
Al resto invece date sempre il nominativo della casella che si è creata in DB.
Ultimo passaggio, andiamo in Scheda.inc.php
E creiamo la casella dove far apparire tale valore proprio nella scheda del personaggio, assieme agli altri dati tipo razza, lavoro, esperienza ecc...
<div class="profilo_voce">
<div class="profilo_voce_label">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['profile']['level']); ?>:
</div>
<div class="profilo_voce_valore">
<?php echo gdrcd_filter('out',$record['livello']); ?>
</div>
</div>
Per $MESSAGE['interface']['sheet']['profile']['level'] Vale la stessa cosa che ho spiegato precedentemente in merito alla pagina del vocabolario.
Quindi sta a voi.
E nulla. Finito. Funziona tutto senza alcun problema. Non so se è tecnicamente corretto o ho fatto una castroneria atroce, ma funziona. Poi magari mi esplode il sito xD Non so dirlo. Lascio ai più esperti giudicare. Però funge!
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!
World of Tanks ↗
Project Entropy ↗
World of the Sea Battle ↗
World of Warship ↗
State of Survival ↗