| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /*
- ** 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 <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando *
- * *
- * $Archive:: /Commando/Code/Commando/player.h $*
- * *
- * $Author:: Bhayes $*
- * *
- * $Modtime:: 3/08/02 6:41p $*
- * *
- * $Revision:: 87 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #if defined(_MSV_VER)
- #pragma once
- #endif
- #ifndef PLAYER_H
- #define PLAYER_H
- #include "always.h"
- #include "playerdata.h"
- #include "bittype.h"
- #include "boolean.h"
- #include "netinterface.h"
- #include "networkobject.h"
- #include "netclassids.h"
- #include "wwstring.h"
- #include "gamespyauthmgr.h"
- #include "gamespybanlist.h"
- class Vector3;
- class ChunkSaveClass;
- class ChunkLoadClass;
- //------------------------------------------------------------------------------------
- //
- // Holds data about a player
- //
- class cPlayer : public PlayerDataClass, public NetworkObjectClass {
- public:
- friend class cPlayerManager; // so that only cPlayerManager can call ~cPlayer
- virtual uint32 Get_Network_Class_ID(void) const {return NETCLASSID_PLAYER;}
- virtual void Delete(void);
- void Init(void);
- void Mark_As_Modified(void);
- //
- // Client or server
- //
- cPlayer(void);
- bool Save(ChunkSaveClass & csave);
- bool Load(ChunkLoadClass & cload);
- int Get_Id(void) const {return Id;}
- void Set_Id(int id);
- void Set_Name(const WideStringClass & name);
- const WideStringClass & Get_Name(void) const {return Name;}
- virtual void Set_Score(float score);
- virtual void Increment_Score(float add);
- virtual void Set_Money(float money);
- virtual void Increment_Money(float add);
- int Get_Ladder_Points(void) const {return (int)LadderPoints;}
- void Set_Ladder_Points(int points);
- int Get_Kills(void) const {return (int)Kills;}
- void Increment_Kills(void);
- void Set_Kills(int new_kills);
- int Get_Deaths(void) const {return (int)Deaths;}
- void Increment_Deaths(void);
- void Set_Deaths(int new_deaths);
- int Get_Player_Type(void) const {return (int)PlayerType;}
- void Set_Player_Type(int type);
- bool Is_Team_Player(void);
- Vector3 Get_Color(void) const;
- float Get_Kill_To_Death_Ratio(void) const;
- void Get_Player_String(int rank, WideStringClass & string, bool force_verbose = false);
- unsigned long Get_WOL_ClanID(void) const {return ClanID;}
- void Set_WOL_ClanID(unsigned long id) {ClanID = id;}
- int Get_Wol_Rank(void) const {return (int)WolRank;}
- void Set_Wol_Rank(int wol_rank);
- unsigned short Get_WOL_Points(void) const
- {return WOLPoints;}
- void Set_WOL_Points(unsigned short points)
- {WOLPoints = points;}
- int Get_Rung(void) const {return (int)Rung;}
- void Set_Rung(int rung);
- int Get_Damage_Scale_Factor(void) const {return DamageScaleFactor;}
- void Set_Damage_Scale_Factor(int factor);
- void Set_Ping(int ping) {Ping = ping;}
- //int Get_Ping(void) {return Ping;}
- int Get_Ping(void);
- DWORD Get_Join_Time(void) const {return JoinTimeMs;}
- void Reset_Join_Time(void);
- DWORD Get_Total_Time(void) const {return TotalTimeMs;}
- void Increment_Total_Time(void);
- void Reset_Total_Time(void);
- ULONG Get_Ip_Address(void) const {return IpAddress;}
- void Set_Ip_Address(ULONG ip_address);
- int Get_Fps(void) const {return Fps;}
- void Set_Fps(int fps);
- //int Get_Avg_Ping(void) const;
- DWORD Get_Last_Update_Time_Ms(void) const {return LastUpdateTimeMs;}
- void Set_Last_Update_Time_Ms(DWORD time_ms);
- bool Is_Human(void) const {return Id >= 0;}
- virtual void Reset_Player(void);
- void Set_Is_In_Game(bool state);
- cBoolean & Get_Is_In_Game(void) {return IsInGame;}
- void Set_Is_Waiting_For_Intermission(bool state);
- cBoolean & Get_Is_Waiting_For_Intermission(void) {return IsWaitingForIntermission;}
- void Set_Is_Active(bool flag);
- cBoolean & Get_Is_Active(void) {return IsActive;}
- bool Is_Active(void) {return IsActive.Is_True();}
- bool Is_Alive_And_Kicking(void) const;
- //
- // Fast, in-game sorting support
- //
- void Set_Fast_Sort_Key(int key) { FastSortKey = key; }
- int Get_Fast_Sort_Key(void) { return FastSortKey; }
- //
- // Server-to-client data importing/exporting
- //
- virtual void Import_Creation(BitStreamClass &packet);
- virtual void Import_Rare(BitStreamClass &packet);
- virtual void Import_Occasional(BitStreamClass &packet);
- virtual void Export_Creation(BitStreamClass &packet);
- virtual void Export_Rare(BitStreamClass &packet);
- virtual void Export_Occasional(BitStreamClass &packet);
- enum {NUM_NEWBIE_GAMES = 5};
- void Set_Num_Wol_Games(int num_games);
- int Get_Num_Wol_Games(void) { return NumWolGames; }
- //
- // GameSpy support
- //
- void Set_GameSpy_Auth_State(GAMESPY_AUTH_STATE_ENUM state);
- GAMESPY_AUTH_STATE_ENUM Get_GameSpy_Auth_State(void) const {return GameSpyAuthState;}
- void Set_GameSpy_Auth_State_Entry_Time_Ms(DWORD time_ms);
- DWORD Get_GameSpy_Auth_State_Entry_Time_Ms(void) const {return GameSpyAuthStateEntryTimeMs;}
- void Set_GameSpy_Challenge_String(StringClass & challenge_string);
- void Set_GameSpy_Hash_Id(StringClass & hash_id);
- StringClass & Get_GameSpy_Challenge_String(void) {return GameSpyChallengeString;}
- StringClass & Get_GameSpy_Hash_Id(void) {return GameSpyHashId;}
- void Set_GameSpy_Kick_State(GAMESPY_KICK_STATE_ENUM state);
- GAMESPY_KICK_STATE_ENUM Get_GameSpy_Kick_State(void) const {return GameSpyKickState;}
- void Set_GameSpy_Kick_State_Entry_Time_Ms(DWORD time_ms);
- DWORD Get_GameSpy_Kick_State_Entry_Time_Ms(void) const {return GameSpyKickStateEntryTimeMs;}
- //
- // N.B. If you change the state of any of these on the server then you
- // need to call Mark_As_Modified.
- //
- cBoolean Invulnerable;
- static const int INVALID_ID;
- private:
- ~cPlayer(void); // only the cPlayerManager can destroy...
- void On_Create(void);
- void On_Destroy(void);
- WideStringClass Name;
- int Id;
- safe_int LadderPoints;
- safe_int Kills;
- safe_int Deaths;
- safe_int PlayerType;
- safe_int Rung;
- safe_int WolRank;
- unsigned short WOLPoints;
- int DamageScaleFactor;
- int Ping;
- DWORD JoinTimeMs;
- DWORD TotalTimeMs;
- ULONG IpAddress;
- int Fps;
- DWORD LastUpdateTimeMs;
- int FastSortKey;
- int NumWolGames;
- cBoolean IsWaitingForIntermission;
- //
- // GameSpy support
- //
- GAMESPY_AUTH_STATE_ENUM GameSpyAuthState;
- DWORD GameSpyAuthStateEntryTimeMs;
- StringClass GameSpyChallengeString;
- StringClass GameSpyHashId;
- GAMESPY_KICK_STATE_ENUM GameSpyKickState;
- DWORD GameSpyKickStateEntryTimeMs;
- //
- // N.B. If you change the state of any of these on the server then you
- // need to call Mark_As_Modified.
- //
- cBoolean IsInGame;
- cBoolean IsActive;
- unsigned long ClanID;
- };
- //-----------------------------------------------------------------------------
- #endif // PLAYER_H
- //virtual void On_Kill(int victim_id);
- //virtual void On_Kill(int victim_id, int victim_team);
|