📄 global.pas
字号:
unit Global;
interface
uses
CSDFE, Registry, IniFiles, SysUtils, Forms, Dialogs, StrUtils ;
type
TVideoModes = (Full,Window);
TResolutions = ( R640, R800, R1024);
THandSwitchs = ( LeftHand, RightHand);
// TMethods = (NotCare, Min, Close);
TPriority = (Normal, High, Realtime);
TGameAdvParam = record
NumericPing:Boolean;
Zone4096:Boolean;
D3D:Boolean;
GL:Boolean;
NoJoy:Boolean;
NoIPX:Boolean;
_32bpp:Boolean;
HeapSize:Boolean;
CPUPriority:TPriority;
end;
TMateUserConfig = record
PlayerID:String;
EnableConsole:Boolean;
NoSysKey:Boolean;
VideoMode:TVideoModes;
Resolution:TResolutions;
HandSwitch:THandSwitchs;
ConnectServer:string;
ConnectPassword:string;
AutoConnect:Boolean;
// GameLoadedMethod:TMethods;
GameAdvParam:TGameAdvParam;
end;
const
strParamGame : String = 'game cstrike';
strParamConsole : String = 'console';
strParam32bpp : String = '32bpp';
strParamNoIPX : String = 'noipx';
strParamNoJoy : String = 'nojoy';
strParamZone4096 : String = 'zone 4096';
strParamNumericPing : String = 'numericping';
strParamHeapSize : String = 'heapsize 131072';
strParamWinMode : String = 'window';
strParamFullMode : String = 'full';
strParamD3D : String ='d3d';
strParamGL : String = 'gl';
strParamCnt : String = 'connect';
strParamPwd : String = 'password';
pdm : String = ' -';
pdp : String = ' +';
CSShellPath : String = '\cstrike\gfx\shell';
CStrikePath : String = '\CStrike';
kb_def_filename : String = 'kb_def.lst';
kb_act_filename : String = 'kb_act.lst';
CSConfigFileName : String = 'config.cfg';
IniFileName : String = 'CS_Mate.ini';
UserIniFileName : String = 'CS_Mate_User.ini';
CStrikeExeFileName : String = 'cstrike.exe';
HLExeFileName : String = 'HL.exe';
CS_Retail_Reg_Branch : String = '\Software\Valve\CounterStrike\Settings';
CS_Mod_Reg_Branch : String = '\Software\Valve\Half-Life\Settings';
strFileMissed : String = ' 文件未找到,本软件不能运行。你可能需要重新安装游戏。';
var
cs_config, cs_kb_def, cs_kb_act : TCSConfigFile ;
strAccessPath, strPlayerIDList : String;
blPlayerCanSetAdvParam:Boolean;
CSRunning:Boolean;
strCSPath, strServer, strPassword:String;
CSProcess:Cardinal;
// strCDKey:string;
strExeFileName:string;
strCSParam:string;
strUserDir:String;
strParamPassword, strParamServer : String;
MateUserConfig:TMateUserConfig;
procedure AppInitialization ;
Procedure LocateCS ;
Procedure LoadCSDataFile;
Procedure LoadMateUserConfig;
Procedure SaveMateUserConfig;
Procedure LoadMateIni;
Procedure SaveMateIni;
Function IsValidCDKeyFormat(pKey:String):Boolean;
Procedure WriteCDKeyToReg(pKey:String);
Procedure WriteResolutionToReg(EngineModeW,EngineModeH:Integer);
Procedure ApplySettings;
Function GenerateCSCmdParam : String;
Function CreateUser(pName:String):Boolean;
Procedure CreateUserCommit(pPassword:String);
Procedure DeleteUserDir(pUserDir:String);
Procedure ModifyPassword(pPassword:string);
Function GetPassword:String;
Function ValidateUserName(iUserName:string):Boolean;
Function ValidatePassword(iPassword:string):Boolean;
implementation
procedure AppInitialization ;
begin
LocateCS ;
LoadMateIni;
LoadCSDataFile;
LoadMateUserConfig;
end;
Procedure LocateCS ;
begin
strCSPath := ExtractFileDir(Application.ExeName);
strExeFileName := strCSPath + '\' + CStrikeExeFileName;
if not(FileExists(strExeFileName)) then
begin
strExeFileName := strCSPath + '\' + HLExeFileName;
if not(FileExists(strExeFileName)) then
begin
ShowMessage('找不到游戏的启动文件,请将本软件的全部文件(CS_Mate*.*)复制到游戏所在文件夹(此处有 CStrike.exe 或 HL.exe 文件)再运行。');
Application.Terminate ;
end;
end;
end;
Procedure LoadCSDataFile;
begin
cs_config := TCSConfigFile.Create ;
cs_config.FileName := strCSPath+ CStrikePath + '\' + CSConfigFileName;
if cs_config.ErrorCode = [FileMissed] then
begin
ShowMessage(strCSPath+'\'+ CSConfigFileName + strFileMissed);
Application.Terminate ;
end
else
cs_config.Load ;
cs_kb_def := TCSConfigFile.Create ;
cs_kb_def.FileName := strCSPath + CSShellPath + '\' + kb_def_filename;
if cs_kb_def.ErrorCode = [FileMissed] then
begin
ShowMessage(strCSPath + CSShellPath + '\' + kb_def_filename + strFileMissed);
Application.Terminate ;
end
else
cs_kb_def.Load ;
cs_kb_act := TCSConfigFile.Create ;
cs_kb_act.FileName := strCSPath + CSShellPath + '\' + kb_act_filename;
if cs_kb_act.ErrorCode = [FileMissed] then
begin
ShowMessage(strCSPath + CSShellPath + '\' + kb_act_filename + strFileMissed);
Application.Terminate ;
end
else
cs_kb_act.Load ;
end;
Procedure LoadMateUserConfig;
var
iniFile:TIniFile;
begin
iniFile := TIniFile.Create(strCSPath+'\'+UserIniFileName);
MateUserConfig.PlayerID := iniFile.ReadString('Config','PlayerID','Vik');
MateUserConfig.EnableConsole := iniFile.ReadBool('Config','Console',True);
MateUserConfig.NoSysKey := iniFile.ReadBool('Config','NoSysKey',False);
MateUserConfig.VideoMode := TVideoModes(iniFile.ReadInteger('Config','VideoMode',0));
MateUserConfig.Resolution := TResolutions(iniFile.ReadInteger('Config','Resolution',0));
MateUserConfig.HandSwitch := THandSwitchs(iniFile.ReadInteger('Config','HandSwitch',0));
MateUserConfig.ConnectServer := iniFile.ReadString('Config','ConnectServer','');
MateUserConfig.ConnectPassword := iniFile.ReadString('Config','ConnectPassword','');
MateUserConfig.AutoConnect := iniFile.ReadBool('Config','AutoConnect',True);
// MateUserConfig.GameLoadedMethod := TMethods(iniFile.ReadInteger('Config','GameLoadedMethod',0));
MateUserConfig.GameAdvParam.NumericPing := iniFile.ReadBool('GameAdvParam','NumericPing',True);
MateUserConfig.GameAdvParam.Zone4096 := iniFile.ReadBool('GameAdvParam','Zone4096',False);
MateUserConfig.GameAdvParam.D3D := iniFile.ReadBool('GameAdvParam','D3D',False);
MateUserConfig.GameAdvParam.GL := iniFile.ReadBool('GameAdvParam','GL',True);
MateUserConfig.GameAdvParam.NoJoy := iniFile.ReadBool('GameAdvParam','NoJoy',True);
MateUserConfig.GameAdvParam.NoIPX := iniFile.ReadBool('GameAdvParam','NoIPX',True);
MateUserConfig.GameAdvParam._32bpp := iniFile.ReadBool('GameAdvParam','_32bpp',False);
MateUserConfig.GameAdvParam.HeapSize := iniFile.ReadBool('GameAdvParam','HeapSize',False);
MateUserConfig.GameAdvParam.CPUPriority := TPriority(iniFile.ReadInteger('GameAdvParam','CPUPriority',0));
iniFile.Free ;
end;
Procedure SaveMateUserConfig;
var
iniFile:TIniFile;
begin
iniFile := TIniFile.Create(strCSPath+'\'+UserIniFileName);
iniFile.WriteString('Config','PlayerID',MateUserConfig.PlayerID);
iniFile.WriteBool('Config','Console',MateUserConfig.EnableConsole);
iniFile.WriteBool('Config','NoSysKey',MateUserConfig.NoSysKey);
iniFile.WriteInteger('Config','VideoMode',Integer(MateUserConfig.VideoMode));
iniFile.WriteInteger('Config','Resolution',Integer(MateUserConfig.Resolution));
iniFile.WriteInteger('Config','HandSwitch',Integer(MateUserConfig.HandSwitch));
iniFile.WriteString('Config','ConnectServer',MateUserConfig.ConnectServer );
iniFile.WriteString('Config','ConnectPassword',MateUserConfig.ConnectPassword);
iniFile.WriteBool('Config','AutoConnect',MateUserConfig.AutoConnect);
// iniFile.WriteInteger('Config','GameLoadedMethod',Integer(MateUserConfig.GameLoadedMethod));
iniFile.WriteBool('GameAdvParam','NumericPing',MateUserConfig.GameAdvParam.NumericPing);
iniFile.WriteBool('GameAdvParam','Zone4096',MateUserConfig.GameAdvParam.Zone4096);
iniFile.WriteBool('GameAdvParam','D3D',MateUserConfig.GameAdvParam.D3D);
iniFile.WriteBool('GameAdvParam','GL',MateUserConfig.GameAdvParam.GL);
iniFile.WriteBool('GameAdvParam','NoJoy',MateUserConfig.GameAdvParam.NoJoy);
iniFile.WriteBool('GameAdvParam','NoIPX',MateUserConfig.GameAdvParam.NoIPX);
iniFile.WriteBool('GameAdvParam','_32bpp',MateUserConfig.GameAdvParam._32bpp);
iniFile.WriteBool('GameAdvParam','HeapSize',MateUserConfig.GameAdvParam.HeapSize);
iniFile.WriteInteger('GameAdvParam','CPUPriority',Integer(MateUserConfig.GameAdvParam.CPUPriority));
iniFile.Free ;
end;
Procedure LoadMateIni;
var
iniFile:TIniFile;
begin
iniFile := TIniFile.Create(strCSPath+'\'+IniFileName);
strAccessPath := iniFile.ReadString('Config','AccessPath','C:\');
strPlayerIDList := iniFile.ReadString('Config','PlayerIDList','Vik');
blPlayerCanSetAdvParam := iniFile.ReadBool('Config','PlayerCanSetAdvParam',False);
iniFile.Free ;
end;
Procedure SaveMateIni;
var
iniFile:TIniFile;
begin
iniFile := TIniFile.Create(strCSPath+'\'+IniFileName);
iniFile.WriteString('Config','AccessPath',strAccessPath);
iniFile.WriteString('Config','PlayerIDList',strPlayerIDList);
iniFile.WriteBool('Config','PlayerCanSetAdvParam',blPlayerCanSetAdvParam);
iniFile.Free ;
end;
function IsValidCDKeyFormat(pKey:String):boolean; //用户输入的CDKEY格式是否合法?
var
I:Integer;
KeyChar:String;
begin
if Length(pKey) <> 13 then // CDKEY是否13位?
begin
Result := False;
exit ;
end;
for I := 0 to 12 do
begin
KeyChar := MidStr(pKey,I,1);
if (KeyChar<'0') or (KeyChar>'9') then
begin
Result := False;
exit;
end;
end;
Result := True;
end;
Procedure WriteCDKeyToReg(pKey:String);
var
Reg: TRegistry;
begin
Reg:=TRegistry.Create;
try
// RETAIL 版CS
if Reg.OpenKey('\Software\Valve\CounterStrike\Settings', True) then
begin
Reg.WriteString('Key',pKey);
Reg.CloseKey;
end;
//MOD 版
if Reg.OpenKey('\Software\Valve\Half-Life\Settings', True) then
begin
Reg.WriteString('Key',pKey);
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
Procedure WriteResolutionToReg(EngineModeW,EngineModeH:Integer);
var
Reg: TRegistry;
begin
Reg:=TRegistry.Create;
try
//Reg.RootKey := HKEY_CURRENT_USER;
// RETAIL 版
if Reg.OpenKey('\Software\Valve\CounterStrike\Settings', True) then
begin
Reg.WriteInteger('EngineModeW',EngineModeW);
Reg.WriteInteger('EngineModeH',EngineModeH);
Reg.CloseKey;
end;
// MOD 版
if Reg.OpenKey('\Software\Valve\Half-Life\Settings', True) then
begin
Reg.WriteInteger('EngineModeW',EngineModeW);
Reg.WriteInteger('EngineModeH',EngineModeH);
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
Procedure ApplySettings;
var
ResW, ResH : Integer;
begin
case MateUserConfig.Resolution of
R640:
begin
ResW := 640 ;
ResH := 480 ;
end;
R800:
begin
ResW := 800 ;
ResH := 600 ;
end;
R1024:
begin
ResW := 1024 ;
ResH := 768 ;
end;
else
begin
ResW := 640 ;
ResH := 480 ;
end;
end;
WriteResolutionToReg(ResW, ResH);
cs_config.WriteVar ('name',MateUserConfig.PlayerID );
cs_config.WriteVar( 'cl_righthand', IntToStr(Integer(MateUserConfig.HandSwitch)));
cs_config.Save ;
// SaveMateIni;
SaveMateUserConfig;
end;
Function GenerateCSCmdParam : String;
var
S : String;
begin
S :=pdm + strParamGame;
if MateUserConfig.EnableConsole then
S := S + pdm + strParamConsole;
S := S + pdm ;
if MateUserConfig.VideoMode = Full then
S := S + strParamFullMode
else
begin
S := S + strParamWinMode;
case MateUserConfig.Resolution of
R640: S := S + '640';
R800: S := S + '800';
R1024: S := S + '1024';
end;
end;
if MateUserConfig.GameAdvParam.NumericPing then
S := S + pdm + strParamNumericPing;
if MateUserConfig.GameAdvParam.Zone4096 then
S := S + pdm + strParamZone4096;
if MateUserConfig.GameAdvParam.D3D then
S := S + pdm + strParamD3D;
if MateUserConfig.GameAdvParam.GL then
S := S + pdm + strParamGL;
if MateUserConfig.GameAdvParam.NoJoy then
S := S + pdm + strParamNoJoy;
if MateUserConfig.GameAdvParam.NoIPX then
S := S + pdm + strParamNoIPX;
if MateUserConfig.GameAdvParam._32bpp then
S := S + pdm + strParam32bpp;
if MateUserConfig.GameAdvParam.HeapSize then
S := S + pdm + strParamHeapSize;
if MateUserConfig.AutoConnect then
begin
S := S + pdp + strParamPwd + ' "' + MateUserConfig.ConnectPassword + '"';
S := S + pdp + strParamCnt + ' ' + MateUserConfig.ConnectServer;
end;
Result := S ;
end;
Function CreateUser(pName:String):Boolean;
begin
strUserDir:=strAccessPath + pName; // 按用户名创建目录
MkDir(strUserDir);
if IOResult <> 0 then
Result := False
else
Result := True;
end;
Procedure CreateUserCommit(pPassword:String);
var
iniFileUser:TIniFile;
begin
iniFileUser:=TIniFile.Create(strUserDir+'\User.ini');
iniFileUser.WriteString('Parameters','password',pPassword);
iniFIleUser.Free ;
end;
Procedure DeleteUserDir(pUserDir:String);
begin
RmDir(pUserDir);
end;
Procedure ModifyPassword(pPassword:String);
var
iniFileUser:TIniFile;
begin
iniFileUser:=TIniFile.Create(strUserDir+'\User.ini'); //用户个人配置文件
iniFileUser.WriteString('Parameters','password',pPassword);
iniFIleUser.Free ;
end;
Function GetPassword:String;
var
iniFileUser:TIniFile;
strCurPassword:String;
begin
iniFileUser:=TIniFile.Create(strUserDir+'\User.ini'); //用户个人配置文件
strCurPassword:=iniFileUser.ReadString('Parameters','password','');
iniFileUser.Free ;
Result := strCurPassword;
end;
Function ValidateUserName ( iUserName : string):Boolean;
begin
strUserDir := strAccessPath + iUserName;
if FileExists(strUserDir + '\User.ini') then
Result := true
else
Result := false;
end;
Function ValidatePassword ( iPassword : string):Boolean;
var
iniFileUser:TIniFile;
strIniPassword:string;
begin
iniFileUser := TIniFile.Create(strUserDir+'\User.ini');
strIniPassword := iniFileUser.ReadString('Parameters','password','');
iniFileUser.Free ;
if iPassword = strIniPassword then
Result := true
else
Result := false;
end;
Initialization
begin
LocateCS ;
LoadMateIni;
LoadCSDataFile;
LoadMateUserConfig;
CSRunning:=False;
CSProcess:=0;
end;
finalization
begin
cs_config.Free ;
cs_kb_def.Free ;
cs_kb_act.Free ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -