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

📄 magic.~pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
        PlayObject.Ysplayer.nyuanqi:=0;
        PlayObject.Ysplayer.SendDefMessage(38417,0,0,100,0,'');

    end;


    SKILL85:begin   //神之召唤    法道    ====
    //    if  MagYSzhskill(PlayObject,TargeTBaseObject,UserMagic.btLevel)  then begin
    //  MagYSzhskill85
     //   boTrain:=True;
    //  end;
      if  MagYSzhskill85(PlayObject,nTargetX,nTargetY,TargeTBaseObject,UserMagic.btLevel)  then begin

        boTrain:=True;
      end;
        PlayObject.Ysplayer.nyuanqi:=0;
        PlayObject.Ysplayer.SendDefMessage(38417,0,0,100,0,'');
    end;

    82:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc82',False);
     boTrain:=True;
    end;
    84:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc84',False);
     boTrain:=True;
    end;

    87:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc87',False);
     boTrain:=True;
    end;

    88:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc88',False);
     boTrain:=True;
    end;

    89:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc89',False);
     boTrain:=True;
    end;

    34:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc34',False);
     boTrain:=True;
    end;
    36:begin
     g_FunctionNPC.GotoLable(PlayObject,'@MagFunc36',False);
     boTrain:=True;
    end;

    45: begin  //诅咒术
      boSpellFail:=True;

      if PlayObject.IsProperTarget(TargeTBaseObject) then begin

        if CheckAmulet(PlayObject,1,3,nAmuletIdx) then begin   //检查稻草人的数量和位置   3表稻草人
          StdItem:=UserEngine.GetStdItem(PlayObject.m_UseItems[nAmuletIdx].wIndex);
          if StdItem <> nil then begin
          UseAmulet(PlayObject,1,3,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_DAOCAO1{蓝色- 雄性稻草人},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_DAOCAO2{粉红色 - 雌性稻草人},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;



  end;
//  if  not ( UserMagic.MagicInfo.wMagicId in [75,35,77]) then
//    PlayObject.SendRefMsg(RM_SPELL,UserMagic.MagicInfo.btEffect,nTargetX,nTargetY,UserMagic.MagicInfo.wMagicId,'');


  if boSpellFail then exit;
  if boSpellFire then begin

    PlayObject.SendRefMsg(RM_MAGICFIRE,0,                  //发魔法打中的效果
                        MakeWord(UserMagic.MagicInfo.btEffectType,UserMagic.MagicInfo.btEffect),
                        MakeLong(nTargetX,nTargetY),
                        Integer(TargeTBaseObject),
                        '');
   if  UserMagic.MagicInfo.wMagicId in [78,79,80,81,83,85] then begin
       // hum:=nil;
       //  hum:=UserEngine.GetPlayObjectEx(PlayObject.sYsname);
         hum:=PlayObject.Ysplayer;
         if hum<>nil then begin
           hum.SendRefMsg(RM_MAGICFIRE,0,                  //发魔法打中的效果
                        MakeWord(UserMagic.MagicInfo.btEffectType,UserMagic.MagicInfo.btEffect),
                        MakeLong(nTargetX,nTargetY),
                        Integer(TargeTBaseObject),
                        '');
         end;   
   end;

  end;
  if (UserMagic.btLevel < 3) and (boTrain) then begin
    if UserMagic.MagicInfo.TrainLevel[UserMagic.btLevel] <= PlayObject.m_Abil.Level then begin
      PlayObject.TrainSkill(UserMagic,Random(3) + 1);
      if not PlayObject.CheckMagicLevelup(UserMagic) then begin
        PlayObject.SendDelayMsg(PlayObject,RM_MAGIC_LVEXP,0,UserMagic.MagicInfo.wMagicId,UserMagic.btLevel,UserMagic.nTranPoint,'',1000);
      end;
    end;
  end;
  Result:=True;
    
end;

function TMagicManager.MagMakePrivateTransparent(BaseObject: TBaseObject; nHTime: Integer):Boolean; //004930E8
var
  I                :Integer;
  BaseObjectList   :TList;
  TargeTBaseObject :TBaseObject;
begin
  Result:=False;
  if BaseObject.m_wStatusTimeArr[STATE_TRANSPARENT{0x70}] > 0 then exit;   //4930FE
  BaseObjectList:=TList.Create;
  BaseObject.GetMapBaseObjects(BaseObject.m_PEnvir,BaseObject.m_nCurrX,BaseObject.m_nCurrY,9,BaseObjectList);
  for I := 0 to BaseObjectList.Count - 1 do begin
    TargeTBaseObject:=TBaseObject(BaseObjectList.Items[i]);
    if TargeTBaseObject=nil then continue;
    if (TargeTBaseObject.m_btRaceServer >= RC_ANIMAL) and (TargeTBaseObject.m_TargetCret = BaseObject) then begin
      if (abs(TargeTBaseObject.m_nCurrX - BaseObject.m_nCurrX) > 1) or
         (abs(TargeTBaseObject.m_nCurrY - BaseObject.m_nCurrY) > 1) or
         (Random(2) = 0) then begin
        TargeTBaseObject.m_TargetCret:=nil;
      end;
    end;
  end;
  BaseObjectList.Free;
  BaseObject.m_wStatusTimeArr[STATE_TRANSPARENT{0x70}]:=nHTime; //004931D2
  BaseObject.m_nCharStatus:=BaseObject.GetCharStatus();
  BaseObject.StatusChanged();
  BaseObject.m_boHideMode:=True;
  BaseObject.m_boTransparent:=True;
  Result:=True;
end;

function TMagicManager.MagTamming(BaseObject, TargeTBaseObject: TBaseObject;
  nTargetX, nTargetY, nMagicLevel: Integer): Boolean; //00492368
var
  n14:Integer;
begin
  Result:=False;
  if TargeTBaseObject.m_boTishen then exit;
  if (TargeTBaseObject.m_btRaceServer <> RC_PLAYOBJECT) and (TargeTBaseObject.m_btRaceServer <> RC_YSBJECT) and ((Random(4 - nMagicLevel) = 0)) then begin
    TargeTBaseObject.m_TargetCret:=nil;
    if TargeTBaseObject.m_Master = BaseObject then begin
      TargeTBaseObject.OpenHolySeizeMode((nMagicLevel * 5 + 10) * 1000);
      Result:=True;
    end else begin
      if Random(1) = 0 then begin    //2
        if TargeTBaseObject.m_Abil.Level <= BaseObject.m_Abil.Level + 2 then begin
          if Random(2) = 0 then begin   //3
            if Random((BaseObject.m_Abil.Level + 20)) + (nMagicLevel * 5) > (TargeTBaseObject.m_Abil.Level + g_Config.nMagTammingTargetLevel{10}) then begin
              if not(TargeTBaseObject.bo2C1) and
                 (TargeTBaseObject.m_btLifeAttrib = 0) and
                 (TargeTBaseObject.m_Abil.Level < g_Config.nMagTammingLevel{50}) and
                 (BaseObject.m_SlaveList.Count < g_Config.nMagTammingCount{(nMagicLevel + 2)}) then begin
                n14:=TargeTBaseObject.m_WAbil.MaxHP div g_Config.nMagTammingHPRate{100};
                if n14 <= 2 then n14:=2
                else Inc(n14,n14);
                if (TargeTBaseObject.m_Master <> BaseObject) and (Random(n14) = 0) then begin
                  TargeTBaseObject.BreakCrazyMode();
                  if TargeTBaseObject.m_Master <> nil then begin
                    TargeTBaseObject.m_WAbil.HP:=TargeTBaseObject.m_WAbil.HP div 10;
                  end;
                  TargeTBaseObject.m_Master:=BaseObject;
                  TargeTBaseObject.m_dwMasterRoyaltyTick:=LongWord((Random(BaseObject.m_Abil.Level * 2) + (nMagicLevel shl 2) * 5 + 20) * 60 * 1000) + GetTickCount;


                  if Tplayobject(BaseObject).m_Magic69skill <> nil then begin   //兽灵术:06.01.23
                      case Tplayobject(BaseObject).m_Magic69skill.btLevel of
                        0:TargeTBaseObject.m_btSlaveExpLevel:=1;
                        1:TargeTBaseObject.m_btSlaveExpLevel:=2;   //怪物等级
                        2:TargeTBaseObject.m_btSlaveExpLevel:=3;
                        3:TargeTBaseObject.m_btSlaveExpLevel:=4;
                       end;
                     if Tplayobject(BaseObject).m_Magic69skill.btLevel < 3 then begin
                      if Tplayobject(BaseObject).m_Magic69skill.MagicInfo.TrainLevel[Tplayobject(BaseObject).m_Magic69skill.btLevel] <= Tplayobject(BaseObject).m_Abil.Level then begin
                        Tplayobject(BaseObject).TrainSkill(Tplayobject(BaseObject).m_Magic69skill,Random(3) + 1);
                         if not Tplayobject(BaseObject).CheckMagicLevelup(Tplayobject(BaseObject).m_Magic69skill) then begin
                          Tplayobject(BaseObject).SendDelayMsg(Tplayobject(BaseObject),RM_MAGIC_LVEXP,0,Tplayobject(BaseObject).m_Magic69skill.MagicInfo.wMagicId,Tplayobject(BaseObject).m_Magic69skill.btLevel,Tplayobject(BaseObject).m_Magic69skill.nTranPoint,'',1000);
                         end;
                       end;
                     end;


                  end;

                  TargeTBaseObject.m_btSlaveMakeLevel:=nMagicLevel;

                  if TargeTBaseObject.m_dwMasterTick = 0 then TargeTBaseObject.m_dwMasterTick:=GetTickCount();
                  TargeTBaseObject.BreakHolySeizeMode();
                  if LongWord(1500 - nMagicLevel * 200) < LongWord(TargeTBaseObject.m_nWalkSpeed) then begin
                    TargeTBaseObject.m_nWalkSpeed:=1500 - nMagicLevel * 200;
                  end;
                  if LongWord(2000 - nMagicLevel * 200) < LongWord(TargeTBaseObject.m_nNextHitTime) then begin
                    TargeTBaseObject.m_nNextHitTime:=2000 - nMagicLevel * 200;
                  end;
                  TargeTBaseObject.RefShowName();
                  BaseObject.m_SlaveList.Add(TargeTBaseObject);
                end else begin //004925F2
                  if Random(14) = 0 then TargeTBaseObject.m_WAbil.HP:=0;
                end;                  
              end else begin //00492615
                if (TargeTBaseObject.m_btLifeAttrib = LA_UNDEAD) and (Random(20) = 0) then
                  TargeTBaseObject.m_WAbil.HP:=0;
              end;
            end else begin //00492641
              if not (TargeTBaseObject.m_btLifeAttrib = LA_UNDEAD) and (Random(20) = 0) then
                TargeTBaseObject.OpenCrazyMode(Random(20) + 10);
            end;
          end else begin //00492674
            if not (TargeTBaseObject.m_btLifeAttrib = LA_UNDEAD) then
              TargeTBaseObject.OpenCrazyMode(Random(20) + 10); //变红
          end;
        end; //004926B0          
      end else begin //00492699
        TargeTBaseObject.OpenHolySeizeMode((nMagicLevel * 5 + 10) * 1000);
      end;
      Result:=True;
    end;
  end else begin
    if Random(1) = 0 then Result:=True;  //2    
  end;
    
end;

function TMagicManager.MagTurnUndead(BaseObject, TargeTBaseObject: TBaseObject;
  nTargetX, nTargetY, nLevel: Integer): Boolean; //004926D4
var
  n14:Integer;
begin
  Result:=False;
  if TargeTBaseObject.m_boSuperMan or not (TargeTBaseObject.m_btLifeAttrib = LA_UNDEAD) then exit;
  TAnimalObject(TargeTBaseObject).Struck{FFEC}(BaseObject);
  if TargeTBaseObject.m_TargetCret = nil then begin
    TAnimalObject(TargeTBaseObject).m_boRunAwayMode:=True;
    TAnimalObject(TargeTBaseObject).m_dwRunAwayStart:=GetTickCount();
    TAnimalObject(TargeTBaseObject).m_dwRunAwayTime:=10 * 1000;
  end;
  BaseObject.SetTargetCreat(TargeTBaseObject);
  if (Random(2) + (BaseObject.m_Abil.Level - 1)) > TargeTBaseObject.m_Abil.Level then begin
    if TargeTBaseObject.m_Abil.Level < g_Config.nMagTurnUndeadLevel then begin
      n14:=BaseObject.m_Abil.Level - TargeTBaseObject.m_Abil.Level;
      if Random(100) < ((nLevel shl 3) - nLevel + 15 + n14) then begin
        TargeTBaseObject.SetLastHiter(BaseObject);
        TargeTBaseObject.m_WAbil.HP:=0;
        Result:=True;
      end
    end;
  end; //004927CB
end;

{function TMagicManager.MagWindTebo(PlayObject: TPlayObject;     //  狮子吼
  UserMagic: pTUserMagic): Boolean;                                  
var
  PoseBaseObject:TBaseObject;    //   (PlayObject.m_Abil.Level > PoseBaseObject.m_Abil.Level)
begin
  Result:=False;
  PoseBaseObject:=PlayObject.GetPoseCreate;
//  TbaseObject(PlayObject).m_btDirection  :=GetNextDirection(PlayObject.m_nCurrX,PlayObject.m_nCurrY,TargeTBaseObject.m_nCurrX,TargeTBaseObject.m_nCurrY);
  if (PoseBaseObject <> nil) and   (PoseBaseObject <> PlayObject)   and
     (not PoseBaseObject.m_boDeath) and
     (not PoseBaseObject.m_boGhost) and
     (PlayObject.IsProperTarget(PoseBaseObject)) and
     (not PoseBaseObject.m_boStickMode) then begin
    if (abs(PlayObject.m_nCurrX - PoseB

⌨️ 快捷键说明

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