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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? event.pas

?? 飛爾傳奇世界的引擎代碼可直接編譯M2Engine 請(qǐng)使用Delphi編譯
?? PAS
字號(hào):
unit Event;

interface

uses
  Windows, Classes, SysUtils, SyncObjs, ObjBase, Envir, Grobal2, SDK;
type
  TEvent = class;

  pTMagicEvent = ^TMagicEvent;
  TMagicEvent = record
    BaseObjectList: TList;
    dwStartTick: DWord;
    dwTime: DWord;
    Events: array[0..7] of TEvent;
  end;

  TEvent = class
    nVisibleFlag: Integer;
    m_Envir: TEnvirnoment;
    m_nX: Integer;
    m_nY: Integer;
    m_nEventType: Integer;
    m_nEventParam: Integer;
    m_dwOpenStartTick: LongWord;
    m_dwContinueTime: LongWord; //  顯示時(shí)間長(zhǎng)度
    m_dwCloseTick: LongWord;
    m_boClosed: Boolean;
    m_nDamage: Integer;
    m_OwnBaseObject: TBaseObject;
    m_dwRunStart: LongWord;
    m_dwRunTick: LongWord;
    m_boVisible: Boolean;
    m_boActive: Boolean;
  public
    constructor Create(tEnvir: TEnvirnoment; nTX, nTY, nType, dwETime: Integer; boVisible: Boolean);
    destructor Destroy; override;
    procedure Run(); virtual;
    procedure Close();
  end;
  TStoneMineEvent = class(TEvent)
    m_nMineCount: Integer;
    m_nAddStoneCount: Integer;
    m_dwAddStoneMineTick: LongWord;
  public
    constructor Create(Envir: TEnvirnoment; nX, nY: Integer; nType: Integer);
    destructor Destroy; override;
    procedure AddStoneMine();
  end;
  TPileStones = class(TEvent)
  public
    constructor Create(Envir: TEnvirnoment; nX, nY: Integer; nType, nTime: Integer);
    destructor Destroy; override;
    procedure AddEventParam();
  end;
  THolyCurtainEvent = class(TEvent)
  public
    constructor Create(Envir: TEnvirnoment; nX, nY: Integer; nType, nTime: Integer);
    destructor Destroy; override;
  end;
  TFireBurnEvent = class(TEvent)
    m_dwRunTick: LongWord;
  public
    constructor Create(Creat: TBaseObject; nX, nY: Integer; nType: Integer; nTime, nDamage: Integer);
    destructor Destroy; override;
    procedure Run(); override;
  end;
  TSafeEvent = class(TEvent) //安全區(qū)光環(huán)
  public
    constructor Create(Envir: TEnvirnoment; nX, nY: Integer; nType: Integer);
    destructor Destroy; override;
    procedure Run(); override;
  end;

  TFlowerEvent = class(TEvent) //煙花
  public
    constructor Create(Envir: TEnvirnoment; nX, nY: Integer; nType, nTime: Integer);
    destructor Destroy; override;
    procedure Run(); override;
  end;
  //==============================================================================
  TEventManager = class
    m_EventList: TGList;
    m_ClosedEventList: TGList;
  public
    constructor Create();
    destructor Destroy; override;
    function GetEvent(Envir: TEnvirnoment; nX, nY: Integer; nType: Integer): TEvent;
    function GetRangeEvent(Envir: TEnvirnoment; OwnBaseObject: TBaseObject; nX, nY, nRange: Integer; nType: Integer): Integer;
    procedure AddEvent(Event: TEvent);
    function FindEvent(Envir: TEnvirnoment; Event: TEvent): TEvent;
    procedure Run();
  end;
implementation

uses M2Share;

{ TStoneMineEvent }

constructor TStoneMineEvent.Create(Envir: TEnvirnoment; nX, nY,
  nType: Integer);
begin
  inherited Create(Envir, nX, nY, nType, 0, False);
  m_Envir.AddToMapMineEvent(nX, nY, OS_EVENTOBJECT, Self);
  m_boVisible := False;
  m_nMineCount := Random(200);
  m_dwAddStoneMineTick := GetTickCount();
  m_boActive := False;
  m_nAddStoneCount := Random(80);
