36f75d0a4e
:D
141 lines
5.0 KiB
SourcePawn
141 lines
5.0 KiB
SourcePawn
#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:
|
|
//
|
|
// <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
|
|
//----------------------------------------------------------------------------------------------------
|
|
public MRESReturn OnAcceptInput(int entity, Handle hReturn, Handle hParams)
|
|
{
|
|
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;
|
|
}
|