UO Odyssey 维基
Advertisement
UO Odyssey 维基
2,021
個頁面
TEnado戰鬥輔助

tEnado戰鬥輔助腳本是由 tEnado 為 Ultima Online 遊戲編寫方便玩家在遊戲中戰鬥與掠奪資源的 EUO 腳本,雖然並非為 ODY 所撰寫有部分功能在 ODY 無法使用,但卻已大幅提升遊戲便利性。

此處所提供的是由 GeniusKiKi 繁體中文化的版本。

腳本特點[ | ]

  • 通過t_WaitForAction副程式,將UO中動作之間的間隔時間做了精準的計算,以達到極低延遲的效果。
  • 有美觀的界面進行設置,可將設置保存到註冊表。
  • 每個功能都比同類型腳本更加流暢好用。

t_WaitForAction副程式的運作機制[ | ]

UO遊戲機制[ | ]

在了解t_WaitForAction副程式之前需要了解UO遊戲的機制。 UO中有多種動作類別,包括魔法、技能、繃帶、獸醫和其他等,每個類別的動作在結束後都會有一個時間間隔(恢復時間),每個動作類別的恢復時間是不同的。比如在你施放一個法術後需要等待N秒你才能執行其他動作,這個N秒就是法術的恢復時間,這個時間受到人物屬性、技能和裝備的影響。所以能精準的計算出這個N秒就是提高練技能效率、PVP的關鍵。 不僅每個類別動作到下一個類別動作的恢復時間不同,同一類別中不同動作到下一動作的恢復時間也不同。比如第一個動作為吹箭,下一個動作為繃帶自己,中間的恢復時間為N秒; 第一個動作為火號角,下一個動作為繃帶自己,中間的恢復時間就可能是M秒,和吹箭的不同。然後吹箭有冷卻時間,火號角也有冷卻時間,各個法術各個技能的冷卻時間都不同。所以t_WaitForAction副程式的設計目的就是計算各個動作執行後的恢復時間和冷卻時間。這也是為什麼我的戰鬥支持腳本運行流暢的關鍵。

t_WaitForAction副程式設計思路

在t_WaitForAction副程式中將UO遊戲的動作分成了魔法、技能、繃帶、獸醫和其他5個類別。每次角色執行一個動作就記錄該動作的類別。在動作結束時就會根據動作的類別計算出恢復時間和冷卻時間保證下次動作能順利執行。 具體思路忘記了,自己寫的注釋也看不懂了,有興趣的朋友再研究研究吧。(腳本作者tEnado於20220520編輯)

特別注意[ | ]

  • 停止腳本請點擊面板上的關閉按鈕,這樣才能保存設定。
  • 獲取獸醫 ID:勾選獸醫功能後下馬就能獲取,但面板上不會馬上顯示,下次啟動腳本後會顯示。

看更多[ | ]

連結[ | ]

