<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://t4ctech.hyperion-roleplay.com/index.php?action=history&amp;feed=atom&amp;title=Reverse-engineering_du_fichier_GameOps.dll</id>
	<title>Reverse-engineering du fichier GameOps.dll - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://t4ctech.hyperion-roleplay.com/index.php?action=history&amp;feed=atom&amp;title=Reverse-engineering_du_fichier_GameOps.dll"/>
	<link rel="alternate" type="text/html" href="https://t4ctech.hyperion-roleplay.com/index.php?title=Reverse-engineering_du_fichier_GameOps.dll&amp;action=history"/>
	<updated>2026-07-10T07:02:45Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://t4ctech.hyperion-roleplay.com/index.php?title=Reverse-engineering_du_fichier_GameOps.dll&amp;diff=37&amp;oldid=prev</id>
		<title>FunJp : Page créée avec « == Modification de la position de sanctuaire par défaut personnage (Serveur 1.25) == Cette modification de la DLL GameOps permet de modifier la position du sanctuaire par... »</title>
		<link rel="alternate" type="text/html" href="https://t4ctech.hyperion-roleplay.com/index.php?title=Reverse-engineering_du_fichier_GameOps.dll&amp;diff=37&amp;oldid=prev"/>
		<updated>2017-04-23T19:24:00Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « == Modification de la position de sanctuaire par défaut personnage (Serveur 1.25) == Cette modification de la DLL GameOps permet de modifier la position du sanctuaire par... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Modification de la position de sanctuaire par défaut personnage (Serveur 1.25) ==&lt;br /&gt;
Cette modification de la DLL GameOps permet de modifier la position du sanctuaire par défaut d&amp;#039;un personnage en jeu, quand le flag contenant la position du sanctuaire de ce personnage n&amp;#039;a pas encore été créé (autrement dit, quand le joueur n&amp;#039;a encore jamais placé son sanctuaire explicitement quelque part).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATTENTION:&amp;#039;&amp;#039;&amp;#039; cette valeur ne doit pas être confondue avec la position d&amp;#039;apparition d&amp;#039;un nouveau personnage, qui elle, se modifie directement dans l&amp;#039;exécutable du serveur T4C.&lt;br /&gt;
&lt;br /&gt;
Tout d&amp;#039;abord, nous savons que le sanctuaire par défaut d&amp;#039;un personnage est, jusqu&amp;#039;à ce qu&amp;#039;il place son sanctuaire lui-même dans un temple, identique à sa position d&amp;#039;apparition dans le jeu quand le personnage vient juste d&amp;#039;être créé. Cette position est : 2945,1058,0.&lt;br /&gt;
&lt;br /&gt;
Il suffit donc d&amp;#039;ouvrir la DLL dans le désassembleur de votre choix (comme par exemple [http://www.hex-rays.com/idapro IDA Pro]) et, une fois le désassemblage de la DLL terminé, de rechercher la valeur 2945 en hexadécimal (0x0B81) dans votre désassembleur.&lt;br /&gt;
&lt;br /&gt;
A un certain moment nous tombons sur :&lt;br /&gt;
 .text:1001F2B2 loc_1001F2B2:&lt;br /&gt;
 .text:1001F2B2                 push    edi&lt;br /&gt;
 .text:1001F2B3                 push    0&lt;br /&gt;
 .text:1001F2B5                 push    422h&lt;br /&gt;
 .text:1001F2BA                 push    0B81h&lt;br /&gt;
 .text:1001F2BF                 call    ?TeleportFunc@@YAXHHHPAVUnit@@@Z&lt;br /&gt;
 .text:1001F2C4                 jmp     short loc_1001F2F8&lt;br /&gt;
 .text:1001F2C6 ; ---------------------------------------------------------------------------&lt;br /&gt;
Examinons de plus près cette fonction.&lt;br /&gt;
 .text:1001F2B2                 push    edi&lt;br /&gt;
 .text:1001F2B3                 push    0               ; Pos W&lt;br /&gt;
 .text:1001F2B5                 push    422h            ; Pos Y&lt;br /&gt;
 .text:1001F2BA                 push    0B81h           ; Pos X&lt;br /&gt;
 .text:1001F2BF                 call    ?TeleportFunc@@YAXHHHPAVUnit@@@Z ; TeleportFunc(int,int,int,Unit *)&lt;br /&gt;
