⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objmon2.pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit ObjMon2;

interface
uses
  Windows,Classes,Grobal2,ObjBase, ObjMon;
type
  TStickMonster = class(TAnimalObject)
    n54C    :Integer;
    bo550   :Boolean;
    n554    :Integer;
    n558    :Integer;
  private

  public
    constructor Create();override;
    destructor Destroy; override;
    function  AttackTarget():Boolean;virtual;
    procedure sub_FFEA;virtual;
    procedure sub_FFE9;virtual;
    procedure VisbleActors;virtual;//FFE8
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
    procedure Run;override;
  end;

 TAXEHIDEMonster = class(TAnimalObject)
    n54C    :Integer;
    bo550   :Boolean;
    n554    :Integer;
    n558    :Integer;
  private
    procedure FlyAxeAttack(Target: TBaseObject);
  public
    constructor Create();override;
    destructor Destroy; override;
    function  AttackTarget():Boolean;virtual;
    procedure sub_FFEA;virtual;
    procedure sub_FFE9;virtual;
    procedure VisbleActors;virtual;//FFE8
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
    procedure Run;override;
  end;


  TBeeQueen = class(TAnimalObject)
    n54C      :Integer;
    BBList   :TList;
  private
    procedure MakeChildBee;
  public
    constructor Create();override;
    destructor Destroy; override;
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
    procedure Run;override;
  end;

  Tmontishen = class(TAnimalObject)

  private

  public
    constructor Create();override;
    destructor Destroy; override;

    procedure Run;override;
  end;

  TSeeBeeQueen = class(TAnimalObject)
    n54C      :Integer;
    BBList   :TList;
  private
    procedure MakeChildBee;
  public
    constructor Create();override;
    destructor Destroy; override;
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
    procedure Run;override;
  end;

  TCentipedeKingMonster = class(TStickMonster)
    m_dwAttickTick    :LongWord; //0x560
  private
    function sub_4A5B0C: Boolean;
  public
    constructor Create();override;
    destructor Destroy; override;
    function  AttackTarget():Boolean;override;
    procedure sub_FFE9;override;
    procedure Run;override;
  end;
  TBigHeartMonster = class(TAnimalObject)
  private

  public
    constructor Create();override;
    destructor Destroy; override;

    function AttackTarget():Boolean;virtual;
    procedure Run;override;
  end;
///
  Tbigheatmovemonster = class(TMonster)
  private

  public
    constructor Create();override;
    destructor Destroy; override;

    function AttackTarget():Boolean;virtual;
    procedure Run;override;
  end;


  Tbigheatmonsteraxe = class(TAnimalObject)  //固定位置全屏幕攻击 +麻痹
  private
    procedure FlyAxeAttack(Target: TBaseObject);
  public
    constructor Create();override;
    destructor Destroy; override;

    function AttackTarget():Boolean;virtual;
    procedure Run;override;
  end;
