Четверг, 2025-07-17, 7:02 AM
Приветствую Вас Прохожий | RSS
 
Главная страница | Полезные процедуры-) - Форум гильдии Gelezinis Vilkas | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PAR  
Полезные процедуры-)
PARДата: Среда, 2006-12-13, 4:16 AM | Сообщение # 1
Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
Если вам стало недостаточно готовых чужих скриптов, в которых не все сделано так, как было бы удобнее для вас, значит пришло время создать свой собственный скрипт.
Сия тема поможет вам сделать это не придумывая веллосипедов и не перекапывая пол инета в поисках нужного кусочка скрипта)

Пример использования процедуры:

допустим у вас дефолтовый скрипт
Code

sub main()
#программа
end sub

чтобы использовать в нем дополнительнцю процедуру "blabla" нада переписать скрипт следующим образом:

var Pizza=0x1040

sub main()
#программа
blabla(1234,Pizza,"niam")
#программа
end sub

sub blabla(number,item,string)
#процедура
end sub

Опытных скриптеров подобные подробности насмешат, однака возможно комуто они пригодятся)

Процедуры, использующие объекты требуют указывать их идентификатор (ИД)

чтобы узнать ИД объекта (допустим той-же пиццы) нужно набрать в уо комманду ,info
и выбрать искомый объект.

Впрочем перейду уже к процедуркам:

----- Телепорт через рунбук -----
Code

sub RunebookRecall(RuneBookID,RuneNum)
var x,y
x=UO.GetX()
y=UO.GetY()

UO.Exec('warmode 0')
UO.UseObject(RuneBookID)

while x==UO.GetX() and y==UO.GetY()
wait(200)
if RuneNum<=8 then
UO.LClick(63,(RuneNum-1)*15+69)
endif
if RuneNum>8 then
UO.LClick(212,(RuneNum-9)*15+69)
endif
wend
end sub

функция телепортирует вас по указанной руне в указанном рунбуке, требуется знать ИД рунбука)

пример использования:
Code

RunebookRecall(0x60B70413,10)

----- Перезарядить рунбук -----
Code

sub RechargeRunebook(RunebookID)
UO.DeleteJournal()
while not UO.InJournal('recharge')
UO.UseObject(RunebookID)
UO.WaitTargetType(0x1f4c)
wait(2000)
UO.LClick(244,23)
wend
end sub

пример использования:
Code

RechargeRunebook(0x60B70413)

----- Простой реконнектор -----
Code

sub Reconnector(ResolutionMode)
if UO.ObjAtLayer('Bpack') == '' then
UO.DeleteJournal()
wait(20000)
UO.Press(40,10,100)
wait(5000)

if ResolutionMode==640 then
UO.LClick(318,269) #640x480
endif
if ResolutionMode==800 then
UO.LClick(400,328) #800x600
endif

wait(5000)
while UO.ObjAtLayer('Bpack') == ''
wait(100)
UO.LClick(317,315)
wait(100)
UO.LClick(318,269)
wait(3000)
UO.LClick(615,456)
wait(3000)
UO.LClick(615,456)
wait(3000)    
UO.LClick(615,456)
wait(3000)
UO.LClick(615,456)
wait(5000)
wend
endif
end sub

Процедура проверяет наличие связи и реконнектит вас если связь оборвана. Может быть использована как отдельный скрипт.

пример использования:
Code

Reconnector(800)

Установите параметр на 800, если разрешение ультимы у вас 800*600 или 640, если разрешение 640*480

Сообщение отредактировал mont - Пятница, 2007-06-01, 2:59 AM
 
PARДата: Среда, 2006-12-13, 4:17 AM | Сообщение # 2
Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
----- Закрыть ультиму -----
Code

sub CloseUO(ResolutionMode,Key)
UO.Press(Key)
Wait(2000)
if ResolutionMode==640 then
UO.LClick(390,304) #640x480
endif
if ResolutionMode==800 then
UO.LClick(433,333) #800x600
endif
end sub

В отличие от готовых функций инжекта (например UO.CloseUO()), не вызывает ошибку приложения.
Для работы данной функции требуется чтобы меню выхода открывалось по выбранной клавише.

пример использования:
Code

CloseUO(640,27)

Как и в прошлой процедуре, первый параметр это разрешение, а второй код кнопки выхода (27 - кнопка ESC)

----- Купить у вендора -----
Code

sub VendorBuy(Items,VendorName)
UO.DeleteJournal()
UO.Buy(Items,VendorName)
wait(100)
while not UO.InJournal('Greetings.') and not UO.InJournal('stock.')
wait(200)
wend
end sub

не требует дополнительной задержки после использования, покупает независимо от лагов)

пример использования:
Code

VendorBuy('items_list','Melissa')

items_list <- набор предметов с таким названием требуется создать в injection->main->buy\sell, тогда при использовании процедуры он будет куплен у вендора Melissa.
Если вы не хотите указывать имя вендора то второй параметр следует сделать 'vendor', тогда покупка произойдкт у блжайшего продавца.

----- Продать вендору -----
Code

sub VendorSell(Items,VendorName,SellingDelay)
var VendorVelocity=0
UO.DeleteJournal()
UO.Sell(Items,VendorName)
wait(100)
while not UO.InJournal('total') and not UO.InJournal('sold.') and not UO.InJournal('stock.') and VendorVelocity<SellingDelay/200
wait(200)
VendorVelocity=VendorVelocity+1
wend
end sub

Также, как и предидущая функция, не требует дополнительной задержки после использования и покупает независимо от лагов. Ктомуже на случай если аендор не отвечает (например при переполнени вендора) предусмотрена максимальная задержка отклика SellingDelay.

пример использования:
Code

VendorSell('items_list','Melissa',3000)

items_list <- набор предметов с таким названием требуется создать в injection->main->buy\sell, тогда при использовании процедуры он будет продан вендору Melissa.
Если вы не хотите указывать имя вендора то второй параметр следует сделать 'vendor', тогда вы продадите блжайшему продавцу.
Последний параметр SellingDelay это время ожидания ответа от вендора, при средних лагах советую 3000))

----- Разрезать все предметы определнного вида -----
Code

sub CutItems(Item)
while UO.Count(Item)<>0
UO.WaitTargetType(Item)
UO.UseType(0x0f9e)
repeat
wait(10)
until UO.InJournal('material') or UO.InJournal('object>!')
UO.DeleteJournal()
wend
end sub

Необходимо чтобы в бэкпаке были ножницы. Будет резать пока не кончится указанный тип вещей или пока не сломаются все ножницы.

пример использования:
Code

CutItems(0x13db) #StuddedTunic

----- Положить шмотку в сундук (ящик) -----
Code

sub Put(Item,Syndyk)
UO.UseObject(Syndyk)
while UO.Count(Item)>0
UO.FindType(Item)
UO.MoveItem('finditem','0',Syndyk)
wait(1000)
wend
UO.Resend()
UO.Hide(Syndyk)
end sub

Складывает все вещи типа Item в сундук

пример использования:
Code

Put(0x0eed,0x62a55aaf)

Первый параметр - ИД шмотки (в данном случае золота:), 2й - ИД сундука

----- Взять из сундука (ящика) -----
Code

sub Take(Item,Count,Syndyk)
var PrevItemCount=UO.Count(Item)
UO.UseObject(Syndyk)
UO.FindType(Item,'0x0000',Syndyk)
wait(1000)

if UO.GetQuantity('finditem')>0 Then
wait(1000)
UO.MoveItem('finditem',Count,'backpack')
wait(1000)
endif

while PrevItemCount==UO.Count(Item)
wait(200)
if UO.GetQuantity('finditem')==0 Then
wait(1000)
PrevItemCount=-10
endif
wend
UO.Resend()
UO.Hide(Syndyk)
end sub

Процедура позволяет переложить указанное кол-во предмета из сундука в бэкпак
Т.к. во время перекладывания могут быть задержки, процедура будет ожидать пока вещи не переложатся.

пример использования:
Code

Take(0x0eed,'10000',0x62a55aaf)

Первый параметр - ИД шмотки (в данном случае золота:), 2й - количество (сколько нвдо взять) и 3й - ИД сундука

Сообщение отредактировал mont - Пятница, 2007-06-01, 3:01 AM
 
foxДата: Среда, 2006-12-13, 8:41 PM | Сообщение # 3
Рядовой
Группа: Проверенные
Сообщений: 3
Статус: Offline
неработает реканнектор пишет инваилд намбер оф аргументс

что надо исправить в реконнекторе? чтобы он заработал разрешение 640


Нубоскриптер нид бекап
 
PARДата: Четверг, 2006-12-14, 1:10 PM | Сообщение # 4
Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
Вроде все работает..

Для единичного запуска реконнектора внутри скрипта нада пускать его вотак:
Code

Sub Main()
#code
Reconnector(800)
#code
end sub

При этом реконнектор один раз проверит наличие связи и реконнектится если связь отсутствует. Точнее оно будет пытаться реконнектиться до тех пор пока не зайдет в ультиму.

чтобы сама функция превратилась в скрипт для реконнекта надыть кое что добавить в нее:
Code

sub AutoReconnector()
var ResolutionMode=640
var Message2Close='CloseReconnector'

var ReconnectorInUse=1

while ReconnectorInUse==1
UO.DeleteJournal()
if UO.ObjAtLayer('Bpack') == '' then
wait(20000)
UO.Press(40,10,100)
wait(5000)

if ResolutionMode==640 then
UO.LClick(318,269) #640x480
endif
if ResolutionMode==800 then
UO.LClick(400,328) #800x600
endif

wait(5000)
while UO.ObjAtLayer('Bpack') == ''
wait(100)
UO.LClick(317,315)
wait(100)
UO.LClick(318,269)
wait(3000)
UO.LClick(615,456)
wait(3000)
UO.LClick(615,456)
wait(3000)  
UO.LClick(615,456)
wait(3000)
UO.LClick(615,456)
wait(5000)
wend
endif

wait(5000)
if UO.InJournal(Message2Close) then
ReconnectorInUse=0
endif
wend
end sub

Это уже готовый скрипт для автоматического реконнекта, гарантирующий вам вечный онлайн))

При таком ее использовании надо настроить следующие параметры:
var ResolutionMode=640 <-- разрешение экрана
var Message2Close='CloseReconnector' <-- Сообщение в ультиме, по которому закроется скрипт реконнектор

Скрипт будет выложен в раздел "файлы" -)

Сообщение отредактировал mont - Пятница, 2007-06-01, 3:01 AM
 
PARДата: Четверг, 2007-01-04, 6:32 AM | Сообщение # 5
Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
----- Запись рекалов -----
Code

sub Inscript(SBID)
var BlankScroll=0x0E34
var BlankScroll4WTO='^0x0E34'
var BlankScrollsInPack=1

while BlankScrollsInPack==1 and UO.SkillVal("Inscription",1)>450
while UO.Mana>=50 and UO.Count(BlankScroll)>0
UO.DeleteJournal()
UO.WaitMenu('Select','Circle 4','Select','Recall')
UO.WaitTargetObject(BlankScroll4WTO,SBID)
UO.UseSkill("Inscription")

while not UO.InJournal('enough mana') and not UO.InJournal('move and stop') and not UO.InJournal('finish') and not UO.InJournal('perform')
wait(100)
wend
wend

wait(3000)

while UO.Mana<UO.Int
UO.DeleteJournal()
UO.UseSkill("Meditation")
while not UO.InJournal('You are unable to concentrate') and not UO.InJournal('You stop meditating') and not UO.InJournal('perform')
wait(100)
wend
wend

if UO.Count(BlankScroll)<1 then
BlankScrollsInPack=0
endif
wend
end sub

Создает рекалы из бланков, пока последние не закончатся.

Пример использования:

Inscript(0x6282172A)

Единственный параметр - ИД спеллбука, с помощью которого будут создаваться свитки.

Сообщение отредактировал mont - Пятница, 2007-06-01, 3:02 AM
 
PARДата: Четверг, 2007-01-04, 6:49 AM | Сообщение # 6
Великий Скриптор
Группа: Модераторы
Сообщений: 149
Статус: Offline
----- Создать еду и покушать -----
Code

var AlreadyEaten=0

sub Eat(item)
if UO.Count(item)>0 and AlreadyEaten==0 then
UO.UseType(item)
AlreadyEaten=1
endif
end sub

sub CreateFoodnEat()
var Cake =0x09e9
var Muffins =0x09ea
var ChickenLeg =0x1608
var Ham =0x09c9
var Pizza =0x1040
var CookedBirds =0x09b7
var Spam =0x1044
var FishStake =0x097B
var Baranina =0x0F95

AlreadyEaten=0

if UO.Count(Cake)==0 and UO.Count(Muffins)==0 and UO.Count(ChickenLeg)==0 and UO.Count(Ham)==0 and UO.Count(Pizza)==0 and UO.Count(CookedBirds)==0 and UO.Count(Spam)==0 and UO.Count(FishStake)==0 and UO.Count(Baranina)==0 then
UO.Cast('Create Food')
wait(3000)
endif

Eat(Cake)
Eat(Muffins)
Eat(ChickenLeg)
Eat(Ham)
Eat(Pizza)
Eat(CookedBirds)
Eat(Spam)
Eat(FishStake)
Ea  t(Baranina)
end sub

За 1 запуск процедуры съедается 1 кусок любой пищи.
Если в вашем бэкпаке нет еды, то создаст еду, и съест ее. Если же
еда уже есть то создавать ничего не будет, а просто съест)
Code

пример использования:
#начало скрипта
var AlreadyEaten=0
#код
CreateFoodnEat()

Обязательно не забываем инициализировать переменную var AlreadyEaten=0
в начале скрипта. Впрочем, если этого не сделать, ничего страшного
не произойдет, только начнут хаваться сразу все виды пищи одновременно)

Также желательно наличие в рюкзаке спелбука с заклинанием Create Food и
элементарного навыка мажери (вроде 33 хватает)

Сообщение отредактировал mont - Пятница, 2007-06-01, 3:02 AM
 
  • Страница 1 из 1
  • 1
Поиск:

Gelezinis Vilkas © 2007
Конструктор сайтовuCoz