Nous plaçons trois valeurs arbitraires sur la pile, puis nous appelons la fonction TeleportFunc(). Ces trois valeurs sont :&lt;br /&gt;
* 0x0000 (0 décimal)&lt;br /&gt;
* 0x0422 (1058 décimal)&lt;br /&gt;
* 0x0b81 (2954 décimal)&lt;br /&gt;
Il s&amp;#039;agit des coordonnées que nous recherchons, empilées en ordre inverse afin de construire la pile de paramètres de la fonction TeleportFunc. Ce sont donc ces valeurs qu&amp;#039;il faut changer.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;adresse de ces valeurs est l&amp;#039;adresse virtuelle (&amp;#039;&amp;#039;Virtual Address&amp;#039;&amp;#039; ou VA) correspondante à ces lignes dans la section de l&amp;#039;exécutable nommée &amp;quot;.text&amp;quot;. Si vous utilisez le [http://www.hex-rays.com/idapro désassembleur IDA], l&amp;#039;offset correspondant dans le fichier est indiqué juste à côté en bas à gauche de votre écran. Sinon, il faut le calculer. Corrigez-moi si je me trompe : (--Sorkvild 17 mars 2008 à 17:06 (MSK))&lt;br /&gt;
 FileOffset = VirtualAddress - VirtualOffset + RawOffset&lt;br /&gt;
