Apple Inc,
Навигация
· Главная
· Форум UO
· Файлы

Информация
· Администрация проекта
· Наши Банеры
· Спонсоры
· Реклама на сайте
Первые шаги
· Установка сферы
· Указатели (Pointers)
· Создание диалогов
· Своя Руда
· sphere.ini
· Spheretable_x.scp
· Spheretables.scp

Download
· Программы для игры
· Макро Программы
· Работа с *.Mul
· Русский sphere.ini
· Программы для ГМов
· Клиены
· Sphere`s & Worlds

Указатели (Pointers)

Содержание:

1. Что такое поинтеры
2. Основные указатели: SRC, ACT, CONT; Соединитель LINK
3. Указатели: TARG и TOPOBJ
4. Операторы FINDID, FINDTYPE, FINDLAYER
5. Итог

1. Что такое поинтеры

Pointers - от англ. - "указатели" (некоторые называют их "поинтами" - от англ. слова to point - "указывать"). Поинтеры - это ключевые слова, определенные в Sphere, без которых скриптинг немыслим и которые осуществляют обращение к различным объектам (под объектами понимаются как чары, так и предметы). Обращение - это вид связи между объектом, оказавшимся под некоторым действием и тем, кто произвел это дейсвие. Как правило, это одностороннее обращение, но можно создать и двустороннее.

2. Основные указатели: SRC, ACT, CONT; Соединитель LINK

Одностороннее обращение:

[ITEMDEF i_gold_giver]
ID=i_gravestone
NAME=Gold giver

On=@Dclick
SRC.NEWITEM=i_gold
SRC.ACT.AMOUNT=500
SRC.ACT.BOUNCE
RETURN 1

Где SRC представляет собой обращение к объекту, который 2 раза кликнул на грейвстон. В данном случае, если два раза кликнул чар, то связь образуется между чаром и кликнутым объектом. Связь проходит от кликнутого объекта к чару, и все скриптовые действия связанные с SRC будут осуществляться только над чаром.

Далее следует ACT (от англ. Action - действие), не просто действие, а обращение к объекту над которым было произведено последнее действие. В данном случае этот объект - итем i_gold. Совершено действие по изготовлению i_gold, и оно является последним по отношении к чару. Поэтому создается еще одна связь, между i_gold и чаром. И последней стадией в этом скрипте является указание amount (количества). И bounce (положить в бекпак). Return 1 - остановить действие на данном моменте. Связь создается только на 1 мгновение последующей команды и в следующей строке надо описывать еще раз стадию связи.

Нельзя писать так:

SRC.NEWITEM=i_gold
ACT.AMOUNT // SRC отсутствует
ACT.BOUNCE // SRC отсутствует
RETURN 1

Так как связь создана на первом моменте и на первом она прерывается. Конечно это не означает, что невозможно сочетание просто act.amount, но в данном случаи оно неуместно.

Еще один пример одностороннего обращения:

[ITEMDEF i_alchemical_giver_death]
ID=0181d
NAME=AutoKiller

On=@STEP
IF ! (0==1)
 SRC.TAG.GIVEDEATH=1
 SRC.NEWITEM=i_giver_death
 SRC.ACT.TYPE=t_eq_script
 SRC.ACT.TIMER=1
 SRC.ACT.LINK=<UID>
 SRC.ACT.EQUIP
 RETURN 1
ENDIF

[ITEMDEF i_giver_death]
ID=i_gold
NAME=Death giver

On=@TIMER
CONT.HITS=0
LINK.SAY You will never step on me!
CONT.TAG.GIVEDEATH=
REMOVE
RETURN 1

В этом скрипте обращение идет к чару, который наступил на символ. Создается итем и вешается на него с таймером равным одной секунде. А на итеме пишем если таймер достигнет 0, то CONT.HITS=0 , значит чар умирает если он не invul. В таймерах команды всегда CONT. Так как SRC. он не воспримет и смысла в нем не будет.

CONT (от англ. to contain - "содержать") - это обращение к объекту, которому принадлежит этот предмет. В данном случаи этот объект "Чар", который наступил на символ и получил монетку с таймером 1, и "в котором" лежит эта монетка. Дальше отдана команда сказать "Ты никогда больше не наступишь на меня!". Здесь уже не CONT, а LINK.SAY потому, что ранее я указал, что LINK=<UID>, что значит, что значение LINK равно серийному номеру (или, если быть точным, уникальному номеру) предмета на который наступил чар. Далее идет обращение обратно к предмету на который я наступил - казалось, что тут происходит двусторонне обращение, но нет - это не так, т.к. обращался не скриптер, а непосредственно сам итем i_giver_death.

LINK (от англ. to link - соединять) - это еще одно ключевое слово, которое можно использовать непосредственно в качестве указателя.

В предметах, помимо линка присутствуют еще разные параметры (например: MORE, MORE2). Но главное отличие их от линка, то, что используя их нельзя производить действия над нужным предметом. Например нельзя указав MORE2=<UID> сказать MORE2.SAY You will never step on me!. Сфера просто не поймет.

LINK - это указатель на уникальный предмет. Изначально LINK = 04FFFFFFF

Например:

ON=@EQUIP
IF (<LINK>==04FFFFFFF)
 BOUNCE
 RETURN 1
ELSE
 RETURN 0
ENDIF

В этом скрипте не присутствует команд SRC и ACT т.к. они здесь не нужны, итем уже создан и команда Bounce посылается самому себе. Т.е. как если мы себе пишем (.HITS 300), (.GM), (.ALLSKILLS) и т.д.

Так все же, что такое двустороннее обращение? Когда объект обращается к предмету и наоборот, предмет выполняет действия порученные объектом. Они могут быть как сложными, так и простыми, но оба содержат информацию о связи друг с другом.

Двустороннее:

ITEMDEF i_rock_to_move]
ID=01365
NAME=Link checker

On=@DCLICK
LINK=<SRC.UID>
TARGETG
RETURN 1

ON=@TARGON_GROUND
P=<SRC.TARGP>
LINK.SAY Ooo it's good i did it!
LINK.SALUTE
RETURN 1

Вот пример простого двустороннего обращения. Чар два раза кликнет на камень, LINK записывает UID чара, а камень вызывает цель. Здесь нет SRC т.к. не чар вызывает цель, а сам камень и он уже предлагает чару применить цель. Здесь связь наблюдается только между целью и чаром. Если чар укажет на землю, то P координата положения камня меняется на тот P, что указал чар, т.е. опять связь между чаром и камнем. Далее камень принуждает чара сказать "Ооо хорошо я сделал это!" и выполнить команду (.Salute)

UID - как уже говорил это уникальный номер того предмета или объекта, на который мы указываем.

Но, кроме того, UID можно использовать как часть поинтера и указать на нужный нам объект.

Пример:

ON=@SPELLCAST
// При касте используется функция .cast с аргументом - номером заклинания
IF (<argn>==34)
// && - логический оператор
 IF ! (<UID>==<ACT.LINK>) && (<ACT.BASEID>==i_fx_energy_field)
  Message You are never dispel this
  RETURN 1
  ELSE
  RETURN 0
 ENDIF
ENDIF

Тут сказано если применяется заклинание Dispel Field на Energy Field и LINK равен уникальному номеру аккаунта проделывающего это действие , то произойдет чудо и Energy Field пропадет.

On=@Spellcast - как правило, в spheretables.scp ставят, поэтому не пишут (Src.argn и src.uid) так как действие уже подразумевает, что выполняет Чар.

Кроме этого UID может указать на переменные чара или итема. Можно написать пример:

UID.04000f3c.NAME=Connected

где UID указывает интерпретатору, что следует обратится к серийнику 04000f3c, а далее обратиться к переменной NAME, и присвоить этой переменной значение "Connected". Можно также написать следующим образом:

<создаем предмет>
Src.act.LINK=<UID>

ON=@DCLICK
LINK.NAME=Connected

3. Указатели: TARG и TOPOBJ

Сейчас я хочу рассказать о поинтерах TARG и TOPOBJ.

Targ - это указатель последней цели. Соответственно указатель TARG указывает на объект, который был выбран (имеется ввиду выбран специальном курсором "выбрать цель" - курсором в виде прицела).

TopOBJ - это обращение к объекту содержащему данный предмет. Если, например, этот предмет лежит в бекпаке чара, то обращение будет к чару. Если в бекпаке, который лежит в бекпака чара, то обращение все равно будет к чару.

Если в сундуке, в коробке, то обращение к сундуку. Т.е. обращение происходит к объекту содержащему итем.

Вот приведу пример:

[ITEMDEF i_remover_magic]
NAME=Remover
DEFNAME=i_remover_magic
ID=i_wand_1
TYPE=T_wand

CATEGORY=Weartog Special
SUBSECTION=Wands
DESCRIPTION=Remover

ON=@Create
ATTR=attr_magic | attr_invis
COLOR=0423

ON=@CLICK
Message=~Магический Удалитель(Инвиз)
RETURN 1

ON=@DCLICK
SRC.SAY=~Эй, ! Кого в этот
SRC.SAY=~раз ты собераешся удалить?
TARGET
RETURN 1

ON=@TARGON_CHAR
IF (<SRC.TARG.NPC>)
SRC.TARG.REMOVE
RETURN 1
ELSE
SRC.MESSAGE=~Ты не можешь удалить чара~
Src.MESSAGE=~таким образом!
RETURN 1
ENDIF

ON=@TARGON_ITEM
IF (<SRC.TARG.TOPOBJ.uid>=<SRC.UID>)
SRC.MESSAGE=~Я не удаляю вещи
SRC.MESSAGE=~из своего бекпака!
RETURN 1
Else
SRC.TARG.REMOVE
RETURN 1
ENDIF

Пример не самый трудный, поэтому я не буду его пояснять. Попробуйте разобраться сами - это поможет вам лучше понять изложенный материал.

4. Операторы FINDID, FINDTYPE, FINDLAYER

Обращение к этим операторам происходит так же как и к указателям - "через точку".

С помощью этих операторов можно найти предмет у нужного нам чара (или в нужном контейнере) и совершить над этим предметом какое либо действие.

Например:

SRC.FINDID.i_gold.name=~Золото
Src.FINDTYPE.t_gold.drop
SRC.FINDLAYER(30).remove

в первом изменяем имя любого найденного предмета у объекта относящемся к baseid=i_gold

во втором находим любой предмет типа t_gold и выбрасываем его

в третьем обращаемся к Layer(30) и удаляем первый попавшийся итем, находящийся в этом слое.

Название этих операторов образовано следующим образом:

FIND - от англ. to find - искать
ID - от англ. IDentify - устанавливать (каждый предмет обладает своим ID, например i_robe)
TYPE - от англ. type - тип (подробнее о типах читайте в справочном материале)
LAYER - от англ. layer - слой (подробнее о слоях читайте в справочном материале)

5. Итог:

Количество сочетаний указателей может быть огромным и у меня просто не хватит места все варианты описать. Поэтому руководствуясь общими положениями я решил описать все возможные поинтеры и операторы, синтаксис обращения к которым схож с синтаксисом обращения к поинтерам (или по крайне мере которые я знаю, и постарался объяснить их и все с ними связанное начинающим скриптерам). По моему мнению, чтобы разбираться в скриптах, обязательно надо хорошо понять какие указатели на что указывают и в каких вариантах они будут работать, а в каких нет.

Поинтеры, указывающие непосредственно на объект:

Src - Обратится к объекту, активировавшему действие.
Act - Этот указатель обращается к объекту последнего действия.
Cont - Этот указатель уникален для итима, и обращается к обладателю итима.
Targ - Обращается к последней цели.
Topobj - Обращается к объекту содержащему предмет (возможно в нескольких контейнерах).

Указатели, указывающие на уникальный номер объекта (UID):

Link - Указывает на уникальный UID какого либо объекта
Uid - Обращается к определённому UID

Операторы-указатели, указывающие на какой либо предмет в "контейнере"

Findid - Этот указатель находит первый случайный итем подобного ID
Findtype - Указывает на первый случайный итем подобного типа
Findlayer - Указывает на слой или первый предмет, найденный в этом слое

Вот в принципе и все. Удачи вам в ваших начинаниях!

[AUTOR] Информация взята с q1.ru

    

Истории
· Дневник Балрона
· Дневник орка Гырша
· Друой мир
· Закон Гоблинов
· Хроники Галара
· На кладбище
· Не бывает добра от зла
· Первый день весны
· Правда Жизни
· Night of GM
Учебники
· Учебник по скриптингу

Заметки
· Переменные для чаров
· Переменные для вещей
· Переменные зон.
· Использование оператора IF
· Создание item
· Создание Npc
· Создание trigger
· Все trigger
· Pointers

Работа с вердатой
· Введение
· Редактирование GUMP-ов
· Pедактирование ART-графики
· Добавление нового итема
· Новые монстры
· Ездовые животные
· Новые multi-объекты

All Rights Reserved (C) 2003-2005 Apple Inc,
Копирование информации с сайта Запрещается.

Сайт создан в системе uCoz