Описание класса game object. Часть I. — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Описание класса game object. Часть I. — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
м (переименовал «Описание класса game object» в «Описание класса game object. Часть I.»: Разбиение материала на несколько статей)
Строка 1: Строка 1:
'''Просьба переименовать статью так: Описание класса game object. Часть I.'''<br />
 
 
'''Game_object''' - класс для доступа к онлайновым (клиентским) объектам. Причём один класс является интерфейсом для совершенно разных объектов. Разработчики не придумали ничего лучше, как взять и объединить в одном классе все интерфейсы всех клиентских объектов: актора, сталкеров, монстров, физических объектов, автомобилей и лампочек, вообще всех. Более странного и вообще говоря уродливого объектно-ориентированного дизайна я ещё не видел. Во-первых, класс вышел совершенно необозримым - три сотни методов! Во-вторых, вызов не подходящего метода для произвольно взятого объекта приводит к совершенно непредсказуемым результатам. В лучшем случае не будет ничего, а чаще всего - будет вылет, причём обычно без лога. Наконец, описание этого класса в lua_help совершенно невнятное (как впрочем и всех остальных классов): типы возвращаемых значений опущены, типы входных аргументов указаны не всегда, а о назначении большинства методов можно только гадать. Предлагаю несколько более внятное описание. Методы рассортированы по клиентским классам, к объектам которых можно применить метод. Также напоминаю, что классы при наследовании также наследуют и все методы родительского класса.
 
'''Game_object''' - класс для доступа к онлайновым (клиентским) объектам. Причём один класс является интерфейсом для совершенно разных объектов. Разработчики не придумали ничего лучше, как взять и объединить в одном классе все интерфейсы всех клиентских объектов: актора, сталкеров, монстров, физических объектов, автомобилей и лампочек, вообще всех. Более странного и вообще говоря уродливого объектно-ориентированного дизайна я ещё не видел. Во-первых, класс вышел совершенно необозримым - три сотни методов! Во-вторых, вызов не подходящего метода для произвольно взятого объекта приводит к совершенно непредсказуемым результатам. В лучшем случае не будет ничего, а чаще всего - будет вылет, причём обычно без лога. Наконец, описание этого класса в lua_help совершенно невнятное (как впрочем и всех остальных классов): типы возвращаемых значений опущены, типы входных аргументов указаны не всегда, а о назначении большинства методов можно только гадать. Предлагаю несколько более внятное описание. Методы рассортированы по клиентским классам, к объектам которых можно применить метод. Также напоминаю, что классы при наследовании также наследуют и все методы родительского класса.
 
{| border="0" cellpadding="3" align="right" width="250" cellspacing="1" style="background:#ccc;"
 
{| border="0" cellpadding="3" align="right" width="250" cellspacing="1" style="background:#ccc;"
Строка 14: Строка 13:
 
  |}
 
  |}
 
__TOC__
 
__TOC__
Клиентский объект можно получить разными способами. В примерах статьи клиентский объект cObj получен с помощью
 
<lua>local cObj = level.object_by_id(oID)</lua>
 
 
= '''ANY CLASS''' =
 
= '''ANY CLASS''' =
 
Эти методы подходят к объектам любого класса<br /><br />
 
Эти методы подходят к объектам любого класса<br /><br />

Версия 15:53, 18 декабря 2011

Game_object - класс для доступа к онлайновым (клиентским) объектам. Причём один класс является интерфейсом для совершенно разных объектов. Разработчики не придумали ничего лучше, как взять и объединить в одном классе все интерфейсы всех клиентских объектов: актора, сталкеров, монстров, физических объектов, автомобилей и лампочек, вообще всех. Более странного и вообще говоря уродливого объектно-ориентированного дизайна я ещё не видел. Во-первых, класс вышел совершенно необозримым - три сотни методов! Во-вторых, вызов не подходящего метода для произвольно взятого объекта приводит к совершенно непредсказуемым результатам. В лучшем случае не будет ничего, а чаще всего - будет вылет, причём обычно без лога. Наконец, описание этого класса в lua_help совершенно невнятное (как впрочем и всех остальных классов): типы возвращаемых значений опущены, типы входных аргументов указаны не всегда, а о назначении большинства методов можно только гадать. Предлагаю несколько более внятное описание. Методы рассортированы по клиентским классам, к объектам которых можно применить метод. Также напоминаю, что классы при наследовании также наследуют и все методы родительского класса.

Навигация

Описание класса game object. Часть I.
Описание класса game object. Часть II.
Описание класса game object. Часть III.
Описание класса game object. Часть IV.
Описание класса game object. Часть V.

ANY CLASS

Эти методы подходят к объектам любого класса


CObject

Поскольку все игровые объекты наследуют от класса CObject, следующие методы можно применять к любым объектам.

CUsableScriptObject

Поскольку все игровые объекты наследуют от класса CUsableScriptObject, следующие методы можно применять к любым объектам.

CPhysicsShellHolder

Эти методы можно применять для всех объектов, кроме аномалий, переходов, ящиков с инвентарем и прожекторов - всего того, у чего нет физической оболочки.

CEntity

Эти методы можно применять для всех живых объектов (сталкеры, монстры, актор), вертолетов и машин.

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.


Написано K.D. 15:52, 18 декабря 2011 (UTC) по материалам malandrinus, материалам форума АМК и собственным изысканиям.

Другие места
LANGUAGE