ИД обьекта передать в переменную

Ask for help

Moderators: Murderator+, Murderator

Post Reply
Chico
Posts: 46
Joined: 2005-05-02 17:37:12
Contact:

ИД обьекта передать в переменную

Post by Chico »

При присваивании переменной из объекта пользуйюь такой примитивной конструкцией

Code: Select all

if n = 1 then
   Runebookid = 'RB_TM1'
end if
if n = 2 then
   Runebookid = 'RB_TM2'
end if
if n = 3 then
   Runebookid = 'RB_TM3'
end if
if n = 4 then
   Runebookid = 'RB_TM4'
end if
if n = 5 then
   Runebookid = 'RB_TM5'
end if


надо что то типа
Runebookid = 'RB_TM' + str(n)

но напрямую из Обьекта передать в переменную не выходит, кто что подксажет ?
[/code]
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Не понял твоего кода =\ В чём его смысл?
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Re: ИД обьекта передать в переменную

Post by DerMeister =) »

Chico wrote:При присваивании переменной из объекта пользуйюь такой примитивной конструкцией

Code: Select all

if n = 1 then
   Runebookid = 'RB_TM1'
end if
if n = 2 then
   Runebookid = 'RB_TM2'
end if
if n = 3 then
   Runebookid = 'RB_TM3'
end if
if n = 4 then
   Runebookid = 'RB_TM4'
end if
if n = 5 then
   Runebookid = 'RB_TM5'
end if


надо что то типа
Runebookid = 'RB_TM' + str(n)

но напрямую из Обьекта передать в переменную не выходит, кто что подксажет ?
[/code]


Какого "Объекта"? В мире много языков программирования и все они имеют свою особенную терминологию. В нашем понимании (инжекта), "объект" это часть "мира" УО, имеющая свой серийный номер, тип, цвет и тд и тп... Поэтому поясни что ты имел ввиду.
ЗЫ: А, кстате, Runebookid = 'RB_TM' + str(n) должно работать.
DerMeister сейчас на нейрале!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Re: ИД обьекта передать в переменную

Post by Edred »

DerMeister =) wrote:Какого "Объекта"?
ЗЫ: А, кстате, Runebookid = 'RB_TM' + str(n) должно работать.


Он имел в виду наверняка объекты, им определенные на закладке объектов. То есть те, которые в скрипте пишутся в кавычках. Кстати,
Chico wrote:Runebookid = 'RB_TM1'

это не должно работать. Если RB_TM1 - это объект, определенный на закладке объектов. Тебе надо писать:

Code: Select all

Runebookid = UO.GetSerial('RB_TM1')

И, кстати, тебе никто не мешает написать:

Code: Select all

Runebookid = UO.GetSerial('RB_TM' + str(n))
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Хмм, угу...
А он так написал, что я ничё не понял... Меня сбило с толку Runebookid = 'RB_TM1'... до сих пор не могу представить, что это попытка обращения к объекту...
DerMeister сейчас на нейрале!
Chico
Posts: 46
Joined: 2005-05-02 17:37:12
Contact:

Post by Chico »

Ну да Я имел ввиду, обьекты на закладке Object - я решил что все поймут, так как объекты в мире имеют ID а ниакак не название RB_TM1
А конструкция

Code: Select all

Runebookid = 'RB_TM1'

прекрасно всегда работала и работает, у меня она используется повсеместно, а зачем использовать UO.GetSerial('RB_TM1'), если сериал уже и есть RB_TM1. UO.GetSerial мной используется для преобразования тип-> обьект.

Короче говоря, мне надо на основании сгенереных динамично объектов получать ID в переменную.

То есть
В шапке указываю количество рунбук
var kol_buk = 5

потом делаю

Code: Select all

   for i= 1 to Kol_buk 
      uo.Exec('addobject Runebookid')
      while Uo.Targeting()
        wait(100)
       wend
       RB = "RB_TM"+str(i)
       Uo.addobject(RB,'Runebookid')
   next

У меня создается кучка объектов с именами RB_TM1, RB_TM2и т.д., столько сколько надо. от 1 до бесконечности

Потом у меня есть процедурка смены буки при прохождении первой

Code: Select all

Sub Smena_run()
   var v = val(uo.getglobal('Tek_run_tm'))
   var n = val(uo.getglobal('nomer_buki'))
   if  v < kol_run - 1  then     ; Если текущий номер меньше всего количества рун то
         uo.setglobal('Tek_run_tm',str(v+1))        ;  + 1 к счетчику рунок
      else
         uo.setglobal('Tek_run_tm','0')        ; Иначе начинаем цикл сначала
         uo.print('bila buka - ' + str(n))
         
           if n == kol_buk then
                uo.print('stala buka - ' + str(1)) ; Если текущий номер равен количству рунбук то  к первой иначе к следующей
               uo.setglobal('nomer_buki',str(1))       
         else
            uo.print('stala buka - ' + str(n+1))
            uo.setglobal('nomer_buki',str(n+1))       
         end if   
   end if
   wait(500)
end sub



То есть при прохождении буки до конца начинается следующая, до последней и сначала.

А вот реколится по букам так

Code: Select all

sub Rec_to_home()
var Udacha = 0
var Run, Runebookid
var v = val(uo.getglobal('Tek_run_tm'))
var n = val(uo.getglobal('nomer_buki'))
uo.set( "norbcheck", "1" )
uo.set( "norbcalc", "1" )
if n == 1 then
   Runebookid = 'RB_TM1'
end if
if n == 2 then
   Runebookid = 'RB_TM2'
end if
if n == 3 then
   Runebookid = 'RB_TM3'
end if
if n == 4 then
   Runebookid = 'RB_TM4'
end if
if n == 5 then
   Runebookid = 'RB_TM5'
end if

run = v + 9
      repeat
         UO.FindType('0x0e43', '-1', '1')      ; Ищем сундуки
         wait(100)
         If UO.FindCount() < 1 Then      ; если не находим сундук то значит еще в лесу
            uo.cast("Recall",Runebookid)
            wait(8000)
         else
            Udacha = 1               
         end if      
         until  Udacha == 1      
Udacha = 0
end sub



И мне вышеприведенная конструкция не наравится, хотя весь скрипт и работает изумиетльно, но перебор по условию сдишком громоздок, и нельзя сделать большое число рунбук
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

А, теперь ясно...

Токо Эдред то тебе всё уже подсказал:
Вместо

Code: Select all

if n == 1 then 
   Runebookid = 'RB_TM1'
end if
if n == 2 then
   Runebookid = 'RB_TM2'
end if
if n == 3 then
   Runebookid = 'RB_TM3'
end if
if n == 4 then
   Runebookid = 'RB_TM4'
end if
if n == 5 then
   Runebookid = 'RB_TM5'
end if

Сделай просто:

Code: Select all

Runebookid = UO.GetSerial('RB_TM' + str(n))
DerMeister сейчас на нейрале!
Post Reply