not
Nuevo miembro
- Mensajes
- 13
- Puntuación de reacción
- 8
Aumentar variables
Con este snippet podrás usar mas variables de las permitidas por Sanny Builder que son 32 variables (0@ a 31@).
Hay 2 maneras fáciles para implementar en nuestros mods.
Manera 1
Se usara el "Alloc"
Por ejemplo:
Estaría usando 128 variables y dejando 1 sobrante.
Si no hace esto le daría un error y posiblemente un crasheo.
Como usarlo?
En este ejemplo usamos 20 variables para escribir un valor random en ellas y para obtener su valor se usa un FOR iterando entre 20 que es el numero de las variables y a la ves dándoles una ID para que en el bucle principal podamos leerlas.
Funciones con una breve explicación de su uso y parámetros.
Manera 2
En este caso se tendrá que poner las variables manualmente en hex y ponerlo al final del script (En este caso se puede donde quiera pero para fines prácticos es mejor al final del script) y se usara el opcode
De la siguiente manera se debe poner para acceder a las variables.
Por ejemplo:
De esta manera podrá guardar la información de las variables sin necesidad de agregar una de mas como la manera 1, pero es menos practico añadir las variables manualmente.
Como usarlo?
En este caso a diferencia del metodo 1 no le asignaremos memoria ya que lo leerá desde el hex que hemos añadido, también usamos 20 variables para escribir un valor random en ellas y para obtener su valor se usa un FOR iterando entre 20 que es el numero de las variables y a la ves dándoles una ID para que en el bucle principal podamos leerlas.
Funciones con una breve explicación de su uso y parámetros.
Si hay algún error no dude en comentarlo aquí.
bynot
Con este snippet podrás usar mas variables de las permitidas por Sanny Builder que son 32 variables (0@ a 31@).
Hay 2 maneras fáciles para implementar en nuestros mods.
Manera 1
Se usara el "Alloc"
0AC8: 0@ = allocate_memory_size 512 para guardar y sacar la información escrita en las variables, recordar que es IMPORTANTE siempre agregar mas tamaño del que va a usar.Por ejemplo:
Alloc 0@ 512 Con su opcode 0AC8: 0@ = allocate_memory_size 512Estaría usando 128 variables y dejando 1 sobrante.
Si no hace esto le daría un error y posiblemente un crasheo.
Como usarlo?
En este ejemplo usamos 20 variables para escribir un valor random en ellas y para obtener su valor se usa un FOR iterando entre 20 que es el numero de las variables y a la ves dándoles una ID para que en el bucle principal podamos leerlas.
Código:
{$CLEO}
Thread "Variables"
// <-- Le damos memoria que es equivalente a 20 variables. (21 variables en total pero dejamos 1 libre)
Alloc 0@ 80
// <-- Este bucle es para iterar sobre las 20 variables agregandole su ID mas un valor random
For 1@ = 0 To 20
0209: 2@ = random_int_in_ranges 0 15641
Call @AllocWrite 3 Buffer 0@ ID 1@ Value 2@
If
1@ >= 20
Then
Break
End
End
// <-- Bucle Principal
While True
For 1@ = 0 To 20 // Se iteran las 20 variables para obtener su valor
Wait 1000 ms
Call @AllocRead 2 Buffer 0@ ID 1@ RetValue 2@
Printf "Var ID: %d - Value: %d" 5000 1@ 2@ // <-- Se imprime su valor en pantalla
If
1@ >= 20
Then
Break
End
End
End
Funciones con una breve explicación de su uso y parámetros.
Código:
/*|||||||||||||||||||| Manera 1 ||||||||||||||||||||*/
/*
Parametros:
Buffer: es la referencia del buffer a donde se guardaran las variables
ID: es la identificacion de la variable
Value: es lo que se va a guardar en esa variable
Uso:
Call @AllocWrite 3 Buffer 0@ ID 1@ Value 2@
*/
:AllocWrite
1@ *= 4 // Se multiplica el ID
005A: 1@ += 0@ // (int) Sumamos el ID con el puesto de la variable del buffer
0A8C: write_memory 1@ size 4 value 2@ virtual_protect 1 // Escribimos
Ret 0
/*
Parametros:
Buffer: es la referencia del buffer a donde se optendra las variables
ID: es la identificacion de la variable
RetValue: es lo que se guardo en esa variable
Uso:
Call @AllocRead 2 Buffer 0@ ID 1@ RetValue 2@
*/
:AllocRead
1@ *= 4 // Se multiplica la ID
005A: 1@ += 0@ // (int) Sumamos el ID con el puesto de la variable del buffer
0A8D: 2@ = read_memory 1@ size 4 virtual_protect 1 // Leemos
Ret 1 2@
Manera 2
En este caso se tendrá que poner las variables manualmente en hex y ponerlo al final del script (En este caso se puede donde quiera pero para fines prácticos es mejor al final del script) y se usara el opcode
0AC6: 0@ = label @Variables offset para poder acceder a las variables.De la siguiente manera se debe poner para acceder a las variables.
Por ejemplo:
:Variables
Hex
00 00 00 00 // Variable 0
00 00 00 00 // Variable 1
00 00 00 00 // Variable 2
00 00 00 00 // Variable 3
EndDe esta manera podrá guardar la información de las variables sin necesidad de agregar una de mas como la manera 1, pero es menos practico añadir las variables manualmente.
Como usarlo?
En este caso a diferencia del metodo 1 no le asignaremos memoria ya que lo leerá desde el hex que hemos añadido, también usamos 20 variables para escribir un valor random en ellas y para obtener su valor se usa un FOR iterando entre 20 que es el numero de las variables y a la ves dándoles una ID para que en el bucle principal podamos leerlas.
Código:
{$CLEO}
Thread "Variables"
// <-- Iteramos sobre las 20 variables y a la ves le damos una ID
For 0@ = 0 To 20
0209: 1@ = random_int_in_ranges 0 15641
Call @HexWrite 2 ID 0@ Value 1@
If
0@ >= 20
Then
Break
End
End
// <-- Bucle Principal
While True
For 0@ = 0 To 20 // <-- Se itera sobre las 20 variables para obtener su valor
Wait 1000 ms
Call @HexRead 1 ID 0@ RetValue 1@
Printf "ID: %d - Value: %d" 5000 0@ 1@ // <-- Imprimimos el valor
If
0@ >= 20
Then
Break
End
End
End
Funciones con una breve explicación de su uso y parámetros.
Código:
/*|||||||||||||||||||| Manera 2 ||||||||||||||||||||*/
/*
Parametros:
ID: es la identificacion de la variable
Value: es lo que se va a guardar en esa variable
Uso:
Call @AllocRead 2 Buffer 0@ ID 1@ RetValue 2@
*/
:HexWrite
0AC6: 31@ = label @HexVars offset // Donde escribir las variables en HEX
0@ *= 4 // Se multiplica el ID
005A: 0@ += 31@ // (int) Sumamos el ID con el puesto de la variable en HEX
0A8C: write_memory 0@ size 4 value 1@ virtual_protect 1 // Escribimos
Ret 0
/*
Parametros:
ID: es la identificacion de la variable
RetValue: es lo que se guardo en esa variable
Uso:
Call @HexRead 1 ID 1@ RetValue 2@
*/
:HexRead
0AC6: 31@ = label @HexVars offset // Donde leer las variables en HEX
0@ *= 4 // Se multiplica la ID
005A: 0@ += 31@ // (int) Sumamos el ID con el puesto de la variable en HEX
0A8D: 30@ = read_memory 0@ size 4 virtual_protect 1 // Leemos
Ret 1 30@
:HexVars
Hex
00 00 00 00 // Variable 0
00 00 00 00 // Variable 1
00 00 00 00 // Variable 2
00 00 00 00 // Variable 3
00 00 00 00 // Variable 4
00 00 00 00 // Variable 5
00 00 00 00 // Variable 6
00 00 00 00 // Variable 7
00 00 00 00 // Variable 8
00 00 00 00 // Variable 9
00 00 00 00 // Variable 10
00 00 00 00 // Variable 11
00 00 00 00 // Variable 12
00 00 00 00 // Variable 13
00 00 00 00 // Variable 14
00 00 00 00 // Variable 15
00 00 00 00 // Variable 17
00 00 00 00 // Variable 18
00 00 00 00 // Variable 19
00 00 00 00 // Variable 20
End
Si hay algún error no dude en comentarlo aquí.
bynot