Yoko

All sides of Injection
It is currently 2025-11-11 03:58:14

All times are UTC+02:00




Post new topic  Reply to topic  [ 13 posts ] 
Author Message
PostPosted: 2006-04-18 12:28:54 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Собсно когда стоимость снаряжения выше стандартного и тебя пресуют 3 чела в окло, начинаю постоянно не на те кнопри жать и сам себе же касты сбиваю. Придумал как сделать выдержку перед кастом:

Code:
while uo.getglobal('cast') == '1'
  wait(50)
wend
uo.setglobal('cast', '1')
кастую
uo.setglobal('cast', '0')


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


Top
   
PostPosted: 2006-04-18 12:54:23 
Offline

Joined: 2006-02-03 06:53:36
Posts: 64
единственное что приходит в голову, через set/getGlobal сделать очередь. пример есть тут, только тут не очередь, а стек. очередь будет в реализации посложнее.


Top
   
PostPosted: 2006-04-18 13:02:43 
Offline

Joined: 2006-02-03 06:53:36
Posts: 64
накидал быстренько, но не проверял :)

Code:
sub fifoInit()
   uo.setGlobal('fifoHead', '0')
   uo.setGlobal('fifoTail', '0')
end sub

sub fifoPush(value)
   var head = val(uo.getGlobal('fifoHead'))
   uo.setGlobal('fifo' + str(head), value)
   uo.setGlobal('fifoHead', str(head+1))   
end sub

sub fifoPop()
   var head = val(uo.getGlobal('fifoHead'))
   var tail = val(uo.getGlobal('fifoTail'))
   
   if (head == tail) then
      #очередь пустая
      return ''
   end if
   
   var value = uo.getGlobal('fifo' + str(tail))
   tail = tail + 1
   
   if (tail == head) then
      #очередь пустая. ставим указатели в 0
      tail = 0
      head = 0
   end if
   
   uo.setGlobal('fifoHead', str(head))
   uo.setGlobal('fifoTail', str(tail))   
   
   return value
end sub


Top
   
 Post subject:
PostPosted: 2006-04-18 13:35:59 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Сори, но понимание чужих скриптов мне плохо дается, тк писать я их начал недавно, хотел бы задать несколько глупых вопросов:

sub fifoPush(value) - откуда берется это vaule и что она делает, отдаленно я знаю что так переносятся переменные из одного скрипта в другой, при запуске второго из первого.

uo.setGlobal('fifo' + str(head), value) - непонятен смылс такого извращенного задания переменной, что это дает?

(head == tail) - скобки обязательны?

return value - в паре своих скриптов использовал просто "return" для выклучения скрипт, что же делает тобой напианая строка я не понимаю.

Оч признателен за помощь, но ты не мог бы в кратце изложить принцип работы сего творения?


Top
   
 Post subject:
PostPosted: 2006-04-18 15:08:41 
Offline

Joined: 2006-02-03 06:53:36
Posts: 64
Sanch wrote:
sub fifoPush(value) - откуда берется это vaule и что она делает, отдаленно я знаю что так переносятся переменные из одного скрипта в другой, при запуске второго из первого.

value - значение, которое надо положить в очередь. любая строка, например название каста - Greater Heal, Energy Bolt


Sanch wrote:
uo.setGlobal('fifo' + str(head), value) - непонятен смылс такого извращенного задания переменной, что это дает?

в инжекте нету глобальных массивов. поэтому приходиться так вот извращаться.

Sanch wrote:
(head == tail) - скобки обязательны?

точно не знаю, но вроде бы нет. просто привчка еще с паскаля

Sanch wrote:
return value - в паре своих скриптов использовал просто "return" для выклучения скрипт, что же делает тобой напианая строка я не
понимаю.

return можно использовать не тока для выхода из функии, но и для возврата резултата. например:
Code:
sub statCap()
    return uo.str + uo.dex + uo.int
end sub
...
    uo.print(str(statCap())) #сумма str, dex и int
...



Sanch wrote:
Оч признателен за помощь, но ты не мог бы в кратце изложить принцип работы сего творения?


ну например

Code:
sub energyBolt()
    fifoPush("'Energy Bolt' lasttarget")
end sub

sub lightnig()
    fifoPush("'Lightning'  lasttarget")
end sub

sub greaterHeal()
    fifoPush("'Greater Heal' self")
end sub

sub castManager()
    var spell
    repeat
        spell = fifoPop()
        if (spell <> '') then
           uo.exec('cast ' + spell)
           wait(5000)
        end if
        wait(100)
    until 0
end sub


lightning, greaterHeal, energyBolt - забиндены на кнопки. они просто запихиваю в очередь строчку с описанием каста.
castManager запущен постоянно. он пытаеться взять из очереди строку с описанием каста и если строка не пустая, то кастует. выдерживает паузу, и начинает с начала.

fifoInit - просто инициализация переменных.
fifoPush - ложит в очередь очередной элемент. просто создает очередную глобальную переменную fifoNNN - где NNN номер элемента
fifoPop - возвращает элемент из очереди, который был туда положен раньше других (самый старый).

иллюстрация работы очереди
Code:
начальное состояние
  head
   |
[  0  ][  1  ][  2  ][  3  ][  4  ][  5  ][  6  ]
   |
  tail

push

         head
          |
[  0  ][  1  ][  2  ][  3  ][  4  ][  5  ][  6  ]
   |
  tail

push
                head
                 |
[  0  ][  1  ][  2  ][  3  ][  4  ][  5  ][  6  ]
   |
  tail

pop
                head
                 |
[  0  ][  1  ][  2  ][  3  ][  4  ][  5  ][  6  ]
          |
         tail

pop
                head
                 |
[  0  ][  1  ][  2  ][  3  ][  4  ][  5  ][  6  ]
                 |
                tail


Top
   
 Post subject:
PostPosted: 2006-04-18 18:48:03 
Offline
Expert!
User avatar

Joined: 2005-05-04 14:05:19
Posts: 2580
Location: Москва
Ели прикинуть просто то лутше пользоватся не стеком...
Потому что возникнет очередь и передить стек это будет дополнительная затрата мозгов во время пвп...
Гораздо лутше сделать 1 глобальную переменую котораяне даст вам кастовать пока 100%не произойдет событие сведельствующие обокончании каста...
Одноделочто это надокак то определять... в пвп привязыватся к изменению мваны очень черевато... в общем за висет от шарда...
а в каждыйскрипт качста добавить переменую проверки...
Для на дежности эту глобальную переменую можнообнулять как по событию так и по времени


Top
   
 Post subject:
PostPosted: 2006-04-18 19:08:19 
Offline
Expert!

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

1. При старте инжекта создается глобальная переменная, в которую через пробел пишутся условные номера кастов (по собственной системе нумерации, я делал типа 41 - это четвертый уровень, первый закл и т.д.) В начале переменная пуста. В соседней переменной номер очередного каста (слова в первой переменной). И флаг занятости каста.

2. Далее у меня были бинды на касты, которые проверяли флаг каста, если занято - проверяли первую переменную, если пуста - записывали в нее свой номер и запускали скрипт на отложенный каст. Дальше все просто - скрипт на отложенный каст записывал в флаг занятости третье значение (не занято - 0, занято обычным кастом - 1, занято скриптом отложенного каста - 2), и начинал читать по словам переменную с кастами. При этом он выводил на экран принтом два следующих каста и счетчик времени. Был забинден еще маленький скриптик, который через глобалку передавал отложенному касту пропустить один каст или очистить всю очередь. По такому принципу.


Top
   
 Post subject:
PostPosted: 2006-04-18 19:42:45 
Offline

Joined: 2006-02-03 06:53:36
Posts: 64
Grin wrote:
...

вобщем согласен, очередь плохо себя будет вести довольно часто.

я исполльзую глобальный таймер -
в зависимости от того с чего кастуеться спелл - с регов, или с со скроллов - ставиться разная задержка до следующего каста.
Code:
sub setTimer(timerName, expireTime)
   uo.setGlobal(timerName, str(uo.timer() + int(expireTime/100)))
end sub

sub isTimerExpire(timerName)
   var n = val(uo.getGlobal(timerName))
   return n <= uo.timer()
end sub

sub castLightning()
   if (isTimerExpire('castTimer')) then
      if (uo.count('lightScroll')) then
         uo.waitTargetObject('lasttarget')
         uo.useType('lightScroll')
         setTimer('castTimer', 1600)
      else
         uo.cast('Lightning', 'lasttarget')
         setTimer('castTimer', 2800)
      end if
   end if
end sub


Top
   
 Post subject:
PostPosted: 2006-04-19 01:07:32 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Ребят, имхо это все лишние выкрутасы для дилетантов пвп.


Top
   
 Post subject:
PostPosted: 2006-04-19 09:09:23 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Quote:
Ребят, имхо это все лишние выкрутасы для дилетантов пвп.


Те люди которые к делетантам не относятся просто обставляют ящиками и вызрывают экспложенами.


Top
   
 Post subject:
PostPosted: 2006-04-19 09:21:31 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Ну это уже особенности шардов.
Но из своего опыта в пвп я понял, что где можно обойтись простым скриптом на каст, лучше не делать всяких циклов, очередей и т.п.


Top
   
 Post subject:
PostPosted: 2006-04-19 09:28:33 
Offline
User avatar

Joined: 2005-07-17 15:30:52
Posts: 308
Location: www.drw.ru
Quote:
Ну это уже особенности шардов.
Но из своего опыта в пвп я понял, что где можно обойтись простым скриптом на каст, лучше не делать всяких циклов, очередей и т.п.


Имхо было бы оч неплохо если промежутки между кастами были по 100мсек а не по 500-1000 при использовании рук, чтобы при физле сразу кастовать а не пока до тебя дойдет что у тебя физл, это то же потеря где то в 500-1000мсек.

А еще у нас на шарде не прокатывают скрипты на фс и лайтинги со скролов, тк есть такая вещь как антимагик класс, который зависит от армора на тебе, можешь ты по врагу кидать со скрола или нет.

Хочу спросить, допустим в журнале появилось сообщение о касте, моно определить кто кастует, можно ли определить в кого?


Last edited by Sanch on 2006-04-19 09:32:56, edited 1 time in total.

Top
   
 Post subject:
PostPosted: 2006-04-19 09:32:07 
Offline
Expert!
User avatar

Joined: 2004-08-11 23:56:17
Posts: 746
Location: The Citadel
Когда ты привыкнешь, у тебя тоже будут на автомате пальцы, и получишь желанные 100мс. Ну может чуть больше :)
В кого стреляют - никак.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 13 posts ] 

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:  
cron
Powered by phpBB® Forum Software © phpBB Limited