Вопрос про объявление глобальных переменных
Moderators: Murderator+, Murderator
Вопрос про объявление глобальных переменных
Если объявить переменную вне функций, наверху скрипта, она будет глобальной. А можно как нибудь задать глобальный массив? Dim выдает ошибку, так как по сути это динамическое выделение памяти, насколько я понял..
Mirage wrote:DIM не работает но можно вынести во внешний файл
Ага, и еще 2 способа придумал -
1) Объявить глобальную строковую переменную с элементами массива, и считывать из нее (можно добавить разделители, или если каждый элемент одинаковой длины - просто считывать нужную длину).
2) Создать функцию такого типа:
Sub Array(number)
If number == 0 Then
return 'значение 1'
Else
If number == 1 Then
return 'значение 2'
Else
...
...
Endif
Endif
..
End sub
И при обращении получается подобие обращения к элементам массива -
var variable = Array(10)

P.S. для первого варианта тоже можно сделать функцию, выделяющую нужный элемент из глобальной строки

Может это чем поможет.
Code: Select all
##### ПРИМЕР № 1 #####
Sub Array_1(k)
DIM myArr[5]
myArr[0] = '-= 1 =-'
myArr[1] = '-= 2 =-'
myArr[2] = '-= 3 =-'
myArr[3] = '-= 4 =-'
myArr[4] = '-= 5 =-'
return myArr[k] #Возвращает элемент массива.
endsub
sub main_1()
VAR i
for i = 0 to 4
UO.Print(Array(i))
wait(200)
next
endsub
##### ПРИМЕР № 2 #####
sub Array_2(myArr)
myArr[1] = '-= A =-'
myArr[2] = '-= B =-'
myArr[3] = '-= C =-'
myArr[4] = '-= D =-'
myArr[5] = '-= E =-'
endsub
sub main_2()
VAR i
DIM anyarr[5] #В главной функции обязательно объявить массив, чтобы можно было
Array_2(anyarr) #его передать в процедуру/функцию в которой массив будет заполнен.
for i = 1 to 5 #Следи, чтоб не выйти за границы массива.
UO.Print(anyarr[i])
wait(200)
next
endsub
##### ПРИМЕР № 3 #####
Sub Array_3(myArr)
VAR i, j
j = 10
for i = 0 to j
myArr[i] = '-= ' + str(i) + ' =-'
next
return j #Индекс последнего элемента массива.
endsub
sub main_3()
DIM xxx[100]
VAR i, j
j = Array_3(xxx)
for i = 0 to j
UO.Print(xxx[i])
wait(200)
next
endsub
GAUHAR wrote:Может это чем поможет.Code: Select all
##### ПРИМЕР № 1 #####
Sub Array_1(k)
DIM myArr[5]
myArr[0] = '-= 1 =-'
myArr[1] = '-= 2 =-'
myArr[2] = '-= 3 =-'
myArr[3] = '-= 4 =-'
myArr[4] = '-= 5 =-'
return myArr[k] #Возвращает элемент массива.
endsub
sub main_1()
VAR i
for i = 0 to 4
UO.Print(Array(i))
wait(200)
next
endsub
##### ПРИМЕР № 2 #####
sub Array_2(myArr)
myArr[1] = '-= A =-'
myArr[2] = '-= B =-'
myArr[3] = '-= C =-'
myArr[4] = '-= D =-'
myArr[5] = '-= E =-'
endsub
sub main_2()
VAR i
DIM anyarr[5] #В главной функции обязательно объявить массив, чтобы можно было
Array_2(anyarr) #его передать в процедуру/функцию в которой массив будет заполнен.
for i = 1 to 5 #Следи, чтоб не выйти за границы массива.
UO.Print(anyarr[i])
wait(200)
next
endsub
##### ПРИМЕР № 3 #####
Sub Array_3(myArr)
VAR i, j
j = 10
for i = 0 to j
myArr[i] = '-= ' + str(i) + ' =-'
next
return j #Индекс последнего элемента массива.
endsub
sub main_3()
DIM xxx[100]
VAR i, j
j = Array_3(xxx)
for i = 0 to j
UO.Print(xxx[i])
wait(200)
next
endsub
Не, это не то - здесь будут происходить утечки памяти. Нечто подобное я и сделал изначально. При использовании файла или моих примеров, не будут выделяться новые участки памяти при каждом обращении к "массиву".
У меня был изначально довольно большой массив, и функция с ним вызывалась 10 раз в секунду, память пожиралась довольно быстро и безвозвратно..
P.S. Но конечно, спасибо за участие =)
Я мельком проходил Может не ухватил мысль но у меня например сортировка лута содержит более 700 итемов. все работает в считанные секунды.
вот такая зафитушка:
ХЗ может не в тему конечно но тогда стоит более подробно описать потребность.
вот такая зафитушка:
Code: Select all
Loot(0xF06, 0xF0D, '-1', MeshSer, SundB); все типы бутылок
ХЗ может не в тему конечно но тогда стоит более подробно описать потребность.
Mirage wrote:Я мельком проходил Может не ухватил мысль но у меня например сортировка лута содержит более 700 итемов. все работает в считанные секунды.
вот такая зафитушка:Code: Select all
Loot(0xF06, 0xF0D, '-1', MeshSer, SundB); все типы бутылок
ХЗ может не в тему конечно но тогда стоит более подробно описать потребность.
Да, не в тему немного.. ) Я уже разобрался с проблемой( к моменту твоего первого поста тут).. Собственно, выберу 1 из 3 вариантов (файл, строка или функция, или еще чтонить придумаю

