Raised This Month: $44 Target: $400
 11% 

spec plugin


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
redxxx
Member
Join Date: Mar 2015
Old 10-26-2015 , 13:43   spec plugin
Reply With Quote #1

hi guys
i want simple !spec plugin
when an admin type !spec name
move nomintate player to spec.

ex: !spec redxxx

redxx moved to spec !
__________________

CSGO.MEVID.RO
redxxx is offline
Send a message via Yahoo to redxxx
supreeda
Senior Member
Join Date: Jul 2015
Old 10-28-2015 , 01:11   Re: spec plugin
Reply With Quote #2

dude pls use search first

this here you go : https://forums.alliedmods.net/showthread.php?p=1720530

sm_cfmswap <name>
sm_cfmspec <name>



if you want change command you can

Code:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#undef REQUIRE_PLUGIN
#include <updater>

#define	UPDATE_URL	"http://nano-trek.com/cstrike/plugins/sm_chooseforme/sm_chooseforme.txt"
#define PLUGIN_VERSION "1.5.3"
//Updates With 1.5.3: Updater fix

//Cvars
new Handle:sm_chooseforme_version	= INVALID_HANDLE;
new Handle:sm_chooseforme_teamsize	= INVALID_HANDLE;
new Handle:NotSpecPlayerMenu = INVALID_HANDLE;

//Global vars
new g_iClient;
new g_iSwaptospec = -1;

//Info
public Plugin:myinfo =
{
	name = "Choose for me",
	author = "sinsic",
	description = "Randomly distributes players to teams.",
	version = PLUGIN_VERSION,
	url = "http://www.sourcemod.net/"
};

