Yoko

All sides of Injection
It is currently 2018-12-10 07:22:18

All times are UTC+02:00




Post new topic  Reply to topic  [ 9 posts ] 
Author Message
 Post subject: Trade-окна.
PostPosted: 2006-12-05 07:50:45 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3212
Покавырялся чутка, решил поделиться, если кому нужно -)

Имя того, с кем торгуем.
Code:
str TradeName( [int TradeNumber] );

TradeNumber - номер окошка (отсчёт идёт от нуля).

ID контейнера в котором торгуем.
Code:
str TradeContainer( [[str Position], int TradeNumber] );

Position - left или right, в зависимости от того, какая часть окна нужна.

ID того, с кем торгуем:
Code:
str TradeOpponent( [int TradeNumber] );


Проверка подтверждённости трейд-окна и подтверждение.
Code:
bool TradeCheck( [[[int TradeNumber], str Position], bool Check] );

Check - отметить галочкой, с правой половиной разумеется не работает.

Количество окон торговли.
Code:
int TradeCount();


Список аругментов может быть не полный, по умолчанию используется самое первое окно - нулевое, если можно так выразиться и соответсвенно его левая часть.

Всё, что я перечислил - просто замечательно, но вот никто из вас случаем незнает, как закрыть трейд-окно? Следущие варианты не устраивают: схайдиться, нажать правой кнопкой.

PS: Вероятно зря я выкладываю эту информацию - разведёться теперь ботов-торговцев по всему миру -)

PPS: А оно ваще кому-нибудь нужно? -)


Top
   
 Post subject:
PostPosted: 2006-12-05 08:37:51 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3212
Написал небольшой пример, не тестировал, ибо писал на коленках.

Всё проблема в работе в Injection с трейд-окнами, это если трейд окно закроют.

Допустим - у нас есть два трейд окна (ID нуль и единица соответсвенно), нулевой окно закрывают - то окно которое имело ID единица - становиться ID нуль, а трейд-окно с ID единица более не существует.

В чём суть моего примера? Суть простая - продемонстрировать работу с несколькими трейд-окнами, если что-то где-то ошибся, надеюсь сами доправите, ибо тестировать не имею возможности (3 чара для меня несколько перебор, а просить друзей помочь отлаживать скрипт - совесть не позволяет).

Code:
sub Trader()
var i
repeat
   if uo.TradeCount() then
      ; Если есть трейд-окна - пускаем цикл.
      for i=0 to uo.TradeCount() -1
         if Not uo.getGlobal( "Trade thread " + str( i ) ) == "1" then
            ; Если обработчик трейд-окна не определён - запустим его.
            uo.setGlobal( "Trade thread " + str( i ), "1" )
            uo.setGlobal( "Trade number", str( i ) )
            uo.exec( "exec doTrader" )
         endif
      next
   endif
   wait(100)
until false
endsub

Sub doTrader()
var i, old_trade, trade = val( uo.getGlobal( "Trade number" ) ) ; получим ID трейд-окна
var player = uo.TradeOpponent( trade ) : Получим ID того, с кем торгуем
; Следущий цикл крутится, пока оппонент не подтвердит сделку.
repeat
   wait(100)
   if Not player == uo.TradeOpponent( trade ) then
   ; Если трейд-окно с ID меньшим или равным, чем у этого было закрыто
      old_trade = trade ; запомним, для истории -)
      for i=0 to uo.TradeCount() -1
      ; Пробежимся циклом по всем трейд окнам
         if uo.TradeOpponent( trade ) == player then
            ; Если оппонент найден
            trade = i
            i = uo.TradeCount() -1
         endif
      next
      if uo.TradeCount() >= old_trade then
         ; Затрудняюсь сказать, что за проверка
         ; Но она нужна, точно говорю -)
         uo.setGlobal( "Trade thread "+str(old_trade), "0" )
      endif
      if Not uo.TradeOpponent( trade ) == trade then
         ; Если трейд окно с этим игроком не найдено
         ; Стало быть, оно было закрыто - выключаем обработчик
         uo.print( "Trade window closed" )
         return false
      endif
   endif
until uo.TradeCheck( trade, "right" )
uo.TradeCheck( trade, "left", true ) ; Подтверждаем сделку
uo.print( "Thanks" ) ; Делаем что-либо с полученным добром
uo.setGlobal( "Trade thread " + str( trade ), "0" ) ; Выключаем обработчик
endsub


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

Если найдены трейд окна - проверяем каждое из них, если для данного окна не запускалась функция-обработчик (это определяем через глобальные переменные) - тогда запустим обработчик и пометим, что обработчик запущен.

Касательно трейд-окон, которые впоследствии были закрыты - читайте внутри функции.

PS: Если вдруг в одну долю секунды произойдёт куча всяких открытий и закрытий трейд-окон, то скрипт скорее всего не справится чьё-нибудь окно не отработает. Впринципе можно проверку пришить - если такое случилось, то схайдиться и расхайдиться.

PPS: Теперь точно толпа ботов-торговцев разведёться.


Top
   
 Post subject:
PostPosted: 2006-12-05 10:55:49 
Offline
Expert!
User avatar

Joined: 2005-09-14 15:31:58
Posts: 2150
Location: Latvia
это в полезности :wink:

_________________
Уроки языка Injection
Основные команды языка Injection
Yoko Injection Code Sweeper
Drw (2009) скрипты
2017 Начал играть на Uorpg.net


Top
   
 Post subject:
PostPosted: 2006-12-06 08:55:13 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3212
Мой топик - мне лучше знать куда.

Никто не проверит на работспособность?..


Top
   
 Post subject:
PostPosted: 2006-12-09 00:47:39 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3212
Говорил с Yoko насчёт трейдов.

Думал, напрягал мозг.

Как нормально закрыть контейнер - так и не придумал.

Придумал другую фичу:
Code:
uo.hide( uo.tradecontainer( "left" ) )
uo.hide( uo.tradecontainer( "right" ) )


После такого, исчезнут вещи в трейд окне, что и логично, но трейд окно будет висеть. А вот после правого нажатия - начинается интересное - в клиенте трейд-окно исчезнет, но физически - оно будет существовать.

Вопрос о закрытии трейда остаётся открытым.

Добавлено:
Много думал, пришёл к выводу - есть способ проще. Жаль, что мне на него не указали - потратил кучу времени.

И вообще - логика у меня неверная.
- Зачем не закрывать трейд-окно? Оно, мне, что? Мешает, чтоли ? - Нет, не мешает. Ну так и не буду его ворошить - пущай висит, всё равно пару тыщь чаров никто не притащит, чтобы понаоткрывать трейдов и подвесить клиент.

Добавлено:
Касательно закрытия всех трейд окон, на данный момент я знаю три варианта:
1. UO'шный макрос CloseGumps.
2. ,useskill Hiding
3. Right Click

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

Добавлено:
Думал, читал список комманд.

Интересно, а через ,target можно извратиться, и что-нибудь экое замутить?..


Top
   
 Post subject:
PostPosted: 2006-12-09 18:57:53 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Quote:
Для закрытия одного гампа - может подойти трейти пункт, но он будет закрывать верхний гамп, а не нужный, что наврятли понадобится при работе с несколькими трейд-окнами.


Хмм, а так разве бывает, что несколько трейд окон одновременно открылись? Если "трейд окно", это то, что я подумал, так тогда при попытке открыть второе вылазит "You already in trade".

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-12-10 07:59:02 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3212
DerMeister =) wrote:
Quote:
Для закрытия одного гампа - может подойти трейти пункт, но он будет закрывать верхний гамп, а не нужный, что наврятли понадобится при работе с несколькими трейд-окнами.


Хмм, а так разве бывает, что несколько трейд окон одновременно открылись? Если "трейд окно", это то, что я подумал, так тогда при попытке открыть второе вылазит "You already in trade".

У тебя вылазит, а у меня не вылазит.

Зачем тогда uo.TradeCount() ? Думаешь года три назад Yoko просто так писал эту функцию ?


Top
   
 Post subject:
PostPosted: 2006-12-10 08:57:46 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Destruction wrote:
DerMeister =) wrote:
Quote:
Для закрытия одного гампа - может подойти трейти пункт, но он будет закрывать верхний гамп, а не нужный, что наврятли понадобится при работе с несколькими трейд-окнами.


Хмм, а так разве бывает, что несколько трейд окон одновременно открылись? Если "трейд окно", это то, что я подумал, так тогда при попытке открыть второе вылазит "You already in trade".

У тебя вылазит, а у меня не вылазит.

Зачем тогда uo.TradeCount() ? Думаешь года три назад Yoko просто так писал эту функцию ?

Ну, дык, ты хелп тогда перепиши. А тоя про "недокументированниые" функийии ничо не знаю.

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-12-10 18:10:32 
Offline
Junior Expert
User avatar

Joined: 2004-06-24 22:08:56
Posts: 3212
Хелп переписать не могу - нет доступа.

Посему выложил сюда, внимательно прочти первый пост - там вся информация про эту комманду !!!


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

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 1 guest


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