29.03.2010, 16:26
Для использования property есть два четко разграниченных способа:
- чтобы хранить числовые значения, нужно в качестве имен использовать только строки
- чтобы хранить строковые значения, нужно в качестве имен использовать только числа (индексы)
Если этими правилами пренебречь, то сохранить любое значение не получиться. Т.е. "setproperty( 0, "test", 0, "test string" );" это неправильно, потому что тут попытка сохранить значение, где даны оба имени - строковое и числовое, а должно быть только одно - числовое.
Поясню на правильных примерах:
Вопрос: как я для строковых значений использую строковые имена?
Ответ: я создаю для строкового значения свой property под нужным индексом, который сохраняю как числовое значение другого property со строковым именем. Вот такая вот связка.
Хочу разъяснить пару общих моментов:
- первый параметр во всех property функциях, это ИД абстрактной машины.
все фильтрскрипты и мод используют ИД = 0. Если хотите, чтобы созданные переменные были доступны
только из текущего скприпт и ниоткуда более, то используйте ИД > 0.
- Глобальный, скажем так, массив property это как обычный двумерный массив,
например array[1000][255] (тыща строк по 255 символов), но только динамический.
- Если в getproperty указать только строковое имя, то механизм поиска будет перебирать все строки массива по порядку,
пока не найдет указанное имя, после этого механизм вернет индекс массива в котором эта строка найдена.
- Если в getproperty указать только числовое имя (индекс), то механизм сразу вернет строку под указанным индексом в массиве,
т.е. этот способ быстрее
Показательный пример потенциальной ошибки:
На данный момент это самое простое и общее объяснение механизма 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"