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

📄 objmon.pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 PAS
📖 第 1 页 / 共 5 页
字号:
                        end;
                        nCheckCode:=35;
                      end; //004B9B38
                    end;
                  end; //004B9B38 if OSObject.btType = OS_ITEMOBJECT then begin
             //   end; //m_btRaceServer=202


          ////
            Inc(nIdx);
          end;
        end;
      end;
    end;
  except
    on e: Exception do begin

      MainOutMessage(format(sExceptionMsg2,[n24,m_sCharName,m_sMapName,m_nCurrX,m_nCurrY,nCheckCode]));
      {
      MainOutMessage(m_sCharName + ',' +
                     m_sMapName + ',' +
                     IntToStr(m_nCurrX) + ',' +
                     IntToStr(m_nCurrY) + ',' +
                     ' SearchViewRange 1-' +
                     IntToStr(n24));
      }
      MainOutMessage(E.Message);    raise;
      KickException();
    end;
    
  end;
  nCheckCode:=40;
  n24:=2;
  try
    n18:=0;
    while (True) do begin
      if m_VisibleActors.Count <= n18 then break;
      nCheckCode:=41;
      VisibleBaseObject:=m_VisibleActors.Items[n18];
      nCheckCode:=42;
      if VisibleBaseObject.nVisibleFlag = 0 then begin
        nCheckCode:=43;
        m_VisibleActors.Delete(n18);
        nCheckCode:=48;
        Dispose(VisibleBaseObject);
        nCheckCode:=49;
        Continue;
      end;
      nCheckCode:=50;
      Inc(n18);
    end;
  except
    on e: Exception do begin
      MainOutMessage(format(sExceptionMsg2,[n24,m_sCharName,m_sMapName,m_nCurrX,m_nCurrY,nCheckCode]));
    {MainOutMessage(m_sCharName + ',' +
                   m_sMapName + ',' +
                   IntToStr(m_nCurrX) + ',' +
                   IntToStr(m_nCurrY) + ',' +
                   ' SearchViewRange 2');}
      KickException();
    end;
  end;
end;


procedure TAIMAN.Run; //004A9020
var
  nX,nY,i,count:Integer;
  VisibleMapItem:pTVisibleMapItem;
   MapItem:pTMapItem;
begin
  if not m_boGhost and
     not m_boDeath and
     not m_boFixedHideMode and
     not m_boStoneMode and
     (m_wStatusTimeArr[POISON_STONE{5 0x6A}] = 0) then begin
    if Think then begin
      inherited;
      exit;
    end;
    if m_boWalkWaitLocked then begin
      if (GetTickCount - m_dwWalkWaitTick) > m_dwWalkWait then begin
        m_boWalkWaitLocked:=False;
      end;
    end;
    if not m_boWalkWaitLocked and (Integer(GetTickCount - m_dwWalkTick) > m_nWalkSpeed) then begin
      m_dwWalkTick:=GetTickCount();
      Inc(m_nWalkCount);
      if m_nWalkCount > m_nWalkStep then begin
        m_nWalkCount:=0;
        m_boWalkWaitLocked:=True;
        m_dwWalkWaitTick:=GetTickCount();
      end; //004A9151
      if not m_boRunAwayMode then begin
        if not m_boNoAttackMode then begin
          if m_TargetCret <> nil then begin
            if AttackTarget{FFEB} then begin
              inherited;
              exit;
            end;
          end else begin
            m_nTargetX:=-1;
            if m_boMission then begin
              m_nTargetX:=m_nMissionX;
              m_nTargetY:=m_nMissionY;
            end; //004A91D3
          end;
        end; //004A91D3  if not bo2C0 then begin
        if m_Master <> nil then begin
          if m_TargetCret = nil then begin
            m_Master.GetBackPosition(nX,nY);
            if (abs(m_nTargetX - nX) > 1) or (abs(m_nTargetY - nY{nX}) > 1) then begin //004A922D
              m_nTargetX:=nX;
              m_nTargetY:=nY;
              if (abs(m_nCurrX - nX) <= 2) and (abs(m_nCurrY - nY) <= 2) then begin
                if m_PEnvir.GetMovingObject(nX,nY,True) <> nil then begin
                  m_nTargetX:=m_nCurrX;
                  m_nTargetY:=m_nCurrY;
                end //004A92A5
              end;
            end; //004A92A5
          end; //004A92A5 if m_TargetCret = nil then begin
          if (not m_Master.m_boSlaveRelax) and
             ((m_PEnvir <> m_Master.m_PEnvir) or
             (abs(m_nCurrX-m_Master.m_nCurrX) > 20) or
             (abs(m_nCurrY-m_Master.m_nCurrY) > 20)) then begin
            SpaceMove(m_Master.m_PEnvir.sMapName, m_nTargetX, m_nTargetY, 1);
          end; // 004A937E
        end;// 004A937E if m_Master <> nil then begin
      end else begin //004A9344
        if (m_dwRunAwayTime > 0) and ((GetTickCount - m_dwRunAwayStart) > m_dwRunAwayTime) then begin
          m_boRunAwayMode:=False;
          m_dwRunAwayTime:=0;
        end;
      end; //004A937E
      if (m_Master <> nil) and m_Master.m_boSlaveRelax then begin
        inherited ;
        exit;
      end;  //004A93A6

        if m_VisibleItems.Count=0 then curpos:=0;
         if m_VisibleItems.Count >0 then begin
           if curpos<= m_VisibleItems.Count-1 then   begin
             VisibleMapItem:=m_VisibleItems[curpos];
             m_nTargetX:= VisibleMapItem.nX;
             m_nTargetY:= VisibleMapItem.nY;


            if ( m_nCurrX= VisibleMapItem.nX ) and  ( m_nCurrY= VisibleMapItem.nY )  THEN    begin
               MapItem:=m_PEnvir.GetItem (m_nCurrX,m_nCurrY);
             if (MapItem<>nil) and (m_PEnvir.DeleteFromMap (m_nCurrX,m_nCurrY, OS_ITEMOBJECT, TObject(MapItem))=1) then begin
              SearchViewRange;
               setpcount:=0;
                Dispose(MapItem);
              end
              else begin   //如果检起失败
               inc(curpos); //检下一个   如果超过 就不再检了。
                setpcount:=0;
              // if curpos> m_Master.m_VisibleItems.Count-1 then
              end;

             end  //     m_nCurrX= VisibleMapItem.nX
             else begin           //如果走了10步还不能检取就检下一个
                 inc(setpcount);

                 if setpcount>10 then begin
                   if curpos< m_VisibleItems.Count then   begin
                     inc(curpos);
                 //    MainOutMessage(format('如果走了10步不能检取就检下一个%d 为(%d/%d)',[curpos,VisibleMapItem.nX,VisibleMapItem.nY]));
                     end;
                   setpcount:=0;
                 end;
                end;

           end;  //  curpos<= m_Master.m_VisibleItems.Count-1

          end;




      ////
     if m_nTargetX <> -1 then begin
        GotoTargetXY(); //004A93B5 0FFEF
      end else begin
        if m_TargetCret = nil then Wondering1();// FFEE   //Jacky
      end; //004A93D8
    end; //004A93D8  if not bo510 and ((GetTickCount - m_dwWalkTick) > n4FC) then begin
  end; //004A93D8




  inherited;

end;







///////////////////end aiman
{ TChickenDeer }

constructor TChickenDeer.Create;//004A93E8
begin
  inherited;
  m_nViewRange:=5;
end;

destructor TChickenDeer.Destroy;
begin 
  inherited;
end;

procedure TChickenDeer.Run;//004A9438
var
  I:Integer;
  nC,n10,n14,n1C:Integer;
  BaseObject1C,BaseObject:TBaseObject;
begin
  n10:=9999;
  BaseObject:=nil;
  BaseObject1C:=nil;
  if not m_boDeath and
     not bo554 and
     not m_boGhost and
     (m_wStatusTimeArr[POISON_STONE{5 0x6A}] = 0) then begin
    if Integer(GetTickCount - m_dwWalkTick) >= m_nWalkSpeed then begin
      for I := 0 to m_VisibleActors.Count - 1 do begin
        BaseObject:=TBaseObject(pTVisibleBaseObject(m_VisibleActors.Items[I]).BaseObject);
        if BaseObject.m_boDeath then Continue;
        if IsProperTarget(BaseObject) then begin
          if not BaseObject.m_boHideMode or m_boCoolEye then begin
            nC:=abs(m_nCurrX - BaseObject.m_nCurrX) + abs(m_nCurrY - BaseObject.m_nCurrY);
            if nC < n10 then begin
              n10:=nC;
              BaseObject1C:=BaseObject;
            end;
          end;
        end;
      end;    // for
      if BaseObject1C <> nil then begin
        m_boRunAwayMode:=True;
        m_TargetCret:=BaseObject1C;
      end else begin
        m_boRunAwayMode:=False;
        m_TargetCret:=nil;
      end;
    end;//
    if m_boRunAwayMode and
      (m_TargetCret <> nil) and
      (Integer(GetTickCount - m_dwWalkTick) >= m_nWalkSpeed)then begin
      if (abs(m_nCurrX - BaseObject.m_nCurrX) <= 6) and (abs(m_nCurry - BaseObject.m_nCurry) <= 6) then begin
        n14:=GetNextDirection(m_nCurrX,m_nCurrY,m_TargetCret.m_nCurrX,m_TargetCret.m_nCurrY);
        m_PEnvir.GetNextPosition(m_TargetCret.m_nCurrX,m_TargetCret.m_nCurrY,n14,5,m_nTargetX,m_nTargetY);
      end;
    end;
  end;
  inherited;

