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

📄 magic.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          end else
            TargeTBaseObject := nil;
        end else
         TargeTBaseObject := nil;
      end else
        TargeTBaseObject := nil;
    end;
    SKILL_HEALLING{2}: begin
      if TargeTBaseObject = nil then begin
        TargeTBaseObject:=PlayObject;
        nTargetX:=PlayObject.m_nCurrX;
        nTargetY:=PlayObject.m_nCurrY;
      end;
      if PlayObject.IsProperFriend{0FFF3}(TargeTBaseObject) then begin
        nPower:= PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.SC) * 2,
                                      SmallInt(HiWord(PlayObject.m_WAbil.SC)-LoWord(PlayObject.m_WAbil.SC)) * 2 + 1);
        if TargeTBaseObject.m_WAbil.HP < TargeTBaseObject.m_WAbil.MaxHP then begin
          TargeTBaseObject.SendDelayMsg(PlayObject,RM_MAGHEALING,0,nPower,0,0,'',800);
          boTrain:=True;
        end;
        if PlayObject.m_boAbilSeeHealGauge then
          PlayObject.SendMsg(TargeTBaseObject,RM_10414,0,0,0,0,'');
      end;
    end;
    SKILL_AMYOUNSUL{6}: begin  //施毒术
      (*
      boSpellFail:=True;

      if PlayObject.IsProperTarget(TargeTBaseObject) then begin
        if PlayObject.m_UseItems[U_ARMRINGL].wIndex > 0 then begin
          StdItem:=UserEngine.GetStdItem(PlayObject.m_UseItems[U_ARMRINGL].wIndex);
          if (StdItem <> nil) and (StdItem.StdMode = 25) and (StdItem.Shape <= 2) then begin
            if PlayObject.m_UseItems[U_ARMRINGL].Dura >= 100 then begin
              Dec(PlayObject.m_UseItems[U_ARMRINGL].Dura,100);
              PlayObject.SendMsg(PlayObject,RM_DURACHANGE,5,PlayObject.m_UseItems[U_ARMRINGL].Dura,PlayObject.m_UseItems[U_ARMRINGL].DuraMax,0,'');
              if Random(TargeTBaseObject.m_btAntiPoison + 7) <= 6 then begin
                case StdItem.Shape of
                  1: begin //0493F94
                    nPower:=GetPower13(40) + GetRPow(PlayObject.m_WAbil.SC) * 2;
                    TargeTBaseObject.SendDelayMsg(PlayObject,RM_POISON,POISON_DECHEALTH{中毒类型 - 绿毒},nPower,Integer(PlayObject),ROUND(UserMagic.btLevel / 3 * (nPower / g_Config.nAmyOunsulPoint)){UserMagic.btLevel},'',1000);
                  end;
                  2: begin //00493FE9
                    nPower:=GetPower13(30) + GetRPow(PlayObject.m_WAbil.SC) * 2;
                    TargeTBaseObject.SendDelayMsg(PlayObject,RM_POISON,POISON_DAMAGEARMOR{中毒类型 - 红毒},nPower,Integer(PlayObject),ROUND(UserMagic.btLevel / 3 * (nPower / g_Config.nAmyOunsulPoint)){UserMagic.btLevel},'',1000);
                  end;
                end; //0049403C
                if (TargeTBaseObject.m_btRaceServer = RC_PLAYOBJECT) or (TargeTBaseObject.m_btRaceServer >= RC_ANIMAL) then
                  boTrain:=True;
              end; //00494058
              PlayObject.SetTargetCreat(TargeTBaseObject);
              boSpellFail:=False;
            end; //0049406B
            if PlayObject.m_UseItems[U_ARMRINGL].Dura < 100 then begin
              PlayObject.m_UseItems[U_ARMRINGL].Dura:=0;
              PlayObject.SendDelItems(@PlayObject.m_UseItems[U_ARMRINGL]);
              PlayObject.m_UseItems[U_ARMRINGL].wIndex:=0;
            end;
          end;
        end;
      end;
      *)
      boSpellFail:=True;

      if PlayObject.IsProperTarget(TargeTBaseObject) then begin

        if CheckAmulet(PlayObject,1,2,nAmuletIdx) then begin
          StdItem:=UserEngine.GetStdItem(PlayObject.m_UseItems[nAmuletIdx].wIndex);
          if StdItem <> nil then begin
          UseAmulet(PlayObject,1,2,nAmuletIdx);

          if Random(TargeTBaseObject.m_btAntiPoison + 7) <= 6 then begin
            case StdItem.Shape of
              1: begin //0493F94
                nPower:=GetPower13(40) + GetRPow(PlayObject.m_WAbil.SC) * 2;
                TargeTBaseObject.SendDelayMsg(PlayObject,RM_POISON,POISON_DECHEALTH{中毒类型 - 绿毒},nPower,Integer(PlayObject),ROUND(UserMagic.btLevel / 3 * (nPower / g_Config.nAmyOunsulPoint)){UserMagic.btLevel},'',1000);
              end;
              2: begin //00493FE9
                nPower:=GetPower13(30) + GetRPow(PlayObject.m_WAbil.SC) * 2;
                TargeTBaseObject.SendDelayMsg(PlayObject,RM_POISON,POISON_DAMAGEARMOR{中毒类型 - 红毒},nPower,Integer(PlayObject),ROUND(UserMagic.btLevel / 3 * (nPower / g_Config.nAmyOunsulPoint)){UserMagic.btLevel},'',1000);
              end;
            end; //0049403C
            if (TargeTBaseObject.m_btRaceServer = RC_PLAYOBJECT) or (TargeTBaseObject.m_btRaceServer >= RC_ANIMAL) then
              boTrain:=True;
          end; //00494058
          PlayObject.SetTargetCreat(TargeTBaseObject);
          boSpellFail:=False;
          end;
        end; //0049406B
      end;
    end;
    SKILL_FIREWIND{8}: begin  //抗拒火环  00493754
      if MagPushArround(PlayObject,UserMagic.btLevel) > 0 then boTrain:=True;
    end;
    SKILL_FIRE{9}: begin //地狱火 00493778
      n1C:=GetNextDirection(PlayObject.m_nCurrX,PlayObject.m_nCurrY,nTargetX,nTargetY);
      if PlayObject.m_PEnvir.GetNextPosition(PlayObject.m_nCurrX,PlayObject.m_nCurrY,n1C,1,n14,n18) then begin
        PlayObject.m_PEnvir.GetNextPosition(PlayObject.m_nCurrX,PlayObject.m_nCurrY,n1C,5,nTargetX,nTargetY);
        nPower:= PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),
                                      SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1);
        if PlayObject.MagPassThroughMagic(n14,n18,nTargetX,nTargetY,n1C,nPower,False) > 0 then
          boTrain:=True;
      end;
    end;
    SKILL_SHOOTLIGHTEN{10}: begin //疾光电影 0049386A
      n1C:=GetNextDirection(PlayObject.m_nCurrX,PlayObject.m_nCurrY,nTargetX,nTargetY);
      if PlayObject.m_PEnvir.GetNextPosition(PlayObject.m_nCurrX,PlayObject.m_nCurrY,n1C,1,n14,n18) then begin
        PlayObject.m_PEnvir.GetNextPosition(PlayObject.m_nCurrX,PlayObject.m_nCurrY,n1C,8,nTargetX,nTargetY);
        nPower:= PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),
                                      SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1);
        if PlayObject.MagPassThroughMagic(n14,n18,nTargetX,nTargetY,n1C,nPower,True) > 0 then
          boTrain:=True;
      end;
    end;
    SKILL_LIGHTENING{11}: begin //雷电术 0049395C
      if PlayObject.IsProperTarget (TargeTBaseObject) then begin
        if (Random(10) >= TargeTBaseObject.m_nAntiMagic) then begin
          nPower:= PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),
                                      SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1);
          if TargeTBaseObject.m_btLifeAttrib = LA_UNDEAD then
            nPower:=ROUND(nPower * 1.5);
          PlayObject.SendDelayMsg(PlayObject,RM_DELAYMAGIC,nPower,MakeLong(nTargetX,nTargetY),2,Integer(TargeTBaseObject),'',600);
          if TargeTBaseObject.m_btRaceServer >= RC_ANIMAL then
            boTrain:=True;
        end else TargeTBaseObject:=nil
      end else TargeTBaseObject:=nil;
    end;
    SKILL_FIRECHARM{13},
    SKILL_HANGMAJINBUB{14},
    SKILL_DEJIWONHO{15},
    SKILL_HOLYSHIELD{16},
    SKILL_SKELLETON{17},
    SKILL_CLOAK{18},
    SKILL_BIGCLOAK{19}: begin //004940BC
      boSpellFail:=True;
      if CheckAmulet(PlayObject,1,1,nAmuletIdx) then begin
        UseAmulet(PlayObject,1,1,nAmuletIdx);
        {
        if BaseObject.m_UseItems[U_ARMRINGL].Dura >= 100 then Dec(BaseObject.m_UseItems[U_ARMRINGL].Dura,100)
        else BaseObject.m_UseItems[U_ARMRINGL].Dura:=0;
        BaseObject.SendMsg(BaseObject,RM_DURACHANGE,U_ARMRINGL,BaseObject.m_UseItems[U_ARMRINGL].Dura,BaseObject.m_UseItems[U_ARMRINGL].DuraMax,0,'');
        }
        case UserMagic.MagicInfo.wMagicId of    //
          SKILL_FIRECHARM{13}: begin //灵魂火符 0049415F
            if PlayObject.MagCanHitTarget(PlayObject.m_nCurrX,PlayObject.m_nCurrY,TargeTBaseObject) then begin
              if PlayObject.IsProperTarget(TargeTBaseObject) then begin
                if Random(10) >= TargeTBaseObject.m_nAntiMagic then begin
                  if (abs(TargeTBaseObject.m_nCurrX - nTargetX) <= 1) and (abs(TargeTBaseObject.m_nCurrY - nTargetY) <= 1) then begin
                    nPower:= PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.SC),
                                                   SmallInt(HiWord(PlayObject.m_WAbil.SC)-LoWord(PlayObject.m_WAbil.SC))+ 1);
                    PlayObject.SendDelayMsg(PlayObject,RM_DELAYMAGIC,nPower,MakeLong(nTargetX,nTargetY),2,Integer(TargeTBaseObject),'',1200);
                    if TargeTBaseObject.m_btRaceServer >= RC_ANIMAL then
                      boTrain:=True;
                  end; //00494463
                end; //00494463
              end; //00494463
            end else TargeTBaseObject:=nil; //0049426D              
          end;
          SKILL_HANGMAJINBUB{14}: begin //幽灵盾 00494277
            nPower:= PlayObject.GetAttackPower(GetPower13(60) + LoWord(PlayObject.m_WAbil.SC) * 10,SmallInt(HiWord(PlayObject.m_WAbil.SC)-LoWord(PlayObject.m_WAbil.SC))+ 1);
            if PlayObject.MagMakeDefenceArea(nTargetX,nTargetY,3,nPower,1) > 0 then
              boTrain:=True;
          end;
          SKILL_DEJIWONHO{15}: begin //神圣战甲术 004942E5
            nPower:= PlayObject.GetAttackPower(GetPower13(60) + LoWord(PlayObject.m_WAbil.SC) * 10,SmallInt(HiWord(PlayObject.m_WAbil.SC)-LoWord(PlayObject.m_WAbil.SC))+ 1);
            if PlayObject.MagMakeDefenceArea(nTargetX,nTargetY,3,nPower,0) > 0 then
              boTrain:=True;
          end;
          SKILL_HOLYSHIELD{16}: begin //捆魔咒 00494353
            if MagMakeHolyCurtain(PlayObject,GetPower13(40) + GetRPow(PlayObject.m_WAbil.SC) * 3,nTargetX,nTargetY) > 0 then
              boTrain:=True;
          end;
          SKILL_SKELLETON{17}: begin //召唤骷髅 004943A2
            if MagMakeSlave(PlayObject,UserMagic) then begin
              boTrain:=True;
            end;
            (*
            if not PlayObject.sub_4DD704 then begin
              if PlayObject.MakeSlave(g_Config.sBoneFamm,UserMagic.btLevel,g_Config.nBoneFammCount{1},10 * 24 * 60 * 60) <> nil then
                boTrain:=True;
            end;
            *)
          end;
          SKILL_CLOAK{18}: begin //隐身术 004943DF
            if MagMakePrivateTransparent(PlayObject,GetPower13(30) + GetRPow(PlayObject.m_WAbil.SC) * 3) then
              boTrain:=True;
          end;
          SKILL_BIGCLOAK{19}: begin //集体隐身术
            if MagMakeGroupTransparent(PlayObject,nTargetX,nTargetY,GetPower13(30) + GetRPow(PlayObject.m_WAbil.SC) * 3) then
              boTrain:=True;
          end;
        end;    // case
        boSpellFail:=False;
      end;
        
    end;
    SKILL_TAMMING{20}: begin //诱惑之光 00493A51
      if PlayObject.IsProperTarget (TargeTBaseObject) then begin
        if MagTamming(PlayObject,TargeTBaseObject,nTargetX,nTargetY,UserMagic.btLevel) then
          boTrain:=True;
      end;
    end;
    SKILL_SPACEMOVE{21}: begin //瞬息移动 00493ADD
      PlayObject.SendRefMsg(RM_MAGICFIRE,0,MakeWord(UserMagic.MagicInfo.btEffectType,UserMagic.MagicInfo.btEffect),MakeLong(nTargetX,nTargetY),Integer(TargeTBaseObject),'');
      boSpellFire:=False;
      if MagSaceMove(PlayObject,UserMagic.btLevel) then
        boTrain:=True;
    end;
    SKILL_EARTHFIRE{22}: begin  //火墙  00493B40
      if MagMakeFireCross(PlayObject,
                          PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),
                          SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1),
                          GetPower(10) + (Word(GetRPow(PlayObject.m_WAbil.MC)) shr 1),
                          nTargetX,
                          nTargetY) > 0 then
        boTrain:=True;
    end;
    SKILL_FIREBOOM{23}: begin //爆裂火焰 00493BD5
      if MagBigExplosion(PlayObject,
                         PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1),
                         nTargetX,
                         nTargetY,
                         g_Config.nFireBoomRage{1}) then
        boTrain:=True;
    end;
    SKILL_LIGHTFLOWER{24}: begin //地狱雷光 00493CB1
      if MagElecBlizzard(PlayObject,PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1)) then
        boTrain:=True;
    end;
    SKILL_SHOWHP{28}: begin   //心灵启示
      if (TargeTBaseObject <> nil) and not TargeTBaseObject.m_boShowHP then begin
        if Random(6) <= (UserMagic.btLevel + 3) then begin
          TargeTBaseObject.m_dwShowHPTick:=GetTickCount();
          TargeTBaseObject.m_dwShowHPInterval:=GetPower13(GetRPow(PlayObject.m_WAbil.SC) * 2 + 30) * 1000;
          TargeTBaseObject.SendDelayMsg(TargeTBaseObject,RM_DOOPENHEALTH,0,0,0,0,'',1500);
          boTrain:=True;
        end;
      end;        
    end;
    SKILL_BIGHEALLING{29}: begin //群体治疗术 00493E42
      nPower:= PlayObject.GetAttackPower (GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.SC) * 2,
                                    SmallInt(HiWord(PlayObject.m_WAbil.SC)-LoWord(PlayObject.m_WAbil.SC)) * 2 + 1);
      if MagBigHealing(PlayObject,nPower,nTargetX,nTargetY) then boTrain:=True;
    end;
    SKILL_SINSU{30}: begin //00494476
      boSpellFail:=True;
      if CheckAmulet(PlayObject,5,1,nAmuletIdx) then begin
        UseAmulet(PlayObject,5,1,nAmuletIdx);
        {
        if BaseObject.m_UseItems[U_ARMRINGL].Dura >= 500 then Dec(BaseObject.m_UseItems[U_ARMRINGL].Dura,500)
        else BaseObject.m_UseItems[U_ARMRINGL].Dura:=0;
        BaseObject.SendMsg(BaseObject,RM_DURACHANGE,5,BaseObject.m_UseItems[U_ARMRINGL].Dura,BaseObject.m_UseItems[U_ARMRINGL].DuraMax,0,'');
        }
