Описание класса game object. Часть I.
Материал из S.T.A.L.K.E.R. Inside Wiki
Game_object - класс для доступа к онлайновым (клиентским) объектам. Причём один класс является интерфейсом для совершенно разных объектов. Разработчики не придумали ничего лучше, как взять и объединить в одном классе все интерфейсы всех клиентских объектов: актора, сталкеров, монстров, физических объектов, автомобилей и лампочек, вообще всех. Более странного и вообще говоря уродливого объектно-ориентированного дизайна я ещё не видел. Во-первых, класс вышел совершенно необозримым - три сотни методов! Во-вторых, вызов не подходящего метода для произвольно взятого объекта приводит к совершенно непредсказуемым результатам. В лучшем случае не будет ничего, а чаще всего - будет вылет, причём обычно без лога. Наконец, описание этого класса в lua_help совершенно невнятное (как впрочем и всех остальных классов): типы возвращаемых значений опущены, типы входных аргументов указаны не всегда, а о назначении большинства методов можно только гадать. Предлагаю несколько более внятное описание. Методы рассортированы по клиентским классам, к объектам которых можно применить метод. Также напоминаю, что классы при наследовании также наследуют и все методы родительского класса.
Навигация |
---|
Описание класса game object. Часть I. |
Содержание
ANY CLASS
Эти методы подходят к объектам любого класса
vector direction() constвозвращает направление взгляда (объект класса vector). Аргументов не принимает.
vector position() constвозвращает координаты объекта (объект класса vector). Аргументов не принимает.
vector center()возвращает координаты центра баунд сферы объекта (физической оболочки, грубо говоря). Практически то же самое, что и position. Обычно используется для проверки вхождения актора в сферу. Возвращает объект класса vector. Аргументов не принимает.
int game_vertex_id() constвозвращает game_vertex_id объекта. Аргументов не принимает.
int level_vertex_id() constвозвращает level_vertex_id объекта. Аргументов не принимает.
float level_vertex_light(const int level_vertex_id) constТолько ТЧ. всегда возвращает 0. Что-то связанное с аи-сеткой, но, видимо, нынче бесполезное.
int id() constвозвращает id объекта. Аргументов не принимает.
string name() constвозвращает системное имя объекта (обычно выглядит как комбинация имени секции и id). Аргументов не принимает.
string section() constвозвращает имя секции объекта. Аргументов не принимает.
ini_file* spawn_ini() constвозвращает дескриптор ltx файла (объект класса ini_file), из которого вычитывались настройки спавна объекта.
int story_id() constвозвращает story_id (уникальный идентификатор) объекта. Аргументов не принимает. Если у объекта нет story_id, возвращает -1.
int clsid() constвозвращает clsid объекта, представляющий собой идентификатор класса. Возвращаемое значение является числовым эквивалентом строкового идентификатора, заданного в конфиге объекта параметром class. Аргументов не принимает.
vector bone_position(string bone_name) constвозвращает координаты кости. Принимает один аргумент - имя кости. Может быть применен к любому объекту, но модель объекта при этом должна иметь тип MT_SKELETON_ANIM или MT_SKELETON_RIGID, короче, иметь эти самые кости
object_binder* binded_object()возвращает объект lua-класса object_binder, привязанный к биндеру функцией bind_object(). Аргументов не принимает.
void bind_object(object_binder* game_object)привязывает объект к биндеру. Аргументов не принимает.
void hit(hit* tpLuaHit)наносит хит объекту. В качестве аргумента передается объект класса hit. У этого объекта обязательно должны быть выставлены свойства draftsman, power, direction, type, impulse
void play_cycle(string anim, bool mix_in)
проигрывает анимацию для объекта. Аргументы:
- anim - имя анимации
- mix_in - как я понял, устанавливает наложение анимации на текущую.
void play_cycle(string anim)аналогично предыдущей, mix_in по умолчанию берется true.
CObject
Поскольку все игровые объекты наследуют от класса CObject, следующие методы можно применять к любым объектам.
game_object* parent() constвозвращает parent объекта. Для предмета в ящике вернет объект ящика. Для инвентарных предметов вернет объект владельца инвентаря - актора, сталкера или монстра. Во всех остальных случаях возвратится 0. К полученному объекту можно применять все методы game_object, подходящие к классу объекта. Аргументов не принимает.
CUsableScriptObject
Поскольку все игровые объекты наследуют от класса CUsableScriptObject, следующие методы можно применять к любым объектам.
void set_tip_text(string tip_text)устанавливает для объекта текст всплывающей подсказки, передаваемый аргументом tip_text.
void set_tip_text_default()устанавливает для объекта дефолтный текст всплывающей подсказки, установленный при спавне. Аргументов не принимает.
void set_nonscript_usable(bool nonscript_usable)устанавливает для объекта возможность взаимодействия с актором.
CPhysicsShellHolder
Эти методы можно применять для всех объектов, кроме аномалий, переходов, ящиков с инвентарем и прожекторов - всего того, у чего нет физической оболочки.
physics_shell* get_physics_shell() constвозвращает физическую оболочку объекта - объект класса physics_shell. Аргументов не принимает.
void set_const_force(const vector& dir, float value, int time_interval)
применяет к физической оболочке объекта силу на некоторое время. Аргументы:
- dir - направление (объект класса vector)
- value - значение силы (float)
- time_interval - продолжительность действия силы (int).
float mass() constвозвращает массу объекта. При применении к неподходящему объекту возвращает -1. Масса, возвращаемая этим методом - не инвентарная, а, видимо, масса для обсчета коллизий. Для патронов, оружия возвращается 0. Аргументов не принимает.
CEntity
Эти методы можно применять для всех живых объектов (сталкеры, монстры, актор), вертолетов и машин.
bool alive() constвозвращает, жив ли объект (проверка на health > 0.0). Для неживых объектов возвращает false. Внимание! health обновляется с некоторым периодом, поэтому при вызове alive() сразу после kill() выдается true. Аргументов не принимает.
int death_time() constв ЗП нет. Возвращает время смерти объекта в мсек с начала игры. Если объект жив или в принципе неживой, возвратит 0. Аргументов не принимает.
int group() constвозвращает группу, к которой принадлежит объект. Для неживых объектов возвращает -1. Аргументов не принимает.
void kill(game_object* who)убить объект. Аргумент - клиентский объект-убийца. Если не указать, движок считает, что объект самоубился.
float max_health() constвозвращает максимальный уровень здоровья объекта. Для неживых объектов возвращает -1. Аргументов не принимает.
int squad() constвозвращает отряд, к которому принадлежит объект. Для неживых объектов возвращает -1. Аргументов не принимает.
int team() constвозвращает команду, к которой принадлежит объект. Для неживых объектов возвращает -1. Аргументов не принимает.
CEntityAlive
Эти методы можно применять только для живых объектов - сталкеры, монстры (кроме ворон), актор. Свойства объектов класса:
float satiety; // сытость -- есть, но почему-то не прописан в lua_help float bleeding; // кровотечение. только ЗП float health; // здоровье 0..1 float morale; // мораль float power; // сила float psy_health; // пси-здоровье float radiation; // радиация
все свойства на запись работают не так, как на чтение. При записи значение имеет смысл изменения соответствующего свойства. Т.е. если записать 0.1 в health, то это увеличит его на 0.1.
float get_bleeding() constВ ЗП нет. Возвращает текущй размер кровотечения. Чем больше у объекта ранений - тем больше кровотечение. Если объект неживой, возвращает -1. Аргументов не принимает.
ALife::ERelationType relation(game_object* who)
возвращает тип отношения обрабатываемого объекта к объекту, передаваемому аргументом who. Объект who также должен наследовать от CEntityAlive. Для трупов или неживых объектов возвращает -1. Возвращаемое значение - член перечисления ALife::ERelationType. В Lua оно экспортировано в виде констант класса game_object.
const friend = 0 const neutral = 1 const enemy = 2 const dummy = -1
Есть еще две неэкспортированных константы:
eRelationTypeWorstEnemy = 0x3 eRelationTypeLast = 0x4
string who_hit_name()возвращает имя объекта, последнего нанесшего хит обрабатываемому объекту. Аргументов не принимает.
string who_hit_section_name()возвращает имя секции объекта, последнего нанесшего хит обрабатываемому объекту. Аргументов не принимает.
float fov() constвозвращает угол зрения. Аргументов не принимает.
float range() constвозвращает максимальную ширину видимой области. Аргументов не принимает.
Написано K.D. 15:52, 18 декабря 2011 (UTC) по материалам malandrinus, материалам форума АМК и собственным изысканиям.