定义类型
这里的魔法效果,是扔出去的魔法效果,魔法释放后的效果
在施咒的动作的,如火球术的施咒效果图样是在自身的,却不在这里,
由Actor单元里面实现有个m_nCurEffFrame,
但是奇怪的是空间移动,是图样是在于自身这些效果,又是由本单元里面实现的。
TMagicType 枚举
开头mt
mtReady 准备?
mtFly 飞?
Bujauk是符的意思?
mtExploBujauk爆炸符?英韩混写
这从0-11的枚举,共有12个?
后面还有
mt12, mt13, mt14,
mt15, mt16 估计是干脆自己添加的?
TUseMagicInfo 这是个记录类型意思是使用魔法信息
TUseMagicInfo = record
ServerMagicCode: integer; //服务魔法码
MagicSerial: integer;
Target: integer; //recogcode
EffectType: TMagicType;//魔法类型?
EffectNumber: integer;
TargX: integer;
TargY: integer;
Recusion: Boolean; //递归
AniTime: integer;
end;
开始定义类了
TMagicEff = class 这个
其它的从它派生,
TBujaukGroundEffect = class(TMagicEff)
飞符,符魔防,符物防效果
TCharEffect = class(TMagicEff)
传送效果
TExploBujaukEffect = class(TMagicEff)
飞符,符爆炸,符隐身效果
TFireGunEffect = class(TMagicEff)
TFlyingBug = class(TMagicEff)
飞虫效果,1.8版本
TLightingEffect = class(TMagicEff)
TLightingEffect = class(TMagicEff)
TNormalDrawEffect = class(TMagicEff)
通用效果?
TThuderEffect = class(TMagicEff)
TFlyingAxe = class(TMagicEff)派生 TFlyingArrow = class(TFlyingAxe)
TFlyingFireBall = class(TFlyingAxe)
飞斧头效果,飞箭 ,飞火球效果1.8版本
TMapEffect = class(TMagicEff) 派生 TScrollHideEffect = class(TMapEffect)
地图效果, 卷轴隐藏效果
开始看TMagicEff = class
里面字段的字段名没有那么像ACTOR里面写的标准了。
还 NextEffect: TMagicEff; 下个效果?嵌套自己?
定义的复杂的点的字段有
MagOwner: TObject; //0x0C 施法者?
TargetActor: TObject; //0x10 目标着?
ImgLib: TWMImages;
其字段也是一个类,2个原始的类,一个具体点的类
坐标数据
一些标志
私有字段 帧时间,坐标
构建方法
传入的参数比较多
constructor TMagicEff.Create(id, effnum, sx, sy, tx, ty: integer; mtype:
TMagicType; Recusion: Boolean; anitime: integer);
id,指的magid
这个追踪了一下
effnum 效果编号?
mtype 魔法类型
图库指定ImgLib := g_WMagicImages;
根据魔法类型赋值帧相关的数据
start
frame
curframe
FixedEffect
Repetition
ExplosionFrame
不同的id,指的magid,帧的相关数据又有不同
.ServerMagicCode的取值
好像只有-1 ,0 ,1 和111?
TPlayScene.NewMagic里面建立TMagicEff.Create
然后添加到m_EffectList.Add(meff)队列中
而在
TPlayScene.DelMagic(magid: integer);删除魔法队列中的魔法时,是
根据这个magid和TMagicEff(m_EffectList[i]).ServerMagicId比较来删除的
所以这个ServerMagicId,magid纯粹是个编号?
不理解。
里面有几个公开的方法,
【1】TMagicEff.Create(id, effnum, sx, sy, tx, ty: integer; mtype:
TMagicType; Recusion: Boolean; anitime: integer);
作用是根据 mtype
对帧的一些初始数据进行设定
有个关键是 分为 基础效果,和爆炸效果
通过一个FixedEffect 修正效果来标示,当然开始都是基础效果了。
还有对坐标的设定,
坐标又涉及到地图坐标和屏幕坐标的变换,其变换好像是根据主角的地图坐标来为中心的,
方向的设定,这里方向是16的方向?
根据魔法的类型,有老魔法,也有新魔法, 这新魔法添加上去的就比较乱了,
感觉这套源码是本身只支持1.5,在1.5以后,1.8之前那段私服魔改添加个各种魔改,自行添加的新魔法技能,翅膀之类的。
【2】function TMagicEff.Shift: Boolean;
控制帧的步进,
还计算效果偏移的,也是说像火球,符,飞斧头,
是需要计算其轨迹坐标的,FLYX,FLYY?
说要Shift 的意思是偏移。
里面有个TMagicEff.GetFlyXY(ms: integer; var fx, fy: integer);的方法,
也是做这个的,但是没有地方被调用?
【3】function TMagicEff.Run: Boolean; //运行
调用SHIFT
【4】procedure TMagicEff.DrawEff(surface: TDirectDrawSurface);
这个是根据前面的方法得到的帧,坐标,进行绘图了。
其它的继承的类,大多是针对特定的效果,进行参数设置了。
标签:CLIENT8,效果,翎风,魔法,TMagicEff,坐标,magieff,integer,class From: https://www.cnblogs.com/D7mir/p/18178576