📄 objmon3.pas
字号:
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 + -