public OnPluginStart()
{
	if (LibraryExists("updater"))
	{
		Updater_AddPlugin(UPDATE_URL);
    }
	LoadTranslations("sm_chooseforme.phrases");

	//Console Commands
	RegAdminCmd("sm_cfmrandomize", Command_cfmrandomize, ADMFLAG_KICK, "sm_cfmrandomize <player count|optional>, don't write team size to use the value at cfg.");
	RegAdminCmd("sm_cfmswap", Command_cfmswap, ADMFLAG_KICK, "sm_cfmswap <name>");
	RegAdminCmd("sm_cfmspec", Command_cfmspec, ADMFLAG_KICK, "sm_cfmspec <name>");

	//Convars
	sm_chooseforme_version = CreateConVar("sm_chooseforme_version", PLUGIN_VERSION, "Choose for me version.", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
	sm_chooseforme_teamsize = CreateConVar("sm_chooseforme_teamsize", "0", "Number of players to play. (0 means everybody on spec will be assaigned a team.");

	//Create  cfg file if one does not exist and execute it
	AutoExecConfig(true, "sm_chooseforme");

	//Keep track if somebody changed the plugin_version
	SetConVarString(sm_chooseforme_version, PLUGIN_VERSION);
	HookConVarChange(sm_chooseforme_version, cfm_versionchange);	
}

public OnLibraryAdded(const String:name[])
{
    if (StrEqual(name, "updater"))
    {
        Updater_AddPlugin(UPDATE_URL);
    }
}

//If somebody changed the plugin version set it back to right one, otherwise they might not realize updates
public cfm_versionchange(Handle:convar, const String:oldValue[], const String:newValue[])
	{
	SetConVarString(convar, PLUGIN_VERSION);
}

public Action:Command_cfmrandomize(client, args)
	{
	new String:arg[32];
	new iTeamSize = 0;
	
	//if there was no arg, set teamsize to the one in cfg, if it is smaller then 0 give error message
	if (args < 1)
		{
		iTeamSize = GetConVarInt(sm_chooseforme_teamsize);
	} else
		{
		GetCmdArg(1, arg, sizeof(arg));
		iTeamSize = StringToInt(arg);
		if (iTeamSize < 0 )
			{
			PrintToChat(client, "\x03[SM] \x01 %t", "Player count must be bigger than or equal to 0 (0 for everyone).");
			PrintToChat(client, "\x03[SM] \x01 %t", "sm_cfmrandomize <player count|optional>");
			PrintToChat(client, "\x03[SM] \x01 %t", "sm_cfmrandomize to use the value at sm_chooseforme.cfg.");
			iTeamSize = 0;
			return Plugin_Handled;
		}
	}

	//Determine client count and send everyone to spec
	new iPlayerCount = 0;
	for(new i = 1; i <= MaxClients; i++)
		{
		if (IsClientInGame(i) && (!IsFakeClient(i))) 
			{
			iPlayerCount++;
			ChangeClientTeam(i, 1);
		}
	}
	
	//Check if there are less players in game then the desired player count.
	if (iTeamSize > iPlayerCount)
		{
		PrintToChat(client, "\x03[SM] \x01 %t", "Choosen player count is bigger then online player count.");
		PrintToChat(client, "\x03[SM] \x01 %t", "Distributing everybody to teams.");
		iTeamSize = iPlayerCount;
	}

	//If the argument is 0 then distribute all players will be distributed
	if (iTeamSize == 0)
		{
		iTeamSize = iPlayerCount;
	}

	//Distribute players.
	new iClient2;
	new iCount = 1;
	new bool:bTeamSelect = false;
	while (iCount <= iTeamSize)
		{
		iClient2 = GetRandomInt(1, MaxClients);
		if (IsClientInGame(iClient2) && (!IsFakeClient(iClient2)))
			{
			if (GetClientTeam(iClient2) == 1)
				{
				if (bTeamSelect)
					{
					ChangeClientTeam(iClient2, 2);
					bTeamSelect = false;
					iCount++;
				} else
					{
					ChangeClientTeam(iClient2, 3);
					bTeamSelect = true;
					iCount++;
				}
			}
		} 
	}
	
	PrintToChatAll("\x03[SM] \x01 %t", "Teams are selected. GG, GL, HF.");

	return Plugin_Handled;
}

public Action:Command_cfmswap(client, args)
	{
	if (args < 1)
		{
		PrintToChat(client, "\x03[SM] \x01 %t", "Usage: sm_cfmswap <name>.");
		return Plugin_Handled;
	}
	
	new String:arg[32];
	GetCmdArg(1, arg, sizeof(arg));
	
	new String:sCheck[32];
	Format(sCheck, sizeof(sCheck), "%s", arg);
	
	//If the arg of sm_cfmswap was "playerlist" then build a playerlist.
	if (StrContains(sCheck, "playerlist") != -1)
		{
		NotSpecPlayerMenu = BuildNotSpecPlayerMenu();
		DisplayMenu(NotSpecPlayerMenu, client, MENU_TIME_FOREVER);
		g_iSwaptospec = 0;
		return Plugin_Handled;
	}
	
	//If the arg wasn't "playerlist" find target client
	g_iClient = FindTarget(client, arg);
	GetClientName(g_iClient, arg, sizeof(arg));
	
	//Get Targets team and swap if target is not spec
	new iTeamOfClient = GetClientTeam(g_iClient);
	if (iTeamOfClient == 1)
		{
		PrintToChat(client, "\x03[SM] \x01 %t", "Can't swap a spec.");	
		return Plugin_Handled;
	}
		
	if (iTeamOfClient == 2)
		{
		if (GetPlayerWeaponSlot( g_iClient, 4 ) != -1 )
			{
			CS_DropWeapon( g_iClient, GetPlayerWeaponSlot(g_iClient, 4 ), true, true );
		}
		CS_SwitchTeam(g_iClient, 3);
		PrintToChatAll("\x03[SM] \x04 %t", "has swapped to CT.", g_iClient);
	}

	if (iTeamOfClient == 3)
		{
		CS_SwitchTeam(g_iClient, 2);
		PrintToChatAll("\x03[SM] \x04 %t", "has swapped to T.", g_iClient);
	}
	
	//Check teams if no one left on a team then end the round
	CheckTeams();
	return Plugin_Handled;
}

public Action:Command_cfmspec(client, args)
	{
	if (args < 1)
		{
		PrintToChat(client, "\x03[SM] \x01 %t", "Usage: sm_cfmspec <name>.");
		return Plugin_Handled;
	}
	
	new String:arg[32];
	GetCmdArg(1, arg, sizeof(arg));
	
	new String:sCheck[32];
	Format(sCheck, sizeof(sCheck), "%s", arg);
	
	//If the argument of sm_cfmspec is "playerlist" build a player list
	if (StrContains(sCheck, "playerlist") != -1)
		{
		NotSpecPlayerMenu = BuildNotSpecPlayerMenu();
		DisplayMenu(NotSpecPlayerMenu, client, MENU_TIME_FOREVER);
		g_iSwaptospec = 1;
		return Plugin_Handled;
	}
	
	//If the argument isn't "playerlist" then find target client and if target is not spec switch to spec.
	g_iClient = FindTarget(client, arg);
	GetClientName(g_iClient, arg, sizeof(arg));

	new iTeamOfClient = GetClientTeam(g_iClient);

	if (iTeamOfClient != 1)
		{
		ChangeClientTeam(g_iClient, 1);
		PrintToChatAll("\x03[SM] \x04 %t", "has swapped to Spec." , g_iClient);
		return Plugin_Handled;
	}
	
	//Check teams if no one left on a team then end the round
	CheckTeams();
	return Plugin_Handled;
}

Handle:BuildNotSpecPlayerMenu()
	{
	new Handle:menu = CreateMenu(Menu_SelectPlayer);
	new String:sPlayerName[32];
	
	//Build a Player List Consisting Of Players Who Are Connected, not a bot and not spec
	for(new i = 1; i <= MaxClients; i++)
		{
		if (IsClientInGame(i) && (!IsFakeClient(i)) && (GetClientTeam(i) != 1)) 
			{
			GetClientName(i, sPlayerName, sizeof(sPlayerName));
			AddMenuItem(menu, sPlayerName, sPlayerName);
		}
	}
	new String:buffer[128];
	
	SetMenuTitle(menu, "%T", "Select Player:", LANG_SERVER);
	Format(buffer, sizeof(buffer), "%T", "Select Player:", LANG_SERVER);
	return menu;
}

public Menu_SelectPlayer(Handle:menu, MenuAction:action, param1, param2)
{
	if (action == MenuAction_Select)
	{
		//Find the target selected from player list
		new String:info[32];
		new bool:found = GetMenuItem(menu, param2, info, sizeof(info));
		PrintToConsole(param1, "Client found: %d", found);
		g_iClient = FindTarget(param1, info);
		GetClientName(g_iClient, info, sizeof(info));
		
		//Rerun the command with targets name
		if (g_iSwaptospec == 0)
		{
			ServerCommand("sm_cfmswap %s", info);
		} else
		{
			ServerCommand("sm_cfmspec %s", info);
		}
		
	}
}

public CheckTeams()
{
	//After plugins swaps someone to spec or opposite team
	//This function checks if there are any players left on the old team
	//If not, the opposite team wins
	new iCTNumber=0;
	new iTNumber=0;
	
	for(new i = 1; i <= MaxClients; i++)
		{
		if (IsClientInGame(i) && (GetClientTeam(i) == 2) && IsPlayerAlive(i)) 
			{
			iTNumber++;
		}
		if (IsClientInGame(i) && (GetClientTeam(i) == 3) && IsPlayerAlive(i)) 
			{
			iCTNumber++;
		}
	}
	
	if (iTNumber < 1)
		{
		CS_TerminateRound(2.0,CSRoundEnd_CTWin);
	}
	if (iCTNumber < 1)
		{
		CS_TerminateRound(2.0,CSRoundEnd_TerroristWin);
	}
}
Have fun dude !
supreeda is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 13:31.


Powered by vBulletin®
Copyright ©2000 - 2022, vBulletin Solutions, Inc.
Theme made by Freecode