Add OutputInfo to ExtraCommands sm_waila / sm_info and make it also work with targetnames
This commit is contained in:
		
							parent
							
								
									de29190f36
								
							
						
					
					
						commit
						9f6327e615
					
				| @ -4,6 +4,7 @@ | ||||
| #include <sdktools> | ||||
| #include <sdkhooks> | ||||
| #include <cstrike> | ||||
| #include <outputinfo> | ||||
| 
 | ||||
| #pragma newdecls required | ||||
| 
 | ||||
| @ -56,8 +57,8 @@ public void OnPluginStart() | ||||
| 	RegAdminCmd("sm_setmvp", Command_SetMvp, ADMFLAG_GENERIC, "sm_setmvp <#userid|name> <value>"); | ||||
| 	RegAdminCmd("sm_setteamscore", Command_SetTeamScore, ADMFLAG_GENERIC, "sm_setteamscore <team> <value>"); | ||||
| 	RegAdminCmd("sm_restartround", Command_RestartRound, ADMFLAG_GENERIC, "sm_restartround <delay>"); | ||||
| 	RegAdminCmd("sm_waila", Command_WAILA, ADMFLAG_GENERIC); | ||||
| 	RegAdminCmd("sm_info", Command_WAILA, ADMFLAG_GENERIC); | ||||
| 	RegAdminCmd("sm_waila", Command_WAILA, ADMFLAG_GENERIC, "sm_waila [target]"); | ||||
| 	RegAdminCmd("sm_info", Command_WAILA, ADMFLAG_GENERIC, "sm_info [target]"); | ||||
| 	RegAdminCmd("sm_fcvar", Command_ForceCVar, ADMFLAG_CHEATS, "sm_fcvar <#userid|name> <cvar> <value>"); | ||||
| 	RegAdminCmd("sm_setclantag", Command_SetClanTag, ADMFLAG_CHEATS, "sm_setclantag <#userid|name> [text]"); | ||||
| 	RegAdminCmd("sm_fakecommand", Command_FakeCommand, ADMFLAG_CHEATS, "sm_fakecommand <#userid|name> [command] [args]"); | ||||
| @ -701,6 +702,15 @@ public Action Command_Respawn(int client, int argc) | ||||
| 
 | ||||
| 	GetCmdArg(1, sArgs, sizeof(sArgs)); | ||||
| 
 | ||||
| 	bool bForce = false; | ||||
| 	if(argc >= 2) | ||||
| 	{ | ||||
| 		char sArgs2[8]; | ||||
| 		GetCmdArg(2, sArgs2, sizeof(sArgs2)); | ||||
| 		if(StringToInt(sArgs2)) | ||||
| 			bForce = true; | ||||
| 	} | ||||
| 
 | ||||
