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

📄 magic.pas

📁 传世源码可编译的,功能齐全.是学习的好模版,会DELPHI的朋友们也可以自己修改,弄个自己的引擎.
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          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 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
                  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
                  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;
              if (TargeTBaseObject.m_btRaceServer = RC_PLAYOBJECT) or (TargeTBaseObject.m_btRaceServer >= RC_ANIMAL) then
                boTrain:=True;
            end;
            PlayObject.SetTargetCreat(TargeTBaseObject);
            boSpellFail:=False;
          end;
        end;
      end;
    end;
    SKILL_FIREWIND{8}: begin  //抗拒火环
      if MagPushArround(PlayObject,UserMagic.btLevel) > 0 then boTrain:=True;
    end;
    SKILL_FIRE{9}: begin //地狱火
      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},51: begin //疾光电影
      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},49: begin //雷电术
      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},
    SKILL_67,SKILL_47,SKILL_46,SKILL_48: begin   //幽冥火咒
      boSpellFail:=True;
      if CheckAmulet(PlayObject,1,1,nAmuletIdx) then
      begin
        UseAmulet(PlayObject,1,1,nAmuletIdx);
        case UserMagic.MagicInfo.wMagicId of
          SKILL_FIRECHARM{13} ,
          SKILL_67: begin //灵魂火符
            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;
                end;
              end;
            end
            else
              TargeTBaseObject:=nil;
          end;
          SKILL_48:begin //灵魂墙
            if (TargeTBaseObject<>nil) and (not TargeTBaseObject.m_boDeath) and (TargeTBaseObject.m_Master=nil) then
            begin
              if Maglinghunqiang(PlayObject,nTargetX,nTargetY,TargeTBaseObject,UserMagic) then   boTrain:=True;
            end;
          end;
          SKILL_47: begin  //替身法符
            if MagMaketishen(PlayObject,nTargetX,nTargetY,UserMagic) then
              boTrain:=True;
          end;
          SKILL_46:begin  //尸灵
            if (TargeTBaseObject<>nil) and (TargeTBaseObject.m_boDeath)and (TargeTBaseObject.m_Master=nil) then
            begin
              if  MagMakeshiling(PlayObject,nTargetX,nTargetY,TargeTBaseObject,UserMagic) then  boTrain:=True;
            end;
          end;
          SKILL_HANGMAJINBUB{14}: begin //幽灵盾
            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 //神圣战甲术
            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 //捆魔咒
            if MagMakeHolyCurtain(PlayObject,GetPower13(40) + GetRPow(PlayObject.m_WAbil.SC) * 3,nTargetX,nTargetY) > 0 then
              boTrain:=True;
          end;
          SKILL_SKELLETON{17}: begin //召唤骷髅
            if MagMakeSlave(PlayObject,UserMagic) then begin
              boTrain:=True;
            end;
          end;
          SKILL_CLOAK{18}: begin //隐身术
            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;
        boSpellFail:=False;
        sub_4934B4(PlayObject);
      end;
    end;
    SKILL_TAMMING{20}: begin //诱惑之光
      if PlayObject.IsProperTarget (TargeTBaseObject) then begin
        if MagTamming(PlayObject,TargeTBaseObject,nTargetX,nTargetY,UserMagic.btLevel) then
          boTrain:=True;
      end;
    end;
    SKILL_SPACEMOVE{21}: begin //瞬息移动
      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  //火墙
      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 //爆裂火焰
      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),
                         0,
                         nTargetX,
                         nTargetY,
                         g_Config.nFireBoomRage{1},0) then
        boTrain:=True;
    end;
    SKILL_LIGHTFLOWER,52{24}: begin //地狱雷光
      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 //群体治疗术
      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      //召唤神兽
      boSpellFail:=True;
      if CheckAmulet(PlayObject,2,1,nAmuletIdx) then
      begin
        UseAmulet(PlayObject,2,1,nAmuletIdx);
        if MagMakeSinSuSlave(PlayObject,UserMagic) then
        begin
           boTrain:=True;
        end;
        boSpellFail:=False;
      end;
    end;
    SKILL_SHIELD{31}: begin //魔法盾
      if PlayObject.MagBubbleDefenceUp(UserMagic.btLevel,GetPower(GetRPow(PlayObject.m_WAbil.MC) + 15)) then
        boTrain:=True;
    end;
    SKILL_KILLUNDEAD{32}:begin  // 圣言术
      if PlayObject.IsProperTarget (TargeTBaseObject) then
      begin
        if MagTurnUndead(PlayObject,TargeTBaseObject,nTargetX,nTargetY,UserMagic.btLevel) then
          boTrain:=True;
      end;
    end;
    SKILL_SNOWWIND{33}: begin   // 冰咆哮
      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),
                         0,
                         nTargetX,
                         nTargetY,
                         g_Config.nSnowWindRange{1},0) then
        boTrain:=True;
    end;
    SKILL_UNAMYOUNSUL{65}: begin //解毒术  群体
      if Random(11) < UserMagic.btLevel * 2 + 4  then
      begin
        if MagGroupjd(PlayObject,nTargetX,nTargetY) then  boTrain:=True;
      end;
    end;
    SKILL_WINDTEBO{37狮子吼}: begin
     if MagWindTebo(PlayObject,UserMagic) then boTrain:=True;
    end;
    SKILL_GROUPLIGHTENING{53 五雷轰}: begin
      if MagGroupLightening(PlayObject,UserMagic,nTargetX, nTargetY,TargeTBaseObject,boSpellFire) then
          boTrain:=True;
    end;
    54 : begin  //冰旋风
      if MagGroupwind(PlayObject,UserMagic,nTargetX, nTargetY,TargeTBaseObject,boSpellFire) then
          boTrain:=True;
    end;
    SKILL_GROUPAMYOUNSUL{38 群体施毒术}: begin
      if MagGroupAmyounsul(PlayObject,UserMagic,nTargetX, nTargetY,TargeTBaseObject) then
        boTrain:=True;
    end;
    SKILL_GROUPDEDING{39 地钉}: begin
      if MagGroupDeDing(PlayObject,UserMagic,nTargetX, nTargetY,TargeTBaseObject) then
        boTrain:=True;
    end;
    SKILL_40: begin  //残影刀法

    end;

    SKILL_42: begin  //护身真气
      if MagADDABILITY(PlayObject,UserMagic.btLevel,0) then boTrain:=True;
    end;
    SKILL_43: begin  //抱月刀

    end;
    SKILL_44: begin  //雷霆剑
      if MagHbFireBall(PlayObject,UserMagic,nTargetX, nTargetY,TargeTBaseObject) then boTrain:=True;
    end;
    SKILL_50: begin  //风火轮
      if PlayObject.Magfenghuo(UserMagic.btLevel,GetPower(GetRPow(PlayObject.m_WAbil.MC) + 15)) then
         boTrain:=True;
    end;
    SKILL_61: begin  //金刚护体
       if  MagADDABILITY(PlayObject,UserMagic.btLevel,1) then  boTrain:=True;
    end;
    SKILL_63: begin  //
      boTrain:=True;
    end;
    SKILL_64: begin  //神光术     //群体解麻痹 解诅咒
      if Random(11) < UserMagic.btLevel * 2 + 4  then
      begin
        if MagGroupsg(PlayObject,nTargetX,nTargetY) then  boTrain:=True;
      end;
    end;

⌨️ 快捷键说明

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