В 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) энтити — это энтити, в основе которых лежит браш. Обычно такие энтити мы можем увидеть в игре, но бывают и такие, которые видны только в редакторе карт, но не в игре.
Примеры: машина, дверь, стекло, кнопка (это видимые энтити); триггеры (невидимые энтити)
Грубо говоря, брашевые энтити — это браши со свойствами.
Точечные (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 — объект следующего формата (поданы значения по умолчанию)
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
При помощи этой команды можно менять разные данные у сущ-
ностей, их параметры и атрубиты. Что именно и как? Да всё,
что вам угодно. Взять например экипировку, инвентарь, име-
на, уязвимость, эффекты, зачарования, способности двигать-
ся и далее-далее-далее.
Также эта команда отлично сочетается с командами
Скажу одно, что возможности применения этой команды
ограничивают лишь наша фантазия и неумение ею поль-
зоваться. И чтоб, хоть немного это исправить, я при-
вел несколько примеров вам в помощь.
вызов неподвижного зомби с головой скелета иссушителя
меняем данные вызванного зомби (вместо головы скелета иссушителя мы надеваем на него голову зомби)
Постепенно меняем данные (экипируем) зомби:
надеваем на зомби золотые ботинки
надеваем на зомби золотые легенцы
надеваем на зомби золотой нагрудник
надеваем на зомби золотой шлем
экипируем зомби золотым мечом
заменяем золотую броню и меч зомби на зачарованную алмазную броню и алмазный меч с зачарованием
снимаем с зомби всю его броню, надеваем на него голову зомби, чтоб не горел на солнце и вручаем в руки василёк. а также делаем его неподвижным
создаем в СИС событие, которое будет считать нанесенный нами урон
/scoreboard objectives add dummy stat.damageDealt нанесенный урон
задаем команду, чтобы счетчик события отображался на экране
/scoreboard objectives setdisplay sidebar dummy
тестируем событие со счетчиком урона от 500 ед. до 600 ед.
команда — убить всех зомби
удаление игрового события — нанесение урона
/scoreboard objectives remove dummy
Источник: ru-minecraft.ru