Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаОткрыть новую тему
> Переменные [NFix], какие бывают?
NFx
сообщение 23.2.2006, 21:29
Сообщение #1


********

SpS 60+(умер), NE Priest 40+ жифф
Сообщений: 1.505
Регистрация: 3.9.2003
Группа: Пользователи
Наличность: 0
Из: Подмосковье
Пользователь №: 950



Чагои-то пробило меня статью написать, тык сказать, а то меня на эту тему часто долбят в аську (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


--------------------
Важна не реклама, а качество.
Качество - девиз хороших серверов.
Продуманность и готовность - девиз очень хороших серверов.
..::Lorien Role-Playing Shard(RunUO)::..
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Тема закрытаОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 20:19
Designed by Nickostyle