; ===================================================================== ;
; Script Name: tEnado 戰鬥輔助
; Author: tEnado ( D站主ID:ByeWind,網名:與風訣別 )
; Version: 2.7
; Revision Date: 2013.02.03
; Public Release: 2010.10.24
; Purpose: 方便玩家戰鬥和掠奪資源
; Website: http://www.byewind.com/
; 脚本讨论:https://byewind.notion.site/tEnado-cbdab9a0c79644ddb8c4046eec645bb8
; 正體中文版本由 GeniusKiKi 編譯
; ===================================================================== ;
;
; ***特別注意***
; 停止腳本請點擊面板上的關閉按鈕,這樣才能保存設定
;
; 腳本意見、bug提交及使用說明請訪問以下地址
; https://byewind.notion.site/tEnado-cbdab9a0c79644ddb8c4046eec645bb8
;
; 如何獲取獸醫ID?
; 勾選獸醫功能後下馬就能獲取,但面板上不會馬上顯示,下次啟動腳本後會顯示
;
; ===================================================================== ;
;
; -設定自定義集種類-----------------------
; 註:設定完後請在面板上勾選[自定義集]
; 例:set %Customize CWL_LWL_UJG_IJG_
set %Customize
;
; -設定拾取超時時間-----------------------
; 注: 根據你的網速來設定,數字越大越不容易非法
set %Ptime 8 ;(數字)
;
; -設定繃帶時間-----------------------
; 註:一般來說你不需要修改,如果繃帶太快請加大數字,反之亦然
; 例:set %Btime 5 或 set %Btime -5
set %Btime 0 ;(數字,可為負數)
;
; -設定獸醫時間-----------------------
; 註:一般來說你不需要修改,如果獸醫太快請加大數字,反之亦然
set %Vtime 23 ;(數字)
;
; ===================================================================== ;
; //////////////////////////////更新記錄/////////////////////////////// ;
; ===================================================================== ;
;
; -13.02.03
; -修改了註解,更新了網址,添加了微博地址,現在大家可以在腳本網站
;  和微博上討論交流啦
;
; -12.20
; -修改了自動攻擊最近目標不會攻擊已添加的朋友(繃帶朋友功能中的)
; -順便提下,繃帶朋友功能可以繃帶人或者別人的寵物
;
; -12.18
; -修改了剪皮革的bug
;
; -12.14
; -修改了tWaitForAction副程式
; -增加繃帶時間和獸醫時間設定
; -修改了繃帶時間計算公式
;
; -12.6
; -修改壓制功能
;
; -12.5
; -修改繃帶朋友功能:只在能繃帶到的範圍內起作用
;
; -12.4
; -增加在黑暗之父(DF)房間內剔骨(自動啟動,無需設定)
; -增加判斷寵物血是否滿程序,需要在寵物滿血時手動拖出寵物血條來設定
;  原理為捕捉屏幕上寵物血條位置的畫點顏色,所以設定好後寵物血條不能
;  有位移,否則需要重新設定
;
; -11.9
; -增加自動攻擊最近目標功能,角色在戰爭狀態時才有效,不會攻擊玩家
;  此功能主要是方便玩家殺祭壇時候使用
; -將拾取超時時間改為可自定義,玩家可以根據自己的網速來設定
;
; -11.7
; -調整負重提醒
; -優化拾取過程,盡量做到不非法
; -物品增加 騎寵石、火號角、神器材料(腐敗、腐壞等)、各個地城任務物品
; -功能增加 自動榮譽、自動失調、獸醫快捷鍵、自定義物品、自動首特攻
;  自動自信、自動閃躲、繃帶朋友、顯示面板快捷鍵
;
; -11.6
; -腳本更名為:tEnado 戰鬥輔助
;
; ===================================================================== ;
; //////////////////////////////腳本開始/////////////////////////////// ;
; ===================================================================== ;
;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////www.byewind.com/////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
; ///////////////////////////////////////////////////////////////////// ;
;
initEvents
linesPerCycle 100
set %ScriptName 戰鬥輔助
set %null
set %abc the_quick_brown_fox_jumps_over_the_lazy_dog
set %BandageTime 107 - ( #dex / 20 ) * 10 + %Btime
set %bonetypes LNF_QNF_WNF_PNF_KNF_MNF_JNF_YNF_VNF
set %knife CNF_BNF_HSF_INF_GMH_RRH_MTF_GUO_XRH_CUO_OPO_XTH_BUO_ZTO_WSF_HNF_RFR_IFR_WRH_
+UOH_LPH_RMH_ZRF_NSF_BSF_LSF_BPH_SOH_JTF_VRH_NMH_TSF_JPH_NPO_ATF_FUO
set %scissors JAG
set %player IS_HS_XU_AV_QAB
set %mounted YVX_GVX_CVX_SVX_HVX_VUX_IVX_XVX_VVX_XUX_RRX_TUX_IWX_UUX_KWX_EVX_BWX
set %mountkind FN_UJ_HH_ZGB_HHB_TJ_VF_YJ
set %musictools QRF_NRF_MQF_PRF_LQF_OQF
set %leather EEG_GED_DEG_
set %cutresources JJG_EEG_GED_DEG_
set %I1 POF_
set %I2 ZLF_
set %I3 CWL_LWL_UJG_IJG_
set %I4 ZJF_LKF_CKF_YKK_OKF_TWN_CUD_BUD_IKF_IIF_HIF_
set %I5 HVF_UVF_FVF_EVF_OVF_VUF_GVF_RVF_BVF_VVF_NVF_ZVF_
set %I6 QEJ_
set %I7 ZWF_
set %I8 OFF_
set %I9 VLK_
set %I10 JJG_EEG_GED_DEG_
set %I11 GUF_OZF_
set %I12 VRD_
set %I13 DPF_
set %I14 NUF_XUF_UUF_OUF_ZUF_AVF_TUF_YUF_
set %I15 RWF_LNK_FKF_
set %I16 QWS_EWS_SWS_RWS_FWS_DWS_GWS_JWS_OWS_
set %I17 MZF_JZF_RZF_KUF_SZF_JUF_KZF_WZF_
set %I18 YZF_TZF_IUF_UZF_DUF_
set %I19 OXM_TBN_SBN_UBN_BXM_DXM_OWS_
set %I20 QCK_FIL_XVK_OWK_PWS_
set %I21 WIS_BAB_MIG_LZF_ZFM_YWK_SWS_
gosub Welcome
gosub ShowMenu
loop:
  if ! %makeMenu
    gosub makeMenu
  if %menuKey
  {
    onhotkey *tCS_MenuKey . #charid
    {
      menu Show
      set %makeMenu #false
    }
  }
  if #charghost = no
  {
    gosub CutBone
    finditem *tCS_ItemBag . #charid C_ , #backpackid
    if #findkind = -1
      set *tCS_ItemBag . #charid #backpackid
    if %cutresources in %LootList
    {
      finditem %scissors C_ , #backpackid
      if #findkind <> -1
        set %scissorsID #findid
      else
        set %scissorsID N/A
    }
    if %setLoot
    {
      if H notin #charstatus
      {
        gosub OpenCorpse
        gosub LootCorpse
      }
      gosub GroundItems
    }
    gosub LootContainer
    if %LCKey
    {
      onhotkey *tCS_LCKey . #charid
        gosub setContainer
    }
    if %MountKey
    {
      if %_MountKey = 1
        set %Veterinary #false
      if %_MountKey = 0
        set %Veterinary #true
      onhotkey *tCS_MountKey . #charid
      {
        if %Veterinary #true
        {
         set %Veterinary #false
         event ExMsg *tCS_Mount . #charid 3 90 [Veterinary off!]
         set %_MountKey 1
        }
        else
        {
         set %Veterinary #true
         event ExMsg *tCS_Mount . #charid 3 90 [Veterinary on!]
         set %_MountKey 0
        }
      }
    }
    if H notin #charstatus
    {
      if %AutoHeal
        gosub AutoHeal
      if %Veterinary
        gosub Veterinary
      if %HealFriend
        gosub HealFriend
      if %AutoAttack && G in #charstatus
      {
        event macro 52 5
        finditem #ltargetid G_13
        if #findkind <> -1 && #findtype notin %player && #ltargetid <> #charid && #ltargetid 

<> *tCS_Mount . #charid && #ltargetid <> YC && #ltargetid notin *tCS_fID
          event macro 53
      }
      gosub Monster
    }
    if %FindPK
      gosub FindPK
  }
  if #charghost = yes
    ignoreitem reset LootItem
goto loop
sub Welcome
  msg $
  wait 3
  msg [ tEnado %ScriptName ] $
  wait 3
  msg [ Powered By tEnado ] $
  wait 3
  msg [ www.byewind.com ] $
  wait 3
return
sub GroundItems
  if %GroundItems
  {
    namespace Push
    namespace Local GroundItems
    if #maxweight - #weight < 50
    {
      gosub tWaitForAction2 Weight 89
      if #result
        event ExMsg #charid 3 55 [Weight!]
    }
    finditem %LootList G_2
    if #findkind <> -1
    {
      set !weight #weight
      set !T #scnt2
      Exevent Drag #findid #findstack
      while #weight <= !weight
      {
        if #scnt2 - !T > %Ptime
          break
        wait 1
      }
      Exevent Dropc *tCS_ItemBag . #charid
      wait 10
    }
    namespace Pop
  }
return
sub LootCorpse
  namespace Push
  namespace Local LootCorpse
  if #contsize = 144_212 && #contname = container_gump
  {
    set !contid #contid
    if #maxweight - #weight < 50
    {
      gosub tWaitForAction2 Weight 89
      if #result
        event ExMsg #charid 3 55 [Weight!]
    }
    if %IgnorePlayers
    {
      event Property %CorpseID
      str Left #property 1
      if #strRes in %abc
      {
        ignoreitem %CorpseID Corpses
        set %LootCorpse #false
        namespace Pop
        return
      }
    }
    if %LootCorpse
    {
      if %cutresources in %LootList
      {
        finditem %leather C_ , !contid
        if #findkind <> -1 && #findtype in %leather
        {
          if %scissorsID <> N/A
          {
            set #lobjectid %scissorsID
            event macro 17 0
            set #ltargetid #findid
            set #ltargetkind 1
            target
            event macro 22 0
            wait 1
          }
          else
          {
            event ExMsg #charid 3 55 [No scissors!]
          }
        }
      }
      finditem %LootList C_ , !contid
      for !i 1 #findcnt
      {
        finditem %LootList C_ , !contid
        if #findkind <> -1
        {
          set !weight #weight
          set !T #scnt2
          Exevent Drag #findid #findstack
          while #weight <= !weight
          {
            if #scnt2 - !T > %Ptime
              break
            wait 1
          }
          Exevent Dropc *tCS_ItemBag . #charid
          wait 10
        }
        else
        {
          if %CloseCorpse && #contname = container_gump && #contsize = 144_212 3
            set !cx #contposx + 80
            set !cy #contposy + 80
            click !cx !cy r
          if %HideCorpses
            hideitem %CorpseID
        }
      }
    }
  }
  namespace Pop
return
sub LootContainer
  if %lootContainer
  {
    namespace Push
    namespace Local LootContainer
    finditem %lootContainerID
    if #findkind = 1 && #finddist > 2 2
      set %lootContainer #false
      event ExMsg #charid 3 55 [too far!]
    if #contid <> %lootContainerID
    {
      set #lobjectid %lootContainerID
      event macro 17 0
      set !T #scnt2
      while #scnt2 - !T < 8
      {
       if #contid = %lootContainerID
          break
      }
    }
    else
    {
      if #maxweight - #weight < 50
      {
        gosub tWaitForAction2 Weight 89
        if #result
          event ExMsg #charid 3 55 [Weight!]
      }
      finditem %LootList C_ , %lootContainerID
      for !i 1 #findcnt
      {
        finditem %LootList C_ , %lootContainerID
        if #findkind <> -1
        {
          set !weight #weight
          set !T #scnt2
          Exevent Drag #findid #findstack
          while #weight <= !weight
          {
            if #scnt2 - !T > %Ptime
              break
            wait 1
          }
          Exevent Dropc *tCS_ItemBag . #charid
          wait 10
        }
        else
        {
          set %lootContainer #false
          if %CloseCorpse && #contid = %lootContainerID 3
            set !cx #contposx + 80
            set !cy #contposy + 80
            click !cx !cy r
        }
      }
    }
    namespace Pop
  }
return
sub OpenCorpse
  namespace Push
  namespace Local OpenCorpse
  finditem YFM G_2
  if #findkind <> -1
  {
    set %LootCorpse #true
    set %CorpseID #findid
    set #lobjectid #findid
    if %OpenCorpse
    {
      event macro 17 0
      set !T #scnt2
      while #scnt2 - !T < 8
      {
       if #contsize = 144_212 && #contname = container_gump
          break
      }
    }
    ignoreitem %CorpseID Corpses
    if %CutCorpses && %CorpseID <> !prevCorpseID
    {
      finditem %knife C
      if #findkind <> -1
      {
        set #lobjectid #findid
        event macro 17 0
        set #ltargetid %CorpseID
        set #ltargetkind 1
        target
        event macro 22 0
        set !prevCorpseID %CorpseID
      }
      else
      {
        event ExMsg #charid 3 55 [No knife!]
      }
    }
  }
  namespace Pop
return
sub AutoHeal
  if #hits < #maxhits && #targcurs = 0
  {
    gosub tWaitForAction AutoHeal 3 %BandageTime 0 0 1
    if #result
    {
      finditem ZLF c_ , #backpackid
      set #lobjectid #findid
      event macro 17 0
      target
      event macro 23 0
    }
  }
return
sub FindPK
  finditem %player G
  for %i 1 #findcnt
  {
    finditem %player G
    if #findkind <> -1 && #findid <> #charid && #findrep = 6
    {
      gosub tWaitForAction2 FindPK 89
      if #result
        event ExMsg #charid 3 38 [PK!]
      ignoreitem reset pk
      return
    }
    else
    {
      ignoreitem #findid pk
    }
  }
  ignoreitem reset pk
return
sub Veterinary
  namespace Push
  namespace Local Veterinary
  set !lpc #lpc
  set #lpc 1000
  finditem %mounted C_ , #charid
  if #findkind = -1 && #targcurs = 0
  {
    str Left *tCS_Mount . #charid 1
    if *tCS_Mount . #charid = N/A || *tCS_Mount . #charid = %null || #strRes notin %abc
    {
     finditem %mountkind G_5
     if #findkind <> -1
       set *tCS_Mount . #charid #findid
    }
    if %setVeterinary
    {
      cmpPix 4 f
      {
        findItem *tCS_Mount . #charid G
          if #finddist > 2
            event ExMsg #charid 3 55 [too far!]
        gosub tWaitForAction Veterinary 4 %Vtime 0 0 1
        if #result
        {
          finditem ZLF C_ , #backpackid
          set #lobjectid #findid
          event macro 17 0
          set !prevLtargetid #ltargetid
          set #ltargetid *tCS_Mount . #charid
          set #ltargetkind 1
          target
          event macro 22 0
          set #ltargetid !prevLtargetid
        }
      }
    }
    else
    {
      findItem *tCS_Mount . #charid G
        if #finddist > 2
          event ExMsg #charid 3 55 [too far!]
      gosub tWaitForAction Veterinary 4 %Vtime 0 0 1
      if #result
      {
        finditem ZLF C_ , #backpackid
        set #lobjectid #findid
        event macro 17 0
        set !prevLtargetid #ltargetid
        set #ltargetid *tCS_Mount . #charid
        set #ltargetkind 1
        target
        event macro 22 0
        set #ltargetid !prevLtargetid
      }
    }
  }
  set #lpc !lpc
  namespace Pop
return
sub Monster
  namespace Push
  namespace Local Monster
  finditem #enemyid G
  if #findkind <> -1 && #finddist < 13
  {
    set #ltargetid #enemyid
    set #ltargetkind 1
    if ! %AutoAttack && #finddist < 6 && G in #charstatus
      event macro 27 0
    if #enemyid <> !prevEnemy && #findtype notin %player
    {
      if %Honor
      {
        event macro 49 1
        target
        event macro 22 0
      }
      if %Discordance
      {
        finditem %musictools C_ , #backpackid
        set #lobjectid #findid
        event macro 17 0
        gosub tWaitForAction Discordance 2 11 0 11 1
        if #result
        {
          event macro 13 15
          target
          event macro 22 0
        }
      }
      set !prevEnemy #enemyid
    }
    if #enemyid <> N/A
    {
      if %Confidence && #hits > 30 && #mana > 24
      {
        cmpPix 2 f
        {
          gosub tWaitForAction Confidence 1 0 7 4 1
          if #result
            event macro 15 146
        }
      }
      if %Evasion && #hits > 30 && #mana > 24
      {
        cmpPix 3 f
        {
          gosub tWaitForAction Evasion 1 0 7 6 1
          if #result
            event macro 15 147
        }
      }
      if %Ability && #mana > 31
      {
        cmpPix 1 f
          event macro 35 0
      }
      if %Discordance
      {
        event macro 26 0
        if #ltargetid <> #enemyid && #ltargetid <> #charid && #ltargetid <> *tCS_Mount . 

#charid && #ltargetid <> !ltargetid
        {
          gosub tWaitForAction2 Discordance 11
          if #result
          {
            finditem %musictools C_ , #backpackid
            set #lobjectid #findid
            event macro 17 0
            event macro 13 15
            target
            event macro 22 0
            set !ltargetid #ltargetid
          }
        }
      }
    }
  }
  namespace Pop
return
sub HealFriend
  namespace Push
  namespace Local HealFriend
  set !lpc #lpc
  set #lpc 1000
  finditem %FriendID G
  if #findkind <> -1 && #finddist < 3 && #targcurs = 0
  {
    if #findtype in %player
    {
      gosub tWaitForAction AutoHeal 3 %BandageTime 0 0 1
      if #result
      {
        finditem ZLF C_ , #backpackid
        set #lobjectid #findid
        event macro 17 0
        set !prevLtargetid #ltargetid
        set #ltargetid %FriendID
        set #ltargetkind 1
        target
        event macro 22 0
        set #ltargetid !prevLtargetid
      }
    }
    else
    {
      gosub tWaitForAction Veterinary 4 %Vtime 0 0 1
      if #result
      {
        finditem ZLF C_ , #backpackid
        set #lobjectid #findid
        event macro 17 0
        set !prevLtargetid #ltargetid
        set #ltargetid %FriendID
        set #ltargetkind 1
        target
        event macro 22 0
        set #ltargetid !prevLtargetid
      }
    }
  }
  set #lpc !lpc
  namespace Pop
return
sub CutBone
  set %x #charposx - 423
  set %y #charposy - 431
  if %x * %x + %y * %y < 25000
  {
    finditem %knife C
    if #findkind <> -1
      set #lobjectid #findid
    else
      event ExMsg #charid 3 55 [No knife!]
    finditem %_bone G_12
    if #findkind <> -1
    {
      gosub tWaitForAction2 CutBone 10
      if #result
      {
        set #ltargetid #findid
        set #ltargetkind 1
        event macro 17 0
        target
        event macro 22 0
      }
    }
    else
    {
      finditem %bonetypes G_12
      if #findkind <> -1
      {
        gosub tWaitForAction2 CutBone 10
        if #result
        {
          set #ltargetid #findid
          set %_bone #findid
          set #ltargetkind 1
          event macro 17 0
          target
          event macro 22 0
        }
      }
    }
  }
return
sub ShowMenu
  set !lpc #lpc
  set #lpc 1000
  menu Clear
  menu Window Title tEnado 戰鬥輔助
  menu font size 8
  menu Window Size 275 625
  menu Shape Shape 3 95 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 200 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 245 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 305 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 340 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 400 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 430 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 460 269 1 3 7 1 gray 7 gray
  menu Shape Shape 3 3 269 619 3 6 1 gray 1 $dedddd
  menu Check S1 10 15 70 15 #false 拾取功能
  menu Check S2 102 15 70 15 #false 打開屍體
  menu Check S3 194 15 70 15 #false 自動繃帶
  menu Check S4 10 40 70 15 #false 自動榮譽
  menu Check S5 102 40 70 15 #false 自動失調
  menu Check S6 194 40 70 15 #false PK提醒
  menu Check S7 10 65 70 15 #false 獸醫
  menu Edit Mount 57 62 39 寵物ID
  menu Check S8 102 65 110 15 #false 獸醫快捷鍵
  menu Edit MountKey 185 61 15 P
  menu Button setVeterinary 205 62 40 20 設定
  menu Check I1 10 100 70 15 #false 金幣
  menu Check I2 102 100 70 15 #false 繃帶
  menu Check I3 194 100 70 15 #false 手鐲戒指
  menu Check I4 10 120 70 15 #false 次神箱子
  menu Check I5 102 120 70 15 #false 珠寶
  menu Check I6 194 120 70 15 #false 騎寵石
  menu Check I7 10 140 70 15 #false 火號角
  menu Check I8 102 140 70 15 #false 羊毛
  menu Check I9 194 140 70 15 #false 羽毛
  menu Check I10 10 160 70 15 #false 皮革
  menu Check I11 102 160 70 15 #false 骨
  menu Check I12 194 160 70 15 #false 肉
  menu Check I13 10 180 70 15 #false 空卷
  menu Check I14 102 180 70 15 #false 藥水
  menu Check I15 194 180 70 15 #false 箭
  menu Check I16 10 205 70 15 #false 神器材料
  menu Check I17 102 205 70 15 #false 魔法藥材
  menu Check I18 194 205 70 15 #false 巫師藥材
  menu Check I19 10 225 70 15 #false 光棱任務
  menu Check I20 102 225 70 15 #false 帕王任務
  menu Check I21 194 225 70 15 #false 恐角任務
  menu Check I22 10 255 15 15 #false
  menu Edit IC1 28 251 28 ---
  menu Check I23 65 255 15 15 #false
  menu Edit IC2 83 251 28 ---
  menu Check I24 120 255 15 15 #false
  menu Edit IC3 138 251 28 ---
  menu Check I25 10 282 15 15 #false
  menu Edit IC4 28 278 28 ---
  menu Check I26 65 282 15 15 #false
  menu Edit IC5 83 278 28 ---
  menu Check I27 120 282 15 15 #false
  menu Edit IC6 138 278 28 ---
  menu Text xxx 188 255 自定義物品
  menu Button getType 175 278 55 20 讀取類別
  menu Edit Type 232 278 28 ---
  menu Check Customize 10 315 70 15 #false 自定義集
  menu Check AllItems 102 315 70 15 #false 所有物品
  menu Check S9 194 315 70 15 #false 地上物品
  menu Check S10 10 350 100 15 #false 關閉屍體/容器
  menu Check S11 150 350 70 15 #false 切割屍體
  menu Check S12 10 375 70 15 #false 隱藏屍體
  menu Check S13 150 375 100 15 #false 忽略玩家屍體
  menu Button Ability 10 405 80 20 自動首特攻
  menu Button Confidence 97 405 80 20 自動自信
  menu Button Evasion 185 405 80 20 自動閃躲
  menu Text xxx 10 438 繃帶朋友
  menu Combo Create Friends 65 435 91
  menu Button addFriend 159 435 30 20 添加
  menu Button delFriend 192 435 30 20 刪除
  menu Button FriendStart 225 435 40 20 開啟
  menu Button HideMenu 30 470 60 20 隱藏面板
  menu Button setItemBag 105 470 60 20 設定包
  menu Button lootContainer 180 470 60 20 搜索容器
  menu Check S14 10 504 110 15 #false 顯示面板快捷鍵
  menu Edit menuKey 115 500 15 L
  menu Check S15 145 504 110 15 #false 搜索容器快捷鍵
  menu Edit LCKey 250 500 15 M
  menu Button AutoAttack 85 530 105 20 自動攻擊最近目標
  menu Font Color $565656
  menu Text xxx 89 560 Powered By tEnado
  menu Text xxx 88 575 www.byewind.com
  menu Font Color $3071f6
  menu Text Tips 10 597
  if *tCS_Mount . #charid <> N/A && *tCS_Mount . #charid <> %null
    menu set Mount *tCS_Mount . #charid
  if *tCS_MountKey . #charid <> N/A && *tCS_MountKey . #charid <> %null
    menu set MountKey *tCS_MountKey . #charid
  if *tCS_MenuKey . #charid <> N/A && *tCS_MenuKey . #charid <> %null
    menu set menuKey *tCS_MenuKey . #charid
  if *tCS_LCKey . #charid <> N/A && *tCS_LCKey . #charid <> %null
    menu set LCKey *tCS_LCKey . #charid
  for %i 1 6
  {
    if *tCS_IC . %i <> N/A && *tCS_IC . %i <> %null
      menu set IC , %i *tCS_IC . %i
  }
  for %i 1 15
  {
    str Mid *tCS_S . #charid %i 1
    if #strRes = 1
      menu set S , %i #true
  }
  for %i 1 27
  {
    str Mid *tCS_I . #charid %i 1
    if #strRes = 1
      menu set I , %i #true
  }
  str Mid *tCS_S . #charid 16 1
  if #strRes = 1
    menu set Customize #true
  str Mid *tCS_S . #charid 17 1
  if #strRes = 1
    menu set AllItems #true
  if *tCS_fNUM <> N/A && *tCS_fNUM <> %null && *tCS_fNUM > 0
  {
    set %name *tCS_fNAME
    for %i 1 *tCS_fNUM
    {
      str Left %name 13
      menu Combo Add Friends #strRes
      str Del %name 1 13
      set %name #strRes
    }
    menu Combo Select Friends *tCS_fNO
  }
  menu Show
  set #MenuButton
  set #lpc !lpc
return
sub makeMenu
  set !lpc #lpc
  set #lpc 1000
  set *tCS_S . #charid
  set *tCS_I . #charid
  set %LootList
  for %i 1 15
  {
    menu get S , %i
    if #menures
      set *tCS_S . #charid *tCS_S . #charid , 1
    else
      set *tCS_S . #charid *tCS_S . #charid , 0
  }
  for %i 1 27
  {
    menu get I , %i
    if #menures
    {
      set *tCS_I . #charid *tCS_I . #charid , 1
      if %i < 22
        set %LootList %LootList , % . I . %i
    }
    else
    {
      set *tCS_I . #charid *tCS_I . #charid , 0
    }
  }
  for %i 1 6
  {
    menu get IC , %i
    if #menures = %null
      set *tCS_IC , %i
    if #menures <> %null && #menures <> ---
    {
      set *tCS_IC , %i #menures
      set %LootList %LootList , #menures , _
    }
  }
  menu get Customize
  if #menures
  {
    set *tCS_S . #charid *tCS_S . #charid , 1
    set %LootList %LootList , %Customize
  }
  else
  {
    set *tCS_S . #charid *tCS_S . #charid , 0
  }
  menu get AllItems
  if #menures
  {
    set *tCS_S . #charid *tCS_S . #charid , 1
    set %LootList *
  }
  else
  {
    set *tCS_S . #charid *tCS_S . #charid , 0
  }
  menu get Mount
  if #menures = %null
    set *tCS_Mount . #charid
  if #menures <> %null && #menures <> 寵物ID
    set *tCS_Mount . #charid #menures
  menu get MountKey
    set *tCS_MountKey . #charid #menures
  menu get menuKey
    set *tCS_MenuKey . #charid #menures
  menu get LCKey
    set *tCS_LCKey . #charid #menures
  gosub setSub S1 setLoot
  gosub setSub S2 OpenCorpse
  gosub setSub S3 AutoHeal
  gosub setSub S4 Honor
  gosub setSub S5 Discordance
  gosub setSub S6 FindPK
  gosub setSub S7 Veterinary
  gosub setSub S8 MountKey
  gosub setSub S9 GroundItems
  gosub setSub S10 CloseCorpse
  gosub setSub S11 CutCorpses
  gosub setSub S12 HideCorpses
  gosub setSub S13 IgnorePlayers
  gosub setSub S14 menuKey
  gosub setSub S15 LCKey
  if #MenuButton = setVeterinary 2
    menu set Tips
    gosub setVeterinary
  if #MenuButton = addFriend 2
    menu set Tips
    gosub addFriend
  if #MenuButton = delFriend 2
    menu set Tips
    gosub delFriend
  if #MenuButton = FriendStart 2
    menu set Tips
    gosub FriendStart
  if #MenuButton = getType 2
    menu set Tips
    gosub getType
  if #MenuButton = Ability 2
    menu set Tips
    gosub Ability
  if #MenuButton = Confidence 2
    menu set Tips
    gosub Confidence
  if #MenuButton = Evasion 2
    menu set Tips
    gosub Evasion
  if #MenuButton = setItemBag 2
    menu set Tips
    gosub setItemBag
  if #MenuButton = lootContainer 2
    menu set Tips
    gosub setContainer
  if #MenuButton = AutoAttack 2
    menu set Tips
    gosub AutoAttack
  if #MenuButton = HideMenu 3
    menu hide
    set %makeMenu #true
    set #MenuButton
  if #MenuButton = closed
    halt
  set #lpc !lpc
return
sub setSub
  menu get %1
  if #menures
    set % . %2 #true
  else
    set % . %2 #false
return
sub AutoAttack
  if ! %AutoAttack
  {
    menu set AutoAttack 關閉
    menu set Tips -----------------自動攻擊最近目標開啟-----------------
    set %AutoAttack #true
  }
  else
  {
    menu set AutoAttack 自動攻擊最近目標
    set %AutoAttack #false
  }
  set #MenuButton
return
sub Evasion
  if ! %Evasion
  {
    menu Button Cancel 185 405 80 20 取消設定
    set %count 20
    set %T #scnt
    while #scnt - %T < 20
    {
      if #MenuButton = Cancel
      {
        menu set Tips
        menu Delete Cancel
        set #MenuButton
        return
      }
      set %x #contposx + 35
      set %y #contposy + 35
      savepix %x %y 3
      if #contname = spellicon_gump && #contsize = 48_44 && #pixcol = 4334005
      {
        menu set Tips -----------------------自動閃躲開啟-----------------------
        menu set Evasion 關閉自動閃躲
        set %Evasion #true
        break
      }
      menu set Tips ------------雙擊閃躲圖標,使之變紅... %count ------------
      set %count %count - 1
      wait 20
    }
    if %count < 1 || #scnt - %T >= 20
      menu set Tips -----------------超時,自動閃躲未啟動-----------------
  }
  else
  {
    menu set Evasion 自動閃躲
    set %Evasion #false
  }
  menu Delete Cancel
  set #MenuButton
return
sub Confidence
  if ! %Confidence
  {
    menu Button Cancel 97 405 80 20 取消設定
    set %count 20
    set %T #scnt
    while #scnt - %T < 20
    {
      if #MenuButton = Cancel
      {
        menu set Tips
        menu Delete Cancel
        set #MenuButton
        return
      }
      set %x #contposx + 35
      set %y #contposy + 35
      savepix %x %y 2
      if #contname = spellicon_gump && #contsize = 48_44 && #pixcol = 4860366
      {
        menu set Tips -----------------------自動自信開啟-----------------------
        menu set Confidence 關閉自動自信
        set %Confidence #true
        break
      }
      menu set Tips ------------雙擊自信圖標,使之變紅... %count ------------
      set %count %count - 1
      wait 20
    }
    if %count < 1 || #scnt - %T >= 20
      menu set Tips -----------------超時,自動自信未啟動-----------------
  }
  else
  {
    menu set Confidence 自動自信
    set %Confidence #false
  }
  menu Delete Cancel
  set #MenuButton
return
sub Ability
  if ! %Ability
  {
    menu Button Cancel 10 405 80 20 取消設定
    set %count 20
    set %T #scnt
    while #scnt - %T < 20
    {
      if #MenuButton = Cancel
      {
        menu set Tips
        menu Delete Cancel
        set #MenuButton
        return
      }
      set %x #contposx + 35
      set %y #contposy + 35
      savepix %x %y 1
      if #contname = abilityicon_gump && #contsize = 48_44 && #pixcol = 4860358
      {
        menu set Tips ----------------------自動首特攻開啟---------------------
        menu set Ability 關閉自動特攻
        set %Ability #true
        break
      }
      menu set Tips ------------雙擊特攻圖標,使之變紅... %count ------------
      set %count %count - 1
      wait 20
    }
    if %count < 1 || #scnt - %T >= 20
      menu set Tips ----------------超時,自動首特攻未啟動---------------
  }
  else
  {
    menu set Ability 自動首特攻
    set %Ability #false
  }
  menu Delete Cancel
  set #MenuButton
return
sub getType
  gosub s7GetTarget
  finditem #result
  if #findkind <> -1
  {
    event ExMsg #findid 3 55 [me]
    menu set Type #findtype
  }
  set #MenuButton
return
sub FriendStart
  if ! %HealFriend
  {
    menu get Friends
    if #menures <> 0
    {
      menu set FriendStart 關閉
      set *tCS_fNO #menures
      set %count 13 * #menures - 12
      str Mid *tCS_fID %count 13
      set %strRes #strRes
      str Pos %strRes #spc
      set %count 14 - #strRes
      str Del %strRes #strRes %count
      menu set Tips -----------------------繃帶朋友開啟-----------------------
      set %FriendID #strRes
      set %HealFriend #true
    }
  }
  else
  {
    menu set FriendStart 開啟
    set %HealFriend #false
  }
  set #MenuButton
return
sub addFriend
  menu set Tips --------------------請選擇玩家或寵物--------------------
  gosub s7GetTarget
  menu set Tips
  set %ID #result
  event property %ID
  gosub getName
  if %ID in *tCS_fID
  {
    menu set Tips ------------ %name 已存在於下拉列表中------------
    set #MenuButton
    return
  }
  if *tCS_fID = N/A || *tCS_fID = %null
    set *tCS_fID
  if *tCS_fNAME = N/A || *tCS_fNAME = %null
    set *tCS_fNAME
  str Len %ID
  if #strRes < 13
  {
    set %count 13 - #strRes
    for %i 1 %count
      set %ID %ID , #spc
  }
  set *tCS_fID *tCS_fID , %ID
  str Len %name
  if #strRes < 13
  {
    set %count 13 - #strRes
    for %i 1 %count
      set %name %name , #spc
  }
  if #strRes > 13
  {
    str Left %name 13
    set %name #strRes
  }
  set *tCS_fNAME *tCS_fNAME , %name
  menu Combo Add Friends %name
  str Len *tCS_fID
  set *tCS_fNUM #strRes / 13
  menu Combo Select Friends *tCS_fNUM
  event ExMsg %ID 3 55 [New Friend]
  set #MenuButton
return
sub delFriend
  menu get Friends
  set %count 13 * #menures - 12
  str Del *tCS_fNAME %count 13
  set *tCS_fNAME #strRes
  str Del *tCS_fID %count 13
  set *tCS_fID #strRes
  if *tCS_fNUM > 0
    set *tCS_fNUM *tCS_fNUM - 1
  menu Font Color black
  menu Delete Friends
  menu Combo Create Friends 65 435 91
  if *tCS_fNUM <> N/A && *tCS_fNUM <> %null && *tCS_fNUM > 0
  {
    set %name *tCS_fNAME
    for %i 1 *tCS_fNUM
    {
      str Left %name 13
      menu Combo Add Friends #strRes
      str Del %name 1 13
      set %name #strRes
    }
    menu Combo Select Friends #menures
  }
  set #MenuButton
return
sub getName
  set %name #property
  if lord in %name || lady in %name 2
    str del %name 1 5
    set %name #strRes
  if [ in %name 4
    str pos %name [
    set %strRes #strRes - 2
    str left %name %strRes
    set %name #strRes
  if ( in %name 4
    str pos %name (
    set %strRes #strRes - 2
    str left %name %strRes
    set %name #strRes
  if $ in %name 4
    str pos %name $
    set %strRes #strRes - 2
    str left %name %strRes
    set %name #strRes
return
sub setItemBag
  gosub s7GetTarget
  set *tCS_ItemBag . #charid #result
  event ExMsg *tCS_ItemBag . #charid 3 55 [New storage bag]
  set #MenuButton
return
sub setContainer
  gosub s7GetTarget
  set %lootContainerID #result
  event ExMsg %lootContainerID 3 55 [Loot this container]
  set %lootContainer #true
  set #MenuButton
return
sub setVeterinary
  menu Button VeterinaryOK 205 62 40 20 確定
  set %count 20
  set %T #scnt
  while #scnt - %T < 20
  {
    if #MenuButton = VeterinaryOK
    {
      if #contname = status_gump && #conttype in %mountkind
      {
        if #contid = *tCS_Mount . #charid
        {
          set %x #contposx + 135
          set %y #contposy + 42
          savepix %x %y 4
          menu set Tips --------------------------設定成功--------------------------
          set %setVeterinary #true
          break
        }
        else
        {
          menu set Tips ---寵物ID與操作的寵物不符,請重新設定寵物ID--
          set %setVeterinary #false
          break
        }
      }
      else
      {
        menu set Tips --設定失敗,拖出血條後請勿點擊UO內其它元素-
        set %setVeterinary #false
        break
      }
    }
    menu set Tips 手動拖出寵物血條確認寵物滿血後點<確定>... %count
    set %count %count - 1
    wait 20
  }
  if %count < 1 || #scnt - %T >= 20 2
    menu set Tips ---------------------超時,設定失敗---------------------
    set %setVeterinary #false
  menu Delete VeterinaryOK
  set #MenuButton
return
;* @name s7GetTarget
;* @author snicker7
sub s7GetTarget
  set #ltargetid
	set #targcurs 1
	_waitfortargcurs:
	if #targcurs = 1 2
		wait 1
		goto _waitfortargcurs
return #ltargetid
;* @name tWaitForAction
;* @author tEnado
sub tWaitForAction
  namespace Push
  namespace Local tWaitForAction
  set !lpc #lpc
  set #lpc 1000
  if %_tWFA
  {
    for !i 1 10
    {
     set ! . !i !tWFA_ . !i
    }
    set % . _Last . !c ! . _tWFA_Last . !c
    set %_tWFA #false
  }
  for !i 1 10
    {
     set !tWFA_ . !i ! . !i
    }
  set ! . _tWFA_Last . !c % . _Last . !c
  if #scnt2 - % . _Last . %1 > %3
     {
      set !b 0
      if !6 = 0
         set !b !7
      if ( %2 = 4 && !9 = 3 ) || ( %2 = 3 && !9 = 4 )
         set !b !10
      _tWaitForAction:
        if ( !3 + !b > #scnt2 ) || ( %2 = 1 && ( !3 + !7 > #scnt2 || !4 + !1 > #scnt2 ) ) || ( 

%2 = 2 && ( !3 + !8 > #scnt2 || !5 + !2 > #scnt2 ) )
        {
           if %6 = 1 2
             wait 1
             goto _tWaitForAction
           set #lpc !lpc
           namespace Pop
           return #false
        }
      set !3 #scnt2
      if %2 = 1 2
       set !4 #scnt2
       set !1 %4
      if %2 = 2 2
       set !5 #scnt2
       set !2 %5
      set % . _Last . %1 #scnt2
      set !c %1
      set !6 %2
      set !7 %4
      set !8 %5
      if %2 = 3 || %2 = 4 2
         set !9 %2
         set !10 %3
      set #lpc !lpc
      namespace Pop
      return #true
      }
  set #lpc !lpc
  namespace Pop
return #false
;* @name tWaitForAction3
;* @author tEnado
sub tWaitForAction3
  _tWaitForAction3:
    if % . _Last . %1 + %2 > #scnt2 2
       wait 1
       goto _tWaitForAction3
  set % . _Last . %1 #scnt2
return
;* @name tWaitForAction2
;* @author tEnado
sub tWaitForAction2
  if #scnt2 - % . _Last . %1 > %2 2
    set % . _Last . %1 #scnt2
    return #true
return #false

t_WaitForAction副程式[ | ]

; ===================================================================== ;
; Script Name: t_WaitForAction副程式
; Author: tEnado ( ByeWind )
; Revision Date: 2013.02.03
; Public Release: 2010.10.24
; Purpose: 用来计算游戏中各个动作的执行时间、冷却时间和恢复时间
; Website: http://www.byewind.com/
; 注意:测试时间间隔的精确度跟人物是否在跑动和代码行数有关
; ===================================================================== ;

; //////////////////////////////用来测试的部分,副程式本体在下方/////////////////////////////// ;
initEvents
linesPerCycle 100
;set #scnt2 0
set %mount ENUCD ;坐骑ID
set %mount2 QUKAB
set %arm VRH_HLK  ;武器type
set %animal IVF ;挑拨的动物
set %animal2 QCPEC
event ExMsg #charid 3 10 [---------------------------------]
; ===================================================================== ;
loop:
  gosub Weapon ;神圣武器
  gosub yinshen ;隐身
  ;gosub Evasion ;闪避
  ;gosub HealingPotion ;喝治疗药水
  ;gosub tonglin ;通灵
  ;gosub Autobless ;祝福
  ;gosub Confidence ;自信
  ;gosub Opendoor ;开门
  ;gosub mfj ;魔法镜
  ;gosub Peacemaking ;和平
  ;gosub Peacemaking2 ;和平
  ;gosub Discordance ;压制
  ;gosub provocation ;挑拨
  ;gosub Curse ;诅咒
  ;gosub Chuijian ;吹箭
  ;set %_tWFA #true ;放在未执行动作之后
  halt
goto loop

; ===================================================================== ;
;------------------------------
sub Evasion ;闪避
  set %starttime #scnt2
  gosub tWaitForAction Evasion 1 0 0 0 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 15 147
  }
return
;------------------------------
sub HealingPotion ;喝治疗药水
  set %starttime #scnt2
  gosub tWaitForAction HealingPotion 0 0 0 0 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    finditem UUF C_ , #backpackid
    set #LOBJECTID #findid
    event macro 17 0
  }
return
;------------------------------
sub Opendoor ;开门
  set %starttime #scnt2
  gosub tWaitForAction Opendoor 0 0 0 0 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 12 0
  }
return
;------------------------------
sub Autobless ;祝福
  set %starttime #scnt2
  gosub tWaitForAction Autobless 1 0 0 0 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 15 16
    target 30
    event macro 23 0
  }
return
;------------------------------
sub Curse ;诅咒
  set %starttime #scnt2
  gosub tWaitForAction Curse 1 0 0 0 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 15 26
    target 30
    event macro 23 0
  }
return
;------------------------------
sub mfj ;魔法镜
  set %starttime #scnt2
  gosub tWaitForAction mfj 1 0 19 19 1
  set %endtime #scnt2 - %starttime
  if #result
  {
   msg 等待了 %endtime $
   event sysmessage %1
   event macro 15 35
  }
return
;------------------------------
sub Confidence ;自信
  set %starttime #scnt2
  gosub tWaitForAction Confidence 1 0 8 5 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 15 146
  }
return
;------------------------------
sub Weapon ;神圣武器
  set %starttime #scnt2
  gosub tWaitForAction Weapon 1 0 10 9 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 15 203
  }
