亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? objhero.pas

?? FIR引擎最新源碼+注冊
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
      m_sCharName + #9 +
      '0' + #9 +
      '0' + #9 +
      '1' + #9 +
      '0'); }
    IncHealthSpell(2000, 2000);
  end;
end;

function THeroObject.RunToTargetXY(nTargetX, nTargetY: Integer): Boolean;
var
  nDir: Integer;
  n10: Integer;
  n14: Integer;
begin
  Result := False;
  n10 := nTargetX;
  n14 := nTargetY;
  dwTick3F4 := GetTickCount();
  nDir := DR_DOWN;
  if n10 > m_nCurrX then begin
    nDir := DR_RIGHT;
    if n14 > m_nCurrY then nDir := DR_DOWNRIGHT;
    if n14 < m_nCurrY then nDir := DR_UPRIGHT;
  end else begin
    if n10 < m_nCurrX then begin
      nDir := DR_LEFT;
      if n14 > m_nCurrY then nDir := DR_DOWNLEFT;
      if n14 < m_nCurrY then nDir := DR_UPLEFT;
    end else begin
      if n14 > m_nCurrY then nDir := DR_DOWN
      else if n14 < m_nCurrY then nDir := DR_UP;
    end;
  end;
  if not RunTo(nDir, False, nTargetX, nTargetY) then begin
    Result := WalkToTargetXY(nTargetX, nTargetY);
  end else begin
    if (abs(nTargetX - m_nCurrX) <= 1) and (abs(nTargetY - m_nCurrY) <= 1) then begin
      Result := True;
    end;
  end;
end;

function THeroObject.WalkToTargetXY(nTargetX, nTargetY: Integer): Boolean;
var
  I: Integer;
  nDir: Integer;
  n10: Integer;
  n14: Integer;
  n20: Integer;
  nOldX: Integer;
  nOldY: Integer;
  n16: Integer;
begin
  Result := False;
  if (abs(nTargetX - m_nCurrX) > 1) or (abs(nTargetY - m_nCurrY) > 1) then begin
    n10 := nTargetX;
    n14 := nTargetY;
    dwTick3F4 := GetTickCount();
    nDir := DR_DOWN;
    if n10 > m_nCurrX then begin
      nDir := DR_RIGHT;
      if n14 > m_nCurrY then nDir := DR_DOWNRIGHT;
      if n14 < m_nCurrY then nDir := DR_UPRIGHT;
    end else begin
      if n10 < m_nCurrX then begin
        nDir := DR_LEFT;
        if n14 > m_nCurrY then nDir := DR_DOWNLEFT;
        if n14 < m_nCurrY then nDir := DR_UPLEFT;
      end else begin
        if n14 > m_nCurrY then nDir := DR_DOWN
        else if n14 < m_nCurrY then nDir := DR_UP;
      end;
    end;
    nOldX := m_nCurrX;
    nOldY := m_nCurrY;
    WalkTo(nDir, False);
    if (abs(nTargetX - m_nCurrX) <= 1) and (abs(nTargetY - m_nCurrY) <= 1) then Result := True;
    if not Result then begin
      n20 := Random(3);
      for I := DR_UP to DR_UPLEFT do begin
        if (nOldX = m_nCurrX) and (nOldY = m_nCurrY) then begin
          if n20 <> 0 then Inc(nDir)
          else if nDir > 0 then Dec(nDir)
          else nDir := DR_UPLEFT;
          if (nDir > DR_UPLEFT) then nDir := DR_UP;
          WalkTo(nDir, False);
          if (abs(nTargetX - m_nCurrX) <= 1) and (abs(nTargetY - m_nCurrY) <= 1) then begin
            Result := True;
            Break;
          end;
        end;
      end;
    end;
  end;
end;

function THeroObject.WalkToTargetXY2(nTargetX, nTargetY: Integer): Boolean;
var
  I: Integer;
  nDir: Integer;
  n10: Integer;
  n14: Integer;
  n20: Integer;
  nOldX: Integer;
  nOldY: Integer;
  n16: Integer;
