mirror of
https://github.com/spiffcode/hostile-takeover.git
synced 2026-04-11 13:31:29 -06:00
Add /ann command for server announcements
Server announcements will be displayed to every player who enters a server created room. Admins can use the /ann command to set or clear the server announcements.
This commit is contained in:
parent
066e2a4839
commit
896e5a59a3
@ -24,8 +24,11 @@ void Chatter::AddChat(const char *player, const char *chat, bool system) {
|
||||
char name[kcbPlayerName];
|
||||
handler_.GetPlayerName(name, sizeof(name));
|
||||
if (strcmp(name, player) != 0) {
|
||||
gsndm.PlaySfx(ksfxGuiCheckBoxTap);
|
||||
StartBlinking();
|
||||
// Blink for player chats but not server messages
|
||||
if (strcmp(player, "") != 0) {
|
||||
gsndm.PlaySfx(ksfxGuiCheckBoxTap);
|
||||
StartBlinking();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -302,8 +302,6 @@ void Endpoint::OnRoomJoin(dword roomid, const char *password) {
|
||||
xpump_.Send(XMsgRoomStatusComplete::ToBuffer());
|
||||
|
||||
#if 0
|
||||
// This causes the chat button to flash immediately, not good
|
||||
|
||||
// If this room is being logged, tell the user
|
||||
if (room->password()[0] == 0) {
|
||||
const char *pszMsg = "Chat is subject to being logged.";
|
||||
@ -311,6 +309,14 @@ void Endpoint::OnRoomJoin(dword roomid, const char *password) {
|
||||
server_.logger().LogSystemMsg(this, pszMsg);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Broadcast server announcements to the player if they entered a server room.
|
||||
if (room->creator_id() == 0) {
|
||||
if (!server().GetAnnouncements().empty()) {
|
||||
xpump_.Send(XMsgRoomReceiveChat::ToBuffer("",
|
||||
server().GetAnnouncements().c_str()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Endpoint::OnRoomSendChat(const char *chat) {
|
||||
@ -698,6 +704,9 @@ ModeratorCommand Endpoint::GetModeratorCommand(const char *chat) {
|
||||
if (strcmp(arg.c_str(), "/flag") == 0) {
|
||||
return kModeratorCommandFlag;
|
||||
}
|
||||
if (strcmp(arg.c_str(), "/ann") == 0) {
|
||||
return kModeratorCommandAnnouncements;
|
||||
}
|
||||
return kModeratorCommandUnknown;
|
||||
}
|
||||
|
||||
@ -794,6 +803,7 @@ bool Endpoint::ProcessCommand(const char *chat, std::string *response) {
|
||||
case kModeratorCommandClear:
|
||||
case kModeratorCommandPermanent:
|
||||
case kModeratorCommandRegisteredOnly:
|
||||
case kModeratorCommandAnnouncements:
|
||||
if (!IsAdmin()) {
|
||||
*response = "You need to be an admin to use this command.";
|
||||
return true;
|
||||
@ -1306,6 +1316,26 @@ bool Endpoint::ProcessCommand(const char *chat, std::string *response) {
|
||||
*response = "Success";
|
||||
}
|
||||
break;
|
||||
|
||||
case kModeratorCommandAnnouncements:
|
||||
{
|
||||
std::string dummy;
|
||||
const char *rest;
|
||||
std::string announcements;
|
||||
if (GetArgument(chat, 0, &dummy, &rest) && *rest != 0) {
|
||||
announcements.append(rest);
|
||||
server().SetAnnouncements(announcements);
|
||||
|
||||
const char *s = base::Format::ToString("Announcements have been set to: %s", rest);
|
||||
*response = s;
|
||||
} else {
|
||||
announcements.clear();
|
||||
server().SetAnnouncements(announcements);
|
||||
*response = "Announcements have been cleared.";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case kModeratorCommandHelp:
|
||||
if (IsAdmin()) {
|
||||
|
||||
@ -30,7 +30,8 @@ enum ModeratorCommand {
|
||||
kModeratorCommandSee, kModeratorCommandKill, kModeratorCommandPermanent,
|
||||
kModeratorCommandMods, kModeratorCommandWhisper, kModeratorCommandTitle,
|
||||
kModeratorCommandRegisteredOnly, kModeratorCommandAnonBlock,
|
||||
kModeratorCommandSwap, kModeratorCommandFlag, kModeratorCommandHelp
|
||||
kModeratorCommandSwap, kModeratorCommandFlag, kModeratorCommandHelp,
|
||||
kModeratorCommandAnnouncements
|
||||
};
|
||||
|
||||
class Endpoint : public base::MessageHandler, XPumpNotify,
|
||||
|
||||
@ -200,6 +200,14 @@ const char *Server::GetChatRules() {
|
||||
return "RULES: No swearing, name calling, sexism, racism, offensive language, or offensive symbolism allowed. No spamming allowed. Repeat offenders may be muted, kicked, banned, and reported to the admin.";
|
||||
}
|
||||
|
||||
std::string Server::GetAnnouncements() {
|
||||
return announcements_;
|
||||
}
|
||||
|
||||
void Server::SetAnnouncements(std::string announcements) {
|
||||
announcements_ = announcements;
|
||||
}
|
||||
|
||||
dword Server::GetChatterId(Endpoint *endpointAsker, Endpoint *endpoint) {
|
||||
dword shifted = (endpoint->id() << kcBitsFreeShiftEndpointId);
|
||||
dword h = 0;
|
||||
|
||||
@ -47,6 +47,8 @@ public:
|
||||
dword GetChatterId(Endpoint *endpointAsker, Endpoint *endpoint);
|
||||
Endpoint *GetEndpointFromChatterId(dword id);
|
||||
const char *GetChatRules();
|
||||
std::string GetAnnouncements();
|
||||
void SetAnnouncements(std::string announcements);
|
||||
|
||||
ChatLimiter& chatlimiter() { return chatlimiter_; }
|
||||
LevelInfoCache& cache() { return cache_; }
|
||||
@ -105,6 +107,7 @@ private:
|
||||
std::vector<std::string> admin_names_;
|
||||
Tracker tracker_;
|
||||
BadWords badwords_;
|
||||
std::string announcements_;
|
||||
};
|
||||
|
||||
} // namespace wi
|
||||
|
||||
Loading…
Reference in New Issue
Block a user