Caratteristiche che lanciano più dadi
Caratteristiche che lanciano più dadi postato il 06/05/2020 22:03:50 nel forum programmazione, open source e hosting
Salve! mi trovo nella necessità di creare un sistema di lancio dadi stile Five rings, Vampiri, Savage.... (cioè che se ho una Caratteristica di valore 5, questa mi faccia lanciare 5d6 in chat e stamparli tutti quanti, non il risultato)
I personagi posseggono 6 caratteristiche (per comodità anche di codice preesistente, chiamate car1, car2, car3.....car6)
vorrei fare in modo che, in chat, si possano selezionare tre caratteristiche tramite menù a tendina, ed il sistema tiri altrettanti d6, stampandoli in chat
Esempio:
menù a tendina 1: car3 = 4
menù a tendina 2: car5 = 3
menù a tendina 3: car1 = 2
totale: il sistema tira in chat 4+3+2 d6
Ho pensato di strutturare così, all'interno di ref_header.inc.php
$a = caratteristica_menu_1
$b = caratteristica_menu_2
$c = caratteristica_menu_3
$pool = $somma = ($a + $b + $c);
$risultato = array();
for ($i = 0; $i <= $pool, $i++)
{$d6 = mt_rand(1,6);
$risultato[] = $d6;
};
§chat_message: "hai ottenuto:" §risultato;
___________________________________________
nella chat ho provato a riutilizzare il codice presente per far "selezionare" una caratteristica, anche se non ne sono del tutto convinta T_T
<form action="pages/chat.inc.php?ref30&chat=yes" method="post" target="chat_frame id="chat_form_actions">
<select name="id_stats" id="id_stats">
<option value="no_stats"> </option>
<?php
for ($i = 1; $i <= 6, $i++)
{
?> <option value="stats_<?php echo $i; ?>"> <?php echo $name_stats; ?> </option>
<?php
} ?>
</select>
<input type="submit" value="Lancia Dadi" />
<input type="hidden" name="op" value="take_action">
</form>
Ora....grande questione:
- come poso fare in modo che i valori $a, $b, $c si settino in base ai menù a tendina che sono presenti in chat premendo il tasto "Lancia Dadi" in chat?
Se dovesse servire, le caratteristiche nel database sono state caricate come se fossero "campi" della voce "personaggio" (un po' come in gdrcd base)
- Per farlo poi stampare in chat, devo aggiungere qualcosa oppure per come è strutturato il codice, consdierando quello che è già impostato su GDRCD, è sufficiente?
Vi chiedo perdono se magari la questione è un po' "confusa" ma questo va un po' oltre le mie conoscenze piuttosto basilari ed ho cercato di vedere un attimo tra consigli e aspetti Web come giostrarmela ma...non ne sono uscita.
Grazie mille alla comunità sempre disponibilissima
Pagine → 1 2
07/05/2020 00:24:09
il modo più' semplice e' inviare i valori tramite form e poi lato codice usare $_REQUEST o $_POST
Invece di fare 3 menu a tendina potresti pensare ad un multi select per ovviare al problema di avere doppie caratteristiche altrimenti dovresti prevedere un sistema di disabilitazione o creazione delle voci del menu dinamico.
Un altro consiglio e' usare il valore della caratteristica prendendolo dal db e non fidandosi di quello del form in quanto potrebbe essere manipolato dall'utente.
07/05/2020 21:29:32
Spero di aver capito che cosa intendi, perdonami eventuali errori e grazie per la risposta.
Non dovrei avere problema di accavallarsi di caratteristiche siccome ogni menù ne avrà massimo due. Per cui sarà:
car1 car3 car5
car2 car4 car6
Dunque, dovrei fare:
<form action="pages/chat.inc.php?ref30&chat=yes" method="post" target="chat_frame" id="chat_form_actions">
<select name="menu_1" id="menu_1">
<option value="no_stats"> </option>
<?php
'<option>' echo gdrcd_filter('out',$record['car1']) '</option value="stat1">';
'<option value="stat2">' echo gdrcd_filter('out',$record['car2']) '</option>';
?>
</select>
<select name="menu_2" id="menu_2">
<option value="no_stats2"> </option>
<?php
'<option>' echo gdrcd_filter('out',$record['car3']) '</option value="stat3">';
'<option value="stat4">' echo gdrcd_filter('out',$record['car4']) '</option>';
?>
</select>
<select name="menu_3" id="menu_3">
<option value="no_stats3"> </option>
<?php
'<option>' echo gdrcd_filter('out',$record['car5']) '</option value="stat5">';
'<option value="stat6">' echo gdrcd_filter('out',$record['car6']) '</option>';
?>
</select>
<input type="submit" value="Lancia Dadi" />
<input type="hidden" name="op" value="take_action">
</form>
Questo dovrebbe creare tre menù a tendina, ed attribuire tre differenti valori a menu_1, menu_2, menu_3
A qusto punto creo il tipo di lancio
if{ - ciclo if per evitare la selezione vuota}
$a = (int)$_POST['menu_1'];
$b = (int)$_POST['menu_2'];
$c = (int)$_POST['menu_3'];
$pool = $somma = ($a + $b + $c);
$risultato = array();
for ($i = 0; $i <= $pool, $i++)
{$d6 = mt_rand(1,6);
$risultato[] = $d6;
};
§chat_message: "hai ottenuto:" §risultato;
errori di sintassi a parte che...dovrò vedermela da sola, è una cosa funzionale?
non conoscendo GDRCD, non sono riuscita a risalire al funzionamento di questo, ho semplicemente preso il codice precedente per il tiro di dado+caratteristica, spero che vada bene, altrimenti si accettano consigli <3
form action="pages/chat.inc.php?ref30&chat=yes" id....>
07/05/2020 22:39:01
hai qualche errore di sintassi html pero' il ragionamento va bene. Potresti prevedere di mettere invece di $record['car1'] che probabilmente ti da un numero una parola tipo Forza.
Poi lato codice metti se ha selezionato car1 allora vai nel db tabella personaggio colonna car1 e prendi il valore per fare il lancio
08/05/2020 20:47:02 e modificato da vivi1400 il 08/05/2020 20:47:50
Eccomi di nuovo quì, sperando di riuscire a risolvere T_T
ho provato a montare il tutto (prima di mettere le caratteristiche ho fatto con un banale menù a tendina con i numerini)
<form action="pages/chat.inc.php?ref=30&chat=yes" method="post" target="chat_frame" id="chat_form_actions">
<?php $result = gdrcd_query("SELECT id_abilita, nome FROM abilita WHERE id_razza=-1 OR id_razza IN (SELECT id_razza FROM personaggio WHERE nome = '".$_SESSION['login']."') ORDER BY nome", 'result'); ?>
<select name="menu_1" id="menu_1">
<option value="no_stats"> </option>
<option value="stat1"> 1 </option>';
<option value="stat2"> 2 </option>';
<option value="stat3"> 3 </option>';
</select>
<select name="menu_2" id="menu_2">
<option value="no_stats2"> </option>
<option value="stat4"> 4 </option>';
<option value="stat5"> 5 </option>';
<option value="stat6"> 6 </option>';
</select>
<select name="menu_3" id="menu_3">
<option value="no_stats3"> </option>
<option value="stat7"> 4 </option>';
<option value="stat8"> 5 </option>';
<option value="stat9"> 6 </option>';
</select>
<input type="submit" value="Tasto Prova" />
<input type="hidden" name="op" value="take_action">
</form>
E fin quì tutto ok, crea i tre menù, selezionabili e fa partire il comando.
Quando però premo su "Tasto Prova", in chat stampa sempre e soltanto:
Test usa : 4, rango 0, oggetti 0, totale 4
Sia che io metta dei numeri nel enù a tendina, che non li metta, o che non selezioni nulla.
Perdonatemi se vi copio tutta la parte che credo interessata all'interno di ref_header.inc.php , ma no sono riuscita a capire dove andare a rimuovere quella parte di codice a cui fa riferimento (causa della mia niubbaggine)
if((gdrcd_filter_get($_REQUEST['chat'])=='yes')&&(empty($_SESSION['login'])===FALSE))
{if ((gdrcd_filter('get',$_POST['op'])=='take_action')&&(($PARAMETERS['mode']['skillsystem']=='ON')||($PARAMETERS['mode']['dices']=='ON')))
{$actual_healt = gdrcd_query("SELECT salute FROM personaggio WHERE nome = '".$_SESSION['login']."'");
if (gdrcd_filter('get',$_POST['menu_1'])!='no_skill')
{if ($actual_healt['salute']>0)
{$skill = gdrcd_query("SELECT nome, car FROM abilita WHERE id_abilita = ".gdrcd_filter('num',$_POST['id_ab'])." LIMIT 1");
$car = gdrcd_query("SELECT car".gdrcd_filter('num',$skill['car'])." AS car_now FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$bonus = gdrcd_query("SELECT SUM(oggetto.bonus_car".gdrcd_filter('num',$skill['car']).") as bonus FROM oggetto JOIN clgpersonaggiooggetto ON clgpersonaggiooggetto.id_oggetto=oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome='".$_SESSION['login']."' AND clgpersonaggiooggetto.posizione > 1");
gdrcd_query("INSERT INTO chat ( stanza, imgs, mittente, destinatario, ora, tipo, testo )
VALUES (".$_SESSION['luogo'].",
'".$_SESSION['sesso'].";
".$_SESSION['img_razza']."',
'".$_SESSION['login']."', '', NOW(), 'C', '".$_SESSION['login'].' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['uses']).' '.gdrcd_filter('in',$skill['nome']).': '.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$skill['car'].'']).' '.gdrcd_filter('num',$car['car_now']+$racial_bonus['racial_bonus']).', '.$chat_dice_msg.' '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['ramk']).' '.gdrcd_filter('num',$rank['grado']).', '.gdrcd_filter('in',$MESSAGE['chat']['commands']['use_skills']['items']).' '.gdrcd_filter('num',$bonus['bonus']).', '.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
{
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'])."')");}
/*TIRO DI DADO PER LANCIARE TANTI D6 PARI AL POOL*/
}
else
{mt_srand((double)microtime()*1000000);
$a = (int)$_POST['menu_1'];
$b = (int)$_POST['menu_2'];
$c = (int)$_POST['menu_3'];
$pool = $somma = ($a + $b + $c);
$risultato = array();
for ( $i = 0; $i <= $pool; $i++ ) {
$d6 = mt_rand(1,6);
$risultato[] = $d6;
};
$chat_message = "hai ottenuto:" .$risultato;
}
}
Da quello che ho capito, il codice viene caricato correttamente ma, nell'effettivo, non viene immesso nella form action, per farlo stampare in chat.
Come posso rimediare? Se servono altre parti di codice fate sapere!
08/05/2020 21:44:12
l'errore e' di sintassi hai messo un else dopo un altro else, il tuo codice dovresti metterlo dentro ad uno dei tuoi casi. Traducendo il codice:
if(condizione) {
//Code
}}
Se (if) quello che viene scritto nella parentesi e' vero allora esegui il codice dentro le graffe
else {
//Code
}
altrimenti (else) esegui il codice nelle graffe
09/05/2020 22:36:05
Non era solo quello l'errore, ma sono riuscita a correggere :D....non riesco però a fargli prendere la "caratteristica"
attualmente ho
car0, car1, car2, car3, car4
che sono le varie caratteristiche.
con il menù a tendina si va a selezionare il "numero" dell'abilità
<select name="menu_1" id="menu_1">
<option value="no_stats"> -- </option>
<option value="0"> <?php echo gdrcd_filter('out',$PARAMETERS['names']['stats']['car0']); ?> </option>
<option value="1"> <?php echo gdrcd_filter('out',$PARAMETERS['names']['stats']['car1']); ?> </option>
<option value="2"> <?php echo gdrcd_filter('out',$PARAMETERS['names']['stats']['car2']); ?> </option>
</select>
Mi si presenta il problema nel lancio di dadi
ho impostato
$id_1 = $_POST['menu_1'];
$id_2 = $_POST['menu_2'];
Ho creato le variabili per le caratteristiche...ma non riesce a pescare le informazioni da Database, bloccando tutto lo script
$a = gdrcd_query("SELECT car".$id_1." FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$b = gdrcd_query("SELECT car".$id_2." FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
$c = $_POST['menu_3'];
$pool = $somma = ($a + $b + $c -1);
$risultato = '';
for ( $i = 0; $i <= $pool; $i++ ) {
$d6 = mt_rand(1,6);
$risultato .= ' ' .$d6;
};
Non riesco a comprendere come mai la caratteristica $a non viene associata alla car$id_1 associata.
Se glie le faccio stampare a video è tutto ok! le visiona normalmente
gdrcd_query("INSERT....
VALUES ("...
NOW(), 'C',
.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_1]).
.gdrcd_filter('in',$PARAMETERS['names']['stats']['car'.$id_2]).
"
(non ho messo tutto il codice per non spaginare)
Nel senso, se la car1 si chiama Forza ed ha valore 3 per il personaggio, in video stampa normalmente Forza, ma non riesco a fargli caricare il valore 3
Avevo anche pensato di mettere direttamente
$a = .gdrcd_filter('out',$record['car.$id_1.']).
andando a definire prima
$query = "SELECT personaggio.*, FROM personaggio WHERE personaggio.nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'";
$result = gdrcd_query($query, 'result');
$record = gdrcd_query($result, 'fetch');
gdrcd_query($result, 'free');
ma...non funziona ed ovviamente è una complicazione inutile e sciocca.
10/05/2020 00:49:12
Ho letto più volte quello che hai scritto, ma non sono riuscito a capire cosa vuoi ottenere.
Potresti scrivermi un esempio di quello che vuoi che viene stampato alla fine?
10/05/2020 12:15:49 e modificato da vivi1400 il 10/05/2020 12:16:32
penso che la domanda sia banalmente "cosa sbaglio nel fargli leggere un dato dal database?"
faccio una situazione esempio
Personaggio
car5 = 3
nel vocabolario car5 si chiama ad esempio Forza
<select> menu_1
<option value=5> Forza </option>
</select>
nel codice per il lancio dado ho creato due variabili
$id_1 = $_POST(menu_1); //funziona regolarmente. Prende il valore 5, come indicato dal select
$a = gdrcd_query("SELECT car".$id_1." FROM personaggio WHERE nome = '".$_SESSION['login']."' LIMIT 1");
La seconda variabile dovrebbe selezionare dal database il valore numerico di car"$id_1" (nel caso esempio, dovrebbe darmi car5, e quindi valore 3......però non funziona)
Essenzialmente il dubbio che non comprendo, è come fare in modo che la variabile $a assuma valore car"$id_1" pescandolo dal database del personaggio che sta lanciando i dadi.
Cosa ho sbagliato nella stringa per far leggere il DB?
Scusa ancora per l'incomprensione precedente!
10/05/2020 23:15:28
Essenzialmente il problema e' che con la query ottieni un array quindi il valore Forza si trova sotto $a['car5']
11/05/2020 21:19:31
breaker ha scritto: Essenzialmente il problema e' che con la query ottieni un array quindi il valore Forza si trova sotto $a['car5']
perdonami forse la domanda sciocca ma non ho capito T_T Nel senso, a me un array non mi occorre, ma un valore singolo (o al limite metto un ulteriore variabile per far estrarre il singolo numero)
Che cosa potrei utilizzare per farmi prendere il valore della caratteristica?
Nel senso car02 = 5, a me occorre estrarre dal database il 5
grazie ancora
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tiles Survive ↗
RAID Shadow Legends ↗
Sea of Conquest ↗
World of Warship ↗
Cafuné ↗
Neverness to Everness ↗
Hero Wars ↗
War Thunder ↗