GlowColors: Restore glowcolor when map resets to 255 255 255 or sets normal rendermode.
This commit is contained in:
		
							parent
							
								
									0077cc67f0
								
							
						
					
					
						commit
						8b032c5c9e
					
				| @ -6,6 +6,7 @@ | |||||||
| #include <sdkhooks> | #include <sdkhooks> | ||||||
| #include <clientprefs> | #include <clientprefs> | ||||||
| #include <regex> | #include <regex> | ||||||
|  | #include <dhooks> | ||||||
| #undef REQUIRE_PLUGIN | #undef REQUIRE_PLUGIN | ||||||
| #include <zombiereloaded> | #include <zombiereloaded> | ||||||
| #define REQUIRE_PLUGIN | #define REQUIRE_PLUGIN | ||||||
| @ -15,10 +16,13 @@ public Plugin myinfo = | |||||||
| 	name = "GlowColors", | 	name = "GlowColors", | ||||||
| 	author = "BotoX", | 	author = "BotoX", | ||||||
| 	description = "Change your clients colors.", | 	description = "Change your clients colors.", | ||||||
| 	version = "1.1", | 	version = "1.2", | ||||||
| 	url = "" | 	url = "" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // bool CBaseEntity::AcceptInput( const char *szInputName, CBaseEntity *pActivator, CBaseEntity *pCaller, variant_t Value, int outputID ) | ||||||
|  | Handle g_hAcceptInput; | ||||||
|  | 
 | ||||||
| Menu g_GlowColorsMenu; | Menu g_GlowColorsMenu; | ||||||
| Handle g_hClientCookie = INVALID_HANDLE; | Handle g_hClientCookie = INVALID_HANDLE; | ||||||
| 
 | 
 | ||||||
| @ -31,6 +35,23 @@ float g_aRainbowFrequency[MAXPLAYERS + 1]; | |||||||
| 
 | 
 | ||||||
