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