begin
  Result := False;
  if (nTargetX <> m_nCurrX) or (nTargetY <> m_nCurrY) then begin
    n10 := nTargetX;
    n14 := nTargetY;
    dwTick3F4 := GetTickCount();
    nDir := DR_DOWN;
    if n10 > m_nCurrX then begin
      nDir := DR_RIGHT;
      if n14 > m_nCurrY then nDir := DR_DOWNRIGHT;
      if n14 < m_nCurrY then nDir := DR_UPRIGHT;
    end else begin
      if n10 < m_nCurrX then begin
        nDir := DR_LEFT;
        if n14 > m_nCurrY then nDir := DR_DOWNLEFT;
        if n14 < m_nCurrY then nDir := DR_UPLEFT;
      end else begin
        if n14 > m_nCurrY then nDir := DR_DOWN
        else if n14 < m_nCurrY then nDir := DR_UP;
      end;
    end;
    nOldX := m_nCurrX;
    nOldY := m_nCurrY;
    WalkTo(nDir, False);
    if (nTargetX = m_nCurrX) and (nTargetY = m_nCurrY) then Result := True;
    if not Result then begin
      n20 := Random(3);
      for I := DR_UP to DR_UPLEFT do begin
        if (nOldX = m_nCurrX) and (nOldY = m_nCurrY) then begin
          if n20 <> 0 then Inc(nDir)
          else if nDir > 0 then Dec(nDir)
          else nDir := DR_UPLEFT;
          if (nDir > DR_UPLEFT) then nDir := DR_UP;
          WalkTo(nDir, False);
          if (nTargetX = m_nCurrX) and (nTargetY = m_nCurrY) then begin
            Result := True;
            Break;
          end;
        end;
      end;
    end;
  end;
end;

function THeroObject.GotoTargetXY(nTargetX, nTargetY: Integer): Boolean;
begin
  if (abs(m_nCurrX - nTargetX) >= 3) or (abs(m_nCurrY - nTargetY) >= 3) then begin
    Result := RunToTargetXY(nTargetX, nTargetY);
  end else begin
    Result := WalkToTargetXY2(nTargetX, nTargetY);
  end;
end;

function THeroObject.Operate(ProcessMsg: pTProcessMessage): Boolean;
begin
  //  Result:=False;
  case ProcessMsg.wIdent of
    RM_STRUCK: begin
        if (ProcessMsg.BaseObject = Self) and (TBaseObject(ProcessMsg.nParam3 {AttackBaseObject}) <> nil) then begin
          SetLastHiter(TBaseObject(ProcessMsg.nParam3 {AttackBaseObject}));
          Struck(TBaseObject(ProcessMsg.nParam3 {AttackBaseObject})); {0FFEC}
          BreakHolySeizeMode();
          if (m_Master <> nil) and
            (TBaseObject(ProcessMsg.nParam3) <> m_Master) and
            (TBaseObject(ProcessMsg.nParam3).m_btRaceServer = RC_PLAYOBJECT) then begin
            m_Master.SetPKFlag(TBaseObject(ProcessMsg.nParam3));
          end;
          if g_Config.boMonSayMsg then MonsterSayMsg(TBaseObject(ProcessMsg.nParam3), s_UnderFire);
        end;
        Result := True;
      end;
  else begin
      Result := inherited Operate(ProcessMsg);
    end;
  end;
end;

function THeroObject.CompareHP(BaseObject1, BaseObject2: TBaseObject): Boolean;
var
  HP1, HP2: Integer;
begin
  HP1 := BaseObject1.m_WAbil.HP * 100 div BaseObject1.m_WAbil.MaxHP;
  HP2 := BaseObject2.m_WAbil.HP * 100 div BaseObject2.m_WAbil.MaxHP;
  Result := HP1 > HP2;
end;
function THeroObject.CompareLevel(BaseObject1, BaseObject2: TBaseObject): Boolean;
begin
  Result := BaseObject1.m_WAbil.Level < BaseObject2.m_WAbil.Level;
end;
function THeroObject.CompareXY(BaseObject1, BaseObject2: TBaseObject): Boolean;
var
  nXY1, nXY2: Integer;
begin
  nXY1 := abs(BaseObject1.m_nCurrX - m_nCurrX) + abs(BaseObject1.m_nCurrY - m_nCurrY);
  nXY2 := abs(BaseObject2.m_nCurrX - m_nCurrX) + abs(BaseObject2.m_nCurrY - m_nCurrY);
  Result := nXY1 > nXY2;