| public void OnPluginStart() | public void OnPluginStart() | ||||||
| { | { | ||||||
|  | 	Handle hGameConf = LoadGameConfigFile("sdktools.games"); | ||||||
|  | 	if(hGameConf == INVALID_HANDLE) | ||||||
|  | 	{ | ||||||
|  | 		SetFailState("Couldn't load sdktools game config!"); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	int Offset = GameConfGetOffset(hGameConf, "AcceptInput"); | ||||||
|  | 	g_hAcceptInput = DHookCreate(Offset, HookType_Entity, ReturnType_Bool, ThisPointer_CBaseEntity, AcceptInput); | ||||||
|  | 	DHookAddParam(g_hAcceptInput, HookParamType_CharPtr); | ||||||
|  | 	DHookAddParam(g_hAcceptInput, HookParamType_CBaseEntity); | ||||||
|  | 	DHookAddParam(g_hAcceptInput, HookParamType_CBaseEntity); | ||||||
|  | 	DHookAddParam(g_hAcceptInput, HookParamType_Object, 20, DHookPass_ByVal|DHookPass_ODTOR|DHookPass_OCTOR|DHookPass_OASSIGNOP); //varaint_t is a union of 12 (float[3]) plus two int type params 12 + 8 = 20 | ||||||
|  | 	DHookAddParam(g_hAcceptInput, HookParamType_Int); | ||||||
|  | 
 | ||||||
|  | 	CloseHandle(hGameConf); | ||||||
|  | 
 | ||||||
| 	g_hClientCookie = RegClientCookie("glowcolor", "", CookieAccess_Protected); | 	g_hClientCookie = RegClientCookie("glowcolor", "", CookieAccess_Protected); | ||||||
| 
 | 
 | ||||||
| 	g_Regex_RGB = CompileRegex("^(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\s+){2}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$"); | 	g_Regex_RGB = CompileRegex("^(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\s+){2}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$"); | ||||||
| @ -53,16 +74,23 @@ public void OnPluginStart() | |||||||
| 
 | 
 | ||||||
| 	g_Cvar_MinBrightness = CreateConVar("sm_glowcolor_minbrightness", "100", "Lowest brightness value for glowcolor.", 0, true, 0.0, true, 255.0); | 	g_Cvar_MinBrightness = CreateConVar("sm_glowcolor_minbrightness", "100", "Lowest brightness value for glowcolor.", 0, true, 0.0, true, 255.0); | ||||||
| 
 | 
 | ||||||
|  | 	AutoExecConfig(true, "plugin.GlowColors"); | ||||||
|  | 
 | ||||||
| 	LoadConfig(); | 	LoadConfig(); | ||||||
| 
 | 
 | ||||||
| 	for(int client = 1; client <= MaxClients; client++) | 	for(int client = 1; client <= MaxClients; client++) | ||||||
| 	{ | 	{ | ||||||
| 		if(IsClientInGame(client) && !IsFakeClient(client) && AreClientCookiesCached(client)) | 		if(IsClientInGame(client)) | ||||||
|  | 		{ | ||||||
|  | 			OnClientPutInServer(client); | ||||||
|  | 
 | ||||||
|  | 			if(!IsFakeClient(client) && AreClientCookiesCached(client)) | ||||||
| 			{ | 			{ | ||||||
| 				OnClientCookiesCached(client); | 				OnClientCookiesCached(client); | ||||||
| 				ApplyGlowColor(client); | 				ApplyGlowColor(client); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| public void OnPluginEnd() | public void OnPluginEnd() | ||||||
| @ -119,12 +147,14 @@ void LoadConfig() | |||||||
| 	while(Config.GotoNextKey(false)); | 	while(Config.GotoNextKey(false)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| public void OnClientConnected(int client) | public void OnClientPutInServer(int client) | ||||||
| { | { | ||||||
| 	g_aGlowColor[client][0] = 255; | 	g_aGlowColor[client][0] = 255; | ||||||
| 	g_aGlowColor[client][1] = 255; | 	g_aGlowColor[client][1] = 255; | ||||||
| 	g_aGlowColor[client][2] = 255; | 	g_aGlowColor[client][2] = 255; | ||||||
| 	g_aRainbowFrequency[client] = 0.0; | 	g_aRainbowFrequency[client] = 0.0; | ||||||
|  | 
 | ||||||
|  | 	DHookEntity(g_hAcceptInput, false, client); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| public void OnClientCookiesCached(int client) | public void OnClientCookiesCached(int client) | ||||||
| @ -198,6 +228,80 @@ public void OnPostThinkPost(int client) | |||||||
| 	ToolsSetEntityColor(client, Red, Green, Blue); | 	ToolsSetEntityColor(client, Red, Green, Blue); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // bool CBaseEntity::AcceptInput( const char *szInputName, CBaseEntity *pActivator, CBaseEntity *pCaller, variant_t Value, int outputID ) | ||||||
|  | public MRESReturn AcceptInput(int pThis, Handle hReturn, Handle hParams) | ||||||
|  | { | ||||||
|  | 	// Should not happen? | ||||||
|  | 	if(DHookIsNullParam(hParams, 2)) | ||||||
|  | 	{ | ||||||
|  | 		LogError("AcceptInput pActivator = NULL"); | ||||||
|  | 		return MRES_Ignored; | ||||||
|  | 	} | ||||||
|  | 	int client = DHookGetParam(hParams, 2); | ||||||
|  | 
 | ||||||
|  | 	char szInputName[32]; | ||||||
|  | 	DHookGetParamString(hParams, 1, szInputName, sizeof(szInputName)); | ||||||
|  | 
 | ||||||
|  | 	if(!StrEqual(szInputName, "addoutput", false)) | ||||||
|  | 		return MRES_Ignored; | ||||||
|  | 
 | ||||||
|  | 	char sValue[128]; | ||||||
|  | 	DHookGetParamObjectPtrString(hParams, 4, 0, ObjectValueType_String, sValue, sizeof(sValue)); | ||||||
|  | 	int iValueLen = strlen(sValue); | ||||||
|  | 
 | ||||||
|  | 	int aArgs[4] = {0, ...}; | ||||||
|  | 	int iArgs = 0; | ||||||
|  | 	bool bFound = false; | ||||||
|  | 
 | ||||||
|  | 	for(int i = 0; i < iValueLen; i++) | ||||||
|  | 	{ | ||||||
|  | 		if(sValue[i] == ' ') | ||||||
|  | 		{ | ||||||
|  | 			if(bFound) | ||||||
|  | 			{ | ||||||
|  | 				sValue[i] = '\0'; | ||||||
|  | 				bFound = false; | ||||||
|  | 
 | ||||||
|  | 				if(iArgs > sizeof(aArgs)) | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 			continue; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if(!bFound) | ||||||
|  | 		{ | ||||||
|  | 			aArgs[iArgs++] = i; | ||||||
|  | 			bFound = true; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if(strncmp(sValue[aArgs[0]], "rendercolor", 11, false) == 0) | ||||||
|  | 	{ | ||||||
|  | 		int aColor[3]; | ||||||
|  | 		aColor[0] = StringToInt(sValue[aArgs[1]]) & 0xFF; | ||||||
|  | 		aColor[1] = StringToInt(sValue[aArgs[2]]) & 0xFF; | ||||||
|  | 		aColor[2] = StringToInt(sValue[aArgs[3]]) & 0xFF; | ||||||
|  | 
 | ||||||
|  | 		if(aColor[0] == 255 && aColor[1] == 255 && aColor[2] == 255) | ||||||
|  | 		{ | ||||||
|  | 			ApplyGlowColor(client); | ||||||
|  | 			DHookSetReturn(hReturn, true); | ||||||
|  | 			return MRES_Supercede; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	else if(StrEqual(sValue[aArgs[0]], "rendermode", false)) | ||||||
|  | 	{ | ||||||
|  | 		int renderMode = StringToInt(sValue[aArgs[1]]) & 0xFF; | ||||||
|  | 		if(renderMode == 0) | ||||||
|  | 		{ | ||||||
|  | 			ApplyGlowColor(client); | ||||||
|  | 			return MRES_Ignored; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return MRES_Ignored; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| public Action Command_GlowColors(int client, int args) | public Action Command_GlowColors(int client, int args) | ||||||
| { | { | ||||||
| 	if(args < 1) | 	if(args < 1) | ||||||
| @ -324,14 +428,6 @@ public void Event_ApplyGlowColor(Event event, const char[] name, bool dontBroadc | |||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	RequestFrame(view_as<RequestFrameCallback>(ApplyGlowColor), client); | 	RequestFrame(view_as<RequestFrameCallback>(ApplyGlowColor), client); | ||||||
| 	CreateTimer(5.0, Timer_ApplyGlowColor, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| public Action Timer_ApplyGlowColor(Handle timer, int serial) |  | ||||||
| { |  | ||||||
| 	int client = GetClientFromSerial(serial); |  | ||||||
| 	if(client) |  | ||||||
| 		ApplyGlowColor(client); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) | public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user