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

📄 objmon3.pas

📁 传奇源代码的delphi版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit ObjMon3;

interface

uses
  svn, Windows,Classes,Grobal2, StrUtils,ObjBase,ObjMon,ObjMon2;

type

  TRonObject=class(TMonster)
  public
    constructor Create();override;
    destructor Destroy; override;
	  procedure AroundAttack;
	  procedure Run; override;
  end;

  TMinorNumaObject=class(TATMonster)
  public
    constructor Create();override;
    destructor Destroy; override;
	  procedure Run; override;
  end;

  TSandMobObject=class(TStickMonster)
  private
	  m_dwAppearStart:LongWord;

  public
	  constructor Create();override;
    destructor Destroy; override;
	  procedure Run; override;
  end;

  TRockManObject=class(TATMonster)
  public
	  constructor Create();override;
    destructor Destroy; override;
	  procedure Run; override;
  end;

  TMagicMonObject = class(TMonster)
  private
    m_boUseMagic:Boolean;

    procedure LightingAttack(nDir:Integer);

  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run;override;
  end;

  TBoneKingMonster = class(TMonster)
  private
    m_nDangerLevel       :Integer;
    m_SlaveObjectList  :TList;//0x55C

    procedure MagicAttack(nDir:integer);
    procedure CallSlave;
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Attack(TargeTBaseObject: TBaseObject; nDir: Integer);override; //0FFED
    procedure Run;override;
  end;




  TPercentMonster = class(TAnimalObject)
    n54C           :Integer;
    m_dwThinkTick  :LongWord;
    bo554          :Boolean;
    m_boDupMode    :Boolean;
  private
    function Think: Boolean;
//    function MakeClone(sMonName:String;OldMon:TBaseObject):TBaseObject;
  public
    constructor Create();override;
    destructor Destroy; override;
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;
    function AttackTarget():Boolean; virtual;
    procedure Run; override;
  end;

  TMagicMonster = class(TAnimalObject)
    n54C           :Integer;
    m_dwThinkTick  :LongWord;
    m_dwSpellTick  :LongWord;
    bo554          :Boolean;
    m_boDupMode    :Boolean;
  private
    function Think: Boolean;
