⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magiceff.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
📖 第 1 页 / 共 4 页
字号:
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 + -