///
  Tbigearmonsteraxe = class(TAnimalObject)  //固定位置全屏幕攻击 +麻痹
  private
    procedure FlyAxeAttack(Target: TBaseObject);
  public
    constructor Create();override;
    destructor Destroy; override;

    function AttackTarget():Boolean;virtual;
    procedure Run;override;
  end;



  TSpiderHouseMonster = class(TAnimalObject)
    n54C    :Integer;
    BBList  :TList;
  private
    procedure GenBB;
  public
    constructor Create();override;
    destructor Destroy; override;
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
    procedure Run;override;
  end;
  TExplosionSpider = class(TMonster)
    dw558    :LongWord;
  private
    procedure sub_4A65C4;

  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
    function AttackTarget():Boolean; override; //FFEB
  end;
  TGuardUnit = class(TAnimalObject)
    dw54C              :LongWord;       //0x54C
    m_nX550            :Integer;      //0x550
    m_nY554            :Integer;      //0x554
    m_nDirection       :Integer;      //0x558
  public
    function  IsProperTarget(BaseObject:TBaseObject):boolean; override; //FFF4
    procedure Struck(hiter: TBaseObject);override; //FFEC
  end;
  TArcherGuard = class(TGuardUnit)
  private
    procedure sub_4A6B30(TargeTBaseObject:TBaseObject);

  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run;override;
  end;
  TArcherPolice = class(TArcherGuard)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
  end;
  TCastleDoor = class(TGuardUnit)
    dw55C              :LongWord;      //0x55C
    dw560              :LongWord;      //0x560
    m_boOpened         :Boolean;      //0x564
    bo565n             :Boolean;      //0x565
    bo566n             :Boolean;      //0x566
    bo567n             :Boolean;      //0x567
  private
    procedure SetMapXYFlag(nFlag:Integer);
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Die;override;
    procedure Run;override;
    procedure Initialize();override;
    procedure Close;
    procedure Open;
    procedure RefStatus;
  end;
  TWallStructure = class(TGuardUnit)
    n55C:Integer;
    dw560:LongWord;
    boSetMapFlaged:Boolean;
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Initialize;override;
    procedure Die;override;
    procedure Run;override;
    procedure RefStatus;    
  end;
  TSoccerBall = class(TAnimalObject)
    n548:Integer;
    n54C:Integer;
    n550:Integer;
  private

  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Struck(hiter: TBaseObject);virtual; //FFEC
    procedure Run;override;
  end;
{
 TVisibleBaseObject=RECORD
   BaseObject:TBaseObject;
  END;
 pTVisibleBaseObject=^TVisibleBaseObject  ;
 }

implementation
   
uses M2Share, HUtil32, Castle, Guild;

 // var      m_wStatusTimeArr:ARRAY[0..8479] of integer;
{ TStickMonster }
constructor TStickMonster.Create;//004A51C0
begin
  inherited;
  bo550:=False;
  m_nViewRange:=7;
  m_nRunTime:=250;
  m_dwSearchTime:=Random(1500) + 2500;
  m_dwSearchTick:=GetTickCount();
  m_btRaceServer:=85;
  n554:=4;
  n558:=4;
  m_boFixedHideMode:=True;
  m_boStickMode:=True;
  m_boAnimal:=True;
end;

destructor TStickMonster.Destroy;//004A5290
begin

  inherited;
end;
function TStickMonster.AttackTarget: Boolean;
var
  btDir:Byte;
begin
  Result:=False;
  if m_TargetCret = nil then exit;
  if GetAttackDir(m_TargetCret,btDir) then begin
    if Integer(GetTickCount - m_dwHitTick) > m_nNextHitTime then begin
      m_dwHitTick:=GetTickCount();
      m_dwTargetFocusTick:=GetTickCount();
      Attack(m_TargetCret,btDir);
    end;
    Result:=True;
    exit;
  end;
  if m_TargetCret.m_PEnvir = m_PEnvir then begin
    SetTargetXY(m_TargetCret.m_nCurrX,m_TargetCret.m_nCurrY); {0FFF0h}
  end else begin
    DelTargetCreat();{0FFF1h}
  end;
end;

procedure TStickMonster.sub_FFE9();
begin
  m_boFixedHideMode:=False;
  SendRefMsg(RM_DIGUP,m_btDirection,m_nCurrX,m_nCurrY,0,'');
end;
procedure TStickMonster.VisbleActors();//004A53E4
var
  I:Integer;
ResourceString
  sExceptionMsg = '[Exception] TStickMonster::VisbleActors Dispose';
begin
  SendRefMsg(RM_DIGDOWN,m_btDirection,m_nCurrX,m_nCurrY,0,'');
  try
    for I := 0 to m_VisibleActors.Count - 1 do begin
      Dispose(pTVisibleBaseObject(m_VisibleActors.Items[I]));
    end;
    m_VisibleActors.Clear;
  except
    MainOutMessage(sExceptionMsg);
  end;
  m_boFixedHideMode:=True;
end;
procedure TStickMonster.sub_FFEA();//004A53E4
var
  I:Integer;
  BaseObject:TBaseObject;
