Member
Join Date: Jul 2017
Location: Ecuador
|
12-03-2017
, 11:46
Re: game_text l4d2 help
|
#47
|
Quote:
Originally Posted by Crasher_3637
Could you link me to the VoiceHook that you use? I've only found a couple but they either seem to be outdated or don't work. Would I also need to download that VoiceAnnounceEX plugin?
|
If the "VoiceHook" extension in this forum does not work for you, use the "VoiceAnnounceEX" plugin to use the library of this plugin. To plugin l4d2_speakers only the function "OnClientSpeaking" must be changed to "OnClientSpeakingEx".
PHP Code:
#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#include <sdktools>
#include <basecomm>
#include <voiceannounce_ex>
#define PLUGINS_NAME "l4d2_speakers"
#define PLUGIN_FCVAR FCVAR_PLUGIN | FCVAR_NOTIFY
#define PLUGIN_VERSION "1.2"
ConVar cvar_speakerlist_type;
int iSpeakListType;
bool ClientSpeaking[MAXPLAYERS+1];
int iCount;
char SpeakingPlayers[128];
char sPath_VscriptHUD[PLATFORM_MAX_PATH];
public Plugin myinfo =
{
name = PLUGINS_NAME,
author = "Aceleracion and Emilio3",
description = "Player Speakers List in Hud",
version = PLUGIN_VERSION,
url = "n/a"
}
public void OnPluginStart()
{
cvar_speakerlist_type = CreateConVar("voice_speakerlist_type", "0", "Speaker list type (0: Center text, 1: Hud Layout) [DEFAULT: 0]", PLUGIN_FCVAR, true, 0.0, true, 1.0);
RegAdminCmd("sm_runvscript", Command_RunVscript, ADMFLAG_ROOT);
HookConVarChange(cvar_speakerlist_type, Cvar_Changed);
char sPath[PLATFORM_MAX_PATH];
strcopy(sPath, sizeof(sPath), "scripts/vscripts");
if(DirExists(sPath) == false)
{
CreateDirectory(sPath, 511);
}
Format(sPath_VscriptHUD, sizeof(sPath_VscriptHUD), "scripts/vscripts/speakerhud.nut");
if(FileExists(sPath_VscriptHUD) == false || FileSize(sPath_VscriptHUD) == 0)
{
SaveVscriptHUD();
}
CreateTimer(0.8, UpdateSpeaking, _, TIMER_REPEAT);
}
public void OnClientSpeakingEx(int client)
{
if (BaseComm_IsClientMuted(client))
{
return;
}
if (GetClientListeningFlags(client) == 1)
{
return;
}
ClientSpeaking[client] = true;
}
public void OnConfigsExecuted()
{
GetCvars();
}
public void Cvar_Changed(ConVar convar, const char[] oldValue, const char[] newValue)
{
GetCvars();
}
void GetCvars()
{
iSpeakListType = GetConVarInt(cvar_speakerlist_type);
}
public Action Command_RunVscript(int client, int args)
{
if(args < 1)
{
return Plugin_Handled;
}
char vscriptFile[40];
GetCmdArg(1, vscriptFile, sizeof(vscriptFile));
int entity = CreateEntityByName("logic_script");
if( entity != -1 )
{
DispatchKeyValue(entity, "vscripts", vscriptFile);
DispatchSpawn(entity);
SetVariantString("OnUser1 !self:RunScriptCode::0:-1");
AcceptEntityInput(entity, "AddOutput");
SetVariantString("OnUser1 !self:Kill::1:-1");
AcceptEntityInput(entity, "AddOutput");
AcceptEntityInput(entity, "FireUser1");
}
return Plugin_Handled;
}
public Action UpdateSpeaking(Handle timer)
{
iCount = 0;
SpeakingPlayers[0] = '\0';
for (int i = 1; i <= MaxClients; i++)
{
if (ClientSpeaking[i])
{
if (!IsClientInGame(i)) continue;
if(iSpeakListType)
{
Format(SpeakingPlayers, sizeof(SpeakingPlayers), "%s\\n> %N", SpeakingPlayers, i);
}
else
{
Format(SpeakingPlayers, sizeof(SpeakingPlayers), "%s\n%N", SpeakingPlayers, i);
}
iCount++;
}
ClientSpeaking[i] = false;
}
if (iCount > 0)
{
if(iSpeakListType)
{
UpdateDatavalHUD("Players Speaking:%s", SpeakingPlayers);
ServerCommand("sm_runvscript speakerhud");
//ServerCommand("script_execute speakerhud.nut"); //Try this if the previous command does not work
}
else
{
PrintCenterTextAll("Players Speaking:%s", SpeakingPlayers);
}
}
else
{
if(iSpeakListType)
{
ResetHUD();
ServerCommand("sm_runvscript speakerhud");
//ServerCommand("script_execute speakerhud.nut"); //Try this if the previous command does not work
}
}
}
void UpdateDatavalHUD(const char[] format, any ...)
{
char buffer[200];
VFormat(buffer, sizeof(buffer), format, 2);
SaveVscriptHUD(buffer);
}
void ResetHUD()
{
SaveVscriptHUD();
}
void SaveVscriptHUD(const char[] dataval = "")
{
Handle hFile = OpenFile(sPath_VscriptHUD, "w");
if(hFile)
{
WriteFileLine(hFile, "ModeHUD <-");
WriteFileLine(hFile, "{");
WriteFileLine(hFile, " Fields = ");
WriteFileLine(hFile, " {");
if(!StrEqual(dataval, "", false))
{
WriteFileLine(hFile, " speaker = ");
WriteFileLine(hFile, " {");
WriteFileLine(hFile, " slot = g_ModeScript.HUD_MID_BOX,");
WriteFileLine(hFile, " dataval = \"%s\",", dataval);
WriteFileLine(hFile, " flags = g_ModeScript.HUD_FLAG_ALIGN_LEFT | g_ModeScript.HUD_FLAG_NOBG,");
WriteFileLine(hFile, " name = \"speaker\" ");
WriteFileLine(hFile, " }");
}
WriteFileLine(hFile, " }");
WriteFileLine(hFile, "}");
WriteFileLine(hFile, "");
WriteFileLine(hFile, "HUDSetLayout( ModeHUD )");
if(!StrEqual(dataval, "", false))
{
WriteFileLine(hFile, "HUDPlace( g_ModeScript.HUD_MID_BOX , 0.75 , 0.6 , 0.25 , 0.1 )");
}
WriteFileLine(hFile, "g_ModeScript");
CloseHandle(hFile);
}
}
Note that I have tried the plugin "VoiceAnnounceEX" in linux and it has worked well for me. In Windows, I get an error and the server is closed That's because of the DHooks extension I had back then. Now they must have corrected those errors, but the results are better in linux.
__________________
by Ⓐ Aceleración Ⓐ
To succeed in your goals, use your true potential
Last edited by Aceleracion; 12-26-2017 at 15:18.
Reason: Fixed clean HUD layout
|
|