Для использования property есть два четко разграниченных способа:
- чтобы хранить числовые значения, нужно в качестве имен использовать только строки
- чтобы хранить строковые значения, нужно в качестве имен использовать только числа (индексы)
Если этими правилами пренебречь, то сохранить любое значение не получиться. Т.е. "setproperty( 0, "test", 0, "test string" );" это неправильно, потому что тут попытка сохранить значение, где даны оба имени - строковое и числовое, а должно быть только одно - числовое.
Поясню на правильных примерах:
Code:
setproperty( 0, "cash", 123456 ); // создадим property cо строковым именем "cash" и числовым значением 123456
new money = getproperty( 0, "cash" ); // money = 123456
setproperty( _, _, 777, "test string" ); // создадим property c числовым именем 777 и строковым значением "test string"
setproperty( _, "", 777, "test string" ); // то же самое, что и выше
setproperty( 0, "", 777, "test string" ); // то же самое, что и выше
new testString[32];
getproperty( 0, _, 777, testString ); // testString = "test string"
Вопрос: как я для строковых значений использую строковые имена?
Ответ: я создаю для строкового значения свой
property под нужным индексом, который сохраняю как числовое значение другого
property со строковым именем. Вот такая вот связка.
Хочу разъяснить пару общих моментов:
- первый параметр во всех
property функциях, это ИД абстрактной машины.
все фильтрскрипты и мод используют ИД =
0. Если хотите, чтобы созданные переменные были доступны
только из текущего скприпт и ниоткуда более, то используйте ИД >
0.
- Глобальный, скажем так, массив
property это как обычный двумерный массив,
например
array[
1000][
255] (тыща строк по
255 символов), но только динамический.
- Если в
getproperty указать только строковое имя, то механизм поиска будет перебирать все строки массива по порядку,
пока не найдет указанное имя, после этого механизм вернет индекс массива в котором эта строка найдена.
- Если в
getproperty указать только числовое имя (индекс), то механизм сразу вернет строку под указанным индексом в массиве,
т.е. этот способ быстрее
Показательный пример потенциальной ошибки:
Code:
setproperty( 0, _, 123456, "test string" ); // создадим property c числовым именем 123456 и строковым значением "test string"
setproperty( 0, "cash", 123456 ); // внимание, тут не создается новый property, а изменяется property, созданный выше
new testString[32];
getproperty( 0, _, 123456, testString ); // в testString будет "cash", а не "test string"
На данный момент это самое простое и общее объяснение механизма
property.