Page 1 of 1

Вопрос по массивам.

Posted: 2011-04-15 11:51:41
by Mirage
Чейто я в тяпницу никак не соображу. Мыслями уже в субботе.

Задача состоит в следующем:
есть 3 предмета - ножницы, книга, ключ.
Скриптом нужно разложить их по разным углам рюкзака.
Теоретически это выглядит вот так:

Code: Select all

sub sort()
UO.MoveItem('_0x0EFA', '0', 'backpack', 10, 10, 0) ; spellbook
      wait(500)
UO.MoveItem('_0x0F9E', '0', 'backpack', 150, 10, 0) ; Silver Scissors
      wait(500)
UO.MoveItem('_0x1012', '0', 'backpack', 10, 150, 0) ; Key
      wait(500)
end sub


Но это не спортивно. Модифицируем через for:

Code: Select all

sub sort()
   var i
   DIM item[3]
   item[0] = '0x0EFA' ; spellbook
   item[1] = '0x0F9E' ; Silver Scissors
   item[2] = '0x1012' ; Key

   for i = 0 to 2
      UO.MoveItem(item[i], '0', 'backpack', X, Y, Z)
      wait(500)
   next
end sub


И вот тут мы подходим к моей проблеме.
Как задать массив координат не делая 3 (2 для XY) отдельных массива?


То-есть конечный результат должен иметь вид примерно следующего плана:

Code: Select all

sub sort()
   var i
   DIM item[3], XYZ[3]
   item[0] = '0x0EFA' ; spellbook
   item[1] = '0x0F9E' ; Silver Scissors
   item[2] = '0x1012' ; Key
   XYZ[0] = '10, 10, 0'
   XYZ[1] = '150, 10, 0'
   XYZ[3] = '10, 150, 0'

   for i = 0 to 2
      UO.MoveItem(item[i], '0', 'backpack', XYZ[i])
      wait(500)
   next
end sub

В таком виде скрипт к сожалению не работает.

Re: Вопрос по массивам.

Posted: 2011-04-15 19:14:07
by Sirocco
универсальная ф-ция для перекладывания по координатам тебе в помощь.

Re: Вопрос по массивам.

Posted: 2011-04-15 19:23:44
by Mirage
Этот вариант у меня есть, мне интересно именно в массиве можно это использовать?

Re: Вопрос по массивам.

Posted: 2011-04-15 19:40:02
by Sirocco
@reag = (
['0x0F7A',-1,100,'Black Pearl',137,124],['0x0F7B',-1,100,'Blood Moss',137,124],['0x0F86',-1,100,'Mandrake Root',137,124],['0x0F84',-1,100,'Garlic',137,124],['0x0F85',-1,100,'Ginseng',137,124],['0x0F88',-1,100,'Night Shade',137,124],['0x0F8C',-1,100,'Sulfurous Ash',137,124],['0x0F8D',-1,100,'Spiders Silk',137,124],['0x0E21',-1,150,'Bandage',96,65]
,['0x0F87',-1,0,'Eye of Newt',96,65],['0x0F80',-1,0,'Daemon Bones',96,65],['0x0F7E',-1,0,'Bones',96,65]
);
$array = scalar(@reag);
for ($i;$i < $array;$i++) {
&supply($reag[$i][0],$reag[$i][1],$reag[$i][2],$reag[$i][4],$reag[$i][5],$container);
}


Советую

Re: Вопрос по массивам.

Posted: 2011-05-21 09:57:21
by Tiger1989
че за код ваще такой первый раз вижу =)

Re: Вопрос по массивам.

Posted: 2011-05-21 10:19:02
by Sirocco
perl

Re: Вопрос по массивам.

Posted: 2014-03-22 18:19:43
by kobol
Да, уже 2014. Просьба не ругаться :lol:

Что-то в таком духе. Только разделители надо поменять.

Code: Select all


[...]
for i = 0 to 2
      UO.MoveItem(item[i], '0', 'backpack', GetWord(XYZ[i],1), GetWord(XYZ[i],2), GetWord(XYZ[i],3)  )
      wait(500)
   next

Sub GetWord( st, nom )
; (c) Edred
; Возвращает слово из строки str за номером num
; если такого слова нет - возвращаем ''
;
; Разделителем слов считаем пробел. Несколько пробелов подряд считаются за один.
; Функция сделана без рекурсии специально для считывания слов из сверхдлинных строк!
;
   VAR tmpst, i, dlin, kol = 0, start = 0
   dlin = len( st )
   For i=0 To dlin - 1
      If mid( st, i, 1 ) == ' ' OR i == dlin - 1 Then
         kol = kol + 1
         If kol == nom Then
            ; это первый пробел после нужного нам слова
            tmpst = mid( st, start, i - start )
            return tmpst
         Else
            While mid( st, i, 1 ) == ' '
               i = i + 1
            Wend
            If kol == nom - 1 Then
               start = i
            Endif
         Endif
      Endif
   Next
   tmpst = ''
   return tmpst
endsub


Re: Вопрос по массивам.

Posted: 2014-03-22 20:02:21
by Juicy Fruit
Juicy Fruit wrote: GetWord(Source,WordIndex,[Separator]) - получение слова из строки Source под номером WordIndex разделенного пробелом (или Separator'ом, если он указан)
GetWordCount(Source,[Separator]) - получение общего кол-ва слов, содержащихся в строке Source разделенных пробелом (или Separator'ом, если он указан)
От сюда