end;

destructor TStoneMineEvent.Destroy;
begin

  inherited;
end;
{ TEventManager }
procedure TEventManager.Run;
var
  I: Integer;
  Event: TEvent;
begin
  m_EventList.Lock;
  try
    for I := m_EventList.Count - 1 downto 0 do begin
      Event := TEvent(m_EventList.Items[I]);
      if Event.m_boActive and ((GetTickCount - Event.m_dwRunStart) > Event.m_dwRunTick) then begin
        Event.m_dwRunStart := GetTickCount();
        Event.Run();
        if Event.m_boClosed then begin
          m_ClosedEventList.Lock;
          try
            m_ClosedEventList.Add(Event);
          finally
            m_ClosedEventList.UnLock;
          end;
          m_EventList.Delete(I);
        end;
      end;
    end;
  finally
    m_EventList.UnLock;
  end;

  m_ClosedEventList.Lock;
  try
    for I := m_ClosedEventList.Count - 1 downto 0 do begin
      Event := TEvent(m_ClosedEventList.Items[I]);
      if (GetTickCount - Event.m_dwCloseTick) > 5 * 60 * 1000 then begin
        Event.Free;
        m_ClosedEventList.Delete(I);
      end;
    end;
  finally
    m_ClosedEventList.UnLock;
  end;
end;

function TEventManager.GetRangeEvent(Envir: TEnvirnoment; OwnBaseObject: TBaseObject;
  nX, nY, nRange: Integer; nType: Integer): Integer;
var
  I: Integer;
  Event: TEvent;
begin
  Result := 0;
  m_EventList.Lock;
  try
    for I := 0 to m_EventList.Count - 1 do begin
      Event := TEvent(m_EventList.Items[I]);
      if (Event.m_OwnBaseObject = OwnBaseObject) and
        (abs(Event.m_nX - nX) <= nRange) and
        (abs(Event.m_nY - nY) <= nRange) and
        (Event.m_nEventType = nType) then begin
        Inc(Result);
      end;
    end;
  finally
    m_EventList.UnLock;
  end;
end;

function TEventManager.GetEvent(Envir: TEnvirnoment; nX, nY,
  nType: Integer): TEvent;
var
  I: Integer;
  Event: TEvent;
begin
  Result := nil;
  m_EventList.Lock;
  try
    for I := 0 to m_EventList.Count - 1 do begin
      Event := TEvent(m_EventList.Items[I]);
      if (Event.m_Envir = Envir) and
        (Event.m_nX = nX) and
        (Event.m_nY = nY) and
        (Event.m_nEventType = nType) then begin
        Result := Event;
        Break;
      end;
    end;
  finally
    m_EventList.UnLock;
  end;
end;

function TEventManager.FindEvent(Envir: TEnvirnoment; Event: TEvent): TEvent;
var
  I: Integer;
begin
  Result := nil;
  m_EventList.Lock;
  try
    for I := 0 to m_EventList.Count - 1 do begin
      if (TEvent(m_EventList.Items[I]).m_Envir = Envir) and (TEvent(m_EventList.Items[I]) = Event) then begin
        Result := TEvent(m_EventList.Items[I]);
        Break;
      end;
    end;
  finally
    m_EventList.UnLock;
  end;
end;

procedure TEventManager.AddEvent(Event: TEvent);
begin
  m_EventList.Lock;
  try
    m_EventList.Add(Event);
  finally
    m_EventList.UnLock;
  end;
end;

constructor TEventManager.Create();
begin
  m_EventList := TGList.Create;
  m_ClosedEventList := TGList.Create;
end;

destructor TEventManager.Destroy;
var
  I: Integer;
begin
  for I := 0 to m_EventList.Count - 1 do begin
    TEvent(m_EventList.Items[I]).Free;
  end;
  m_EventList.Free;
  for I := 0 to m_ClosedEventList.Count - 1 do begin
    TEvent(m_ClosedEventList.Items[I]).Free;
  end;
  m_ClosedEventList.Free;
  inherited;
end;

{ THolyCurtainEvent }

