Change sm_beacon to use game-specific team colors (#1187)

Added game color config & specific settings for L4D/L4D2

Created the following keys:

"Team1Color"	"75,255,75,255"
"Team2Color"	"255,75,75,255"
"Team3Color"	"75,75,255,255"
"Team4Color"	"255,128,0,255"
"TeamUnknownColor"	"255,255,255,255"

Added a specific setting for L4D/L4D2 game:

"Team2Color"	"75,75,255,255"
"Team3Color"	"255,75,75,255"
This commit is contained in:
MartLegion 2020-02-23 11:03:00 -03:00 committed by GitHub
parent 8a5d0a58e4
commit cd37354634
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 75 additions and 19 deletions

View File

@ -15,6 +15,13 @@
"SoundFinal" "weapons/cguard/charging.wav"
"SoundBoom" "weapons/explode3.wav"
"SoundFreeze" "physics/glass/glass_impact_bullet4.wav"
"ExternalBeaconColor" "128,128,128,255"
"Team1BeaconColor" "75,255,75,255"
"Team2BeaconColor" "255,75,75,255"
"Team3BeaconColor" "75,75,255,255"
"Team4BeaconColor" "255,128,0,255"
"TeamUnknownBeaconColor" "255,255,255,255"
}
}
@ -72,6 +79,9 @@
"SpriteExplosion" "sprites/floorfire4_.vmt"
"SpriteGlow" "sprites/blueflare1.vmt"
"SpriteHalo" "sprites/glow01.vmt"
"Team2BeaconColor" "75,75,255,255"
"Team3BeaconColor" "255,75,75,255"
}
}
}

View File

@ -67,13 +67,18 @@ int g_GlowSprite = -1;
int g_ExplosionSprite = -1;
// Basic color arrays for temp entities
int redColor[4] = {255, 75, 75, 255};
int orangeColor[4] = {255, 128, 0, 255};
int greenColor[4] = {75, 255, 75, 255};
int blueColor[4] = {75, 75, 255, 255};
int whiteColor[4] = {255, 255, 255, 255};
int greyColor[4] = {128, 128, 128, 255};
int g_ExternalBeaconColor[4];
int g_Team1BeaconColor[4];
int g_Team2BeaconColor[4];
int g_Team3BeaconColor[4];
int g_Team4BeaconColor[4];
int g_TeamUnknownBeaconColor[4];
// UserMessageId for Fade.
UserMsg g_FadeUserMsgId;
@ -239,6 +244,36 @@ public void OnMapStart()
g_HaloSprite = PrecacheModel(buffer);
}
if (gameConfig.GetKeyValue("ExternalBeaconColor", buffer, sizeof(buffer)) && buffer[0])
{
g_ExternalBeaconColor = ParseColor(buffer);
}
if (gameConfig.GetKeyValue("Team1BeaconColor", buffer, sizeof(buffer)) && buffer[0])
{
g_Team1BeaconColor = ParseColor(buffer);
}
if (gameConfig.GetKeyValue("Team2BeaconColor", buffer, sizeof(buffer)) && buffer[0])
{
g_Team2BeaconColor = ParseColor(buffer);
}
if (gameConfig.GetKeyValue("Team3BeaconColor", buffer, sizeof(buffer)) && buffer[0])
{
g_Team3BeaconColor = ParseColor(buffer);
}
if (gameConfig.GetKeyValue("Team4BeaconColor", buffer, sizeof(buffer)) && buffer[0])
{
g_Team4BeaconColor = ParseColor(buffer);
}
if (gameConfig.GetKeyValue("TeamUnknownBeaconColor", buffer, sizeof(buffer)) && buffer[0])
{
g_TeamUnknownBeaconColor = ParseColor(buffer);
}
delete gameConfig;
}
@ -297,3 +332,17 @@ void AddTranslatedMenuItem(Menu menu, const char[] opt, const char[] phrase, int
Format(buffer, sizeof(buffer), "%T", phrase, client);
menu.AddItem(opt, buffer);
}
int[] ParseColor(const char[] buffer)
{
char sColor[16][4];
ExplodeString(buffer, ",", sColor, sizeof(sColor), sizeof(sColor[]));
int iColor[4];
iColor[0] = StringToInt(sColor[0]);
iColor[1] = StringToInt(sColor[1]);
iColor[2] = StringToInt(sColor[2]);
iColor[3] = StringToInt(sColor[3]);
return iColor;
}

View File

@ -85,8 +85,6 @@ public Action Timer_Beacon(Handle timer, any value)
KillBeacon(client);
return Plugin_Stop;
}
int team = GetClientTeam(client);
float vec[3];
GetClientAbsOrigin(client, vec);
@ -94,22 +92,21 @@ public Action Timer_Beacon(Handle timer, any value)
if (g_BeamSprite > -1 && g_HaloSprite > -1)
{
TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0);
int teamBeaconColor[4];
switch (GetClientTeam(client))
{
case 1: teamBeaconColor = g_Team1BeaconColor;
case 2: teamBeaconColor = g_Team2BeaconColor;
case 3: teamBeaconColor = g_Team3BeaconColor;
case 4: teamBeaconColor = g_Team4BeaconColor;
default: teamBeaconColor = g_TeamUnknownBeaconColor;
}
TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, g_ExternalBeaconColor, 10, 0);
TE_SendToAll();
if (team == 2)
{
TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, redColor, 10, 0);
}
else if (team == 3)
{
TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, blueColor, 10, 0);
}
else
{
TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, greenColor, 10, 0);
}
TE_SetupBeamRingPoint(vec, 10.0, g_Cvar_BeaconRadius.FloatValue, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, teamBeaconColor, 10, 0);
TE_SendToAll();
}