亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usrengn.pas

?? M2原代碼 M2原代碼
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
unit UsrEngn;

interface
uses
  Windows, Classes, SysUtils, StrUtils, Forms, ObjBase, ObjNpc, Envir ,Grobal2,SDK;
type
  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_AdminList               :TGList;     //List_64
    m_MerchantList            :TGList;     //List_68
    QuestNPCList              :TList;     //0x6C
    List_70                   :TList;
    m_ChangeServerList        :TList;
    m_MagicEventList          :TList;    //0x78
    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;
  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;
    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);
    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;

  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 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 GetPlayObject(sName:String):TPlayObject;
    function GetPlayObjectEx(sName:String):TPlayObject;
    procedure KickPlayObjectEx(sName:String);
    function FindMerchant(Merchant:TObject):TMerchant;
    function FindNPC(GuildOfficial:TObject):TGuildOfficial;
    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;
    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 DemoRun();
    procedure ClearMerchantData();
    property  MonsterCount:Integer read nMonsterCount;
    property  OnlinePlayObject:Integer read GetOnlineHumCount;
    property  PlayObjectCount:Integer read GetUserCount;
    property  LoadPlayCount:Integer read GetLoadPlayCount;
  end;
var
  g_dwEngineTick:LongWord;
  g_dwEngineRunTime:LongWord;

implementation

uses IdSrvClient, Guild, ObjMon, M2Share, EDcode, ObjGuard, ObjAxeMon,
  ObjMon2, Event, InterMsgClient, InterServerMsg, ObjRobot, HUtil32, svMain,
  Castle;
