UNIT Unit10; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; TYPE TForm10 = Class(TForm) label_key: TLabel; label_group: TLabel; combo_group: TComboBox; label_target_char: TLabel; check_charid: TRadioButton; check_charname: TRadioButton; edit_char: TEdit; label_option: TLabel; combo_option: TComboBox; label_action: TLabel; combo_action: TComboBox; label_value: TLabel; label_value2: TLabel; edit_value: TEdit; edit_value2: TEdit; button_add: TButton; button_cancel: TButton; Check_Ctrl: TCheckBox; Check_Alt: TCheckBox; combo_keys: TComboBox; procedure button_addClick(Sender: TObject); procedure check_charnameClick(Sender: TObject); PROCEDURE check_charidClick(Sender: TObject); PROCEDURE button_cancelClick(Sender: TObject); PROCEDURE combo_actionChange(Sender: TObject); PROCEDURE combo_optionChange(Sender: TObject); PROCEDURE combo_groupChange(Sender: TObject); PROCEDURE FormCloseQuery(Sender: TObject; var CanClose: Boolean); PROCEDURE InitStuff(LoadHotKey:Byte); PRIVATE PUBLIC END; VAR Form10: TForm10; IMPLEMENTATION USES Unit1,Unit2,Unit3,Unit8,Unit9; {$R *.dfm} VAR change:Byte; PROCEDURE TForm10.InitStuff(LoadHotKey:Byte); VAR i:Byte; BEGIN IF LoadHotKey=0 THEN BEGIN change:=0; Form10.Check_Ctrl.Checked:=False; Form10.Check_Alt.Checked:=False; Form10.combo_keys.Items.Clear; FOR i:=1 TO Length(VKKeys) DO Form10.combo_keys.Items.Add(VKKeys[i].Name); Form10.combo_keys.ItemIndex:=0; Form10.combo_group.Items.Clear; FOR i:=1 TO Length(HK_Target_Types) DO Form10.combo_group.Items.Add(HK_Target_Types[i]); Form10.combo_group.ItemIndex:=0; Form10.combo_groupChange(Self); Form10.combo_option.ItemIndex:=0; Form10.combo_optionChange(Self); Form10.combo_action.ItemIndex:=0; Form10.check_charid.Checked:=True; Form10.label_target_char.Caption:='Target char ID:'; Form10.edit_char.Text:=''; Form10.edit_value.Text:='0'; Form10.edit_value2.Text:='0'; END ELSE BEGIN change:=LoadHotKey; WITH Hotkeys.Items[LoadHotKey-1] DO BEGIN Form10.Check_Ctrl.Checked:=MOD_Ctrl; Form10.Check_Alt.Checked:=MOD_Alt; Form10.combo_keys.Items.Clear; FOR i:=1 TO Length(VKKeys) DO Form10.combo_keys.Items.Add(VKKeys[i].Name); Form10.combo_keys.ItemIndex:=key-1; Form10.combo_group.Items.Clear; FOR i:=1 TO Length(HK_Target_Types) DO Form10.combo_group.Items.Add(HK_Target_Types[i]); Form10.combo_group.ItemIndex:=Target_Type-1; Form10.combo_groupChange(Self); Form10.combo_option.ItemIndex:=Target_Item-1; Form10.combo_optionChange(Self); FOR i:=0 TO Form10.combo_action.Items.Count-1 DO BEGIN IF HK_Actions[Action]=Form10.combo_action.Items.Strings[i] THEN BEGIN Form10.combo_action.ItemIndex:=i; break; END; END; IF Target_CharName='' THEN BEGIN Form10.check_charid.Checked:=True; Form10.label_target_char.Caption:='Target char ID:'; Form10.edit_char.Text:=IntToStr(Target_CharID); END ELSE BEGIN Form10.check_charname.Checked:=True; Form10.label_target_char.Caption:='Target char name:'; Form10.edit_char.Text:=Target_CharName; END; Form10.edit_value.Text:=FloatToStr(Value); Form10.edit_value2.Text:=FloatToStr(Value2); END; END; END; PROCEDURE TForm10.FormCloseQuery(Sender: TObject; var CanClose: Boolean); BEGIN Form9.Enabled:=True; Form10.Visible:=False; CanClose:=False; END; PROCEDURE TForm10.combo_groupChange(Sender: TObject); VAR i:Byte; BEGIN Form10.combo_option.Items.Clear; IF Pos('Global',Form10.combo_group.Items.Strings[Form10.combo_group.ItemIndex])>0 THEN BEGIN Form10.check_charid.Enabled:=False; Form10.check_charname.Enabled:=False; Form10.edit_char.Enabled:=False; Form10.label_target_char.Enabled:=False; FOR i:=1 TO Length(Settings) DO BEGIN IF Settings[i].has_box THEN Form10.combo_option.Items.Add(Settings[i].Item_Checkbox.Caption) ELSE Form10.combo_option.Items.Add(Settings[i].Item_Label.Caption); END; END; IF Pos('Char',Form10.combo_group.Items.Strings[Form10.combo_group.ItemIndex])>0 THEN BEGIN Form10.check_charid.Enabled:=True; Form10.check_charname.Enabled:=True; Form10.edit_char.Enabled:=True; Form10.label_target_char.Enabled:=True; FOR i:=1 TO Length(CharDataStuff) DO BEGIN Form10.combo_option.Items.Add(CharDataStuff[i].overview_name); END; END; Form10.combo_option.ItemIndex:=0; Form10.combo_optionChange(Self); END; PROCEDURE TForm10.combo_optionChange(Sender: TObject); BEGIN Form10.button_add.Enabled:=True; Form10.combo_action.Items.Clear; IF Pos('Global',Form10.combo_group.Items.Strings[Form10.combo_group.ItemIndex])>0 THEN BEGIN IF Settings[Form10.combo_option.ItemIndex+1].has_box THEN BEGIN Form10.combo_action.Items.Add('Toggle'); END; IF Settings[Form10.combo_option.ItemIndex+1].has_edit THEN BEGIN Form10.combo_action.Items.Add('Set'); Form10.combo_action.Items.Add('Add'); Form10.combo_action.Items.Add('Multiply'); Form10.combo_action.Items.Add('Switch value'); END; END; IF Pos('Char',Form10.combo_group.Items.Strings[Form10.combo_group.ItemIndex])>0 THEN BEGIN IF CharDataStuff[Form10.combo_option.ItemIndex+1].data_type=6 THEN BEGIN Form10.combo_action.Items.Add('CAN''T CHANGE'); Form10.button_add.Enabled:=False; END ELSE BEGIN Form10.combo_action.Items.Add('Set'); Form10.combo_action.Items.Add('Add'); Form10.combo_action.Items.Add('Multiply'); Form10.combo_action.Items.Add('Freeze'); Form10.combo_action.Items.Add('Set & Freeze'); Form10.combo_action.Items.Add('Switch value'); END; END; Form10.combo_action.ItemIndex:=0; Form10.combo_actionChange(Self); END; PROCEDURE TForm10.combo_actionChange(Sender: TObject); BEGIN IF ('Toggle'=Form10.combo_action.Items.Strings[Form10.combo_action.ItemIndex]) OR ('Freeze'=Form10.combo_action.Items.Strings[Form10.combo_action.ItemIndex]) THEN BEGIN Form10.label_value.Enabled:=False; Form10.label_value2.Enabled:=False; Form10.edit_value.Enabled:=False; Form10.edit_value2.Enabled:=False; END ELSE BEGIN Form10.label_value.Enabled:=True; Form10.edit_value.Enabled:=True; IF Pos('Switch',Form10.combo_action.Items.Strings[Form10.combo_action.ItemIndex])>0 THEN BEGIN Form10.label_value2.Enabled:=True; Form10.edit_value2.Enabled:=True; END ELSE BEGIN Form10.label_value2.Enabled:=False; Form10.edit_value2.Enabled:=False; END; END; END; PROCEDURE TForm10.button_cancelClick(Sender: TObject); BEGIN Form9.Enabled:=True; Form10.Visible:=False; END; PROCEDURE TForm10.check_charidClick(Sender: TObject); BEGIN IF Form10.check_charid.Checked THEN Form10.label_target_char.Caption:='Target char ID:' ELSE Form10.label_target_char.Caption:='Target char name:'; END; PROCEDURE TForm10.check_charnameClick(Sender: TObject); BEGIN IF Form10.check_charid.Checked THEN Form10.label_target_char.Caption:='Target char ID:' ELSE Form10.label_target_char.Caption:='Target char name:'; END; PROCEDURE TForm10.button_addClick(Sender: TObject); VAR i:Byte; dataset:HotKey; _temp:String; _tempint:Integer; _tempfloat:Double; number:Word; _wanted_datatype:Byte; _check_value2:Boolean; BEGIN //check_valid_data: dataset.Target_Type:=Form10.combo_group.ItemIndex+1; dataset.Target_Item:=Form10.combo_option.ItemIndex+1; FOR i:=1 TO Length(HK_Actions) DO BEGIN IF HK_Actions[i]=Form10.combo_action.Items.Strings[Form10.combo_action.ItemIndex] THEN BEGIN dataset.Action:=i; break; END; END; IF Pos('Char',HK_Target_Types[dataset.Target_Type])>0 THEN BEGIN IF Form10.check_charid.Checked THEN BEGIN IF TryStrToInt(Form10.edit_char.Text,_tempint)=False THEN BEGIN MessageBox(Form10.Handle,PChar('Invalid character ID!'),PChar('Error'),MB_OK); exit; END; IF (_tempint<0) OR (_tempint>100) THEN BEGIN MessageBox(Form10.Handle,PChar('Invalid character ID!'),PChar('Error'),MB_OK); exit; END; dataset.Target_CharID:=_tempint; END ELSE BEGIN IF (Length(Form10.edit_char.Text)<1) OR (Length(Form10.edit_char.Text)>20) THEN BEGIN MessageBox(Form10.Handle,PChar('Invalid character name!'),PChar('Error'),MB_OK); exit; END; dataset.Target_CharName:=Form10.edit_char.Text; END; END; IF (Pos('Toggle',HK_Actions[dataset.Action])=0) AND (Pos('Freeze value',HK_Actions[dataset.Action])=0) THEN BEGIN IF Pos('Global',HK_Target_Types[dataset.Target_Type])>0 THEN BEGIN _wanted_datatype:=Settings[Form10.combo_option.ItemIndex+1].edit_type; END; IF Pos('Char',HK_Target_Types[dataset.Target_Type])>0 THEN BEGIN _wanted_datatype:=CharDataStuff[Form10.combo_option.ItemIndex+1].data_type; END; IF Pos('Switch',HK_Actions[dataset.Action])>0 THEN BEGIN _check_value2:=True; END ELSE _check_value2:=False; CASE _wanted_datatype OF 1..4: BEGIN IF TryStrToInt(Form10.edit_value.Text,_tempint) THEN BEGIN dataset.Value:=_tempint; END ELSE BEGIN MessageBox(Form10.Handle,PChar('Invalid value (has to be integer)!'),PChar('Error'),MB_OK); exit; END; IF _check_value2 THEN BEGIN IF TryStrToInt(Form10.edit_value2.Text,_tempint) THEN BEGIN dataset.Value2:=_tempint; END ELSE BEGIN MessageBox(Form10.Handle,PChar('Invalid value2 (has to be integer)!'),PChar('Error'),MB_OK); exit; END; END; END; 5: BEGIN IF TryStrToFloat(Form10.edit_value.Text,_tempfloat) THEN BEGIN dataset.Value:=_tempfloat; END ELSE BEGIN MessageBox(Form10.Handle,PChar('Invalid value (has to be float)!'),PChar('Error'),MB_OK); exit; END; IF _check_value2 THEN BEGIN IF TryStrToFloat(Form10.edit_value2.Text,_tempfloat) THEN BEGIN dataset.Value2:=_tempfloat; END ELSE BEGIN MessageBox(Form10.Handle,PChar('Invalid value2 (has to be float)!'),PChar('Error'),MB_OK); exit; END; END; END; END; END; dataset.MOD_Alt:=Form10.Check_Alt.Checked; dataset.MOD_Ctrl:=Form10.Check_Ctrl.Checked; dataset.Key:=Form10.combo_keys.ItemIndex+1; IF change=0 THEN BEGIN //check_already_exist: number:=65000; IF Hotkeys.Size>0 THEN BEGIN FOR i:=0 TO Hotkeys.Size-1 DO BEGIN WITH Hotkeys.Items[i] DO BEGIN IF (MOD_Alt=Form10.Check_Alt.Checked) AND (MOD_Ctrl=Form10.Check_Ctrl.Checked) AND (Key=Form10.combo_keys.ItemIndex+1) THEN BEGIN _temp:='Do you really want to change the hotkey "'; IF MOD_Alt THEN _temp:=_temp+'ALT+'; IF MOD_Ctrl THEN _temp:=_temp+'CTRL+'; _temp:=_temp+VKKeys[Key].Name+'"?'; IF MessageBox(Form10.Handle,PChar(_temp),PChar('Really?'),MB_OKCANCEL)=IDCANCEL THEN BEGIN exit; END; number:=i; break; END; END; END; END; //add/change_item: IF number<65000 THEN BEGIN Hotkeys.Items[number]:=dataset; END ELSE BEGIN Hotkeys.Size:=Hotkeys.Size+1; HotKeys.Items[HotKeys.Size-1]:=dataset; END; //change_item: END ELSE BEGIN WITH HotKeys.Items[change-1] DO BEGIN _temp:='Do you really want to change the hotkey "'; IF MOD_Alt THEN _temp:=_temp+'ALT+'; IF MOD_Ctrl THEN _temp:=_temp+'CTRL+'; _temp:=_temp+VKKeys[Key].Name+'"?'; IF MessageBox(Form10.Handle,PChar(_temp),PChar('Really?'),MB_OKCANCEL)=IDCANCEL THEN BEGIN exit; END; END; HotKeys.Items[change-1]:=dataset; END; Form10.Visible:=False; Form9.Enabled:=True; Form9.DrawTable; END; END.