Yoko

All sides of Injection
It is currently 2025-12-23 03:54:46

All times are UTC+02:00




Post new topic  Reply to topic  [ 41 posts ]  Go to page Previous 1 2 3 Next
Author Message
 Post subject:
PostPosted: 2005-01-18 04:39:33 
Offline
User avatar

Joined: 2004-07-18 13:01:15
Posts: 141
KrafteR wrote:
Если можно, хочется услышать альтернативные примеры медитации в ваших скриптах.

Я конечно ньюб, но вот, может поможет :
Code:
Var LastTimer
if UO.Mana < 30 then
while UO.Mana<UO.Int
LastTimer=UO.Timer()
UO.UseSkill('Meditation')
repeat
wait(100)
until UO.InJournal("You are") OR UO.InJournal("You lose") OR UO.Timer()>LastTimer+200
UO.DeleteJournal()
wait(200)
wend
endif

Просьба строго не судить, и ногами в живот не пинать.


Top
   
 Post subject:
PostPosted: 2005-01-18 11:03:27 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
gmur wrote:
Я конечно ньюб, но вот, может поможет :
Code:
UO.Timer()>LastTimer+200 

Просьба строго не судить, и ногами в живот не пинать.

Спасибо, но я не стал использовать этот способ на медитацию из-за этой строки, если ты мне пояснишь, что это значит, то буду очень признателен, вот что говорит Yoko про UO.Timer(): "Отсчитывает число, меняющееся 10 раз в секунду. Может быть использовано для условий выходов из зациклившихся кусков, отсчёта времени следующих действий и т.д."

Edred wrote:
Та же проблема. Не забывай в начале вайла очистить журнал. То есть после While UO.Mana<UO.Int поставь UO.DeleteJournal()
Помогло, спасибо.


Top
   
 Post subject:
PostPosted: 2005-01-18 11:30:41 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Code:
While UO.Mana>=9 OR UO.NS==0
UO.Cast('Poison', 'self')
wait(3000)
wend


Code:
Пока Мана больше или равна 9 или найдшайд равен 0
Кастовать пойзон на себя
ждать 3 секунды
конец цыкла

Вся проблемма в первой строке, он не видет ИЛИ и по-этому он пытается продолжать кастовать, даже когда нет найдшайда, как это исправить?


Top
   
 Post subject:
PostPosted: 2005-01-18 12:35:34 
Offline

Joined: 2004-10-04 04:50:03
Posts: 51
Location: DRW
KrafteR wrote:
Code:
Пока Мана больше или равна 9 или найдшайд НЕ равен 0



Top
   
 Post subject:
PostPosted: 2005-01-18 12:51:59 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Никогда не пользовался UO.NS - может она просто не работает? Попробуй поставить тестовый оператор

Code:
UO.Print('ostalos ' + str( UO.NS ) +' nightshade')


в скрипт после каста и посмотри, правильно ли на экран выводится количество найтшэда. Если неправильно - заменяй UO.NS на UO.Count('тип найтшэда')

Вообще, возьми за правило если что-то не работает или работает не так, расставлять в скрипте тестовые выводы различной информации через UO.Print(), весьма помогает локализовать проблему. Это стандартная программистская практика. Я вообще когда пишу длинные скрипты сразу ставлю в начале главного модуля строки:

Code:
UO.SetGlobal( 'Otladka', '0' )
UO.SetGlobal( 'NumOtladka', '0' )


И после каждого значимого действия в скриптах вставляю вызов функции

Code:
pt()


Ну и добавляю в конец файла функцию:

Code:
sub pt()
   VAR i
   If UO.GetGlobal( 'Otladka' ) == '1' Then
      i = val( UO.GetGlobal( 'NumOtladka' ) ) + 1
      UO.Print( 'step ' + str(i) )
      UO.SetGlobal( 'NumOtladka', str(i) )
   Endif
endsub