constructor THolyCurtainEvent.Create(Envir: TEnvirnoment; nX, nY, nType, nTime: Integer);
begin
  inherited Create(Envir, nX, nY, nType, nTime, True);
end;

destructor THolyCurtainEvent.Destroy;
begin

  inherited;
end;
{ TSafeEvent 安全區(qū)光環(huán)}

constructor TSafeEvent.Create(Envir: TEnvirnoment; nX, nY: Integer; nType: Integer);
begin
  inherited Create(Envir, nX, nY, nType, GetTickCount, True);
end;

destructor TSafeEvent.Destroy;
begin

  inherited;
end;

procedure TSafeEvent.Run();
begin
  m_dwOpenStartTick := GetTickCount();
  inherited;
end;

{ TFlowerEvent 煙花}

constructor TFlowerEvent.Create(Envir: TEnvirnoment; nX, nY: Integer; nType, nTime: Integer);
begin
  inherited Create(Envir, nX, nY, nType, nTime, True);
end;

destructor TFlowerEvent.Destroy;
begin

  inherited;
end;

procedure TFlowerEvent.Run();
begin
  //m_dwOpenStartTick := GetTickCount();
  inherited;
end;

{ TFireBurnEvent }

constructor TFireBurnEvent.Create(Creat: TBaseObject; nX, nY, nType, nTime, nDamage: Integer);
begin
  inherited Create(Creat.m_PEnvir, nX, nY, nType, nTime, True);
  m_nDamage := nDamage;
  m_OwnBaseObject := Creat;
end;

destructor TFireBurnEvent.Destroy;
begin

  inherited;
end;

procedure TFireBurnEvent.Run;
var
  I: Integer;
  BaseObjectList: TList;
  TargeTBaseObject: TBaseObject;
begin
  if (GetTickCount - m_dwRunTick) > 3000 then begin
    m_dwRunTick := GetTickCount();
    BaseObjectList := TList.Create;
    if m_Envir <> nil then begin
      m_Envir.GeTBaseObjects(m_nX, m_nY, True, BaseObjectList);
      for I := 0 to BaseObjectList.Count - 1 do begin
        TargeTBaseObject := TBaseObject(BaseObjectList.Items[I]);
        if (TargeTBaseObject <> nil) and (m_OwnBaseObject <> nil) and (m_OwnBaseObject.IsProperTarget(TargeTBaseObject)) then begin
          TargeTBaseObject.SendMsg(m_OwnBaseObject, RM_MAGSTRUCK_MINE, 0, m_nDamage, 0, 0, '');
        end;
      end;
    end;
    BaseObjectList.Free;
  end;
  inherited;
end;

{ TEvent }

constructor TEvent.Create(tEnvir: TEnvirnoment; nTX, nTY, nType, dwETime: Integer; boVisible: Boolean);
begin
  m_dwOpenStartTick := GetTickCount();
  m_nEventType := nType;
  m_nEventParam := 0;
  m_dwContinueTime := dwETime;
  m_boVisible := boVisible;
  m_boClosed := False;
  m_Envir := tEnvir;
  m_nX := nTX;
  m_nY := nTY;
  m_boActive := True;
  m_nDamage := 0;
  m_OwnBaseObject := nil;
  m_dwRunStart := GetTickCount();
  m_dwRunTick := 500;
  if (m_Envir <> nil) and (m_boVisible) then begin
    m_Envir.AddToMap(m_nX, m_nY, OS_EVENTOBJECT, Self);
  end else m_boVisible := False;
  //EventCheck.Add(Self);
end;

destructor TEvent.Destroy;
var
  I: Integer;
begin
  {
  for I := 0 to EventCheck.Count - 1 do begin
    if EventCheck.Items[I] = Self then begin
      EventCheck.Delete(I);
      break;
    end;
  end;
  }
  inherited;
end;

