Page 1 of 1

Вопрос -> "Глобальный" массив

Posted: 2006-04-12 11:42:29
by DerMeister =)
Возможно ли создать глобальный массив?

Posted: 2006-04-12 11:55:06
by Grin
почему бы и нет? кто мешает?

Posted: 2006-04-12 11:58:51
by Edred
Прямым способом - нет. Но ты можешь создать кучу глобальных переменных, нумеруя их через индекс, каждую для отдельной ячейки. Можешь хранить в файле. Способов куча.

Posted: 2006-04-12 11:59:04
by DerMeister =)
Как? Так можно:

Code: Select all

for i = 0 to 20
uo.setglobal(abc[i],i)
next
?? :lol: :lol:

Posted: 2006-04-12 12:00:35
by DerMeister =)
Edred wrote:Прямым способом - нет. Но ты можешь создать кучу глобальных переменных, нумеруя их через индекс, каждую для отдельной ячейки. Можешь хранить в файле. Способов куча.


Тоесть? Как я у ним индекс прилеплю? Так:

Code: Select all

for i = 0 to 20
uo.setglobal(ABCi,i)
next
??

Posted: 2006-04-12 12:01:17
by Edred
Пробуй. Если не проходит, то вставь запись элемента массива в переменную, а уже ее как имя в глобалку

Posted: 2006-04-12 12:05:17
by DerMeister =)
Edred wrote:Пробуй. Если не проходит, то вставь запись элемента массива в переменную, а уже ее как имя в глобалку


Эт я всё понимаю вроде. Я не знаю какие имена разрешены для глоб. переменных и как мне к ним индексы приляпать...

Posted: 2006-04-12 12:39:58
by Grin
uo.SetGlobal("myArray"+str(i)+str(j), ...)
минимумлогики чтобы i=1 j =11 <>i=11 j=1

Posted: 2006-04-12 12:57:40
by Destruction
Если надо хранить в глобальном массиве, например тайпы вещей или еще что-нибудь, то можно всё в строку затолкать..

Писал, когда был маленьким, функции для работы со строкой-массивом:

Code: Select all

Sub RegArray(num,len)
var arr=""
var add=""
while strlen(add) < len
add = add + "0"
wend
while strlen(arr) < num*len
arr = arr + add
wend
return arr
endsub

Sub SetArray(val,str,num,len) ; что
if len < strlen(val) then
uo.print("Value to long!")
return false
endif
while strlen(val) < len
val = "0"+val
wend
return MID(str,0,num*len) + val + MID(str,num*len+len,strlen(str)-num*len-len)
endsub

Sub GetArray(str,num,len)
return MID(str,num*len,len)
endsub

Sub IncArray(str,num,len)
var i,j
for i=1 to num
for j=1 to len
str = "0"+str
next
next
return str
endsub

str RegArray - создаст "массив", передаётся:
val 1. Количество элементов
val 2. Длинна элемента (пустота заполняется нуликами, можно еще чем-нить заполнять, мне нулики было удобно).

str SetArray - запишет в "элемент массива" и вернёт полученный "массив", передаётся:
str 1. Записываемое значение
str 2. "Массив"
val 3. Номер элемента
val 4. Длинна элемента "массива"

str GetArray - вернёт "элемент из масива", передаётся:
str 1. "Массив"
val 2. Номер элемента
val 3. Длинна элемента "массива"

str IncArray - вернёт массив на n элементов больше.
str 1. "Массив"
val 2. Количество добавляемых элементов
val 3. Длинна элемента "массива".

Не ругать, скрипт правда из детства нарыл. Вот примерно по такой схеме, из строки я когда-то сделал массив 8)

Posted: 2006-04-12 13:04:24
by DerMeister =)
Спасибо, но я вот это не понял:

Grin wrote:минимум логики чтобы i=1 j =11 <>i=11 j=1


Это для двумерного массива?

А можно так:

Code: Select all

for i = 0 to 10
uo.SetGlobal("myArray"+str(i), i)
next


И еще: "myArray"+str(i) - это тоже самое что и myArray1,myArray2, ... ,myArray100, ... да?

Posted: 2006-04-12 13:10:02
by DerMeister =)
Destruction wrote:Если надо хранить в глобальном массиве, например тайпы вещей или еще что-нибудь, то можно всё в строку затолкать..


Спасибки, но я ничего в тво1м скрипне не понял :( :oops: :oops: :(

Мне нужнен именно глобальный массив, чтобы мои скрипты между собой обсчались, а т.к. то что я буду там хранить постоянно меняется то файл не подходит... (даже заранее неизвестно сколько елементов в массиве будет)

Кстати, а можно потом эти глоб. переменные удалить? (из реестра)

Posted: 2006-04-12 15:02:18
by Destruction
Der wrote:
Destruction wrote:Если надо хранить в глобальном массиве, например тайпы вещей или еще что-нибудь, то можно всё в строку затолкать..


Спасибки, но я ничего в тво1м скрипне не понял :( :oops: :oops: :(

Мне нужнен именно глобальный массив, чтобы мои скрипты между собой обсчались, а т.к. то что я буду там хранить постоянно меняется то файл не подходит... (даже заранее неизвестно сколько елементов в массиве будет)

Кстати, а можно потом эти глоб. переменные удалить? (из реестра)

Глобальные переменные в реестре не лежат. В реестре лежат EasyUO переменные.

Скажи, какая информация у тебя будет храниться?

Posted: 2006-04-12 16:27:25
by DerMeister =)
ID чаров...
Идея такая: ищу вокруг себя всех чаров, запоминаю их ID в этот массив, а потом другим скриптом эти ИД обрабатываю (так сказать скрипт на ПвП)

Posted: 2006-04-14 03:02:22
by Destruction
Der wrote:ID чаров...
Идея такая: ищу вокруг себя всех чаров, запоминаю их ID в этот массив, а потом другим скриптом эти ИД обрабатываю (так сказать скрипт на ПвП)

Ну мой скрипт вполне подойдёт.

Будешь писать так:
uo.setEasyUO(1,RegArray( 1, 9 )) ; или getGlobal, не буду говорить, почему я его не люблю...

Ща сделаю функцию "увеличения" количества элементов массива.

....

Нарисовал - ушёл тестировать.

...

Всё вроде норм пашет.