Yoko
http://forum.yoko.com.ua/

Как бы определить объекты вокруг себя
http://forum.yoko.com.ua/viewtopic.php?f=20&t=7546
Page 1 of 3

Author:  Rijo [ 2006-05-01 04:50:01 ]
Post subject:  Как бы определить объекты вокруг себя

Чар кастует вокруг себя стенки огня, как бы определить есть ли стена огня в тех тайлах куда оно колдовалось, дабы не колдовать постоянно эти стенки вокруг себя и не тратить реги :). я пишу свои перый скрипт и делаю маленький шаг в программировании вообще :). Так что не шлите меня по ссылкам. Заранее благодарю

Author:  Scripts Writer [ 2006-05-01 06:05:19 ]
Post subject: 

тут поищи

Author:  Rijo [ 2006-05-01 07:56:19 ]
Post subject: 

Появилась новая проблемка. В уроках ничего нужного не нашел или просто не заметил. Как найти в журнале то что я вижу что кто то погиб. uo.InJournal() не помогает.. или я не так делаю. Я пишу UO.InJournal('you see:')

Author:  Scripts Writer [ 2006-05-01 07:58:39 ]
Post subject: 

если не ошибаюсь , в журнале отписывается
Code:
Body( items)

Author:  Rijo [ 2006-05-01 07:59:33 ]
Post subject: 

Я хочу вот этот код запихать, чтобы он врубался когда находился труп. Может в коде можно что тосделать, чтобы он по кругу проверял новые трупы на нужные вещи.
Code:
sub Loot2()
VAR i
DIM Loot[20]

Loot[0]=0x1089 ;
Loot[1]=0x1F0A ;
Loot[2]=0x1F07 ; 
Loot[3]=0x1F06 ;
Loot[4]=0x1F09 ;
Loot[5]=0x108A ;
Loot[6]=0x0EED ;
Loot[7]=0x1086 ;
Loot[8]=0x1087 ;
Loot[9]=0x1F08 ;
Loot[10]=0x1088 ;
   
UO.UseObject('lastcorpse')

   if UO.GetQuantity('lastcorpse') then
      UO.SetArm('temp')
      UO.WaitTargetObject('lastcorpse')
      UO.UseType('0x000') ;dagger
      wait(500)
      UO.Arm('temp')
      wait(500)
   endif
   
   UO.SetReceivingContainer('0x40099AA2') ; loot store bag

   For i=0 to 10
      UO.FindType(Loot[i],-1,'ground')
      if UO.GetQuantity('finditem') then
         UO.Grab(STR(0),'finditem')
         wait(1000)
      endif

      if UO.GetQuantity('lastcorpse') then
         UO.FindType(Loot[i],-1,'lastcorpse')
         if UO.GetQuantity('finditem') then
            if Loot[i]==0x1078 then
               UO.WaitTargetObject('finditem')
               UO.UseType('0x0F9E')
            else
               UO.Grab(STR(0),'finditem')
            endif             
            wait(1000)
         endif
      endif
   next

   UO.UnSetReceivingContainer()
else
  wait(1000)
endif
end sub

Author:  Scripts Writer [ 2006-05-01 08:02:05 ]
Post subject: 

ну так зацыкли его ввиде:

Code:
whle not uo.Dead()
  while not uo.InJournal('Body')
    wait(500)
  wend
  . . .


это к примеру, а так-сам продумай и отредактируй. Или же опиши точнее,что и как.

п.с. Loot[20] = это ты замудрил конешно


могу пример привести :
Code:
var tryp
var body
var color
uo.Set('finddistance','5')
while not uo.Dead()
  if uo.InJournal('Body') then
    uo.FindType(body,color,'ground')
    tryp=uo.GetSerial('finditem')
    Loot()
    uo.Ignore(tryp)
  else
    wait(500)
  end if
wend
uo.IgnoreReset()


ищет,как нашел-забивает в переменную труп, и запускает скрипт лута, затем игнорит труп, чтобы в следующий раз не видеть его =\ -эт грубый пример

Author:  Edred [ 2006-05-01 12:13:49 ]
Post subject: 

Rijo wrote:
UO.InJournal('you see:')


"You see" - чисто клиентовская фишка, в журнале инжекта эта надпись не появляется.

Author:  Rijo [ 2006-05-01 13:56:51 ]
Post subject: 

Ну скрипт у меня запахал, вроде бы даже без ошибок. Но проверку на труп, после которой бы начинался лут я не придумал, наверно моск еще мыслит не в том направлении :). Если кто сможет предложить что нибудь интересное, я посмотрю ;).
Моя проверка через инжектовский журнал, когда проверяется надпись "Body of" почему то не хочет пахать :(
И вот только что заметил после продолжительного теста, что проверка на количество огня тоже не пашет :(
while not UO.FindType(0x398C ,-1,'ground') > 6 - это может быть похоже на правду, где 0x398C-тип одного тайла стены огня

Author:  Savage [ 2006-05-01 14:11:15 ]
Post subject: 

Финдтайп возвращает указатель на объект, чтобы исследовать количество найденных итемов надо потом юзануть UO.FindCount()

По поводу боди и трупов, попробуй ввести ,set injectecho 1 и ,saveconfig так же у трупов разных мастей один тип 0x2006, можно делать поиск по нему и потом применять некоторую логику. То есть если труп уже был найден, игнорить его или нечто подобное.

Author:  Rijo [ 2006-05-01 15:46:02 ]
Post subject: 

ну вот он собсно скрипт, не забудьте что первый мной написанный, хотя много что просто стырино у других, копирайты не ставил потому что не знаю кто их написал :). Добваьте пожалуста проверок. Коменты как токовые не ставил, думаю там все понятно, для тех кто может мне помочь :). Переменные добваил, но не использовал, потом сриптик маленький на АнтиПк добавлю. Скрипт для очень узкой функциональности
Code:
var PKMagArr = "In Por Ylem"
var PKTeleport = "Rel Por"
var PKParaliz = "An Ex Por"
var PKpf = "In Ex Grav"
var PKPoison = "In Nox"
var Apk = 0
var RecallHome = 0
var Chest='0x401AE9BA'
var fire = 1
var tryp = '0x2006'
var color
var WaitTime = 5000
#################################################################
sub DetectForLoot()
while not uo.Dead()
Loot()
wait(500)
wend
end sub
#################################################################
sub ForFire()
while not uo.Dead()
 if uo.mana < uo.int then
  Medit()
 wait(500)
 else
  DetectFire()
 wait(500)
 endif
wend
wait(500)
end sub
#################################################################
sub DetectFire()
uo.Set('finddistance','0')
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 6 then
FireAround()
wait(500)
endif
wait(500)
end sub
#################################################################
sub FireAround()
uo.waittargettile("400",str(uo.getx("self")),str(uo.gety("self")+1),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")),str(uo.gety("self")-1),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")-1),str(uo.gety("self")),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")+1),str(uo.gety("self")),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")),str(uo.gety("self")),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
wait(500)
end sub
#################################################################
sub Medit()
UO.DeleteJournal()
wait(1000)
UO.Useskill('Meditation')
Repeat
wait(100)
until UO.InJournal("You are") OR UO.InJournal("Ìåäèòàöèÿ")
wait(500)
end sub
#################################################################
sub Loot()
VAR i
DIM Loot[10]


Loot[0]=0x1089 ;
Loot[1]=0x1F0A ;
Loot[2]=0x1F07 ; 
Loot[3]=0x1F06 ;
Loot[4]=0x1F09 ;
Loot[5]=0x108A ;
Loot[6]=0x0EED ;
Loot[7]=0x1086 ;
Loot[8]=0x1087 ;
Loot[9]=0x1F08 ;
Loot[10]=0x1088 ;
   
UO.UseObject('lastcorpse')

   if UO.GetQuantity('lastcorpse') then
      UO.WaitTargetObject('lastcorpse')
      UO.UseType('0x000') ;dagger
      wait(500)
    endif
   
   UO.SetReceivingContainer('0x40099AA2') ; loot store bag

   For i=0 to 10
      UO.FindType(Loot[i],-1,'ground')
      if UO.GetQuantity('finditem') then
         UO.Grab(STR(0),'finditem')
         wait(1000)
      endif

      if UO.GetQuantity('lastcorpse') then
         UO.FindType(Loot[i],-1,'lastcorpse')
         if UO.GetQuantity('finditem') then
            if Loot[i]==0x1078 then
               UO.WaitTargetObject('finditem')
               UO.UseType('0x0F9E')
            else
               UO.Grab(STR(0),'finditem')
            endif             
            wait(1000)
         endif
      endif
   next

   UO.UnSetReceivingContainer()

wait(500)
end sub

Если подскажите способ скриптования полегче, то буду рад впитать в себя информацию

Author:  Savage [ 2006-05-01 15:57:27 ]
Post subject: 

Это точно работает?
Дело в том что ты объявляешь массив из 10 элементов а используешь 11. Должна быть ошибка выхода за границы массива, что ведет к довольно неожиданным результатам :)

Если ты подробно объяснищь чего хочешь достичь в своем скрипте, то возможно тут объяснят как это сделать правильно, красиво и коротко :)

Более того, а впроцессе формулировки вопроса ты сам построешь линейный алгоритм решения своей задачи ;)

Author:  Rijo [ 2006-05-01 16:50:05 ]
Post subject: 

Ты говоришь про масси функции лута? Хм, кстати да. А я думаю, че то он у меня поттупливает. Скрпит в общем кое как да работает. Массив я щас исправлю. А принцип действия скрипта таков. Я стою на крыше здания и кидаю стену огня сковзь пол крыши на пол который находится под крышей. НПСники видя меня начинают бежать на меня и атачить, и тем самым попадают в мой огонь. После того как они умерают я их лучу и все :).
Огноь я пускаю вокруг себя, но на координата Z ниже своих на 20.
Вот меня интересует такие вопросы:
1.Как бы поточнее сделать проверку на то что вокруг меня огня хватает. Я использую такой способ, не очень точный и вообще на мой взгляд ничего не делающий :) :
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 6 then
2.Как запускать лут трупа с появления строки в журнале. И как бы сделать так чтобы он не оставлял на трупах ничего нужного, псейчас, когда падают сразу 2 нпс он лутит только с одного

Author:  Savage [ 2006-05-01 17:12:36 ]
Post subject: 

1. С проверкой на огонь париться не стоит, кастуешь стену, засекаешь время как первый из 7 сполохов огня погас значит пора ставить новую. Потом проверяешь свое время на простеньком скрипте который кастует стенку, ждет, кастует снова.

2. Тебе нужно лутить в цикле с последующим игнором полутанного трупа.

Author:  Rijo [ 2006-05-01 17:16:25 ]
Post subject: 

Savage wrote:
1. С проверкой на огонь париться не стоит, кастуешь стену, засекаешь время как первый из 7 сполохов огня погас значит пора ставить новую. Потом проверяешь свое время на простеньком скрипте который кастует стенку, ждет, кастует снова.

2. Тебе нужно лутить в цикле с последующим игнором полутанного трупа.

Ну вот с игнором я немного не допонял, хотя в принципе сильно не разбарался, потому что щас ночь у меня и мозг уже спит. Может приведешь пример, тока с поясняловом. Заранее благодарю ;)

Author:  Savage [ 2006-05-01 17:22:14 ]
Post subject: 

Code:
VAR Exit=0
UO.IgnoreReset()
While Exit<>1
UO.FindType(Trup, -1,'ground')
If Uo.FindCount() Then
Loot()
Else
Exit=1
Endif
UO.IgnoreItem('finditem')
Wend

Author:  Edred [ 2006-05-02 00:25:24 ]
Post subject: 

Почему же у тебя через сообщение 'Body of' не работает? Вот простой и надежный скрипт, я когда играл и зоннерил, постоянно его в фон запускал:

Code:
#####################################################################
; BackgroundZonner. v.1.02b (c) Edred
;
; Ожидание сообщения 'Body of' и автоматический лут последнего трупа.
;
sub BackgroundZonner()
   VAR msg1 = 'Body of'
   VAR flag = 1
   If UO.Targeting() Then
      UO.CancelTarget()
   Endif
   DeleteJournal( msg1 )
   While NOT UO.Dead()
      If UO.InJournal( msg1 ) Then
         DeleteJournal( msg1 )
         AutoLoot()
      Else
         wait(300)
      Endif
   Wend
endsub

Author:  Rijo [ 2006-05-02 00:43:35 ]
Post subject: 

Ну видно пальцы еще не выпрямились чтобы нормально скрипты писать ;). Нада у You Must Die спросить где можно скачать ruki.exe. Я думаю это хорошая программка по выпрямлению пальцев рук ;)

Author:  Rijo [ 2006-05-02 01:53:54 ]
Post subject: 

Savage wrote:
Это точно работает?
Дело в том что ты объявляешь массив из 10 элементов а используешь 11. Должна быть ошибка выхода за границы массива, что ведет к довольно неожиданным результатам :)

Если ты подробно объяснищь чего хочешь достичь в своем скрипте, то возможно тут объяснят как это сделать правильно, красиво и коротко :)

Более того, а впроцессе формулировки вопроса ты сам построешь линейный алгоритм решения своей задачи ;)

Немного не понял. Где я использую 11 элементов массива? Я объявил от 0 до 10, вот и использую... Наверно я чего то недопонял тебя или не доразгялядел в скрипте :)

Author:  Rijo [ 2006-05-02 02:28:30 ]
Post subject: 

Проверка на огонь работает у меня подобным образом
Code:
#################################################################
sub DetectFire()
uo.Set('finddistance','1')
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 9 then
  FireAround()
  wait(500)
else
  wait(10000)
endif
wait(500)
end sub

Проверяется каждые 10 секнуд, есть ли вокруг меня 9 тейлов огня

Author:  Scripts Writer [ 2006-05-02 07:52:35 ]
Post subject: 

DIM loot[10]

это хорошо, но посчитай пальцем )

0.1.2.3...10 = 11 элементов, а ты задал тока 10.

Page 1 of 3 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/