Skip to main content

Геймплей

Всё в этом разделе приходит из ReGameDLL.

player:spawn

Игрок появился в раунде живым.

Поля события

Спавн сбрасывает гравитацию, скорость, заморозку, godmode и noclip — ставь их здесь.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:hurt

Игроку наносят урон; урон можно изменить или погасить.

Поля события

Пример

Отмена. e:cancel() гасит урон полностью: ни звука боли, ни брони, ни смерти. Цепочка на этом обрывается. Единственное событие, которое меняет игру. Каждый следующий обработчик видит e.damage после предыдущего. e.hitgroup заполнен только когда урон пришёл от попадания — пуля, нож. У падения, взрыва и урона мира его нет: движок оставил бы там зону от прошлого попадания, а это враньё.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:hurt_post

Урон уже применён; только для наблюдателей.

Поля события

e.victim:health() здесь уже актуальное. Менять нечего — событие неотменяемое.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

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 в сумме — здесь урон ещё не сложен.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:heal

Игроку вот-вот дадут здоровье — аптечка, админ-команда; своей регенерации в CS нет.

Поля события

Отмена. e:cancel() (или e.amount = 0) — здоровье не даётся вообще.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:death

Игрок погиб.

Поля события

Пример

Суицид приходит как e.killer.id == e.victim.id. Вместе с e.killer в nil уходят e.weapon и e.distance.
Граната и взрыв C4 приходят как оружие в руках убийцы, а не как hegrenade. Отличить снаряд можно по e.bits в player:hurt.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:team_change

Игрок сменил сторону.

Поля события

Команда опрашивается каждый кадр, поэтому ловится любая смена: меню, автобаланс, p:team(), сторонний мод. Событие приходит на следующем кадре. Первый заход игрока событием не считается.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:jump

Игрок прыгнул.

Поля события

Не отменяемое: к моменту события движок уже применил прыжок к движению игрока, отменять нечего.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:duck

Игрок присел.

Поля события

Не отменяемое, по той же причине, что и player:jump.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:spectate

Игрок перешёл в режим наблюдателя.

Поля события

Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:radio

Игрок использовал радиокоманду.

Поля события

Отмена. e:cancel() — ни звука, ни строки «Radio: …» в консоли у остальных.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:respawn_check

Игра вот-вот решит, можно ли игроку возродиться.

Поля события

Отмена. e:cancel() принудительно запрещает респаун — независимо от того, что решили бы правила игры сами. Разрешить респаун, который правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:money_change

У игрока вот-вот изменятся деньги — раундовый бонус, награда за фраг, покупка, действие с заложником и т.д.

Поля события

Отмена. e:cancel() — баланс не меняется вообще. weapon:buy/ammo:buy/item:buy уже покрывают саму покупку; это событие — про деньги в отрыве от того, что их вызвало, включая раундовый бонус и награды за фраги, которые через магазинные события не видны.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

weapon:fire

Из ствола вышел выстрел.

Поля события

Только огнестрел: нож бьёт через TraceAttack, гранаты идут своими цепочками. Дробовик даёт одно событие на выстрел, а не на дробину.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

weapon:deploy

Оружие вот-вот покажет вьюмодель и модель в руках.

Поля события

Пример

Оба поля приходят уже заполненными тем, что показал бы движок — меняет их только тот, кто хочет реснуть оружие. Не заменяет модель на земле/в полёте: это grenade:thrown про weapon_hegrenade.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

weapon:reload

Началась настоящая перезарядка.

Поля события

Пример

Приходит из DefaultReload/DefaultShotgunReload — но только когда те реально начинают перезарядку. Сами хелперы вызываются при каждой попытке (в том числе от зажатой или забинженной клавиши), а внутри молча ничего не делают, если магазин уже полон или патронов в запасе нет — так что это не то же самое, что чтение кнопки reload на клиенте: событие приходит, только когда перезарядка правда стартовала. e.clip — это ещё старое значение, до заполнения: сколько патронов оставалось в магазине в момент, когда игрок начал перезарядку. e.delay — время, которое движок передал самой анимации, а не пересчитанный остаток; для дробовиков (перезарядка патрон за патроном) это время именно текущего патрона, а не всей перезарядки целиком. e.max_clip — вместимость магазина этого оружия. Для обычного оружия это тот же iClipSize, что движок передаёт в DefaultReload; для дробовиков (у DefaultShotgunReload такого параметра нет) читается через GetItemInfo(). Пригождается, когда нужно посчитать, сколько патронов реально уйдёт из запаса — например, для механики, где недострелянные патроны в стволе не досыпаются к новому магазину, а теряются.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

item:give

Движок вот-вот выдаст игроку предмет по имени classname.

Поля события

Отмена. e:cancel() — ничего не создаётся и не выдаётся. Не тот же путь, что p:give() (тот идёт через GiveNamedItemEx, отдельный вызов ReGameDLL, который SDK не документирует как обёртку над этим). Это всё остальное, что раздаёт предметы по имени: стартовое снаряжение раунда, give из rcon, сторонний мод.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:strip

У игрока только что забрали весь инвентарь.

Поля события

Не отменяемое: к моменту события инвентарь уже пуст. Срабатывает и на p:strip() из любого плагина — хук общий для всех путей, которые ведут к RemoveAllItems.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:can_have_item

Игра вот-вот решит, может ли игрок вообще получить этот предмет.

Поля события

Отмена. e:cancel() принудительно запрещает — независимо от того, что решили бы правила игры сами. Разрешить то, что правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его. Комментарий SDK для этого хука дословно: «the player is touching an item, do I give it to him» — шире, чем просто подбор с земли: сюда же попадает и item:give, и всё остальное, что спрашивает разрешения выдать предмет.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

weapon:pickup

Игрок подобрал оружие с земли.

Поля события

Комментарий SDK для этого хука дословно: «called each time a player picks up a weapon from the ground» — именно подбор с земли, не item:give и не покупка.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

weapon:throw

Любой гранатный слот вот-вот покинёт руку, до того как движок решил, HE это, дымовая или флешка.

Поля события

Отмена. e:cancel() забирает бросок целиком себе: движковый CGrenade не создаётся вообще. Обработчик, который отменяет, обычно уже успел построить свой снаряд сам (ents.create + e:movetype(8)) — иначе ничего не полетит. Общий перехватчик перед тем, как движок решит, какая это граната — grenade:throw про конкретно HE/дымовую/флешку идёт дальше по цепочке отдельно.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

weapon:secondary_attack

Игрок нажал правую кнопку мыши, держа это оружие.

Поля события

Срабатывает на каждое нажатие, не на каждый кадр зажатой кнопки. Нет отдельного движкового хука на secondary attack (в отличие от primary, за которым стоит weapon:fire) — событие собрано из детектора фронта кнопки в PlayerPreThink.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

grenade:throw

HE, дымовая или флешка вот-вот покинёт руку.

Поля события

Пример

Приходит до того, как движок создаст сам снаряд — на этом этапе ещё нет сущности для e:detonate_on_touch(), только число. Взрыв по касанию, а не по таймеру — это e:detonate_on_touch() в grenade:thrown, а не подмена fuse здесь.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

grenade:thrown

HE, дымовая или флешка только что покинула руку.

Поля события

Пример

e.entity — обычный объект сущности, тот же, что даёт ents.create: e:model(), e:origin(), e:detonate_on_touch() и весь остальной ents работают на нём как на любой другой.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:disappear

Сущность игрока временно убирается из мира.

Поля события

Название и место — по движковому хуку CBasePlayer::Disappear. Не отменяемое: к моменту события сущность уже убрана.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:can_switch_team

Игра вот-вот решит, может ли игрок перейти в команду team.

Поля события

Отмена. e:cancel() принудительно запрещает переход — независимо от того, что решили бы правила игры сами. Разрешить переход, который правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:shield_give

Игроку вот-вот выдадут щит.

Поля события

Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:shield_drop

У игрока только что забрали щит.

Поля события

Не отменяемое: к моменту события щит уже убран.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:observer_next

Наблюдатель вот-вот переключится на другую цель.

Поля события

Не отменяемое: к моменту события движок уже выбрал следующую цель.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:observer_mode

У наблюдателя только что сменился режим камеры.

Поля события

Не отменяемое.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:score_add

Игроку вот-вот изменят личный счёт очков.

Поля события

Отмена. e:cancel() — счёт не меняется вообще.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

team:score_add

Команде вот-вот изменят счёт очков.

Поля события

Отмена. e:cancel() — счёт не меняется вообще. e.player — не «кому идут очки», а тот, через кого движок дёрнул вызов; какой команде считать очки, смотри через e.player:team().
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:userinfo_change

У игрока изменился один из userinfo-ключей (модель, имя и т.д.).

Поля события

Сырой буфер движка в событие не попадает — сразу читай нужный ключ через p:info(key).
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:can_hear

Игра вот-вот решит, слышит ли listener голос speaker.

Поля события

Отмена. e:cancel() принудительно запрещает — независимо от того, что решили бы правила игры сами. Разрешить то, что правила и так запретили бы, этим событием нельзя: только забрать разрешение, не выдать его.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:choose_model

Игрок выбрал пункт в меню внешности.

Поля события

Не отменяемое: к моменту события выбор уже применён.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:choose_team

Игрок выбрал пункт в меню команды.

Поля события

Отмена. e:cancel() блокирует сам переход в команду: выбор из этого меню применяется внутри того же вызова, так что отмена до него срабатывает как полный запрет, а не откат задним числом.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

grenade:explode

HE, дымовая или флешка вот-вот взорвётся.

Поля события

Пример

Отмена. e:cancel() забирает взрыв целиком себе: ни урона (у HE), ни дыма (у smoke), ни ослепления/звона в ушах (у флешки), ни звука от игры — дальше плагин сам решает, что происходит в этой точке. Сущность при этом не убирается сама: если она больше не нужна, убирай через e.entity:remove(). Бомбу не задевает: у неё отдельная цепочка, bomb:exploded.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

player:round_respawn

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

Поля события

Отмена. e:cancel() — для этого игрока сброс на новый раунд не происходит вообще, он остаётся как есть. Не путать с player:spawn — тот срабатывает и на самый первый спавн игрока тоже, это событие — именно про сброс между раундами.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.

Смотри также

player:give_default_items

Игроку вот-вот выдадут стандартный набор на раунд — нож, дефолтный пистолет, всё, что задано cvar-ами команды.

Поля события

Отмена. e:cancel() — движок сначала снимает с игрока всё, что у него есть, и только потом выдаёт стандартный набор; отмена пропускает оба шага, инвентарь остаётся как был.
Событие приходит из ReGameDLL. На ванильном mp.dll оно не срабатывает никогда.