Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Button [help] (https://www.clubdelphi.com/foros/showthread.php?t=94339)

MesiasPeru 15-12-2019 00:36:27

Button [help]
 
hola.
tengo un problemita quiero un boton que ejecute una acción de acuerdo a cierta condición.... ejemplo:

Código:

procedure Taa.btn1Click(Sender: TObject);
begin
if Num = 0 then
begin
pbyte(Resultado)^:=20;
end;

if Num = 1 then
begin
pbyte(Resultado)^:=30;
end;
end;

el detalle al ejecutar y presionar el boton no hace nada... al parecer no reconocer esa condicion de if.

Casimiro Notevi 15-12-2019 01:33:18

¿Por qué dices que no hace nada el if?


Por cierto, por favor, procura poner títulos descriptivos a tus consultas, gracias.

MesiasPeru 15-12-2019 15:51:33

Tienes razon, intentare explicar todo desde el inicio ojala puedan ayudarme amigos ya que ustedes son los dioses del delphy :D

yo uso Delphy para crear un archivo DLL este archivo DLL me permite modificar los valores de algunos codigos dentro de algun juego en especifico.

ejemplo: el codigo 01885514 en el juego equivale a 2 en Byte, 5100 en 4 byte, 25458965415846954789 en 8 byte. pero mi me intresa solo el valor en BYTE (ojo es un ejemplo)

Código:

const
  balas = $01885514; // este valor no siempre es 2 aveces cambia a 5 o 8

Código:

procedure Taa.btn1Click(Sender: TObject);
begin
if balas = 2 then  // aqui pregunto si el valor de las balas es 2 en el caso de que si fuera 2 entonces lo va cambiara a 20
begin
pbyte(balas)^:=20;
end;
end;

ojo es solo un ejemplo, al compilar y ejecutar el DLL en el juego no hace ningun cambio y me e podido dar cuenta que la parte if balas = 2 no lo reconoce.

lo se porque intente sin usar el if de esta forma:
Código:

procedure Taa.btn1Click(Sender: TObject);
begin

pbyte(balas)^:=20;

end;

de esta forma al ejecutarlo en el juego y presionar el boton si cambia el valor de dicho codigo de 2 a 20, siempre y cuento el valor de dicho codigo 01885514 sea de 2 en ese momento.

Casimiro Notevi 15-12-2019 19:30:11

Pon un punto de ruptura (breakpoint) en el "if" y mira qué valor tiene la variable que comparas.

MesiasPeru 16-12-2019 14:07:04

Cita:

Empezado por Casimiro Notevi (Mensaje 534789)
Pon un punto de ruptura (breakpoint) en el "if" y mira qué valor tiene la variable que comparas.

como asi ?

Casimiro Notevi 16-12-2019 14:09:56

Pones el cursor en la linea del "if", y pulsas F5
Ejecutas el programa y se parará en esa línea.
Pones el ratón encima de la variable y verás el valor que tiene.

MesiasPeru 21-12-2019 16:33:01

Cita:

Empezado por Casimiro Notevi (Mensaje 534800)
Pones el cursor en la linea del "if", y pulsas F5
Ejecutas el programa y se parará en esa línea.
Pones el ratón encima de la variable y verás el valor que tiene.

no nada. por cierto yo uso delphi 7

Casimiro Notevi 21-12-2019 19:09:00

De nada, vale.

Ñuño Martínez 29-12-2019 12:44:13

Aquí hay mucha tela que cortar.

Primero, el tema del orden de los octetos (bytes), que puede que tú estés usando little-endian pero el juego use big-endian (por ejemplo, juego en red con clientes x86 pero servidores 68K, PowerPC o SPARK).

Segundo, que el propio juego deshaga los cambios silenciosamente o ignore los cambios que hagas mediante un patrón de "código crítico", "sand-box" u otras técnicas anti-cheating. Un ejemplo muy simple y no infalible pero que haría rascarse la cabeza a más de dos:
Código Delphi [-]
{ Permitamos que haya MODs del juego llamando a una DLL que puede
  definirse por el usuario (y usemos Object Pascal porque somos unos
  diseñadores de juegos guays): }
  IF Assigned (ProcedimientoEnDLL) THEN
  TRY
  { Guardamos el número de balas. }
    Balas := EstadoJugador AND $000000FF;
  { Permitimos que cambien algunos valores. }
    ProcedimientoEnDLL (@EstadoJugador)
  FINALLY
  { Recuperamos el número de balas original, por si nos han intentado hacer la pirula. }
    EstadoJugador := (EstadoJugador AND $FFFFFF00) OR Balas
  { JAQUE MATE, CHITERS. }
  END;
Con el código anterior da igual que cambies el número de balas en el procedimiento DLL, porque siempre recuperará el valor anterior, incluso aunque cambies el valor directamente en memoria RAM. Claro que ahora me puedes venir con que puedes hacer el cambio en "Balas" y blablablabla... pero no vamos a ponernos aquí a discutir técnicas anti-cheating porque no es el sitio adecuado.

Tercero, he visto que no es ninguna de las dos cosas anteriores, sino un fallo muy tonto que no voy a decirte más que nada porque me molesta mucho que la gente haga trampas cuando juega, a videojuegos o a lo que sea.

Un saludo.


La franja horaria es GMT +2. Ahora son las 19:35:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi