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

📄 objmon2.pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    Result:=True;
    exit;
  end;
  if m_TargetCret.m_PEnvir = m_PEnvir then begin
    SetTargetXY(m_TargetCret.m_nCurrX,m_TargetCret.m_nCurrY); {0FFF0h}
  end else begin
    DelTargetCreat();{0FFF1h}
  end;
end;

procedure TAXEHIDEMonster.sub_FFE9();
begin
  m_boFixedHideMode:=False;
  SendRefMsg(RM_DIGUP,m_btDirection,m_nCurrX,m_nCurrY,0,'');
end;
procedure TAXEHIDEMonster.VisbleActors();//004A53E4
var
  I:Integer;
ResourceString
  sExceptionMsg = '[Exception] TStickMonster::VisbleActors Dispose';
begin
  SendRefMsg(RM_DIGDOWN,m_btDirection,m_nCurrX,m_nCurrY,0,'');
  try
    for I := 0 to m_VisibleActors.Count - 1 do begin
      Dispose(pTVisibleBaseObject(m_VisibleActors.Items[I]));
    end;
    m_VisibleActors.Clear;
  except
    MainOutMessage(sExceptionMsg);
  end;
  m_boFixedHideMode:=True;
end;
procedure TAXEHIDEMonster.sub_FFEA();//004A53E4
var
  I:Integer;
  BaseObject:TBaseObject;
begin
//  m_VisibleActors.Items[I].
  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
        if (abs(m_nCurrX - BaseObject.m_nCurrX) < n554) and (abs(m_nCurrY - BaseObject.m_nCurrY) < n554) then begin
          sub_FFE9();
          break;
        end;
      end;
    end;
  end;    // for
end;

function TAXEHIDEMonster.Operate(ProcessMsg: pTProcessMessage):Boolean;
begin
  Result:=inherited Operate(ProcessMsg);
end;

procedure TAXEHIDEMonster.Run;//004A5614
var
  bo05:Boolean;
begin
  if not m_boGhost and
     not m_boDeath 
    and(m_wStatusTimeArr[POISON_STONE] = 0)  then begin      {5 0x6A }
    if Integer(GetTickCount - m_dwWalkTick) > m_nWalkSpeed then begin
      m_dwWalkTick:=GetTickCount();
      if m_boFixedHideMode then begin
        sub_FFEA();
      end else begin
        if Integer(GetTickCount - m_dwHitTick) > m_nNextHitTime then begin
          SearchTarget();
        end;
        bo05:=False;
        if m_TargetCret <> nil then begin
          if (abs(m_TargetCret.m_nCurrX - m_nCurrX) > n558) or
             (abs(m_TargetCret.m_nCurrY - m_nCurrY) > n558) then begin
            bo05:=True;
          end;
        end else bo05:=True;
        if bo05 then begin
          VisbleActors();
        end else begin
          if AttackTarget then begin
            inherited;
            exit;
          end;
        end;
      end;
    end;
  end;
  inherited;
end;



{ TSoccerBall }

constructor TSoccerBall.Create;//004A764C
begin
  inherited;
  m_boAnimal:=False;
  m_boSuperMan:=True;
  n550:=0;
  m_nTargetX:= -1;
end;

destructor TSoccerBall.Destroy;
begin

  inherited;
end;



procedure TSoccerBall.Run;
var
  n08,n0C:Integer;
  bo0D:Boolean;
begin
  if n550 > 0 then begin
    if m_PEnvir.GetNextPosition(m_nCurrX,m_nCurrY,m_btDirection,1,n08,n0C) then begin
      if m_PEnvir.CanWalk(n08,n0C,bo0D) then begin
        case m_btDirection of    //
          0: m_btDirection:=4;
          1: m_btDirection:=7;
          2: m_btDirection:=6;
          3: m_btDirection:=5;
          4: m_btDirection:=0;
          5: m_btDirection:=3;
          6: m_btDirection:=2;
          7: m_btDirection:=1;
        end;    // case
        m_PEnvir.GetNextPosition(m_nCurrX,m_nCurrY,m_btDirection,n550,m_nTargetX,m_nTargetY)
      end;
    end;
  end else begin//004A78A1
    m_nTargetX:= -1;
  end;
  if m_nTargetX <> -1 then begin
    GotoTargetXY();
    if (m_nTargetX = m_nCurrX) and (m_nTargetY = m_nCurrY) then
      n550:=0;
  end;
    
  inherited;

end;

procedure TSoccerBall.Struck(hiter: TBaseObject);
begin
  if hiter = nil then exit;
  m_btDirection:=hiter.m_btDirection;
  n550:=Random(4) + (n550 + 4);
  n550:=_MIN(20,n550);
  m_PEnvir.GetNextPosition(m_nCurrX,m_nCurrY,m_btDirection,n550,m_nTargetX,m_nTargetY);
end;

{ TBeeQueen }

constructor TBeeQueen.Create;//004A5750
begin
  inherited;
  m_nViewRange:=9;
  m_nRunTime:=250;
  m_dwSearchTime:=Random(1500) + 2500;
  m_dwSearchTick:=GetTickCount();
  m_boStickMode:=True;
  BBList:=TList.Create;
end;

destructor TBeeQueen.Destroy;//004A57F0
begin
  BBList.Free;
  inherited;
end;

procedure TBeeQueen.MakeChildBee;
begin
  if BBList.Count >= 15 then exit;
  SendRefMsg(RM_HIT,m_btDirection,m_nCurrX,m_nCurrY,0,'');
  SendDelayMsg(Self,RM_ZEN_BEE,0,0,0,0,'',500);  
end;

function TBeeQueen.Operate(ProcessMsg:pTProcessMessage):Boolean;
var
  BB:TBaseObject;
begin
  if ProcessMsg.wIdent = RM_ZEN_BEE then begin
    BB:=UserEngine.RegenMonsterByName(m_PEnvir.sMapName,m_nCurrX,m_nCurrY,g_Config.sBee);
    if BB <> nil then begin
      BB.SetTargetCreat(m_TargetCret);
      BBList.Add(BB);
    end;
  end;
  Result:=inherited Operate(ProcessMsg);
end;

procedure TBeeQueen.Run;
var
  I: Integer;
  BB:TBaseObject;
begin
  if not m_boGhost and
     not m_boDeath and
     (m_wStatusTimeArr[POISON_STONE{5 0x6A}] = 0) then begin
    if Integer(GetTickCount - m_dwWalkTick) >= m_nWalkSpeed then begin
      m_dwWalkTick:=GetTickCount();
      if Integer(GetTickCount - m_dwHitTick) >= m_nNextHitTime then begin
        m_dwHitTick:=GetTickCount();
        SearchTarget();
        if m_TargetCret <> nil then MakeChildBee();
      end;
      for I := BBList.Count -1 downto 0 do begin
        BB:=TBaseObject(BBList.Items[I]);
        if BB.m_boDeath or (BB.m_boGhost) then BBList.Delete(I);
      end;
    end;
  end;
  inherited;
end;

//////
constructor TSeeBeeQueen.Create;//004A5750
begin
  inherited;
  m_nViewRange:=9;
  m_nRunTime:=250;
  m_dwSearchTime:=Random(1500) + 2500;
  m_dwSearchTick:=GetTickCount();
  m_boStickMode:=True;
  BBList:=TList.Create;
end;

destructor TSeeBeeQueen.Destroy;//004A57F0
begin
  BBList.Free;
  inherited;
end;

procedure TSeeBeeQueen.MakeChildBee;
begin
  if BBList.Count >= 15 then exit;
  SendRefMsg(RM_HIT,m_btDirection,m_nCurrX,m_nCurrY,0,'');
  SendDelayMsg(Self,RM_ZEN_BEE,0,0,0,0,'',500);  
end;

function TSeeBeeQueen.Operate(ProcessMsg:pTProcessMessage):Boolean;
var
  BB:TBaseObject;
  seebee:string;
  nsee:byte;
begin
  if ProcessMsg.wIdent = RM_ZEN_BEE then begin
    nsee:=random(3);
    case nsee of
    0,1:seebee:= g_Config.sSeeBee1;
    2:seebee:= g_Config.sSeeBee2;
    3:seebee:= g_Config.sSeeBee3;
    end;
    BB:=UserEngine.RegenMonsterByName(m_PEnvir.sMapName,m_nCurrX,m_nCurrY, SeeBee);
    if BB <> nil then begin
      BB.SetTargetCreat(m_TargetCret);
      BBList.Add(BB);
    end;
  end;
  Result:=inherited Operate(ProcessMsg);
end;

procedure TSeeBeeQueen.Run;
var
  I: Integer;
  BB:TBaseObject;
begin
  if not m_boGhost and
     not m_boDeath and
     (m_wStatusTimeArr[POISON_STONE{5 0x6A}] = 0) then begin
    if Integer(GetTickCount - m_dwWalkTick) >= m_nWalkSpeed then begin
      m_dwWalkTick:=GetTickCount();
      if Integer(GetTickCount - m_dwHitTick) >= m_nNextHitTime then begin
        m_dwHitTick:=GetTickCount();
        SearchTarget();
        if m_TargetCret <> nil then MakeChildBee();
      end;
      for I := BBList.Count -1 downto 0 do begin
        BB:=TBaseObject(BBList.Items[I]);
        if BB.m_boDeath or (BB.m_boGhost) then BBList.Delete(I);
      end;
    end;
  end;
  inherited;
end;

{ TCentipedeKingMonster }



constructor TCentipedeKingMonster.Create;//004A5A8C
begin
  inherited;
  m_nViewRange:=6;
  n554:=4;
  n558:=6;
  m_boAnimal:=False;
  m_dwAttickTick:=GetTickCount();
  m_boBOSS:=true;
end;

destructor TCentipedeKingMonster.Destroy;
begin

  inherited;
end;
function TCentipedeKingMonster.sub_4A5B0C: Boolean;
var
  I:Integer;
  BaseObject:TBaseObject;
begin
  Result:=False;
  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 (abs(m_nCurrX - BaseObject.m_nCurrX) <= m_nViewRange) and (abs(m_nCurrY - BaseObject.m_nCurrY) <= m_nViewRange) then begin
        Result:=True;
        break;
      end;
    end;
  end;
end;

function TCentipedeKingMonster.AttackTarget: Boolean; //004A5BC0
var
  WAbil:pTAbility;
  nPower,I:Integer;
  BaseObject:TBaseObject;
begin
  Result:=False;
  if not sub_4A5B0C then begin
    exit;
  end;
  if Integer(GetTickCount - m_dwHitTick) > m_nNextHitTime then begin
    m_dwHitTick:=GetTickCount();
    SendAttackMsg(RM_HIT,m_btDirection,m_nCurrX,m_nCurrY,0);
    WAbil:=@m_WAbil;
    nPower:=(Random(SmallInt(HiWord(WAbil.DC) - LoWord(WAbil.DC)) +1) + LoWord(WAbil.DC));
    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 (abs(m_nCurrX - BaseObject.m_nCurrX) < m_nViewRange) and (abs(m_nCurrY - BaseObject.m_nCurrY) < m_nViewRange) then begin
          m_dwTargetFocusTick:=GetTickCount();
          SendDelayMsg(Self,RM_DELAYMAGIC,nPower,MakeLong(BaseObject.m_nCurrX,BaseObject.m_nCurrY),2,Integer(BaseObject),'',600);
          if Random(4) = 0 then begin
            if Random(3) <> 0 then begin
              BaseObject.MakePosion(POISON_DECHEALTH,60,3);
            end else begin
              BaseObject.MakePosion(POISON_STONE,5,0);
            end;
            m_TargetCret:=BaseObject;
          end;
        end;
      end;
    end;    // for
  end;
  Result:=True;
end;

procedure TCentipedeKingMonster.sub_FFE9;
begin
  inherited;
  m_WAbil.HP:=m_WAbil.MaxHP;
end;

procedure TCentipedeKingMonster.Run;
var
  I:Integer;
  BaseObject:TBaseObject;
begin
  if not m_boGhost and
     not m_boDeath and
     (m_wStatusTimeArr[POISON_STONE{5 0x6A}] = 0) then begin
    if Integer(GetTickCount - m_dwWalkTick) > m_nWalkSpeed then begin
      m_dwWalkTick:=GetTickCount();
      if m_boFixedHideMode then begin
        if (GetTickCount - m_dwAttickTick) > 10000 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
                if (abs(m_nCurrX - BaseObject.m_nCurrX) < n554) and (abs(m_nCurrY - BaseObject.m_nCurrY) < n554) then begin
                  sub_FFE9();
                  m_dwAttickTick:=GetTickCount();
                  break;
                end;
              end;
            end;
          end;
        end;//004A5F86
      end else begin
        if (GetTickCount - m_dwAttickTick) > 3000 then begin
          if AttackTarget() then begin
            inherited;
            exit;
          end;
          if (GetTickCount - m_dwAttickTick) > 10000 then begin
            VisbleActors();
            m_dwAttickTick:=GetTickCount();
          end;
        end;
      end;
    end;
  end;
  inherited;
end;


{ TBigHeartMonster }


constructor TBigHeartMonster.Create;//004A5F94
begin
  inherited;
  m_nViewRange:=16;
  m_boAnimal:=False;
end;

⌨️ 快捷键说明

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