164 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #include <sourcemod>
 | |
| #include <sdktools>
 | |
| 
 | |
| // Coverage:
 | |
| // GetEntPropArraySize - PropSend/PropData
 | |
| 
 | |
| // GetEntPropString - PropData
 | |
| 
 | |
| // GetEntProp    - PropSend/PropData
 | |
| // GetEntPropEnt - PropSend/PropData
 | |
| 
 | |
| // SetEntProp    - PropSend/PropData
 | |
| 
 | |
| public OnPluginStart()
 | |
| {
 | |
| 	RegConsoleCmd("sm_listammo", sm_listammo, "sm_listammo <send|data> [target] - Lists current ammo for self or specified player");
 | |
| 	RegConsoleCmd("sm_listweapons", sm_listweapons, "sm_listweapons <send|data> [target] - Lists current weapons for self or specified player");
 | |
| 	RegConsoleCmd("sm_setammo", sm_setammo, "sm_setammo <ammotype> <amount> <send|data> [target]");
 | |
| 	RegConsoleCmd("sm_teststrings", sm_teststrings);
 | |
| }
 | |
| 
 | |
| public Action:sm_listammo(client, argc)
 | |
| {
 | |
| 	decl String:buffer[64];
 | |
| 	new target = client;
 | |
| 	if (argc >= 2)
 | |
| 	{
 | |
| 		GetCmdArg(2, buffer, sizeof(buffer));
 | |
| 		target = FindTarget(client, buffer, false, false);
 | |
| 		if (target <= 0)
 | |
| 		{
 | |
| 			ReplyToCommand(client, "Bad client");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 	}
 | |
| 	else if (client == 0)
 | |
| 	{
 | |
| 		ReplyToCommand(client, "Dillweed");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 	
 | |
| 	new PropType:proptype = PropType:-1;
 | |
| 	GetCmdArg(1, buffer, sizeof(buffer));
 | |
| 	if (!strcmp(buffer, "send"))
 | |
| 		proptype = Prop_Send;
 | |
| 	else if (!strcmp(buffer, "data"))
 | |
| 		proptype = Prop_Data;
 | |
| 	
 | |
| 	new ammo;
 | |
| 	new max = GetEntPropArraySize(target, proptype, "m_iAmmo");
 | |
| 	for (new i = 0; i < max; i++)
 | |
| 	{
 | |
| 		if ((ammo = GetEntProp(target, proptype, "m_iAmmo", _, i)) > 0)
 | |
| 			ReplyToCommand(client, "Slot %d, Ammo %d", i, ammo);
 | |
| 	}
 | |
| 		
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| public Action:sm_listweapons(client, argc)
 | |
| {
 | |
| 	decl String:buffer[64];
 | |
| 	new target = client;
 | |
| 	if (argc >= 2)
 | |
| 	{
 | |
| 		GetCmdArg(2, buffer, sizeof(buffer));
 | |
| 		target = FindTarget(client, buffer, false, false);
 | |
| 		if (target <= 0)
 | |
| 		{
 | |
| 			ReplyToCommand(client, "Bad client");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 	}
 | |
| 	else if (client == 0)
 | |
| 	{
 | |
| 		ReplyToCommand(client, "Dillweed");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 	
 | |
| 	new PropType:proptype = PropType:-1;
 | |
| 	GetCmdArg(1, buffer, sizeof(buffer));
 | |
| 	if (!strcmp(buffer, "send"))
 | |
| 		proptype = Prop_Send;
 | |
| 	else if (!strcmp(buffer, "data"))
 | |
| 		proptype = Prop_Data;
 | |
| 	
 | |
| 	new weapon, String:classname[64];
 | |
| 	new max = GetEntPropArraySize(target, proptype, "m_hMyWeapons");
 | |
| 	for (new i = 0; i < max; i++)
 | |
| 	{
 | |
| 		if ((weapon = GetEntPropEnt(target, proptype, "m_hMyWeapons", i)) == -1)
 | |
| 			continue;
 | |
| 		
 | |
| 		GetEdictClassname(weapon, classname, sizeof(classname));
 | |
| 		ReplyToCommand(client, "Slot %d - \"%s\"", i, classname);
 | |
| 	}
 | |
| 		
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| public Action:sm_setammo(client, argc)
 | |
| {
 | |
| 	decl String:buffer[64];
 | |
| 	new target = client;
 | |
| 	if (argc >= 4)
 | |
| 	{
 | |
| 		GetCmdArg(4, buffer, sizeof(buffer));
 | |
| 		target = FindTarget(client, buffer, false, false);
 | |
| 		if (target <= 0)
 | |
| 		{
 | |
| 			ReplyToCommand(client, "Bad client");
 | |
| 			return Plugin_Handled;
 | |
| 		}
 | |
| 	}
 | |
| 	else if (client == 0)
 | |
| 	{
 | |
| 		ReplyToCommand(client, "Dillweed");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 	
 | |
| 	new PropType:proptype = PropType:-1;
 | |
| 	GetCmdArg(3, buffer, sizeof(buffer));
 | |
| 	if (!strcmp(buffer, "send"))
 | |
| 		proptype = Prop_Send;
 | |
| 	else if (!strcmp(buffer, "data"))
 | |
| 		proptype = Prop_Data;
 | |
| 	
 | |
| 	new max = GetEntPropArraySize(target, proptype, "m_iAmmo");
 | |
| 	
 | |
| 	GetCmdArg(1, buffer, sizeof(buffer));
 | |
| 	new ammotype = StringToInt(buffer);
 | |
| 	
 | |
| 	if (ammotype >= max)
 | |
| 	{
 | |
| 		ReplyToCommand(client, "Ammotype out of bounds");
 | |
| 		return Plugin_Handled;
 | |
| 	}
 | |
| 	
 | |
| 	GetCmdArg(2, buffer, sizeof(buffer));
 | |
| 	new amount = StringToInt(buffer);
 | |
| 	
 | |
| 	SetEntProp(target, proptype, "m_iAmmo", amount, _, ammotype);
 | |
| 	
 | |
| 	return Plugin_Handled;
 | |
| }
 | |
| 
 | |
| public Action:sm_teststrings(client, argc)
 | |
| {
 | |
| 	new gpe = CreateEntityByName("game_player_equip");
 | |
| 	DispatchKeyValue(gpe, "tf_weapon_rocketlauncher", "2");
 | |
| 	DispatchKeyValue(gpe, "tf_weapon_pistol",         "1");
 | |
| 	
 | |
| 	decl String:value[64];
 | |
| 	for (new i = 0; i < 2; i++)
 | |
| 	{
 | |
| 		GetEntPropString(gpe, Prop_Data, "m_weaponNames", value, sizeof(value), i);
 | |
| 		ReplyToCommand(client, "At %d, I see a \"%s\"", i, value);
 | |
| 	}
 | |
| 	
 | |
| 	AcceptEntityInput(gpe, "Kill");
 | |
| 	
 | |
| 	return Plugin_Handled;
 | |
| }
 |