return
;------------------------------
sub tonglin ;通灵
  set %starttime #scnt2
  gosub tWaitForAction tonglin 2 0 12 51 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 13 32
  }
return
;------------------------------
sub yinshen ;隐身
  set %starttime #scnt2
  gosub tWaitForAction yinshen 2 0 0 101 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 13 21
  }
return
;------------------------------
sub Peacemaking ;和平
  set %starttime #scnt2
  gosub tWaitForAction Peacemaking 2 0 0 52 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 13 9
    set #ltargetid %mount
    set #ltargetkind 1
    target
    event macro 22 0
  }
return
;------------------------------
sub Peacemaking2 ;和平2
  set %starttime #scnt2
  gosub tWaitForAction Peacemaking2 2 0 0 52 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 13 9
    set #ltargetid %mount2
    set #ltargetkind 1
    target
    event macro 22 0
  }
return
;------------------------------
sub provocation ;挑拨
  set %starttime #scnt2
  gosub tWaitForAction provocation 2 0 0 103 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 13 22
    set #ltargetid %animal
    set #ltargetkind 1
    target
    event macro 22 0
    set #ltargetid %animal2
    set #ltargetkind 1
    target
    event macro 22 0
  }
return
;------------------------------
sub Discordance ;压制
  set %starttime #scnt2
  gosub tWaitForAction provocation 2 0 0 11 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    event macro 50 5
    event macro 13 15
    ;set #ltargetid %animal
    ;set #ltargetkind 1
    target
    event macro 22 0
  }
