📄 cmain.pas
字号:
unit CMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, ExtCtrls, Buttons, JSocket, StdCtrls, Share,
RzButton, Grobal2, ObjectBase, OleCtrls, ShockwaveFlashObjects_TLB;
const
MAXBAGITEMCL = 52;
type
TConnectionStep = (cnsLogin, cnsSelChr, cnsReSelChr, cnsPlay);
TSceneType = (stIntro, st_NewAccount, stLogin, stSelectServer, stSelectCountry, stSelectChr, stNewChr, stLoading,
stLoginNotice, stPlayGame);
TScene = (s_None, s_Intro, s_NewAccount, s_Login, s_SelectServer, s_SelectChr, s_LoginNotice, s_Play);
TTimerCommand = (tcSoftClose, tcReSelConnect, tcFastQueryChr, tcQueryItemPrice);
TUserCharacterInfo = record
sName: string[19];
btJob: Byte;
btHair: Byte;
wLevel: Word;
btSex: Byte;
end;
TSelChar = record
boValid: Boolean;
UserChr: TUserCharacterInfo;
boSelected: Boolean;
boFreezeState: Boolean; //TRUE:倔篮惑怕 FALSE:踌篮惑怕
boUnfreezing: Boolean; //踌绊 乐绰 惑怕牢啊?
boFreezing: Boolean; //倔绊 乐绰 惑怕?
nAniIndex: Integer; //踌绰(绢绰) 局聪皋捞记
nDarkLevel: Integer;
nEffIndex: Integer; //瓤苞 局聪皋捞记
dwStartTime: LongWord;
dwMoretime: LongWord;
dwStartefftime: LongWord;
end;
TPlayScene = class
m_MySelf: THumActor;
m_TargetCret: TActor;
m_FocusCret: TActor;
m_MagicTarget: TActor;
m_MsgList: TList;
m_ActorList: TList;
m_FreeActorList: TList;
m_ChangeFaceReadyList: TList;
private
public
constructor Create;
destructor Destroy; override;
procedure SendMsg(nIdent, nChrID, nX, nY, nDir, nFeature, nState: Integer; sMsg: string);
function FindActor(nChrID: Integer): TActor; overload;
function FindActor(sName: string): TActor; overload;
function FindActorXY(nX, nY: Integer): TActor;
function IsValidActor(Actor: TActor): Boolean;
function NewActor(nChrID: Integer; wX, wY, wDir: Word; nFeature, nState: Integer): TActor;
procedure ActorDied(Actor: TObject);
procedure SetActorDrawLevel(Actor: TObject; nLevel: Integer);
procedure ClearActors;
procedure ClearObjects();
function DeleteActor(nChrID: Integer): TActor;
procedure DelActor(Actor: TObject);
function IsChangingFace(nRecogID: Integer): Boolean;
end;
TfrmCMain = class(TForm)
MainMenu1: TMainMenu;
MENU_CONTROL: TMenuItem;
MENU_CONTROL_EXIT: TMenuItem;
TimerMain: TTimer;
StatusBar: TStatusBar;
PanelMenu: TPanel;
PanelTitle: TPanel;
PanelClient: TPanel;
CSocket: TClientSocket;
PanelUserLogin: TPanel;
Label1: TLabel;
Label2: TLabel;
ButtonLoginClose: TSpeedButton;
EditUserAccount: TEdit;
EditUserPassword: TEdit;
ButtonStart: TRzButton;
PanelMessageDlg: TPanel;
MsgBoxClose: TSpeedButton;
MsgBoxOK: TRzButton;
MsgBoxCancel: TRzButton;
MsgBoxYes: TRzButton;
MsgBoxNo: TRzButton;
MsgBoxLabel: TLabel;
PanelSelectServer: TPanel;
ButtonSelectServerClose: TSpeedButton;
ButtonServer1: TRzButton;
ButtonServer2: TRzButton;
ButtonServer3: TRzButton;
ButtonServer4: TRzButton;
ButtonServer5: TRzButton;
ButtonServer6: TRzButton;
ButtonServer7: TRzButton;
ButtonServer8: TRzButton;
CmdTimer: TTimer;
SelChrWaitTimer: TTimer;
PanelSelectChr: TPanel;
ButtonSelectChrClose: TSpeedButton;
GroupBox1: TGroupBox;
Label3: TLabel;
EditSelectChrName1: TEdit;
Label4: TLabel;
EditSelectChrJob1: TEdit;
Label5: TLabel;
EditSelectChrLevel1: TEdit;
Label6: TLabel;
EditSelectChrSex1: TEdit;
ButtonSelectChr1: TRzButton;
GroupBox2: TGroupBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
EditSelectChrName2: TEdit;
EditSelectChrJob2: TEdit;
EditSelectChrLevel2: TEdit;
EditSelectChrSex2: TEdit;
ButtonSelectChr2: TRzButton;
GroupBox3: TGroupBox;
EditSelectChrCurChr: TEdit;
ButtonSelectChrStartPlay: TRzButton;
ButtonSelectChrNewChr: TRzButton;
ButtonSelectChrDelChr: TRzButton;
WaitMsgTimer: TTimer;
PanelPlayGame: TPanel;
MinTimer: TTimer;
Panel1: TPanel;
EditChat: TEdit;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton17: TSpeedButton;
ButtonPlayGameClose: TSpeedButton;
LabelPlayGameHP: TLabel;
LabelPlayGameMP: TLabel;
ListBoxActor: TListBox;
LabelPlayGameLevel: TLabel;
PanelCreateNewChr: TPanel;
ButtonCreateNewChr: TSpeedButton;
GroupBox4: TGroupBox;
ButtonCreateNewChrWarr: TRzButton;
ButtonCreateNewChrWizard: TRzButton;
ButtonCreateNewChrTaos: TRzButton;
ButtonCreateNewChrFemale: TRzButton;
ButtonCreateNewChrMale: TRzButton;
ButtonCreateNewChrOK: TRzButton;
GroupBox5: TGroupBox;
Label11: TLabel;
EditCreateNewChrName: TEdit;
EditCreateNewChrSex: TEdit;
Label13: TLabel;
EditCreateNewChrJob: TEdit;
Label14: TLabel;
ListBoxChat: TListBox;
PopupMenu: TPopupMenu;
POPMENU_AUTOSCROLL: TMenuItem;
ButtonNewAccount: TRzButton;
PanelNewAccount: TPanel;
ButtonPanelNewAccountClose: TSpeedButton;
LabelStatus: TLabel;
GroupBox6: TGroupBox;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
EditPassword: TEdit;
EditAccount: TEdit;
EditConfirm: TEdit;
EditYourName: TEdit;
EditSSNo: TEdit;
EditBirthDay: TEdit;
EditQuiz1: TEdit;
EditAnswer1: TEdit;
EditQuiz2: TEdit;
EditAnswer2: TEdit;
MemoHelp: TMemo;
EditPhone: TEdit;
EditMobPhone: TEdit;
EditEMail: TEdit;
ButtonPanelNewAccountOK: TRzButton;
PanelPlay: TPanel;
GroupBox7: TGroupBox;
CheckBoxAutoLogin: TCheckBox;
ButtonChr1: TRadioButton;
ButtonChr2: TRadioButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure TimerMainTimer(Sender: TObject);
procedure MENU_CONTROL_EXITClick(Sender: TObject);
procedure CSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketConnecting(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure CSocketLookup(Sender: TObject; Socket: TCustomWinSocket);
procedure CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure PanelUserLoginMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure EditUserAccountKeyPress(Sender: TObject; var Key: Char);
procedure ButtonStartClick(Sender: TObject);
procedure MsgBoxOKClick(Sender: TObject);
procedure ButtonServer1Click(Sender: TObject);
procedure CmdTimerTimer(Sender: TObject);
procedure ButtonSelectChr1Click(Sender: TObject);
procedure EditChatKeyPress(Sender: TObject; var Key: Char);
procedure ListBoxActorDblClick(Sender: TObject);
procedure ListBoxActorDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure ListBoxChatDblClick(Sender: TObject);
procedure POPMENU_AUTOSCROLLClick(Sender: TObject);
procedure ListBoxChatClick(Sender: TObject);
procedure EditAccountEnter(Sender: TObject);
procedure ButtonPanelNewAccountOKClick(Sender: TObject);
procedure CheckBoxAutoLoginClick(Sender: TObject);
function GetRGB(c256: Byte): TColor;
private
m_boTimerMainBusy: BOOL;
m_boOpened: BOOL;
m_dwOpenTick: LongWord;
m_dwMinTick: LongWord;
m_sSockText: string;
m_sBufferText: string;
m_sLoginAccount: string;
m_sLoginPasswd: string;
m_nCertification: Integer;
m_TimerCmd: TTimerCommand;
m_sCharName: string;
m_CharMsgList: TStringList;
m_CharBkColorList: TList;
m_nChatBoardTop: Integer;
m_GuildChatMsgList: TStringList;
m_sWhisperName: string;
m_dwRunOneTick: LongWord;
m_boChatAutoScroll: BOOL;
dwOKTick: LongWord;
m_boAutoLogin: BOOL;
m_nAutoChr: Integer;
g_PlayScene: TPlayScene;
g_nMySpeedPoint: Integer; //敏捷
g_nMyHitPoint: Integer; //准确
g_nMyAntiPoison: Integer; //魔法躲避
g_nMyPoisonRecover: Integer; //中毒恢复
g_nMyHealthRecover: Integer; //体力恢复
g_nMySpellRecover: Integer; //魔法恢复
g_nMyAntiMagic: Integer; //魔法躲避
g_nMyHungryState: Integer; //饥饿状态
g_boNextTimePowerHit: BOOL; //打开攻杀
g_boCanLongHit: BOOL; //打开刺杀
g_boCanWideHit: BOOL; //打开半月
g_boCanCrsHit: BOOL;
g_boCanTwnHit: BOOL;
g_boCanStnHit: BOOL;
g_boNextTimeFireHit: BOOL;
g_dwLatestFireHitTick: LongWord;
g_sGoldName: string;
g_sGameGoldName: string;
g_sGamePointName: string;
g_btCode: Byte;
g_boSendLogin: BOOL;
g_boServerConnected: BOOL;
g_SoftClosed: BOOL;
g_ConnectionStep: TConnectionStep; //当前游戏网络连接步骤
g_CurrentScene: TScene; //当前界面状态
g_boServerChanging: BOOL;
g_boMapMoving: BOOL;
g_sWaitingStr: string;
g_WaitingMsg: TDefaultMessage;
g_boMapMovingWait: BOOL;
g_ServerList: TStringList;
g_sServerMiniName: string;
g_sServerName: string;
g_wAvailIDDay: Word;
g_wAvailIDHour: Word;
g_wAvailIPDay: Word;
g_wAvailIPHour: Word;
g_boDoFastFadeOut: BOOL;
g_dwFirstServerTime: LongWord;
g_dwFirstClientTime: LongWord;
g_sSelChrAddr: string;
g_nSelChrPort: Integer;
g_sRunServerAddr: string;
g_nRunServerPort: Integer;
g_ChrArr: array[0..1] of TSelChar;
g_ChangeFaceReadyList: TList;
g_FreeActorList: TList;
g_nTargetX: Integer;
g_nTargetY: Integer;
g_sMapTitle: string;
g_sMapName: string;
g_nMapMusic: Integer;
g_MagicList: TList;
g_UseItems: array[0..12] of TClientItem;
g_ItemArr: array[0..MAXBAGITEMCL - 1] of TClientItem;
g_boBagLoaded: BOOL;
g_boAllowGroup: BOOL;
g_boActionLock: BOOL;
g_nReceiveCount: Integer;
NewIdRetryUE: TUserEntry;
NewIdRetryAdd: TUserEntryAdd;
m_sMakeNewId: string;
procedure WaitAndPass(dwMsec: LongWord);
procedure ActiveCmdTimer(Cmd: TTimerCommand);
procedure SetTopOrder(Control: TControl);
function MessageDlg(sMsg: string; DlgButtons: TMsgDlgButtons): TModalResult;
procedure CloseScene;
procedure OpenScene();
procedure ChangeScene(SceneType: TSceneType);
procedure ProcessMsg(Msg: Pointer);
procedure ShowSelectServer;
procedure ActionFailed();
procedure CheckSpeedHack(dwTime: LongWord);
procedure DecodeMessagePacket(sDataBlock: string);
procedure ClientNewIDSuccess();
procedure ClientNewIDFail(nFailCode: Integer);
procedure ClientLoginFail(nFailCode: Integer);
procedure ClientGetPasswordOK(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetPasswdSuccess(sData: string);
procedure ClientGetReceiveChrs(sData: string);
procedure ClientQueryChrFail(nFailCode: Integer);
procedure ClientNewChrFail(nFailCode: Integer);
procedure ClientDelChrFail(nFailCode: Integer);
procedure ClientGetStartPlay(sData: string);
procedure ClientStartPlayFail();
procedure ClientVersionFail();
procedure ClientGetSendNotice(sData: string);
procedure ClientGetNewMap(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetReconnect(sData: string);
procedure ClientGetAreaState(nAreaState: Integer);
procedure ClientGetMapDescription(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetGameGoldName(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetAdjustBonus(nBonusPoint: Integer; sData: string);
procedure ClientGetMyStatus(DefMsg: TDefaultMessage);
procedure ClientGetObjTurn(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetBackStep(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetAbility(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetSubAbility(DefMsg: TDefaultMessage);
procedure ClientGetDayChanging(DefMsg: TDefaultMessage);
procedure ClientGetWinExp(DefMsg: TDefaultMessage);
procedure ClientGetLevelUp(DefMsg: TDefaultMessage);
procedure CliengGetHealthSpellChaged(DefMsg: TDefaultMessage);
procedure ClientGetStruck(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetUserLogin(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetMessage(DefMsg: TDefaultMessage; sData: string);
procedure ClientHearMsg(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetUserName(DefMsg: TDefaultMessage; sData: string);
procedure ClientGetUserNameColor(DefMsg: TDefaultMessage);
procedure ClientGetHideObject(DefMsg: TDefaultMessage);
procedure ClientObjDigup(DefMsg: TDefaultMessage; sData: string);
procedure ClientObjDigDown(DefMsg: TDefaultMessage);
procedure ClientGetAddItem(sData: string);
procedure ClientGetBagItmes(sData: string);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -