GameTextManager: Something i planned, but wont be finishing due to the fake clients.
This commit is contained in:
parent
e2b9246c0d
commit
9ca9d099ed
143
GameTextManager/scripting/GameTextManager.sp
Normal file
143
GameTextManager/scripting/GameTextManager.sp
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
#pragma newdecls required
|
||||||
|
|
||||||
|
#include <sourcemod>
|
||||||
|
#include <sdktools>
|
||||||
|
#include <dhooks>
|
||||||
|
|
||||||
|
Handle hAcceptInput;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public Plugin myinfo =
|
||||||
|
{
|
||||||
|
name = "GameTextManager",
|
||||||
|
author = "zaCade",
|
||||||
|
description = "",
|
||||||
|
version = "1.0.0",
|
||||||
|
};
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public void OnPluginStart()
|
||||||
|
{
|
||||||
|
Handle hGameConf;
|
||||||
|
if ((hGameConf = LoadGameConfigFile("sdktools.games")) == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
SetFailState("Couldn't load \"sdktools.games\" game config!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CBaseEntity::AcceptInput( const char *szInputName, CBaseEntity *pActivator, CBaseEntity *pCaller, variant_t Value, int outputID )
|
||||||
|
int iOffset;
|
||||||
|
if ((iOffset = GameConfGetOffset(hGameConf, "AcceptInput")) == -1)
|
||||||
|
{
|
||||||
|
CloseHandle(hGameConf);
|
||||||
|
SetFailState("GameConfGetOffset(hGameConf, \"AcceptInput\") failed!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((hAcceptInput = DHookCreate(iOffset, HookType_Entity, ReturnType_Bool, ThisPointer_CBaseEntity, OnAcceptInput)) == INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
CloseHandle(hGameConf);
|
||||||
|
SetFailState("DHookCreate(iOffset, HookType_Entity, ReturnType_Bool, ThisPointer_CBaseEntity, OnAcceptInput) failed!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DHookAddParam(hAcceptInput, HookParamType_CharPtr);
|
||||||
|
DHookAddParam(hAcceptInput, HookParamType_CBaseEntity);
|
||||||
|
DHookAddParam(hAcceptInput, HookParamType_CBaseEntity);
|
||||||
|
DHookAddParam(hAcceptInput, HookParamType_Object, 20, DHookPass_ByVal|DHookPass_ODTOR|DHookPass_OCTOR|DHookPass_OASSIGNOP);
|
||||||
|
DHookAddParam(hAcceptInput, HookParamType_Int);
|
||||||
|
|
||||||
|
// Late load.
|
||||||
|
int entity = INVALID_ENT_REFERENCE;
|
||||||
|
while ((entity = FindEntityByClassname(entity, "game_text")) != INVALID_ENT_REFERENCE)
|
||||||
|
{
|
||||||
|
OnEntityCreated(entity, "game_text");
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(hGameConf);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public void OnEntityCreated(int entity, const char[] classname)
|
||||||
|
{
|
||||||
|
if (StrEqual(classname, "game_text", false) == 0)
|
||||||
|
{
|
||||||
|
DHookEntity(hAcceptInput, false, entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//----------------------------------------------------------------------------------------------------
|
||||||
|
public MRESReturn OnAcceptInput(int entity, Handle hReturn, Handle hParams)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
int channel = GetEntProp(entity,
|
||||||
|
|
||||||
|
//<int> m_textParms.channel
|
||||||
|
//<float> m_textParms.x
|
||||||
|
//<float> m_textParms.y
|
||||||
|
//<int> m_textParms.r1
|
||||||
|
//<int> m_textParms.g1
|
||||||
|
//<int> m_textParms.b1
|
||||||
|
//<int> m_textParms.a1
|
||||||
|
//<int> m_textParms.r2
|
||||||
|
//<int> m_textParms.g2
|
||||||
|
//<int> m_textParms.b2
|
||||||
|
//<int> m_textParms.a2
|
||||||
|
//<int> m_textParms.effect
|
||||||
|
//<float> m_textParms.fadeinTime
|
||||||
|
//<float> m_textParms.fadeoutTime
|
||||||
|
//<float> m_textParms.holdTime
|
||||||
|
//<float> m_textParms.fxTime
|
||||||
|
//<char> m_iszMessage
|
||||||
|
*/
|
||||||
|
|
||||||
|
char sInputName[128];
|
||||||
|
DHookGetParamString(hParams, 1, sInputName, sizeof(sInputName));
|
||||||
|
|
||||||
|
if(!StrEqual(sInputName, "Display", false))
|
||||||
|
return MRES_Ignored;
|
||||||
|
|
||||||
|
char sMessage[512];
|
||||||
|
GetEntPropString(entity, Prop_Data, "m_iszMessage", sMessage, sizeof(sMessage));
|
||||||
|
|
||||||
|
if (!sMessage[0])
|
||||||
|
return MRES_Ignored;
|
||||||
|
|
||||||
|
CMessage Message = new CMessage(sMessage);
|
||||||
|
|
||||||
|
Message.hPlugin = INVALID_HANDLE;
|
||||||
|
Message.iEntity = EntIndexToEntRef(entity);
|
||||||
|
Message.iChannel = GetEntProp(entity, Prop_Data, "m_textParms.channel");
|
||||||
|
|
||||||
|
Message.fPositionX = GetEntPropFloat(entity, Prop_Data, "m_textParms.x");
|
||||||
|
Message.fPositionY = GetEntPropFloat(entity, Prop_Data, "m_textParms.y");
|
||||||
|
|
||||||
|
Message.iColorOneR = GetEntProp(entity, Prop_Data, "m_textParms.r1");
|
||||||
|
Message.iColorOneG = GetEntProp(entity, Prop_Data, "m_textParms.g1");
|
||||||
|
Message.iColorOneB = GetEntProp(entity, Prop_Data, "m_textParms.b1");
|
||||||
|
Message.iColorOneA = GetEntProp(entity, Prop_Data, "m_textParms.a1");
|
||||||
|
|
||||||
|
Message.iColorTwoR = GetEntProp(entity, Prop_Data, "m_textParms.r2");
|
||||||
|
Message.iColorTwoG = GetEntProp(entity, Prop_Data, "m_textParms.g2");
|
||||||
|
Message.iColorTwoB = GetEntProp(entity, Prop_Data, "m_textParms.b2");
|
||||||
|
Message.iColorTwoA = GetEntProp(entity, Prop_Data, "m_textParms.a2");
|
||||||
|
|
||||||
|
Message.iEffect = GetEntProp(entity, Prop_Data, "m_textParms.effect");
|
||||||
|
|
||||||
|
Message.fFadeInTime = GetEntPropFloat(entity, Prop_Data, "m_textParms.fadeinTime");
|
||||||
|
Message.fFadeOutTime = GetEntPropFloat(entity, Prop_Data, "m_textParms.fadeoutTime");
|
||||||
|
Message.fHoldTime = GetEntPropFloat(entity, Prop_Data, "m_textParms.holdTime");
|
||||||
|
Message.fFXTime = GetEntPropFloat(entity, Prop_Data, "m_textParms.fxTime");
|
||||||
|
|
||||||
|
g_hMessageQueue.Push(Message);
|
||||||
|
DHookSetReturn(hReturn, false);
|
||||||
|
return MRES_Supercede;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user