clmain.~pas
来自「2009最新 传奇汉化0599代码 传奇汉化」· ~PAS 代码 · 共 1,909 行 · 第 1/5 页
~PAS
1,909 行
{$R *.DFM}
var
ShowMsgActor:TActor;
function CheckMirProgram: Boolean;
var
pstr, cstr: array[0..255] of char;
mirapphandle: HWnd;
begin
Result := FALSE;
StrPCopy (pstr, 'legend of mir');
mirapphandle := FindWindow (nil, pstr);
if (mirapphandle <> 0) and (mirapphandle <> Application.Handle) then begin
{$IFNDEF COMPILE}
SetActiveWindow(mirapphandle);
Result := TRUE;
{$ENDIF}
exit;
end;
end;
procedure PomiTextOut (dsurface: TDirectDrawSurface; x, y: integer; str: string);
var
i, n: integer;
d: TDirectDrawSurface;
begin
for i:=1 to Length(str) do begin
n := byte(str[i]) - byte('0');
if n in [0..9] then begin //箭磊父 凳
d := g_WMainImages.Images[30 + n];
if d <> nil then
dsurface.Draw (x + i*8, y, d.ClientRect, d, TRUE);
end else begin
if str[i] = '-' then begin
d := g_WMainImages.Images[40];
if d <> nil then
dsurface.Draw (x + i*8, y, d.ClientRect, d, TRUE);
end;
end;
end;
end;
procedure WaitAndPass (msec: longword);
var
start: longword;
begin
start := GetTickCount;
while GetTickCount - start < msec do begin
Application.ProcessMessages;
end;
end;
function GetRGB (c256: byte): integer;
begin
with frmMain.DxDraw do
Result:=RGB(DefColorTable[c256].rgbRed,
DefColorTable[c256].rgbGreen,
DefColorTable[c256].rgbBlue);
end;
procedure DebugOutStr (msg: string);
var
flname: string;
fhandle: TextFile;
begin
//DScreen.AddChatBoardString(msg,clWhite, clBlack);
exit;
flname := '.\!debug.txt';
if FileExists(flname) then begin
AssignFile (fhandle, flname);
Append (fhandle);
end else begin
AssignFile (fhandle, flname);
Rewrite (fhandle);
end;
WriteLn (fhandle, TimeToStr(Time) + ' ' + msg);
CloseFile (fhandle);
end;
function KeyboardHookProc (Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;
begin
Result:=0;//jacky
if ((WParam = 9){ or (WParam = 13)}) and (g_nLastHookKey = 18) and (GetTickCount - g_dwLastHookKeyTime < 500) then begin
if FrmMain.WindowState <> wsMinimized then begin
FrmMain.WindowState := wsMinimized;
end else
Result := CallNextHookEx(g_ToolMenuHook, Code, WParam, Longint(@Msg));
exit;
end;
g_nLastHookKey := WParam;
g_dwLastHookKeyTime := GetTickCount;
Result := CallNextHookEx(g_ToolMenuHook, Code, WParam, Longint(@Msg));
end;
procedure TfrmMain.FormCreate(Sender: TObject);
function GetColorDepth: integer ;//得到桌面颜色深度
var
dc: HDC;
begin
dc := GetDC(0);
Result := GetDeviceCaps(dc, BITSPIXEL);
ReleaseDC(0, dc);
end;
function Resolution(X:word):boolean;
var
DevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,DevMode);
if Result then
begin
DevMode.dmFields:=DM_BITSPERPEL;
DevMode.dmBitsPerPel:=x;
Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL;
end;
end;
function GetDisplayFrequency: Integer;//得到刷新率
var
DeviceMode: TDeviceMode;
begin
EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
Result := DeviceMode.dmDisplayFrequency;
end;
procedure ChangeDisplayFrequency(iFrequency:Integer);//更改刷新率,在Win2000下成功
var
DeviceMode: TDeviceMode;
begin
EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
end;
var
flname, str: string;
ini: TIniFile;
begin
// Parse Commandline Args
CLI := TCLIParser.Create;
// IF ini is not in params, add it.
if (CLI.Exists('ini') = -1) then CLI.ParseArgs('--ini .\mir.ini');
// Check if file exists, if not - use mir.ini
// Note: Read the comments at the top of CLIParser.pas to see why this works.
if not FileExists(CLI.Get(CLI.Exists('ini')).sValue) then CLI.ParseArgs('--ini .\mir.ini');
ini := nil;
g_AutoPickupList :=TList.Create;
g_ShowItemList :=TGList.Create;
g_DWinMan:=TDWinManager.Create(Self);
g_DXDraw:=DXDraw;
Randomize;
ini := TIniFile.Create (CLI.Get(CLI.Exists('ini')).sValue);
if ini <> nil then begin
g_sServerAddr := ini.ReadString ('Setup', 'ServerAddr', g_sServerAddr);
g_nServerPort := ini.ReadInteger ('Setup', 'ServerPort', g_nServerPort);
LocalLanguage := imOpen;
g_boWindowTest := False;//ini.ReadBool ('Setup', 'WindowTest', g_boWindowTest);
g_boDisableFlip := ini.ReadBool ('Setup', 'DisableFlip', g_boDisableFlip);
g_boFullScreen := ini.ReadBool ('Setup', 'FullScreen', g_boFullScreen);
g_sCurFontName := ini.ReadString ('Setup', 'FontName', g_sCurFontName);
g_boForceAddr := ini.ReadBool ('Setup', 'ForceAddr', g_boForceAddr);
g_sSelectServerAddr := ini.ReadString ('Setup', 'SelectServerAddr', g_sSelectServerAddr);
g_nSelectServerPort := ini.ReadInteger ('Setup', 'SelectServerPort', g_nSelectServerPort);
g_sGameServerAddr := ini.ReadString ('Setup', 'GameServerAddr', g_sGameServerAddr);
g_nGameServerPort := ini.ReadInteger ('Setup', 'GameServerPort', g_nGameServerPort);
if g_boFullScreen or not g_boWindowTest then begin //窗口框框
frmMain.BorderStyle := bsSizeable; //bsNone
g_boDisableFlip := True;
//frmMain.Left := 0;
//frmMain.Top := 0;
end
else begin
frmMain.Left := ini.ReadInteger('Positions', 'Left', 100);
frmMain.Top := ini.ReadInteger('Positions', 'Top', 100);
end;
// g_boAutoLogin := ini.ReadBool ('Auto', 'AutoLogin', g_boAutoLogin);
// g_boAutoServer := ini.ReadBool ('Auto', 'AutoServer', g_boAutoServer);
// g_sAutoID := ini.ReadString ('Auto', 'AutoID', g_sAutoID);
// g_sAutoPass := ini.ReadString ('Auto', 'AutoPass', g_sAutoPass);
// g_sAutoServerName := ini.ReadString ('Auto', 'AutoServerName', g_sAutoServerName);
ini.Free;
end;
{$IF CLIENTTYPE = RMCLIENT}
g_sLogoText:=RMCLIENTTITLE;
{$IFEND}
Caption:=g_sLogoText;
if g_boFullScreen then
DXDraw.Options:=DXDraw.Options + [doFullScreen]
else begin
DXDraw.Options:=DXDraw.Options - [doFullScreen];
OldColor:=GetColorDepth;
oldFreq:=GetDisplayFrequency;
Resolution(8); //设置显示模式为256色
end;
LoadWMImagesLib(nil);
NpcImageList:=TList.Create;
ItemImageList:=TList.Create;
WeaponImageList:=TList.Create;
HumImageList:=TList.Create;
g_DXSound:=TDXSound.Create(Self);
g_DXSound.Initialize;
DXDraw.Display.Width:=SCREENWIDTH;
DXDraw.Display.Height:=SCREENHEIGHT;
//
if g_DXSound.Initialized then begin
g_Sound:= TSoundEngine.Create (g_DXSound.DSound);
MP3:=TMPEG.Create(nil);
end else begin
g_Sound:= nil;
MP3:=nil;
end;
LoadDecoList();
g_ToolMenuHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, 0, GetCurrentThreadID);
g_SoundList := TStringList.Create;
BGMusicList:=TStringList.Create;
flname := '.\wav\mirsound.lst';
LoadSoundList (flname);
flname := '.\wav\BGList.lst';
LoadBGMusicList(flname);
//if FileExists (flname) then
// SoundList.LoadFromFile (flname);
DScreen := TDrawScreen.Create;
IntroScene := TIntroScene.Create;
LoginScene := TLoginScene.Create;
SelectChrScene := TSelectChrScene.Create;
PlayScene := TPlayScene.Create;
LoginNoticeScene := TLoginNotice.Create;
Map := TMap.Create;
g_DropedItemList := TList.Create;
g_MagicList := TList.Create;
g_FreeActorList := TList.Create;
//DObjList := TList.Create;
EventMan := TClEventManager.Create;
g_ChangeFaceReadyList := TList.Create;
g_ServerList:=TStringList.Create;
g_MySelf := nil;
FillChar (g_UseItems, sizeof(TClientItem)*13, #0);
// FillChar (UseItems, sizeof(TClientItem)*9, #0);
FillChar (g_ItemArr, sizeof(TClientItem)*MAXBAGITEMCL, #0);
FillChar (g_DealItems, sizeof(TClientItem)*10, #0);
FillChar (g_DealRemoteItems, sizeof(TClientItem)*20, #0);
g_SaveItemList := TList.Create;
g_MenuItemList := TList.Create;
g_WaitingUseItem.Item.S.Name := ''; //馒侩芒 辑滚客 烹脚埃俊 烙矫历厘
g_EatingItem.S.Name := '';
g_nTargetX := -1;
g_nTargetY := -1;
g_TargetCret := nil;
g_FocusCret := nil;
g_FocusItem := nil;
g_MagicTarget := nil;
g_nDebugCount := 0;
g_nDebugCount1 := 0;
g_nDebugCount2 := 0;
g_nTestSendCount := 0;
g_nTestReceiveCount := 0;
g_boServerChanging := FALSE;
g_boBagLoaded := FALSE;
g_boAutoDig := FALSE;
g_dwLatestClientTime2 := 0;
g_dwFirstClientTime := 0;
g_dwFirstServerTime := 0;
g_dwFirstClientTimerTime := 0;
g_dwLatestClientTimerTime := 0;
g_dwFirstClientGetTime := 0;
g_dwLatestClientGetTime := 0;
g_nTimeFakeDetectCount := 0;
g_nTimeFakeDetectTimer := 0;
g_nTimeFakeDetectSum := 0;
g_dwSHGetTime := 0;
g_dwSHTimerTime := 0;
g_nSHFakeCount := 0;
g_nDayBright := 3; //广
g_nAreaStateValue := 0;
g_ConnectionStep := cnsLogin;
g_boSendLogin:=False;
g_boServerConnected := FALSE;
SocStr := '';
WarningLevel := 0; //阂樊菩哦 荐脚 冉荐 (菩哦汗荤 啊瓷己 乐澜)
ActionFailLock := FALSE;
g_boMapMoving := FALSE;
g_boMapMovingWait := FALSE;
g_boCheckBadMapMode := FALSE;
g_boCheckSpeedHackDisplay := FALSE;
g_boViewMiniMap := FALSE;
g_boShowGreenHint := FALSE;
g_boShowWhiteHint := FALSE;
FailDir := 0;
FailAction := 0;
g_nDupSelection := 0;
g_dwLastAttackTick := GetTickCount;
g_dwLastMoveTick := GetTickCount;
g_dwLatestSpellTick := GetTickCount;
g_dwAutoPickupTick := GetTickCount;
g_boFirstTime := TRUE;
g_boItemMoving := FALSE;
g_boDoFadeIn := FALSE;
g_boDoFadeOut := FALSE;
g_boDoFastFadeOut := FALSE;
g_boAttackSlow := FALSE;
g_boMoveSlow := FALSE;
g_boFrozen := FALSE;
g_boNextTimePowerHit := FALSE;
g_boCanLongHit := FALSE;
g_boCanWideHit := FALSE;
g_boCanCrsHit := False;
g_boCanTwnHit := False;
g_boNextTimeFireHit := FALSE;
g_boNoDarkness := FALSE;
g_SoftClosed := FALSE;
g_boQueryPrice := FALSE;
g_sSellPriceStr := '';
g_boAllowGroup := FALSE;
g_GroupMembers := TStringList.Create;
MainWinHandle := DxDraw.Handle;
//盔努腐, 内齿岿靛 殿..
BoOneClick := False;
OneClickMode := toNone;
g_boSound:=True;
g_boBGSound:=True;
if g_sMainParam1 = '' then begin
CSocket.Address:=g_sServerAddr;
CSocket.Port:=g_nServerPort;
end else begin
if (g_sMainParam1 <> '') and (g_sMainParam2 = '') then
CSocket.Address := g_sMainParam1;
if (g_sMainParam2 <> '') and (g_sMainParam3 = '') then begin
CSocket.Address := g_sMainParam1;
CSocket.Port := Str_ToInt (g_sMainParam2, 0);
end;
if (g_sMainParam3 <> '') then begin
if CompareText (g_sMainParam1, '/KWG') = 0 then begin
{
CSocket.Address := kornetworldaddress; //game.megapass.net';
CSocket.Port := 9000;
BoOneClick := TRUE;
OneClickMode := toKornetWorld;
with KornetWorld do begin
CPIPcode := MainParam2;
SVCcode := MainParam3;
LoginID := MainParam4;
CheckSum := MainParam5; //'dkskxhdkslxlkdkdsaaaasa';
end;
}
end else begin
CSocket.Address := g_sMainParam2;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?