📄 magiceff.pas
字号:
unit magiceff;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grobal2, DxDraws, CliUtil, ClFunc, HUtil32, WIl;
const
MG_READY = 10;
MG_FLY = 6;
MG_EXPLOSION = 10;
READYTIME = 120;
EXPLOSIONTIME = 100;
FLYBASE = 10;
EXPLOSIONBASE = 170;
//EFFECTFRAME = 260;
MAXMAGIC = 10;
FLYOMAAXEBASE = 447;
THORNBASE = 2967;
ARCHERBASE = 2607;
ARCHERBASE2 = 272; //2609;
FLYFORSEC = 500;
FIREGUNFRAME = 6;
MAXEFFECT = 49{31};
{
EffectBase: array[0..MAXEFFECT-1] of integer = (
0, //0 拳堪厘
200, //1 雀汗贱
400, //2 陛碍拳堪厘
600, //3 鞠楷贱
0, //4 八堡
900, //5 拳堪浅
920, //6 拳堪规荤
940, //7 汾牢厘 //矫傈瓤苞绝澜
20, //8 碍拜, Magic2
940, //9 气混拌 //矫傈瓤苞绝澜
940, //10 措瘤盔龋 //矫傈瓤苞绝澜
940, //11 措瘤盔龋付 //矫傈瓤苞绝澜
0, //12 绢八贱
1380, //13 搬拌
1500, //14 归榜捧磊家券, 家券贱
1520, //15 篮脚贱
940, //16 措篮脚
1560, //17 傈扁面拜
1590, //18 鉴埃捞悼
1620, //19 瘤凯厘
1650, //20 拳堪气惯
1680, //21 措篮窍(傈扁欺咙)
0, //22 馆岿八过
0, //23 堪拳搬
0, //24 公怕焊
3960, //25 沤扁颇楷
1790, //26 措雀汗贱
0, //27 脚荐家券 Magic2
3880, //28 林贱狼阜
3920, //29 荤磊辣雀
3840, //30 葫汲浅
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
);
}
EffectBase: array[0..MAXEFFECT-1] of integer = (
0,{1}
200,{2}
400,{3}
600,{4}
0,{5}
900,{6}
920,{7}
940,{8}
20,{9}
940,{10}
940,{11}
940,{12}
0,{13}
1380,{14}
1500,{15}
1520,{16}
940,{17}
1560,{18}
1590,{19}
1620,{20}
1650,{21}
1680,{22}
0,{23}
0,{24}
0,{25}
3960,{26}
1790,{27}
0,{28}
3880,{29}
3920,{30}
3840,{31}
0,{32}
40,{33}
130, {34}
160,{35}
190,{36}
0,{37}
210,{38}
400,{39}
600,{40}
1500,{41}
650,{42}
710,{43}
740,{44}
910,{45}
940,{46}
990,{47}
1040,{48}
1110 {49}
);
MAXHITEFFECT = 8{5};
{
HitEffectBase: array[0..MAXHITEFFECT-1] of integer = (
800, //0, 绢八贱
1410, //1 绢八贱
1700, //2 馆岿八过
3480, //3 堪拳搬, 矫累
3390, //4 堪拳搬 馆娄烙
1,2,3
);
}
HitEffectBase: array[0..MAXHITEFFECT-1] of integer = (
800,
1410,
1700,
3480,
3390,
40,
220,
740
);
MAXMAGICTYPE = 16;
type
TMagicType = (mtReady, mtFly, mtExplosion,
mtFlyAxe, mtFireWind, mtFireGun,
mtLightingThunder, mtThunder, mtExploBujauk,
mtBujaukGroundEffect, mtKyulKai, mtFlyArrow,
mt12, mt13, mt14,
mt15, mt16
);
TUseMagicInfo = record
ServerMagicCode: integer;
MagicSerial: integer;
Target: integer; //recogcode
EffectType: TMagicType;
EffectNumber: integer;
TargX: integer;
TargY: integer;
Recusion: Boolean;
AniTime: integer;
end;
PTUseMagicInfo = ^TUseMagicInfo;
TMagicEff = class//Size 0xC8
m_boActive: Boolean; //0x04
ServerMagicId: integer; //0x08
MagOwner: TObject; //0x0C
TargetActor: TObject; //0x10
ImgLib: TWMImages; //0x14
EffectBase: integer; //0x18
MagExplosionBase: integer; //0x1C
px, py: integer; //0x20 0x24
RX, RY: integer; //0x28 0x2C
Dir16, OldDir16: byte; //0x30 0x31
TargetX, TargetY: integer; //0x34 0x38
TargetRx, TargetRy: integer; //0x3C 0x40
FlyX, FlyY, OldFlyX, OldFlyY: integer; //0x44 0x48 0x4C 0x50
FlyXf, FlyYf: Real; //0x54 0x5C
Repetition: Boolean; //0x64
FixedEffect: Boolean; //0x65
MagicType: integer; //0x68
NextEffect: TMagicEff; //0x6C
ExplosionFrame: integer; //0x70
NextFrameTime: integer; //0x74
Light: integer; //0x78
n7C:Integer;
bt80:Byte;
bt81:Byte;
start: integer; //0x84
curframe: integer; //0x88
frame: integer; //0x8C
private
m_dwFrameTime: longword; //0x90
m_dwStartTime: longword; //0x94
repeattime: longword; //0x98 馆汗 局聪皋捞记 矫埃 (-1: 拌加)
steptime: longword; //0x9C
fireX, fireY: integer; //0xA0 0xA4
firedisX, firedisY: integer; //0xA8 0xAC
newfiredisX, newfiredisY: integer;//0xB0 0xB4
FireMyselfX, FireMyselfY: integer;//0xB8 0xBC
prevdisx, prevdisy: integer; //0xC0 0xC4
protected
procedure GetFlyXY (ms: integer; var fx, fy: integer);
public
constructor Create (id, effnum, sx, sy, tx, ty: integer; mtype: TMagicType; Recusion: Boolean; anitime: integer);
destructor Destroy; override;
function Run: Boolean; dynamic; //false:场车澜.
function Shift: Boolean; dynamic;
procedure DrawEff (surface: TDirectDrawSurface); dynamic;
end;
TFlyingAxe = class (TMagicEff)
FlyImageBase: integer;
ReadyFrame: integer;
public
constructor Create (id, effnum, sx, sy, tx, ty: integer; mtype: TMagicType; Recusion: Boolean; anitime: integer);
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TFlyingBug = class (TMagicEff)//Size 0xD0
FlyImageBase: integer;//0xC8
ReadyFrame: integer;//0xCC
public
constructor Create (id, effnum, sx, sy, tx, ty: integer; mtype: TMagicType; Recusion: Boolean; anitime: integer);
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TFlyingArrow = class (TFlyingAxe)
public
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TFlyingFireBall = class (TFlyingAxe) //0xD0
public
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TCharEffect = class (TMagicEff)
public
constructor Create (effbase, effframe: integer; target: TObject);
function Run: Boolean; override; //false:场车澜.
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TMapEffect = class (TMagicEff)
public
RepeatCount: integer;
constructor Create (effbase, effframe: integer; x, y: integer);
function Run: Boolean; override; //false:场车澜.
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TScrollHideEffect = class (TMapEffect)
public
constructor Create (effbase, effframe: integer; x, y: integer; target: TObject);
function Run: Boolean; override;
end;
TLightingEffect = class (TMagicEff)
public
constructor Create (effbase, effframe: integer; x, y: integer);
function Run: Boolean; override;
end;
TFireNode = record
x: integer;
y: integer;
firenumber: integer;
end;
TFireGunEffect = class (TMagicEff)
public
OutofOil: Boolean;
firetime: longword;
FireNodes: array[0..FIREGUNFRAME-1] of TFireNode;
constructor Create (effbase, sx, sy, tx, ty: integer);
function Run: Boolean; override;
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TThuderEffect = class (TMagicEff)
public
constructor Create (effbase, tx, ty: integer; target: TObject);
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TLightingThunder = class (TMagicEff)
public
constructor Create (effbase, sx, sy, tx, ty: integer; target: TObject);
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TExploBujaukEffect = class (TMagicEff)
public
constructor Create (effbase, sx, sy, tx, ty: integer; target: TObject);
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TBujaukGroundEffect = class (TMagicEff)//Size 0xD0
public
MagicNumber: integer; //0xC8
BoGroundEffect: Boolean; //0xCC
constructor Create (effbase, magicnumb, sx, sy, tx, ty: integer);
function Run: Boolean; override;
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
TNormalDrawEffect = class (TMagicEff)//Size 0xCC
boC8:Boolean;
public
constructor Create(XX,YY:Integer;WmImage:TWMImages;effbase,nX:Integer;frmTime:LongWord;boFlag:Boolean);
function Run: Boolean; override;
procedure DrawEff (surface: TDirectDrawSurface); override;
end;
procedure GetEffectBase (mag, mtype: integer; var wimg: TWMImages; var idx: integer);
implementation
uses
ClMain, Actor, SoundUtil, MShare;
//取得魔法效果所在图库
procedure GetEffectBase (mag, mtype: integer; var wimg: TWMImages; var idx: integer);
begin
wimg := nil;
idx := 0;
case mtype of
0: begin
case mag of
8,27,33..35,37..39,41..42,43,44,45{46}..48: begin
wimg := g_WMagic2Images;
if mag in [0..MAXEFFECT-1] then
idx := EffectBase[mag];
end;
31: begin
wimg := FrmMain.WMon21Img;
if mag in [0..MAXEFFECT-1] then
idx := EffectBase[mag];
end;
36: begin
wimg := FrmMain.WMon22Img;
if mag in [0..MAXEFFECT-1] then
idx := EffectBase[mag];
end;
80..82: begin
wimg := FrmMain.WDragonImg;
if mag = 80 then begin
if g_Myself.m_nCurrX >= 84 then begin
idx:=130;
end else begin
idx:=140;
end;
end;
if mag = 81 then begin
if (g_Myself.m_nCurrX >= 78) and (g_Myself.m_nCurrY >= 48) then begin
idx:=150;
end else begin
idx:=160;
end;
end;
if mag = 82 then begin
idx:=180;
end;
end;
89: begin
wimg := FrmMain.WDragonImg;
idx:=350;
end;
else begin
wimg := g_WMagicImages;
if mag in [0..MAXEFFECT-1] then
idx := EffectBase[mag];
end;
end;
end;
1: begin
wimg := g_WMagicImages;
if mag in [0..MAXHITEFFECT-1] then begin
idx := HitEffectBase[mag];
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -