/* * Copyright (c) 2016-2022 Vera Visions LLC. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* called every input frame */ void Game_RunClientCommand(void) { player pl = (player)self; pl.Physics_Run(); } /* custom chat packet */ void SV_SendChat(entity sender, string msg, entity eEnt, float fType) { WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); WriteByte(MSG_MULTICAST, fType == 0 ? EV_CHAT:EV_CHAT_TEAM); WriteByte(MSG_MULTICAST, num_for_edict(sender) - 1); WriteByte(MSG_MULTICAST, sender.team); WriteString(MSG_MULTICAST, msg); if (eEnt) { msg_entity = eEnt; multicast([0,0,0], MULTICAST_ONE); } else { multicast([0,0,0], MULTICAST_ALL); } localcmd(sprintf("echo [SERVER] %s: %s\n", sender.netname, msg)); } /* client cmd overrides happen here */ void Game_ParseClientCommand(string cmd) { tokenize(cmd); if (argv(0) == "say") { SV_SendChat(self, argv(1), world, 0); return; } else if (argv(0) == "say_team") { entity a; for (a = world; (a = find(a, ::classname, "player"));) { if (a.team == self.team) { SV_SendChat(self, argv(1), a, 1); } } return; } clientcommand(self, cmd); }