| 	if((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_DEAD, sTargetName, sizeof(sTargetName), bIsML)) <= 0) | ||||
| 	{ | ||||
| 		ReplyToTargetError(client, iTargetCount); | ||||
| @ -709,7 +719,7 @@ public Action Command_Respawn(int client, int argc) | ||||
| 
 | ||||
| 	for(int i = 0; i < iTargetCount; i++) | ||||
| 	{ | ||||
| 		if(GetClientTeam(iTargets[i]) == CS_TEAM_SPECTATOR || GetClientTeam(iTargets[i]) == CS_TEAM_NONE) | ||||
| 		if(!bForce && (GetClientTeam(iTargets[i]) == CS_TEAM_SPECTATOR || GetClientTeam(iTargets[i]) == CS_TEAM_NONE)) | ||||
| 			continue; | ||||
| 
 | ||||
| 		bDidRespawn = true; | ||||
| @ -1134,63 +1144,111 @@ public Action Command_RestartRound(int client, int argc) | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| public Action Command_WAILA(int client, int argc) | ||||
| stock void WAILA(int client, int iEntity) | ||||
| { | ||||
| 	if(!client) | ||||
| 	char sModelPath[PLATFORM_MAX_PATH]; | ||||
| 	char sClsName[64]; | ||||
| 	char sNetClsName[64]; | ||||
| 	char sTargetname[64]; | ||||
| 	int iEntityModelIdx = -1; | ||||
| 	int iHammerID = -1; | ||||
| 
 | ||||
| 	GetEntPropString(iEntity, Prop_Data, "m_ModelName", sModelPath, sizeof(sModelPath)); | ||||
| 	GetEntityClassname(iEntity, sClsName, sizeof(sClsName)); | ||||
| 	GetEntityNetClass(iEntity, sNetClsName, sizeof(sNetClsName)); | ||||
| 	GetEntPropString(iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname)); | ||||
| 	if(HasEntProp(iEntity, Prop_Send, "m_nModelIndex")) | ||||
| 		iEntityModelIdx = GetEntProp(iEntity, Prop_Send, "m_nModelIndex"); | ||||
| 	if(HasEntProp(iEntity, Prop_Data, "m_iHammerID")) | ||||
| 		iHammerID = GetEntProp(iEntity, Prop_Data, "m_iHammerID"); | ||||
| 
 | ||||
| 	PrintToConsole(client, "Entity Index: %i\nHammer ID: %d\nTarget name: %s\nModel Path: %s\nModel Index: %i\nClass Name: %s\nNet Class Name: %s", iEntity, iHammerID, sTargetname, sModelPath, iEntityModelIdx, sClsName, sNetClsName); | ||||
| 
 | ||||
| 	char sOutputName[128]; | ||||
| 	for(int index = 0; ; index++) | ||||
| 	{ | ||||
| 		PrintToServer("[SM] Cannot use command from server console."); | ||||
| 		return Plugin_Handled; | ||||
| 		sOutputName[0] = 0; | ||||
| 		int len = GetOutputNames(iEntity, index, sOutputName, sizeof(sOutputName)); | ||||
| 		if(len < 0) | ||||
| 			break; | ||||
| 
 | ||||
| 		int count = GetOutputCount(iEntity, sOutputName); | ||||
| 		for(int i = 0; i < count; i++) | ||||
| 		{ | ||||
| 			char sFormatted[1024]; | ||||
| 			GetOutputFormatted(iEntity, sOutputName, i, sFormatted, sizeof(sFormatted)); | ||||
| 			PrintToConsole(client, "%s: %s", sOutputName, sFormatted); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	float vecEyeAngles[3]; | ||||
| 	float vecEyeOrigin[3]; | ||||
| 	PrintToConsole(client, "-----"); | ||||
| } | ||||
| 
 | ||||
| 	GetClientEyeAngles(client, vecEyeAngles); | ||||
| 	GetClientEyePosition(client, vecEyeOrigin); | ||||
| 
 | ||||
| 	Handle hTraceRay = TR_TraceRayFilterEx(vecEyeOrigin, vecEyeAngles, MASK_ALL, RayType_Infinite, TraceEntityFilter_FilterCaller, client); | ||||
| 
 | ||||
| 	if(TR_DidHit(hTraceRay)) | ||||
| public Action Command_WAILA(int client, int argc) | ||||
| { | ||||
| 	if(argc < 1) | ||||
| 	{ | ||||
| 		float vecEndPos[3]; | ||||
| 		char sModelPath[PLATFORM_MAX_PATH]; | ||||
| 		char sClsName[64]; | ||||
| 		char sNetClsName[64]; | ||||
| 		char sTargetname[64]; | ||||
| 		int iEntity; | ||||
| 		int iEntityModelIdx; | ||||
| 		int iHammerID; | ||||
| 
 | ||||
| 		TR_GetEndPosition(vecEndPos, hTraceRay); | ||||
| 
 | ||||
| 		if((iEntity = TR_GetEntityIndex(hTraceRay)) <= 0) | ||||
| 		if(!client) | ||||
| 		{ | ||||
| 			PrintToChat(client, "[SM] Trace hit the world."); | ||||
| 
 | ||||
| 			delete hTraceRay; | ||||
| 
 | ||||
| 			PrintToServer("[SM] Cannot use command from server console."); | ||||
| 			return Plugin_Handled; | ||||
| 		} | ||||
| 
 | ||||
| 		GetEntPropString(iEntity, Prop_Data, "m_ModelName", sModelPath, sizeof(sModelPath)); | ||||
| 		GetEntityClassname(iEntity, sClsName, sizeof(sClsName)); | ||||
| 		GetEntityNetClass(iEntity, sNetClsName, sizeof(sNetClsName)); | ||||
| 		GetEntPropString(iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname)); | ||||
| 		iEntityModelIdx = GetEntProp(iEntity, Prop_Send, "m_nModelIndex"); | ||||
| 		iHammerID = GetEntProp(iEntity, Prop_Data, "m_iHammerID"); | ||||
| 		float vecEyeAngles[3]; | ||||
| 		float vecEyeOrigin[3]; | ||||
| 
 | ||||
| 		PrintToConsole(client, "Entity Index: %i\nHammer ID: %d\nTarget name: %s\nModel Path: %s\nModel Index: %i\nClass Name: %s\nNet Class Name: %s", iEntity, iHammerID, sTargetname, sModelPath, iEntityModelIdx, sClsName, sNetClsName); | ||||
| 		GetClientEyeAngles(client, vecEyeAngles); | ||||
| 		GetClientEyePosition(client, vecEyeOrigin); | ||||
| 
 | ||||
| 		PrintToChat(client, "[SM] Trace hit something, check your console for more information."); | ||||
| 		Handle hTraceRay = TR_TraceRayFilterEx(vecEyeOrigin, vecEyeAngles, MASK_ALL, RayType_Infinite, TraceEntityFilter_FilterCaller, client); | ||||
| 
 | ||||
| 		delete hTraceRay; | ||||
| 		if(TR_DidHit(hTraceRay)) | ||||
| 		{ | ||||
| 			int iEntity; | ||||
| 			float vecEndPos[3]; | ||||
| 			TR_GetEndPosition(vecEndPos, hTraceRay); | ||||
| 
 | ||||
| 		return Plugin_Handled; | ||||
| 			if((iEntity = TR_GetEntityIndex(hTraceRay)) <= 0) | ||||
| 			{ | ||||
| 				PrintToChat(client, "[SM] Trace hit the world."); | ||||
| 
 | ||||
| 				delete hTraceRay; | ||||
| 				return Plugin_Handled; | ||||
| 			} | ||||
| 
 | ||||
| 			PrintToChat(client, "[SM] Trace hit something, check your console for more information."); | ||||
| 			WAILA(client, iEntity); | ||||
| 
 | ||||
| 			delete hTraceRay; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			PrintToChat(client, "[SM] Couldn't find anything under your crosshair."); | ||||
| 			return Plugin_Handled; | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		char sArgument[256]; | ||||
| 		GetCmdArg(1, sArgument, sizeof(sArgument)); | ||||
| 
 | ||||
| 	delete hTraceRay; | ||||
| 		int Wildcard = FindCharInString(sArgument, '*'); | ||||
| 
 | ||||
| 	PrintToChat(client, "[SM] Couldn't find anything under your crosshair."); | ||||
| 		int entity = INVALID_ENT_REFERENCE; | ||||
| 		while((entity = FindEntityByClassname(entity, "*")) != INVALID_ENT_REFERENCE) | ||||
| 		{ | ||||
| 			char sClassname[64]; | ||||
| 			char sTargetname[64]; | ||||
| 			GetEntPropString(entity, Prop_Data, "m_iClassname", sClassname, sizeof(sClassname)); | ||||
| 			GetEntPropString(entity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname)); | ||||
| 
 | ||||
| 			if(strncmp(sClassname, sArgument, Wildcard, false) == 0 | ||||
| 				|| strncmp(sTargetname, sArgument, Wildcard, false) == 0) | ||||
| 			{ | ||||
| 				WAILA(client, entity); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
|  | ||||
| @ -28,6 +28,8 @@ native int FindOutput(int Entity, const char[] sOutput, int StartIndex, | ||||
| native int DeleteOutput(int Entity, const char[] sOutput, int Index); | ||||
| native int DeleteAllOutputs(int Entity, const char[] sOutput); | ||||
| 
 | ||||
| native int GetOutputNames(int Entity, int Index, const char[] sOutput, int MaxLen); | ||||
| 
 | ||||
| /** | ||||
|  * Do not edit below this line! | ||||
|  */ | ||||
| @ -59,5 +61,6 @@ public __ext_outputinfo_SetNTVOptional() | ||||
| 	MarkNativeAsOptional("FindOutput"); | ||||
| 	MarkNativeAsOptional("DeleteOutput"); | ||||
| 	MarkNativeAsOptional("DeleteAllOutputs"); | ||||
| 	MarkNativeAsOptional("GetOutputNames"); | ||||
| } | ||||
| #endif
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user