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

Переклад вандов по имени.
http://forum.yoko.com.ua/viewtopic.php?f=20&t=17416
Page 1 of 2

Author:  kobol [ 2014-03-15 21:53:06 ]
Post subject:  Переклад вандов по имени.

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



Code:
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

Author:  Incorrect User [ 2014-03-15 22:45:52 ]
Post subject:  Re: Переклад вандов по имени.

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

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

и проблем не будет

Author:  Incorrect User [ 2014-03-15 22:54:33 ]
Post subject:  Re: Переклад вандов по имени.

На будущее, uo.GetName([object]) - Возвращает параметр обьекта object (по умолчанию - персонажа игрока) - имя обьекта. Если сервер никогда не выводил его на экран (как это делается например после одиночного щелчка click на обьекте или использования All Names в клиенте), то имя неизвестно.

Author:  Juicy Fruit [ 2014-03-15 23:49:40 ]
Post subject:  Re: Переклад вандов по имени.

Имена НПС и игроков определяются как только они появились на экране, по предметам нужно тыкать в любом случае самому (скриптом).

Author:  kobol [ 2014-03-16 17:04:59 ]
Post subject:  Re: Переклад вандов по имени.

Понял, спасибо! :D

Author:  kobol [ 2015-11-14 20:08:34 ]
Post subject:  Re: Переклад вандов по имени.

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

Code:
##################### использование 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



Author:  Incorrect User [ 2015-11-14 20:12:12 ]
Post subject:  Re: Переклад вандов по имени.

В _info имя есть?

Author:  kobol [ 2015-11-14 21:23:55 ]
Post subject:  Re: Переклад вандов по имени.

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


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

info на dagger "crafted by *******". В старой инже показывает полностью 30 символов, в новой - только 29 символов, последний не показывается.
Проверил другой "cutlass crafted by *******" - тоже только 29 символов в новой инже.

Author:  Incorrect User [ 2015-11-14 21:26:36 ]
Post subject:  Re: Переклад вандов по имени.

Покажи инфо, и какое имя должно быть.

Author:  kobol [ 2015-11-14 21:41:41 ]
Post subject:  Re: Переклад вандов по имени.

------- новая -------------
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

Author:  kobol [ 2015-11-14 21:50:13 ]
Post subject:  Re: Переклад вандов по имени.

X и Y тоже какие-то левые.

Author:  Incorrect User [ 2015-11-14 21:55:40 ]
Post subject:  Re: Переклад вандов по имени.

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

Author:  kobol [ 2015-11-14 22:19:22 ]
Post subject:  Re: Переклад вандов по имени.

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


Script version 1508.09 (Injection >=1501.17)
У меня запущено несколько клиентов, если что.

Author:  Incorrect User [ 2015-11-14 22:24:23 ]
Post subject:  Re: Переклад вандов по имени.

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

Author:  kobol [ 2015-11-14 22:31:55 ]
Post subject:  Re: Переклад вандов по имени.

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


Dragon World

Спасибо )

Author:  Incorrect User [ 2015-11-15 22:14:19 ]
Post subject:  Re: Переклад вандов по имени.

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

Author:  kobol [ 2015-11-15 23:16:47 ]
Post subject:  Re: Переклад вандов по имени.

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


На старой-то инже нормально. И ванды и названия предметов >30 символов

Author:  Incorrect User [ 2015-11-15 23:25:10 ]
Post subject:  Re: Переклад вандов по имени.

Когда ты кликаешь на предмет, приходит пакет с двумя значениями, сначала идет имя, дальше идет текст. В данном случае у тебя имя wand и далее текст a Magic wand of Paralyze (10 charges). Раньше инжект брал текст как имя, но на некоторых шардах во второй параметр вместо имени пишут всякую отсебятину, поэтому инжект теперь читает только имя. А про координаты, новый инжект показывает правильные, старый показывал ошибочные.

Author:  kobol [ 2015-11-16 01:56:04 ]
Post subject:  Re: Переклад вандов по имени.

Понятно :cry:

Author:  dubd [ 2015-11-17 22:28:44 ]
Post subject:  Re: Переклад вандов по имени.

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

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