end;

procedure THeroObject.Struck(hiter: TBaseObject);
var
  btDir: Byte;
begin
  if not m_boTarget then begin
    m_dwStruckTick := GetTickCount;
    if hiter <> nil then begin
      if (m_TargetCret = nil) or GetAttackDir(m_TargetCret, btDir) or (Random(6) = 0) then begin
        if IsProperTarget(hiter) then
          SetTargetCreat(hiter);
      end;
    end;
    if m_boAnimal then begin
      m_nMeatQuality := m_nMeatQuality - Random(300);
      if m_nMeatQuality < 0 then m_nMeatQuality := 0;
    end;
  end;
  m_dwHitTick := m_dwHitTick + LongWord(150 - _MIN(130, m_Abil.Level * 4));
end;

procedure THeroObject.Attack(TargeTBaseObject: TBaseObject; nDir: Integer);
begin
  inherited AttackDir(TargeTBaseObject, m_wHitMode, nDir);
end;

procedure THeroObject.DelTargetCreat;
begin
  inherited;
  m_nTargetX := -1;
  m_nTargetY := -1;
end;

procedure THeroObject.SearchTarget;
var
  BaseObject, BaseObject18: TBaseObject;
  I, nC, n10: Integer;
begin
  if (m_TargetCret = nil) and m_boTarget then m_boTarget := False;
  if (m_TargetCret <> nil) and m_TargetCret.m_boDeath and m_boTarget then m_boTarget := False;
  if (m_btStatus = 1) and not m_boProtectStatus and not m_boTarget then begin
    BaseObject18 := nil;
    n10 := 9999;
    for I := 0 to m_VisibleActors.Count - 1 do begin
      BaseObject := TBaseObject(pTVisibleBaseObject(m_VisibleActors.Items[I]).BaseObject);
      if BaseObject <> nil then begin
        if not BaseObject.m_boDeath then begin
          if IsProperTarget(BaseObject) and
            (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;
              BaseObject18 := BaseObject;
            end;
          end;
        end;
      end;
    end;
    if BaseObject18 <> nil then begin
      SetTargetCreat(BaseObject18);
      {if (m_TargetCret <> nil) and (m_TargetCret.m_boDeath) then m_TargetCret := nil;
      if m_TargetCret <> nil then begin
        if CompareHP(m_TargetCret, BaseObject18) and CompareLevel(m_TargetCret, BaseObject18) and CompareXY(m_TargetCret, BaseObject18) then begin
          SetTargetCreat(BaseObject18);
        end;
      end else SetTargetCreat(BaseObject18); }
    end;
  end;
end;

procedure THeroObject.SetTargetXY(nX, nY: Integer);
begin
  m_nTargetX := nX;
  m_nTargetY := nY;
end;

procedure THeroObject.Wondering;
begin
  if (Random(10) = 0) then
    if (Random(4) = 1) then TurnTo(Random(8))
    else WalkTo(m_btDirection, False);
end;

function THeroObject.IsAllowUseMagic(wMagIdx: Word): Boolean;
var
  UserMagic: pTUserMagic;
begin
  Result := False;
  UserMagic := CheckUserMagic(wMagIdx);
  if UserMagic <> nil then begin
    if GetSpellPoint(UserMagic) < m_WAbil.MP then Result := True;
  end;
end;

function THeroObject.SelectMagic(): Integer;
var
  wHitMode: Word;
  UserMagic: pTUserMagic;
begin
  Result := 0;
  case m_btJob of
    0: begin //戰士
        if IsAllowUseMagic(26) and (not m_boFireHitSkill) and ((GetTickCount - m_dwLatestFireHitTick) > 10 * 1000) then begin {烈火}
          AllowFireHitSkill;
          Result := 26;
          Exit;
        end;
        if CheckTargetXYCount(m_nCurrX, m_nCurrY, 2) >= 4 then begin //被怪物包圍
          if IsAllowUseMagic(41) and (GetTickCount - m_SkillUseTick[41] > 1000 * 10) then begin
            m_SkillUseTick[41] := GetTickCount; //獅子吼
            Result := 41;
            Exit;
          end else
            if IsAllowUseMagic(39) and (GetTickCount - m_SkillUseTick[39] > 1000 * 10) then begin
            m_SkillUseTick[39] := GetTickCount; //英雄徹地釘
            Result := 39;
            Exit;
          end else
            if IsAllowUseMagic(40) then begin //英雄抱月刀法
            if not m_boCrsHitkill then begin
              SkillCrsOnOff(True);
            end;
            Result := 40;
            Exit;
          end else begin
            if (m_wLastHP - m_WAbil.HP) > (m_WAbil.MaxHP div 5) then begin
              if IsAllowUseMagic(12) then begin //英雄刺殺劍術
                if not m_boUseThrusting then begin
                  ThrustingOnOff(True);
                end;
                Result := 12;
              end else
                if IsAllowUseMagic(25) then begin
                if not m_boUseHalfMoon then begin
                  HalfMoonOnOff(True);
                end;
                Result := 25;
              end else
                if IsAllowUseMagic(40) then begin //英雄抱月刀法
                if not m_boCrsHitkill then begin
                  SkillCrsOnOff(True);
                end;
                Result := 40;
              end else
                if IsAllowUseMagic(39) and (GetTickCount - m_SkillUseTick[39] > 1000 * 10) then begin
                m_SkillUseTick[39] := GetTickCount; //英雄徹地釘
                Result := 39;
                Exit;
              end;
              m_wLastHP := m_WAbil.HP;
       

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品在线一区二区三区| 成人一区二区三区视频| 久久精品亚洲一区二区三区浴池| 97精品国产97久久久久久久久久久久| 日韩黄色免费电影| 亚洲国产wwwccc36天堂| 亚洲美女电影在线| 亚洲欧美影音先锋| 亚洲三级免费观看| 亚洲一区二区三区视频在线播放 | 亚洲成va人在线观看| 国产传媒欧美日韩成人| 93久久精品日日躁夜夜躁欧美| 欧美日韩免费不卡视频一区二区三区| 一区二区三区在线影院| 精品久久人人做人人爰| 国产suv精品一区二区6| 一区二区成人在线| www.激情成人| 91精品婷婷国产综合久久竹菊| 久久久久久日产精品| 久久se精品一区精品二区| 4438x亚洲最大成人网| 一区二区三区产品免费精品久久75| 国产伦精品一区二区三区在线观看| 欧美一区二区三区视频在线观看 | 97se亚洲国产综合自在线 | 高清日韩电视剧大全免费| 91麻豆精品国产综合久久久久久| 欧美日韩国产首页| 一区二区三区美女| 在线视频欧美区| 亚洲h精品动漫在线观看| 在线视频综合导航| 亚洲一区二区综合| 欧美高清www午色夜在线视频| 午夜精品免费在线观看| 欧美日韩aaaaaa| 美女视频黄a大片欧美| 2020国产精品久久精品美国| 久久91精品久久久久久秒播| 欧美xxxx老人做受| 国产成人av网站| 国产精品成人一区二区三区夜夜夜| 成人18视频在线播放| 一区二区成人在线| 91精品国产综合久久婷婷香蕉| 久久综合综合久久综合| 国产视频一区二区三区在线观看| 成人精品高清在线| 一区二区国产视频| 欧美成人官网二区| 国产aⅴ综合色| 亚洲欧美色一区| 在线播放中文一区| 国产福利视频一区二区三区| 最近日韩中文字幕| 欧美一级艳片视频免费观看| 国产酒店精品激情| 亚洲一区二区精品视频| 精品黑人一区二区三区久久 | 一区二区三区91| 日韩亚洲欧美一区二区三区| 国产成人在线免费| 一区二区三区四区高清精品免费观看| 9191成人精品久久| 成人h版在线观看| 日韩在线一区二区三区| 久久久久久久久久久久久女国产乱| 色哦色哦哦色天天综合| 美洲天堂一区二卡三卡四卡视频 | 丁香一区二区三区| 亚洲自拍偷拍欧美| 国产欧美va欧美不卡在线| 欧美影院一区二区| 国模娜娜一区二区三区| 亚洲欧美电影一区二区| 久久影院午夜论| 欧美色网站导航| 成人免费毛片app| 午夜不卡在线视频| 日韩一区日韩二区| 精品第一国产综合精品aⅴ| 91福利在线免费观看| 国产伦精品一区二区三区免费迷| 亚洲一区二区三区免费视频| 国产婷婷一区二区| 精品久久人人做人人爽| 欧美久久一二区| 色婷婷久久99综合精品jk白丝| 狠狠色丁香婷综合久久| 青娱乐精品视频| 一区二区三区日韩| 国产精品久久久久一区二区三区| 日韩视频在线你懂得| 在线看不卡av| 色综合中文字幕| 成人免费视频国产在线观看| 国产一区二区三区免费观看| 日韩avvvv在线播放| 夜夜精品浪潮av一区二区三区| 国产精品亲子伦对白| 久久久久国色av免费看影院| 日韩精品中文字幕一区二区三区 | 国产精品亚洲成人| 美洲天堂一区二卡三卡四卡视频| 亚洲福利电影网| 一区二区三区在线观看动漫| 自拍偷自拍亚洲精品播放| 中文字幕在线观看不卡| 国产欧美日韩亚州综合 | 一区二区三区日韩精品视频| 国产精品美女久久久久久久久| 久久精品一区二区三区不卡| ww亚洲ww在线观看国产| 精品少妇一区二区三区日产乱码| 91精品欧美一区二区三区综合在 | 国产69精品久久久久毛片| 国产精品一级片| 国产成人精品综合在线观看 | 亚洲一二三四区不卡| 一区二区三区电影在线播| 一区二区三区蜜桃网| 一卡二卡欧美日韩| 日韩二区在线观看| 精品一区二区免费| 国产成人免费视频网站| 成人av片在线观看| 日本高清免费不卡视频| 欧美日韩综合在线| 91精品国产品国语在线不卡| 欧美v日韩v国产v| 国产欧美精品一区二区三区四区| 国产精品色眯眯| 亚洲一区二区综合| 精品一区二区三区视频| 成人免费观看视频| 欧美性猛交xxxx乱大交退制版| 制服丝袜一区二区三区| 久久久久久久久久久黄色| 日韩一区在线播放| 亚洲成a人片综合在线| 紧缚奴在线一区二区三区| 成人午夜免费电影| 欧美日韩电影一区| 久久精品无码一区二区三区| 一区免费观看视频| 日韩中文字幕一区二区三区| 美腿丝袜亚洲综合| 久久久久久电影| 开心九九激情九九欧美日韩精美视频电影 | 亚洲综合色网站| 久久精品国产99久久6| av中文字幕一区| 日韩精品影音先锋| 国产精品久久久久久福利一牛影视| 一区二区三区国产精华| 国产成人精品影院| 91麻豆精品国产91久久久使用方法 | 国产亚洲成年网址在线观看| 一区二区视频免费在线观看| 国产在线一区二区| 欧美性高清videossexo| 国产婷婷色一区二区三区| 亚洲18色成人| 91视视频在线观看入口直接观看www| 欧美一二三区在线| 一区二区三区四区蜜桃| 粉嫩蜜臀av国产精品网站| 日韩一区二区三免费高清| |精品福利一区二区三区| www.成人在线| 亚洲国产精品综合小说图片区| 这里只有精品电影| 成人午夜看片网址| 久久国产视频网| 一区二区久久久久| 国产日韩高清在线| 欧美一区二区在线免费播放| 成人激情小说乱人伦| 蜜桃av一区二区三区电影| 国产精品久久三| 欧美激情自拍偷拍| 一本大道av伊人久久综合| 日韩高清中文字幕一区| 久久精品欧美一区二区三区不卡 | 亚洲精品久久久蜜桃| 国产午夜精品美女毛片视频| 欧美日韩成人综合天天影院| 色999日韩国产欧美一区二区| 亚洲视频小说图片| 欧美久久久久中文字幕| 亚洲高清免费视频| 日本一区二区三级电影在线观看| 日韩在线一区二区| 欧美视频三区在线播放| 亚洲女人****多毛耸耸8| 成人av中文字幕| 国产精品狼人久久影院观看方式| 国产精品一区在线观看乱码 |