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

ИД обьекта передать в переменную
http://forum.yoko.com.ua/viewtopic.php?f=3&t=9095
Page 1 of 1

Author:  Chico [ 2006-10-17 15:18:01 ]
Post subject:  ИД обьекта передать в переменную

При присваивании переменной из объекта пользуйюь такой примитивной конструкцией
Code:
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]

Author:  Scripts Writer [ 2006-10-17 16:00:02 ]
Post subject: 

Не понял твоего кода =\ В чём его смысл?

Author:  DerMeister =) [ 2006-10-17 22:05:33 ]
Post subject:  Re: ИД обьекта передать в переменную

Chico wrote:
При присваивании переменной из объекта пользуйюь такой примитивной конструкцией
Code:
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) должно работать.

Author:  Edred [ 2006-10-17 22:12:55 ]
Post subject:  Re: ИД обьекта передать в переменную

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


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

это не должно работать. Если RB_TM1 - это объект, определенный на закладке объектов. Тебе надо писать:
Code:
Runebookid = UO.GetSerial('RB_TM1')

И, кстати, тебе никто не мешает написать:
Code:
Runebookid = UO.GetSerial('RB_TM' + str(n))

Author:  DerMeister =) [ 2006-10-17 22:15:40 ]
Post subject: 

Хмм, угу...
А он так написал, что я ничё не понял... Меня сбило с толку Runebookid = 'RB_TM1'... до сих пор не могу представить, что это попытка обращения к объекту...

Author:  Chico [ 2006-10-19 13:01:09 ]
Post subject: 

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

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

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

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

потом делаю
Code:
   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:
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:
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



И мне вышеприведенная конструкция не наравится, хотя весь скрипт и работает изумиетльно, но перебор по условию сдишком громоздок, и нельзя сделать большое число рунбук

Author:  DerMeister =) [ 2006-10-19 13:09:25 ]
Post subject: 

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

Токо Эдред то тебе всё уже подсказал:
Вместо
Code:
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:
Runebookid = UO.GetSerial('RB_TM' + str(n))

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