📄 usrengn.pas
字号:
unit UsrEngn;
interface
uses
Windows, Classes, SysUtils, StrUtils, Controls, Forms, ObjBase, ObjNpc, Envir, Grobal2, SDK;
type
TMonGenInfo = record
sMapName: string[14];
nRace: Integer;
nRange: Integer;
nMissionGenRate: Integer;
dwStartTick: LongWord;
nX: Integer;
nY: Integer;
sMonName: string[14];
nAreaX: Integer;
nAreaY: Integer;
nCount: Integer;
dwZenTime: LongWord;
dwStartTime: LongWord;
nChangeColorType: Integer; //2007-02- 01 增加 0自动变色 >0改变颜色 -1不改变
CertList: TList;
Envir: TEnvirnoment;
TList_3C: TList;
end;
pTMonGenInfo = ^TMonGenInfo;
TMapMonGenCount = record
sMapName: string[14];
nMonGenCount: Integer;
dwNotHumTimeTick: LongWord;
nClearCount: Integer;
boNotHum: Boolean;
dwMakeMonGenTimeTick: LongWord;
nMonGenRate: Integer; //刷怪倍数 10
dwRegenMonstersTime: LongWord; //刷怪速度 200
end;
pTMapMonGenCount = ^TMapMonGenCount;
TUserEngine = class
m_LoadPlaySection: TRTLCriticalSection;
m_LoadPlayList: TStringList; //从DB读取人物数据
m_PlayObjectList: TStringList; //0x8
m_StringList_0C: TStringList;
m_PlayObjectFreeList: TList; //0x10
m_ChangeHumanDBGoldList: TList; //0x14
dwShowOnlineTick: LongWord; //0x18
dwSendOnlineHumTime: LongWord; //0x1C
dwProcessMapDoorTick: LongWord; //0x20
dwProcessMissionsTime: LongWord; //0x24
dwRegenMonstersTick: LongWord; //0x28
CalceTime: LongWord; //0x2C
m_dwProcessLoadPlayTick: LongWord; //0x30
dwTime_34: LongWord; //0x34
m_nCurrMonGen: Integer; //0x38
m_nMonGenListPosition: Integer; //0x3C
m_nMonGenCertListPosition: Integer; //0x40
m_nProcHumIDx: Integer; //0x44 处理人物开始索引(每次处理人物数限制)
nProcessHumanLoopTime: Integer;
nMerchantPosition: Integer; //0x4C
nNpcPosition: Integer; //0x50
StdItemList: TList; //List_54
MonsterList: TList; //List_58
m_MonGenList: TList; //List_5C
m_MonFreeList: TList;
m_MagicList: TList; //List_60
m_MapMonGenCountList: TList;
m_AdminList: TGList; //List_64
m_MerchantList: TGList; //List_68
QuestNPCList: TList; //0x6C
List_70: TList;
m_ChangeServerList: TList;
m_MagicEventList: TList;
nMonsterCount: Integer; //怪物总数
nMonsterProcessPostion: Integer; //0x80处理怪物总数位置,用于计算怪物总数
n84: Integer;
nMonsterProcessCount: Integer; //0x88处理怪物数,用于统计处理怪物个数
boItemEvent: Boolean; //ItemEvent
n90: Integer;
dwProcessMonstersTick: LongWord;
dwProcessMerchantTimeMin: Integer;
dwProcessMerchantTimeMax: Integer;
dwProcessNpcTimeMin: LongWord;
dwProcessNpcTimeMax: LongWord;
m_NewHumanList: TList;
m_ListOfGateIdx: TList;
m_ListOfSocket: TList;
OldMagicList: TList;
m_nLimitUserCount: Integer; //限制用户数
m_nLimitNumber: Integer; //限制使用天数或次数
m_boStartLoadMagic: Boolean;
m_dwSearchTick: LongWord;
m_dwGetTodyDayDateTick: LongWord;
m_TodayDate: TDate;
m_PlayObjectLevelList: TSStringList; //人物等级排行
m_WarrorObjectLevelList: TSStringList; //战士等级排行
m_WizardObjectLevelList: TSStringList; //法师等级排行
m_TaoistObjectLevelList: TSStringList; //道士等级排行
m_PlayObjectMasterList: TSStringList; //徒弟数排行
m_HeroObjectLevelList: TSStringList; //英雄等级排行
m_WarrorHeroObjectLevelList: TSStringList; //英雄战士等级排行
m_WizardHeroObjectLevelList: TSStringList; //英雄法师等级排行
m_TaoistHeroObjectLevelList: TSStringList; //英雄道士等级排行
dwGetOrderTick: LongWord;
private
procedure ProcessHumans();
procedure ProcessMonsters();
procedure ProcessMerchants();
procedure ProcessNpcs();
procedure ProcessMissions();
procedure Process4AECFC();
procedure ProcessEvents();
procedure ProcessMapDoor();
procedure NPCinitialize;
procedure MerchantInitialize;
function MonGetRandomItems(mon: TBaseObject): Integer;
function RegenMonsters(MonGen: pTMonGenInfo; nCount: Integer): Boolean;
procedure WriteShiftUserData;
function GetGenMonCount(MonGen: pTMonGenInfo): Integer;
function AddBaseObject(sMapName: string; nX, nY: Integer; nMonRace: Integer; sMonName: string): TBaseObject;
function AddPlayObject(PlayObject: TPlayObject; nX, nY: Integer; sMonName: string): TBaseObject; //创建分身
procedure GenShiftUserData();
procedure KickOnlineUser(sChrName: string);
function SendSwitchData(PlayObject: TPlayObject; nServerIndex: Integer): Boolean;
procedure SendChangeServer(PlayObject: TPlayObject; nServerIndex: Integer);
procedure SaveHumanRcd(PlayObject: TPlayObject);
procedure AddToHumanFreeList(PlayObject: TPlayObject);
procedure GetHumData(PlayObject: TPlayObject; var HumanRcd: THumDataInfo);
procedure GetHeroData(BaseObject: TBaseObject; var HumanRcd: THumDataInfo);
function GetHomeInfo(var nX: Integer; var nY: Integer): string;
function GetRandHomeX(PlayObject: TPlayObject): Integer;
function GetRandHomeY(PlayObject: TPlayObject): Integer;
function GetSwitchData(sChrName: string; nCode: Integer): pTSwitchDataInfo;
procedure LoadSwitchData(SwitchData: pTSwitchDataInfo; var PlayObject: TPlayObject);
procedure DelSwitchData(SwitchData: pTSwitchDataInfo);
procedure MonInitialize(BaseObject: TBaseObject; sMonName: string);
function MapRageHuman(sMapName: string; nMapX, nMapY, nRage: Integer): Boolean;
function GetOnlineHumCount(): Integer;
function GetUserCount(): Integer;
function GetLoadPlayCount(): Integer;
function GetAutoAddExpPlayCount: Integer;
procedure GetHumanOrder();
public
constructor Create();
destructor Destroy; override;
procedure Initialize();
procedure ClearItemList(); virtual;
procedure SwitchMagicList();
procedure Run();
procedure PrcocessData();
procedure Execute;
function RegenMonsterByName(sMAP: string; nX, nY: Integer; sMonName: string): TBaseObject;
function RegenPlayByName(PlayObject: TPlayObject; nX, nY: Integer; sMonName: string): TBaseObject;
function RegenMyHero(PlayObject: TPlayObject; nX, nY: Integer; HumanRcd: THumDataInfo): TBaseObject;
function AddHeroObject(PlayObject: TPlayObject; nX, nY: Integer; HumanRcd: THumDataInfo): TBaseObject; //创建英雄
procedure SaveHeroRcd(PlayObject: TPlayObject);
procedure AddObjectToMonList(BaseObject: TBaseObject);
function GetStdItem(nItemIdx: Integer): pTStdItem; overload;
function GetStdItem(sItemName: string): pTStdItem; overload;
function GetStdItemWeight(nItemIdx: Integer): Integer;
function GetStdItemName(nItemIdx: Integer): string;
function GetStdItemIdx(sItemName: string): Integer;
function FindOtherServerUser(sName: string; var nServerIndex): Boolean;
procedure CryCry(wIdent: Word; pMap: TEnvirnoment; nX, nY, nWide: Integer; btFColor, btBColor: Byte; sMsg: string);
procedure ProcessUserMessage(PlayObject: TPlayObject; DefMsg: pTDefaultMessage; Buff: PChar);
procedure SendServerGroupMsg(nCode, nServerIdx: Integer; sMsg: string);
function GetMonRace(sMonName: string): Integer;
function InsMonstersList(MonGen: pTMonGenInfo; Monster: TAnimalObject): Boolean;
function GetHeroObject(HeroObject: TBaseObject): TPlayObject;
function GetPlayObject(sName: string): TPlayObject; overload;
function GetPlayObject(PlayObject: TBaseObject): TPlayObject; overload;
function GetPlayObjectEx(sAccount, sName: string): TPlayObject;
function GetPlayObjectExOfAutoGetExp(sAccount: string): TPlayObject;
procedure KickPlayObjectEx(sAccount, sName: string);
function FindMerchant(Merchant: TObject): TMerchant;
function FindNPC(GuildOfficial: TObject): TGuildOfficial;
function InMerchantList(Merchant: TMerchant): Boolean;
function InQuestNPCList(NPC: TNormNpc): Boolean;
function CopyToUserItemFromName(sItemName: string; Item: pTUserItem): Boolean;
function GetMapOfRangeHumanCount(Envir: TEnvirnoment; nX, nY, nRange: Integer): Integer;
function GetHumPermission(sUserName: string; var sIPaddr: string; var btPermission: Byte): Boolean;
procedure AddUserOpenInfo(UserOpenInfo: pTUserOpenInfo);
procedure RandomUpgradeItem(Item: pTUserItem);
procedure GetUnknowItemValue(Item: pTUserItem);
function OpenDoor(Envir: TEnvirnoment; nX, nY: Integer): Boolean;
function CloseDoor(Envir: TEnvirnoment; Door: pTDoorInfo): Boolean;
procedure SendDoorStatus(Envir: TEnvirnoment; nX, nY: Integer; wIdent, wX: Word; nDoorX, nDoorY, nA: Integer; sStr: string);
function FindMagic(sMagicName: string): pTMagic; overload;
function FindMagic(nMagIdx: Integer): pTMagic; overload;
function FindHeroMagic(sMagicName: string): pTMagic; overload;
function FindHeroMagic(nMagIdx: Integer): pTMagic; overload;
function AddMagic(Magic: pTMagic): Boolean;
function DelMagic(wMagicId: Word): Boolean;
procedure AddMerchant(Merchant: TMerchant);
function GetMerchantList(Envir: TEnvirnoment; nX, nY, nRange: Integer; TmpList: TList): Integer;
function GetNpcList(Envir: TEnvirnoment; nX, nY, nRange: Integer; TmpList: TList): Integer;
procedure ReloadMerchantList();
procedure ReloadNpcList();
procedure HumanExpire(sAccount: string);
function GetMapMonster(Envir: TEnvirnoment; List: TList): Integer;
function GetMapRangeMonster(Envir: TEnvirnoment; nX, nY, nRange: Integer; List: TList): Integer;
function GetMapHuman(sMapName: string): Integer;
function GetMapRageHuman(Envir: TEnvirnoment; nRageX, nRageY, nRage: Integer; List: TList): Integer;
procedure SendBroadCastMsg(sMsg: string; MsgType: TMsgType);
procedure SendBroadCastMsgExt(sMsg: string; MsgType: TMsgType);
procedure sub_4AE514(GoldChangeInfo: pTGoldChangeInfo);
procedure ClearMonSayMsg();
procedure SendQuestMsg(sQuestName: string);
procedure ClearMerchantData();
function GetMapMonGenCount(sMapName: string): pTMapMonGenCount;
function AddMapMonGenCount(sMapName: string; nMonGenCount: Integer): Integer;
function ClearMonsters(sMapName: string): Boolean;
property MonsterCount: Integer read nMonsterCount;
property OnlinePlayObject: Integer read GetOnlineHumCount;
property PlayObjectCount: Integer read GetUserCount;
property AutoAddExpPlayCount: Integer read GetAutoAddExpPlayCount;
property LoadPlayCount: Integer read GetLoadPlayCount;
end;
var
g_dwEngineTick: LongWord;
g_dwEngineRunTime: LongWord;
implementation
uses IdSrvClient, Guild, ObjMon, EDcode, ObjGuard, ObjAxeMon, M2Share,
ObjMon2, ObjPlayMon, ObjHero, Event, InterMsgClient, InterServerMsg, ObjRobot, HUtil32, svMain,
Castle, PlugIn, EDcodeUnit, Common;
{ TUserEngine }
constructor TUserEngine.Create();
begin
InitializeCriticalSection(m_LoadPlaySection);
m_LoadPlayList := TStringList.Create;
m_PlayObjectList := TStringList.Create;
m_StringList_0C := TStringList.Create;
m_PlayObjectFreeList := TList.Create;
m_ChangeHumanDBGoldList := TList.Create;
dwShowOnlineTick := GetTickCount;
dwSendOnlineHumTime := GetTickCount;
dwProcessMapDoorTick := GetTickCount;
dwProcessMissionsTime := GetTickCount;
dwProcessMonstersTick := GetTickCount;
dwRegenMonstersTick := GetTickCount;
m_dwProcessLoadPlayTick := GetTickCount;
dwTime_34 := GetTickCount;
m_nCurrMonGen := 0;
m_nMonGenListPosition := 0;
m_nMonGenCertListPosition := 0;
m_nProcHumIDx := 0;
nProcessHumanLoopTime := 0;
nMerchantPosition := 0;
nNpcPosition := 0;
m_nLimitNumber := 0;
m_nLimitUserCount := 0;
StdItemList := TList.Create; //List_54
MonsterList := TList.Create;
m_MonGenList := TList.Create;
m_MonFreeList := TList.Create;
m_MagicList := TList.Create;
m_AdminList := TGList.Create;
m_MerchantList := TGList.Create;
QuestNPCList := TList.Create;
List_70 := TList.Create;
m_ChangeServerList := TList.Create;
m_MagicEventList := TList.Create;
m_MapMonGenCountList := TList.Create;
boItemEvent := False;
n90 := 1800000;
dwProcessMerchantTimeMin := 0;
dwProcessMerchantTimeMax := 0;
dwProcessNpcTimeMin := 0;
dwProcessNpcTimeMax := 0;
m_NewHumanList := TList.Create;
m_ListOfGateIdx := TList.Create;
m_ListOfSocket := TList.Create;
OldMagicList := TList.Create;
m_boStartLoadMagic := False;
m_dwSearchTick := GetTickCount;
m_dwGetTodyDayDateTick := GetTickCount;
m_TodayDate := 0;
m_PlayObjectLevelList := TSStringList.Create; //人物排行 等级
m_WarrorObjectLevelList := TSStringList.Create; //战士等级排行
m_WizardObjectLevelList := TSStringList.Create; //法师等级排行
m_TaoistObjectLevelList := TSStringList.Create; //道士等级排行
m_PlayObjectMasterList := TSStringList.Create; //徒弟数排行
m_HeroObjectLevelList := TSStringList.Create; //英雄等级排行
m_WarrorHeroObjectLevelList := TSStringList.Create; //英雄战士等级排行
m_WizardHeroObjectLevelList := TSStringList.Create; //英雄法师等级排行
m_TaoistHeroObjectLevelList := TSStringList.Create; //英雄道士等级排行
dwGetOrderTick := GetTickCount;
end;
destructor TUserEngine.Destroy;
var
I: Integer;
II: Integer;
MonInfo: pTMonInfo;
MonGenInfo: pTMonGenInfo;
MagicEvent: pTMagicEvent;
TmpList: TList;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -