Askaneli Модератор

Награды: 6 [детали]
Благодарностей: 52
Зарегистрирован: 29.01.2007 Сообщения: 5627 Откуда: Уфимский схрон
|
Добавлено: 05.05.2008 10:09 Заголовок сообщения: |
|
|
Наколенная сборка без проверки. Необходимо тщательное тестирование на работоспособность.
Особенности - хз, спрашиваем в асю ...
'Training.txt' файл создайте для лога в папке инжи. Используется АСМ.
Код: | #############################################################################
#################### Train Archery crafted by Askaneli ####################
#################### Шард DRW (http://www.drw.ru) ####################
#################### Отдельное спасибо за наводку Guesst ####################
#################### Отдельное спасибо за модули Sfagnum ####################
#############################################################################
Var RejimSC=2 ; Режим работы скрипта, 1 - арчер, 2 - кастующий
Var Sunduk='0x40043143' ; ИД сундука где все ресурсы, луки и стрелы, реги для вортекса или скролы для вортекса, кормёжка для чаров
Var xVortex='505',yVortex='1290',zVortex='251' ; Координаты куда кастуем вортекса, не далее 2х тайлов от берега, а то стрелы не достаёт упавшие
Var TBow='0x13B1' ; Тип оружия которое будем использовать, лук типа сча
## Запускаемый модуль
sub main()
uo.exec("filterspeech clear")
uo.exec("filterspeech off")
uo.exec("set finddistance 3")
uo.sayu(".detail 0")
uo.useobject(Sunduk)
uo.useobject('backpack')
wait(1000)
uo.exec("exec main0"+STR(RejimSC))
uo.Exec('terminate Reconnector')
wait(1000)
uo.Exec('exec Reconnector')
wait(1000)
end sub
## Модуль арчера
Sub main01()
var Vortex='0x40043143',check = false
var arN,arT,arE,qV = 0
var sk=uo.skillval("Archery",1)
uo.exec("warmode 1")
arN = uo.count('0x0F3F','0x0000')
arE = arN
while not uo.dead()
if uo.IsNPC(Vortex) then ## Есть вортекс, просто следим за количеством стрел и наличием лука
if uo.skillval("Archery",1) == 1000 then
uo.asmLogAdd('Training.txt', UO.asmGetDate('dd/mm/yy')+" - "+UO.asmGetTime('hh:nn:ss')+" YES!!! GM Archery!!!")
uo.closeuo()
end if
if uo.count('0x0F3F','0x0000')<50 then ; Стрелы, пополняем из сундука
arT = uo.count('0x0F3F','0x0000')
uo.findtype('0x0F3F','0x0000',Sunduk)
Cheklag()
uo.moveitem('finditem','100','backpack')
wait(1000)
arE = arE + uo.count('0x0F3F','0x0000')-arT
end if
if uo.GetGraphic(uo.ObjAtLayer('Lhand'))<>TBow then ; Оружие в руке, при отсутствии берём из сундука
uo.findtype(TBow,'-1','backpack')
if uo.findcount()>0 then
uo.usetype(TBow)
wait(1000)
else
uo.findtype(TBow,'-1',Sunduk)
Cheklag()
uo.moveitem('finditem','1','backpack')
wait(1000)
uo.usetype(TBow)
wait(1000)
end if
end if
if not check then
check = true
qV = qV + 1
end if
else ## Нету вортекса, ищем следующего, попутно подбираем стрелы в пак с земли. Пишем отчётик о состоянии скила в лог. Кушаем до полного.
if check then
if sk <> uo.skillval("Archery",1) then
uo.asmLogAdd('Training.txt', UO.asmGetDate('dd/mm/yy')+" - "+UO.asmGetTime('hh:nn:ss')+" ::на поднятие скила потратил " + str(arE-ArN) + ", потребовалось " + str(qV) + " вортексов, состояние скила арчери - "+STR(uo.skillval("Archery",1)/10))
arN = uo.count('0x0F3F','0x0000')
arE = arN
qV = 0
sk = uo.skillval("Archery",1)
end if
Eda()
check = false
end if
uo.findtype('0x000D','0x000D','ground')
if uo.findcount()>0 then
Vortex=uo.getserial('finditem')
UO.attack(Vortex)
end if
end if
wait(1000) ; Опрос состояния каждую секунду
if uo.injournal('SkokaAR') then
uo.say(STR(uo.skillval("Archery",1)/10))
uo.deletejournal()
end if
wend
uo.closeuo()
end sub
## Модуль кастующего
Sub main02()
var Vortex='0x40043143'
var i
dim ResursCast[5]
ResursCast[1]='0x1F66' ## Energy Vortex Scroll
ResursCast[2]='0x0F7B' ## BM
ResursCast[3]='0x0F7A' ## BP
ResursCast[4]='0x0F86' ## MR
ResursCast[5]='0x0F88' ## NS
uo.exec("warmode 0")
uo.findtype('0x000D','0x000D','ground') ; Стартовый поиск вортекса, на всякий случай ...
if uo.findcount()>0 then
Vortex=uo.getserial('finditem')
end if
while not uo.dead()
if not uo.IsNPC(Vortex) then ## Нету вортекса, кастуем его что бы был , если есть кому качать арчери, ну и реги за одно пополняем и кушаем, чёб голодным не был чар
if ChekArcher() then
while not castuni(40,'0x1F66','Energy Vortex')
for i=2 to 5
if uo.count(ResursCast[i],'0x0000')==0 then
uo.findtype(ResursCast[i],'0x0000',Sunduk)
Cheklag()
if uo.findcount()>0 then
uo.moveitem('finditem',str(10-uo.count(ResursCast[i],'0x0000')),'backpack')
wait(1000)
end if
end if
next
wend
uo.findtype('0x000D','0x000D','ground')
if uo.findcount()>0 then
Vortex=uo.getserial('finditem')
for i=2 to 5
if uo.count(ResursCast[i],'0x0000')<10 then
uo.findtype(ResursCast[i],'0x0000',Sunduk)
Cheklag()
if uo.findcount()>0 then
uo.moveitem('finditem',str(10-uo.count(ResursCast[i],'0x0000')),'backpack')
wait(1000)
end if
end if
next
Eda()
ToMedit()
end if
end if
end if
wait(1000) ; Опрос состояния каждую секунду
if uo.injournal('StopP!!!') then
uo.closeUO()
end if
if uo.mana==uo.int then
ToHide()
end if
uo.findtype('0x0F3F','0x0000','ground')
if uo.findcount()>0 then
Cheklag()
uo.moveitem('finditem','-1',Sunduk)
wait(1000)
end if
wend
uo.closeuo()
end sub
## Вспомогательные модули
Sub ChekArcher()
var i
Dim Archers[5]
Archers[1]='0x001B290C' ## Askaneli
Archers[2]=''
Archers[3]=''
Archers[4]=''
Archers[5]=''
for i=1 to 5
if uo.IsNPC(Archers[i]) then
if Archers[i]<>uo.getserial('self') then
return true
end if
end if
next
return false
end sub
Sub Eda()
if uo.count('0x097B','0x0000')<50 then ## Жрачка, кушаем до изнеможения
uo.findtype('0x097B','0x0000',Sunduk)
Cheklag()
uo.moveitem('finditem',STR(50-uo.count('0x097B','0x0000')),'backpack')
wait(1000)
end if
uo.deletejournal()
repeat
uo.usetype('0x097B','0x0000')
wait(1000)
until uo.injournal("You are stuffed!") or uo.injournal("You can't think of a way to use that item.")
end sub
Sub Cheklag()
UO.DeleteJournal()
UO.Click('backpack')
Repeat
Wait(10)
Until UO.InJournal("backpack")
end sub
Sub ToMedit()
while uo.mana<40
uo.warmode(0)
uo.deletejournal()
uo.useskill('Meditation')
repeat
wait(10)
until uo.injournal("You lose your concentration") or uo.injournal("You are at peace.") or uo.mana>40
wend
end sub
Sub ToHide()
while not uo.hidden()
uo.warmode(0)
uo.DeleteJournal()
uo.useskill("Hiding")
repeat
wait(10)
until UO.InJournal("You have hidden yourself well") or UO.InJournal("You can't seem to hide here.") or UO.InJournal("You are preoccupied with thoughts of battle.") or uo.dead()
if UO.InJournal("You are preoccupied with thoughts of battle.") then
uo.warmode(0)
end if
if uo.dead() then
return
end if
wend
end sub
Sub castuni(minMANA,sType,cName)
var t = UO.Timer(),m = UO.MANA
uo.exec("warmode 0")
repeat
UO.FindType(sType,-1,'my')
If UO.findcount()>0 then
if uo.mana<(minMANA/2) then
ToMedit()
end if
m = UO.MANA
uo.DeleteJournal()
uo.waittargettile('400',xVortex,yVortex,zVortex)
UO.UseObject('finditem')
else
if uo.mana<minMANA then
ToMedit()
end if
m = UO.MANA
uo.DeleteJournal()
uo.waittargettile('400',xVortex,yVortex,zVortex)
uo.cast(cName)
end if
t = UO.Timer()
repeat
wait(10)
until IsMyOwn('You have interrupted') or IsMyOwn(uo.getname()+': The spell fizzles.') or IsMyOwn('You lack') or t+200<uo.Timer() or m > UO.MANA
wait(500)
if IsMyOwn('You lack') then
return false
end if
until not (IsMyOwn('You have interrupted') or IsMyOwn(uo.getname()+': The spell fizzles.'))
return true
end sub
Sub IsMyOwn(msgSTR)
if not UO.InJournal(msgSTR) then
return false
end if
if msgSTR == Left(UO.Journal(UO.InJournal(msgSTR)-1),len(msgSTR)) then
return true
else
return false
end if
end sub
## Модуль реконекта
Sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (uo.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(110000) # WorldSave Protection
uo.Say('')
Wait(5000)
uo.Say('')
Wait(5000)
uo.Say('')
Wait(5000)
uo.LDblClick(357,164)
uo.LClick(616,459)
Wait(5000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.asmLogAdd('Training.txt', UO.asmGetDate('dd/mm/yy')+" - "+UO.asmGetTime('hh:nn:ss')+" - "+"Упс. Ребут типа !!!")
uo.Exec('terminate main01')
uo.Exec('terminate main02')
wait(5000)
uo.RClick(196,193)
wait(2000)
uo.RClick(196,193)
wait(2000)
uo.RClick(196,193)
wait(2000)
uo.RClick(196,193)
wait(2000)
uo.Exec('exec main')
wait(5000)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub
Sub MakeTime()
VAR D, T, Ret, i
Ret = STR(uo.Time())
T = ""
For i = 0 To Len(Ret)
T = Ret[Len(Ret)-i] + T
If (I == 2) OR (I == 4) Then
T = ":" + T
EndIf
Next
Ret = STR(uo.Date())
D = ""
For i = 0 To Len(Ret)
D = Ret[Len(Ret)-i] + D
If (I == 2) OR (I == 4) Then
D = "." + D
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub |
> > > модуль арчера - отесчен, лог изменён.
> > > модуль кастера - модернизирован. _________________ "Весь мир в предвкушении очередного апокалипсиса, у нас в стране он судя по всему уже прошёл..." Askaneli.
|
|