[RISOLTO] GDRCD 5.4 log acquisti mercato e bug postato il nel forum programmazione, gdrcd, grafica e open source e modificato il 26/09/2021 11:18:27 da animeanddragons
Buonasera!
BUG
Se un pg ha in scheda 5 pozioni (oggetto ad uso singolo) e le usa in chat, scompaiono tutte e 5 invece di 1 sola!
LOG MERCATO
Visto il problema precedente, esiste un modo per creare un qualcosa che mi crei una lista eventi degli acquisti fatti al mercato dei pg?
E anche una lista che mostri quando un pg utilizza un oggetto in chat?
Amo il fantasy e gli anime! Che c'è di meglio?
Pagine → 1 2
25/06/2021 18:17:14 e modificato il 14/07/2021 15:48:32 da haruka
Per quanto riguarda i log.
Allora, step by step.
in includes/constant_values.inc.php
aggiungi un nuovo codice di log dopo l'ultimo.
Sarà una cosa del tipo
define('ACQUISTO', 16);
$MESSAGE['event'][ACQUISTO] = 'Acquisti';
/*Controllo se ha la grana*/
$costo = gdrcd_query("SELECT cariche, costo FROM oggetto WHERE id_oggetto = ".gdrcd_filter('num', $_POST['id_oggetto'])."");
$nome = gdrcd_query("SELECT nome FROM oggetto WHERE id_oggetto = ".gdrcd_filter('num', $_POST['id_oggetto'])."");
$query = "UPDATE clgpersonaggiooggetto SET numero = numero + 1 WHERE id_oggetto = ".gdrcd_filter('num', $_POST['id_oggetto'])." AND nome = '".$_SESSION['login']."'";
gdrcd_query("INSERT INTO log (nome_interessato, autore, data_evento, codice_evento, descrizione_evento) VALUES ('".$_SESSION['login']."','".$_SESSION['login']."', NOW(), ".ACQUISTO.", 'Ha acquistato ".gdrcd_filter('in', $nome['nome'])."')");
$query = "INSERT INTO clgpersonaggiooggetto (nome, id_oggetto, cariche, numero, posizione) VALUES ('".$_SESSION['login']."',".gdrcd_filter('num', $_POST['id_oggetto']).", ".$costo['cariche'].", 1, 0)";
gdrcd_query("INSERT INTO log (nome_interessato, autore, data_evento, codice_evento, descrizione_evento) VALUES ('".$_SESSION['login']."','".$_SESSION['login']."', NOW(), ".ACQUISTO.", 'Ha acquistato ".gdrcd_filter('in', $nome['nome'])."')");
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
26/06/2021 09:37:42 e modificato il 26/06/2021 09:38:32 da betsutamashi
animeanddragons ha scritto: Buonasera!
BUG
Se un pg ha in scheda 5 pozioni (oggetto ad uso singolo) e le usa in chat, scompaiono tutte e 5 invece di 1 sola!
https://betsutamashi.altervista.org
26/06/2021 12:14:05
In ref_header.inc.php ci dovrebbero essere una porzione di codice che inizia con:
} elseif(gdrcd_filter('get', $_POST['id_item']) != 'no_item') {
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
27/06/2021 03:09:51 e modificato il 27/06/2021 03:18:14 da animeanddragons
@HARUKA grazie funziona benissimo!!! Non volendo assolutamente prendermi il merito penso che sarebbe utile se lo mettessi in un pacchetto patch per gdrcd <3
@KASA TI conviene scaricarti il file originale dal pacchetto fai molto prima! Perché ognuno è facile che ci abbia fatto delle modifiche
Per quanto riguarda che brucia più oggetti invece di uno sto facendo dei tentativi, se ne vengo a capo li esporrò qui.
/** * Tiro su caratteristica
* @author Blancks
*/
}
else if (gdrcd_filter('get', $_POST['id_stats']) != 'no_stats' && gdrcd_filter('get',$_POST['dice']) != 'no_dice')
{
mt_srand((double)microtime()*1000000);
$die=mt_rand(1,gdrcd_filter('num', (int)$_POST['dice']));
$id_stats = explode('_', $_POST['id_stats']);
$car = gdrcd_query("SELECT car".gdrcd_filter('num',$id_stats[1])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$racial_bonus = gdrcd_query("SELECT bonus_car".gdrcd_filter('num',$id_stats[1])." AS racial_bonus FROM razza WHERE id_razza IN (SELECT id_razza FROM personaggio WHERE nome='".$_SESSION['login']."')");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, motivazione, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), '".gdrcd_capital_letter(gdrcd_filter('in', $motivazione))."', 'C', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['uses']).' '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1]]).': '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_stats[1].'']).' '.gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus']).', '.gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num',$die).', '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['sum']).' '.(gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus'])+gdrcd_filter('num',$die)+gdrcd_filter('num',$rank['grado'])+gdrcd_filter('in',$bonus['bonus']))."')");
}
else if (gdrcd_filter('get',$_POST['dice'])!='no_dice')
{
mt_srand((double)microtime()*1000000);
$die=mt_rand(1,gdrcd_filter('num',$_POST['dice']));
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'D', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['cast']).gdrcd_filter('num',$_POST['dice']).': '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['sum']).' '.gdrcd_filter('num',$die)."')");
}
else if (gdrcd_filter('get',$_POST['id_item'])!='no_item')
{
$item=explode('-', gdrcd_filter('in',$_POST['id_item']));
if ($item[1]==1)
{
$query="DELETE FROM clgpersonaggiooggetto WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".gdrcd_filter('num',$item[0])."' LIMIT 1";
}
elseif ($item[1]>1)
{
$query="UPDATE clgpersonaggiooggetto SET cariche = cariche -1 WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".gdrcd_filter('num',$item[0])."' LIMIT 1";
}
gdrcd_query($query);
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['die']['item']).': '.gdrcd_filter('in',$item[2])."')");
}
}
Amo il fantasy e gli anime! Che c'è di meglio?
27/06/2021 13:23:51
Non saprei come svilupparlo in modalità pacchetto ^^'
Più che altro la mia risposta è una rapida guida alla creazione di nuove funzioni di log, non è una patch o un pacchetto vero e proprio :P
Però sono contenta che funzioni :)
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
27/06/2021 20:42:59
Ho fatto alcune verifiche sia con GDRCD#5.5.1 che con la tua porzione di codice e non ho trovato errori. Sei sicuro che le cariche vengono salvate correttamente in DB?
Kasa.
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
28/06/2021 21:57:14
@HARUKA Credimi, anche solo inserire questa "guida" in un file e unzipparlo tra gli open source aiuta tantissimo secondo me. <3
@KASA Si, mette NUMERO 2 e CARICHE 1. A rigor di logica quando usa l'ultima carica cancella tutto invece di scalare di -1 nella tabella del NUMERO, così che l'oggetto rimanga
Amo il fantasy e gli anime! Che c'è di meglio?
29/06/2021 10:48:21 e modificato il 29/06/2021 10:54:31 da kasa
animeanddragons ha scritto:
@KASA Si, mette NUMERO 2 e CARICHE 1. A rigor di logica quando usa l'ultima carica cancella tutto invece di scalare di -1 nella tabella del NUMERO, così che l'oggetto rimanga
nome - id_oggetto - numero - cariche - commento - posizione
Super - 1 - 1 - 5 - Prova - 1
Super - 1 - 1 - 5 - Prova - 1
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
29/06/2021 19:57:42
Salve! io avevo lo stesso prolema ed ho risolto senza andare a cambiare il database (mi pare), non ho aggiunto nulla al funzionamento degli oggetti.
Ovviamente, come più volte consigliato sopra, cambiare totalmente il sistema di "funzionamento" degli oggetti è la soluzione più efficiente
Essenzialmente la logica è la seguente
- Consumo l'oggetto in chat (se ha cariche maggiori di 0)
- Controllo gli oggetti posseduti dal personaggio
- Se ha finito le Cariche, ma possiede più di una copia dello stesso oggetto, allora toglie un oggetto e "ripristina" le cariche
- Se ha finito le Cariche, ma non ha più copie dello stesso oggetto, allora semplicemente toglie l'oggetto
___________________________________________________________
Nel file frame_chat.inc.php ho inserito un menù a tendina con tutti gli oggetti "consumabili" che possono essere indossati dal personaggio
<form action="pages/chat.inc.php?ref=30&chat=yes" method="post" target="chat_frame" id="chat_form_oggetti">
<?php $result = gdrcd_query("SELECT clgpersonaggiooggetto.id_oggetto, oggetto.nome, oggetto.ubicabile, clgpersonaggiooggetto.cariche FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND posizione > 0 AND clgpersonaggiooggetto.cariche > 0 ORDER BY oggetto.nome", 'result'); ?>
<select name="item" id="item" style="width: 90%;" class="hack">
<option value="no_item" selected> </option>
<?php while($row=gdrcd_query($result, 'fetch')){ ?>
<option value="<?php echo gdrcd_filter('out',$row['id_oggetto']); ?>">
<?php echo $row['nome']; ?> </option>
<?php }//while ?>
</select>
<br>
<input type="submit" value=" Usa" style="90%"/>
<input type="hidden" name="op" value="take_action_consumables">
</td>
</form>
if ((gdrcd_filter('get',$_POST['op'])=='take_action_consumables'))
{$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
if ($actual_healt['salute']>0)
{$id_oggetto = $_POST['item'];
//Appena esegue il comando deve scaricare un USO dall'oggetto
$query=gdrcd_query("UPDATE clgpersonaggiooggetto SET cariche = cariche -1 WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".$id_oggetto."' LIMIT 1");
$numero_posseduto = gdrcd_query("SELECT numero FROM clgpersonaggiooggetto WHERE id_oggetto = '".$id_oggetto."' AND nome = '".$_SESSION['login']."' LIMIT 1");
$cariche_rimaste = gdrcd_query("SELECT cariche FROM clgpersonaggiooggetto WHERE id_oggetto = '".$id_oggetto."' AND nome = '".$_SESSION['login']."' LIMIT 1");
$cariche_originali = gdrcd_query("SELECT cariche FROM oggetto WHERE id_oggetto = '".$id_oggetto."' LIMIT 1");
$nome_oggetto = gdrcd_query("SELECT nome FROM oggetto WHERE id_oggetto = '".$id_oggetto."' LIMIT 1");
//Inizia il controllo per vedere se ci sono cariche rimaste oppure si hanno copie multiple
if ($cariche_rimaste[0] > 0){
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (" .$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].
' utilizza ' .$nome_oggetto[0]. "')");
}
else if ($cariche_rimaste[0] == 0 && $numero_posseduto[0] > 1) {
$query=gdrcd_query("UPDATE clgpersonaggiooggetto SET numero = numero -1 WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".$id_oggetto."' LIMIT 1");
$query=gdrcd_query("UPDATE clgpersonaggiooggetto SET cariche ='".$cariche_originali[0]."' WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".$id_oggetto."' LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (" .$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].
' utilizza ' .$nome_oggetto[0]. "')"); }
else if ($cariche_rimaste[0] == 0 && $numero_posseduto[0] < 2) {
$query=gdrcd_query("DELETE FROM clgpersonaggiooggetto WHERE id_oggetto = ".$id_oggetto." AND nome = '".$_SESSION['login']."' LIMIT 1 ");
$query=gdrcd_query("UPDATE clgpersonaggiooggetto SET cariche ='".$cariche_originali[0]."' WHERE nome ='".$_SESSION['login']."' AND id_oggetto='".$id_oggetto."' LIMIT 1");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (" .$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].
' utilizza ' .$nome_oggetto[0]. "')"); }
else if ($cariche_rimaste[0] < 0 && $numero_posseduto[0] < 2) {
$query=gdrcd_query("DELETE FROM clgpersonaggiooggetto WHERE id_oggetto = ".$id_oggetto." AND nome = '".$_SESSION['login']."' LIMIT 1 ");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (" .$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '', NOW(), 'O', '".$_SESSION['login'].
' non ha rimasto abbastanza utilizzi di ' .$nome_oggetto[0]. "')"); }
} else {/* else per il controllo se la salute è maggiore di 0*/
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo ) VALUES (".$_SESSION['luogo'].", '".$_SESSION['sesso'].";".$_SESSION['img_razza']."', '".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in', $_SESSION['login']))."', NOW(), 'S', '".
gdrcd_filter('in',$MESSAGE['status_pg']['exausted'])."')");}
} // TAKE ACTION OGGETTI CONSUMABILI
14/07/2021 15:47:17
Per il codice che registra l'operazione in log, mi sono accorta che c'è un piccolo errore che causa bug se nel titolo dell'oggetto c'è l'apostrofo.
Ho sistemato. Modifico la mia precedente risposta in modo da sistemare il codice qui in forum.
Leggendra.eu - Fantasy steampunk itinerante
https://www.leggendra.eu
Pagine → 1 2
Discussione seguita da:
Non puoi scrivere in questo Forum
Aggiungi Discussione ai Preferiti
Inoltra Discussione
Forum Programmazione, GDRCD, Grafica e Open Source
Torna alla lista Forum
✋😟
Abbiamo rilevato che stai usando un software per bloccare la pubblicità!
L'utilizzo di GDR-online.com è gratuito da oltre 17 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