Геймплей
Всё в этом разделе приходит из ReGameDLL.player:spawn
Игрок появился в раунде живым.Поля события
Спавн сбрасывает гравитацию, скорость, заморозку, godmode и noclip — ставь их здесь.
player:hurt
Игроку наносят урон; урон можно изменить или погасить.Поля события
Пример
e:cancel() гасит урон полностью: ни звука боли, ни брони, ни смерти. Цепочка на этом обрывается.
Единственное событие, которое меняет игру. Каждый следующий обработчик видит
e.damage после предыдущего.
e.hitgroup заполнен только когда урон пришёл от попадания — пуля, нож. У
падения, взрыва и урона мира его нет: движок оставил бы там зону от прошлого
попадания, а это враньё.
Смотри также
player:hurt_post
Урон уже применён; только для наблюдателей.Поля события
e.victim:health() здесь уже актуальное. Менять нечего — событие неотменяемое.
player:trace_attack
Один хитбокс получил попадание — раньше и точнее, чемplayer:hurt: до брони, до множителей, до суммирования дроби дробовика в одно число.
Поля события
Отмена.
e:cancel() (или e.damage = 0) убирает это попадание целиком: ни крови, ни вклада в итоговый урон, который дальше увидит player:hurt.
Название — по движковому хуку CBasePlayer::TraceAttack (тот же, что RG_CBasePlayer_TraceAttack в ReAPI). Дробовик даёт одно player:trace_attack на каждую долетевшую дробину и одно player:hurt/weapon:fire в сумме — здесь урон ещё не сложен.
Смотри также
player:heal
Игроку вот-вот дадут здоровье — аптечка, админ-команда; своей регенерации в CS нет.Поля события
Отмена.
e:cancel() (или e.amount = 0) — здоровье не даётся вообще.
player:death
Игрок погиб.Поля события
Пример
e.killer.id == e.victim.id. Вместе с e.killer в nil уходят e.weapon и e.distance.
Граната и взрыв C4 приходят как оружие в руках убийцы, а не как
hegrenade. Отличить снаряд можно по e.bits в player:hurt.player:team_change
Игрок сменил сторону.Поля события
Команда опрашивается каждый кадр, поэтому ловится любая смена: меню, автобаланс,
p:team(), сторонний мод. Событие приходит на следующем кадре. Первый заход игрока событием не считается.
player:jump
Игрок прыгнул.Поля события
Не отменяемое: к моменту события движок уже применил прыжок к движению игрока, отменять нечего.
player:duck
Игрок присел.Поля события
Не отменяемое, по той же причине, что и
player:jump.
player:spectate
Игрок перешёл в режим наблюдателя.Поля события
player:radio
Игрок использовал радиокоманду.Поля события
Отмена.
e:cancel() — ни звука, ни строки «Radio: …» в консоли у остальных.
player:respawn_check
Игра вот-вот решит, можно ли игроку возродиться.Поля события
Отмена.
e:cancel() принудительно запрещает респаун — независимо от того, что решили бы правила игры сами. Разрешить респаун, который правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
player:money_change
У игрока вот-вот изменятся деньги — раундовый бонус, награда за фраг, покупка, действие с заложником и т.д.Поля события
Отмена.
e:cancel() — баланс не меняется вообще.
weapon:buy/ammo:buy/item:buy уже покрывают саму покупку; это событие — про деньги в отрыве от того, что их вызвало, включая раундовый бонус и награды за фраги, которые через магазинные события не видны.
weapon:fire
Из ствола вышел выстрел.Поля события
Только огнестрел: нож бьёт через
TraceAttack, гранаты идут своими цепочками. Дробовик даёт одно событие на выстрел, а не на дробину.
weapon:deploy
Оружие вот-вот покажет вьюмодель и модель в руках.Поля события
Пример
grenade:thrown про weapon_hegrenade.
Смотри также
weapon:reload
Началась настоящая перезарядка.Поля события
Пример
DefaultReload/DefaultShotgunReload — но только когда те реально начинают перезарядку. Сами хелперы вызываются при каждой попытке (в том числе от зажатой или забинженной клавиши), а внутри молча ничего не делают, если магазин уже полон или патронов в запасе нет — так что это не то же самое, что чтение кнопки reload на клиенте: событие приходит, только когда перезарядка правда стартовала.
e.clip — это ещё старое значение, до заполнения: сколько патронов оставалось в магазине в момент, когда игрок начал перезарядку.
e.delay — время, которое движок передал самой анимации, а не пересчитанный остаток; для дробовиков (перезарядка патрон за патроном) это время именно текущего патрона, а не всей перезарядки целиком.
e.max_clip — вместимость магазина этого оружия. Для обычного оружия это тот же iClipSize, что движок передаёт в DefaultReload; для дробовиков (у DefaultShotgunReload такого параметра нет) читается через GetItemInfo(). Пригождается, когда нужно посчитать, сколько патронов реально уйдёт из запаса — например, для механики, где недострелянные патроны в стволе не досыпаются к новому магазину, а теряются.
Смотри также
item:give
Движок вот-вот выдаст игроку предмет по имени classname.Поля события
Отмена.
e:cancel() — ничего не создаётся и не выдаётся.
Не тот же путь, что p:give() (тот идёт через GiveNamedItemEx, отдельный вызов ReGameDLL, который SDK не документирует как обёртку над этим). Это всё остальное, что раздаёт предметы по имени: стартовое снаряжение раунда, give из rcon, сторонний мод.
player:strip
У игрока только что забрали весь инвентарь.Поля события
Не отменяемое: к моменту события инвентарь уже пуст. Срабатывает и на
p:strip() из любого плагина — хук общий для всех путей, которые ведут к RemoveAllItems.
player:can_have_item
Игра вот-вот решит, может ли игрок вообще получить этот предмет.Поля события
Отмена.
e:cancel() принудительно запрещает — независимо от того, что решили бы правила игры сами. Разрешить то, что правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
Комментарий SDK для этого хука дословно: «the player is touching an item, do I give it to him» — шире, чем просто подбор с земли: сюда же попадает и item:give, и всё остальное, что спрашивает разрешения выдать предмет.
Смотри также
weapon:pickup
Игрок подобрал оружие с земли.Поля события
Комментарий SDK для этого хука дословно: «called each time a player picks up a weapon from the ground» — именно подбор с земли, не
item:give и не покупка.
Смотри также
weapon:throw
Любой гранатный слот вот-вот покинёт руку, до того как движок решил, HE это, дымовая или флешка.Поля события
Отмена.
e:cancel() забирает бросок целиком себе: движковый CGrenade не создаётся вообще. Обработчик, который отменяет, обычно уже успел построить свой снаряд сам (ents.create + e:movetype(8)) — иначе ничего не полетит.
Общий перехватчик перед тем, как движок решит, какая это граната — grenade:throw про конкретно HE/дымовую/флешку идёт дальше по цепочке отдельно.
Смотри также
weapon:secondary_attack
Игрок нажал правую кнопку мыши, держа это оружие.Поля события
Срабатывает на каждое нажатие, не на каждый кадр зажатой кнопки. Нет отдельного движкового хука на secondary attack (в отличие от primary, за которым стоит
weapon:fire) — событие собрано из детектора фронта кнопки в PlayerPreThink.
grenade:throw
HE, дымовая или флешка вот-вот покинёт руку.Поля события
Пример
e:detonate_on_touch(), только число. Взрыв по касанию, а не по таймеру — это e:detonate_on_touch() в grenade:thrown, а не подмена fuse здесь.
Смотри также
grenade:thrown
HE, дымовая или флешка только что покинула руку.Поля события
Пример
e.entity — обычный объект сущности, тот же, что даёт ents.create: e:model(), e:origin(), e:detonate_on_touch() и весь остальной ents работают на нём как на любой другой.
Смотри также
player:disappear
Сущность игрока временно убирается из мира.Поля события
Название и место — по движковому хуку
CBasePlayer::Disappear. Не отменяемое: к моменту события сущность уже убрана.
player:can_switch_team
Игра вот-вот решит, может ли игрок перейти в команду team.Поля события
Отмена.
e:cancel() принудительно запрещает переход — независимо от того, что решили бы правила игры сами. Разрешить переход, который правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
Смотри также
player:shield_give
Игроку вот-вот выдадут щит.Поля события
Смотри также
player:shield_drop
У игрока только что забрали щит.Поля события
Не отменяемое: к моменту события щит уже убран.
Смотри также
player:observer_next
Наблюдатель вот-вот переключится на другую цель.Поля события
Не отменяемое: к моменту события движок уже выбрал следующую цель.
Смотри также
player:observer_mode
У наблюдателя только что сменился режим камеры.Поля события
Не отменяемое.
Смотри также
player:score_add
Игроку вот-вот изменят личный счёт очков.Поля события
Отмена.
e:cancel() — счёт не меняется вообще.
Смотри также
team:score_add
Команде вот-вот изменят счёт очков.Поля события
Отмена.
e:cancel() — счёт не меняется вообще.
e.player — не «кому идут очки», а тот, через кого движок дёрнул вызов; какой команде считать очки, смотри через e.player:team().
Смотри также
player:userinfo_change
У игрока изменился один из userinfo-ключей (модель, имя и т.д.).Поля события
Сырой буфер движка в событие не попадает — сразу читай нужный ключ через
p:info(key).
player:can_hear
Игра вот-вот решит, слышит ли listener голос speaker.Поля события
Отмена.
e:cancel() принудительно запрещает — независимо от того, что решили бы правила игры сами. Разрешить то, что правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
player:choose_model
Игрок выбрал пункт в меню внешности.Поля события
Не отменяемое: к моменту события выбор уже применён.
Смотри также
player:choose_team
Игрок выбрал пункт в меню команды.Поля события
Отмена.
e:cancel() блокирует сам переход в команду: выбор из этого меню применяется внутри того же вызова, так что отмена до него срабатывает как полный запрет, а не откат задним числом.
Смотри также
grenade:explode
HE, дымовая или флешка вот-вот взорвётся.Поля события
Пример
e:cancel() забирает взрыв целиком себе: ни урона (у HE), ни дыма (у smoke), ни ослепления/звона в ушах (у флешки), ни звука от игры — дальше плагин сам решает, что происходит в этой точке. Сущность при этом не убирается сама: если она больше не нужна, убирай через e.entity:remove().
Бомбу не задевает: у неё отдельная цепочка, bomb:exploded.
player:round_respawn
Игрока вот-вот сбросят на новый раунд — позиция, здоровье, оружие (оставить или нет), наказание за тимкилл.Поля события
Отмена.
e:cancel() — для этого игрока сброс на новый раунд не происходит вообще, он остаётся как есть.
Не путать с player:spawn — тот срабатывает и на самый первый спавн игрока тоже, это событие — именно про сброс между раундами.
Смотри также
player:give_default_items
Игроку вот-вот выдадут стандартный набор на раунд — нож, дефолтный пистолет, всё, что задано cvar-ами команды.Поля события
Отмена.
e:cancel() — движок сначала снимает с игрока всё, что у него есть, и только потом выдаёт стандартный набор; отмена пропускает оба шага, инвентарь остаётся как был.