//        if (UserMagic.MagicInfo.wMagicId = 30) and not PlayObject.sub_4DD704 then begin
          if MagMakeSinSuSlave(PlayObject,UserMagic) then begin
            boTrain:=True;
          end;
//          if PlayObject.MakeSlave(g_Config.sDogz,UserMagic.btLevel,1,10 * 24 * 60 * 60) <> nil then
//            boTrain:=True;
//        end;
        boSpellFail:=False;
      end;
    end;
    SKILL_ANGEL: begin
      boSpellFail:=True;
      if CheckAmulet(PlayObject,2,1,nAmuletIdx) then begin
        UseAmulet(PlayObject,2,1,nAmuletIdx);

        if MagMakeAngelSlave(PlayObject,UserMagic) then
          boTrain:=True;

        boSpellFail:=False;
      end;
    end;
    SKILL_SHIELD{31}: begin //魔法盾 00493D15
      if PlayObject.MagBubbleDefenceUp(UserMagic.btLevel,GetPower(GetRPow(PlayObject.m_WAbil.MC) + 15)) then
            boTrain:=True;
    end;
    SKILL_KILLUNDEAD{32}:begin //00493A97  圣言术
      if PlayObject.IsProperTarget (TargeTBaseObject) then begin
        if MagTurnUndead(PlayObject,TargeTBaseObject,nTargetX,nTargetY,UserMagic.btLevel) then
          boTrain:=True;
      end;
    end;
    SKILL_SNOWWIND{33}: begin //00493C43 冰咆哮
      if MagBigExplosion(PlayObject,
                         PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),SmallInt(HiWord(PlayObject.m_WAbil.MC)-LoWord(PlayObject.m_WAbil.MC))+ 1),
                         nTargetX,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -