Переклад вандов по имени.

Anything and all.

Moderators: Murderator+, Murderator

kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Переклад вандов по имени.

Post by kobol »

Написал скриптик по переносу вандов и учетом имени и зарядов.
Имеющиеся в контейнере- источнике ванды переносит нормально.
Но если указать таргетом на ванд, который лежит не в источнике, а в другом месте, то имя ванда определяется неправильно и переносятся не те ванды.
Вообще с именами вандов какое-то шаманство, с первого раза не определяются пришлость сначала брать
uo.info ('finditem') а уж потом UO.GetName( 'finditem' ).



Code: Select all

var clr=38, clo=43, cly=53, clg=63, clb1=3, cla=89, clda=83, clp=120 , clgr=1088, clb=1161
# красный   - '38' или '0x0026'  # темно-бирюзовый - '83' или '0x0053'
# оранжевый - '43' или '0x002B'  # голубой    - '89'  или '0x0059'
# желтый    - '53' или '0x0035'  # синий      - '3'   или '0x0003'
# зеленый   - '63' или '0x003F'  # фиолетовый - '120' или '0x0078'
# '1088' - по умолчанию
# 1152 - бирюзовый 1151 - черный 1155 - фиолетовый 1156 - белый  1158 - кр 1161 - синий 1162 - темно зел 1166 ткр 1169 сз
# 2500 2524 - оранж  2517 кр 2567 малин 2566=0x0A06 белый
#  2998 - белый 3008 3221 3600 и выше - контур
###################################################
Sub PrintInColor(text,color)
   # PrintInColor("здесь текст",'цвет текста')
   # красный   - '38' или '0x0026'  # темно-бирюзовый - '83' или '0x0053'
   # оранжевый - '43' или '0x002B'  # голубой    - '89'  или '0x0059'
   # желтый    - '53' или '0x0035'  # синий      - '3'   или '0x0003'
   # зеленый   - '63' или '0x003F'  # фиолетовый - '120' или '0x0078'
   # '1088' - по умолчанию
   # 1152 - бирюзовый 1151 - черный 1155 - фиолетовый 1156 - белый  1158 - кр 1161 - синий 1162 - темно зел 1166 ткр 1169 сз
   # 2500 2524 - оранж  2517 кр 2567 малин 2566=0x0A06 белый
   #  2998 - белый 3008 3221 3600 и выше - контур
   
   
   UO.ConColor(color)
   ;UO.Exec('set quiet 0')   # Показывать сообщения Injection.
   UO.Print(text)
   ;UO.Exec('set quiet 1')   # Не показывать сообщения Injection.
   UO.ConColor('1088')
endsub

###################################################
sub pereklad()
#****ДРВ*****#
# based on... (C) Cooper
# modified by Kobol, 2014.
#****v1.0****#
VAR Ttov
Var ReqName, CurrName   
var ReqWandName, ReqWandCharge=3 ; требуемое имя ванда,  требуемый заряд ванда
var CurrWandName, CurrWandCharge ; текущее найденное имя ванда, текущее найденный заряд ванда
#------------- примеры имен вандов ----------------
;a Magic wand of Cure (8 charges)
;a Magic wand of Mana Drain (10 charges)
;a Magic wand of Reactive Armor (10 charges)
;a Magic wand of Flame Strike (8 charges)

;нужно сравнивать по имени и учитывать число зарядов. разряженные ванды не брать
#-------------
UO.Print('Выбери мешок ИСТОЧНИК (From)')
UO.Exec('addobject istok')
while UO.Targeting()
   wait(100)
wend

UO.UseObject('istok')

UO.Print('Выбери ПРИЕМНИК (To)')
UO.Exec('addobject priem')
while UO.Targeting()
   wait(100)
wend

UO.UseObject('priem')

UO.Print('Выбери ПРЕДМЕТ (Item)')
UO.Exec('addobject tovar')
while UO.Targeting()
   wait(100)
wend

TTov = UO.GetGraphic('tovar')
wait (100)
UO.FindType(Ttov,'-1','istok')
wait (400)

If UO.FindCount() > 0 then
   
   uo.info ('finditem')
   uo.textclear()
   wait(50)
   ReqName= UO.GetName( 'finditem' )
   wait(50)
   UO.Print('ReqName='+ReqName)
   
   ReqWandName=left(ReqName, InStr(ReqName, '(')) ; a Magic wand of Mana Drain (10 charges)
   ;uo.print ("ReqWandName="+ ReqWandName)
   PrintInColor("ReqWandName="+ ReqWandName,CLR)
   
   ;ReqWandCharge=val(mid(ReqName, InStr(ReqName, '(')+1, 2))
   uo.print ("ReqWandCharge="+ str(ReqWandCharge))
   ;PrintInColor("ReqWandCharge="+ str(ReqWandCharge),CLR)
   
   ;return ;!!!!!!!!!!!!!!
   
   repeat
   uo.info ('finditem')
   uo.textclear()
   wait(50)
   CurrName= UO.GetName( 'finditem' )
   wait(50)
   UO.Print('CurrName='+CurrName)
   
   if len(CurrName)> 0 then
      CurrWandName=left(CurrName, InStr(CurrName, '(')) ; a Magic wand of Mana Drain (10 charges)
      ;uo.print ("CurrWandName="+ CurrWandName)
   PrintInColor("CurrWandName="+ CurrWandName,CLb)
      
      CurrWandCharge=val(mid(CurrName, InStr(CurrName, '(')+1, 2))
      uo.print ("CurrWandCharge="+ str(CurrWandCharge))
   ;PrintInColor("CurrWandCharge="+ str(CurrWandCharge),CLb)
      if  ReqWandName==CurrWandName and CurrWandCharge>= ReqWandCharge then
   PrintInColor("CurrWandName="+ CurrWandName,CLg)
         
         UO.MoveItem('finditem', '0', 'priem')
         wait(800)
      else
         uo.ignore('finditem')
         wait (200)
         
         
      end if
      
   else
      
   end if
   
   wait(200)

   CheckLag()
   UO.FindType(Ttov,'-1','istok')
   
   until not UO.FindCount()
   
   UO.Print('Закончили...')
else
   UO.Print('А кидать то нечего...')
endif
uo.ignorereset()


end sub

############################################################
Sub CheckLag()
UO.DeleteJournal()
UO.Click('backpack')
repeat
Wait(250)
until UO.InJournal('backpack')
endsub

############################################################
sub InStr(Source, subStr)
var n = len(subStr)
var j
for var i = 0 to len(Source)-n
   j = 0
   while (j < n) and (Source[i+j] == subStr[j])
      j = j+1;
   wend
   if j == n then
      return i
   end if
next
return -1
end sub
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

Code: Select all

   uo.info ('finditem')
   uo.textclear()
   wait(50)
   ReqName= UO.GetName( 'finditem' )

замени на

Code: Select all

   uo.click('finditem')
   uo.textclear()
   wait(100) ; или 200 при необходимости
   ReqName= UO.GetName( 'finditem' )

и проблем не будет
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

На будущее, uo.GetName([object]) - Возвращает параметр обьекта object (по умолчанию - персонажа игрока) - имя обьекта. Если сервер никогда не выводил его на экран (как это делается например после одиночного щелчка click на обьекте или использования All Names в клиенте), то имя неизвестно.
Juicy Fruit
Posts: 820
Joined: 2011-06-11 19:54:23

Re: Переклад вандов по имени.

Post by Juicy Fruit »

Имена НПС и игроков определяются как только они появились на экране, по предметам нужно тыкать в любом случае самому (скриптом).
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Понял, спасибо! :D
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Перестало определяться имя ванда
Захожу старой инжой - работает нормально.
TrackWorldItem включен

Code: Select all

##################### использование wand #############################
sub wWand(wnum)
   ; Использование wWand(1) - ищет в паке и подсумках UsefulWand [1]="a Magic wand of Paralyze" и берет его (UO.useobject() )
   DIM WandType[4]
   WandType[0] = '0x0DF5' ;
   WandType[1] = '0x0DF3' ;
   WandType[2] = '0x0DF4' ;
   WandType[3] = '0x0DF2' ;
   #------------- примеры имен вандов ----------------
   ;a Magic wand of Cure (8 charges)
   ;a Magic wand of Mana Drain (10 charges)
   ;a Magic wand of Reactive Armor (10 charges)
   ;a Magic wand of Flame Strike (8 charges)
   ;нужно сравнивать по имени и учитывать бы число зарядов. разряженные ванды не брать
   var wCount=26
   dim UsefulWand [26] ;
   UsefulWand [1]='a Magic wand of Paralyze' ;
   UsefulWand [2]='a Magic wand of Paralyze Field' ;
   UsefulWand [3]='a Magic wand of Greater Heal' ; 4: Greater Heal !!!!!!!!!!!!!!! 11 -10
   UsefulWand [4]='a Magic wand of Cure' ; 2: Cure !!!!!!!!!!!!!!! 3 -5
   UsefulWand [5]='a Magic wand of Invisibility' ; 6: Invisibility !!!!!!!!!!!!!!! 19 -10
   UsefulWand [6]='a Magic wand of Reveal' ;!!!!
   UsefulWand [7]='a Magic wand of Recall' ;
   UsefulWand [8]='a Magic wand of Magic Reflection' ; 5: Magic Reflection !!!!!!!!!!!!!!! 16 -10

   UsefulWand [8]='a Magic wand of Wall of Stone' ;
   UsefulWand [9]='a Magic wand of Fire Field' ;
   UsefulWand [10]='a Magic wand of Magic Arrow' ; 1: Magic Arrow !!!!!!!!!!!!!!!    1 -10  ;
   UsefulWand [11]='a Magic wand of Reactive Armor' ; 1: Reactive Armor !!!!!!!!!!!!!!! 2 -10
   UsefulWand [12]='a Magic wand of Mana Drain' ;
   UsefulWand [13]='a Magic wand of Protection' ; 2: Protection !!!!!!!!!!!!!!! 4 -5
   UsefulWand [14]='a Magic wand of Fireball' ; 3: Fireball !!!!!!!!!!!!!!! 5 -5
   UsefulWand [15]='a Magic wand of Poison' ; 3:
   UsefulWand [16]='a Magic wand of Telekinesis' ;
   UsefulWand [17]='a Magic wand of Teleport' ; 3:
   UsefulWand [18]='a Magic wand of Dispel Field' ; 5: Dispel Field !!!!!!!!!!!!!!! 15 -5
   UsefulWand [19]='a Magic wand of Poison Field' ; 5: Poison Field !!!!!!!!!!!!!!! 18 -10
   ; ванды элемов
   
   UsefulWand[20] = 'a Magic wand of Water Elemental';
   UsefulWand[21] = 'a Magic wand of Earth Elemental';
   UsefulWand[22] = 'a Magic wand of Fire Elemental';
   UsefulWand[23] = 'a Magic wand of Air Elemental';
   
   UsefulWand[24] = 'a Magic wand of Daemon'; 'Magic wand of Daemon'
   UsefulWand[25]='a Magic wand of Blade Spirit' ;
   UsefulWand[26] = 'a Magic wand of Energy Vortex';
   
; ищем заданный wand в паке и подсумках
var WNameRQ,WNameCurr, ti, TTov, si, zz,flFound
   
;PrintInColor(str(wnum),'2999')
;PrintInColor(UsefulWand[wnum],'2999')
   
   ; ищем ванды
   for ti=0  to 3 ; перебираем по типам вандов
      Ttov=WandType[ti]
      
      UO.FindType(Ttov,'-1', 2) ; находим wand в паке и подсумках
      wait (10)
      If UO.FindCount() > 0 then
         
         repeat ; <<<<<<<<<<<<<<< цикл поиска вандов в паке и подсумках
            uo.click ('finditem')
            uo.info ('finditem')
            wait (250)
            WNameCurr =UO.GetName( 'finditem' ) ; имя найденного ванда

            PrintInColor(WNameCurr,clb); пишет просто "wand" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

            WNameRQ=UsefulWand[wnum]
            WNameRQ=left(WNameRQ, InStr(WNameRQ, '(')) ; a Magic wand of Mana Drain (10 charges)
            PrintInColor(WNameRQ,'2998')
            zz=instr(WNameCurr,WNameRQ) ; имя из массива совпадает с именем найденного ванда?
            PrintInColor(str(zz),clo)
            flFound=0

            if zz>-1 then ;если да, то берем его в руки
            PrintInColor(WNameCurr,"2524")
               
               flFound=1
               ti=3 ; для выхода из цикла
               uo.useobject("finditem")
            wserial=uo.getserial("finditem")
            wait(100)
            else
               uo.Ignore("finditem") ; ??????????????
            end if
            UO.FindType(Ttov,'-1',2)
            wait (20)
         until not UO.FindCount() or  flFound==1 ; ; <<<<<<<<<<<<<<<
      end if
            ;CheckLag()
   next ;  переходим к следующему типу Wandа
   
   uo.IgnoreReset()
   wait (30)
UO.Print('Finished...')
return flFound


end sub


Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

В _info имя есть?
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Incorrect User wrote:В _info имя есть?


нет, тоже wand.
кстати, да. делаешь ,info - в старой инже показывает имя, в новой - нет. При клике на ванд имя показывает и в старой и в новой.

info на dagger "crafted by *******". В старой инже показывает полностью 30 символов, в новой - только 29 символов, последний не показывается.
Проверил другой "cutlass crafted by *******" - тоже только 29 символов в новой инже.
Last edited by kobol on 2015-11-14 21:38:17, edited 1 time in total.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

Покажи инфо, и какое имя должно быть.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

------- новая -------------
ID=0x40539FC3 Type=0x0DF3 NMERVMD Name=wand
Quantity: 1 Colour: 0x0000 Layer: 0 Has: 0
X=91 Y=101 Z=0 C=0x40133DAF F=0x00

---------старая ----------- до клика на предмет
ID=0x40539FC3 Type=0x0DF3 NMERVMD Name=
Quantity: 0 Colour: 0x0000 Layer: 1 Has: 1
X=65535 Y=65535 Z=0 C=0x00133DC7 F=0x00

---------старая ----------- после клика на предмет
ID=0x40539FC3 Type=0x0DF3 NMERVMD Name=a Magic wand of Paralyze (10 charges)
Quantity: 0 Colour: 0x0000 Layer: 1 Has: 1
X=65535 Y=65535 Z=0 C=0x00133DC7 F=0x00

------- новая -------------
ID=0x40424961 Type=0x0F51 NRNETMD Name=Golden Dagger crafted by Note
Quantity: 1 Colour: 0x0032 Layer: 0 Has: 0
X=87 Y=141 Z=0 C=0x40133DAF F=0x00


---------старая -----------
ID=0x40424961 Type=0x0F51 NRNETMD Name=Golden Dagger crafted by Noteca
Quantity: 1 Colour: 0x0032 Layer: 0 Has: 1
X=102 Y=117 Z=0 C=0x402AB8C3 F=0x00
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

X и Y тоже какие-то левые.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

Когда-то в одной из версий имя вообще не отображало. У тебя последняя? У меня с именами в порядке, и координаты правильно отображает .
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Incorrect User wrote:Когда-то в одной из версий имя вообще не отображало. У тебя последняя? У меня с именами в порядке, и координаты правильно отображает .


Script version 1508.09 (Injection >=1501.17)
У меня запущено несколько клиентов, если что.
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

Кол-во клиентов не должно иметь значения. Отпишу джусифруту, оставь шарда название.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Incorrect User wrote:Кол-во клиентов не должно иметь значения. Отпишу джусифруту, оставь шарда название.


Dragon World

Спасибо )
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

В общем говорит что так и должно быть. На некоторых шардах такое есть, то что ты получаешь теперь это и есть имя, остальное это левый текст, который теперь инжект не воспринимает. Поэтому теперь просто переделай на получение названия из журнала.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Incorrect User wrote:В общем говорит что так и должно быть. На некоторых шардах такое есть, то что ты получаешь теперь это и есть имя, остальное это левый текст, который теперь инжект не воспринимает. Поэтому теперь просто переделай на получение названия из журнала.


На старой-то инже нормально. И ванды и названия предметов >30 символов
Incorrect User
Posts: 949
Joined: 2011-05-23 00:33:30

Re: Переклад вандов по имени.

Post by Incorrect User »

Когда ты кликаешь на предмет, приходит пакет с двумя значениями, сначала идет имя, дальше идет текст. В данном случае у тебя имя wand и далее текст a Magic wand of Paralyze (10 charges). Раньше инжект брал текст как имя, но на некоторых шардах во второй параметр вместо имени пишут всякую отсебятину, поэтому инжект теперь читает только имя. А про координаты, новый инжект показывает правильные, старый показывал ошибочные.
kobol
Posts: 119
Joined: 2012-12-15 12:03:25
Location: C-Петербург

Re: Переклад вандов по имени.

Post by kobol »

Понятно :cry:
dubd
Posts: 249
Joined: 2012-07-27 23:43:14

Re: Переклад вандов по имени.

Post by dubd »

народ, а есть скрипт такой на определение вандов? А то их гдето 500 и в ручную очень долго все это делать.
Post Reply