Предлагаю вашему вниманию скрипт на мульти-лор с кушаньем и спирит спиком на прокачку следующих навков: Anatomy, Animal Lore, Arms Lore, Begging, Evaluating Intelligence, Herding, Item Identification, Taste Identification, Enticement, Peacemaking, Musicanship, Tracking.
Вам понадобиться: ваш маунт (по умолчанию horse), еда (по умолчанию onion), пастушья палка (a crook) и музыкальный инструмент (по умолчанию lute).
Перед запуском скрипта положите еду (1к лука вполне достаточно) и музыкальный инструмент в инвентарь, пастушью палку в инвентарь или в руки, встаньте со своим маунтом в одну и ту же клетку (в этом тайле не должно быть других животных этого же типа). Скрипт маунта не кормит, поэтому, во избежание его ухода от вас во время прокачки, рекомендую перед запуском скрипта его покормить (если кушать и качать Taste Identification вы будите луком, то убедитесь путем перетаскивания другого предмета в сумке, что после кормежки маунта лук вернулся в инвентарь и не разделился на несколько стопок)
Код:
var mountt='0x00E2' ### Horse
var foodt='0x0C6D' ### Onion type
var crookt='0x13F4' ### Crook type
var lutet='0x0EB3' ### Lute type

var msg1="looks"
var msg2="anything"
var msg3="item"
var msg4="seem to judge"
var msg5="instructed"
var msg6="estimate"
var msg7="tastes"
var food, mount, crook, lute, halt, SpiritTime, EatTime, none=1

sub main()
   UO.DeleteJournal()
   if UO.FindCount(UO.FindType(foodt, -1, 'backpack')) then
      food=UO.GetSerial('finditem')
   else
      UO.Print("No Food!")
      return 0
   end if
   if not UO.GetGraphic(UO.ObjAtLayer('Lhand'))==crookt then
      if UO.FindCount(UO.FindType(crookt,-1,'backpack')) then
         crook=UO.GetSerial('finditem')
         UO.Equip('Lhand', crook)
      else
         UO.Print("No Crook!")
         return 0
      end if
   else
      crook=UO.GetSerial(UO.ObjAtLayer('Lhand'))
   end if
   UO.Set('finddistance', 0)
   if UO.FindCount(UO.FindType(mountt, -1, 'ground')) then
      mount=UO.GetSerial('finditem')
   else
      UO.Print("No Mount!")
      return 0
   end if
   UO.Set('finddistance', 3)
   if UO.FindCount(UO.FindType(lutet, -1, 'backpack')) then
      lute=UO.GetSerial('finditem')
   else
      UO.Print("No Lute!")
      return 0
   end if
   Eat()
   EatTime=0
   if UO.SkillVal("Spirit Speak")<1000 then
      SpiritSpeak()
      SpiritTime=UO.Timer()
   end if
   UO.DeleteJournal()
   Lore('Anatomy', mount, 1)
   Lore('Animal Lore', mount, 2)
   Lore('Arms Lore', crook, 3)
   Lore('Begging', mount, 4)
   Lore('Evaluating Intelligence', mount, 5)
   Lore('Herding', mount, 6)
   Lore('Item Identification', crook, 7)
   Lore('Taste Identification', food, 8)
   Lore('Enticement', mount, 9)
   Lore('Peacemaking', none, 10)
   Lore('Musicianship', lute, 11)
   Tracking()
   while not UO.Dead() and UO.SkillVal("Spirit Speak")<1000
      if SpiritTime+3000<UO.Timer() and UO.SkillVal("Spirit Speak")<1000 then
         SpiritSpeak()
         SpiritTime=UO.Timer()
         UO.DeleteJournal()
      else
         wait(500)
      end if
   wend
end sub

Sub Lore(skill, target, skillnum)
   if skillnum==5 then
      if UO.SkillVal('Evaluate Intelligence')>=1000 or UO.Dead() then
         return 0
      end if
   else
      if skillnum==7 then
         if UO.SkillVal('Item ID')>=1000 or UO.Dead() then
            return 0
         end if
      else
         if UO.SkillVal(skill)>=1000 or UO.Dead() then
            return 0
         end if
      end if
   end if
   UO.DeleteJournal()
   while not UO.Dead()
      if skillnum==5 then
         if UO.SkillVal('Evaluate Intelligence')>=1000 or UO.Dead() then
            return 0
         end if
      else
         if skillnum==7 then
            if UO.SkillVal('Item ID')>=1000 or UO.Dead() then
               return 0
            end if
         else
            if UO.SkillVal(skill)>=1000 or UO.Dead() then
               return 0
            end if
         end if
      end if
      UO.DeleteJournal()
      if EatTime>=500 then
         Eat()
         EatTime=0
         UO.DeleteJournal()
      end if
      if SpiritTime+3000<UO.Timer() and UO.SkillVal("Spirit Speak")<1000 then
         SpiritSpeak()
         SpiritTime=UO.Timer()
         UO.DeleteJournal()
      end if
      if skillnum==6 then
         UO.WaitTargetObject(target, target)
         UO.UseObject(UO.ObjAtLayer('Lhand'))
      else
         if skillnum==10 then
            UO.UseSkill(skill)
         else
            if skillnum==11 then
               UO.UseObject(target)
            else
               UO.WaitTargetObject(target)
               UO.UseSkill(skill)
            end if
         end if
      end if
      if skillnum==4 or skillnum==9 or skillnum==10 or skillnum==11 then
         wait(3000)
      else
         halt=0
         repeat
            wait(500)
            halt=halt+1
         until UO.InJournal(msg1) or UO.InJournal(msg2) or UO.InJournal(msg3) or UO.InJournal(msg4) or UO.InJournal(msg5) or UO.InJournal(msg6) or UO.InJournal(msg7) or halt >= 40
      end if
      EatTime=EatTime+1
   wend
end sub

Sub Tracking()
   var ht
   if UO.SkillVal("Tracking")<1000 then
      UO.CancelMenu()
      UO.AutoMenu("Tracking", "Anything")
      UO.DeleteJournal()
      while UO.SkillVal("Tracking")<1000
         UO.DeleteJournal()
         UO.UseSkill('Tracking')
         ht = 0
         repeat
            wait(200)
            ht = ht + 1
         until UO.InJournal("You see no signs|You have lost|Tracking Cancelled") or ht > 10
         EatTime=EatTime+1
         if EatTime>=500 then
            Eat()
            EatTime=0
         end if
         if SpiritTime+3000<UO.Timer() and UO.SkillVal("Spirit Speak")<1000 then
            SpiritSpeak()
            SpiritTime=UO.Timer()
         end if
      wend
      UO.CancelMenu()
   end if
end sub

Sub Eat()
   while not UO.InJournal("simply too full")
      UO.UseObject(food)
      wait(500)
   wend
end sub

Sub SpiritSpeak()
   var smsg1="fail your attempt"
   var smsg2="connection"
   var smsg3="stop trying"
   var shalt
   repeat
      UO.DeleteJournal(smsg1)
      UO.UseSkill("Spirit Speak")
      shalt=0
      repeat
         wait(500)
         shalt=shalt+1
      until UO.InJournal(smsg1) or UO.InJournal(smsg2) or UO.InJournal(smsg3) or shalt>=40 or UO.Dead()
   until UO.InJournal(smsg2) or UO.InJournal(smsg3) or UO.Dead()
end sub