* VirtualAddress est nos trois addresses VA, respectivement 0x1001F2B3 + 1 octet (pour l&amp;#039;instruction &amp;#039;&amp;#039;push&amp;#039;&amp;#039;) soit &amp;#039;&amp;#039;&amp;#039;0x1001F2B4&amp;#039;&amp;#039;&amp;#039;, 0x1001F2B5 + 1 octet (même remarque) soit &amp;#039;&amp;#039;&amp;#039;0x1001F2B6&amp;#039;&amp;#039;&amp;#039;, et 0x1001F2BA + 1 octet (idem) soit &amp;#039;&amp;#039;&amp;#039;0x1001F2BB&amp;#039;&amp;#039;&amp;#039; de la section &amp;#039;&amp;#039;&amp;#039;.text&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* VirtualOffset est l&amp;#039;adresse où démarre notre section &amp;#039;&amp;#039;&amp;#039;.text&amp;#039;&amp;#039;&amp;#039;. Cette valeur se trouve dans les informations de l&amp;#039;en-tête des sections (&amp;#039;&amp;#039;sections header&amp;#039;&amp;#039; dans votre désassembleur). Celui-ci nous renseigne : la section .text commence à 0x10001000.&lt;br /&gt;
* RawOffset est un décalage arbitraire dans le fichier binaire à partir duquel les sections commencent. Le désassembleur nous renseigne encore : dans notre DLL, il vaut 0x00001000.&lt;br /&gt;
Ce qui nous donne :&lt;br /&gt;
 FileOffsetW = 0x1001F2B4 - 0x10001000 + 0x00001000 = 0x0001F2B4 = 127668&lt;br /&gt;
 FileOffsetY = 0x1001F2B6 - 0x10001000 + 0x00001000 = 0x0001F2B6 = 127670&lt;br /&gt;
 FileOffsetX = 0x1001F2BB - 0x10001000 + 0x00001000 = 0x0001F2BB = 127675&lt;br /&gt;
On récupère donc les offsets dans le fichier :&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;127668&amp;#039;&amp;#039;&amp;#039; pour la coordonnée w,&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;127670&amp;#039;&amp;#039;&amp;#039; pour la coordonnée y,&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;127675&amp;#039;&amp;#039;&amp;#039; pour la coordonnée x.&lt;br /&gt;
Vous trouverez davantage d&amp;#039;informations sur le format PE sur cette page.&lt;br /&gt;
&lt;br /&gt;
Une fois les offsets trouvés, il vous suffira de développer un petit logiciel de patch ou bien de modifier à l&amp;#039;aide d&amp;#039;un éditeur hexadécimal les 3 valeurs des coordonnées du sanctuaire par défaut.&lt;br /&gt;
&lt;br /&gt;
=== Exemple d&amp;#039;un patcheur pour cette DLL en Delphi ===&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 (* T4C Start Location By Mestoph *)&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 unit Patcheur;&lt;br /&gt;
 &lt;br /&gt;
 interface&lt;br /&gt;
 &lt;br /&gt;
 uses&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Dialogs, StdCtrls, ExtCtrls, WinSkinData;&lt;br /&gt;
 &lt;br /&gt;
 type&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; TForm1 = class(TForm)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   SkinData1: TSkinData;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   GroupBox1: TGroupBox;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   OpenDialog1: TOpenDialog;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Lbl_X: TLabel;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Lbl_Y: TLabel;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Lbl_Z: TLabel;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Edit_Z: TEdit;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Edit_Y: TEdit;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Edit_X: TEdit;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Edit_Fichier: TEdit;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Btn_Ouvrir: TButton;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Btn_Patch: TButton;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Btn_Fermer: TButton;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   GroupBox3: TGroupBox;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Lbl_Taille: TLabel;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Bevel1: TBevel;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   procedure Btn_OuvrirClick(Sender: TObject);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   procedure Btn_FermerClick(Sender: TObject);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   procedure Btn_PatchClick(Sender: TObject);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   procedure Edit_XKeyPress(Sender: TObject; var Key: Char);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; private&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   { Déclarations privées }&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; public&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   { Déclarations publiques }&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; end;&lt;br /&gt;
 &lt;br /&gt;
 var&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Form1: TForm1;&lt;br /&gt;
 &lt;br /&gt;
 implementation&lt;br /&gt;
 &lt;br /&gt;
 {$R *.dfm}&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 (* Ouverture du fichier *)&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 procedure TForm1.Btn_OuvrirClick(Sender: TObject);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Var Fichier : File;&lt;br /&gt;
 Begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; If OpenDialog1.Execute = True Then&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Edit_Fichier.Text := OpenDialog1.FileName;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     AssignFile(Fichier, OpenDialog1.filename);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Reset(Fichier,1);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Lbl_Taille.Caption := IntToStr(Filesize(Fichier)) + &amp;#039; Octets&amp;#039;;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     CloseFile(Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   End;&lt;br /&gt;
 end;&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 (* Fermeture du programme *)&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 procedure TForm1.Btn_FermerClick(Sender: TObject);&lt;br /&gt;
 begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Application.Terminate;&lt;br /&gt;
 end;&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 (* Patche du fichier *)&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 procedure TForm1.Btn_PatchClick(Sender: TObject);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Var Taille_Fichier : LongInt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Donnees, Emplacement : Pbyte;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Fichier : File;&lt;br /&gt;
 begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; If (Edit_Fichier.Text &amp;lt;&amp;gt; &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;) Then&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   Begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     If (Edit_Z.Text &amp;lt;&amp;gt; &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;) And (Edit_Y.Text &amp;lt;&amp;gt; &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;) And (Edit_X.Text &amp;lt;&amp;gt; &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;) Then&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;       Begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;         If (StrToInt(Copy(Lbl_Taille.Caption,1,Length(Lbl_Taille.Caption)-7)) &amp;gt;= 340030) then&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;           Begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             AssignFile(Fichier,Edit_Fichier.Text);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Reset(Fichier,1);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Taille_Fichier := FileSize(Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On alloue une nouvelle zone mémoire&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             GetMem(Donnees,Taille_Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On mets les données du fichier en mémoire&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             BlockRead(Fichier,Donnees^,Taille_Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Emplacement := Donnees;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On se place a l&amp;#039;offset 0001F2B3 (:1001F2B3 6A00 push 00000000 =&amp;gt; Z)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Emplacement := Pointer(LongInt(Emplacement) + 127668);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Pbyte(LongInt(Emplacement))^ := StrToInt(Edit_Z.Text);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On se place a l&amp;#039;offset 0001F2B5 (:1001F2B5 6822040000 push 00000422 =&amp;gt; Y)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Emplacement := Pointer(LongInt(Emplacement) + 2);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Pword(LongInt(Emplacement))^ := StrToInt(Edit_Y.Text);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On se place a l&amp;#039;offset 0001F2BA (:1001F2BA 68810B0000 push 00000B81 =&amp;gt; X)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Emplacement := Pointer(LongInt(Emplacement) + 5);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Pword(LongInt(Emplacement))^ := StrToInt(Edit_X.Text);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             CloseFile(Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             RenameFile(Edit_Fichier.Text,Edit_Fichier.Text+&amp;#039;.bak&amp;#039;);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             AssignFile(Fichier,Edit_Fichier.Text);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Rewrite(Fichier,1);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On mets les données de la mémore dans le fichier&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             BlockWrite(Fichier,Donnees^,Taille_Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             CloseFile(Fichier);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             // On libère la mémoire&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             FreeMem(Donnees);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             ShowMessage(&amp;#039;Le fichier : &amp;#039; + #13 + Edit_Fichier.Text + #13 + &amp;#039;a été patché avec succès !&amp;#039;);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Edit_X.Text := &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Edit_Y.Text := &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Edit_Z.Text := &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Edit_Fichier.Text := &amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;             Lbl_Taille.Caption := &amp;#039;0 Octets&amp;#039;;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;           End&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;         Else ShowMessage(&amp;#039;Le fichier ne correspont pas au fichier GameOps.dll de base !&amp;#039;);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;       End&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Else ShowMessage(&amp;#039;Vous n&amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;avez pas rempli de façon correct les informations requises !&amp;#039;);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   End&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; Else ShowMessage(&amp;#039;Vous devez ouvrir le fichier GameOps.dll !&amp;#039;);&lt;br /&gt;
 End;&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 (* Detection des touche clavier *)&lt;br /&gt;
 (* -------------------------------------------------------------------------- *)&lt;br /&gt;
 procedure TForm1.Edit_XKeyPress(Sender: TObject; var Key: Char);&lt;br /&gt;
 begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; if Key in [&amp;#039;0&amp;#039;..&amp;#039;9&amp;#039;, Chr(VK_BACK), Chr(VK_DELETE)] then&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt; else&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   begin&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     showmessage(&amp;#039;Uniquement les chiffres de 0 à 9 sont autorisés !&amp;#039;);&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;     Key:=#0;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;   end;&lt;br /&gt;
 end;&lt;br /&gt;
 &lt;br /&gt;
 end.&lt;br /&gt;
--Mestoph 17 mars 2008 à 05:04 (MSK)&lt;/div&gt;</summary>
		<author><name>FunJp</name></author>
	</entry>
</feed>