?? clmain.pas
字號:
unit ClMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
JSocket, ExtCtrls, DXDraws, DirectX, DXClass, DrawScrn,
IntroScn, PlayScn, MapUnit, WIL, Grobal2, SDK,
Actor, DIB, StdCtrls, CliUtil, HUtil32, EdCode,
DWinCtl, ClFunc, magiceff, SoundUtil, DXSounds, clEvent, Wave, IniFiles,
Spin, ComCtrls, Grids, Mpeg, Menus, Mask, MShare, Share;
const
BO_FOR_TEST = FALSE;
EnglishVersion = True; //TRUE;
BoNeedPatch = TRUE;
NEARESTPALETTEINDEXFILE = 'Data\npal.idx';
MonImageDir = '.\Graphics\Monster\';
NpcImageDir = '.\Graphics\Npc\';
ItemImageDir = '.\Graphics\Items\';
WeaponImageDir = '.\Graphics\Weapon\';
HumImageDir = '.\Graphics\Human\';
type
TKornetWorld = record
CPIPcode: string;
SVCcode: string;
LoginID: string;
CheckSum: string;
end;
TOneClickMode = (toNone, toKornetWorld);
TfrmMain = class(TDxForm)
CSocket: TClientSocket;
Timer1: TTimer;
MouseTimer: TTimer;
WaitMsgTimer: TTimer;
SelChrWaitTimer: TTimer;
CmdTimer: TTimer;
MinTimer: TTimer;
SpeedHackTimer: TTimer;
DXDraw: TDXDraw;
WMonImg: TWMImages;
WMon2Img: TWMImages;
WMon3Img: TWMImages;
WMon4Img: TWMImages;
WMon5Img: TWMImages;
WMon6Img: TWMImages;
WMon7Img: TWMImages;
WMon8Img: TWMImages;
WMon9Img: TWMImages;
WMon10Img: TWMImages;
WMon11Img: TWMImages;
WMon12Img: TWMImages;
WMon13Img: TWMImages;
WMon14Img: TWMImages;
WMon15Img: TWMImages;
WMon16Img: TWMImages;
WMon17Img: TWMImages;
WMon18Img: TWMImages;
WMon19Img: TWMImages;
WMon20Img: TWMImages;
WMon21Img: TWMImages;
WMon22Img: TWMImages;
WMon23Img: TWMImages;
WMon50Img: TWMImages;
WMon51Img: TWMImages;
WMon52Img: TWMImages;
WMon53Img: TWMImages;
WMon54Img: TWMImages;
WEffectImg: TWMImages;
WDragonImg: TWMImages;
procedure DXDrawInitialize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure DXDrawFinalize(Sender: TObject);
procedure CSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Timer1Timer(Sender: TObject);
procedure DXDrawMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MouseTimerTimer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DXDrawDblClick(Sender: TObject);
procedure WaitMsgTimerTimer(Sender: TObject);
procedure SelChrWaitTimerTimer(Sender: TObject);
procedure DXDrawClick(Sender: TObject);
procedure CmdTimerTimer(Sender: TObject);
procedure MinTimerTimer(Sender: TObject);
procedure CheckHackTimerTimer(Sender: TObject);
procedure SendTimeTimerTimer(Sender: TObject);
procedure SpeedHackTimerTimer(Sender: TObject);
private
SocStr, BufferStr: string;
WarningLevel: Integer;
TimerCmd: TTimerCommand;
MakeNewId: string;
ActionLockTime: LongWord;
LastHitTick: LongWord;
ActionFailLock: Boolean;
ActionFailLockTime:LongWord;
FailAction, FailDir: integer;
ActionKey: word;
CursorSurface: TDirectDrawSurface;
mousedowntime: longword;
WaitingMsg: TDefaultMessage;
WaitingStr: string;
WhisperName: string;
procedure AutoPickUpItem();
procedure ProcessKeyMessages;
procedure ProcessActionMessages;
procedure CheckSpeedHack (rtime: Longword);
procedure DecodeMessagePacket (datablock: string);
procedure ActionFailed;
function GetMagicByKey (Key: char): PTClientMagic;
procedure UseMagic (tx, ty: integer; pcm: PTClientMagic);
procedure UseMagicSpell (who, effnum, targetx, targety, magic_id: integer);
procedure UseMagicFire (who, efftype, effnum, targetx, targety, target: integer);
procedure UseMagicFireFail (who: integer);
procedure CloseAllWindows;
procedure ClearDropItems;
procedure ResetGameVariables;
procedure ChangeServerClearGameVariables;
procedure _DXDrawMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure AttackTarget (target: TActor);
function CheckDoorAction (dx, dy: integer): Boolean;
procedure ClientGetPasswdSuccess (body: string);
procedure ClientGetNeedUpdateAccount (body: string);
procedure ClientGetSelectServer;
procedure ClientGetPasswordOK(Msg:TDefaultMessage;sBody:String);
procedure ClientGetReceiveChrs (body: string);
procedure ClientGetStartPlay (body: string);
procedure ClientGetReconnect (body: string);
procedure ClientGetServerConfig(Msg:TDefaultMessage;sBody:String);
procedure ClientGetMapDescription (Msg:TDefaultMessage;sBody:String);
procedure ClientGetGameGoldName (Msg:TDefaultMessage;sBody:String);
procedure ClientGetAdjustBonus (bonus: integer; body: string);
procedure ClientGetAddItem (body: string);
procedure ClientGetUpdateItem (body: string);
procedure ClientGetDelItem (body: string);
procedure ClientGetDelItems (body: string);
procedure ClientGetBagItmes (body: string);
procedure ClientGetDropItemFail (iname: string; sindex: integer);
procedure ClientGetShowItem (itemid, x, y, looks: integer; itmname: string);
procedure ClientGetHideItem (itemid, x, y: integer);
procedure ClientGetSenduseItems (body: string);
procedure ClientGetSendAddUseItems (body: string);
procedure ClientGetAddMagic (body: string);
procedure ClientGetDelMagic (magid: integer);
procedure ClientGetMyMagics (body: string);
procedure ClientGetMagicLvExp (magid, maglv, magtrain: integer);
procedure ClientGetDuraChange (uidx, newdura, newduramax: integer);
procedure ClientGetMerchantSay (merchant, face: integer; saying: string);
procedure ClientGetSendGoodsList (merchant, count: integer; body: string);
procedure ClientGetSendMakeDrugList (merchant: integer; body: string);
procedure ClientGetSendUserSell (merchant: integer);
procedure ClientGetSendUserRepair (merchant: integer);
procedure ClientGetSendUserStorage (merchant: integer);
procedure ClientGetSaveItemList (merchant: integer; bodystr: string);
procedure ClientGetSendDetailGoodsList (merchant, count, topline: integer; bodystr: string);
procedure ClientGetSendNotice (body: string);
procedure ClientGetGroupMembers (bodystr: string);
procedure ClientGetOpenGuildDlg (bodystr: string);
procedure ClientGetSendGuildMemberList (body: string);
procedure ClientGetDealRemoteAddItem (body: string);
procedure ClientGetDealRemoteDelItem (body: string);
procedure ClientGetReadMiniMap (mapindex: integer);
procedure ClientGetChangeGuildName (body: string);
procedure ClientGetSendUserState (body: string);
procedure DrawEffectHum(nType,nX,nY:Integer);
procedure ClientGetNeedPassword(Body:String);
procedure ClientGetPasswordStatus(Msg:pTDefaultMessage;Body:String);
procedure ClientGetRegInfo(Msg:pTDefaultMessage;Body:String);
procedure SetInputStatus();
procedure CmdShowHumanMsg(sParam1, sParam2, sParam3, sParam4,
sParam5: String);
procedure ShowHumanMsg(Msg: pTDefaultMessage);
procedure SendPowerBlock;
public
LoginId, LoginPasswd, CharName: string;
Certification: integer;
ActionLock: Boolean;
//MainSurface: TDirectDrawSurface;
NpcImageList:TList;
ItemImageList:TList;
WeaponImageList:TList;
HumImageList:TList;
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
procedure ProcOnIdle;
procedure AppOnIdle (Sender: TObject; var Done: Boolean);
procedure AppLogout;
procedure AppExit;
procedure PrintScreenNow;
procedure EatItem (idx: integer);
procedure SendClientMessage (msg, Recog, param, tag, series: integer);
procedure SendLogin (uid, passwd: string);
procedure SendNewAccount (ue: TUserEntry; ua: TUserEntryAdd);
procedure SendUpdateAccount (ue: TUserEntry; ua: TUserEntryAdd);
procedure SendSelectServer (svname: string);
procedure SendChgPw (id, passwd, newpasswd: string);
procedure SendNewChr (uid, uname, shair, sjob, ssex: string);
procedure SendQueryChr;
procedure SendDelChr (chrname: string);
procedure SendSelChr (chrname: string);
procedure SendRunLogin;
procedure SendSay (str: string);
procedure SendActMsg (ident, x, y, dir: integer);
procedure SendSpellMsg (ident, x, y, dir, target: integer);
procedure SendQueryUserName (targetid, x, y: integer);
procedure SendDropItem (name: string; itemserverindex: integer);
procedure SendPickup;
procedure SendTakeOnItem (where: byte; itmindex: integer; itmname: string);
procedure SendTakeOffItem (where: byte; itmindex: integer; itmname: string);
procedure SendEat (itmindex: integer; itmname: string);
procedure SendButchAnimal (x, y, dir, actorid: integer);
procedure SendMagicKeyChange (magid: integer; keych: char);
procedure SendMerchantDlgSelect (merchant: integer; rstr: string);
procedure SendQueryPrice (merchant, itemindex: integer; itemname: string);
procedure SendQueryRepairCost (merchant, itemindex: integer; itemname: string);
procedure SendSellItem (merchant, itemindex: integer; itemname: string);
procedure SendRepairItem (merchant, itemindex: integer; itemname: string);
procedure SendStorageItem (merchant, itemindex: integer; itemname: string);
procedure SendGetDetailItem (merchant, menuindex: integer; itemname: string);
procedure SendBuyItem (merchant, itemserverindex: integer; itemname: string);
procedure SendTakeBackStorageItem (merchant, itemserverindex: integer; itemname: string);
procedure SendMakeDrugItem (merchant: integer; itemname: string);
procedure SendDropGold (dropgold: integer);
procedure SendGroupMode (onoff: Boolean);
procedure SendCreateGroup (withwho: string);
procedure SendWantMiniMap;
procedure SendDealTry; //菊俊 葷恩撈 樂綽瘤 八葷
procedure SendGuildDlg;
procedure SendCancelDeal;
procedure SendAddDealItem (ci: TClientItem);
procedure SendDelDealItem (ci: TClientItem);
procedure SendChangeDealGold (gold: integer);
procedure SendDealEnd;
procedure SendAddGroupMember (withwho: string);
procedure SendDelGroupMember (withwho: string);
procedure SendGuildHome;
procedure SendGuildMemberList;
procedure SendGuildAddMem (who: string);
procedure SendGuildDelMem (who: string);
procedure SendGuildUpdateNotice (notices: string);
procedure SendGuildUpdateGrade (rankinfo: string);
procedure SendSpeedHackUser; //SpeedHaker 葷儈磊甫 輯滾俊 烹焊茄促.
procedure SendAdjustBonus (remain: integer; babil: TNakedAbility);
procedure SendPassword(sPassword:String;nIdent:Integer);
function TargetInSwordLongAttackRange (ndir: integer): Boolean;
function TargetInSwordWideAttackRange (ndir: integer): Boolean;
function TargetInSwordCrsAttackRange(ndir: integer): Boolean;
procedure OnProgramException (Sender: TObject; E: Exception);
procedure SendSocket (sendstr: string);
function ServerAcceptNextAction: Boolean;
function CanNextAction: Boolean;
function CanNextHit: Boolean;
function IsUnLockAction (action, adir: integer): Boolean;
procedure ActiveCmdTimer (cmd: TTimerCommand);
function IsGroupMember (uname: string): Boolean;
procedure SelectChr(sChrName:String);
function GetNpcImg(wAppr: Word; var WMImage: TWMImages): Boolean;
function GetWStateImg(Idx:Integer): TDirectDrawSurface;overload;
function GetWStateImg(Idx:Integer;var ax,ay:integer): TDirectDrawSurface;overload;
function GetWWeaponImg(Weapon,m_btSex,nFrame:Integer;var ax,ay:integer): TDirectDrawSurface;
function GetWHumImg(Dress,m_btSex,nFrame:Integer;var ax,ay:integer): TDirectDrawSurface;
procedure ProcessCommand(sData:String);
end;
function IsDebug():Boolean;
function IsDebugA():Boolean;
function CheckMirProgram: Boolean;
procedure PomiTextOut (dsurface: TDirectDrawSurface; x, y: integer; str: string);
procedure WaitAndPass (msec: longword);
function GetRGB (c256: byte): integer;
procedure DebugOutStr (msg: string);
var
nLeft :integer = 10;
nTop :integer = 10;
nWidth :integer;
nHeight :integer;
g_boShowMemoLog :Boolean = False;
g_boShowRecog :Integer = 0;
frmMain :TfrmMain;
DScreen :TDrawScreen;
IntroScene :TIntroScene;
LoginScene :TLoginScene;
SelectChrScene :TSelectChrScene;
PlayScene :TPlayScene;
LoginNoticeScene :TLoginNotice;
LocalLanguage :TImeMode = imSHanguel;
MP3 :TMPEG;
TestServerAddr :String = '127.0.0.1';
BGMusicList :TStringList;
//DObjList: TList; //官躥俊 函版等 瘤屈狼 釬泅
EventMan :TClEventManager;
KornetWorld :TKornetWorld;
Map :TMap;
BoOneClick :Boolean;
OneClickMode :TOneClickMode;
m_boPasswordIntputStatus:Boolean = False;
implementation
uses
FState, DlgConfig, gShare;
{$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;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -