Page 1 of 1

Помогите вставить uo.say('Guards') Скрипт Ветра !

Posted: 2009-07-15 05:47:09
by Cony
Проблема такого рода - не кричит Гварда при: 1) Появлении энта 2) при появлении красного игрока 3) при уменьшении хп ! Настройки тавил все (1)

/

Code: Select all

########################################################## 
### Lumberjacking / Рубка деревьев v10.0 Final Version ### 
########################################################## 
###           Шард Dragon World / www.drw.ru           ### 
########################################################## 
### Внимание: 
### Для  работы скрипта нужна версия YokoInjection 4ZD. 
### Скачать dll этой версии можно                      
### от сюда: http://www.swines.nm.ru/injection.zip      
########################################################## 
### По вопросам и предложениям обращаться сюда: 
### ICQ: 333358386 [cOoler] 
### Авторы: 
### -За основу взят скрипт:"©Elthar aka Duo", 
### за что его автору большое спасибо. 
### -Редактировал и дополнял:"BETEPAH". 
### -Доработка и переработка скрипта:"cOoler". 
### -За неоценимую помощь спасибо:"Mafia". 
### -За коректнную помощь и идеи:"Аskaneli". 
### -За помощь в переработке скрипта спасибо:"Sfagnum". 
### -За помощь в доработке скрипта спасибо:"Legio". 
### -А также за систему подсчета логов спасибо:"Mguai". 
### Спасибо всем кто каким либо образом помогал в 
### разработке этого скрипта. 
########################################################## 
############################ 
### Описание и настройка ### 
############################ 
### Обратите внимание на значки "]![" ими выделенны важные сообщения. 
### 
### Чар бегает от дерева к дереву (координаты деревьев берет из файла). 
### Вырубит, бежит к следующему, при логах 700 штук в паке порталится домой скидывает логи в сундук, 
### после реколится обратно бежит к последнему дереву и продолжает рубить. 
### Пример: В файле 100 деревьев, вы вырубив 74 дошли до придела в 700 логов сработала система рекола 
### и вы "порталитесь" домой и складываете логи в сундук, после вы реколитесь обратно в лес и бежите к 75 дереву. 
### Дойдя до 100 дерева (тоесть последнего в списке) чар перейдет к 1ому дереву.(Цикличность) 
### 
#################### 
### Нововведения ### 
#################### 
### 1)Логи складываются не на пол а в сундук. [BETEPAH] 
### 2)Рекол в лес и домой по рунбуке (а не по рункам). [BETEPAH] 
### ]![ Внимание в скрипте номера рун в рунбуке настроены под ДРВ шард. ]![ [Шард] 
### 3)Система автомарка убрана и переделана в сомостоятельное маркирование деревьев 
### (раньше чар сам бегал по лесу и очень долго марчил деревья)теперь бегаем сами и просто прицелом по деревьям 
### (марчим также, как и раньше в руках кирка). [BETEPAH] 
### 4)Увеличен придел замаркированых деревьев до 500 шт. [BЕТЕРАН] 
### 5)Улучшена система хайда (ходим, не бегаем). [BЕТЕРАН] 
### 6)Добавлена система InfoLogs. [Mguai, доработана BETEPAH] 
### 7)Добавлен выбор кирки. [cOoler, доработана BETEPAH] 
### 8)Добавлена система защиты от ентов. [BETEPAH] 
### 9)Убыстрена система рекола при атаке. [cOoler] 
### 10)Добавлен реконнект. [FoX M, размещен cOoler] 
### 11)Добавлены новые функции выбор на атаку и реконект. [cOoler] 
### 12)Изменена система сброса логов в сундук. [cOoler] 
### 13)Полностью изменен(упращен) рекол. [cOoler] 
### 14)Добавлены выбор рун в рунбуке в лес и домой. [cOoler] 
### 15)Добавлен каст на нападающего. [cOoler] 
### 16)Добавлен выбор файла со звуком. [cOoler] 
### 17)Добавлен речарж(заполнение скролами) рунбуки. [cOoler] 
### 18)Добавлен рекол домой и выгруска логов после атаки. [cOoler] 
### 19)Добавлена функция употребления пищи. [cOoler] 
### 20)Полностью изменена функция употребления пищи. [cOoler] 
### 21)Переработана система речаржа рунбуки. [cOoler] 
### 22)Модифицированна система перемещения предметов. [Sfagnum] 
### 23)Добавлена функция записи имен тех кто вас атачит. [cOoler] 
### 24)Добавлены коментарии.Добавлена контроля за количеством логов по весу. [Sfagnum] 
### 25)Убраны переходы при марке. [BETEPAH,Аskaneli] 
### 26)Переделана система ожидания сейва координат в файл. [BETEPAH,Аskaneli] 
### 27)Убрана система Area. [BETEPAH,Аskaneli] 
### 28)Добавлена система подсчета деревьев. [BETEPAH,cOoler,Аskaneli] 
### 29)Увеличен предел деревьев до 5000 шт. [BETEPAH,Аskaneli] 
### 30)Переработана функция рекола при атаке.(подробнее в "Рекол при Атаке") [cOoler,Legio] 
### 31)Введена функция выхода из UO после рекола от атакующего. [cOoler] 
### 32)Введена функция цикличности скрипта. [cOoler] 
### 33)Переработына функции рекола и контроля за опасностью. [cOoler] 
### 34)Поправлено множество багов и переработаны некоторые функции. [cOoler] 
### 35)Исправлена функция перемещения предметов. [cOoler] 
### 36)Пришлось отказаться от системы перемещения, т.к. она была очень нестабильной. [cOoler] 
### 37)Удалены функции речаржа рунбуки и хаванья, хавку удалю вообще, а речарж вскоре появиться. [cOoler] 
### 38)Изменена функция рекола по руне от ПК(физлануть нельзя). [cOoler] 
### 39)Теперь сундук указывается вместе с рунбукой и руной... после указания чар реколиться в лес автоматом. [cOoler] 
### 
### ]![ Из-за изменения скрипта и введения новых функций рекомендую почитать описание. ]![ 
### ]![ При Возникновении ошибок или глюков пишите в ICQ! ]![ 
### ]![ Чтобы скрипт заработал внимательно прочтите настройки. ]![ 
### 
################################### 
###    Режимы работы скрипта    ###    
################################### 
###   Работает в 2х режимах:    ### 
###   1)Маркировка              ### 
###   2)Рубка                   ### 
################################### 
### Режим Первый - "Маркировка" ### 
################################### 
### Этот режим отвечает за Маркирование(записывание координат) деревьев. 
### Включается переменной var GetFromFile=0 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента. 
### То есть если GetFromFile=0 координаты деревьев собиратся из клиента. 
### 
### Маркировка происходит так: 
### Поставте переменную GetFromFile равную 0 (GetFromFile=0). 
### Положите к себе в сумку Топор, Рунбук(с рунами домой и в лес), Руну(в безопасное место) и Кирку. 
### Идите в лес в котором вы хотите рубить. 
### Запустите Скрипт GoLumberjacking(), инжект попросит вас указать Топор 
### (появится прицел,прицелом на топор который вы с собой взяли), 
### потом инжект попросит вас указать Рунбук(появится прицел,прицелом на него) и Руну в безопасное место(прицелом на нее). 
### Инжект сообщит вам что ('Собираем координаты деревьев в округе...'). 
### Инжект попросит вас указать Кирку(появится прицел,прицелом на неё). 
### Теперь вы должны в любом порядке сами прицелом указать координаты(достаточно просто нажать прицелом на дерево). 
### Если вы не промахнулись и "нажали" на дерево, то инжект сообщит вам об этом(Найдено дерево "координаты дерева"). 
### Причем что если даже вы нажмете два раза на одно дерево то он не "запомнит" его повторно. 
### Ходите по лесу и марчите деревья. 
### Для того чтобы остановить марк нажмите таргетом на себя. 
### Инжект напишет вам сообщение ('Анализ закончен, координаты деревьев записаны в файл' +FileName) и создаст файл на диске 
### С:\ куда запишет координаты деревьев. 
### После этого чар пойдет по координатам и будет вырубать деревья. 
### 
############################## 
### Режим Второй - "Рубка" ### 
############################## 
### Этот режим соответственно отвечает за рубку. 
### Включается переменной var GetFromFile=1 ## 1 - координаты деревьев будут считыватся из файла, 0 - собиратся из клиента 
### То есть если GetFromFile=1 координаты деревьев будут считыватся из файла. 
### И вам не надо будет сново марчить деревья. 
### 
### Рубка происходит так: 
### Поставте переменную GetFromFile равную 1 (GetFromFile=1). 
### Положите к себе в сумку Топор и Рунбук(с рунами домой и в лес). 
### ]![ Внимание руны в рунбуке вы можете указать в переменных RuneToHome=4 и RuneToForest=5(вместо 4 и 5 номера ваших рун). ]![ 
### После установок рун в рунбук. 
### ]![ Внимание в скрипте система рекола по рунбуке настроена под ДРВ шард. ]![ 
### 
######################################## 
###  Дополнительные функции скрипта  ### 
######################################## 
###    В скрипте 2е доп. функции:    ### 
###    1)Рекол при Атаке             ### 
###    2)Реконнект                   ### 
######################################## 
### Функция Первая "Рекол при Атаке" ### 
######################################## 
### Этот режим соответственно отвечает за Рекол при атаке ентов и не только(также стоит проверка на ПК и Криминалов). 
### Включается переменной var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 - отключить рекол. 
### То есть если ControlOfDanger=1 чар будет реколиться при атаке. 
### 
### Побег происходит так: 
### Поставте переменную ControlOfDanger равную 1 (ControlOfDanger=1). 
### Замарчите Руну в безопасном месте. 
### Положите к себе в сумку 
### Руну(которую замарчили в безопасном месте), Реагенты(Black Pearls,Blood Moss,Mandrake Root.) 
### и Бутылки расчитывая на то сколько вы хотите рубить.(Invizible Potion,Mana Potion,Heal Potion). 
### При атаке, появлении ПК или криминала вы выпиваете Invizible Potion, автоматически телепортитесь на то место, 
### где замаркана руна(в бакпаке). 
### В это время записывается имя того кто вас атачил. 
### После рекола руна маркается и проверяется ваша мана и здоровье, если чегото меньше, 
### чар выпивает Mana Potion или Heal Potion в зависимости от надобности. 
### 
###################################### 
### Вариант Первый - "Цыкличность" ### 
###################################### 
### Есди вы хотите чтобы скрипт не прекращал свою работу, то поставьте переменную CycleScript раную 1 (CycleScript=1). 
### Теперь после рекола скрипт не будет выключаться, а будет ждать указанное время(DangerousTime) и затем 
### реколиться домой, речаржить рунбуку, есть и опять реколиться на место рубки и рубить. 
### 
##################################### 
### Вариант Второй - "Выключение" ### 
##################################### 
### Есди вы хотите чтобы скрипт не прекращал свою работу, то поставьте переменную CycleScript раную 0 (CycleScript=0), 
### Теперь после рекола скрипт выключится и закроет окно UO. 
### 
###################################### 
###  Функция Вторая - "Реконнект"  ### 
###################################### 
### Этот режим соответственно отвечает за Реконнект при выкидывании с сервера. 
### Включается переменной var Reconnect=0 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить реконнект. 
### То есть если Reconnect=1 чар будет реколиться при атаке. 
### 
### Реконнект происходит так: 
### Поставте переменную Reconnect равную 1 (Reconnect=1). 
### Если вдруг повиснет игровая сфера или вас выкинет по любой другой причине 
### реконнектор законнектит вас на сервер автоматически. 
### Пишется время дисконнекта и коннекта на сервер. 
### 
### ]![ Настройте скрипт под себя при помощи переменных. ]![ 
### 
################## 
### Переменные ### 
################## 
################################################################################################################## 
### 
var FileName=('D:\trees.dat') ## - Путь к файлу в котором будут хранится координаты деревьев. 
### 
var TryHiding=1 ## 1 - Перед тем как рубить дерево, будет пытаться уйти в хайд, 0 - не будет . 
### 
var TryRecall=1 ## 1 - После того как соберет LogsQty логов, будет пытаться реколиться домой, 
### складывать логи в сундук и реколиться обратно , 0 - не будет. 
### 
var RuneToHome=3 ## - Номер руны Домой,по счёту в рунбуке.(сейчас в 4ом слоте,можно менять от 1-9) 
### 
var RuneToForest=4 ## - Номер руны в Лес,по счёту в рунбуке.(сейчас в 5ом слоте,можно менять от 1-9) 
### 
var GetFromFile=1 ## 1 - Координаты деревьев будут считыватся из файла, 0 - собиратся из клиента 
### (сначала соберите а потом считывайте из файла). 
### 
var LogsQty=500 ## - Количество логов, добыв которое надо реколиться домой. 
### 
var QuantityImpact=15 ## - Сколько раз чар будет ударять по дереву, прежде чем перейдет к другому.(стандарт - 15) 
### 
var ControlOfDanger=1 ## 1 - Включить рекол по руне(в паке) при атаке, 0 - отключить рекол. 
### 
var DisturbingSound=('D:\Музыка\inna_-_hot_radio_edit') ## - Звук которы будет пригран при атаке.(замените на свой) 
### 
var DangerousTime=50000 ## - Время которое чар будет ждать(после рекола) пока уйдет ПК или Ент.(сейчас 50 секунд) 
### 
var CycleScript=1 ## 1 - Скрипт не отключается после рекола от атакующего, 0 - отключаетсяи закрывает UO. 
### 
var Reconnect=1 ## 1 - Включить реконнект на сервер если выкинет, 0 - отключить реконнект. 
### 
################################################################################################################## 
### 
### После настройки: 
### Идите в лес в котором вы хотите рубить. 
### Запустите cкрипт GoLumberjacking(), Инжект попросит вас указать Топор 
### (появится прицел, прицелом на топор который вы с собой взяли), 
### затем инжект попросит вас указать Рунбук(появится прицел, прицелом на него) ,Руну(прицелом на неё) и Сундук для логов. 
### После этого чар пойдет по координатам и будет вырубать деревья. 
########### 
### Код ### 
########### 
sub GoLumberjacking() 
uo.Print('Выбери Топор: ') 
uo.Exec('addobject Axe') 
while uo.Targeting() 
wait(100) 
wend 

if TryRecall==1 then 
uo.Print('Выбери PунБук: ') 
uo.Exec('addobject Runebook') 
while uo.Targeting() 
wait(100) 
wend 
end if 

if ControlOfDanger==1 then 
uo.Print('Выбери Руну: ') 
uo.Exec('addobject Rune') 
while uo.Targeting() 
wait(100) 
wend 
end if 

uo.Print('Выбери Сундук: ') 
uo.Exec('addobject Chest') 
while uo.Targeting() 
wait(100) 
wend 

if ControlOfDanger==1 then 
uo.Exec('exec ControlOfDanger') 
end if 

if Reconnect==1 then 
uo.Exec('exec Reconnect') 
end if 

RecallToLumber() 

uo.Exec('exec Lumberjacking') 
end sub 

sub Lumberjacking() 
var i=0,j=0,k=0,r=0,q=0,ii,jj,f 
var TopX=324,TopY=65 
dim TreeX[5000],TreeY[5000],TreeT[5000] 
dim TreeTile[29] 
var flag=0,TreeCount=0,clicks=0,flag2=0 
######################## 
### Графика деревьев ### 
######################## 
TreeTile[0]=3277 
TreeTile[1]=3280 
TreeTile[2]=3283 
TreeTile[3]=3286 
TreeTile[4]=3289 
TreeTile[5]=3291 
TreeTile[6]=3294 
TreeTile[7]=3296 
TreeTile[8]=3299 
TreeTile[9]=3302 
TreeTile[10]=3393 
TreeTile[11]=3394 
TreeTile[12]=3395 
TreeTile[13]=3396 
TreeTile[14]=3415 
TreeTile[15]=3416 
TreeTile[16]=3417 
TreeTile[17]=3418 
TreeTile[18]=3419 
TreeTile[19]=3438 
TreeTile[20]=3439 
TreeTile[21]=3440 
TreeTile[22]=3441 
TreeTile[23]=3442 
TreeTile[24]=3460 
TreeTile[25]=3461 
TreeTile[26]=3462 
TreeTile[27]=3290 
TreeTile[28]=3288 

uo.FilterSpeech('on') 
uo.FilterSpeech('add', 'Where do you want to use the pickaxe?') 

##################################### 
### Загружаем координаты из файла ### 
##################################### 
if GetFromFile==1 then 
uo.Print('Загружаем координаты из файла...') 
f=file(FileName) 
f.Open() 
TreeCount=safe call f.ReadNumber() 
for i=1 to TreeCount 
TreeT[i]=safe call f.ReadNumber() 
TreeX[i]=safe call f.ReadNumber() 
TreeY[i]=safe call f.ReadNumber() 
next 
f.Close() 
else 
###################################### 
### Собираем координаты из клиента ### 
###################################### 
uo.Print('Выбери Кирку: ') 
uo.Exec('addobject Pickaxe') 
while uo.Targeting() 
wait(100) 
wend 
uo.Print('Собираем координаты деревьев в округе...') 
repeat 
clicks=0 
flag=0 
uo.DeleteJournal() 
####################### 
### Кликаем на тайл ### 
####################### 
uo.UseObject('Pickaxe') 
waitForTarget() 
uo.DeleteJournal() 
WaitForTryRock() 
############################### 
### Проверяем дерево ли это ### 
############################### 
flag=0 
for k=0 to 28 
if uo.LastTile(0)==TreeTile[k]+1 then 
flag=2 
end if 
next 
if flag==0 then 
for k=0 to 28 
if uo.LastTile(0)==TreeTile[k] then 
flag=1 
end if 
next 
end if 
if uo.Lasttile(1)==uo.GetX() and uo.Lasttile(2)==uo.GetY() then 
flag=3 
end if 
######################### 
### Кликнули на ствол ### 
######################### 
if flag==1 then 
flag2=0 
if TreeCount>0 then 
for ii=1 to TreeCount 
if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==uo.LastTile(2) then 
flag2=1 
end if 
next 
end if 
if flag2==0 then 
TreeCount=TreeCount+1 
TreeX[TreeCount]=uo.LastTile(1) 
TreeY[TreeCount]=uo.LastTile(2) 
TreeT[TreeCount]=uo.LastTile(0) 
uo.Print('Найдено дерево номер '+str(TreeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) 
end if 
end if 
########################## 
### Кликнули по листве ### 
########################## 
if flag==2 then 
flag2=0 
if TreeCount>0 then 
for ii=1 to TreeCount 
if TreeX[ii]==uo.LastTile(1) and TreeY[ii]==uo.LastTile(2) then 
flag2=1 
end if 
next 
end if 
if flag2==0 then 
TreeCount=TreeCount+1 
TreeX[TreeCount]=uo.LastTile(1) 
TreeY[TreeCount]=uo.LastTile(2) 
TreeT[TreeCount]=uo.LastTile(0)-1 
uo.Print('Найдено дерево номер '+str(TreeCount)+' : x='+str(uo.Lasttile(1))+' y='+str(uo.LastTile(2))) 
end if 
end if 
until (flag==3) or (TreeCount==5000) 
uo.FilterSpeech('off') 
uo.Print('Анализ закончен, координаты деревьев записаны в файл ' + FileName) 
SaveToFile(TreeCount,TreeX,TreeY,TreeT) 
end if 
uo.Print('Деревьев найдено: '+str(TreeCount)) 
wait(2000) 
###################################### 
### Ходим по собранным координатам ### 
###################################### 
while 1==1 
if TreeCount>0 then 
for i=1 to TreeCount 
if TryRecall==1 and uo.Count('ZLK')>=LogsQty or uo.Weight>=uo.STR*4+20 then 
ToRecall() 
end if 
uo.Print('Идем к дереву номер '+str(i)+': x='+str(TreeX[i])+' y='+str(TreeY[i])) 
InfoLogs() 
flag=GotoXY(TreeX[i],TreeY[i]) 
if flag==1 then 
if TryHiding==1 then 
ToHide() 
end if 
GetTree(str(TreeT[i]),str(TreeX[i]),str(TreeY[i]),str(uo.GetZ())) 
end if 
next 
end if 
wend 
end sub 

sub SaveToFile(TreeCount,TreeX,TreeY,TreeT)  
var s=0,i=0,f 
f=file(FileName) 
f.Open() 
f.Create() 
s=safe call f.Writeln(TreeCount) 
for i=1 to TreeCount 
s=safe call f.Writeln(str(TreeT[i])+' '+str(TreeX[i])+' '+str(TreeY[i])) 
next 
f.Close() 
end sub 

sub GetTree(Type,X,Y,Z) 
var i 
uo.Print('Начинаем рубку дерева...') 
for i=0 to QuantityImpact 
if uo.Warmode()==1 then 
return 0 
end if 
wait(200) 
uo.DeleteJournal() 
uo.WaitTargetTile(Type,X,Y,Z) 
uo.UseObject('Axe') 
if WaitForChange()==1 then 
return 1 
end if 
next 
return 0 
end sub 

sub WaitForRecall() 
var Text1=uo.GetName()+': The spell fizzles.' 
var LastX=uo.GetX() 
var LastY=uo.GetY() 
var mess='' 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text1 then 
return 0 
end if 
if uo.GetX()<>LastX or uo.GetY()<>LastY then 
return 1 
end if 
wait(50) 
next 
return 0 
end sub 

sub WaitForHide() 
var Text1=uo.GetName()+': You have hidden yourself well' 
var Text2=uo.GetName()+": You can't seem to hide here." 
var mess 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text1 then 
return 1 
end if 
if uo.Journal(0)==Text2 then 
return 0 
end if 
wait(50) 
next 
return 0 
end sub 

sub WaitForChange() 
var Text1=uo.GetName()+': You hack at the tree for a while, but fail to produce any useable wood.' 
var Text2='There are no logs here to chop.' 
var Text3="You can't reach this." 
var Text4='That is too far away.' 
var Text5="You can't do much in your current state." 
var mess 
for var i=0 to 200 
mess=uo.Journal(0) 
if uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 then 
return 1 
end if 
if uo.Journal(0)==Text1 then 
return 0 
end if 
if mess[0]=='Y' and mess[1]=='o' and mess[2]=='u' and mess[4]=='p' and mess[5]=='u' and mess[6]=='t' then 
return 0 
end if 
wait(50) 
next 
return 0 
end sub 

sub WaitForTryRock() 
var Text1='That is too far away.' 
var Text2='Try mining in rock.' 
var Text3='There is no ore here to mine.' 
var Text4='You have no line of sight to that location' 
var Text5="You can't see the target" 
for var i=0 to 50 
if uo.Journal(0)==Text1 or uo.Journal(0)==Text2 or uo.Journal(0)==Text3 or uo.Journal(0)==Text4 or uo.Journal(0)==Text5 then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub WaitForTarget() 
for var i=0 to 50 
if uo.Targeting()==1 then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub WaitForChangeXY(MyX,MyY,LastX,LastY) 
for var i=1 to 50 
if LastX<>MyX or LastY<>MyY then 
return 1 
end if 
wait(200) 
next 
return 0 
end sub 

sub Open(Container) 
uo.DeleteJournal() 
uo.UseObject(Container) 
repeat 
wait(500) 
until uo.InJournal('Contains') 
end sub 

sub GotoXY(x,y) 
var myX,myY,LastX=0,LastY=0,i,halt=0,z,r=0 
for i=1 to 60 
myX=uo.GetX() 
myY=uo.GetY() 
if LastX==myX and LastY==myY then 
halt=halt+1 
else 
halt=0 
end if 
if halt>=10 then 
if uo.GetDir()==1 then 
for z=0 to 8 
uo.Press(40) 
next 
end if 
if uo.GetDir()==3 then 
for z=0 to 8 
uo.Press(37) 
next 
end if 
if uo.GetDir()==5 then 
for z=0 to 8 
uo.Press(38) 
next 
end if 
if uo.GetDir()==7 then 
for z=0 to 8 
uo.Press(39) 
next 
end if 
halt=15 
end if 
if Numb(x-myX)<=1 and Numb(y-myY)<=2 then 
return 1 
end if 
if x<=myX then 
if y<=myY then 
for z=0 to 3 
uo.Press(38) 
next 
else 
for z=0 to 3 
uo.Press(37) 
next 
end if 
else 
if y<=myY then 
for z=0 to 3 
uo.Press(39) 
next 
else 
for z=0 to 3 
uo.Press(40) 
next 
end if 
end if 
LastX=myX 
LastY=myY 
wait(200) 
next 
return 0 
end sub 

sub Numb(num) 
if num>=0 then 
return num 
else 
return num*(-1) 
end if 
end sub 

sub InfoLogs() 
uo.Print('У вас всего '+str(uo.Count('0x1BDD'))+' логов в сумке') 
uo.Print('Из них '+str(uo.Count('0x1BDD','0x0000'))+' простых и ' +str(uo.Count('0x1BDD')-uo.Count('0x1BDD','0x0000'))+' цветных') 
end sub 

sub ToHide() 
while not uo.Hidden() 
uo.Print('Пытаемся уйти в хайд...') 
uo.DeleteJournal() 
uo.Exec('warmode 0') 
uo.UseSkill('Stealth') 
wait(4100) 
wend 
wait(100) 
end sub 

sub ToRecall() 
RecallToHome() 
DropLogs() 
InfoLogs() 
RecallToLumber() 
end sub 

sub RecallToHome() 
uo.Print('Прыгаем Домой.') 
RuneBookRecall(RuneToHome) 
end sub 

sub RecallToLumber() 
uo.Print('Прыгаем в Лес.') 
RuneBookRecall(RuneToForest) 
end sub 

sub RuneBookRecall(n) 
var OldX=uo.GetX() 
var OldY=uo.GetY() 
var Time 
repeat 
uo.Exec('warmode 0') 
uo.UseObject('Runebook') 
CheckLag() 
uo.Lclick(135, n*15+55)  
CheckLag() 
Time=uo.Timer() 
repeat 
wait(500) 
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') or uo.InJournal('fizzles') or Time+200<uo.Timer() 
uo.DeleteJournal() 
until OldX<>uo.GetX() or OldY<>uo.GetY() or uo.Dead() or uo.InJournal('needs') 
end sub 

sub DropLogs() 
ToHide() 
repeat 
uo.FindType('0x1BDD') 
if uo.GetQuantity('finditem')>0 then 
uo.MoveItem('finditem','0','Chest') 
CheckLag() 
wait(500) 
until uo.Count('0x1BDD')<=0 or uo.Dead() 
end if 
end sub 

sub ControlOfDanger() 
var danger 
var RecallEnt=1 
var RecallPhysicalDanger=1 
var RecallSeenDanger=1 
var RecallBluePlayer=1 
while 1 
uo.DeleteJournal() 
while not uo.InJournal(':') 
wait(100) 
wend 
danger=uo.GetNotoriety(uo.JournalSerial(0)) 
if RecallEnt==1 then 
if uo.InJournal('OOPS') then 
uo.say("guards")
end if 
end if 
if RecallPhysicalDanger==1 then 
if uo.InJournal('attacking you') then 
uo.say("guards")
end if 
end if 
if RecallSeenDanger==1 then 
if danger==6 and uo.JournalSerial(0)<>uo.GetSerial() then 
uo.say("guards") 
end if 
if danger==4 and uo.JournalSerial(0)<>uo.GetSerial() then 
uo.say("guards")
end if 
end if 
if RecallBluePlayer==1 then 
if danger==1 and uo.JournalSerial(0)<>uo.GetSerial() then 
uo.say("guards")
end if 
end if 
wend 
end sub 

sub RecallRune() 
var MX=uo.GetX('self') 
var MY=uo.GetY('self') 
Terminate() 
uo.PlayWav(DisturbingSound) 
uo.UseType('0x0F0E','0x0631') 
wait(100) 
Recall: 
uo.DeleteJournal() 
if uo.Waiting() then 
uo.CancelTarget() 
end if 
uo.WaittargetObject('Rune') 
wait(100) 
uo.Cast('Recall') 
wait(3000) 
if not uo.GetX('self')<>MX and not uo.GetY('self')<>MY then 
goto Recall 
end if 
repeat 
uo.DeleteJournal() 
uo.WaittargetObject('Rune') 
uo.Cast('Mark') 
if uo.InJournal('mana for this spell') then 
ManaUp('Bottle') 
wait(100) 
end if 
wait(3000) 
until not uo.InJournal('spell fizzles') 
if uo.Life<uo.STR then 
LifeUp('Bottle') 
wait(100) 
end if 
if CycleScript==1 then 
uo.Exec('exec DangerWait') 
end if 
if CycleScript==0 then 
uo.Exec('exec ExitUO') 
end if 
end sub 

sub DisturbingSound(amount) 
var i 
for i=1 to amount 
uo.PlayWav(DisturbingSound) 
wait(1500) 
next 
end sub 

sub DangerWait() 
wait(DangerousTime) 
ToRecall() 
uo.Exec('exec Lumberjacking') 
end sub 

sub ExitUO() 
wait(3000) 
uo.CloseUO() 
end sub 

sub LifeUp(Mode) 
if Mode=='Healing' then 
while uo.Life<uo.STR 
uo.Exec('bandageself') 
wait(4000) 
wend 
end if 
if Mode=='Bottle' then 
if uo.Life<uo.STR then 
uo.UseType('0x0F0E','0x09BB') 
wait(100) 
end if 
end if 
end sub 

sub ManaUp(Mode) 
if Mode=='Meditation' then 
while uo.Mana<uo.INT 
uo.Exec('useskill Meditation') 
wait(4000) 
wend 
end if 
if Mode=='Bottle' then 
if uo.Mana<uo.INT then 
uo.UseType('0x0F0E','0x09DF') 
wait(100) 
end if 
end if 
end sub 

sub Reconnect() 
var ReconnectTime,rflag 
ReconnectTime='0' 
rflag=1 
repeat 
while (uo.ObjAtLayer('Bpack')=='') 
if rflag then 
ReconnectTime=Time() 
rflag=0 
end if 
wait(20000) 
uo.Say('') 
wait(3000) 
uo.Say('') 
wait(3000) 
uo.Say('') 
wait(3000) 
uo.Ldblclick(357,164) 
uo.Lclick(616,459) 
wait(3000) 
wend 
wait(3000) 
if (rflag==0) and (ReconnectTime<>'0') then 
uo.TextOpen() 
uo.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) 
rflag=1 
ReconnectTime='0' 
end if 
until false 
end sub 

sub Time() 
var Date,nTime,uTime,i 
uTime=str(uo.Time()) 
nTime='' 
for i=0 to Len(uTime) 
nTime=uTime[Len(uTime)-i]+nTime 
if (i==2) or (i==4) then 
nTime=':'+nTime 
end if 
next 
uTime=str(uo.Date()) 
Date='' 
for i=0 to Len(uTime) 
Date=uTime[Len(uTime)-i]+Date 
if (i==2) or (i==4) then 
Date='.'+Date 
end if 
next 
uTime=nTime+' @ '+Date 
return uTime 
end sub 

sub Terminate() 
uo.Exec('terminate Lumberjacking') 
end sub 

sub TerminateAll() 
uo.Exec('terminate Lumberjacking') 
uo.Exec('terminate ControlOfDanger') 
uo.Exec('terminate Reconnect') 
uo.Exec('terminate RecallRune') 
uo.Exec('terminate DropLogs') 
uo.Exec('terminate DangerWait') 
uo.Exec('terminate DangerWait') 
end sub 

sub CheckLag() 
if uo.Waiting()>0 then 
uo.Exec('canceltarget') 
end if 
uo.DeleteJournal() 
uo.Click('backpack') 
repeat 
wait(50) 
until uo.InJournal('backpack') 
end sub
/[Code]