⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.pas

📁 CS1.5用的伴侣软件
💻 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 + -