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

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


********

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



Опять немного лирики - для начинающих устрою краткий факью по поинтерам.

Что такое поинтер?

Как уже говорилось в предыдущей статье, терминологию я использую исключительно свою, но слово поинтер это небольшое исключение, его я подцепил в хорошеи програмке(к сожалению, не распространенной, т.к. девелопер ушел в РанУО так и не доведя программу до идеала) SSeditor, ака Sphere Script Editor.

pointer(англ.) - указатель

Поинтер - это как бы приставка, указывающая на игровой объект, будь то предмет, игрок, регион или что-то другое. Волт например, вам надо чтобы при двоёном клике на предмет его цвет менялся на карсный, а игроку вылетало сообщение "Hello!". Вам же надо каким-то образом различить, какая команда относится к игроку, а какая к предмету, ведь сфера сама не может понять, что цвет надо сменить не игроку, а сообщение должно вылезти не у предмета. Вот для этого поинтеры и существуют.

Сразу попробуем рабить поинтерры на определенные группы, мне в голову пришло только две - прямые и косвенные поинтеры.

1. Прямые
src. act. region. sector. TOPOBJ. cont. targ. [] serv.
2. Косвенные
uid. def. link.

Примечание: [] значит отсутствие поинтера, советую запомнить, т.к. в мануалах .56 уже используется такои термин.

В отличие от переменных, различие между поинтеррами достаточно расплывчатое.

Начну я с прямых, так как эта группа проще. Прямые поинтерры используются ВСЕГДА. Очень сложно наити скрипт без их участия, да и то просто напросто вы не поимете что там етсь поинтеры, хотя на самом деле поинтер есть всегда. Вот например, есть триггер On=@dclick, посмотрим, какие поинтеры будут на что указывать.

------
src- тот кто делает двоиной клик
[] - сам предмет, в чьем блоке написан триггер, и он же предмет, по которому щелкают
cont - контеинер, в котором находится предмет
TOPOBJ - верхний контеинер или если его нету, то УИД самого предмета.
region - регион, в котором находится предмет или сам контеинер
----

вот видите сколько? А это ведь далеко не предел! Сеичас вам дам кратенькую характеристику каждого поинтера, для того чтобы было легче ориентироваться.

SRC.(source - источник) - указывает на объект, вызвавший деиствие. Особенно важно это не забыть в функциях, ведь там SRC. указывает на объект, которым была функция задеиствована, а не на объект, на который функция деиствует.

ACT.(action - деиствие) - обычно указывает на последний объект, которым/на который было совершенно действие.

TARG.(target - цель) - обычно указывает на объект, на который было направленно прицелом.

CONT.(container - контеинер) - указывает на контеинер, в котором объект хранится, например на сундук, в котором он лежит. В триггерах может так же использоаться как указатель на объекта-игрока, хранящего этот предмет.

TOPOBJ.(top object - верхний объект) - в отличии от CONT. указывает на самый верхний контеинер, то етсь если предмет лежит в восемнадцатои сумке бэкпака игрока, то указывать поинтер будет не на 18ую сумку, а на самого игрока. Удобно проверять находится ли предмет в сумке.

Знаменитая проверка, о которои только что говорил, выглядит так:
Код
IF (<TOPOBJ.uid> != <src.uid>)
 message Item isn't in your pack!
ENDIF


REGION. - указывает на регион, в котором находится объект.

SECTOR. - указывает на сектор, в котором находится объект.

SERV. указатель на сервер, т.е. указанные действия будут производится от имени консоли. Частый пример -> <serv.name> выводит название сервера.

Заметка: с поинтерами region/sector/serv очень часто используют команду allclients, т.е. аргумент команды будет действовать на всех игроков в регионе/секторе/сервере, например .serv.allclients say 1 2 3 заставит всех игроков на сервере сказать "1 2 3".

[] - указывает на того, на ком висит триггер или на кого направленно деиствие функции.

Надеюсь, это понятно. Вот примеры поинтеров для некоторых триггеров:

Код
 ------@TARGON_ITEM-------
:Триггер для предмета:
src. - Тот кто нацеливается прицелом
[] - сам предмет, которым был вызван прицел
cont. - контеинер, в котором находится предмет
TOPOBJ. - верхний контеинер или если его нету, то УИД самого предмета.
TARG. - объект, на который нацеливаются(в данном триггере это только предмет)
----------------------


Код
 ------@ITEMEQUIP-------
:Триггер для игрока:
[] - сам игрок, которй одевает, и на котором висит триггер.
act. - объект, который одевается
----------------------


И т. д.

Надеюсь, с прямыми поинтерами все понятно. Хотя, хочу заметить, что есть такая вещь как src.act. и она используется очень даже часто. Чаще всего это для указания на объекты, созданные newitem или newnpc. Пример :

Код
On=@dclick
src.newitem=i_gold
src.act.amount=2000
src.act.bounce


При двойном клике создатся одна монета, потом её коичество станет 2000 и они упадут в пак игрока src.

НО: в Р-сферах и .56 src.act. моно заменять new. что намного облегчает просмотр скрипта (IMG:style_emoticons/default/smile.gif)

Вторая группа - Косвенные. О неи покороче. Это поинтерры, которые вы задаете сами(хотя act. вы тоже можете задать сами 8) ). Чтобы задать поинтер, надо указать его значения. Для каждого это делается по-своему.

LINK. - просто пишите link=УИД и дальше через link. вы сможете обращаться к предмету, УИД которого вы записали в link. Для ключеи link это УИД двереи, которые они открывают.

UID. - используется с указанием аргумента - УИД нужного объекта. Например нужно обратиться к игроку, чеи УИД записан в var.uid - тогда пишем uid.<var.uid>.действие

DEF. - смотри использование в статье про переменные.

OBJ. - в Р-сферах и .56 свободный поинтер, который как линк можно задать в любое время. OBJ - глобальная переменная(см. про переменные) (IMG:style_emoticons/default/wink.gif)

Использование как и у прямых поинтеров, разница только та, что косвенные поинтеры не зависят от триггера, т.к. они задаются вручную. Примеры поинтерров - каждый скрипт, потому ссылками я вас и не снабжаю (IMG:style_emoticons/default/smile.gif)

P.S. УИД это Уникальный Индетификатор(думается мне, что на англицком звучит это как Unical Indetificator), это уникальный номер каждого игрового объекта. Если говорить о переменнои, то это переменные uid или serial.

для forum.uokit.com © NFix


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

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

 

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