procedure TEvent.Run;
begin
  if (GetTickCount - m_dwOpenStartTick) > m_dwContinueTime then begin
    m_boClosed := True;
    Close();
  end;
  if (not m_boClosed) and (m_OwnBaseObject <> nil) and (m_OwnBaseObject.m_btRaceServer = RC_PLAYOBJECT) and (m_nEventType = ET_FIRE) and g_Config.boChangeMapFireExtinguish and not m_OwnBaseObject.m_boSuperMan {2007-02-04 增加 機(jī)器人除外} then begin
    if (m_OwnBaseObject.m_PEnvir <> m_Envir) or (m_OwnBaseObject.m_PEnvir.sMapName <> m_Envir.sMapName) then begin //2006-11-12 火墻換地圖消失
      m_OwnBaseObject := nil;
      m_boClosed := True;
      Close();
      Exit;
    end;
  end;
  if (m_OwnBaseObject <> nil) and (m_OwnBaseObject.m_boGhost or (m_OwnBaseObject.m_boDeath)) then begin
    m_OwnBaseObject := nil;
  end;
end;

procedure TEvent.Close;
begin
  m_dwCloseTick := GetTickCount();
  if m_boVisible then begin
    m_boVisible := False;
    if m_Envir <> nil then begin
      m_Envir.DeleteFromMap(m_nX, m_nY, OS_EVENTOBJECT, Self);
    end;
    m_Envir := nil;
  end;
end;

{ TPileStones }

constructor TPileStones.Create(Envir: TEnvirnoment; nX, nY, nType,
  nTime: Integer);
begin
  inherited Create(Envir, nX, nY, nType, nTime, True);
  m_nEventParam := 1;
end;

destructor TPileStones.Destroy;
begin

  inherited;
end;

procedure TPileStones.AddEventParam;
begin
  if m_nEventParam < 5 then Inc(m_nEventParam);
end;

