Skip to content
Outlands Hub

Razor script

Shagrath BardTamer Helper v1.3.1

by shagrath_x · 1034 lines
Download

Shard: UO Outlands - Razor (ClassicUO) Helper for a tamer + bard (tribard) template. Build: Animal Lore 120, Animal Taming 120, Herding 120, Veterinary 120, Provocation 80, Discordance 80, Peacemaking 80…

TamingHealingBardDiscordancePeacemakingProvocationAnimal LoreAnimal TamingHerdingVeterinary
Shagrath BardTamer Helper v131.razor
1# This is an automated backup - check out https://outlands.uorazorscripts.com/script/75fdd84f-df5e-4e5b-a2fc-926e6e801af5 for latest2# Automation by Jaseowns3## Script: Shagrath BardTamer Helper v1.3.14## Created by: shagrath_x#05#############################################6 7#####################################################################8# SHAGRATH BARDTAMER HELPER  v1.3.19# Author: Shagrath10# Shard: UO Outlands - Razor (ClassicUO)11#12# Helper for a tamer + bard (tribard) template.13# Build: Animal Lore 120, Animal Taming 120, Herding 120, Veterinary 120,14#        Provocation 80, Discordance 80, Peacemaking 8015#16# WHAT IT DOES17# Always on:18#   vet supplies, potions, food buff, red pouch, weight warning,19#   bard songs upkeep, keeps the shepherd crook activated,20#   emergency area peace when your HP drops21# Out of war mode only:22#   valuables stash, moves loot of value into a red trapped pouch23# In war mode only:24#   auto target, pets re-attack, provocation, discordance, peacemaking25#26# SUITE (optional mouse keys, same folder):27#   sbt_discord, sbt_peace, sbt_peace_area, sbt_provo, sbt_provo_auto28#   Razor runs one script at a time: each key stops this helper,29#   plays the skill, then restarts the helper.30#31 32# CHANGES33#   v1.3.1  valuables stash fix, skips items already in the pouch,34#           debug messages for the stash35#   v1.3  valuables stash: every 30 s, out of war mode, moves cores,36#         distillations, maps, arcane and skill scrolls, skill balls,37#         MCD, survival gear and chain links into a red trapped pouch38#   v1.2  standard messages and colors, sbt_Noise switch,39#         bard results shown over the creature40#   v1.1  provocation and discordance alternate on the same target,41#         so a failing provo never blocks discord. Order is a setting.42#43# INSTALL44#   Save in Scripts\PVM\Bard as shagrath_bardtamer_helper.razor45#   Another folder: edit the pushlist sbt_Main line after the settings.46#   After editing: stop the script, reload it, check the version47#   shown over your head.48#####################################################################49 50#####################################################################51# SETTINGS - change only the values in this section52# Switches: 1 = on, 0 = off.  Times are in milliseconds.53#####################################################################54 55# --- Script ---56@setvar! sbt_StopWhenHidden 157# 1 = all messages, 0 = only critical messages58@setvar! sbt_Noise 159@setvar! sbt_Debug 060 61# --- Healing and items ---62@setvar! sbt_UseVetSupplies 163@setvar! sbt_VetSuppliesCD 400064@setvar! sbt_UseItemCD 75065 66# --- Potions ---67@setvar! sbt_UseCurePotion 168@setvar! sbt_CureHpDiff 169@setvar! sbt_UseHealPotion 170@setvar! sbt_HealHpDiff 3571@setvar! sbt_UseRefreshPotion 172@setvar! sbt_RefreshStamDiff 5073# Strength and Magic Resist are used only in war mode74@setvar! sbt_UseStrengthPotion 175@setvar! sbt_UseMagicResistPotion 176 77# --- Food buff (eats from a tray in the backpack) ---78@setvar! sbt_UseFood 179 80# --- Red pouch ---81@setvar! sbt_UseRedPouch 182@setvar! sbt_PouchThiefAlert 183 84# --- Valuables stash (out of war mode only) ---85# Moves valuables from the backpack into the first red trapped pouch.86# Items: aspect and chromatic cores, aspect and chromatic distillations,87# treasure and harvest maps, arcane scrolls, skill scrolls of any color,88# skill balls, mastercrafting diagrams, survival gear, mastery chain89# links and link reforging tools.90# Note: arcane scrolls share their type with plain blank scrolls.91@setvar! sbt_StashValuables 192@setvar! sbt_StashCD 3000093 94# --- Weight ---95@setvar! sbt_WeightWarn 196@setvar! sbt_WeightWarnAtDiff 1097@setvar! sbt_WeightWarnCD 500098# Drops gold on a corpse or on the ground when overweight99@setvar! sbt_WeightDropGold 1100@setvar! sbt_WeightDropGoldAmount 200101 102# --- Weapon ---103# Re-equips a disarmed weapon. Shepherd crooks are always skipped.104@setvar! sbt_ReEquipWeapon 1105 106# --- Bard songs upkeep ---107@setvar! sbt_SongDiscord 1108@setvar! sbt_SongPeace 1109@setvar! sbt_SongProvo 1110@setvar! sbt_SongRetryCD 10000111 112# --- Herding ---113@setvar! sbt_KeepCrookActive 1114@setvar! sbt_CrookCheckCD 3000115 116# --- Targeting (war mode) ---117@setvar! sbt_TargetRange 10118@setvar! sbt_ReissueAttack 1119@setvar! sbt_ReissueAttackCD 5000120@setvar! sbt_ShowTargetMarker 1121@setvar! sbt_TargetMarkerCD 2000122 123# --- Barding (war mode) ---124@setvar! sbt_UseDiscord 1125@setvar! sbt_UsePeace 1126@setvar! sbt_UseProvo 1127# Provo and discord take turns on the same target.128# 1 = provo first: discord then gets +25 barding skill on a provoked target129# 0 = discord first: provo then gets +12.5 barding skill on a discorded target130@setvar! sbt_ProvoFirst 1131# Shared delay between two barding skills132@setvar! sbt_BardSkillCD 5000133# Retry delay after You must wait a few moments134@setvar! sbt_MustWaitRetryCD 1000135# Do not repeat the same skill on the same creature for this long136@setvar! sbt_DiscordHoldCD 20000137@setvar! sbt_PeaceHoldCD 15000138@setvar! sbt_ProvoHoldCD 20000139 140# --- Provocation partner search ---141# Max distance from you of both creatures142@setvar! sbt_ProvoRange 8143# Wait this long before searching again when no partner is found144@setvar! sbt_ProvoRetryCD 3000145# Creatures out of sight or not provokable are skipped for this long146@setvar! sbt_ProvoSkipClearCD 20000147# Number of search tries: edit the number in the line  for 10  below148 149# --- Emergency area peace (always on) ---150@setvar! sbt_UseEmergencyPeace 1151# Triggers when you have lost at least this many hit points152@setvar! sbt_EmergencyPeaceDiffHits 60153 154#####################################################################155# END OF SETTINGS156#####################################################################157 158# --- Version banner ---159@setvar! sbt_Version 131160if not varexist sbt_ShownVersion161    @setvar! sbt_ShownVersion 0162endif163if sbt_ShownVersion != sbt_Version164    overhead "Shagrath BardTamer Helper v1.3.1" 89165    @setvar! sbt_ShownVersion sbt_Version166endif167 168# --- Restart list used by the bard keys ---169removelist sbt_Main170createlist sbt_Main171# If you saved the helper in another folder, edit the path on the next line172pushlist sbt_Main "Play Script: PVM\Bard\shagrath_bardtamer_helper"173 174# --- Clean start ---175@clearignore176clearsysmsg177 178# --- Timers (created once, kept when a bard key restarts the helper) ---179if not timerexists sbt_UseItemTimer180    settimer sbt_UseItemTimer sbt_UseItemCD181endif182if not timerexists sbt_VetSuppliesTimer183    settimer sbt_VetSuppliesTimer sbt_VetSuppliesCD184endif185if not timerexists sbt_WeightWarnTimer186    settimer sbt_WeightWarnTimer sbt_WeightWarnCD187endif188if not timerexists sbt_SongTimer189    settimer sbt_SongTimer sbt_SongRetryCD190endif191if not timerexists sbt_CrookCheckTimer192    settimer sbt_CrookCheckTimer sbt_CrookCheckCD193endif194if not timerexists sbt_ReissueAttackTimer195    settimer sbt_ReissueAttackTimer sbt_ReissueAttackCD196endif197if not timerexists sbt_TargetMarkerTimer198    settimer sbt_TargetMarkerTimer sbt_TargetMarkerCD199endif200if not timerexists sbt_BardSkillTimer201    settimer sbt_BardSkillTimer sbt_BardSkillCD202endif203if not timerexists sbt_BardWaitTimer204    settimer sbt_BardWaitTimer sbt_MustWaitRetryCD205endif206if not timerexists sbt_StashTimer207    settimer sbt_StashTimer sbt_StashCD208endif209if not timerexists sbt_ProvoRetryTimer210    settimer sbt_ProvoRetryTimer sbt_ProvoRetryCD211endif212if not timerexists sbt_DiscordedTimer213    settimer sbt_DiscordedTimer sbt_DiscordHoldCD214endif215if not timerexists sbt_PacifiedTimer216    settimer sbt_PacifiedTimer sbt_PeaceHoldCD217endif218if not timerexists sbt_ProvokedTimer219    settimer sbt_ProvokedTimer sbt_ProvoHoldCD220endif221settimer sbt_ProvoSkipClearTimer 0222 223# --- State (kept when a bard key restarts the helper) ---224if not varexist sbt_BOT_TARGET225    @setvar! sbt_BOT_TARGET 0226endif227# Last target set by the helper itself, so it is never taken as your choice228if not varexist sbt_BOT_LT229    @setvar! sbt_BOT_LT 0230endif231if not varexist sbt_DiscordedT232    @setvar! sbt_DiscordedT 0233endif234if not varexist sbt_PacifiedT235    @setvar! sbt_PacifiedT 0236endif237if not varexist sbt_ProvokedT238    @setvar! sbt_ProvokedT 0239endif240if not varexist sbt_NotoShown241    @setvar! sbt_NotoShown 0242endif243# Provo or discord turn on the current target244if not varexist sbt_TurnTarget245    @setvar! sbt_TurnTarget 0246endif247if not varexist sbt_DiscordTurn248    @setvar! sbt_DiscordTurn 0249endif250@setvar! sbt_RedPouchCountTotal 0251@setvar! sbt_CurrentRightHandWeapon 0252@setvar! sbt_CurrentLeftHandWeapon 0253@setvar! sbt_SeenRight 0254@setvar! sbt_SeenLeft 0255@setvar! sbt_BARD_TARGET1 0256@setvar! sbt_BARD_TARGET2 0257removelist sbt_IGNORE_CREATURES258createlist sbt_IGNORE_CREATURES259removelist sbt_PROVO_SKIP260createlist sbt_PROVO_SKIP261 262#####################################################################263# MAIN LOOP264#####################################################################265while not dead266 267    # --- Stop when hidden ---268    if sbt_StopWhenHidden = 1 and hidden269        overhead "- hidden -" 33270        warmode off271        stop272    endif273 274    # --- Veterinary supplies ---275    if sbt_UseVetSupplies = 1 and not bandaging and findtype 25750 backpack 0 as sbt_VetSupply276        if timer sbt_VetSuppliesTimer >= sbt_VetSuppliesCD or hp < maxhp277            if timer sbt_UseItemTimer >= sbt_UseItemCD278                while insysmsg "You begin using veterinary supplies" or insysmsg "You or your nearby followers do not require healing"279                endwhile280                dclick sbt_VetSupply281                settimer sbt_UseItemTimer 0282                getlabel backpack sbt_Ping283                if insysmsg "You begin using veterinary supplies" or insysmsg "You or your nearby followers do not require healing"284                    settimer sbt_VetSuppliesTimer 0285                endif286            endif287        endif288    endif289 290    # --- Cure potion ---291    if sbt_UseCurePotion = 1 and not queued and poisoned and diffhits >= sbt_CureHpDiff and findtype 3847 self as sbt_Potion292        if timer sbt_UseItemTimer >= sbt_UseItemCD293            dclick sbt_Potion294            settimer sbt_UseItemTimer 0295        endif296    endif297 298    # --- Heal potion (skipped while on cooldown) ---299    if sbt_UseHealPotion = 1 and diffhits >= sbt_HealHpDiff and findtype 3852 self as sbt_Potion300        if timer sbt_UseItemTimer >= sbt_UseItemCD301            getlabel sbt_Potion sbt_PotionDesc302            if "next usable in" in sbt_PotionDesc303                // on cooldown304            else305                dclick sbt_Potion306                settimer sbt_UseItemTimer 0307            endif308        endif309    endif310 311    # --- Refresh potion ---312    if sbt_UseRefreshPotion = 1 and not queued and diffstam >= sbt_RefreshStamDiff and findtype 3851 self as sbt_Potion313        if timer sbt_UseItemTimer >= sbt_UseItemCD314            dclick sbt_Potion315            settimer sbt_UseItemTimer 0316        endif317    endif318 319    # --- Strength potion (war mode) ---320    if sbt_UseStrengthPotion = 1 and warmode and not queued and not findbuff "Strength" and findtype 3849 self as sbt_Potion321        if timer sbt_UseItemTimer >= sbt_UseItemCD322            dclick sbt_Potion323            settimer sbt_UseItemTimer 0324        endif325    endif326 327    # --- Magic Resist potion (war mode) ---328    if sbt_UseMagicResistPotion = 1 and warmode and not queued and not findbuff "Magic Resist" and findtype 3846 self as sbt_Potion329        if timer sbt_UseItemTimer >= sbt_UseItemCD330            dclick sbt_Potion331            settimer sbt_UseItemTimer 0332        endif333    endif334 335    # --- Food buff ---336    if sbt_UseFood = 1 and not queued and not findbuff "food" and findtype "tray" backpack as sbt_FoodItem337        if timer sbt_UseItemTimer >= sbt_UseItemCD338            dclick sbt_FoodItem339            settimer sbt_UseItemTimer 0340        endif341    endif342 343    # --- Red pouch: break paralyze ---344    if sbt_UseRedPouch = 1 and paralyzed and findtype "pouch" backpack 38 as sbt_RedPouch345        dclick sbt_RedPouch346        getlabel backpack sbt_Ping347        if counttype 3705 backpack 38 as sbt_RedPouchCount348            @setvar! sbt_RedPouchCountTotal sbt_RedPouchCount349        endif350    endif351 352    # --- Red pouch: thief alert ---353    if sbt_PouchThiefAlert = 1 and counttype 3705 backpack 38 as sbt_RedPouchCount354        if sbt_RedPouchCountTotal != 0 and sbt_RedPouchCountTotal != sbt_RedPouchCount355            overhead "- thief -" 33356        else357            @setvar! sbt_RedPouchCountTotal sbt_RedPouchCount358        endif359    endif360 361    # --- Valuables stash: loot of value into a red trapped pouch ---362    if sbt_StashValuables = 1 and timer sbt_StashTimer >= sbt_StashCD363        settimer sbt_StashTimer 0364        if warmode or paralyzed365            if sbt_Debug = 1366                overhead "[dbg] stash skip warmode" 946367            endif368        elseif findtype 3705 backpack 38 as sbt_StashPouch369            if sbt_Debug = 1370                overhead "[dbg] stash pouch ok" 946371            endif372            @setvar! sbt_StashMoved 0373            while insysmsg "cannot hold more"374            endwhile375            @clearignore376            # Items already in the pouch are skipped377            while findtype 3985|4025|17686|4026|5356|70148|70151|70154|70157|3827|8826|22336|17087|37181|43206|29040 sbt_StashPouch as sbt_StashItem378                @ignore sbt_StashItem379            endwhile380            while findtype 3985|4025|17686|4026|5356|70148|70151|70154|70157|3827|8826|22336|17087|37181|43206|29040 backpack as sbt_StashItem381                @ignore sbt_StashItem382                if sbt_Debug = 1383                    overhead "[dbg] stash move" 946384                endif385                lift sbt_StashItem 60000386                wait 300387                drop sbt_StashPouch -1 -1 -1388                wait 600389                if insysmsg "cannot hold more"390                    overhead "- pouchfull -" 33391                    break392                endif393                @setvar! sbt_StashMoved 1394                if warmode or paralyzed395                    break396                endif397            endwhile398            @clearignore399            if sbt_StashMoved = 1 and sbt_Noise = 1400                overhead "- stashed -" 68401            endif402        elseif findtype 3985|4025|17686|4026|5356|70148|70151|70154|70157|3827|8826|22336|17087|37181|43206|29040 backpack403            overhead "- nopouch -" 33404        elseif sbt_Debug = 1405            overhead "[dbg] stash nothing" 946406        endif407    endif408 409    # --- Weight warning ---410    if sbt_WeightWarn = 1 and timer sbt_WeightWarnTimer >= sbt_WeightWarnCD411        if diffweight <= sbt_WeightWarnAtDiff or weight >= maxweight412            overhead "- weight -" 33413            settimer sbt_WeightWarnTimer 0414        endif415    endif416 417    # --- Weight: drop gold when overweight ---418    if sbt_WeightDropGold = 1 and weight > maxweight and timer sbt_UseItemTimer >= sbt_UseItemCD419        if findtype "gold coin" backpack as sbt_GoldStack420            lift sbt_GoldStack sbt_WeightDropGoldAmount421            if findtype 8198 ground -1 -1 2 as sbt_Corpse422                drop sbt_Corpse -1 -1 -1423            else424                droprelloc 0 0425            endif426            getlabel backpack sbt_Ping427            if insysmsg "cannot drop anything"428                drop backpack -1 -1 -1429            endif430            settimer sbt_UseItemTimer 0431        else432            overhead "- overweight -" 33433        endif434    endif435 436    # --- Re-equip a disarmed weapon ---437    # A crook is never re-equipped: double click on a crook in the438    # backpack toggles herding instead of equipping it.439    if sbt_ReEquipWeapon = 1 and not casting440        if findlayer self righthand as sbt_RightHandWeapon441            if sbt_RightHandWeapon != sbt_SeenRight442                @setvar! sbt_SeenRight sbt_RightHandWeapon443                getlabel sbt_RightHandWeapon sbt_WeapDesc444                if "crook" in sbt_WeapDesc445                    @setvar! sbt_CurrentRightHandWeapon 0446                else447                    @setvar! sbt_CurrentRightHandWeapon sbt_RightHandWeapon448                endif449            endif450        endif451        if findlayer self lefthand as sbt_LeftHandWeapon452            if sbt_LeftHandWeapon != sbt_SeenLeft453                @setvar! sbt_SeenLeft sbt_LeftHandWeapon454                getlabel sbt_LeftHandWeapon sbt_WeapDesc455                if "crook" in sbt_WeapDesc456                    @setvar! sbt_CurrentLeftHandWeapon 0457                else458                    @setvar! sbt_CurrentLeftHandWeapon sbt_LeftHandWeapon459                endif460            endif461        endif462        if not queued and sbt_CurrentRightHandWeapon != 0 and find sbt_CurrentRightHandWeapon backpack and timer sbt_UseItemTimer >= sbt_UseItemCD463            dclick sbt_CurrentRightHandWeapon464            settimer sbt_UseItemTimer 0465        elseif not queued and sbt_CurrentLeftHandWeapon != 0 and find sbt_CurrentLeftHandWeapon backpack and timer sbt_UseItemTimer >= sbt_UseItemCD466            dclick sbt_CurrentLeftHandWeapon467            settimer sbt_UseItemTimer 0468        endif469    endif470 471    # --- Bard songs upkeep (played on your backpack) ---472    if not targetexists and not queued473        if sbt_SongDiscord = 1 and not findbuff "song of discordance" and timer sbt_SongTimer >= sbt_SongRetryCD474            while insysmsg "What instrument"475            endwhile476            useskill 'Discordance'477            wft 500478            if insysmsg "What instrument"479                if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument480                    target sbt_Instrument481                else482                    overhead "- noinstrument -" 33483                endif484                wft 500485            endif486            target backpack487            settimer sbt_SongTimer 0488        endif489 490        if sbt_SongPeace = 1 and not findbuff "song of peacemaking" and timer sbt_SongTimer >= sbt_SongRetryCD491            while insysmsg "What instrument"492            endwhile493            useskill 'Peacemaking'494            wft 500495            if insysmsg "What instrument"496                if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument497                    target sbt_Instrument498                else499                    overhead "- noinstrument -" 33500                endif501                wft 500502            endif503            target backpack504            settimer sbt_SongTimer 0505        endif506 507        if sbt_SongProvo = 1 and not findbuff "song of provocation" and timer sbt_SongTimer >= sbt_SongRetryCD508            while insysmsg "What instrument"509            endwhile510            useskill 'Provocation'511            wft 500512            if insysmsg "What instrument"513                if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument514                    target sbt_Instrument515                else516                    overhead "- noinstrument -" 33517                endif518                wft 500519            endif520            target backpack521            settimer sbt_SongTimer 0522        endif523    endif524 525    # --- Herding: keep one shepherd crook activated ---526    # deactivated is checked before activated because it contains it.527    # At most one double click per check.528    if sbt_KeepCrookActive = 1 and followers > 0 and timer sbt_CrookCheckTimer >= sbt_CrookCheckCD529        settimer sbt_CrookCheckTimer 0530        @setvar! sbt_CrookOn 0531        @setvar! sbt_CrookOff 0532        @clearignore533        while findtype 3713 self as sbt_Crook534            getlabel sbt_Crook sbt_CrookDesc535            if 'deactivated' in sbt_CrookDesc536                @setvar! sbt_CrookOff sbt_Crook537            elseif 'activated' in sbt_CrookDesc538                @setvar! sbt_CrookOn sbt_Crook539                break540            else541                @setvar! sbt_CrookOff sbt_Crook542            endif543            @ignore sbt_Crook544        endwhile545        @clearignore546        if sbt_CrookOn = 0 and sbt_CrookOff != 0547            dclick sbt_CrookOff548            getlabel backpack sbt_Ping549            if sbt_Noise = 1550                overhead "- crook -" 68551            endif552        endif553    endif554 555    # --- Targeting (war mode) ---556    @setvar! sbt_TargetValid 0557    @setvar! sbt_Fight 0558    if warmode559        @setvar! sbt_Fight 1560    endif561 562    if sbt_Fight = 1 and not findbuff PVP563        # Pause while you are aiming a new Last Target with the Razor hotkey564        if insysmsg "Target a new 'Last Target'"565            overhead "- aiming -" 89566            while insysmsg "Target a new 'Last Target'"567            endwhile568            while targetexists569                wait 50570            endwhile571        endif572 573        # Your own choice: a last target that was NOT set by the helper574        @setvar! sbt_UserLT lasttarget575        if sbt_UserLT != 0 and sbt_UserLT != sbt_BOT_LT and sbt_UserLT != sbt_BOT_TARGET and not dead sbt_UserLT and find sbt_UserLT ground -1 -1 sbt_TargetRange576            if noto sbt_UserLT = "hostile" or noto sbt_UserLT = "criminal" or noto sbt_UserLT = "murderer" or noto sbt_UserLT = "enemy"577                @setvar! sbt_BOT_TARGET sbt_UserLT578                overhead "- picked -" 89 sbt_BOT_TARGET579            endif580        endif581 582        # Pick the closest monster when the current target is gone583        if not find sbt_BOT_TARGET ground -1 -1 sbt_TargetRange or dead sbt_BOT_TARGET584            while insysmsg "No one matching"585            endwhile586            hotkey "Target Closest Non-Friendly Monster"587            getlabel backpack sbt_Ping588            @setvar! sbt_BOT_LT lasttarget589            if insysmsg "No one matching"590                @setvar! sbt_BOT_TARGET 0591            else592                @setvar! sbt_BOT_TARGET lasttarget593            endif594        endif595 596        # Validate the target: no pets, no blue, green or yellow597        if sbt_BOT_TARGET != 0 and not dead sbt_BOT_TARGET and find sbt_BOT_TARGET ground -1 -1 sbt_TargetRange598            if inlist sbt_IGNORE_CREATURES sbt_BOT_TARGET599                @setvar! sbt_BOT_TARGET 0600            elseif noto sbt_BOT_TARGET = "friend" or noto sbt_BOT_TARGET = "innocent" or noto sbt_BOT_TARGET = "invulnerable"601                @setvar! sbt_BOT_TARGET 0602            else603                getlabel sbt_BOT_TARGET sbt_TargetDesc604                if "(summoned" in sbt_TargetDesc or "(bonded" in sbt_TargetDesc or "(tame" in sbt_TargetDesc605                    if sbt_Noise = 1606                        overhead "- pet -" 946 sbt_BOT_TARGET607                    endif608                    pushlist sbt_IGNORE_CREATURES sbt_BOT_TARGET609                    @setvar! sbt_BOT_TARGET 0610                else611                    @setvar! sbt_TargetValid 1612                endif613            endif614        else615            @setvar! sbt_BOT_TARGET 0616        endif617 618        # Debug: notoriety of each new target, shown once619        if sbt_Debug = 1 and sbt_TargetValid = 1 and sbt_BOT_TARGET != sbt_NotoShown620            @setvar! sbt_NotoShown sbt_BOT_TARGET621            if noto sbt_BOT_TARGET = "murderer"622                overhead "- murderer -" 946 sbt_BOT_TARGET623            elseif noto sbt_BOT_TARGET = "hostile"624                overhead "- hostile -" 946 sbt_BOT_TARGET625            elseif noto sbt_BOT_TARGET = "criminal"626                overhead "- criminal -" 946 sbt_BOT_TARGET627            elseif noto sbt_BOT_TARGET = "enemy"628                overhead "- enemy -" 946 sbt_BOT_TARGET629            else630                overhead "- other -" 946 sbt_BOT_TARGET631            endif632        endif633    endif634 635    # --- Pets re-attack the current target ---636    if sbt_ReissueAttack = 1 and sbt_TargetValid = 1 and timer sbt_ReissueAttackTimer >= sbt_ReissueAttackCD637        attack sbt_BOT_TARGET638        settimer sbt_ReissueAttackTimer 0639    endif640 641    # --- Target marker ---642    if sbt_ShowTargetMarker = 1 and sbt_Noise = 1 and timer sbt_TargetMarkerTimer >= sbt_TargetMarkerCD643        if sbt_TargetValid = 1644            overhead "- target -" 89 sbt_BOT_TARGET645            settimer sbt_TargetMarkerTimer 0646        elseif sbt_Fight = 1647            overhead "- searching -" 946648            settimer sbt_TargetMarkerTimer 0649        endif650    endif651 652    # --- Bard Reset: needs a client cooldown bar named Bard Reset ---653    if cooldown "Bard Reset"654        settimer sbt_BardSkillTimer sbt_BardSkillCD655        cooldown "Bard Reset" 0656    endif657 658    # --- Clear the provo skip list now and then ---659    if timer sbt_ProvoSkipClearTimer >= sbt_ProvoSkipClearCD660        removelist sbt_PROVO_SKIP661        createlist sbt_PROVO_SKIP662        settimer sbt_ProvoSkipClearTimer 0663    endif664 665    # --- Barding ready check ---666    @setvar! sbt_BardReady 0667    if not targetexists and timer sbt_BardSkillTimer >= sbt_BardSkillCD and timer sbt_BardWaitTimer >= sbt_MustWaitRetryCD668        @setvar! sbt_BardReady 1669    endif670 671    # --- Emergency area peace (first, also during a fight) ---672    if sbt_UseEmergencyPeace = 1 and sbt_BardReady = 1 and diffhits >= sbt_EmergencyPeaceDiffHits673        @setvar! sbt_BardReady 0674        while insysmsg "What instrument" or insysmsg "You play successfully" or insysmsg "You fail to" or insysmsg "You must wait a few moments"675        endwhile676        overhead "- areapeace -" 53677        useskill 'Peacemaking'678        wft 500679        if insysmsg "What instrument"680            if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument681                target sbt_Instrument682            else683                overhead "- noinstrument -" 33684            endif685            wft 500686        endif687        if targetexists688            hotkey "Target Self"689            @setvar! sbt_Res 0690            for 10691                if insysmsg "You play successfully"692                    @setvar! sbt_Res 1693                    break694                elseif insysmsg "You fail to"695                    @setvar! sbt_Res 2696                    break697                elseif insysmsg "You must wait a few moments"698                    @setvar! sbt_Res 3699                    break700                endif701                wait 100702            endfor703            if sbt_Res = 1704                overhead "- pacified -" 68705                settimer sbt_BardSkillTimer 0706            elseif sbt_Res = 3707                settimer sbt_BardWaitTimer 0708                if sbt_Debug = 1709                    overhead "- cooldown -" 946710                endif711            else712                if sbt_Noise = 1713                    overhead "- failed -" 946714                endif715                settimer sbt_BardSkillTimer 0716            endif717        endif718        if targetexists719            hotkey "Cancel Current Target"720        endif721    endif722 723    if sbt_TargetValid = 1724        # --- What was already done on this target ---725        @setvar! sbt_SkipDiscord 0726        @setvar! sbt_SkipPeace 0727        @setvar! sbt_SkipProvo 0728        if sbt_BOT_TARGET = sbt_DiscordedT729            if timer sbt_DiscordedTimer < sbt_DiscordHoldCD730                @setvar! sbt_SkipDiscord 1731            endif732        endif733        if sbt_BOT_TARGET = sbt_PacifiedT734            if timer sbt_PacifiedTimer < sbt_PeaceHoldCD735                @setvar! sbt_SkipPeace 1736            endif737        endif738        if sbt_BOT_TARGET = sbt_ProvokedT739            if timer sbt_ProvokedTimer < sbt_ProvoHoldCD740                @setvar! sbt_SkipPeace 1741                @setvar! sbt_SkipProvo 1742            endif743        endif744 745        # --- Whose turn: provocation or discordance ---746        # New target: start with the skill chosen in sbt_ProvoFirst747        if sbt_BOT_TARGET != sbt_TurnTarget748            @setvar! sbt_TurnTarget sbt_BOT_TARGET749            if sbt_ProvoFirst = 1750                @setvar! sbt_DiscordTurn 0751            else752                @setvar! sbt_DiscordTurn 1753            endif754        endif755        # A discord turn that cannot be used goes back to provo756        if sbt_DiscordTurn = 1757            if sbt_UseDiscord = 0 or sbt_SkipDiscord = 1758                @setvar! sbt_DiscordTurn 0759            endif760        endif761 762        # --- Provocation ---763        if sbt_UseProvo = 1 and sbt_SkipProvo = 0 and sbt_DiscordTurn = 0 and sbt_BardReady = 1 and timer sbt_ProvoRetryTimer >= sbt_ProvoRetryCD764            @setvar! sbt_BARD_TARGET1 sbt_BOT_TARGET765            @setvar! sbt_BARD_TARGET2 0766            # Search a partner: cycle Next until a valid one is found767            for 10768                hotkey "Next Non-Friendly Monster Target"769                getlabel backpack sbt_Ping770                @setvar! sbt_BOT_LT lasttarget771                @setvar! sbt_Try lasttarget772                if sbt_Try != 0 and sbt_Try != sbt_BARD_TARGET1 and not dead sbt_Try and find sbt_Try ground -1 -1 sbt_ProvoRange773                    if inlist sbt_PROVO_SKIP sbt_Try or inlist sbt_IGNORE_CREATURES sbt_Try774                        // skipped775                    elseif noto sbt_Try = "friend" or noto sbt_Try = "innocent" or noto sbt_Try = "invulnerable"776                        // not attackable777                    else778                        getlabel sbt_Try sbt_TryDesc779                        if "(summoned" in sbt_TryDesc or "(bonded" in sbt_TryDesc or "(tame" in sbt_TryDesc780                            pushlist sbt_IGNORE_CREATURES sbt_Try781                        elseif "provo" in sbt_TryDesc782                            // already provoked783                        else784                            @setvar! sbt_BARD_TARGET2 sbt_Try785                            break786                        endif787                    endif788                endif789            endfor790 791            if sbt_BARD_TARGET2 = 0792                settimer sbt_ProvoRetryTimer 0793                if sbt_Debug = 1794                    overhead "- nopartner -" 946795                endif796            else797                @setvar! sbt_BardReady 0798                while insysmsg "What instrument" or insysmsg "You play successfully" or insysmsg "You fail to" or insysmsg "You must wait a few moments" or insysmsg "incite that" or insysmsg "The creatures" or insysmsg "Target cannot be seen" or insysmsg "too far away"799                endwhile800                if sbt_Noise = 1801                    overhead "- provoking -" 53 sbt_BARD_TARGET1802                    overhead "- provoking -" 53 sbt_BARD_TARGET2803                endif804                # Provo attempted: next bard turn goes to discord805                @setvar! sbt_DiscordTurn 1806                useskill 'Provocation'807                wft 500808                if insysmsg "What instrument"809                    if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument810                        target sbt_Instrument811                    else812                        overhead "- noinstrument -" 33813                    endif814                    wft 500815                endif816                @setvar! sbt_Stage 0817                if targetexists818                    target sbt_BARD_TARGET1819                    @setvar! sbt_Stage 1820                    wft 500821                    if targetexists822                        target sbt_BARD_TARGET2823                        @setvar! sbt_Stage 2824                    endif825                endif826                @setvar! sbt_Res 0827                for 10828                    if insysmsg "You play successfully"829                        @setvar! sbt_Res 1830                        break831                    elseif insysmsg "You fail to"832                        @setvar! sbt_Res 2833                        break834                    elseif insysmsg "You must wait a few moments"835                        @setvar! sbt_Res 3836                        break837                    elseif insysmsg "Target cannot be seen" or insysmsg "too far away"838                        @setvar! sbt_Res 4839                        break840                    elseif insysmsg "incite that"841                        @setvar! sbt_Res 5842                        break843                    elseif insysmsg "The creatures"844                        @setvar! sbt_Res 6845                        break846                    endif847                    wait 100848                endfor849 850                if sbt_Res = 1851                    if sbt_Noise = 1852                        overhead "- provoked -" 68 sbt_BARD_TARGET1853                        overhead "- provoked -" 68 sbt_BARD_TARGET2854                    endif855                    @setvar! sbt_ProvokedT sbt_BARD_TARGET1856                    settimer sbt_ProvokedTimer 0857                    settimer sbt_BardSkillTimer 0858                elseif sbt_Res = 2859                    if sbt_Noise = 1860                        overhead "- failed -" 946 sbt_BARD_TARGET1861                    endif862                    settimer sbt_BardSkillTimer 0863                elseif sbt_Res = 3864                    settimer sbt_BardWaitTimer 0865                    if sbt_Debug = 1866                        overhead "- cooldown -" 946867                    endif868                elseif sbt_Res = 4869                    if sbt_Stage = 2870                        # Partner out of sight: skip it for a while871                        pushlist sbt_PROVO_SKIP sbt_BARD_TARGET2872                        if sbt_Debug = 1873                            overhead "- unseen -" 946 sbt_BARD_TARGET2874                        endif875                    else876                        # Your target is out of sight: no provo for a while877                        settimer sbt_ProvoRetryTimer 0878                    endif879                elseif sbt_Res = 5880                    pushlist sbt_PROVO_SKIP sbt_BARD_TARGET2881                    if sbt_Debug = 1882                        overhead "- immune -" 946 sbt_BARD_TARGET2883                    endif884                elseif sbt_Res = 6885                    pushlist sbt_PROVO_SKIP sbt_BARD_TARGET2886                    if sbt_Debug = 1887                        overhead "- toofar -" 946 sbt_BARD_TARGET2888                    endif889                else890                    settimer sbt_ProvoRetryTimer 0891                endif892            endif893            if targetexists894                hotkey "Cancel Current Target"895            endif896        endif897 898        # --- Discordance ---899        if sbt_UseDiscord = 1 and sbt_SkipDiscord = 0 and sbt_BardReady = 1900            @setvar! sbt_BardReady 0901            while insysmsg "What instrument" or insysmsg "You play successfully" or insysmsg "You fail to" or insysmsg "You must wait a few moments" or insysmsg "Target cannot be seen" or insysmsg "too far away"902            endwhile903            if sbt_Noise = 1904                overhead "- discording -" 53 sbt_BOT_TARGET905            endif906            # Discord attempted: next bard turn goes to provo907            @setvar! sbt_DiscordTurn 0908            useskill 'Discordance'909            wft 500910            if insysmsg "What instrument"911                if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument912                    target sbt_Instrument913                else914                    overhead "- noinstrument -" 33915                endif916                wft 500917            endif918            if targetexists919                target sbt_BOT_TARGET920                @setvar! sbt_Res 0921                for 10922                    if insysmsg "You play successfully"923                        @setvar! sbt_Res 1924                        break925                    elseif insysmsg "You fail to"926                        @setvar! sbt_Res 2927                        break928                    elseif insysmsg "You must wait a few moments"929                        @setvar! sbt_Res 3930                        break931                    elseif insysmsg "Target cannot be seen" or insysmsg "too far away"932                        @setvar! sbt_Res 4933                        break934                    endif935                    wait 100936                endfor937                if sbt_Res = 1938                    overhead "- discorded -" 68 sbt_BOT_TARGET939                    @setvar! sbt_DiscordedT sbt_BOT_TARGET940                    settimer sbt_DiscordedTimer 0941                    settimer sbt_BardSkillTimer 0942                elseif sbt_Res = 3943                    settimer sbt_BardWaitTimer 0944                    if sbt_Debug = 1945                        overhead "- cooldown -" 946946                    endif947                elseif sbt_Res = 4948                    if sbt_Debug = 1949                        overhead "- unseen -" 946 sbt_BOT_TARGET950                    endif951                else952                    if sbt_Noise = 1953                        overhead "- failed -" 946 sbt_BOT_TARGET954                    endif955                    settimer sbt_BardSkillTimer 0956                endif957            endif958            if targetexists959                hotkey "Cancel Current Target"960            endif961        endif962 963        # --- Peacemaking ---964        if sbt_UsePeace = 1 and sbt_SkipPeace = 0 and sbt_BardReady = 1965            @setvar! sbt_BardReady 0966            while insysmsg "What instrument" or insysmsg "You play successfully" or insysmsg "You fail to" or insysmsg "You must wait a few moments" or insysmsg "Target cannot be seen" or insysmsg "too far away"967            endwhile968            if sbt_Noise = 1969                overhead "- peacing -" 53 sbt_BOT_TARGET970            endif971            useskill 'Peacemaking'972            wft 500973            if insysmsg "What instrument"974                if findtype 3740|3742|3762|3763|10245|20006|20008|20010|20012|20014|20016 backpack as sbt_Instrument975                    target sbt_Instrument976                else977                    overhead "- noinstrument -" 33978                endif979                wft 500980            endif981            if targetexists982                target sbt_BOT_TARGET983                @setvar! sbt_Res 0984                for 10985                    if insysmsg "You play successfully"986                        @setvar! sbt_Res 1987                        break988                    elseif insysmsg "You fail to"989                        @setvar! sbt_Res 2990                        break991                    elseif insysmsg "You must wait a few moments"992                        @setvar! sbt_Res 3993                        break994                    elseif insysmsg "Target cannot be seen" or insysmsg "too far away"995                        @setvar! sbt_Res 4996                        break997                    endif998                    wait 100999                endfor1000                if sbt_Res = 11001                    overhead "- pacified -" 68 sbt_BOT_TARGET1002                    @setvar! sbt_PacifiedT sbt_BOT_TARGET1003                    settimer sbt_PacifiedTimer 01004                    settimer sbt_BardSkillTimer 01005                elseif sbt_Res = 31006                    settimer sbt_BardWaitTimer 01007                    if sbt_Debug = 11008                        overhead "- cooldown -" 9461009                    endif1010                elseif sbt_Res = 41011                    if sbt_Debug = 11012                        overhead "- unseen -" 946 sbt_BOT_TARGET1013                    endif1014                else1015                    if sbt_Noise = 11016                        overhead "- failed -" 946 sbt_BOT_TARGET1017                    endif1018                    settimer sbt_BardSkillTimer 01019                endif1020            endif1021            if targetexists1022                hotkey "Cancel Current Target"1023            endif1024        endif1025    endif1026 1027    # Small pause at the end of each loop1028    wait 1001029endwhile1030 1031while dead1032    wait 10001033endwhile1034replay