Игра

Сообщения

Сервер говорит каждому клиенту, что рисовать и играть, сообщениями: строка чата, значок HUD, часы раунда, сообщение об убийстве. Плагин слышит сообщение до того, как оно ушло, читает его, меняет или останавливает:

server
.
addMessageListener
("death", (
event
) => {
if (
event
.
headshot
)
print
(0, `${
event
.
killer
?.
name
} - headshot - ${
event
.
victim
?.
name
}`);
});
server
.
addMessageListener
("text", (
event
) => {
if (
event
.
text
== "#Round_Draw")
event
.
preventDefault
(); // клиент его не получит
});
server
.
addMessageListener
("team", (
event
) => {
if (
event
.
team
== "SPECTATOR")
console
.
log
(`${
event
.
target
?.
name
} наблюдает`);
});
server
.
addMessageListener
("roundTime", (
event
) => {
event
.
seconds
= 90; // часы показывают 90
});

server.removeMessageListener("death", listener) снимает обработчик: передайте то же имя и ту же функцию, что добавляли. До плагина доходят только те сообщения, которые он слушает.

Имя сообщения пишется строкой, и редактор подсказывает имена, у каждого — для чего игра шлёт это сообщение и как его называет сама игра: death — это DeathMsg игры, chat — её SayText. Все они — в таблице в конце страницы.

Несколько сообщений игры для плагина — одно и то же, и одно имя слышит их все: progressBar — это BarTime и BarTime2, которое только добавляет, с какого места полоса начинается. У события есть поля их всех, а event.name говорит, какое пришло; поле, которого в пришедшем сообщении нет, читается как 0, null или пусто, а присваивание ему ничего не меняет — startPercent у BarTime равен 0.

server
.
addMessageListener
("progressBar", (
event
) => {
console
.
log
(`${
event
.
name
}: ${
event
.
seconds
} с от ${
event
.
startPercent
}%`);
});

Событие

event.player — игрок, которому идёт сообщение, null — если всем, поэтому игрок, о котором сообщение, — отдельное поле: target или его роль — killer, victim, sender. preventDefault() останавливает сообщение. event.name — имя сообщения у игры, "DeathMsg" у death.

Каждое сообщение игра пишет по своей раскладке, и у сообщения с известной раскладкой — а это почти все, что шлёт Counter-Strike, — на каждый аргумент есть поле с именем и типом: игрок — Player (null — никто), признак — boolean, команда — Team, оружие — WeaponKind, маска — массив имён, время — в секундах. Редактор их подсказывает. Присвоить полю — изменить то, что получит клиент: event.team = "CT".

server
.
addMessageListener
("hideWeapon", (
event
) => {
event
.
flags
=
event
.
flags
.
concat
(["money"]); // деньги тоже скрыты
});

Сообщение без известной раскладки — прогресс ботов, тексты подсказчика — читается по месту аргументов, через event.args, которые есть у любого сообщения для того, чего не покрывают его поля:

server
.
addMessageListener
("botProgress", (
event
) => {
console
.
log
(`${
event
.
args
.
length
} ${
event
.
args
.
number
(0)}`);
});

event.args.number(i) и event.args.text(i) читают аргумент на месте i, 0 — первый; isText(i) говорит, какой он; setNumber(i, value) и setText(i, value) его меняют.

Аргумент, который сообщение не записало, — цвет statusIcon, когда значок прячут, params текста без подстановок, — читается как 0 или пусто, а присваивание ему ничего не меняет. Имя, для которого у игры нет сообщения, — ошибка сборки.

Сообщение, которое плагин шлёт через message_begin, до обработчиков не доходит: AMX Mod X слышит только то, что идёт через движок. Посланное через emessage_begin доходит, как и то, что шлёт player.screen, и то, что шлёт player.money, когда ему присваивают.

Все сообщения

ИмяИмя у игрыЧто этоПоля
adStopADStopHUD игрока перестаёт показывать рекламу раунда. —
allowSpectateAllowSpecМожно ли игроку выбрать «Наблюдать» в меню команды.allowed
ammoAmmoXМеняется запас патронов одного вида на HUD игрока.ammo, amount
ammoPickupAmmoPickupИгрок подбирает патроны: уведомление сбоку экрана.ammo, amount
armorBatteryМеняется броня игрока на его HUD.armor
armorTypeArmorTypeЗначок брони на HUD игрока: жилет или жилет со шлемом.helmet
bombDropBombDropБомба на радаре террористов: брошена или заложена.origin, planted
bombPickupBombPickupБомбу подобрали: она пропадает с радара террористов. —
botProgressBotProgressПолоса прогресса, которую клиент игрока показывает, пока боты изучают новую карту.args
botVoiceBotVoiceЗначок голоса над ботом, который говорит по рации.talking, target
chatSayTextСтрока чата.sender, text, params
closeBuyMenuBuyCloseМеню закупки игрока закрывается. —
corpseClCorpseТело погибшего игрока остаётся на земле, чтобы клиенты его нарисовали.model, team, target
crosshairCrosshairСобственный прицел Counter-Strike на экране игрока показывают или прячут.shown
currentWeaponCurWeaponОружие в руках игрока и его обойма на HUD.active, weapon, clip
czCareerCZCareerШаг карьеры Condition Zero, её одиночной кампании.args
czCareerHudCZCareerHUDКарьера Condition Zero на HUD игрока.args
damageDamageИгроку показывают полученный урон: красные метки сбоку экрана.armor, damage, damageType, origin
deathDeathMsgУбийство в правом верхнем углу каждого экрана.killer, victim, headshot, weapon
flashlightFlashlightЗначок фонарика на HUD игрока: включён ли он, и его заряд.on, battery
flashlightBatteryFlashBatМеняется заряд фонарика на HUD игрока.battery
fogFogТуман на экране игрока: его цвет и плотность.args
forceCameraForceCamВиды, в которых мёртвый игрок может смотреть игру, как разрешают mp_forcecamera и mp_forcechasecam.args
fovSetFOVЗадаётся поле зрения игрока.fov
gameModeGameModeИграют ли командами — для клиента игрока.args
gameTitleGameTitleЗаголовок игры на экране игрока, когда он входит в игру.args
geigerGeigerЩелчки счётчика Гейгера, которые игрок слышит рядом с радиацией.range
healthHealthМеняется здоровье игрока на его HUD.health
hideWeaponHideWeaponМеняются скрытые части HUD игрока.flags
hintHudText, HudTextArgs, HudTextProПодсказка посреди экрана игрока.text, params
hltvHLTVЗаметка для прокси HLTV, например о начале нового раунда.args
hostageKilledHostageKЗаложник убит: он пропадает с радара спецназа.hostage
hostagePositionHostagePosЗаложник на радаре спецназа.hostage, origin
initHudInitHUDHUD игрока готовится, когда он входит в игру. —
itemPickupItemPickupИгрок подбирает предмет: уведомление сбоку экрана.item
itemStatusItemStatusПрибор ночного видения и набор сапёра, которые есть у игрока, для его HUD.nightVision, defuseKit
locationLocationМесто на карте, где находится игрок, как его называет рация.target, place
menuShowMenuТекстовое меню на экране игрока — меню команды без VGUI, рация, меню плагина.more, text
moneyMoneyМеняются деньги игрока на его HUD.amount, flash
moneyBlinkBlinkAcctДеньги на HUD игрока мигают: ему не хватает на покупку.blinks
motdMOTDЧасть сообщения дня — окна, которое видит вошедший игрок.last, text
nightVisionNVGToggleНочное видение игрока включают или выключают.on
progressBarBarTime, BarTime2Полосу прогресса посреди экрана игрока показывают или прячут — пустой или заполненной не с нуля.seconds, startPercent
radarRadarСоюзник на радаре игрока.target, origin
reloadSoundReloadSoundЗвук перезарядки оружия поблизости — для клиента игрока.args
requestStateReqStateИгра запрашивает у клиента игрока его состояние — для голоса. —
resetHudResetHUDHUD игрока сбрасывается при его появлении. —
roundTimeRoundTimeЗадаются часы раунда вверху HUD игрока.seconds
scenarioIconScenarioЗначок сценария на HUD игрока, например бомбы или заложника.active, sprite, alpha
scoreScoreInfoСтрока игрока в таблице счёта.target, frags, deaths, team
scoreAttributeScoreAttribОтметки, которые таблица счёта показывает рядом с игроком: погиб, бомба, VIP.target, flags
screenFadeScreenFadeЭкран игрока окрашивается с затуханием — флешка, затемнение.duration, hold, direction, modulate, stay, color
screenShakeScreenShakeВид игрока трясётся — рядом взрыв.amplitude, duration, frequency
serverNameServerNameИмя сервера, которое показывает клиент игрока.serverName
shadowShadowIdxСпрайт, которым клиент игрока рисует тени игроков.args
shellCasingBrassГильза, которую выбрасывает оружие, — клиенты её рисуют.args
showTimerShowTimerНа HUD игрока появляются часы раунда. —
soundSendAudioЗвук, который играет игроку, например фраза рации.sender, sound, pitch
spectatedHealthSpecHealth, SpecHealth2Здоровье игрока, за которым следит наблюдатель.health, target
spectatorSpectatorИгрок становится наблюдателем или перестаёт им быть — в таблице счёта.target, spectator
statusIconStatusIconЗначок состояния на HUD игрока — зона закупки, бомба — показывается, мигает или прячется.state, sprite, color
statusTextStatusTextСтрока состояния внизу экрана игрока, например имя игрока, в которого он целится.line, text
statusValueStatusValueЗначение, которое показывает строка состояния, например игрок, в которого целится игрок.slot, value
taskTimeTaskTimeОтсчёт задания на HUD игрока, например спасения заложников в карьере.seconds, active, fade
teamTeamInfoКоманда игрока в таблице счёта.target, team
teamScoreTeamScoreСчёт команды в таблице счёта.team, score
textTextMsgТекст игры — объявление, подсказка — в чате, консоли или посреди экрана.destination, text, params
trainTrainСкорость поезда, которым управляет игрок, на его HUD.speed
tutorCloseTutorCloseСообщение подсказчика на экране игрока закрывается. —
tutorLineTutorLineУказатель подсказчика на экране игрока — на предмет в мире.args
tutorStateTutorStateСостояние подсказчика на клиенте игрока.args
tutorTextTutorTextСообщение подсказчика на экране игрока.args
vguiMenuVGUIMenuНа экране игрока открывается VGUI-меню игры: меню команды, класса, закупки.menu
viewModeViewModeВид игрока возвращается к виду от первого лица. —
voiceMaskVoiceMaskИгроки, которых игрок слышит в голосовом чате, и те, кого он заглушил.args
weaponListWeaponListОписание оружия для клиента игрока: его патроны, слот, место в слоте.classname, ammo, maxAmmo, ammo2, maxAmmo2, slot, position, weapon
weaponPickupWeapPickupИгрок подбирает оружие: уведомление сбоку экрана.weapon
weatherReceiveWПогода на карте, дождь или снег, — для клиента игрока.args