procedure TStoneMineEvent.AddStoneMine;
begin
  m_nMineCount := m_nAddStoneCount;
  m_dwAddStoneMineTick := GetTickCount();
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美福利一区二区| 久久精品国产一区二区| 中文字幕一区二区三区乱码在线 | 亚洲综合色在线| 亚洲图片欧美综合| 午夜视频在线观看一区二区| 午夜电影一区二区三区| 日韩精品国产欧美| 蜜桃传媒麻豆第一区在线观看| 日本va欧美va精品发布| 麻豆91免费观看| 国产剧情一区二区三区| 成人免费观看视频| 91老司机福利 在线| 91黄视频在线观看| 欧美久久免费观看| 日韩精品一区二区三区中文不卡 | 国产精品久久久久久久岛一牛影视| 中文字幕的久久| 亚洲精选视频在线| 丝袜诱惑制服诱惑色一区在线观看 | 一区二区三区四区不卡在线| 亚洲夂夂婷婷色拍ww47| 美女爽到高潮91| 国产成人在线免费观看| 一本到不卡免费一区二区| 欧美二区在线观看| 久久久精品天堂| 亚洲人快播电影网| 日韩中文字幕1| 国产精品996| 一本一本久久a久久精品综合麻豆| 欧美欧美欧美欧美首页| 26uuu精品一区二区| 最新国产成人在线观看| 日产欧产美韩系列久久99| 国产精品一色哟哟哟| 91激情在线视频| 亚洲精品一区二区精华| 亚洲男人天堂av网| 久久精品国产在热久久| 国产a级毛片一区| 成人精品国产一区二区4080| av电影天堂一区二区在线| 91小视频免费看| 91精品国产91久久久久久一区二区| 欧美激情中文不卡| 日韩精品一二三| 波多野结衣在线一区| 欧美久久一二区| 亚洲欧洲精品天堂一级| 美女视频第一区二区三区免费观看网站| 国产成人精品免费在线| 欧美日韩在线播| 欧美激情中文字幕| 美国一区二区三区在线播放| 色天使久久综合网天天| 久久九九99视频| 日韩av一二三| 欧美影院午夜播放| 亚洲国产高清不卡| 美日韩一级片在线观看| 欧美视频一区二区三区四区| 欧美韩日一区二区三区四区| 麻豆精品在线看| 欧美三区免费完整视频在线观看| 国产日韩欧美在线一区| 奇米影视在线99精品| 91官网在线观看| 中文字幕一区二区日韩精品绯色| 久久www免费人成看片高清| 在线区一区二视频| 国产精品无人区| 国产精品99久久久久| 欧美电视剧在线观看完整版| 三级久久三级久久久| 欧美探花视频资源| 亚洲免费在线视频| 成人高清av在线| 日本一二三不卡| 国产一区二区久久| 精品国产一区二区三区久久久蜜月| 亚洲国产精品天堂| 欧美在线免费播放| 亚洲伦理在线免费看| 成人18视频日本| 国产欧美视频一区二区| 精品一区二区免费视频| 日韩一级视频免费观看在线| 污片在线观看一区二区| 欧美午夜影院一区| 亚洲成人激情综合网| 欧美综合一区二区| 亚洲综合色视频| 欧美精品 国产精品| 91麻豆123| 1024成人网| 成人免费高清在线| 国产精品国产三级国产aⅴ中文| 国产呦精品一区二区三区网站| 日韩欧美一区二区视频| 日本欧美肥老太交大片| 欧美一区二区三区在| 热久久免费视频| 日韩精品一区二区三区中文精品| 麻豆91精品视频| 精品av久久707| 国产精品中文字幕日韩精品| 欧美激情一区在线观看| 99久久婷婷国产综合精品| 中文字幕视频一区| 色伊人久久综合中文字幕| 亚洲综合精品自拍| 91精品国模一区二区三区| 久久精品国产亚洲一区二区三区| 久久综合狠狠综合久久综合88| 国产一区免费电影| 欧美精彩视频一区二区三区| 国产成人免费高清| 亚洲免费av高清| 欧美日韩精品电影| 黄网站免费久久| 国产精品久久久久久久久晋中 | 亚洲一区二区在线观看视频| 欧美日本在线一区| 九九精品一区二区| 国产欧美日韩不卡免费| 91视视频在线观看入口直接观看www| 一区二区三区在线视频播放| 91麻豆精品国产综合久久久久久| 久久草av在线| 国产精品大尺度| 欧美久久久久久久久中文字幕| 久久99精品久久久| 亚洲三级电影全部在线观看高清| 欧美日韩精品久久久| 国产一区视频网站| 一区二区三区四区av| 欧美电影精品一区二区| 91在线码无精品| 日韩国产高清在线| 亚洲国产成人一区二区三区| 欧美在线观看禁18| 久久国产精品露脸对白| 中文字幕日韩一区二区| 欧美日韩一区三区四区| 国产福利91精品一区二区三区| 一区二区三区视频在线看| 精品久久久久久最新网址| 91免费版pro下载短视频| 蜜芽一区二区三区| 亚洲视频网在线直播| 日韩欧美成人一区| 色综合中文综合网| 青青草国产精品97视觉盛宴| 国产精品每日更新| 日韩亚洲欧美一区二区三区| 91尤物视频在线观看| 经典三级在线一区| 亚洲国产精品精华液网站| 国产日韩精品一区二区三区| 欧美精品一卡二卡| av在线不卡免费看| 韩国三级在线一区| 亚洲国产日韩在线一区模特| 欧美国产国产综合| 欧美一级免费大片| 色菇凉天天综合网| 国产高清不卡一区| 青青草精品视频| 亚洲成av人片在线观看无码| 国产精品久久精品日日| 精品蜜桃在线看| 欧美日韩1区2区| 欧美综合一区二区| www.成人网.com| 国产成人亚洲综合a∨婷婷图片| 日本在线不卡一区| 亚洲国产视频在线| 亚洲码国产岛国毛片在线| 国产欧美日本一区视频| 精品国产91久久久久久久妲己| 在线播放中文字幕一区| 在线亚洲人成电影网站色www| 成人app软件下载大全免费| 国产精品自拍网站| 国产自产视频一区二区三区| 日本大胆欧美人术艺术动态| 午夜精品久久久久影视| 亚洲一二三区不卡| 亚洲一区二区成人在线观看| 亚洲欧美日韩国产成人精品影院| 国产精品人妖ts系列视频| 久久久精品蜜桃| 久久久99精品免费观看不卡| 久久一夜天堂av一区二区三区| 精品福利av导航| 2014亚洲片线观看视频免费| 精品1区2区在线观看| 欧美不卡激情三级在线观看|