Page 1 of 1
Хелп с ПВМ
Posted: 2006-11-08 01:13:11
by slonopotam
Пробовал написать скрипт на догонялку мобов и их килл, чтот никак.
Нужно чтоб подошол к мобу 0х0000 в плотную и убил его. Да и финдистанс максимум чтоб
(тоесть не только если моб рядом). Если кому не сложно, подскажите пожалуйста.
Posted: 2006-11-08 02:12:46
by slonopotam
Помогите хотябы немного переделать готовый. Просто нужно чтоб после убийства 1 зверюшки скрипт вырубалсябы.
Code: Select all
sub Attack()
uo.set('finddistance','10')
DIM R[5]
R[1] = 0x0006 # Тип зверя.
R[2] = 0x0006
R[3] = 0x0006
R[4] = 0x0006
R[5] = 0x0006
VAR LastTimer, Attack
var a
repeat
for a=1 to 5
UO.DeleteJournal()
UO.FindType(R[a],-1,'ground')
if UO.FindCount("finditem")>0 then
Attack=UO.GetSerial('finditem')
UO.Exec('warmode 1')
UO.Attack(Attack)
WalkN(0,0,Attack)
LastTimer=UO.Timer()
repeat
wait(2000)
until uo.dead(Attack) or UO.InJournal('Body') OR LastTimer+150<UO.Timer()
endif
wait(500)
next
wait(200)
until uo.dead()
end sub
sub Ranger()
var skin = 1; êà÷àòü ñêèíèíã
var loot = 0; ëóòèòü òåëî
var loop = 1; àâòîìàò
var dagger = 0x0F51
var body
UO.DeleteJournal()
repeat
repeat
wait(100)
until UO.InJournal("Body of")
body = UO.JournalSerial(UO.InJournal("Body of")-1)
UO.DeleteJournal()
if skin then
if UO.GetDistance(body) <= 2 then
UO.WarMode(0)
UO.SetArm('skin')
UO.WaitTargetObject(body)
UO.UseType(dagger)
wait(1000)
else
endif
UO.WarMode(0)
UO.SetArm('skin')
UO.WaitTargetObject(body)
UO.UseType(dagger)
wait(1000)
endif
if loot then
if UO.GetDistance(body) <= 2 then
F_Loot()
else
endif
endif
if skin then
UO.Arm('Weapon')# Íàäåíüòå îðóæèå áëèæíåãî áîÿè ââåäèòå ñëîâà ,setarm Weapon
endif
UO.WarMode(1)
until not loop
endsub
sub F_Loot()
DIM R[14]
var c
R[1]=0x0df8; øåðñòü
R[2]=0x1078; êîæà
R[3]=0x0EED; äåíüãè
R[4]=0x09AA; ïàíäîðû
R[5]=0x0F85; GI
R[6]=0x0F7B; BM
R[7]=0x0F8C; SA
R[8]=0x0F7A; BP
R[9]=0x0F84; GA
R[10]=0x0F88; NS
R[11]=0x0F8D; SS
R[12]=0x0F86; MR
R[13]=0x1BD1; ïåðüÿ
R[14]=0x0F8F; Volcanic Ash
for c=1 to 14
repeat
uo.findtype(R[c],"-1","lastcorpse")
if UO.FindCount()>0 and Uo.GetDistance("lastcorpse")<=4 then
UO.Grab("0","finditem")
wait(1200)
end if
until UO.FindCount()<1
wait(10)
next
endsub
sub Numb(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub
sub WalkN(x,y,Target)
VAR i,StepSucess
VAR dx,dy,Exit=0
While Exit<>1
If Target<>"" Then
dx=UO.GetX(Target)-UO.GetX()
dy=UO.GetY(Target)-UO.GetY()
If UO.GetDistance(Target)<2 Then
Exit=1
Endif
Else
dx=x-UO.GetX()
dy=y-UO.GetY()
If dx==0 AND dy==0 Then
Exit=1
Endif
Endif
If dx<>0 AND dy<>0 Then
If dx>0 AND dy>0 Then
StepSucess=Go(3,40,300);SE - DownArrow
Endif
If dx>0 AND dy<0 Then
StepSucess=Go(1,39,300);NE - RightArrow
Endif
If dx<0 AND dy>0 Then
StepSucess=Go(5,37,300);SW - LeftArrow
Endif
If dx<0 AND dy<0 Then
StepSucess=Go(7,38,300);WN - UpArrow
Endif
Endif
If dx<>0 AND dy==0 Then
If dx>0 Then
StepSucess=Go(2,34,300);E - PgDown
If StepSucess==-1 Then
StepSucess=Go(3,40,300);SE - DownArrow
If StepSucess==-1 Then
StepSucess=Go(1,39,300);NE - RightArrow
Endif
Endif
Endif
If dx<0 Then
StepSucess=Go(6,36,300);W - Home
If StepSucess==-1 Then
StepSucess=Go(7,38,300);WN - UpArrow
If StepSucess==-1 Then
StepSucess=Go(5,37,300);SW - LeftArrow
Endif
Endif
Endif
Endif
If dx==0 AND dy<>0 Then
If dy>0 Then
StepSucess=Go(4,35,300);S - End
If StepSucess==-1 Then
StepSucess=Go(3,40,300);SE - DownArrow
If StepSucess==-1 Then
StepSucess=Go(5,37,300);SW - LeftArrow
Endif
Endif
Endif
If dy<0 Then
StepSucess=Go(0,33,300);N - PgUp
If StepSucess==-1 Then
StepSucess=Go(7,38,300);WN - UpArrow
If StepSucess==-1 Then
StepSucess=Go(1,39,300);NE - RightArrow
Endif
Endif
Endif
Endif
Wend
end sub
sub Go(dir,key,walkwait)
VAR x,y
x=UO.GetX()
y=UO.GetY()
while UO.GetDir()<>dir
UO.Press(key)
wait(walkwait)
If UO.GetDir()<>dir Then
Endif
wend
UO.Press(key)
wait(walkwait)
If x==UO.GetX() AND y==UO.GetY() Then
Endif
If x==UO.GetX() AND y==UO.GetY() Then
return -1
Else
return 1
Endif
end sub
Posted: 2006-11-08 07:47:55
by Nmy
отвечу по теме...
Code: Select all
if uo.injournal('body') then
uo.deletejournal()
..
endif
Posted: 2006-11-08 10:38:21
by slonopotam
Это к чему??
Моб не умер еще, при чем тут его боди? Мне нужно его по типу найти на максимальном расстоянии, подойти и убить.
Posted: 2006-11-08 13:02:32
by Nmy
Просто нужно чтоб после убийства 1 зверюшки скрипт вырубалсябы.
Posted: 2006-11-08 13:17:20
by Scripts Writer
NMY wrote:Просто нужно чтоб после убийства 1 зверюшки скрипт вырубалсябы.
Он думает как подойти, а не как скрипт закончить видимо.
2Поиск + если найдено то готу(файндайтим) уже не модно нынче? + вармод. А вообще-смотри аналог в скрипте на кил ентов. Там есть что посмотреть.
Posted: 2006-11-08 14:27:56
by slonopotam
Да по отдельности почти все есть, думаю что со сборкой тоже вопросов небудет. Незнаю как подходить в плотную и бить. Покажите на примере выше написаного.
Posted: 2006-11-08 14:30:50
by slonopotam
В журнале регистр имеет значение?
Code: Select all
until uo.dead(Attack) or UO.InJournal('Body') OR LastTimer+150<UO.Timer()
Posted: 2006-11-08 15:24:36
by Grin
Нашел в закромах родины, не помню под какой шард писал. Ищет и убивает бижайших овец режит их... Стоит под коректировать.
На том шарде нельзя было резать пока не будешь в ПИСЕ
Убивались овци с кулака (это было очень быстро чем с кинжала, даи ломалось там оружие хорошо)
Был еще прикол что по полю на чем то подобном бегали другие люди, поэтому было решено бижать ближайшей во что бы то не стало;) и если ее убъют раньше то шерсть мы снимим все равно первыми%)
По умолчанию иследуется радиус 20 от точки на котороит стоит чар. если даже в той точке где он стоит в радиусе 20 никого не было найдено то он возвращается на свое место, откуда был запущен скрипт.
Ходилка самое быстрое что может быть без проверок, без супер обходов;) только на нормальных пространставх;)
Code: Select all
sub Abs(num)
if num < 0 then
return -num
end if
return num
end sub
sub Sig(num)
if num < 0 then
return -1
else
if num == 0 then
return 0
endif
endif
return 1
end sub
sub MoveToXY(x, y, prec)
var dx, dy
dim Key[9]
Key[0]=37
Key[1]=35
Key[2]=40
Key[3]=36
Key[4]=12
Key[5]=34
Key[6]=38
Key[7]=33
Key[8]=39
dx=x-uo.GetX()
dy=-y+uo.GetY()
while (Abs(dx) > prec) or (Abs(dy) > prec)
dx=x-uo.GetX()
dy=-y+uo.GetY()
uo.Press(Key[(sig(dy)+1)*3+1+sig(dx)])
wait(10)
wend
end sub
sub MoveTo(object, prec)
var dx, dy
dim Key[9]
Key[0]=37
Key[1]=35
Key[2]=40
Key[3]=36
Key[4]=12
Key[5]=34
Key[6]=38
Key[7]=33
Key[8]=39
while uo.GetDistance(object) > prec
dx=uo.GetX(object)-uo.GetX()
dy=-uo.GetY(object)+uo.GetY()
uo.Press(Key[(sig(dy)+1)*3+1+sig(dx)])
wait(10)
wend
end sub
sub KillIt()
var animal=0x00CF
var n=1
var x=uo.GetX()
var y=uo.GetY()
uo.ignorereset()
uo.forget('far')
uo.forget('counters')
uo.SetGlobal('KillCount', 0)
Repeat
wait(10)
uo.Set('finddistance', n)
uo.FindType(animal, -1, 'ground')
if uo.FindCount() then
wait(100)
if uo.IsNPC('finditem') then
uo.info('finditem')
while uo.IsNPC('finditem')
if uo.GetDistance('finditem') > 1 then
MoveTo('finditem', 1)
uo.attack('finditem')
end if
wait(100)
wend
uo.SetGlobal('KillCount', val(uo.GetGlobal('KillCount'))+1)
uo.forget('finditem')
uo.warmode(0)
uo.waittargetobject('lastcorpse')
uo.usetype(0x0F51)
while uo.waiting()
wait(100)
wend
uo.disarm()
n=1
else
uo.Ignore('finditem')
end if
else
n=n+1
if n > 20 then
if (uo.GetX() <> x) or (uo.GetY() <> y) then
MoveToXY(x, y, 1)
end if
n=1
end if
end if
Until uo.Dead()
end sub
sub Stat()
uo.charprint(257, 'От ваших рук погибло: '+uo.GetGlobal('KillCount')+' невинных овец')
end sub
Posted: 2006-11-08 16:29:29
by Savage
viewtopic.php?p=44296#44296
В ходилке ставим вайттайм = 0 и включаем алвайс ран.
Posted: 2006-11-08 16:36:41
by slonopotam
Это на антарес =)))
Все работает кул. Спасибо.
Posted: 2006-11-08 20:05:13
by slonopotam
А можно сделать чтоб скрипт тот что я привел в пример, после сообщения "Body", вырубалсябы ????
P.S. Все. Спасибо. Сделал, работает отлично.
Posted: 2006-11-08 21:12:23
by Nmy
slonopotam wrote:А можно сделать чтоб скрипт тот что я привел в пример, после сообщения "Body", вырубалсябы ????
P.S. Все. Спасибо. Сделал, работает отлично.
viewtopic.php?p=52928#52928
Posted: 2006-11-09 01:57:49
by slonopotam
Я в смысле на моем примере показать

но всеравно спасибо.