return
;------------------------------
sub Chuijian ;吹箭
  set %starttime #scnt2
  gosub tWaitForAction Chuijian 0 28 0 0 1
  set %endtime #scnt2 - %starttime
  if #result
  {
    msg 等待了 %endtime $
    event sysmessage %1
    finditem MDP C_ , #backpackid
    set #lobjectid #findid
    event macro 17 0
    Target
    set #ltargetid %mount
    event macro 22 0
  }
return
; /////////////////////////////////////////////////////////////////////// ;
; /////////////////////////////////////////////////////////////////////// ;
; //////////////////////////////副程式本体////////////////////////////// ;
; /////////////////////////////////////////////////////////////////////// ;
; /////////////////////////////////////////////////////////////////////// ;
;-----
;* @思路    1.为每个类别判断不同的等待时间,注意:分上一次和每个类别最后一次
;*		      2.等待上一次动作时间,并且等待最后一次同类别的等待时间
;*		      3.默认情况下该动作一定会执行,如果此动作未执行则在tWaitForAction后设置%_tWFA #true
;*		      4.绷带到兽医、兽医到绷带的等待时间是它们的周期
;*            例:gosub tWaitForAction AutoHeal 3 !3 0 0 1 (!3为变量,根据敏捷的高低变化绷带的周期)
;* @name tWaitForAction
;* @author tEnado
;* @purpose 计算动作周期(多久执行动作一次)和为不同类别的动作构建时间间隔体系以等待下一动作执行
;* ---------------------------------------------------------------
;* @notes   在施法过程中跑动会影响时间间隔
;*          时间间隔是指:从动作开始执行到下个动作的时间(包含了动作执行过程的时间)
;*          副程式默认下面的动作一定会执行
;*          6个参数要写满,否则会出错
;* @问题    *通灵-自信,通灵到自信等待11,再到通灵等待了自信的7,所以出错(已解决)
;* ---------------------------------------------------------------
;* @params
;*		%1 % . _Last . %1的名字(%_LastAutobless)
;*		%2 动作类别:0其他 1魔法 2技能 3绷带 4兽医
;*		%3 周期(多久执行这动作一次)
;*    %4 下个动作是魔法的等待时间(当类别是0的时候就是所有动作的等待时间)
;*		%5 下个动作是技能的等待时间
;*		%6  是否等待该动作执行 0不等待 1等待
;*    !p2 上一次的类别
;*    !p4 上一次魔法的等待时间,对应%4,区别于!1
;*    !p5 上一次技能的等待时间,对应%5,区别于!2
;*    !1 最后一次魔法的等待时间,对应%4,区别于!p4
;*    !2 最后一次技能的等待时间,对应%5,区别于!p5
;*    !Bp2 上次绷带和兽医的类别
;*    !Bp3 绷带和兽医的等待时间,对应%2=34时的%3
;*    % . _Last . %1 “每个”动作最后一次开始执行的时间
;*    !LastTime 上次动作”开始“执行的时间
;*    !LastTime1 最后一次魔法”开始“执行的时间
;*    !LastTime2 最后一次技能”开始“执行的时间
;*    !WaitTime 间隔时间
;*    %_tWFA 确定该动作是否执行过,如该动作未执行则在tWaitForAction后设置%_tWFA #true
;*
;* @returns #true 成功,执行动作
;*          #false 不成功,返回
;* @example: gosub tWaitForAction Autobless 1 120 0 0 1
;*           if #result
;*           {
;*              执行的动作
;*           }
sub tWaitForAction
  namespace Push
  namespace Local tWaitForAction
  set !lpc #lpc
  set #lpc 1000
  ;初始化未填写的参数为0
  ;for !i 6 1
  ;{
    ;if %0 < !i
      ;set % . !i 0
  ;}
  ;***********判断动作是否执行过部分**************************************
  ;A如果动作未执行则先恢复先前储存的变量 B储存先前的变量
  ;A
  if %_tWFA
  {
    set !LastTime !tWFA_LastTime
    set !LastTime1 !tWFA_LastTime1
    set !1 !tWFA_1
    set !LastTime2 !tWFA_LastTime2
    set !2 !tWFA_2
    set % . _Last . !p1 ! . _tWFA_Last . !p1
    set !p2 !tWFA_p2
    set !p4 !tWFA_p4
    set !p5 !tWFA_p5
    set !Bp2 !tWFA_Bp2
    set !Bp3 !tWFA_Bp3
    set %_tWFA #false
  }
  ;B
  set !tWFA_LastTime !LastTime
  set !tWFA_LastTime1 !LastTime1
  set !tWFA_1 !1
  set !tWFA_LastTime2 !LastTime2
  set !tWFA_2 !2
  set ! . _tWFA_Last . !p1 % . _Last . !p1
  set !tWFA_p2 !p2
  set !tWFA_p4 !p4
  set !tWFA_p5 !p5
  set !tWFA_Bp2 !Bp2
  set !tWFA_Bp3 !Bp3
  ;******************************************************************
  if #scnt2 - % . _Last . %1 > %3
     {
      ;-----------设置规则----------------
      ;这次类别是其他的时候 !WaitTime 0
      set !WaitTime 0
      if !p2 = 0
         set !WaitTime !p4 ;上一次类别是其他的时候
      ;3绷带\4兽医,!Bp2上次绷带和兽医的类别
      if ( %2 = 4 && !Bp2 = 3 ) || ( %2 = 3 && !Bp2 = 4 )
         set !WaitTime !Bp3
      ;------------------------------------
      _tWaitForAction:
      ;首先要等待上一个%4 和上一个%5的时间;其次要等待最后一次是技能还是魔法的等待时间
        ;if %2 = 1 && ( !LastTime + !p4 > #scnt2 || !LastTime1 + !1 > #scnt2 ) 2
            ;wait 1
            ;goto _tWaitForAction
        ;if %2 = 2 && ( !LastTime + !p5 > #scnt2 || !LastTime2 + !2 > #scnt2 ) 2
            ;wait 1
            ;goto _tWaitForAction
        ;if !LastTime + !WaitTime > #scnt2 2
           ;wait 1
           ;goto _tWaitForAction
        ;-------
        ;上面一大段改成这个
        if ( !LastTime + !WaitTime > #scnt2 ) || ( %2 = 1 && ( !LastTime + !p4 > #scnt2 || !LastTime1 + !1 > #scnt2 ) ) || ( %2 = 2 && ( !LastTime + !p5 > #scnt2 || !LastTime2 + !2 > #scnt2 ) )
        {
           if %6 = 1 2
             wait 1
             goto _tWaitForAction
           set #lpc !lpc
           namespace Pop
           return #false
        }
      ;=================================================================
      set !LastTime #scnt2
      ;1魔法%4,注意,并不是每次都设置!1和!2
      if %2 = 1 2
       set !LastTime1 #scnt2 ;最后魔法的时间
       set !1 %4
      ;2技能%5
      if %2 = 2 2
       set !LastTime2 #scnt2 ;最后技能的时间
       set !2 %5
      set % . _Last . %1 #scnt2
      set !p1 %1 ;上一次的名称
      set !p2 %2 ;上一次的类别
      set !p4 %4 ;上次的%4
      set !p5 %5 ;上次的%5
      if %2 = 3 || %2 = 4 2
         set !Bp2 %2 ;绷带和兽医的类别
         set !Bp3 %3 ;绷带和兽医的等待时间,对应%2=34时的%3(周期)
      ;=================================================================
      set #lpc !lpc
      namespace Pop
      return #true
      }
  set #lpc !lpc
  namespace Pop
return #false
Advertisement