Описание класса 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.»: Разбиение материала на несколько статей)
(CObject)
 
(не показаны 3 промежуточных версий 2 участников)
Строка 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 />
Строка 101: Строка 98:
 
<div class="NavContent"><cpp>game_object* parent() const</cpp>
 
<div class="NavContent"><cpp>game_object* parent() const</cpp>
 
возвращает parent объекта. Для предмета в ящике вернет объект ящика. Для инвентарных предметов вернет объект владельца инвентаря - актора, сталкера или монстра. Во всех остальных случаях возвратится 0. К полученному объекту можно применять все методы game_object, подходящие к классу объекта. Аргументов не принимает.<br /><br /></div></div>
 
возвращает parent объекта. Для предмета в ящике вернет объект ящика. Для инвентарных предметов вернет объект владельца инвентаря - актора, сталкера или монстра. Во всех остальных случаях возвратится 0. К полученному объекту можно применять все методы game_object, подходящие к классу объекта. Аргументов не принимает.<br /><br /></div></div>
 +
Добавлено в ЗП:
 +
<div class="NavFrame collapsed">
 +
<div class="NavHead">'''function get_visual_name() const''' </div>
 +
<div class="NavContent"><cpp>string get_visual_name() const</cpp>
 +
возвращает визуал объекта в виде имени модели. Аргументов не принимает.<br /><br /></div></div>
 +
<div class="NavFrame collapsed">
 +
<div class="NavHead">'''function set_visual_name(string)''' </div>
 +
<div class="NavContent"><cpp>void set_visual_name(string visual_name)</cpp>
 +
устанавливает визуал объекта. В качестве аргумента необходимо задавать полный путь до модели от папки meshes.<br /><br /></div></div>
 +
 
='''CUsableScriptObject'''=
 
='''CUsableScriptObject'''=
 
Поскольку все игровые объекты наследуют от класса '''''CUsableScriptObject''''', следующие методы можно применять к любым объектам.
 
Поскольку все игровые объекты наследуют от класса '''''CUsableScriptObject''''', следующие методы можно применять к любым объектам.
Строка 178: Строка 185:
 
float morale;    // мораль  
 
float morale;    // мораль  
 
float power;      // сила  
 
float power;      // сила  
float psy_health;  
+
float psy_health; // пси-здоровье
 
float radiation;  // радиация </cpp>
 
float radiation;  // радиация </cpp>
 
все свойства на запись работают не так, как на чтение. При записи значение имеет смысл изменения соответствующего свойства. Т.е. если записать 0.1 в health, то это увеличит его на 0.1.
 
все свойства на запись работают не так, как на чтение. При записи значение имеет смысл изменения соответствующего свойства. Т.е. если записать 0.1 в health, то это увеличит его на 0.1.
Строка 220: Строка 227:
 
----
 
----
 
Написано [[Участник:K.D.|K.D.]] 15:52, 18 декабря 2011 (UTC) по материалам malandrinus, материалам [http://www.amk-team.ru/forum/index.php?showtopic=7450 форума АМК] и собственным изысканиям.
 
Написано [[Участник:K.D.|K.D.]] 15:52, 18 декабря 2011 (UTC) по материалам malandrinus, материалам [http://www.amk-team.ru/forum/index.php?showtopic=7450 форума АМК] и собственным изысканиям.
 +
 +
[[Категория:Скрипты]]

Текущая версия на 17:01, 19 декабря 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