Comunidad de diseño web y desarrollo en internet online

ayuda para script roll dice por comando.

Citar            
MensajeEscrito el 22 Nov 2011 06:44 pm
buenas chicos vengo recurriendo al foro en busca de ayuda.
tengo un script qye al escribir en una caja /roll 4d20+12
deberia hacer lo siguiente:

capturar en la variable A en 4
capturar en la variable B en 20
capturar en la variable C en +12
lo trato de hacer de la siguiente forma:

Código PHP :

$pattern = "/.* (\d*)[a-z](\d*)+(\d*).*/i";
preg_match($pattern ,$harset, $matches);
$dices = $matches[1];
$side = $matches[2];
$modif = $matches[3];
$trf=0;
while($trf<=$dices){
    $trf++;
    $rolll=$rolll+mt_rand(1,$side);
}
$rolll=$rolll+$modif;


no me esta funcionando al imprimir la variable $roll me imprime 1 y si le agrego modificador imprime 0

"Ha sacado un roll de:<font color=\"red\"> ".$rolll."</font>" ;

alguna idea de que me esta fallando?

Por arcanisgk

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Nov 2011 12:36 pm
No sé qué es "roll" y el resto de las cosas que dices pero sí entiendo que sebes capturar un patrón de una cadena de caracteres. ¿Podrías decirnos cuál es ese patrón y qué datos quieres sacar de él?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 Nov 2011 10:12 pm
los datos son aleatorios:
tenes un imput text para capturarlos al pasar el valor a php son capturados en la variable
$harset
puede ser cualquier cosa lo que aya escrito el usuario pero el el caso de que escriba un ejemplo:

/roll 4d20+12
o
/roll 6d8+5
o
/roll 20d100+36

lo que no cambia es /roll AdB+C

no se si me entiendes

Por arcanisgk

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Nov 2011 12:49 pm
Lo lamento pero sigo sin entender.

Y no has respondido mi pregunta.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 Nov 2011 06:18 pm
a ver roll es parte de la cadena de caracteres, yo encontré un scrip para irc donde al escribir /roll entra a dicho comando /roll ahora Roll es el comando utilizado en el chat para lanzar dados pero es algo básico ejemplo actualmente el scrip simplemente tira un numero aleatorio entre 1 y 18 cosa que es un poco tedioso cuando necesitas un numero entre 1 y 100 para eso estoy buscando la forma de hacer que el scrip leea la cadena de caracteres completa:

"/roll 20d100+36" y esta es guardada en la variable $harset

lo que se desea es que el scrip recorra la cadena completa y en el momento que encuentre los primeros dígitos numéricos los guarde en la variable a luego encontrara la letra d después de la letra d guardara en los siguientes dígitos numéricos en la variable B hasta encontrar un signo de + o - después de esto seguirá el recorrido y guardara los dígitos numéricos en la letra C

el formato del recorrido standar seria el siguiente:

/roll "A" d "B" +o- "C"

no se como esplicarlo de mejor forma.

Por arcanisgk

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Nov 2011 12:18 pm
A ver. La cadena está compuesta por la barra seguida de la palabra "roll" seguida de un espacio al cual le sigue un número de una o dos cifras seguido de la letra "d" minúscula, a esta le sigue un número de una, dos o tres cifras seguido de cualquiera de los símbolos más o menos una sola vez seguido de un número de una o dos cifras, ¿es eso?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Nov 2011 03:28 pm
si exacto.

Por arcanisgk

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Nov 2011 03:49 pm
Atento al código porque tendrás que modificarlo para adaptarlo a lo que quieres. En el array $match están los datos que buscas. Asumo que la cadena objetivo es multilinea y puede contener el patrón más de una vez.

Código PHP :

<?php
   $patron = "/\/roll\s(\d{1,2})d(\d{1,3})\+(\d{1,2})/im";
   $cadena = <<<end
/roll 4d20+12
o 
/roll 6d8+5
o
/roll 20d100+36
end;
$i = preg_match_all($patron, $cadena, $match);
echo "<pre>"; print_r($match); echo "</pre>";
?>

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Nov 2011 04:34 pm
ok el inconveniente esta en que no es una cadena string definida
la variable $cadena es capturada de un input text
$cadena=$_post['texto']

Ejemplo escrito por el usuario en cadena input: 4d8+12
algo así la idea es guardar los números en variables.
$A,$B y $C para luego utilizarlos en la formula:


Código PHP :

<?php
$patron = "/\/roll\s(\d{1,2})d(\d{1,3})\+(\d{1,2})/im";// se establece el patron
$cadena =$_post['texto'];
$i1 = preg_match_all($patron, $cadena, $match);
//guardamos los 3 valores numéricos segun la estructura siguiente /roll "A"d"B"+"C"
$A = $match[0];//contiene el valor 4 o el digito escrito por el usuario
$B = $match[1];//contiene el valor 8 o el digito escrito por el usuario
$C = $match[2];//contiene el valor 12 o el digito escrito por el usuario

$trf=0;
echo " ha sacado un roll de:"
while($trf<=$A){
$dat=mt_rand(1,$B);// hacemos randon a cada Cantidad de dados
echo " $dat ,";//imprimimos cada roll
$rolll=$dat+$rolll;//vamos sumado el total de los dados usados
$trf++;
}
echo " Total: $rolll , ";//al final imprimimos el total
$rolll=$rolll+$C;
echo " Total mas modificador: $rolll . ";//Y también imprimirnos el total + modificación
?>

LA salida en pantalla debe de salir así:

Código HTML :

Ha sacado un roll de $dat, $dat, $dat Total: $rolll , Total mas modificador: $rolll .

a ver si me entiendes.

Por arcanisgk

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 25 Nov 2011 05:08 pm
Te contradices de nuevo. Te he preguntado explícitamente por el patrón de la cadena esperada. Me has confirmado que el patrón es el que he dicho. Ahora dices que el patrón es otro (no lleva "/roll ").

Si la cadena es de una sola línea entonces te conviene usar preg_match() en vez de preg_match_all(). Lee la referencia de estas funciones en php.net por favor.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Nov 2011 05:29 pm
es que no te entiendo al decir patrón a que te refieres te estoy dando ejemplos de las cadenas que pueden ser escritas no te estoy diciendo que son exactamente esas son variables no constantes espero que entiendas que la cadena de caracteres la introducirá el usuario y esta es variable osea el usuario puede escribir cualquier cosa

ahora de la cadena de caracteres lo siguiente es estricto:

/roll 5d16+15
/roll "variable numérica A"d"variable numérica B"+o-"la variable numeraria C"
guardar cada serie de números en una variable diferente.
estos valores se deben sacar de la cadena "/roll 5d16+15"
Variable A=5
Variable B=16
Variable C=+15 (esta debe guardarse con el signo)

no existe una cadena string estricta o constante los NUMEROS PUEDEN VARIAR

"/roll 1d4+3"
"/roll 80d20+10"
puede ser cualquier los números.

Por arcanisgk

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 26 Nov 2011 02:25 pm
Ahá... bueno, hasta aquí llego. Hasta donde sé, la expresión regular que te he puesto hace lo que dices que debería hacer: capturar los datos variables de la cadena objetivo. Los detalles de implementación corren por tu cuenta. Un saludo.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.