Cómo cambiar el bt de los juegos móviles
Las modificaciones de BT pueden destruir la diversión original del juego, por lo que no lo recomiendo. Esto es sólo un intercambio técnico. Sin embargo, si quieres experimentar la diversión del juego, descarga la versión original tú mismo.
Herramientas: halo2.0, DJ Java Decompiler
Juego Java: Legend of Heroes s60 versión original (S60V3, 240*320) (Este artículo solo da un ejemplo. Por qué el original ¿Por qué solo la versión S60? Esto es para permitir que más fanáticos modifiquen la versión china de Legend of Heroes por sí mismos, porque estarás motivado si quieres jugar (si usas mi MOD directamente, no podrás aprender). BT's MOD) p>
1. Preparación de datos
¿Qué es la preparación de datos? ¿Por qué necesitamos preparar datos? En resumen, ¿qué datos necesitamos modificar y cuáles son los iniciales originales? valores en el juego? Entonces, comencemos simulando y veamos qué datos de atributos queremos cambiar.
¡Eeewww! De hecho, mientras sigas presionando la tecla F3, el juego se ralentizará. Después de ingresar al juego, accederás a la interfaz del menú de personajes.
Bien, ¡los datos principales son los siguientes! dinero 300
Imagen 1: Nivel número 1, valor de experiencia 0, la actualización requiere valor de experiencia 80, valor de salud 72/72, valor de maná 60/60
Imagen 2: Fuerza 8, salud 5, agilidad 3, voluntad 4, ataque 16, defensa 5
Figura 3: se pueden sumar 0 puntos
2 Buscar y modificar datos
Entonces. , busquemos estos datos uno por uno y modifíquelos a los valores BT que desee. Revise el tutorial sobre cómo modificar bb, abra halo2.0, seleccione el editor de clases, edite, busque en texto completo, ingrese 300 (¿por qué?). 300), debido a que este valor es relativamente especial, la tasa de repetición es relativamente baja. Si elige 1, 0, 8 u otros, puede encontrar muchos y los entusiastas sin conocimientos de programación se sentirán confundidos sobre cuál elegir. ¿Por qué no elegir este? ¡Muy especial! Quiero contarte algunas noticias desafortunadas al buscar en este juego, lo que te puedo decir es que no se encuentran. es el análisis de los archivos compilados en el futuro). Solo se encontró un objetivo y los parámetros se modificaron de acuerdo con el tutorial de bb: Dinero 300, fuerza 8, vida 5, agilidad 3, voluntad 4, 5 valores.
Entonces, según el método de bb, ¿por qué no puedo encontrar otros valores relevantes? ¿Y si tengo que modificarlo? En realidad, hay dos formas de asignar valores de atributos, una es explícita, como i = 300 o a = 5, y el tutorial de bb solo puede modificar estos datos. El otro es implícito, como a = (b c)*100, etc. Este tutorial se centra en la modificación de valores implícitos.
En términos generales, si asigna valores de atributos, estarán en el mismo archivo de clase, por lo que como encontramos la clase para money300, también deberíamos encontrar los otros valores de atributos.
Entonces, ¿en qué archivo de clase se encuentra money300? La respuesta está en el nombre de la clase en los resultados de la búsqueda: ao.
Ahora use DJ para descompilar ao.class, busque 300 y luego encuentre a_g_fld.a = 300, es decir, el nombre de la variable de; El dinero es a_g_fld a, ¡el valor es 300! Luego busqué 8, 5, 3 y 4 respectivamente, ¡y los encontré todos!
Ejemplo 6: // '\006'
b_short_fld = 8;
e_short_fld = 5
f_short_fld = 3;
g_short_fld = 4;
a_e_array1d_fld[0] = (e)ad.a((byte)0, (byte)0, verdadero, falso);
a_e_array1d_fld[0].b = true;
a_e_array1d_fld[0].h = 1;
break;
Oh, la variable de potencia se llama b_short_fld La siguiente analogía no lo explicará.
Luego busqué 72 y descubrí que no estaba allí. Esto también confirma que se trata de una asignación implícita. Entonces, ¿qué debemos hacer? Hay tantas variables que parece que a los personajes les da vueltas la cabeza, pero aún es difícil saber cuál es cuál. Al principio lo pensé durante mucho tiempo, analizándolos uno por uno, pero fue demasiado lento. Así que primero busqué b_short_fld para ver si podía encontrar el quid.
h_short_fld = ((b_short_fld m) * 4) / 5;
i_short_fld = (b_short_fld m) / 5;
dataoutputstream.writeShort(b_short_fld);
¿No son los dos primeros los llamados implícitos? ¿Qué representan h y i? Ignoralos por ahora. La última oración es una operación de flujo io, lo que significa escribir el valor de la variable b_short_fld. Esta frase nos da algo de inspiración.
Porque resulta
dataoutputstream = new DataOutputStream(bytearrayoutputstream)).writeByte(f_byte_fld);
dataoutputstream.writeByte(g_byte_fld);
dataoutputstream.writeShort(e_short_fld);
dataoutputstream.writeShort(f_short_fld);
dataoutputstream.writeShort(g_short_fld);
Siempre que encuentres la fuente de estos datos, que es la fuente de los valores de los atributos. Las últimas 4 variables son los 4 parámetros de atributos del tutorial de bb, por lo que no los discutiré aquí.
1. Comencemos con la variable f_byte_fld. Primero busque qué representa esta variable. Hay 3 lugares para buscar esta variable: ****. Los dos primeros son escritura y lectura, y el otro asigna el valor inicial del byte público f_byte_fld = 0, así que no lo comprobaré por ahora.
2. Variable g_byte_fld, o búsqueda, g_byte_fld = 1; también hay algunos juicios que se omiten y los entusiastas interesados pueden estudiarlos por sí mismos.
Además, si (g_byte_fld lt; 99)
{g_byte_fld;
......
}
Adivina el nivel. Si la variable es menor que 99, recurre... Después de la prueba, de hecho es la variable la que representa el nivel. Luego intentemos cambiar la variable a 11, es decir, cambiar g_byte_fld = 1 a g_byte_fld = 1; entonces esta es una función explícita. El método de modificación es el mismo que el del tutorial de bb. /p>
3 .Variable a_int_fld = d_int_fld; b_int_fld = e_int_fld; Luego primero miramos la variable d_int_fld int_fld
d_int_fld = (e_short_fld n g_byte_fld) * 12;
e_int_fld = (g_short_fld p g_byte_fld) * 12 ;
Nos da algo de esperanza. Dado que 72 y 60 son múltiplos de 12, probablemente esto sea lo que estamos buscando.
Hasta donde sabemos, e_short_fld = 5, g_short_fld = 4 (mencionado anteriormente), por lo que g_byte_fld es el nivel mencionado en la Sección 2, es decir, los valores de salud y magia están relacionados con la vida y la voluntad. , están relacionados con el nivel. Entonces, ¿qué significan n y p?
anulación final pública n()
{
e ae1[] = (e[])a_e_array1d_fld;
m = 0 ;
n = 0;
o = 0;
p = 0;
for(int i1 = 0; i1 lt ; 5; i1 )
if(ae1[i1] != nulo)
{
m = ae1[i1].j[0];
n = ae1[i1].j[1];
o = ae1[i1].j[2]; .j[3];
}
No hay diferencia entre n() y la asignación en recursividad. Los valores iniciales son n = 0 y p = 0; después de la sustitución, d_int_fld = 72; e_int_fld = 60, ^_^ y finalmente el valor real. Entonces la modificación más simple es modificar el coeficiente 12, porque esto no cambia la fórmula original y es fácil de operar. Por supuesto, también puedes modificarlo a otros valores. Cambialo como dices, cambia 12 por 60, en teoría debería ser 360 y 300.
Pasos de operación para Halo2.0: abra el frasco y seleccione ao.class. Haga clic derecho para editar la clase, como se muestra a continuación:
Descompile, d_int_fld = (e_short_fld n g_byte_fld) * 12 en public final void n (), luego use el método halo2.0 para encontrar n; , y encuentre que n debe ser Busque n en los métodos 360 y 300.0, y encuentre que el control de acceso público y final han sido verificados, y el tipo es nulo, que es exactamente el mismo que cuando se descompiló, y luego seleccione el código bajo el método n, como se muestra en la figura
Cambie el 12 en 159 bipush 12 y 180 bupush 12 a 60, guarde el método, compile, empaquete y ejecute:
es consistente con la suposición. Por supuesto, Binggo también puede modificar directamente la función implícita, lo cual no se discutirá aquí.
(No hay restricciones para las modificaciones. Siempre que se te ocurra, hay muchas formas de modificarlo. Solo proporciono algunas ideas)
Entonces, ¿qué es a_int_fld encontrado antes? Sigue buscando,
public final void b(int i1)
{
a_int_fld = i1;
if(a_int_fld gt ; d_int_fld )
a_int_fld = d_int_fld;
if(a_int_fld lt; 0)
a_int_fld = 0;
bs.a_as_static_fld c( );
if(a_int_fld == 0)
{
a((byte)6);
super k =. 0;
u = 24;
regresar
} más
{
regresar
p>
}
}
Por lo tanto, podemos saber que a_int_fld representa el valor actual de salud. Asimismo, sabemos que b_int_fld representa el valor actual del valor mágico.
4. Variable c_int_fld, c_int_fld = 0; el valor inicial es 0, ¿es un valor empírico? Continuar leyendo,
public final void f(int i1)
{
i1 *= 4;
for(c_int_fld = i1 ; c_int_fld gt; = f_int_fld;)
{
c_int_fld -= f_int_fld;
r();
}
if(c_int_fld lt; 0)
c_int_fld = 0;
bs.a_as_static_fld.e();
a_p_fld.a(i1)
}
Ahora que aparece f_int_fld, lo encontrarás buscando
f_int_fld = (g_byte_fld * g_byte_fld * g_byte_fld - g_byte_fld * g_byte_fld) 80 * g_byte_fld ;
Me emocioné cuando vi 80, porque el valor inicial de g_byte_fld es 1 (ya buscado antes), luego el valor inicial de f_int_fld es 80, jaja, finalmente encontré los puntos de experiencia necesarios para actualizar. . Para verificar nuestra conjetura, intenta cambiar 80 a 99, como se muestra en la imagen, de hecho es así:
Jaja, simplemente cambia f_int_fld a 1. Puedes alcanzar el nivel N matando un monstruo. , o una función compilada por mí mismo, que te permite subir de nivel venciendo a un monstruo.
Volviendo a c_int_fld hace un momento, cuando c_int_fld = i1; c_int_fld gt; = f_int_fld;, c_int_fld = i1; c_int_fld -= f_int_fld; Porque, si c_int_fld = 82gt;80 entonces sube de nivel y el valor de la experiencia se convierte en 82-80 = 2. c_int_fld = 0, intenta cambiar 0 a 66.
Se modifica la declaración de asignación de variables en el método público final void c (byte byte0) y se obtiene la siguiente imagen:
En este punto, todos los parámetros involucrados en la Figura 1 incluyen el número de nivel, el valor de la experiencia y el valor de la experiencia. requerido para mejorar y valor de vida, maná. Todos han sido encontrados y modificados.
5.a.addElement(new aw((byte)4));
a_short_fld = 3;
}
Análisis , la variable a_short_fld representa la cantidad de puntos que se pueden agregar después de que se puede agregar el elemento. ¿Por qué sucede esto? En primer lugar, el valor inicial es 0. Además, en el nivel lt;99, cada variable de subida de nivel tiene su propio número base de 3, que se especula que representa la cantidad de puntos que se pueden agregar después de la actualización. Como se muestra en la figura después de la modificación:
En este punto, los datos escritos en el proceso de operación de io se han analizado uno por uno. Sin embargo, todavía parecen faltar los valores de ataque y defensa en la Figura 2. Entonces, ¿dónde se esconden? De hecho, lo busqué durante mucho tiempo pero no pude encontrarlo. Más tarde me di cuenta de que el valor de ataque está relacionado de alguna manera con el valor de poder a medida que se modifica el valor de poder, el valor de ataque también cambiará.
Entonces, hagamos una búsqueda de la variable b_short_fld. Encontrado
h_short_fld = ae1[0] == null ?0: ((short) (ae1[0].a (ae1[0].e * 5) / 2));
h_short_fld = ((b_short_fld m) * 4) / 5;
i_short_fld = ae1[1] == null ?0: ((corto) (ae1[1].a ae1[1 ] .e));
i_short_fld = ae1[2] == null ?0: ((corto) (ae1[2].a ae1[2].e * 2));
i_short_fld = ae1[3] == nulo ?0: ae1[3].a;
i_short_fld = ae1[4] == nulo ?0: ae1[4].a; p>
i_short_fld = (b_short_fld m) / 5;
i_short_fld = g_byte_fld / 3;
h_short_fld e i_short_fld son funciones implícitas muy especiales relacionadas con el poder, dignas de nuestra atención.
Después de la modificación, descubrimos que de hecho es como esperábamos (la forma en que cambian las variables específicas no se expandirá e involucra una base de datos con muchas variables. Me temo que muchos fanáticos se confundirán después leerlo. Los fanáticos interesados pueden consultar algunos conocimientos básicos).
El 4 en h_short_fld =((b_short_fld m)*4)/5 se cambia a 40, y la división idiv en i_short_fld =g_byte_fld/3 se cambia a multiplicación imul (los gráficos específicos no aparecen en la lista, si puedes operarlo hábilmente, no debería haber ningún problema con halo2.0, pero el desplazamiento es 433: idiv, edita (avanzado) y cámbialo a imul)
Después de obtenerlo, el ataque se convierte en 74 y la defensa se convierte en 8
3. Resumen: este tutorial explica principalmente cómo encontrar datos de objetivos. El funcionamiento de halo2.0 no se explica en detalle, ¡comprenda!
Todos los datos en la preparación de datos se han encontrado uno por uno.
La modificación de BT no es una tarea fácil y requiere cierta paciencia y deliberación.