end;

{ TATMonster }

constructor TATMonster.Create; //004A9690
begin
  inherited;
  m_dwSearchTime:=Random(1500) + 1500;
end;

destructor TATMonster.Destroy;
begin

  inherited;
end;

procedure TATMonster.Run;//004A9720
begin
  if not m_boDeath and
     not bo554 and
     not m_boGhost and
     (m_wStatusTimeArr[POISON_STONE{5 0x6A}] = 0) then begin

    if ((GetTickCount - m_dwSearchEnemyTick) > 8000) or
       (((GetTickCount - m_dwSearchEnemyTick) > 1000) and ((m_TargetCret = nil)or( (m_TargetCret<>nil)and(m_TargetCret.m_bohastishen) ))) then begin
      m_dwSearchEnemyTick:=GetTickCount();
      SearchTarget();
    end;
  end;
  inherited;
end;

{ TSlowATMonster }

constructor TSlowATMonster.Create;//004A97AC
begin
  inherited;
end;

destructor TSlowATMonster.Destroy;
begin

  inherited;
end;

{ TScorpion }

constructor TScorpion.Create;//004A97F0
begin
  inherited;
  m_boAnimal:=True;
end;

destructor TScorpion.Destroy;
begin

  inherited;
end;

{ TSpitSpider }
constructor TSpitSpider.Create;//004A983C
begin
  inherited;
  m_dwSearchTime:=Random(1500) + 1500;
  m_boAnimal:=True;
  m_boUsePoison:=True;
end;

destructor TSpitSpider.Destroy;
begin

  inherited;
end;

procedure TSpitSpider.SpitAttack(btDir:Byte); //004A98AC
var
  WAbil:pTAbility;
  nC,n10,n14,n18,n1C:Integer;
  BaseObject:TBaseObject;
begin
  m_btDirection:=btDir;
  WAbil:=@m_WAbil;
  n1C:=(Random(SmallInt(HiWord(WAbil.DC) - LoWord(WAbil.DC)) +1) + LoWord(WAbil.DC));
  if n1C <= 0 then exit;
  SendRefMsg(RM_HIT,m_btDirection,m_nCurrX,m_nCurrY,0,'');
  nC:=0;

  while (nC < 5) do begin
    n10:=0;
    while (n10 < 5) do begin
      if g_Config.SpitMap[btDir,nC,n10] = 1 then begin
      {
                     (0, 0, 0, 0, 0),
                     (0, 0, 0, 0, 0),
                     (0, 0, 1, 0, 0),
                     (0, 0, 1, 0, 0)),
      }
        n14:=m_nCurrX - 2 + n10;
        n18:=m_nCurrY - 2 + nC;
        BaseObject:=m_PEnvir.GetMovingObject(n14,n18,True);
        if (BaseObject <> nil) and
           (BaseObject <> Self) and
           (IsProperTarget(BaseObject)) and
           (Random(BaseObject.m_btSpeedPoint) < m_btHitPoint) then begin
          n1C:=BaseObject.GetMagStruckDamage(Self,n1C);
          if n1C > 0 then begin
            BaseObject.StruckDamage(n1C);
            BaseObject.SendDelayMsg(TBaseObject(RM_STRUCK),RM_10101,n1C,m_WAbil.HP,m_WAbil.MaxHP,Integer(Self),'',300);
            if m_boUsePoison then begin
              if (Random(m_btAntiPoison + 20) = 0) then
                BaseObject.MakePosion(POISON_DECHEALTH,30,1);
              //if Random(2) = 0 then
              //  BaseObject.MakePosion(POISON_STONE,5,1);
            end;
          end;
        end;
      end;


      Inc(n10);
      {
      if n10 >= 5 then break;
      }
    end;
    Inc(nC);
    //if nC >= 5 then break;
  end;    // while

end;
function TSpitSpider.AttackTarget: Boolean;
var
  btDir:Byte;
begin
  Result:=False;
  if m_TargetCret = nil then exit;
  if TargetInSpitRange(m_TargetCret,btDir) then begin
    if Integer(GetTickCount - m_dwHitTick) > m_nNextHitTime then begin
      m_dwHitTick:=GetTickCount();
      m_dwTargetFocusTick:=GetTickCount();
      SpitAttack(btDir);
      BreakHolySeizeMode();
    end;
    Result:=True;
    exit;
  end;
  if m_TargetCret.m_PEnvir = m_PEnvir then begin
    SetTargetXY(m_TargetCret.m_nCurrX,m_TargetCret.m_nCurrY);
  end else begin
    DelTargetCreat();
  end;
    
end;

{ THighRiskSpider }

⌨️ 快捷键说明

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