diff --git a/src/server/func_buyzone.qc b/src/server/func_buyzone.qc index 5c33015..92e6c8c 100644 --- a/src/server/func_buyzone.qc +++ b/src/server/func_buyzone.qc @@ -83,4 +83,9 @@ func_buyzone::Touch(entity eToucher) if (team == 0 || team == pl.team) pl.gflags |= GF_BUYZONE; + + if (pl.m_buyMessage == false) { + env_message_single(pl, "Hint_press_buy_to_purchase"); + pl.m_buyMessage = true; + } } diff --git a/src/server/gamerules.h b/src/server/gamerules.h index dfef57e..637d35c 100644 --- a/src/server/gamerules.h +++ b/src/server/gamerules.h @@ -36,8 +36,8 @@ class CSGameRules:CGameRules class CSSingleplayerRules:CSGameRules { /* client */ - virtual void(NSClientPlayer) PlayerSpawn; - virtual void(NSClientPlayer) PlayerDeath; + virtual void PlayerSpawn(NSClientPlayer); + virtual void PlayerDeath(NSClientPlayer); }; class CSMultiplayerRules:CSGameRules @@ -48,40 +48,42 @@ class CSMultiplayerRules:CSGameRules int m_iEscapedTerrorists; int m_iSwapTeamRoundCounter; - void() CSMultiplayerRules; + void CSMultiplayerRules(void); - virtual void(void) InitPostEnts; - virtual void(void) FrameStart; - virtual void(NSClientPlayer) PlayerDisconnect; - virtual void(NSClientPlayer) PlayerSpawn; - virtual void(NSClientPlayer) PlayerPreFrame; - virtual void(NSClientPlayer) PlayerDeath; - virtual int(int) MaxItemPerSlot; - virtual bool(NSClientPlayer, string) ConsoleCommand; + virtual void InitPostEnts(void); + virtual void FrameStart(void); + virtual void PlayerDisconnect(NSClientPlayer); + virtual void PlayerSpawn(NSClientPlayer); + virtual void PlayerPreFrame(NSClientPlayer); + virtual void PlayerDeath(NSClientPlayer); + virtual int MaxItemPerSlot(int); + virtual bool ConsoleCommand(NSClientPlayer, string); /* CS specific */ - virtual void(void) CreateRescueZones; - virtual void(void) CreateCTBuyzones; - virtual void(void) CreateTBuyzones; - virtual void(float, int) TimerBegin; - virtual void(void) TimerUpdate; + virtual void CreateRescueZones(void); + virtual void CreateCTBuyzones(void); + virtual void CreateTBuyzones(void); + virtual void TimerBegin(float, int); + virtual void TimerUpdate(void); - virtual bool(NSClientPlayer) BuyingPossible; - virtual void(int, int, int) RoundOver; - virtual void(int) RestartRound; - virtual void(NSClientPlayer) DeathCheck; - virtual void(NSClientPlayer) MakeBomber; - virtual void(NSClientPlayer) MakeVIP; - virtual void(void) CountPlayers; - virtual void(void) SwitchTeams; - virtual void(void) TimeOut; - virtual bool(void) IsTeamplay; + virtual bool BuyingPossible(NSClientPlayer); + virtual void RoundOver(int, int, int); + virtual void RestartRound(int); + virtual void DeathCheck(NSClientPlayer); + virtual void MakeBomber(NSClientPlayer); + virtual void MakeVIP(NSClientPlayer); + virtual void CountPlayers(void); + virtual void SwitchTeams(void); + virtual void TimeOut(void); + virtual bool IsTeamplay(void); + + virtual void PlayerClearWeaponry(NSClientPlayer); + virtual void PlayerMakePlayable(NSClientPlayer, int); + virtual void PlayerMakeSpectator(NSClientPlayer); + virtual void PlayerRespawn(NSClientPlayer, int); + virtual entity PlayerFindSpawn(float); + virtual void PlayerReset(NSClientPlayer); - virtual void(NSClientPlayer) PlayerClearWeaponry; - virtual void(NSClientPlayer, int) PlayerMakePlayable; - virtual void(NSClientPlayer) PlayerMakeSpectator; - virtual void(NSClientPlayer, int) PlayerRespawn; - virtual entity(float) PlayerFindSpawn; }; void CSEv_JoinAuto(void); diff --git a/src/server/gamerules_multiplayer.qc b/src/server/gamerules_multiplayer.qc index fa283d1..1571e36 100644 --- a/src/server/gamerules_multiplayer.qc +++ b/src/server/gamerules_multiplayer.qc @@ -456,8 +456,7 @@ CSMultiplayerRules::RestartRound(int iWipe) if (iWipe == FALSE) { Money_GiveTeamReward(pl); } else { - pl.money = 0; - Money_AddMoney(pl, autocvar_mp_startmoney); + PlayerReset(pl); } } for (entity eFind = world; (eFind = findfloat(eFind, ::team, TEAM_CT));) { @@ -476,8 +475,7 @@ CSMultiplayerRules::RestartRound(int iWipe) if (iWipe == FALSE) { Money_GiveTeamReward(pl); } else { - pl.money = 0; - Money_AddMoney(pl, autocvar_mp_startmoney); + PlayerReset(pl); } } @@ -499,8 +497,7 @@ CSMultiplayerRules::RestartRound(int iWipe) if (iWipe == FALSE) { Money_GiveTeamReward(pl); } else { - pl.money = 0; - Money_AddMoney(pl, autocvar_mp_startmoney); + PlayerReset(pl); } } @@ -981,6 +978,25 @@ CSMultiplayerRules::PlayerMakeSpectator(NSClientPlayer pp) PlayerClearWeaponry(pl); } +/* +================= +PlayerReset + +Called when we give the initial starting money, and also when +another player joins and causes the game rules/scores to reset fully +================= +*/ +void +CSMultiplayerRules::PlayerReset(NSClientPlayer pl) +{ + player p = (player)pl; + + /* give the initial server-joining money */ + p.money = 0; + Money_AddMoney(pl, autocvar_mp_startmoney); + p.m_buyMessage = false; /* unset the buy message. */ +} + /* ================= PlayerSpawn @@ -995,8 +1011,7 @@ CSMultiplayerRules::PlayerSpawn(NSClientPlayer pl) PlayerMakeSpectator(pl); Spawn_ObserverCam(pl); - /* give the initial server-joining money */ - Money_AddMoney(pl, autocvar_mp_startmoney); + PlayerReset(pl); /* we don't belong to any team */ pl.team = TEAM_SPECTATOR; diff --git a/src/shared/player.h b/src/shared/player.h index cd76e18..f13df65 100644 --- a/src/shared/player.h +++ b/src/shared/player.h @@ -189,6 +189,8 @@ class player:NSClientPlayer int charmodel; int money; float progress; + + bool m_buyMessage; #endif };