var
  nEngRemoteRun:Integer= -1;
{ 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;
  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;
  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;
end;

destructor TUserEngine.Destroy;
var
  I          :Integer;
  II         :Integer;
  MonInfo    :pTMonInfo;
  MonGenInfo :pTMonGenInfo;
  MagicEvent :pTMagicEvent;
  tmpList    :TList;
begin
  for I := 0 to m_LoadPlayList.Count - 1 do begin
    Dispose(pTUserOpenInfo(m_LoadPlayList.Objects[I]));
  end;
  m_LoadPlayList.Free;
  for I := 0 to m_PlayObjectList.Count - 1 do begin
    TPlayObject(m_PlayObjectList.Objects[I]).Free;
  end;
  m_PlayObjectList.Free;
  m_StringList_0C.Free;

  for I := 0 to m_PlayObjectFreeList.Count - 1 do begin
    TPlayObject(m_PlayObjectFreeList.Items[I]).Free;
  end;
  m_PlayObjectFreeList.Free;

  for I := 0 to m_ChangeHumanDBGoldList.Count - 1 do begin
    Dispose(pTGoldChangeInfo(m_ChangeHumanDBGoldList.Items[I]));
  end;
  m_ChangeHumanDBGoldList.Free;

  for I := 0 to StdItemList.Count - 1 do begin
    Dispose(pTStdItem(StdItemList.Items[i]));
  end;
  StdItemList.Free;

  for I := 0 to MonsterList.Count - 1 do begin
    MonInfo:=MonsterList.Items[I];
    if MonInfo.ItemList <> nil then begin
      for II := 0 to MonInfo.ItemList.Count - 1 do begin
        Dispose(pTMonItem(MonInfo.ItemList.Items[II]));
      end;
      MonInfo.ItemList.Free;
    end;
    Dispose(MonInfo);
  end;
  MonsterList.Free;
  
  for I := 0 to m_MonGenList.Count - 1 do begin
    MonGenInfo:=m_MonGenList.Items[I];
    for II := 0 to MonGenInfo.CertList.Count - 1 do begin
      TBaseObject(MonGenInfo.CertList.Items[II]).Free;
    end;
    Dispose(pTMonGenInfo(m_MonGenList.Items[I]));
  end;
  m_MonGenList.Free;
  
  for I := 0 to m_MonFreeList.Count - 1 do begin
    TBaseObject(m_MonFreeList.Items[I]).Free;
  end;
  m_MonFreeList.Free;

  for I := 0 to m_MagicList.Count - 1 do begin
    Dispose(pTMagic(m_MagicList.Items[i]));
  end;
  m_MagicList.Free;
  m_AdminList.Free;
  for I := 0 to m_MerchantList.Count - 1 do begin
    TMerchant(m_MerchantList.Items[i]).Free;
  end;
  m_MerchantList.Free;
  for I := 0 to QuestNPCList.Count - 1 do begin
    TNormNpc(QuestNPCList.Items[i]).Free;
  end;
  QuestNPCList.Free;
  List_70.Free;
  for I := 0 to m_ChangeServerList.Count - 1 do begin
    Dispose(pTSwitchDataInfo(m_ChangeServerList.Items[i]));
  end;
  m_ChangeServerList.Free;
  for I := 0 to m_MagicEventList.Count - 1 do begin
    MagicEvent:=m_MagicEventList.Items[I];
    if MagicEvent.BaseObjectList <> nil then MagicEvent.BaseObjectList.Free;

    Dispose(MagicEvent);
  end;
  m_MagicEventList.Free;
  m_NewHumanList.Free;
  m_ListOfGateIdx.Free;
  m_ListOfSocket.Free;
  for I := 0 to OldMagicList.Count - 1 do begin
    tmpList:=TList(OldMagicList.Items[I]);
    for II := 0 to tmpList.Count - 1 do begin
      Dispose(pTMagic(tmpList.Items[II]));
    end;
    tmpList.Free;
  end;   
  OldMagicList.Free;
  DeleteCriticalSection(m_LoadPlaySection);
  inherited;
end;

procedure TUserEngine.Initialize; //004B200C
var
  i:Integer;
  MonGen:pTMonGenInfo;
begin
  MerchantInitialize();
  NPCinitialize();
  for i:=0 to m_MonGenList.Count -1 do begin
    MonGen:=m_MonGenList.Items[i];
    if MonGen <> nil then begin
      MonGen.nRace:= GetMonRace(MonGen.sMonName);
    end;
  end;
end;

function TUserEngine.GetMonRace(sMonName:String):Integer;//004ACDD8
var
  i:integer;
  MonInfo:pTMonInfo;
begin
  Result:= -1;
    for i:=0 to MonsterList.Count -1 do begin
      MonInfo:=MonsterList.Items[i];
      if CompareText(MonInfo.sName,sMonName) = 0 then begin
        Result:=MonInfo.btRace;
        break;
      end;
    end;
end;
procedure TUserEngine.MerchantInitialize; //004AC96C
var
  I: Integer;
  Merchant:TMerchant;
  sCaption:String;
begin
  sCaption:=FrmMain.Caption;
  m_MerchantList.Lock;
  try
    for I := m_MerchantList.Count - 1 downto 0 do begin
      Merchant:=TMerchant(m_MerchantList.Items[i]);
      Merchant.m_PEnvir:=g_MapManager.FindMap(Merchant.m_sMapName);
      if Merchant.m_PEnvir <> nil then begin
        Merchant.Initialize;//FFFE
        if Merchant.m_boAddtoMapSuccess and (not Merchant.m_boIsHide) then begin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆91精品视频| 制服视频三区第一页精品| 国产一区二区三区香蕉| 日本一不卡视频| 日本视频在线一区| 日韩不卡一二三区| 蜜桃精品视频在线| 强制捆绑调教一区二区| 日韩电影免费在线观看网站| 喷水一区二区三区| 免费在线一区观看| 免费国产亚洲视频| 久久99精品国产.久久久久久| 精品一区二区三区在线播放| 另类综合日韩欧美亚洲| 久久97超碰色| 国产一区二区三区在线观看精品| 国产精品99久久久久久宅男| 丁香激情综合国产| 色综合天天天天做夜夜夜夜做| 91欧美激情一区二区三区成人| 日本韩国一区二区三区视频| 欧美艳星brazzers| 4438成人网| 精品捆绑美女sm三区| 久久久久国色av免费看影院| 国产精品丝袜久久久久久app| 亚洲欧洲日韩女同| 亚洲妇女屁股眼交7| 舔着乳尖日韩一区| 国产麻豆一精品一av一免费 | 亚洲一区二区偷拍精品| 性做久久久久久久久| 久久成人免费网| 国产.欧美.日韩| 色噜噜狠狠色综合中国| 欧美日韩成人一区| 精品久久人人做人人爱| 中文字幕第一区二区| 亚洲动漫第一页| 国产精品伊人色| 色噜噜狠狠色综合欧洲selulu| 91精品婷婷国产综合久久| 久久久久国产成人精品亚洲午夜| 日韩美女视频一区| 青青草国产精品亚洲专区无| 懂色av一区二区夜夜嗨| 精品视频一区 二区 三区| 精品国产乱码久久久久久闺蜜| 中文字幕一区二区三区色视频| 天天做天天摸天天爽国产一区| 国产成人免费9x9x人网站视频| 在线观看亚洲一区| 久久综合五月天婷婷伊人| 亚洲色图在线看| 久久不见久久见中文字幕免费| 99久久99精品久久久久久 | 亚洲综合一二区| 久久精品99久久久| 91福利资源站| 久久久91精品国产一区二区三区| 亚洲午夜视频在线观看| 国产精品性做久久久久久| 欧美日韩激情一区二区| 国产精品欧美久久久久一区二区 | 99re这里只有精品6| 欧美变态凌虐bdsm| 亚洲一区二区三区视频在线 | 欧洲一区在线电影| 国产网站一区二区三区| 男女男精品网站| 91蝌蚪国产九色| 久久精品亚洲国产奇米99| 亚洲va天堂va国产va久| 99re在线视频这里只有精品| 久久九九国产精品| 日本亚洲电影天堂| 欧美亚洲动漫精品| 亚洲欧洲在线观看av| 国产成人精品免费| 欧美成人一区二区三区在线观看| 亚洲综合另类小说| fc2成人免费人成在线观看播放| 欧美精品一区二区三区一线天视频| 天天综合天天综合色| 色婷婷久久99综合精品jk白丝 | 国产福利91精品| 日韩精品一区二区三区四区| 午夜精品视频在线观看| 91精品福利在线| 亚洲手机成人高清视频| 91一区二区三区在线播放| 国产人成亚洲第一网站在线播放| 麻豆精品一区二区av白丝在线| 欧美日韩色一区| 一区二区三区蜜桃网| 91免费版在线| 亚洲色图视频网站| 不卡的电影网站| 国产精品国产三级国产专播品爱网| 国产精品一线二线三线精华| 精品欧美乱码久久久久久1区2区| 日韩av高清在线观看| 欧美一二区视频| 久久国产精品第一页| 精品国产乱码久久久久久老虎| 韩国毛片一区二区三区| 精品少妇一区二区三区视频免付费| 毛片不卡一区二区| 欧美videos中文字幕| 精品写真视频在线观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品视频yy9299一区| 丁香五精品蜜臀久久久久99网站| 国产欧美一区二区精品婷婷 | 欧美激情综合五月色丁香小说| 国产一区二区不卡在线| 国产午夜亚洲精品羞羞网站| 国产精品123| 国产精品国产自产拍在线| 91影视在线播放| 亚洲午夜成aⅴ人片| 这里只有精品视频在线观看| 美女一区二区三区| 26uuu国产电影一区二区| 高清国产一区二区| 亚洲婷婷在线视频| 欧美日韩日本视频| 久久疯狂做爰流白浆xx| 中文字幕乱码一区二区免费| 91网页版在线| 婷婷开心久久网| xvideos.蜜桃一区二区| 99热在这里有精品免费| 亚洲午夜成aⅴ人片| 精品国产乱码久久久久久闺蜜 | 92国产精品观看| 亚洲国产中文字幕| 欧美精品一区二区久久久| 成人黄色av电影| 亚洲一区二区成人在线观看| 欧美成人一区二区| 92国产精品观看| 人人爽香蕉精品| 国产精品久久久久久久久久免费看| 欧洲亚洲国产日韩| 韩国在线一区二区| 亚洲狠狠丁香婷婷综合久久久| 欧美一区二区在线观看| 国产91精品一区二区麻豆网站| 亚洲最新视频在线播放| 欧美成人精品高清在线播放| 色综合久久天天| 九九精品视频在线看| 亚洲精品中文在线| 精品国产91乱码一区二区三区| 色www精品视频在线观看| 精品一区二区三区在线播放| 樱桃视频在线观看一区| 精品国产一区二区亚洲人成毛片| 97精品国产97久久久久久久久久久久 | 午夜伦理一区二区| 国产亚洲一本大道中文在线| 欧美日韩成人在线一区| caoporm超碰国产精品| 奇米色一区二区三区四区| 亚洲欧美在线视频观看| 日韩美女视频一区二区在线观看| 色欧美乱欧美15图片| 国产一区二区在线电影| 亚洲chinese男男1069| 国产精品的网站| 精品播放一区二区| 欧美久久久久久久久久| 97超碰欧美中文字幕| 韩国女主播一区二区三区| 五月综合激情婷婷六月色窝| 亚洲欧美怡红院| 久久精品在这里| 日韩一区二区三区免费看| 欧美三级三级三级爽爽爽| 成a人片国产精品| 精品一区二区三区久久| 首页国产丝袜综合| 亚洲精品少妇30p| 中文子幕无线码一区tr| 欧美精品一区二区久久久| 91精品国产黑色紧身裤美女| 欧美性xxxxxx少妇| 99久久精品免费精品国产| 国产福利视频一区二区三区| 久久99国内精品| 蜜臀av在线播放一区二区三区| 天天操天天干天天综合网| 亚洲激情自拍视频| 最新国产成人在线观看| 国产女主播视频一区二区| 久久亚洲精品小早川怜子| 欧美变态口味重另类| 精品日韩欧美在线|