//    function MakeClone(sMonName:String;OldMon:TBaseObject):TBaseObject;
  public
    constructor Create();override;
    destructor Destroy; override;
    function  Operate(ProcessMsg:pTProcessMessage):Boolean; override;
    function AttackTarget():Boolean; virtual;
    procedure Run; override;
  end;

  TFireballMonster = class(TMagicMonster)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TFireMonster = class(TMonster)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

 TFrostTiger = class(TMonster)
    m_dwSpellTick:LongWord;
    m_dwLastWalkTick:LongWord;
  private
    procedure FrostAttack();
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

 TGreenMonster = class(TMonster)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TRedMonster = class(TMonster)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TKhazard = class(TMonster)
    m_dwDragTick  :LongWord;
  private
    procedure Drag();
  public
  function AttackTarget():boolean;override;
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TRunAway = class(TMonster)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TTeleMonster = class(TMonster)
  private
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TDefendMonster = class(TMonster)
  private
   // m_GuardObjects  :TList;

    //procedure CallGuard(mapmap:string; xx,yy:integer);
  public
    callguardrun:boolean;
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TClone = class(TMonster)
    m_dwThinkTick : LongWord;
    m_dwMpLossTick    : LongWord;
    nMpLoss       : Integer;
  private
    function MPow(UserMagic:pTUserMagic):Integer;
    function GetPower(nPower:Integer;UserMagic:pTUserMagic):Integer;
    procedure MagicAttack();
    procedure FindTarget();
  public
    procedure SetMpLoss(nMpReduction:Integer);
    procedure StruckDamage(nDamage:integer);override;
    constructor Create();override;
    destructor Destroy; override;
    procedure Run;override;
    procedure Die;override;
    function GetShowName: String;override;
  end;

  TMinotaurKing = class(TMonster)
  private
    MassAttackMode:Boolean;
    MassAttackCount:Byte;
    NextTarget:TBaseObject;
    nextx,nexty:Integer;
    boMoving:Boolean;
    procedure RedCircle(nDir:Integer);
  public
    constructor Create();override;
    function  Operate(ProcessMsg:pTProcessMessage):boolean; override;
    destructor Destroy; override;
    procedure Run;override;
  end;

  TMinoGuard = class(TMonster)
  private
   procedure MagicAttack(nDir:Integer);
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

   TNodeMonster = class(TAnimalObject)
    hitcount : integer;
    private
      procedure search();
      procedure castshield(BaseObject: TBaseObject);
    public
      constructor Create();override;
      destructor Destroy; override;
      procedure Run;override;
    end;

    TNewMonsterBoss = class(TAnimalObject)
  private
    ldistx:Integer;
    ldisty:Integer;
    m_dwSpellTick  :LongWord;
    function AttackTarget():boolean;
    procedure RepulseCircle();
    procedure RedCircle();
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

    TOmaKing = class(TAnimalObject)
  private
    ldistx:Integer;
    ldisty:Integer;
    m_dwSpellTick  :LongWord;
    function AttackTarget():boolean;
    procedure RepulseCircle();
    procedure BlueCircle();
  public

    constructor Create();override;
    destructor Destroy; override;
    procedure Run; override;
  end;

  TDragonStatue = class(TAnimalObject)
  private
    procedure FireBang();
  public
    constructor Create();override;
    destructor Destroy; override;
	  procedure Run; override;
  end;

  TDragonPart = class(TAnimalObject)
    boisactive: Boolean;
    m_nHealth      :Integer;  //0x79C
  private
    procedure DropItems();
    procedure massthunder();
  public
    constructor Create();override; //0x00504AD8
    destructor Destroy; override;
    function  GetMagStruckDamage(BaseObject:TBaseObject;nDamage:Integer):Integer;override;
    procedure StruckDamage(nDamage:integer);override;
    procedure Run;override; //0x00504B60
  end;

  THolyDeva = class(TMonster)
    m_dwThinkTick : LongWord;
    m_boSpawned       : Boolean;
  private
    procedure MagicAttack();
    procedure FindTarget();
  public
  constructor Create();override;
    destructor Destroy; override;
    procedure Run;override;
  end;

  TYimoogi = class(TMonster)
    m_boActive     : boolean; //if this is true then someone hit it and it's on the offence if not it's on the defence
    m_dwSpellTick  : LongWord;
    m_dwPoisonTick : LongWord;
    m_dwThinkTick  : LongWord;
    m_counterpart  : TBaseObject;
    m_boDied       : boolean;
  private
    procedure MagicAttack();
    procedure PoisonAttack();
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run;override;
  end;

  TYimoogiMaster = class(TYimoogi)
    m_dwLastRecall : LongWord;
    m_dwCloneSpawn : LongWord;
  private
    function FindYimoogi(sname: String):TBaseObject;
    procedure CallGuard;
  public
    constructor Create();override;
    destructor Destroy; override;
    procedure Run;override;
    function GetFrontPosition(var nX:Integer;var nY:Integer):Boolean;override;
    procedure CloneDied();
  end;

    TBlackFox  = class(TMonster)
  private
    m_boUseMagic:Boolean;
    procedure ThrustAttack(nDir:Integer);

  public
    constructor Create();override;
    destructor Destroy; override;
    function  MagCanHitTarget(nX, nY:Integer;TargeTBaseObject: TBaseObject): Boolean;override;
    procedure Run;override;
  end;

    TRedFox  = class(TMonster)
    m_dwSpellTick : LongWord;
    m_counterpart  : TBaseObject;
  private
    procedure MagicAttack();
  public
    constructor Create();override;
    destructor Destroy; override;
    function AttackTarget():Boolean;virtual;
    procedure Run;override;
  end;
    TWhiteFox = class(TMonster)
    m_dwSpellTick : LongWord;
  private
    procedure MagicAttack();
    procedure CallDragon();
  public
    constructor Create();override;
    destructor Destroy; override;
    function AttackTarget():Boolean;virtual;
    procedure Run;override;
  end;

implementation

uses
  UsrEngn, M2Share, Envir, Event, HUtil32, Castle, Guild, SysUtils;




constructor TRonObject.Create;
begin
  inherited;
  m_dwSearchTime:=Random(1500) + 1500;
end;

destructor TRonObject.Destroy;
begin
  inherited;
end;

procedure TRonObject.AroundAttack;
var
  xTargetList:TList;
  BaseObject:TBaseObject;
  wHitMode:Word;
  i:Integer;
begin
  wHitMode:=0;
  GetAttackDir(m_TargetCret,m_btDirection);

  xTargetList := TList.Create;
  GetMapBaseObjects(m_PEnvir,m_nCurrX,m_nCurrY,1,xTargetList);

	if (xTargetList.Count>0) then begin
    for i:=xTargetList.Count-1 downto 0 do begin
      BaseObject := TBaseObject(xTargetList.Items[i]);

      if (BaseObject<>nil) then begin
        _Attack(wHitMode,BaseObject); //CM_HIT

        xTargetList.Delete(i);
		  end;
    end;
	end;
  xTargetList.Free;

  SendRefMsg(RM_HIT,m_btDirection,m_nCurrX,m_nCurrY,0,'');
end;

procedure TRonObject.Run;
begin
  if CanMove then begin
    if ((GetTickCount - m_dwSearchEnemyTick) > 8000) or
       (((GetTickCount - m_dwSearchEnemyTick) > 1000) and (m_TargetCret = nil)) then begin
      m_dwSearchEnemyTick:=GetTickCount();
      SearchTarget();
    end;

    if (m_TargetCret <> nil) and
       (abs(m_nCurrX - m_TargetCret.m_nCurrX) < 6) and
       (abs(m_nCurrY - m_TargetCret.m_nCurrY) < 6) and
       (GetCurrentTime - m_dwHitTick > GetHitSpeed) then begin

      m_dwHitTick:=GetCurrentTime;
      AroundAttack;
    end;
	end;

	inherited;
end;

constructor TMinorNumaObject.Create;
begin
  inherited;
end;

destructor TMinorNumaObject.Destroy;
begin
  inherited;

⌨️ 快捷键说明

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