UNIT Unit15; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, StrUtils; TYPE TForm15 = Class(TForm) Label2: TLabel; list: TListBox; check_ai: TCheckBox; GroupBox1: TGroupBox; check_atPlayer: TRadioButton; check_atCoords: TRadioButton; edit_player_x: TEdit; lbl_player_x: TLabel; edit_player_y: TEdit; lbl_player_y: TLabel; edit_player_z: TEdit; lbl_player_z: TLabel; edit_coords_x: TEdit; lbl_coords_x: TLabel; lbl_coords_y: TLabel; edit_coords_y: TEdit; lbl_coords_z: TLabel; edit_coords_z: TEdit; btn_create: TButton; tim_check: TTimer; check_multiple: TCheckBox; edit_multiple: TEdit; GroupBox2: TGroupBox; Label1: TLabel; Label3: TLabel; procedure check_multipleClick(Sender: TObject); procedure check_atCoordsClick(Sender: TObject); PROCEDURE check_atPlayerClick(Sender: TObject); PROCEDURE btn_createClick(Sender: TObject); PROCEDURE tim_checkTimer(Sender: TObject); PROCEDURE FormCloseQuery(Sender: TObject; var CanClose: Boolean); PRIVATE PUBLIC END; VAR Form15: TForm15; IMPLEMENTATION USES Unit1, Unit2, Unit8,Unit11; {$R *.dfm} VAR lvl_shown:Byte; FUNCTION patch_loader_loaded:Boolean; CONST check_for:LongWord=$0010656EE9; address_at:LongWord=$4228ED; BEGIN IF Decode_Int(ReadMem(address_at,4))=check_for THEN result:=True ELSE result:=False; END; PROCEDURE TForm15.FormCloseQuery(Sender: TObject; var CanClose: Boolean); BEGIN Self.Visible:=False; CanClose:=False; Form1.menu_Spawn.Checked:=False; END; PROCEDURE TForm15.tim_checkTimer(Sender: TObject); VAR i,modelcount:Byte; BEGIN IF _connected AND (lvlnumber>0) AND patch_loader_loaded THEN BEGIN IF lvl_shown<>lvlnumber THEN BEGIN list.Items.Clear; modelcount:=Decode_Int(ReadMem($10F05,1)); FOR i:=0 TO modelcount-1 DO BEGIN list.Items.Add('Model'+IntToStr(i+1)+' ('+IntToStr(Decode_Int(ReadMem($10F20+i*4,4)))+')'); END; lvl_shown:=lvlnumber; END; END ELSE BEGIN list.Items.Clear; lvl_shown:=0; END; END; PROCEDURE TForm15.btn_createClick(Sender: TObject); VAR x,y,z:Single; address_trigger:LongWord; address_counter:LongWord; start_count:Byte; base_name:String; ai:Byte; BEGIN IF _connected AND (lvlnumber>0) AND patch_loader_loaded THEN BEGIN //VALIDATIONS! IF Form15.check_atPlayer.Checked THEN BEGIN END; IF Form15.check_atCoords.Checked THEN BEGIN END; IF Form15.check_ai.Checked THEN ai:=2 ELSE ai:=1; address_trigger:=Decode_Int(ReadMem(address_script_var_pointer,4))+3*$10E0; address_counter:=Decode_Int(ReadMem(address_script_var_pointer,4))+4*$10E0; start_count:=Decode_Int(ReadMem(address_counter,1)); base_name:='spawned'; IF Form15.check_multiple.Checked THEN BEGIN REPEAT WriteMem(address_trigger,1,Encode_Int(ai)); Sleep(100); UNTIL Decode_Int(ReadMem(address_counter,1))=(start_count+StrToInt(Form15.edit_multiple.Text)); END ELSE WriteMem(address_trigger,1,Encode_Int(ai)); END ELSE BEGIN IF _connected AND (lvlnumber>0) THEN BEGIN MessageBox(Form15.Handle,PChar('Oni.exe is not patched.'),PChar('Error'),MB_OK); END; END; END; PROCEDURE TForm15.check_atPlayerClick(Sender: TObject); BEGIN Form15.lbl_player_x.Enabled:=Form15.check_atPlayer.Checked; Form15.lbl_player_y.Enabled:=Form15.check_atPlayer.Checked; Form15.lbl_player_z.Enabled:=Form15.check_atPlayer.Checked; Form15.edit_player_x.Enabled:=Form15.check_atPlayer.Checked; Form15.edit_player_y.Enabled:=Form15.check_atPlayer.Checked; Form15.edit_player_z.Enabled:=Form15.check_atPlayer.Checked; Form15.lbl_coords_x.Enabled:=Form15.check_atCoords.Checked; Form15.lbl_coords_y.Enabled:=Form15.check_atCoords.Checked; Form15.lbl_coords_z.Enabled:=Form15.check_atCoords.Checked; Form15.edit_coords_x.Enabled:=Form15.check_atCoords.Checked; Form15.edit_coords_y.Enabled:=Form15.check_atCoords.Checked; Form15.edit_coords_z.Enabled:=Form15.check_atCoords.Checked; END; PROCEDURE TForm15.check_atCoordsClick(Sender: TObject); BEGIN Form15.lbl_player_x.Enabled:=Form15.check_atPlayer.Checked; Form15.lbl_player_y.Enabled:=Form15.check_atPlayer.Checked; Form15.lbl_player_z.Enabled:=Form15.check_atPlayer.Checked; Form15.edit_player_x.Enabled:=Form15.check_atPlayer.Checked; Form15.edit_player_y.Enabled:=Form15.check_atPlayer.Checked; Form15.edit_player_z.Enabled:=Form15.check_atPlayer.Checked; Form15.lbl_coords_x.Enabled:=Form15.check_atCoords.Checked; Form15.lbl_coords_y.Enabled:=Form15.check_atCoords.Checked; Form15.lbl_coords_z.Enabled:=Form15.check_atCoords.Checked; Form15.edit_coords_x.Enabled:=Form15.check_atCoords.Checked; Form15.edit_coords_y.Enabled:=Form15.check_atCoords.Checked; Form15.edit_coords_z.Enabled:=Form15.check_atCoords.Checked; END; PROCEDURE TForm15.check_multipleClick(Sender: TObject); BEGIN Form15.edit_multiple.Enabled:=Form15.check_multiple.Checked; END; END.