actor.pas
来自「2009最新 传奇汉化0599代码 传奇汉化」· PAS 代码 · 共 1,480 行 · 第 1/5 页
PAS
1,480 行
TActor = class//Size 0x240
m_nRecogId :Integer; //角色标识 0x4
m_nCurrX :Integer; //当前所在地图座标X 0x08
m_nCurrY :Integer; //当前所在地图座标Y 0x0A
m_btDir :Byte; //当前站立方向 0x0C
m_btSex :Byte; //性别 0x0D
m_btRace :Byte; //0x0E
m_btHair :Byte; //头发类型 0x0F
m_btDress :Byte; //衣服类型 0x10
m_btWeapon :Byte; //武器类型
m_btHorse :Byte; //马类型
m_btEffect :Byte; //天使类型
m_btJob :Byte; //职业 0:武士 1:法师 2:道士
m_wAppearance :Word; //0x14
m_btDeathState :Byte;
m_nFeature :Integer; //0x18
m_nFeatureEx :Integer; //0x18
m_nState :Integer; //0x1C
m_boDeath :Boolean; //0x20
m_boSkeleton :Boolean; //0x21
m_boDelActor :Boolean; //0x22
m_boDelActionAfterFinished :Boolean; //0x23
m_sDescUserName :String; //人物名称,后缀
m_sUserName :String; //0x28
m_nNameColor :Integer; //0x2C
m_Abil :TAbility; //0x30
m_nGold :Integer; //金币数量0x58
m_nGameGold :Integer; //游戏币数量
m_nGamePoint :Integer; //游戏点数量
m_nHitSpeed :ShortInt; //攻击速度 0: 扁夯, (-)蠢覆 (+)狐抚
m_boVisible :Boolean; //0x5D
m_boHoldPlace :Boolean; //0x5E
m_SayingArr :array[0..MAXSAY-1] of String;
m_SayWidthsArr :array[0..MAXSAY-1] of Integer;
m_dwSayTime :LongWord;
m_nSayX :Integer;
m_nSayY :Integer;
m_nSayLineCount :Integer;
m_nShiftX :Integer; //0x98
m_nShiftY :Integer; //0x9C
m_nPx :Integer; //0xA0
m_nHpx :Integer; //0xA4
m_nWpx :Integer; //0xA8
m_nSpx :Integer; //0xAC
m_nPy :Integer;
m_nHpy :Integer;
m_nWpy :Integer;
m_nSpy :Integer; //0xB0 0xB4 0xB8 0xBC
m_nRx :Integer;
m_nRy :Integer;//0xC0 0xC4
m_nDownDrawLevel :Integer; //0xC8
m_nTargetX :Integer;
m_nTargetY :Integer; //0xCC 0xD0
m_nTargetRecog :Integer; //0xD4
m_nHiterCode :Integer; //0xD8
m_nMagicNum :Integer; //0xDC
m_nCurrentEvent :Integer; //辑滚狼 捞亥飘 酒捞叼
m_boDigFragment :Boolean; //捞锅 邦豹捞 龙捞 某脸绰瘤..
m_boThrow :Boolean;
m_nBodyOffset :Integer; //0x0E8 //0x0D0
m_nHairOffset :Integer; //0x0EC
m_nHumWinOffset :Integer; //0x0F0
m_nWeaponOffset :Integer; //0x0F4
m_boUseMagic :Boolean; //0x0F8 //0xE0
m_boHitEffect :Boolean; //0x0F9 //0xE1
m_boUseEffect :Boolean; //0x0FA //0xE2
m_nHitEffectNumber :Integer; //0xE4
m_dwWaitMagicRequest :LongWord;
m_nWaitForRecogId :Integer; //磊脚捞 荤扼瘤搁 WaitFor狼 actor甫 visible 矫挪促.
m_nWaitForFeature :Integer;
m_nWaitForStatus :Integer;
m_nCurEffFrame :Integer; //0x110
m_nSpellFrame :Integer; //0x114
m_CurMagic :TUseMagicInfo; //0x118 //m_CurMagic.EffectNumber 0x110
//GlimmingMode: Boolean;
//CurGlimmer: integer;
//MaxGlimmer: integer;
//GlimmerTime: longword;
m_nGenAniCount :Integer; //0x124
m_boOpenHealth :Boolean; //0x140
m_noInstanceOpenHealth :Boolean;//0x141
m_dwOpenHealthStart :LongWord;
m_dwOpenHealthTime :LongWord;//Integer;jacky
//SRc: TRect; //Screen Rect 拳搁狼 角力谅钎(付快胶 扁霖)
m_BodySurface :TDirectDrawSurface; //0x14C //0x134
m_boGrouped :Boolean; //0x150 是否组队
m_nCurrentAction :Integer; //0x154 //0x13C
m_boReverseFrame :Boolean; //0x158
m_boWarMode :Boolean; //0x159
m_dwWarModeTime :LongWord; //0x15C
m_nChrLight :Integer; //0x160
m_nMagLight :Integer; //0x164
m_nRushDir :Integer; //0, 1 //0x168
m_nXxI :Integer; //0x16C
m_boLockEndFrame :Boolean; //0x170
m_dwLastStruckTime :LongWord; //0x174
m_dwSendQueryUserNameTime :LongWord; //0x178
m_dwDeleteTime :LongWord;//0x17C
//荤款靛 瓤苞
m_nMagicStruckSound :Integer; //0x180 被魔法攻击弯腰发出的声音
m_boRunSound :Boolean; //0x184 跑步发出的声音
m_nFootStepSound :Integer; //CM_WALK, CM_RUN //0x188 走步声
m_nStruckSound :Integer; //SM_STRUCK //0x18C 弯腰声音
m_nStruckWeaponSound :Integer; //0x190 被指定武器攻击弯腰声音
m_nAppearSound :Integer; //殿厘家府 0 //0x194
m_nNormalSound :Integer; //老馆家府 1 //0x198
m_nAttackSound :Integer; // 2 //0x19C
m_nWeaponSound :Integer; // 3 //0x1A0
m_nScreamSound :Integer; // 4 //0x1A4
m_nDieSound :Integer; //磷阑锭 5 SM_DEATHNOW //0x1A8
m_nDie2Sound :Integer; //0x1AC
m_nMagicStartSound :Integer; //0x1B0
m_nMagicFireSound :Integer; //0x1B4
m_nMagicExplosionSound :Integer; //0x1B8
m_Action :pTMonsterAction;
private
function GetMessage(ChrMsg:pTChrMsg):Boolean;
protected
m_nStartFrame :Integer; //0x1BC //0x1A8
m_nEndFrame :Integer; //0x1C0 //0x1AC
m_nCurrentFrame :Integer; //0x1C4 //0x1B0
m_nEffectStart :Integer; //0x1C8 //0x1B4
m_nEffectFrame :Integer; //0x1CC //0x1B8
m_nEffectEnd :Integer; //0x1D0 //0x1BC
m_dwEffectStartTime :LongWord;//0x1D4 //0x1C0
m_dwEffectFrameTime :LongWord;//0x1D8 //0x1C4
m_dwFrameTime :LongWord; //0x1DC //0x1C8
m_dwStartTime :LongWord; //0x1E0 //0x1CC
m_nMaxTick :Integer; //0x1E4
m_nCurTick :Integer; //0x1E8
m_nMoveStep :Integer; //0x1EC
m_boMsgMuch :Boolean; //0x1F0
m_dwStruckFrameTime :LongWord; //0x1F4
m_nCurrentDefFrame :Integer; //0x1F8 //0x1E4
m_dwDefFrameTime :LongWord; //0x1FC //0x1E8
m_nDefFrameCount :Integer; //0x200 //0x1EC
m_nSkipTick :Integer; //0x204
m_dwSmoothMoveTime :LongWord; //0x208
m_dwGenAnicountTime :LongWord; //0x20C
m_dwLoadSurfaceTime :LongWord; //0x210 //0x200
m_dwTDBtimer :LongWord;
m_nOldx :Integer;
m_nOldy :Integer;
m_nOldDir :Integer; //0x214 0x218 0x21C
m_nActBeforeX :Integer;
m_nActBeforeY :Integer; //0x220 0x224
m_nWpord :Integer; //0x228
procedure CalcActorFrame; dynamic;
procedure DefaultMotion; dynamic;
function GetDefaultFrame (wmode: Boolean): integer; dynamic;
procedure DrawEffSurface (dsurface, source: TDirectDrawSurface; ddx, ddy: integer; blend: Boolean; ceff: TColorEffect);dynamic;
procedure DrawWeaponGlimmer (dsurface: TDirectDrawSurface; ddx, ddy: integer);
public
m_MsgList: TGList; //list of PTChrMsg 0x22C //0x21C
RealActionMsg: TChrMsg; //FrmMain 0x230
constructor Create; dynamic;
destructor Destroy; override;
procedure SendMsg (wIdent:Word; nX,nY, ndir,nFeature,nState:Integer;sStr:String;nSound:Integer);
procedure UpdateMsg(wIdent:Word; nX,nY, ndir,nFeature,nState:Integer;sStr:String;nSound:Integer);
procedure CleanUserMsgs;
procedure ProcMsg;
procedure ProcHurryMsg;
function IsIdle: Boolean;
function ActionFinished: Boolean;
function CanWalk: Integer;
function CanRun: Integer;
function Strucked: Boolean;
procedure Shift (dir, step, cur, max: integer);
procedure ReadyAction (msg: TChrMsg);
function CharWidth: Integer;
function CharHeight: Integer;
function CheckSelect (dx, dy: integer): Boolean;
procedure CleanCharMapSetting (x, y: integer);
procedure Say (str: string);
procedure SetSound; dynamic;
procedure Run; dynamic;
procedure RunSound; dynamic;
procedure RunActSound (frame: integer); dynamic;
procedure RunFrameAction (frame: integer); dynamic; //橇贰烙付促 刀漂窍霸 秦具且老
procedure ActionEnded; dynamic;
function Move (step: integer): Boolean;
procedure MoveFail;
function CanCancelAction: Boolean;
procedure CancelAction;
procedure FeatureChanged; dynamic;
function Light: integer; dynamic;
procedure LoadSurface; dynamic;
function GetDrawEffectValue: TColorEffect;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); dynamic;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); dynamic;
end;
TNpcActor = class (TActor)
private
m_nEffX :Integer; //0x240
m_nEffY :Integer; //0x244
m_bo248 :Boolean; //0x248
m_dwUseEffectTick :LongWord; //0x24C
m_EffSurface :TDirectDrawSurface; //0x250
public
constructor Create; override;
procedure Run; override;
procedure CalcActorFrame; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
procedure LoadSurface; override;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
procedure DrawEff (dsurface: TDirectDrawSurface; dx, dy: integer); override;
end;
THumActor = class (TActor)//Size: 0x27C Address: 0x00475BB8
private
m_HairSurface :TDirectDrawSurface; //0x250 //0x240
m_WeaponSurface :TDirectDrawSurface; //0x254 //0x244
m_HumWinSurface :TDirectDrawSurface; //0x258 //0x248
m_boWeaponEffect :Boolean; //0x25C //0x24C
m_nCurWeaponEffect :Integer; //0x260 //0x250
m_nCurBubbleStruck :Integer; //0x264 //0x254
m_dwWeaponpEffectTime :LongWord; //0x268
m_boHideWeapon :Boolean; //0x26C
m_nFrame :Integer;
m_dwFrameTick :LongWord;
m_dwFrameTime :LongWord;
m_bo2D0 :Boolean;
protected
procedure CalcActorFrame; override;
procedure DefaultMotion; override;
function GetDefaultFrame (wmode: Boolean): integer; override;
public
constructor Create; override;
destructor Destroy; override;
procedure Run; override;
procedure RunFrameAction (frame: integer); override;
function Light: integer; override;
procedure LoadSurface; override;
procedure DoWeaponBreakEffect;
procedure DrawChr (dsurface: TDirectDrawSurface; dx, dy: integer; blend: Boolean;boFlag:Boolean); override;
end;
function GetRaceByPM (race: integer;Appr:word): PTMonsterAction;
function aGetMonImg (appr: integer): TWMImages;
function GetOffset (appr: integer): integer;
function GetNpcOffset(nAppr:Integer):Integer;
implementation
uses
ClMain, SoundUtil, clEvent, MShare;
function GetRaceByPM (race: integer;Appr:word): pTMonsterAction;
begin
Result := nil;
{
case race of
10,24: Result := @MA10;
11: Result := @MA11;
12: Result := @MA12;
13: Result := @MA13;
14, 17, 18, 23: Result := @MA14;
15, 22: Result := @MA15;
16: Result := @MA16;
30, 31: Result := @MA17;
19, 20, 21, 40, 45, 52, 53: Result := @MA19;
41, 42: Result := @MA20;
43: Result := @MA21;
47: Result := @MA22;
48, 49: Result := @MA23;
32: Result := @MA24; //傈哎, 傍拜捞 2啊瘤 规侥
// 33: Result := @MA25;
54: Result := @MA28;
55: Result := @MA29;
98: Result := @MA27;
99: Result := @MA26;
50: Result := @MA50;
33: Result := @MA51;
34: Result := @MA52;
end;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?