📄 objmon.pas
字号:
unit ObjMon;
interface
uses
Windows,Classes,Grobal2,ObjBase,sysutils,HUtil32,Envir;
type
TMonster = class(TAnimalObject)
n54C :Integer; //0x54C
m_dwThinkTick :LongWord; //0x550
bo554 :Boolean; //0x554
m_boDupMode :Boolean; //0x555
// m_btusefire :integer;
m_btUsePoison :integer;
// curpos:integer;
// setpcount:integer;
private
function Think: Boolean;
function MakeClone(sMonName:String;OldMon:TBaseObject):TBaseObject;
// function Makefire(nx,ny,btdir:integer):boolean;
public
constructor Create();override;
destructor Destroy; override;
function Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
function AttackTarget():Boolean; virtual; //FFEB
procedure Run; override;
end;
TMonster1 = class(TAnimalObject)
n54C :Integer; //0x54C
m_dwThinkTick :LongWord; //0x550
bo554 :Boolean; //0x554
m_boDupMode :Boolean; //0x555
m_btusefire :integer;
m_btUsePoison :integer;
curpos:integer;
setpcount:integer;
m_canpickup: Boolean;
bo_oldrelax: boolean;
private
function Think: Boolean;
function MakeClone(sMonName:String;OldMon:TBaseObject):TBaseObject;
function Makefire(nx,ny,btdir:integer):boolean;
public
constructor Create();override;
destructor Destroy; override;
function Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
function AttackTarget():Boolean; virtual; //FFEB
procedure Run; override;
end;
TAIMAN=class(TAnimalObject)
n54C :Integer; //0x54C
m_dwThinkTick :LongWord; //0x550
bo554 :Boolean; //0x554
m_boDupMode :Boolean; //0x555
curpos:integer;
setpcount:integer;
private
function Think: Boolean;
function MakeClone(sMonName:String;OldMon:TBaseObject):TBaseObject;
public
constructor Create();override;
destructor Destroy; override;
function Operate(ProcessMsg:pTProcessMessage):Boolean; override;//FFFC
function AttackTarget():Boolean; virtual; //FFEB
procedure SearchViewRange(); override;
procedure Run; override;
end;
TChickenDeer = class(TMonster)
private
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
end;
TATMonster = class(TMonster)
private
public
constructor Create();override;
destructor Destroy; override;
procedure Run; override;
end;
TfireMonster = class(TMonster1)
private
public
constructor Create();override;
destructor Destroy; override;
procedure Run; override;
end;
TSlowATMonster = class(TATMonster)
private
public
constructor Create();override;
destructor Destroy; override;
end;
TScorpion = class(TATMonster)
private
public
constructor Create();override;
destructor Destroy; override;
end;
TSpitSpider = class(TATMonster)
m_boUsePoison :Boolean;
private
procedure SpitAttack(btDir:Byte);
public
constructor Create();override;
destructor Destroy; override;
function AttackTarget():Boolean;{virtual;//} override; //FFEB
end;
THighRiskSpider = class(TSpitSpider)
private
public
constructor Create();override;
destructor Destroy; override;
end;
TBigPoisionSpider = class(TSpitSpider)
private
public
constructor Create();override;
destructor Destroy; override;
end;
TGasAttackMonster = class(TATMonster)
private
public
constructor Create();override;
destructor Destroy; override;
function AttackTarget:Boolean;override;
function sub_4A9C78(bt05:Byte):TBaseObject;virtual;//FFEA
end;
TCowMonster = class(TATMonster)
private
public
constructor Create();override;
destructor Destroy; override;
end;
TMagCowMonster = class(TATMonster)
private
procedure sub_4A9F6C(btDir:Byte);
public
constructor Create();override;
destructor Destroy; override;
function AttackTarget:Boolean;override;
end;
TCowKingMonster = class(TATMonster)
dw558 :LongWord;
bo55C :Boolean;
bo55D :Boolean;
n560 :integer;
dw564 :LongWord;
dw568 :LongWord;
dw56C :LongWord;
dw570 :LongWord;
private
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
procedure Attack(TargeTBaseObject: TBaseObject; nDir: Integer);override;
procedure Initialize();override;
end;
TElectronicScolpionMon = class(TMonster)
private
m_boUseMagic:Boolean;
procedure LightingAttack(nDir:Integer);
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
end;
TLightingZombi = class(TMonster)
private
procedure LightingAttack(nDir:Integer);
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
end;
TDigOutZombi = class(TMonster)
private
procedure sub_4AA8DC;
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
end;
TZilKinZombi = class(TATMonster)
dw558 :LongWord;
nZilKillCount :Integer;
dw560 :LongWord;
private
public
constructor Create();override;
destructor Destroy; override;
procedure Die;override;
procedure Run;override;
end;
TWhiteSkeleton = class(TATMonster)
m_boIsFirst :Boolean;
private
procedure sub_4AAD54;
public
constructor Create();override;
destructor Destroy; override;
procedure RecalcAbilitys();override;
procedure Run;override;
end;
TScultureMonster = class(TMonster)
private
procedure MeltStone;//
procedure MeltStoneAll;
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
end;
TNIMOKEMonster = class(TMonster)
pm_wAppr:integer;
private
procedure MeltStone;//
procedure MeltStoneAll;
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
end;
TScultureKingMonster = class(TMonster)
m_nDangerLevel :Integer;
m_SlaveObjectList :TList;//0x55C
pm_wAppr:integer;
private
procedure MeltStone;
procedure CallSlave;
public
constructor Create();override;
destructor Destroy; override;
procedure Attack(TargeTBaseObject: TBaseObject; nDir: Integer);override; //0FFED
procedure Run;override;
end;
//铁血魔王类型 06.1.16
Ttiexueking= class(TMonster)
m_nDangerLevel :Integer;
m_SlaveObjectList :TList;//0x55C
dw558 :LongWord;
private
procedure MeltStone;
procedure CallSlave;
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
procedure Attack(TargeTBaseObject: TBaseObject; nDir: Integer);override;
end;
////////////
TGasMothMonster = class(TGasAttackMonster) //楔蛾
private
public
constructor Create();override;
destructor Destroy; override;
procedure Run;override;
function sub_4A9C78(bt05:Byte):TBaseObject;override;//FFEA
end;
TGasDungMonster = class(TGasAttackMonster)
private
public
constructor Create();override;
destructor Destroy; override;
end;
TElfMonster = class(TMonster)
boIsFirst :Boolean; //0x558
private
procedure AppearNow;
procedure ResetElfMon;
public
constructor Create();override;
destructor Destroy; override;
procedure RecalcAbilitys(); override;
procedure Run; override;
end;
TElfWarriorMonster = class(TSpitSpider)
n55C:Integer;
boIsFirst :Boolean; //0x560
dwDigDownTick:LongWord; //0x564
private
procedure AppearNow;
procedure ResetElfMon;
public
constructor Create();override;
destructor Destroy; override;
procedure RecalcAbilitys(); override;
procedure Run; override;
end;
implementation
uses UsrEngn, M2Share, Event;
{ TMonster }
constructor TMonster.Create; //004A8B74
begin
inherited;
m_boDupMode:=False;
bo554:=False;
m_dwThinkTick:=GetTickCount();
m_nViewRange:=5;
m_nRunTime:=250;
m_dwSearchTime:=3000 + Random(2000);
m_dwSearchTick:=GetTickCount();
m_btRaceServer:=80;
// curpos:=0;
// setpcount:=0;
m_btUsePoison:=-1;
// m_btusefire:=-1;
end;
destructor TMonster.Destroy; //004A8C24
begin
inherited;
end;
{function TMonster.Makefire(nx,ny,btdir:integer):boolean;
var
FireBurnEvent:TFireBurnEvent;
nHTime,nDamage:integer;
begin
nHTime:=_max(3,loword( m_WAbil.sC));
nDamage:=_max(5,loword( m_WAbil.mC));
if m_PEnvir.GetEvent(nX,nY-1) = nil then begin
FireBurnEvent:=TFireBurnEvent.Create(self,nX,nY-1,m_btusefire,nHTime * 1000 ,nDamage);
g_EventManager.AddEvent(FireBurnEvent);
end; //0492CFC x
if m_PEnvir.GetEvent(nX-1,nY) = nil then begin
FireBurnEvent:=TFireBurnEvent.Create(self,nX-1,nY,m_btusefire,nHTime * 1000 ,nDamage);
g_EventManager.AddEvent(FireBurnEvent);
end; //0492D4D
if m_PEnvir.GetEvent(nX,nY) = nil then begin
FireBurnEvent:=TFireBurnEvent.Create(self,nX,nY,m_btusefire,nHTime * 1000 ,nDamage);
g_EventManager.AddEvent(FireBurnEvent);
end; //00492D9C
if m_PEnvir.GetEvent(nX+1,nY) = nil then begin
FireBurnEvent:=TFireBurnEvent.Create(self,nX+1,nY,m_btusefire,nHTime * 1000 ,nDamage);
g_EventManager.AddEvent(FireBurnEvent);
end; //00492DED
if m_PEnvir.GetEvent(nX,nY+1) = nil then begin
FireBurnEvent:=TFireBurnEvent.Create(self,nX,nY+1,m_btusefire,nHTime * 1000 ,nDamage);
g_EventManager.AddEvent(FireBurnEvent);
end; //00492E3E
Result:=true;
end;
}
function TMonster.MakeClone(sMonName: String;OldMon:TBaseObject): TBaseObject; //004A8C58
var
ElfMon:TBaseObject;
begin
Result:=nil;
ElfMon:=UserEngine.RegenMonsterByName(m_PEnvir.sMapName,m_nCurrX,m_nCurrY,sMonName);
if ElfMon <> nil then begin
ElfMon.m_Master:=OldMon.m_Master;
ElfMon.m_dwMasterRoyaltyTick:=OldMon.m_dwMasterRoyaltyTick;
ElfMon.m_btSlaveMakeLevel:=OldMon.m_btSlaveMakeLevel;
ElfMon.m_btSlaveExpLevel:=OldMon.m_btSlaveExpLevel;
ElfMon.RecalcAbilitys;
ElfMon.RefNameColor;
if OldMon.m_Master <> nil then
OldMon.m_Master.m_SlaveList.Add(ElfMon);
ElfMon.m_WAbil:=OldMon.m_WAbil;
ElfMon.m_wStatusTimeArr:=OldMon.m_wStatusTimeArr;
ElfMon.m_TargetCret:=OldMon.m_TargetCret;
ElfMon.m_dwTargetFocusTick:=OldMon.m_dwTargetFocusTick;
ElfMon.m_LastHiter:=OldMon.m_LastHiter;
ElfMon.m_LastHiterTick:=OldMon.m_LastHiterTick;
ElfMon.m_btDirection:=OldMon.m_btDirection;
Result:=ElfMon;
end;
end;
function TMonster.Operate(ProcessMsg: pTProcessMessage):Boolean;
begin
Result:=inherited Operate(ProcessMsg);
end;
function TMonster.Think():Boolean; //004A8E54
var
nOldX,nOldY:integer;
begin
Result:=False;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -