В Counter-Strike все карты состоят лишь из двух типов объектов:

1. Браши

Начнем с брашей (brush). Браши можно сравнить со строительными плитами. Посмотрите на картинку ниже, на ней изображено 5 брашей, составляющих некую открытую комнату.

Из подобных брашей и состоят карты. Игроки бегают по земле, состоящей из брашей и между стенами — тоже брашами. Естественно, игрок видит раскрашенные (затекстурированные) браши, а не такие одноцветные, как на нашей картинке.

2. Энтити

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

При помощи энтити-объектов мы можем сделать карту более интересной — добавить в нее звуки, сделать воду и прочие спецэффекты.

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

10 Дней Выживания в Мире С Энтити 303 😱 Страшный майнкрафт (ХАРДКОР)

К слову сказать, ни одна карта в Counter-Strike не обходится без использования хотя бы нескольких энтити-объектов, поэтому их изучение не менее важная часть, чем усвоение техники создания карт, которая описывается в Учебнике.

Классы энтити-объектов

Всего для создания CS-карт может быть использовано 118 энтити-объектов, которые разбиты на 7 классов. Класс, к которому принадлежит тот или иной энтити-объект, указывается в названии, например:

func_door — объект класса func

info_target — объект класса info

game_text — объект класса game

Список классов энтити-объектов:

env
func
game
info
trigger
xen
все остальные

Для создания самой простой карты необходимо знать от 3 до 5 энтити-объектов. Для более сложной карты потребуется знание 15-20 объектов. Ну, а обычно число различных объектов на карте не превышает 25-30.

Где хранятся описания энтитей

Все энтити описаны в файле с расширением *.fgd (game definition file). Существуют 2 таких файла: стандартный и расширенный (экспертный), в котором добавлено несколько новых видов энтитей и изменены некоторые свойства уже существующих. Его мы и рекомендуем использовать

Проверить номер версии своего FGD-файла можно, открыв его в Блокноте, — номер написан во второй строке сверху.

Энтити точечные, энтити брашевые

Энтити-объекты интересны тем, что могут выглядеть, как обычные браши, также они могут быть прозрачными, а могут вообще не иметь размеров! Все зависит от типа энтити-объекта. Давайте разберемся какие же существуют типы энтити-объектов.

Энтити-объекты делятся на два типа:

  • Брашевые (brush-based или материальные энтити)
  • Точечные (point-based или нематериальные)

На картинке ниже схематически представлена структура карты:

Брашевые (brush-based) энтити

Брашевые (brush-based) энтити — это энтити, в основе которых лежит браш. Обычно такие энтити мы можем увидеть в игре, но бывают и такие, которые видны только в редакторе карт, но не в игре.

Примеры: машина, дверь, стекло, кнопка (это видимые энтити); триггеры (невидимые энтити)

Пример brush-based энтити

Грубо говоря, брашевые энтити — это браши со свойствами.

Точечные (point-based) энтити

Точечные (point-based) энтити — это энтити невидимые в игре, их размер не имеет значения, главное у таких объектов — свойства.

Примеры: звуки, источники света, места рождения игроков и др.

В редакторе точечные энтити изображаются в виде прямоугольников (квадратов) фиолетового цвета, а в трехмерном виде — иконками. На рисунке ниже приведены примеры иконок из 3D-вида редактора: место рождения контра, источник звука, источник света (слева направо).

Примеры точечных энтитей

В игре Вы не увидите никаких иконок, но объекты существуют и выполняют свои функции.

Редактирование свойств энтитей

Свойства энтити-объектов вызываются сочетанием клавиш [Alt-Enter] или в 2d-виде в меню правой кнопки мыши, пункт Properties. Прежде чем вызывать свойства энтити-объекта, его необходимо выделить (что вполне логично :).

Свойства всех энтити-объектов выглядят примерно так:

Пояснения к рисунку:

Читайте также:  Как сломать бедрок в Майнкрафте на выживание

Class
Название энтити-объекта. В начале названия идет класс, а через знак подчеркивания «_» название самого объекта. Превратить один объект в другой проще простого. Просто выбирете в списке другой объект.

Attributes
Свойства объекта. У каждого объекта есть как свои собственные свойства, так и общие, которые есть у большинства объектов. К общим свойствам можно отнести: Name и Target.

Name Имя объекта. Имя нужно давать объекту в том случае, если он будет активироваться (включаться/выключаться) другим объектом.

Target В это поле записывается имя того объекта, который должен быть активирован. Например, у нас есть лампочка с именем LAMP и кнопка. Чтобы лампочка включалась от нажатия на кнопку, необходимо прописать имя LAMP в параметр «Target» кнопки.

Помните, что не обязательно выставлять все свойства, имеющиеся у объекта, достаточно указать только необходимые. Часто бывает так, что объект имеет, скажем, 10-15 свойств, из которых действительно полезны и часто применяемы лишь 2-3.

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

Кнопка Smart Edit
«Smart Edit» — это кнопка, переключающая режимы отображения свойств энтити-объектов. По умолчанию «Smart Edit» нажата, и Вы видите свойства любого объекта, как показано на рисунке выше. Для некоторых же объектов таких свойств нет.

В этом случае необходимо отжать «Smart Edit» и производить изменение свойств в несколько менее удобном виде (но ничего не поделаешь, хорошо хоть объектов таких всего пара штук). Но на первых порах с такими объектами Вы встречаться не будете. Просто имейте это в виду.

Закладка Flags
Многие энтити наряду со свойствами имеют флаги (дополнительные параметры). Флаги выставляются в закладке «Flags». Например, для звука существует флаг «Play everywhere» (чтобы звук играл по всей карте). Флаги, так же как и свойства, могут быть различными у разных объектов. И опять же, не стоит выставлять все флаги — только необходимые.

На последок хочется сказать, что не все объекты работают правильно и не глючат. Если у Вас что-то не получается, просто попробуйте реализовать свою идею при помощи других объектов. Проявите изобретательность, свойственную русскому человеку! 🙂

Источник: ds-servers.com

Модуль Entity

Вся работа с мобами осуществляется через модуль Entity.

Методы для работы с сущностями в Inner Core

Получение

  • Entity.getAll() — возвращает Java-массив всех мобов в мире
  • Entity.getAllJS() — идентичен Entity.getAll, оставлен для совместимости
  • Entity.isExist(mob) — проверяет, существует ли сущность mob
  • Entity.getCustom(mob) — возвращает Updatable сущности mob, если она создана через MobRegistry.
  • Entity.findNearest(coords, type, maxRange) — возвращает ближайшую к координатам coords сущность. Если задан параметр type, то находит только сущностей с заданным типом. Если задан maxRange, то поиск будет производится в радиусе maxRange. Возвращает объект, содержащий уникальный идентификатор моба и расстояние до него:
  • Entity.getAllInRange(coords, maxRange, [type]) — возвращает JS-массив сущностей с типом type в сфере с центром coords и радиусом maxRange. Если тип сущности не указан, найдёт все сущности в указанном радиусе

Создание и удаление

  • Entity.spawn(x, y, z, id, [skin]) — спавнит существо с типом id, координатами x, y, z и назначает ему скин skin.
  • Entity.spawnAtCoords(coords, id, skin) — то же, что и Entity.spawn, но позволяет задать координаты в виде объекта
  • Entity.spawnCustom(name, x, y, z, [extra]) — спавнит сущность со строковым ID name, зарегистрированным через MobRegistry, на координатах x, y, z. Позволяет передать дополнительные данные в контроллеры сущности с помощью параметра extra
  • Entity.spawnCustomAtCoords(name, coords, [extra]) — то же, что и Entity.spawnCustom, но позволяет задать координаты в виде объекта
  • Entity.remove(mob) — удаляет сущность mob из мира.
Читайте также:  Как построить в Майнкрафте электростанцию

Работа с эффектами

  • Entity.addEffect(entity, effectId, amplifier, effectTime, [ambience], [particles]) — накладывает на сущность entity эффект с id effectId на время effectTime. amplifier — сила эффекта, ambience — внешний вид частиц (true/false) и particles — отображать ли частицы (true/false)
  • Entity.clearEffect(entity, effectId) — удаляет у сущности mob эффект id.
  • Entity.clearEffects(entity) — удаляет у сущности mob все эффекты.

Здоровье моба

  • Entity.damageEntity(entity, damage, [cause], [params]) — наносит сущности entity урон в damage единиц, cause может использоваться для определения attacker события, params — объект значений bool1 и bool2, смысл которых пока неизвестен
  • Entity.healEntity(entity, damage) — лечит сущность entity на damage единиц.
  • Entity.health(entity) — возвращает объект для работы со здоровьем моба. Объект содержит следующие методы, привязанные к entity:
  • get() — возвращает здоровье сущности
  • set() — устанавливает здоровье сущности
  • getMax() — получает максимальное возможное значение здоровья сущности
  • setMax() — устанавливает максимальное возможное значение здоровья сущности

Внешний вид моба

  • Entity.setHitbox(mob, width, height) — устанавливает сущности mob хитбокс высотой width и шириной height.
  • Entity.setSkin(mob, skin) — ставит текстуру по пути texture сущности skin.
  • Entity.setTexture(mob, texture) — ставит объект Texture в качестве текстуры для моба. На данный момент анимированные текстуры не поддерживаются.
  • Entity.getRender(mob) — возвращает id рендера сущности mob
  • Entity.setRender(mob, render) — устанавливает сущности mob рендер с id render. Список ванильных рендеров

Работа с инвентарём

  • Entity.getArmorSlot(entity, slot) — возвращает объект, содержащий информацию о предмете, хранимом в указанном слоте брони slot сущности entity
  • Entity.setArmorSlot(entity, slot, id, count, data) — устанавливает в указанный слот брони slot сущности entity предмет с id, data и с количеством count
  • Entity.getCarriedItem(entity) — возвращает объект, содержащий информацию о предмете, который держит в руках сущность entity
  • Entity.setCarriedItem(entity, id, count, data) — устанавливает в руку сущности entity предмет с id, data и с количеством count
  • Entity.getDroppedItem(entity) — получает предмет, которую сущность entity дропнула
  • Entity.setDroppedItem(entity, id, count, data) — устанавливает предмет, которую сущность entity дропнула

Параметры моба

  • Entity.getType(entity) — получает числовой тип моба entity
  • Entity.getAge(mob) — возвращает возраст сущности mob
  • Entity.setAge(mob, age) — устанавливает возраст age сущности mob
  • Entity.getNameTag(mob) — возвращает имя сущности mob.
  • Entity.setNameTag(mob, name) — устанавливает сущности mob имя name.
  • Entity.getProjectileItem(mob) — проверяет, является ли сущность mob снарядом, если это так, возвращает ее данные как предмета.

Поведение моба

  • Entity.getMobile(mob) — получает, может ли сущность mob двигаться
  • Entity.setMobile(mob, mobile) — в зависимости от значения mobile (true/false) управляет возможностью сущности mob двигаться.
  • Entity.getSneaking(mob) — проверяет, сидит ли сущность mob.
  • Entity.setSneaking(mob, sneak) — в зависимости от значения mobile (true/false) управляет, находится ли сущность mob в присяде.
  • Entity.setFire(mob, tick, [force]) — заставляет сущность mob гореть в течении tick тиков. Последний параметр force следует всегда устанавливать в true

Положение и поворот моба

  • Entity.setPosition(mob, x, y, z) — устанавливает сущность mob на координаты x, y, z.
  • Entity.getPosition(mob) — возвращает координаты сущности mob.
  • Entity.addPosition(mob, x, y, z) — относительно перемещает сущность mob на координаты x, y, z.
  • Entity.getLookAngle(mob) — возвращает угол обзора сущности mob в виде объекта . Углы выражаются в радианах
  • Entity.setLookAngle(mob, yaw, pitch) — устанавливает сущности углы обзора yaw и pitch. Углы выражаются в радианах
  • Entity.getLookVector(mob) — возвращает вектор взгляда сущности mob в формате
  • Entity.lookAt(entity, x, y, z) — устанавливает обзор сущности entity так, чтобы она смотрела на координаты x, y, z
  • Entity.lookAtCoords(entity, coords) — то же, что и Entity.lookAt, но на вход принимает координаты в формате

Движение моба

  • Entity.setVelocity(mob, velx, vely, velz) — устанавливает трехмерное ускорение velx, vely, velz сущности mob
  • Entity.getVelocity(mob) — возвращает трехмерное ускорение сущности mob в виде объекта
  • Entity.addVelocity(mob, velx, vely, velz) — добавляет трехмерное ускорение velx, vely, velz сущности mob
  • Entity.moveToTarget(entity, target, params) — передвигает сущность entity к координатам target. Параметр params — объект следующего формата (поданы значения по умолчанию)
Читайте также:  Как изменить генерацию мира в minecraft сервере

speed: 0, // Скорость движения denyY: false, // Запрещено ли изменение скорости по оси Y jumpVel: 0 // Задаёт скорость по оси Y >

  • Entity.moveToAngle(mob, angle, params) — разворачивает сущность mob на угол angle. Параметр params идентичен параметру метода Entity.moveToTarget
  • Entity.moveToLook(mob, params) — разворачивает сущность mob в сторону взгляда. Параметр params идентичен параметру метода Entity.moveToTarget
  • Entity.getMovingVector(mob) — возвращает вектор движения сущности mob — объект со следующими полями:
  • x — проекция единичного вектора скорости сущности на ось x
  • y — проекция единичного вектора скорости сущности на ось y
  • z — проекция единичного вектора скорости сущности на ось z
  • size — длина вектора скорости, численное значение скорости сущности
  • xzsize — скорость сущности в горизонтальной плоскости

Вспомогательные методы

  • Entity.getDistanceBetweenCoords(coords1, coords2) — возвращает расстояние между координатами в обьектах coords1 и coords2. Координаты задаются в формате
  • Entity.getDistanceToCoords(mob, coords) — возвращает расстояние от сущности mob до координат в обьекте coords
  • Entity.getDistanceToEntity(mob1, mob2) — возвращает расстояние между сущностями mob1 и mob2.
  • Entity.getXZPlayerDis(entity) — возвращает расстояние в горизонтальной плоскости от сущности entity до игрока
  • Entity.getLookVectorByAngle(angle) — возвращает вектор взгляда сущности в формате , исходя из угла обзора angle, представленного в формате
  • Entity.getLookAt(mob, x, y, z) — высчитывает угол обзора сущности, необходимый, чтобы она смотрела на координаты x, y, z. Возвращает объект формата

Легаси-функции, не реализованные в Inner Core

  • Entity.getExtra(mob, propetry) — возвращает значение свойства propetry сущности mob в виде строки
  • Entity.putExtra(mob, propetry, value) — записывает свойство propetry со значением value в виде строки сущности mob.
  • Entity.getExtraJson(mob, propetry) — возвращает свойство propetry сущности mob в виде JS-обьекта.
  • Entity.putExtraJson(mob, propetry, value) — записывает свойство propetry со значением value в виде JS-обьекта сущности mob.
  • Entity.getSkin(mob) — возвращает путь в текстурпаке текстуры сущности mob.
  • Entity.rideAnimal(rider, riding) — сажает сущность rider на сущность riding.
  • Entity.getRider(mob) — проверяет, всадник ли сущность mob.
  • Entity.getRiding(mob) — проверяет, сидят ли на сущности mob.
  • Entity.getTarget(mob) — возвращает цель сущности mob.
  • Entity.setTarget(attaker, victim) — ставит сущности attacker цель victim.
  • Entity.getMovingAngleByPositions(pos1, pos2) — не реализована
  • Entity.getInventory(mob, [object], [object]) — возвращает инвентарь сущности mob.

Источник: wiki.mineprogramming.org

[VIDEOGUIDE][1.8+] Командный блок. Команда /entitydata

[VIDEOGUIDE][1.8+] Командный блок. Команда /entitydata

При помощи этой команды можно менять разные данные у сущ-
ностей, их параметры и атрубиты. Что именно и как? Да всё,
что вам угодно. Взять например экипировку, инвентарь, име-
на, уязвимость, эффекты, зачарования, способности двигать-
ся и далее-далее-далее.

Также эта команда отлично сочетается с командами

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

вызов неподвижного зомби с головой скелета иссушителя

меняем данные вызванного зомби (вместо головы скелета иссушителя мы надеваем на него голову зомби)

Постепенно меняем данные (экипируем) зомби:

надеваем на зомби золотые ботинки

надеваем на зомби золотые легенцы

надеваем на зомби золотой нагрудник

надеваем на зомби золотой шлем

экипируем зомби золотым мечом

заменяем золотую броню и меч зомби на зачарованную алмазную броню и алмазный меч с зачарованием

снимаем с зомби всю его броню, надеваем на него голову зомби, чтоб не горел на солнце и вручаем в руки василёк. а также делаем его неподвижным

создаем в СИС событие, которое будет считать нанесенный нами урон

/scoreboard objectives add dummy stat.damageDealt нанесенный урон

задаем команду, чтобы счетчик события отображался на экране

/scoreboard objectives setdisplay sidebar dummy

тестируем событие со счетчиком урона от 500 ед. до 600 ед.

команда — убить всех зомби

удаление игрового события — нанесение урона

/scoreboard objectives remove dummy

Источник: ru-minecraft.ru