Re: помогите со скриптом на убийство мобов
Posted: 2010-02-05 15:29:01
всё всем спасибо, нашёл то что искал-))
Mirage wrote:там 6 страниц скриптов ты хотя бы ссылку на сам скрипт дал
Code: Select all
var distance='4' # дистанция поиска мобов
var corpser=1 # 1-резать труп # 0-не резать труп
sub main()
var n, m, mob
var tweapon=uo.getserial(uo.objatlayer('Rhand'))
var tshield=uo.getserial(uo.objatlayer('Lhand'))
Dim npc[10]
npc[0]=2 # count
npc[1]='0x0018'
npc[2]='0x0038'
npc[3]=''
Dim loot[50]
loot[0]=2 # count
loot[1]='0x0EED'
loot[2]='0x0F7E'
loot[3]=''
uo.set('finddistance',distance)
while 1
for n=1 to npc[0]
uo.findtype(npc[n],-1,'ground')
if uo.findcount() then
uo.useobject(tweapon)
uo.useobject(tshield)
wait(100)
mob=uo.getserial('finditem')
kill(mob)
uo.useobject('lastcorpse')
checklag()
wait(1000)
for m=1 to loot[0]
while uo.getquantity('<'+loot[m])
uo.moveitem('<'+loot[m])
wait(700)
wend
next
while uo.life<uo.str-20 and uo.count('0x0E21')
uo.bandageself()
wait(3500)
wend
if uo.count('0x0E20') then
uo.waittargettype('0x1008')
uo.usetype('0x0E20')
wait(1000)
endif
endif
next
wait(1000)
wend
endsub
sub kill(mob)
var n
checklag()
for n=0 to 100
uo.attack(mob)
if uo.getdistance(mob)>1 then
walkn(0,0,mob)
endif
if uo.injournal('Body of') then
if corpser==1 then
uo.waittargetobject('lastcorpse')
wait(100)
uo.usetype('0x0F51')
wait(500)
endif
return
endif
wait(1000)
next
endsub
sub WalkN(x,y,Target) ########################################## Ходилка
VAR LastTimer
LastTimer=UO.Timer()
VAR i
VAR dir,ldir,rdir,key,olddir
VAR dx,dy,Exit=0
VAR CacheLimit=9,CacheIndex="Text"
DIM CacheX[10], CacheY[10]
CacheX[0]="Test"
uo.say('')
While Exit<>1
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<2 OR LastTimer+100<UO.Timer() Then
wait(1000)
return
Endif
Else
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 OR LastTimer+100<UO.Timer() Then
return
Endif
Endif
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then ; GoSE
dir=3
ldir=2
rdir=4
key=40 ; DownArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=0
rdir=1
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=5
rdir=6
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx>0 AND dy<0 Then ; GoNE
dir=1
ldir=0
rdir=2
key=39 ; RightArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=6
rdir=7
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 AND dy>0 Then ; GoSW
dir=5
ldir=4
rdir=6
key=37 ; LeftArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==6 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 AND dy<0 Then ; GoWN
dir=7
ldir=6
rdir=0
key=38 ; UpArrow
olddir=UO.GetDir()
If StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key) Then
If olddir==0 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then ; GoE
dir=2
key=34 ; PgDown
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=3
rdir=4
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoNE
dir=1
ldir=1
rdir=0
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dx<0 Then ; GoW
dir=6
key=36 ; Home key
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==0 Then ; GoWN
dir=7
ldir=7
rdir=0
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=4
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then ; GoS
dir=4
key=35 ; End
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoSE
dir=3
ldir=2
rdir=3
key=40 ; DownArrow
While UO.GetDir()<>3
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoSW
dir=5
ldir=6
rdir=5
key=37 ; LeftArrow
While UO.GetDir()<>5
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
If dy<0 Then ;GoN
dir=0
key=33 ; PgUp
olddir=UO.GetDir()
If StepEdit(UO.GetX(),UO.GetY(),dir,key) Then
If olddir==2 Then ; GoNE
dir=1
ldir=1
rdir=2
key=39 ; RightArrow
While UO.GetDir()<>1
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Else ; GoWN
dir=7
ldir=7
rdir=6
key=38 ; UpArrow
While UO.GetDir()<>7
StepArrow(UO.GetX(),UO.GetY(),dir,ldir,rdir,key)
Wend
Endif
Endif
Endif
Endif
Wend
end sub
sub StepEdit(x,y,dir,key)
VAR walkwait=150
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
CheckLag()
Endif
Endif
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
CheckLag()
If x==UO.GetX() AND y==UO.GetY() Then
;zatik
ErrLevel=1
Endif
Endif
Return ErrLevel
end sub
sub StepArrow(x,y,dir,ldir,rdir,key)
VAR walkwait=150
VAR ErrLevel=0
If UO.GetDir()<>dir Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir AND UO.GetDir()<>ldir AND UO.GetDir()<>rdir Then
CheckLag()
Endif
Endif
If UO.GetX()==x AND UO.GetY()==y Then
UO.Press(key)
wait(walkwait)
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
CheckLag()
If UO.GetDir()==dir AND UO.GetX()==x AND UO.GetY()==y Then
;zatik
ErrLevel=1
Endif
Endif
Endif
Return ErrLevel
end sub
sub checklag()
repeat
UO.DeleteJournal()
UO.Click('backpack')
until backpack()==1
endsub
sub backpack()
var n
for n=0 to 200
if uo.injournal('a backpack') then
return 1
endif
wait(200)
next
endsub
Code: Select all
sub test1()
var tweapon=uo.getserial(uo.objatlayer('Rhand'))
uo.usetype('0x0F51')
wait(500)
uo.useobject(tweapon)
endsub
sub test2()
var tshield=uo.getserial(uo.objatlayer('Lhand'))
uo.usetype('0x0F51')
wait(500)
uo.useobject(tshield)
endsub
sub test3()
var tweapon=uo.getserial(uo.objatlayer('Rhand'))
var tshield=uo.getserial(uo.objatlayer('Lhand'))
uo.usetype('0x0F51')
wait(500)
uo.useobject(tweapon)
uo.useobject(tshield)
endsub
sub test4()
var tweapon=uo.getserial(uo.objatlayer('Rhand'))
var tshield=uo.getserial(uo.objatlayer('Lhand'))
uo.usetype('0x0F51')
wait(500)
uo.useobject(tweapon)
wait(500)
uo.useobject(tshield)
endsub
Mirage wrote:Одеваешь оружие и щит (саблю какуюнибудь), берешь в пак пару ножиков типа 0x0F51, и по очереди запускаешь эти скрипты (перед запуском если сабля и/или щит не наденутся одеваешь их руками), отписываешься о результатах проверки всех тестов.
Всего скорее либо не хватает паузы на одевание. Но может быть что то еще. Кстати разьве щит скидывается при резке? И еще кстати - на некоторых шардах не все ножи одеваются на куклу. Например кливеры при использовании вызывают прицел для резки. По дефолту все оружие через даблклик режет и рубит без одевания.
Mirage wrote:второй отдельно возьми и поменяй тип даггера на тип любого лука, он тоже на левой руке. Если щит не наденется значит проблема со щитом.
Code: Select all
var x='1275' ; координата Х куда кастуем
var y='527' ; координата Y куда кастуем
var fighter='0x00198671' ; ИД того, кто качает боевые
var spirit='0x023E' ; тип блейд спирита
var bints='0x0E21' ; тип бинтов
var bloodbints='0x0E20' ; тип кровавых бинтов
var washbasin='0x1008' ; тип ванночки
var Svord='0x0E81' ; тип оружия
var Shield='' ; тип щита
var gh='0x0F0E' ; тип ГХ
var cgh='0x09BB' ; цвет ГХ
var i=3
####################### Настройки ##########################
#Кастер #
#в пак положить необходимые реги, одеть браслет маны, #
#включить TWI, перетащить статус файтера #
#Файтер #
#в пак положить ванночку, бинты, ГХ, одеть браслет жизни, #
#положить побольше оружия, включить TWI, одеть щит и оружие#
#################### Caster Spirits ########################
sub caster()
uo.set('finddistance','14')
while not uo.dead()
if i==3 then
i=0
castparaliz()
endif
i=i+1
castbladespirit()
meditation()
waitdiespirit()
waithealfighter()
wend
endsub
Sub castbladespirit()
uo.findtype(spirit,'-1','ground')
if uo.findcount() then
while uo.findcount()
wait(1000)
uo.findtype(spirit,'-1','ground')
wend
endif
repeat
meditation()
uo.deletejournal()
uo.waittargettile('0',x,y,30)
uo.cast ('Blade Spirits')
wait(8000)
until not uo.InJournal("The spell fizzles.")
end sub
Sub castparaliz()
uo.findtype(spirit,'-1','ground')
if uo.findcount() then
while uo.findcount()
wait(1000)
uo.findtype(spirit,'-1','ground')
wend
endif
repeat
if uo.mana-24<=24 then
uo.exec('warmode 0')
repeat
uo.useskill('Meditation')
wait(4000)
until uo.mana == uo.int
endif
meditation()
uo.deletejournal()
uo.waittargettile('0',x,y,30)
uo.cast ('Paralyze Field')
wait(8000)
until not uo.InJournal("The spell fizzles.")
end sub
Sub meditation()
if UO.Mana<24 then
uo.exec('warmode 0')
repeat
uo.useskill('Meditation')
wait(4000)
until uo.mana == uo.int
endif
endsub
Sub waithealfighter()
repeat
wait(100)
until uo.GetHp(fighter) == uo.GetMaxHp(fighter)
endsub
Sub waitdiespirit()
uo.findtype(spirit,'-1','ground')
if uo.findcount() then
while uo.gethp('finditem')>0
wait(1000)
uo.findtype(spirit,'-1','ground')
wend
endif
endsub
################### Fighter Spirits #################
sub fighter()
uo.set('finddistance','14')
while not uo.dead()
healing()
sword()
killspirits()
wend
endsub
Sub healing()
UO.FindType(bints,'-1','backpack')
if UO.FindCount() then
while uo.life<>uo.str
uo.bandageself()
wait(3500)
wend
else
UO.FindType(bloodbints,'-1','backpack')
if UO.FindCount() then
uo.waittargettype(washbasin)
uo.UseType(bloodbints)
endif
endif
endsub
Sub killspirits()
uo.findtype(spirit,'-1','ground')
uo.warmode(1)
while not uo.findcount()
wait(1000)
uo.findtype(spirit,'-1','ground')
wend
wait(2000)
uo.attack('finditem')
while uo.findcount()
checksword()
checkhp()
uo.findtype(spirit,'-1','ground')
wait(1000)
wend
wait(500)
uo.findtype(spirit,'-1','ground')
if uo.findcount() then
wait(2000)
uo.attack('finditem')
while uo.findcount()
checksword()
checkhp()
uo.findtype(spirit,'-1','ground')
wait(1000)
wend
wait(500)
endif
endsub
Sub sword()
var s
UO.Equipt('Lhand',shield)
wait(2000)
uo.findtype(Svord,'-1','backpack')
if uo.findcount() then
s=uo.getserial('finditem')
uo.ignore('finditem')
else
uo.ignorereset()
uo.findtype(Svord,'-1','backpack')
s=uo.getserial('finditem')
endif
uo.useobject(s)
wait(2000)
end sub
Sub checksword()
if UO.GetGraphic(UO.ObjAtLayer('Rhand')) <> svord then
uo.findtype(svord,'-1','backpack')
if uo.findcount() then
uo.usetype('finditem')
endif
endif
endsub
Sub checkhp()
if uo.life<17 then
uo.usetype(gh,cgh)
endif
endsub
Code: Select all
Sub waithealfighter()
repeat
wait(100)
until uo.GetHp(fighter) == uo.GetMaxHp(fighter)
endsub
Mirage wrote:Code: Select all
Sub waithealfighter()
repeat
wait(100)
until uo.GetHp(fighter) == uo.GetMaxHp(fighter)
endsub
Не корректно работает. Я где то писал. Максимальное определяется как 100, после любого нанесения урона становится равным 50... Замороченно в общем и глючно.
Сделай проверку на стоп слово от файтера. Когда спирит испарился маг ждет пока файлер отхилившись не произнесет фразу "Поехали", и после наинает кастовать клинки.
Code: Select all
if uo.life == uo.str then ;или UO.InJournal("need healing or cure")
uo.say('GO')
wait(3500)
endif
var vrag = '0x001DDB81' # айди того кто качает
var BladeSpirit = '0x023E'
var msgReady = 'I am Ready'
var msgBladeDied = 'Blade Died'
var msgHelp = 'Help me'
var msgNoMana = 'No mana... Meditation...'
sub main()
while NOT uo.dead()
if Uo.Mana < 40 then
FullMeditation()
endif
uo.Say(MsgReady)
wait(1000)
Uo.DeleteJournal()
while NOT Uo.InJournal(msgReady)
wait(500)
wend
uo.waittargettile("1400",str(uo.getx(vrag)),str(uo.gety(vrag)),str(uo.getz(vrag)))
uo.cast("Blade Spirits")
wait(6000)
BladeContr()
wend
end sub
Sub FullMeditation()
while UO.Mana<UO.Int
UO.UseSkill('Meditation')
repeat
wait(2000)
uo.Say(msgNoMana)
until UO.InJournal("You are") OR UO.InJournal("You lose")
UO.DeleteJournal()
wait(4000)
wend
uo.useskill("Spirit Speak")
wait(10000)
end sub
sub BladeContr()
var BladeFound = 1
uo.set( 'finddistance', '20' )
while BladeFound == 1
Uo.FindType( BladeSpirit ,-1,'ground')
if Uo.FindCount() then
BladeFound = 1
Else
BladeFound = 0
endif
If Uo.Injournal(msgHelp) then
uo.cast('Greater Heal',vrag)
wait(4000)
uo.DeleteJOurnal()
endif
wait(1000)
wend
Uo.Say(msgBladeDied)
wait(1000)
end sub
sub automedit()
wait(10000)
while not uo.dead()
if uo.warmode() <> 1 then
if uo.mana < 70 then
uo.useskill("Meditation")
wait(5000)
endif
endif
wait(1000)
wend
end sub
Code: Select all
var msgReady = 'I am Ready'
var msgBladeDied = 'Blade Died'
var msgHelp = 'Help me'
var msgNoMana = 'No mana... Meditation...'
var key = 0
sub main()
VAR Banka='0x401C4D33' ; айди умывальницы
UO.waittargetobject(banka)
UO.usetype(0x0E21) # бенты
Wait(1000)
while NOT uo.Dead()
uo.DeleteJournal()
if Uo.GetHP('self') < Uo.Str then
uo.SetArm('MyArm')
wait(100)
uo.DisArm()
while Uo.GetHP('self') < Uo.Str
uo.bandageself()
uo.DeleteJournal()
while NOT uo.Injournal('You')
wait(1000)
wend
wend
endif
uo.Arm('MyArm')
Uo.DeleteJournal()
CheckLag()
while Uo.GetHP('self') == Uo.Str
uo.say(msgReady)
wait(3000)
wend
uo.deletejournal()
while NOT Uo.Injournal(msgBladeDied)
If Uo.GetHP('self') < 40 then
uo.say(msgHelp)
endif
wait(2000)
wend
Uo.DeleteJournal()
wend
end sub
sub CheckLag()
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(150)
until uo.InJournal('backpack')
end sub
Code: Select all
var msgReady = 'I am Ready'
var msgBladeDied = 'Blade Died'
var msgHelp = 'Help me'
var msgNoMana = 'No mana... Meditation...'
var key = 0
sub main()
VAR Banka='0x401C4D33' ; айди умывальницы
UO.waittargetobject(banka)
UO.usetype(0x0E21) # бенты
Wait(1000)
while NOT uo.Dead()
uo.DeleteJournal()
if Uo.GetHP('self') < Uo.Str then
uo.SetArm('MyArm')
wait(100)
uo.DisArm()
while Uo.GetHP('self') < Uo.Str
uo.bandageself()
uo.DeleteJournal()
while NOT uo.Injournal('You')
wait(1000)
wend
wend
endif
uo.Arm('MyArm')
Uo.DeleteJournal()
CheckLag()
while Uo.GetHP('self') == Uo.Str
uo.say(msgReady)
wait(3000)
wend
uo.deletejournal()
while NOT Uo.Injournal(msgBladeDied)
If Uo.GetHP('self') < 40 then
uo.say(msgHelp)
endif
wait(2000)
wend
Uo.DeleteJournal()
wend
end sub
sub CheckLag()
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(150)
until uo.InJournal('backpack')
end sub