/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/commando/cstextobj.cpp $* * * * $Author:: Patrick $* * * * $Modtime:: 1/10/02 11:13a $* * * * $Revision:: 9 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "cstextobj.h" #include #include #include "debug.h" #include "networkobjectfactory.h" #include "gamemode.h" #include "cnetwork.h" #include "networkobjectmgr.h" #include "apppackettypes.h" #include "floodprotectionmgr.h" DECLARE_NETWORKOBJECT_FACTORY(cCsTextObj, NETCLASSID_CSTEXTOBJ); //----------------------------------------------------------------------------- cCsTextObj::cCsTextObj(void) { SenderId = HOST_TEXT_SENDER; Type = TEXT_MESSAGE_PUBLIC; Recipient = HOST_TEXT_SENDER; Set_App_Packet_Type(APPPACKETTYPE_CSTEXTOBJ); } //----------------------------------------------------------------------------- void cCsTextObj::Init(WideStringClass & text, TextMessageEnum type, int sender_id, int recipient) { WWASSERT(sender_id >= 0); WWASSERT(cNetwork::I_Am_Client()); /* if (type == TEXT_MESSAGE_PRIVATE) { WWASSERT(recipient != -1); } */ Text = text; Type = type; SenderId = sender_id; Recipient = recipient; Set_Network_ID(NetworkObjectMgrClass::Get_New_Client_ID()); // // Is this user "flooding" the server with text? // if (FloodProtectionMgrClass::Detect_Flooding (text) == false) { // // Not flooding, so proceed as normal // if (cNetwork::I_Am_Server()) { Act(); } else { Set_Object_Dirty_Bit(0, BIT_CREATION, true); } } else { // // Flooding detected -- don't send the message // Set_Delete_Pending(); } return ; } //----------------------------------------------------------------------------- void cCsTextObj::Act(void) { WWASSERT(cNetwork::I_Am_Server()); if (GameModeManager::Find("Combat")->Is_Active()) { cScTextObj * p_test_obj = new cScTextObj; p_test_obj->Init(Text, Type, false, SenderId, Recipient); } Set_Delete_Pending(); } //----------------------------------------------------------------------------- void cCsTextObj::Export_Creation(BitStreamClass & packet) { WWASSERT(cNetwork::I_Am_Only_Client()); cNetEvent::Export_Creation(packet); packet.Add(SenderId); packet.Add((BYTE) Type); packet.Add_Wide_Terminated_String(Text); packet.Add(Recipient); Set_Delete_Pending(); } //----------------------------------------------------------------------------- void cCsTextObj::Import_Creation(BitStreamClass & packet) { WWASSERT(cNetwork::I_Am_Server()); cNetEvent::Import_Creation(packet); packet.Get(SenderId); BYTE type = packet.Get(type); Type = (TextMessageEnum) type; packet.Get_Wide_Terminated_String(Text.Get_Buffer(256), 256); packet.Get(Recipient); Act(); }