entity: методы
Методы объекта сущности. Методы игрока и оружия доступны у любого объекта, но проверяют класс при вызове: если класс не подходит, ошибка <ожидаемый класс> expected, got <класс сущности>.
Поля схемы#
Любое поле схемы игры читается и пишется по имени: ent.m_iHealth, ent.m_vecAbsVelocity. Поиск учитывает базовые классы.
- Поле не найдено —
nilпри чтении, ошибкаattempt to write to an invalid fieldпри записи. - Типы значений описаны на странице «Типы схемы».
- Имена методов не пересекаются с полями: поля начинаются с
m_.
Запись поля меняет память игры напрямую. Неверное значение может сломать состояние сущности или вызвать вылет игры.
local me = entity.local_pawn()
if me then
print(me.m_iHealth, " ", me.m_iTeamNum, " ", me.m_ArmorValue)
end
ent:data()#
Возвращает: lightuserdata — указатель на объект сущности в памяти игры.
local me = entity.local_pawn()
if me then print(me:data()) end
ent:type()#
Возвращает: type или nil — тип схемы класса сущности (см. «Типы схемы»).
local me = entity.local_pawn()
if me then print(me:type():name()) end --> C_CSPlayerPawn
ent:classname()#
Возвращает: string — C++-имя класса, при отсутствии "void".
for _, ent in ipairs(entity.list()) do
if ent:classname() == "C_SmokeGrenadeProjectile" then
print("Летит дым: ", ent:entindex())
end
end
ent:classid(id?: number, flag?: boolean)#
Номер сетевого класса сущности. Номера назначает клиент игры при инициализации сетевых классов, поэтому сравнивайте с номером, полученным у сущности, а не с числом, записанным в коде.
| Параметр | Тип | Описание |
|---|---|---|
id |
number |
номер для сравнения |
flag |
boolean |
true — сравнивать также с номерами базовых классов; по умолчанию false |
- Без
id— номер сетевого класса или-1, если у класса сущности нет своего сетевого класса (базовые классы не учитываются). - С
id—true, если номер равенid. - С
idиflag = true—true, еслиidравен номеру класса сущности или одного из её базовых классов. Проверка баз останавливается на первом базовом классе без своего сетевого класса.
Возвращает: number без id; boolean с id.
local me = entity.local_pawn()
if me then
local id = me:classid()
print("classid: ", id)
for _, pawn in ipairs(entity.pawns(false, true)) do
print(pawn:entindex(), " тот же класс: ", pawn:classid(id))
end
end
ent:entindex()#
Индекс сущности. Работает и у недействительного объекта.
Возвращает: number; -1, если объект пустой.
events.entity_deleted:set(function(ent)
print("Удалена сущность #", ent:entindex())
end)
ent:is_valid()#
Существует ли ещё эта сущность. Не даёт ошибок.
Возвращает: boolean.
local target = nil
events.render:set(function()
if target and not target:is_valid() then
print("Цель пропала")
target = nil
end
target = target or entity.pawns(true)[1]
end)
ent:handle()#
Возвращает: number — полный дескриптор сущности; по нему entity.handle вернёт этот же объект, пока сущность жива.
local me = entity.local_pawn()
if me then print(entity.handle(me:handle()) == me) end --> true
ent:designer()#
Возвращает: string или nil — дизайнерское имя класса.
local me = entity.local_controller()
if me then print(me:designer()) end --> cs_player_controller
ent:health()#
Возвращает: number — здоровье (m_iHealth).
local me = entity.local_pawn()
if me and me:health() < 30 then print("Мало здоровья!") end
ent:is_alive()#
Возвращает: boolean — жива ли сущность (m_lifeState == 0).
local alive = 0
for _, pawn in ipairs(entity.pawns(false, true)) do
if pawn:is_alive() then alive = alive + 1 end
end
print("Живых: ", alive)
ent:is_dormant()#
Возвращает: boolean — дремлет ли сущность (сервер давно не присылал её данные).
for _, pawn in ipairs(entity.list("C_CSPlayerPawn")) do
if pawn:is_dormant() then print(pawn, " — данные устарели") end
end
ent:world_group()#
Возвращает: number — номер группы мира сущности, при отсутствии 0.
local me = entity.local_pawn()
if me then print(me:world_group()) end
ent:owner()#
Владелец сущности (m_hOwnerEntity), например игрок для оружия.
Возвращает: entity или nil.
Объект владельца возвращается без проверки существования. Перед использованием вызовите
:is_valid().
local me = entity.local_pawn()
local w = me and me:weapon()
if w then
local owner = w:owner()
print(owner and owner:is_valid() and owner == me) --> true
end
ent:origin(v?: vector)#
Без аргумента возвращает позицию сущности в мире. С аргументом vector — переносит сущность в эту точку.
| Параметр | Тип | Описание |
|---|---|---|
v |
vector |
новая позиция; не передан — чтение |
Возвращает: vector при чтении; ничего при записи.
local me = entity.local_pawn()
if me then
for _, pawn in ipairs(entity.pawns(true)) do
print(pawn:name(), ": ", math.floor(me:origin():dist(pawn:origin())), " юнитов")
end
end
ent:angles(a?: angle)#
Без аргумента возвращает углы поворота сущности в мире. С аргументом angle — задаёт их.
| Параметр | Тип | Описание |
|---|---|---|
a |
angle |
новые углы; не передан — чтение |
Возвращает: angle при чтении; ничего при записи.
local me = entity.local_pawn()
if me then print(me:angles()) end
ent:velocity()#
Возвращает: vector — скорость сущности.
local font = render.load_font("Verdana", 16, "outline")
events.render:set(function()
local me = entity.local_pawn()
if not me or not me:is_alive() then return end
local speed = math.floor(me:velocity():length2d())
local s = render.screen_size()
render.text(vector2(s.x / 2, s.y - 120), color(255, 255, 255, 255), font, "c", speed)
end)
ent:identity()#
Возвращает: declared_class — объект CEntityIdentity сущности.
local me = entity.local_pawn()
if me then print(me:identity().m_designerName) end
ent:skeleton()#
Возвращает: declared_class или nil — скелет сущности (CSkeletonInstance).
local me = entity.local_pawn()
local sk = me and me:skeleton()
print(sk and sk:classname() or "нет скелета")
ent:controller()#
Контроллер пешки. Класс: C_CSPlayerPawnBase.
Возвращает: entity или nil.
for _, pawn in ipairs(entity.pawns(true)) do
local ctrl = pawn:controller()
print(ctrl and ctrl:name() or "?")
end
ent:pawn()#
Пешка контроллера. Класс: CCSPlayerController.
Возвращает: entity или nil. Объект возвращается без проверки существования — проверьте :is_valid().
for _, ctrl in ipairs(entity.controllers()) do
local pawn = ctrl:pawn()
if pawn and pawn:is_valid() then
print(ctrl:name(), ": ", pawn:health())
end
end
ent:playerslot()#
Возвращает: number или nil — слот игрока (индекс − 1) для контроллера; для других сущностей nil.
local me = entity.local_controller()
if me then print(me:playerslot()) end
ent:userid()#
Возвращает: number или nil — userid игрока для контроллера; для других сущностей nil.
local me = entity.local_controller()
if me then print("userid: ", me:userid()) end
ent:weapon()#
Активное оружие. Класс: C_CSPlayerPawnBase.
Возвращает: entity или nil.
local me = entity.local_pawn()
local w = me and me:weapon()
if w then print(w:classname()) end
ent:weapons()#
Все оружия пешки. Класс: C_CSPlayerPawnBase.
Возвращает: atomic_collection — коллекция (индексы с 0, см. «Типы схемы»).
local me = entity.local_pawn()
if me then
for i, w in pairs(me:weapons():value()) do
print(i, " ", w)
end
end
ent:eye_angles()#
Углы взгляда. Класс: C_CSPlayerPawnBase.
Возвращает: angle.
local me = entity.local_pawn()
if me then print(me:eye_angles()) end
ent:eye_position()#
Позиция глаз. Класс: C_CSPlayerPawnBase.
Возвращает: vector.
local me = entity.local_pawn()
if me then
local eye = me:eye_position()
local look = eye + me:eye_angles():forward() * 100
print(look) -- точка в 100 юнитах перед глазами
end
ent:view_offset()#
Смещение глаз относительно позиции. Класс: C_CSPlayerPawnBase.
Возвращает: vector.
local me = entity.local_pawn()
if me then print("Высота глаз: ", me:view_offset().z) end
ent:maxspeed()#
Максимальная скорость пешки. Класс: C_CSPlayerPawn.
Возвращает: number.
local me = entity.local_pawn()
if me then print(me:maxspeed()) end
ent:name()#
Имя игрока. Работает у контроллера и у пешки (берётся имя её контроллера).
Возвращает: string или nil.
for _, pawn in ipairs(entity.pawns(true)) do
print(pawn:name() or "?")
end
ent:hitbox_position(i: number)#
Позиция хитбокса с номером i.
| Параметр | Тип | Описание |
|---|---|---|
i |
number |
номер хитбокса, с 0 |
Возвращает: vector или nil, если номер вне диапазона или скелета нет.
events.render:set(function()
for _, pawn in ipairs(entity.pawns(true)) do
local hb = pawn:hitbox_position(0)
local p = hb and render.world_to_screen(hb)
if p then render.circle(p, color(255, 255, 0, 255), 3) end
end
end)
ent:max_health()#
Возвращает: number или nil — максимальное здоровье (m_iMaxHealth).
local me = entity.local_pawn()
if me then print(me:health(), "/", me:max_health()) end
ent:is_enemy(other?: entity)#
Противник ли эта сущность. Учитывается квар mp_teammates_are_enemies.
| Параметр | Тип | Описание |
|---|---|---|
other |
entity |
с кем сравнивать; по умолчанию — со своей стороной (локальный или наблюдаемый игрок) |
Возвращает: boolean. Если своей стороны нет — true.
for _, pawn in ipairs(entity.pawns()) do
print(pawn:name(), pawn:is_enemy() and " — враг" or " — союзник")
end
ent:vdata()#
Данные оружия (CCSWeaponBaseVData). Класс: C_CSWeaponBase.
Возвращает: declared_class или nil.
local me = entity.local_pawn()
local w = me and me:weapon()
local vd = w and w:vdata()
if vd then print("Урон: ", vd.m_nDamage, " Дальность: ", vd.m_flRange) end
ent:inaccuracy()#
Текущая неточность оружия. Класс: C_CSWeaponBase.
Возвращает: number.
local me = entity.local_pawn()
local w = me and me:weapon()
if w then print(string.format("inaccuracy %.4f", w:inaccuracy())) end
ent:spread()#
Разброс оружия в текущем режиме. Класс: C_CSWeaponBase.
Возвращает: number.
local me = entity.local_pawn()
local w = me and me:weapon()
if w then print(string.format("spread %.4f", w:spread())) end
ent:update_accuracy_penalty()#
Пересчитывает штраф точности оружия. Класс: C_CSWeaponBase.
Возвращает: ничего.
local me = entity.local_pawn()
local w = me and me:weapon()
if w then
w:update_accuracy_penalty()
print(w:inaccuracy())
end
ent:item()#
Предмет экономики (C_EconItemView) — данные скина и предмета. Класс: C_EconEntity.
Возвращает: declared_class.
local me = entity.local_pawn()
local w = me and me:weapon()
if w then print(w:item().m_iItemDefinitionIndex) end
ent:scale_damage(dmg: number, vdata: declared_class, hitgroup: number, attacker?: entity)#
Урон по этой пешке с учётом хитгруппы, брони, шлема и урона по своим. Класс: C_CSPlayerPawn.
| Параметр | Тип | Описание |
|---|---|---|
dmg |
number |
исходный урон |
vdata |
declared_class |
данные оружия — передавайте weapon:vdata() |
hitgroup |
number |
хитгруппа: 1 — голова, 2 — грудь, 3 — живот, 4–5 — руки, 6–7 — ноги |
attacker |
entity |
пешка стрелка (C_CSPlayerPawn), для учёта урона по своим |
Возвращает: number — итоговый урон.
local me = entity.local_pawn()
local w = me and me:weapon()
local vd = w and w:vdata()
if vd then
for _, pawn in ipairs(entity.pawns(true)) do
print(pawn:name(), ": в голову ", pawn:scale_damage(vd.m_nDamage, vd, 1, me))
end
end