begin
//  m_VisibleActors.Items[I].
  for I := 0 to m_VisibleActors.Count - 1 do begin
     BaseObject:=TBaseObject(pTVisibleBaseObject(m_VisibleActors.Items[I]).BaseObject);
    if BaseObject.m_boDeath then Continue;
    if IsProperTarget(BaseObject) then begin
      if not BaseObject.m_boHideMode or m_boCoolEye then begin
        if (abs(m_nCurrX - BaseObject.m_nCurrX) < n554) and (abs(m_nCurrY - BaseObject.m_nCurrY) < n554) then begin
          sub_FFE9();
          break;
        end;
      end;
    end;
  end;    // for
end;

function TStickMonster.Operate(ProcessMsg: pTProcessMessage):Boolean;
begin
  Result:=inherited Operate(ProcessMsg);
end;

procedure TStickMonster.Run;//004A5614
var
  bo05:Boolean;
begin
  if not m_boGhost and
     not m_boDeath 
    and(m_wStatusTimeArr[POISON_STONE] = 0)  then begin      {5 0x6A }
    if Integer(GetTickCount - m_dwWalkTick) > m_nWalkSpeed then begin
      m_dwWalkTick:=GetTickCount();
      if m_boFixedHideMode then begin
        sub_FFEA();
      end else begin
        if Integer(GetTickCount - m_dwHitTick) > m_nNextHitTime then begin
          SearchTarget();
        end;
        bo05:=False;
        if m_TargetCret <> nil then begin
          if (abs(m_TargetCret.m_nCurrX - m_nCurrX) > n558) or
             (abs(m_TargetCret.m_nCurrY - m_nCurrY) > n558) then begin
            bo05:=True;
          end;
        end else bo05:=True;
        if bo05 then begin
          VisbleActors();
        end else begin
          if AttackTarget then begin
            inherited;
            exit;
          end;
        end;
      end;
    end;
  end;
  inherited;
end;

////  TAXEHIDEMonster

procedure TAXEHIDEMonster.FlyAxeAttack(Target:TBaseObject);
var
  WAbil:pTAbility;
  nDamage:Integer;
begin
  if  m_PEnvir.CanFly(m_nCurrX,m_nCurrY,Target.m_nCurrX,Target.m_nCurrY)  then begin //   true
    m_btDirection:=GetNextDirection(m_nCurrX,m_nCurrY,Target.m_nCurrX,Target.m_nCurrY);
    WAbil:=@m_WAbil;
    nDamage:=(Random(SmallInt(HiWord(WAbil.DC) - LoWord(WAbil.DC)) +1) + LoWord(WAbil.DC));
    if nDamage > 0 then begin
      nDamage:=Target.GetHitStruckDamage(Self,nDamage);
    end;
    if nDamage > 0 then begin
        Target.StruckDamage(nDamage);
        Target.SendDelayMsg(TBaseObject(RM_STRUCK),RM_10101,nDamage,Target.m_WAbil.HP,Target.m_WAbil.MaxHP,Integer(Self),'',
                                _MAX(abs(m_nCurrX - Target.m_nCurrX),abs(m_nCurrY - Target.m_nCurrY)) * 50 + 600);
    end;
    SendRefMsg(RM_FLYAXE,m_btDirection,m_nCurrX,m_nCurrY,Integer(Target),'ear');

  end;
    
end;


constructor TAXEHIDEMonster.Create;//004A51C0
begin
  inherited;
  bo550:=False;
  m_nViewRange:=11;
  m_nRunTime:=250;
  m_dwSearchTime:=Random(1500) + 1500;
  m_dwSearchTick:=GetTickCount();
  m_btRaceServer:=205;
  n554:=7;
  n558:=7;
  m_boFixedHideMode:=True;
  m_boStickMode:=True;
  m_boAnimal:=false;
  m_boBOSS:=true;
end;


destructor TAXEHIDEMonster.Destroy;//004A5290
begin

  inherited;
end;
function TAXEHIDEMonster.AttackTarget: Boolean;
var
  btDir:Byte;
begin
  Result:=False;
  if m_TargetCret = nil then exit;
  if true then begin    //  GetAttackDir(m_TargetCret,btDir) 
    if Integer(GetTickCount - m_dwHitTick) > m_nNextHitTime then begin
      m_dwHitTick:=GetTickCount();
      m_dwTargetFocusTick:=GetTickCount();
     // Attack(m_TargetCret,btDir);
     FlyAxeAttack(m_TargetCret);
    end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -