Чагои-то пробило меня статью написать, тык сказать, а то меня на эту тему часто долбят в аську (IMG:
style_emoticons/default/sad.gif)
итак, сча я вам кратенько расскажу про ПЕРЕМЕННЫЕ.
Сразу замечу, что пишу я для ньюбов, могу что-то не уточнять, сам я не мега-папос, могу в чем-то ошибаться, и терминологию я использую исключительно свою (IMG:
style_emoticons/default/smile.gif)
Значит так, для начала скажем, что переменные в сфере делятся условно на несколько типов:
1. Глобальные-временные
2. Постоянные-изменяемые
3. Постоянные-неизменяемыеТеперь разделим переменные более буквально:
1. Глобальные-временные var. и local. 2. Постоянные-изменяемые tag. и всякие MORE*, NAME и прочее-прочее3. Постоянные-неизменяемые TDATA*, дефнеимы, WEIGHT Вот. Начнем с самых частоиспользуемых, это вторая группа - постоянные-изменяемые. Почему они постоянные и почему они изменяемые? Постоянные потому что они не исчезают. Если у вас есть переменная
name то её значение будет, пока вы не удалите игрока с этои перменнои. Изменяемые потому, что вы можете спокоино изменять их в игре и в скриптах. То есть, захотели сделать
name другим, и тут же сделали в игре
.set name другое или в скрипте
name=другое.
Переменные такого плана используются постоянно! Особо отметить стоит только переменную tag.*, которая может содержать любое значение(числа в HEX, шестнадцатеричке). Ну например, знаменитый вопрос - как сделать поинты? Поинты - это просто еще одна переменная, которои нету в простои сфере.
Вот это один из примеров как моно обыграть поинты через tag.* перменную.
Еще небольшои нюанс - если вам переменная больше не нужна, советую делать
tag.название= так как этим вы удалите из памяти эту переменную, и будете меньше загружать сферу. А так как некоторые таги в проверках могут использоваться, пока они не заданны, то есть проверка
Код
IF (<tag.uid> == <uid>)
...
ENDIF
будет совершенно не правильнои, если у вас таг
tag.uid не был задан, сфера поимет это как IF ( == 0e4ref31) и это еи не понравится, т.к. до знака равенства(==) не заданно условие - вылетит ошибка в консоль и скрипт не будет работать. На аткои случаи проверки на незаданных параметров есть несколько вариантов деиствий, вот вам парочка:
IF (0<tag.uid> == <src.uid>)
IF (<eval 0+<tag.uid>> == <uid>) В Р-сферах это решается намного проще, так как там есть tag0.*, которая автоматом в проверке, если tag не задан пишет 0.
Теперь рассмотрим первую группу, глобальные-временные. Так, почему глобальные? Потому что, если в предыдущеи группе все переменные относятся только к своему обьекту(у каждого игрока свое имя, свои name), то тут одна переменная это одно значение для всего сервера. Особенность - при сохранении мира эти переменные обнуляются. Полезность в том, что раз объявленная var. легко вызывается из скрипта, так как ни к какому объекту она не привязанна, и не приходится путаться с кучеи поинтеров будь то src. act. link. или чтобы-то ни было еще. Эти переменные в проверках лучше проверять тем же методом что и переменные tag.*.
Третяя группа - постоянные-неизменяемые. Опять же, постоянные потому, что они не исчезают, неизменяемые - потому что в скриптах и в игре вы не можете задать им свои значения. Если вы указали в самом теле блока [ITEMDEF ] значение
TDATA1, то в скриптах нигде и никогда вы кроме этого же блока значение переменнои не измените. А некоторые переменные, типо
Weight, сфера высчитывает сама(WEIGHT для игрока, в данном случае)и изменить вы их не можете вообще. Выделить тут стоит категорию дефнеимов, ибо они самые замудренные, на мои взгляд, переменные.
Дефнеим объявляется в своем отдельном блоке, по типу:
Код
[DEFNAME название_любое]
переменная значение
переменная2 значение
Первым делом, читая скрипт, сфера заменяет дефнеим на указанное для него значение. Она это делает даже до того как начинает удумывтаь <>. То есть, если у вас есть дефнеимы RACE_ORC RACE_DWARF RACE_ELF, и в это время на игроке висит переменная tag.race=раса(напрмиер tag.race=ORC), то даже не радуитесь, что вы можете просто указывать RACE_<tag.race>, как я раньше упоминал, сфера читает дефнеимы самыми первыми!!! Потому она не поимет ваш дефнеим, ибо проверка дефнеимов будет до того как раскроется ваша <tag.race>. Обидно, конечно, но и тут есть рациональный выход - укажите сфере, что надо прочитать эту строчку как дефнеим:
<def.****> в данном случае это будет <def.RACE_<tag.race>>.
Вот это пример работы с дефнеимами.
Нюанс: переменные большеи частью хранят числа в шестнадцатеричнои системе исчисления(HEX), для поедание меньшего кол-ва памяти, а так как игрокам читать занчения в шестнадцатеричнои системе будет по меньшеи мере неудобно, то вы всегда можете перевести значение переменнои в десятеричное, используя <eval >. Пример использования смотри в скрипте с поинтами/кредитами.для forum.uokit.com © NFix