соответственно чтобы включить отладку с выводом сообщений в написанном скрипте достаточно вначале заменить 0 на 1 в установке глобальной переменной Otladka. Отключить - заменить обратно. Когда скрипт отлажен - вызовы функции удаляются из скрипта простым поиском с заменой.


Top
   
 Post subject:
PostPosted: 2005-01-18 13:27:37 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
Code:
Var Sunduk='0x40226380'

sub main()
uo.useobject(Sunduk)
wait(1000)
While uo.count('0x0F88','0x0000')>0

if uo.skillval('Magery',1)==1000 Then
uo.closeuo()
end if

UO.FindType('0x0F88',-1,'backpack')
While UO.GetQuantity('finditem')<5
UO.FindType('0x0F88','0x0000',Sunduk)
wait(1000)
UO.Grab('100','finditem')
wait(700)
Wend


cheklag()
uo.cast('Poison','self')
wait(3000)



Repeat
uo.deletejournal()
uo.useskill('Meditation')
Wait(3000)
Until UO.InJournal("You must wait to perform another action") or uo.mana >= uo.int

While uo.mana < uo.int
Wait(100)
Wend
Wait(100)

Wend
uo.closeuo()
end sub

sub cheklag()
uo.deletejournal()
uo.click('backpack')
Repeat
wait(100)
Until UO.InJournal("backpack")
end sub


Вот
Sunduk это ИД контейнера откуда брать реги !!!

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-01-18 20:58:51 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Worth wrote:
KrafteR wrote:
Code:
Пока Мана больше или равна 9 или найдшайд НЕ равен 0


<> -этот знак означает НЕ равно, а == означет именно то, что я написал.
Edred wrote:
Никогда не пользовался UO.NS - может она просто не работает? Попробуй поставить тестовый оператор

Code:
UO.Print('ostalos ' + str( UO.NS ) +' nightshade')



Попробовал, всё определяет правильно. Пишет именно то кол-во НС'a, которое осталось в паке. А с проверками это хорошая идея, тысячный раз сенк.
Askaneli wrote:
Вот
Sunduk это ИД контейнера откуда брать реги !!!

Интересная медитация, спасибо, что откликнулся на прозьбу, буду знать новые способы.


Top
   
 Post subject:
PostPosted: 2005-01-18 22:54:22 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Насчет не равно - тебе правильно написали: у тебя цикл должен выполняться пока количество найтшэда не равно нулю. То есть больше нуля. А ты ставишь проверку на равенство нулю. Это во-первых. Во-вторых надо писать в твоем случае не OR а AND - логику в школе изучал?

"Пока маны больше 9" И "найтшэда больше 0" - то есть цикл выполняется при одновременном соблюдении обоих условий. У тебя же ИЛИ - то есть если одно из условий истинно. Так что если маны больше 9 - это условие истинно и уже неважно сколько найтшэда.


Top
   
 Post subject:
PostPosted: 2005-01-18 23:12:23 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Edred wrote:
Насчет не равно - тебе правильно написали: у тебя цикл должен выполняться пока количество найтшэда не равно нулю. То есть больше нуля. А ты ставишь проверку на равенство нулю. Это во-первых. Во-вторых надо писать в твоем случае не OR а AND - логику в школе изучал?
Хм... а я где-то тут прочёл, что == это присвоить или что-то тип этого, вообщем слышал звон, а вот где он не засёк. Извиняюсь перед Wroth. Логику не проходил нигде, а если и проходил то мимо.
Edred wrote:
"Пока маны больше 9" И "найтшэда больше 0" - то есть цикл выполняется при одновременном соблюдении обоих условий. У тебя же ИЛИ - то есть если одно из условий истинно. Так что если маны больше 9 - это условие истинно и уже неважно сколько найтшэда.
Вот теперь вехал в суть проблеммы. Тогда новый вопросик : Чем не приемлемая записать UO.NS=0 .


Top
   
 Post subject:
PostPosted: 2005-01-18 23:28:07 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
= это присвоить. Например i=2 - присвоить переменной i значение 2
== это сравнить на равенство, например i==2 - проверить, равно ли i двум.


Top
   
 Post subject:
PostPosted: 2005-01-18 23:34:26 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Ну что же вот почти и подошё конец написания этого скрипта. И у меня последний вопрос, на который хотелось бы услышать ответ.
Code:
If UO.NS<1 Then
UO.FindType(NS, '-1', Sunduk)
UO.Grab(str(Kolvo), 'finditem')

В этой строке заключается загвоздка... Чар берёт не один раз 10 регов, а бесконечное кол-во раз, как сделать так что бы чар брал 1 раз 10 регов и переходил снова к кастам.


Top
   
 Post subject:
PostPosted: 2005-01-18 23:39:55 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Во-первых, забыл Endif в конце, во-вторых, запости весь скрипт чтобы увидеть куда ты эту проверку впендюрил :)


Top
   
 Post subject:
PostPosted: 2005-01-18 23:50:33 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Code:
sub Magery()
VAR NS='0x0F88'
VAR Sunduk='0x400BFED4'
VAR Kolvo=10
While NOT UO.Dead()
While UO.Mana>=9 AND UO.NS>0
UO.DeleteJournal()
UO.Cast('Poison', 'self')
wait(3000)
wend
   If UO.Mana<9 Then
      While UO.Mana<UO.Int
      UO.DeleteJournal()
         UO.Useskill('Meditation')
         Repeat
         wait(100)
         until UO.InJournal("You are") OR UO.InJournal("You lose")
      Wend
   Else
      If UO.NS<1 Then
         UO.FindType(NS, '-1', Sunduk)
         UO.Grab(str(Kolvo), 'finditem')
endif
endif
Wend

end sub
Вот такая вот штука получилась!


Top
   
 Post subject:
PostPosted: 2005-01-19 14:50:44 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Поправил твой скрипт, заодно причесал структуру - не забывай строить правильные отступы табуляциями, гораздо легче читать.

Code:
sub Magery()
   VAR NS='0x0F88'
   VAR Sunduk='0x400BFED4'
   VAR Kolvo=10
   While NOT UO.Dead()
      While UO.Mana>=9 AND UO.NS>0
         UO.DeleteJournal()
         UO.Cast('Poison', 'self')
         wait(3000)
      wend
      If UO.Mana<9 Then
         While UO.Mana<UO.Int
            UO.DeleteJournal()
            UO.Useskill('Meditation')
            Repeat
               wait(100)
            until UO.InJournal("You are") OR UO.InJournal("You lose")
         Wend
      Endif
      If UO.NS == 0 Then
         UO.FindType(NS, '-1', Sunduk)
         UO.Grab(str(Kolvo), 'finditem')
         wait(1000)
      Endif
   Wend
end sub


Что сделал:
1. Добавил паузу после граба. Иначе просто не успеет найтшэд попасть в пак, а у тебя уже начнутся новые попытки кастов.
2. Заменил конструкцию if...else...endif на два раздельных ифа. Опять же из-за логики. В ифе проверялось количество маны, если ее мало - медита, но реги уже не добираются. Если маны много - тогда только проверяются реги. Если же два раздельных ифа - проверяется каждое по отдельности.

Кстати, насчет того что логика прошла мимо. могу только пожалеть. Все программирование построено на логике.


Top
   
 Post subject:
PostPosted: 2005-01-19 15:54:21 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Edred wrote:
Поправил твой скрипт, заодно причесал структуру - не забывай строить правильные отступы табуляциями, гораздо легче читать.

Что сделал:
1. Добавил паузу после граба. Иначе просто не успеет найтшэд попасть в пак, а у тебя уже начнутся новые попытки кастов.
2. Заменил конструкцию if...else...endif на два раздельных ифа. Опять же из-за логики. В ифе проверялось количество маны, если ее мало - медита, но реги уже не добираются. Если маны много - тогда только проверяются реги. Если же два раздельных ифа - проверяется каждое по отдельности.

Кстати, насчет того что логика прошла мимо. могу только пожалеть. Все программирование построено на логике.

Так и не понял, свою ошибку в изыманее рега из сундучка. Спасибо за доработку, щас буду писть инструкцию к применению, после чего выложу в соседнем разделе на суд людей.
P.S. Ну не было у меня такого придмета как логика =), но мне всегда казалось, что у любого здравомыслющего человека не отсутствует логика.


Top
   
 Post subject:
PostPosted: 2005-01-19 16:25:31 
Offline
Sphere expert
User avatar

Joined: 2004-10-01 08:27:38
Posts: 1143
Location: Уфа
Почему многие считают что логика программиста немного другая, и не всегда здравомыслящая !!!
Вслух мне об этом никто не говорил, но по высказываниям это становится понятно !!!

_________________
Сделал дело - флуди смело !!!


Top
   
 Post subject:
PostPosted: 2005-01-19 16:46:56 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Askaneli wrote:
Почему многие считают что логика программиста немного другая, и не всегда здравомыслящая !!!
Вслух мне об этом никто не говорил, но по высказываниям это становится понятно !!!

Ну может она реально другая, ведь написание программы это постоянный мыслянный труд и труд нелёгкий. Я сам далёк от програмирования, в школе на паскале что-то по школьной программе делал, вот в инстетуте пока токо ворд проходим, и поэтому мне очень трудно ворочется в инжекте. Как сам убедился на примере того же скрипта на магери, что програмирование это не знание кучи команд, а именно постоянный поиск решения конкретной задачи, которая не всегда тревиальна.


Top
   
 Post subject:
PostPosted: 2005-01-19 17:28:38 
Offline
User avatar

Joined: 2004-07-22 16:07:11
Posts: 260
Edred wrote:
Code:
sub Magery()
   VAR NS='0x0F88'
   VAR Sunduk='0x400BFED4'
   VAR Kolvo=10
   While NOT UO.Dead()
      While UO.Mana>=9 AND UO.NS>0
         UO.DeleteJournal()
         UO.Cast('Poison', 'self')
         wait(3000)
      wend
      If UO.Mana<9 Then
         While UO.Mana<UO.Int
            UO.DeleteJournal()
            UO.Useskill('Meditation')
            Repeat
               wait(100)
            until UO.InJournal("You are") OR UO.InJournal("You lose")
         Wend
      Endif
      If UO.NS == 0 Then
         UO.FindType(NS, '-1', Sunduk)
         UO.Grab(str(Kolvo), 'finditem')
         wait(1000)
      Endif
   Wend
end sub


Что-то я рано обрадовался... собственно проблемма в том, что если маленький лаг во время взятия из сундука рега то берёт 20 вместо 10, а если сильный залаг, то вообще ошибка клиента из-за бесконечной попытке взятия рега. Как это можно исправить без помощи ChekLag().


Top
   
 Post subject:
PostPosted: 2005-01-19 17:37:42 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
во-первых, в чеклаге ничего плохого нету :)

во-вторых, замени вот этот блок:

Code:
If UO.NS == 0 Then
   UO.FindType(NS, '-1', Sunduk)
   UO.Grab(str(Kolvo), 'finditem')
   wait(1000)
Endif


на такой:

Code:
If UO.NS == 0 Then
   UO.FindType(NS, '-1', Sunduk)
   UO.Grab(str(Kolvo), 'finditem')
   repeat
      wait(100)
   until UO.NS>0
Endif


Top
   
 Post subject:
PostPosted: 2005-01-19 17:38:18 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
логика понятна? :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 41 posts ]  Go to page Previous 1 2 3 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited