Dado che da 0
Dado che da 0 postato il 07/01/2014 12:08:36 nel forum programmazione, open source e hosting
Salve.
Ieri è uscito con un tiro che il dado può dare come risultato anche 0 (zero) cosa che non avevo mai considerato, abituata a lanciare dadi veri dove il minimo fattibile è 1 (che origina un critico negativo).
Si può correggere questa cosa o devo stabilire che ora il critico negativo comprende sia 0 che 1?
Grazie.
Pagine → 1
07/01/2014 13:11:55 e modificato da syon88 il 07/01/2014 13:16:02
Il codice è un gdrcd 5.1 (informazione presa nella home del gioco)
Inoltre è stato usato l'input per il lancio delle abilità in chat, credo che l'errore sia presente nel pezzo di codice relativo.
07/01/2014 13:58:01
spyker ha scritto: Dovrebbe postare quella parte di codice, perché non so che modifiche ha apportato ne tanto meno se il suo GDRCD 5.1 è aggiornato con gli ultimi bug fix che all'epoca dell'uscita dell'OS vennero implementati.
Nel sorgente originale, il dado funziona perfettamente (lo so perché ho usato più volte i dadi del GDRCD 5.1 e funzionavano bene).
Grazie davvero della pronta risposta che mi avete dato :) Vi posto tutto se mi dite in che file del GDRCD 5.1 Advanced devo cercare, perché non sono un programmatore.
Grazie.
07/01/2014 14:57:00
spyker ha scritto: Il codice incriminato sta nel file ref_header.inc.php
Spero di aver preso la parte corretta :p
if ($PARAMETERS['mode']['dices']=='ON')
{
mt_srand((double)microtime()*1000000);
$die = mt_rand(1,(int)$_POST['dice']);
$chat_dice_msg = gdrcd_filter('in', $MESSAGE['chat']['commands']['use_skills']['die']).' '.gdrcd_filter('num',$die).',';
}else
{
$chat_dice_msg = '';
$die = 0;
}
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'])."')");
}
07/01/2014 18:30:49
Non c'è niente da correggere lì...si vede bene che il lancio del dado non può scendere sotto l'1 (mt_rand(1,(int)$_POST['dice']))
Ma quello è il tiro libero del dado; nel file c'è sicuramente almeno un'altra chiamata a mt_rand che implementa i tiri su caratteristica. Basta controllare che il primo numero dopo la parentesi tonda sia sempre 1
07/01/2014 20:41:25
leoblacksoul ha scritto: (mt_rand(1,(int)$_POST['dice']))
Ma quello è il tiro libero del dado; nel file c'è sicuramente almeno un'altra chiamata a mt_rand che implementa i tiri su caratteristica. Basta controllare che il primo numero dopo la parentesi tonda sia sempre 1
Ho controllato e in effetti c'è un altro pezzo, ma mi pare che anche lì ci sia 1 dopo la parentesi.
/** * 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, 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',$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])."')");
}
}
07/01/2014 21:17:26
Probabilmente qualche caratteristica/abilità ha un valore negativo.
07/01/2014 22:04:57
blancks ha scritto: Probabilmente qualche caratteristica/abilità ha un valore negativo.
No Blanks, il risultato del lancio in totale dava 22
20 di caratteristica, 2 di abilità, 0 di oggetti e 0 di dado.
27/04/2014 14:37:52
Abbiamo capito: il dado da 0 quando l'utente non seleziona il tipo di dado che vuole tirare (d6, d10, d20, ecc.).
Sarebbe sicuramente più utile se il programma avvertisse in questi casi l'utente della necessità di selezionarlo, tuttavia, compreso il meccanismo è tranquillamente gestibile in gioco dai master.
Direi che questo topic può anche essere chiuso ^^
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 ↗
Hero Wars ↗
War Thunder ↗
Enlisted ↗