plugins/playercommands/slay.sp
author David Anderson <danderson@mozilla.com>
Thu Aug 08 09:41:24 2013 -0700 (2013-08-08)
changeset 3977 fca2b54741ca
parent 2289 44045ead61cd
permissions -rw-r--r--
Refactor the JIT to use a newer, simpler macro assembler. (bug 5827, r=ann)
ferret99gt@1801
     1
/**
ferret99gt@1801
     2
 * vim: set ts=4 :
ferret99gt@1801
     3
 * =============================================================================
ferret99gt@1801
     4
 * SourceMod Basefuncommands Plugin
ferret99gt@1801
     5
 * Provides slay functionality
ferret99gt@1801
     6
 *
ds@1947
     7
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
ferret99gt@1801
     8
 * =============================================================================
ferret99gt@1801
     9
 *
ferret99gt@1801
    10
 * This program is free software; you can redistribute it and/or modify it under
ferret99gt@1801
    11
 * the terms of the GNU General Public License, version 3.0, as published by the
ferret99gt@1801
    12
 * Free Software Foundation.
ferret99gt@1801
    13
 * 
ferret99gt@1801
    14
 * This program is distributed in the hope that it will be useful, but WITHOUT
ferret99gt@1801
    15
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ferret99gt@1801
    16
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ferret99gt@1801
    17
 * details.
ferret99gt@1801
    18
 *
ferret99gt@1801
    19
 * You should have received a copy of the GNU General Public License along with
ferret99gt@1801
    20
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ferret99gt@1801
    21
 *
ferret99gt@1801
    22
 * As a special exception, AlliedModders LLC gives you permission to link the
ferret99gt@1801
    23
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ferret99gt@1801
    24
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ferret99gt@1801
    25
 * by the Valve Corporation.  You must obey the GNU General Public License in
ferret99gt@1801
    26
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ferret99gt@1801
    27
 * this exception to all derivative works.  AlliedModders LLC defines further
ferret99gt@1801
    28
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ferret99gt@1801
    29
 * or <http://www.sourcemod.net/license.php>.
ferret99gt@1801
    30
 *
ferret99gt@1801
    31
 * Version: $Id$
ferret99gt@1801
    32
 */
ferret99gt@1801
    33
ferret99gt@1801
    34
PerformSlay(client, target)
ferret99gt@1801
    35
{
ferret99gt@1801
    36
	LogAction(client, target, "\"%L\" slayed \"%L\"", client, target);
ferret99gt@1801
    37
	ForcePlayerSuicide(target);
ferret99gt@1801
    38
}
ferret99gt@1801
    39
ferret99gt@1801
    40
DisplaySlayMenu(client)
ferret99gt@1801
    41
{
ferret99gt@1801
    42
	new Handle:menu = CreateMenu(MenuHandler_Slay);
ferret99gt@1801
    43
	
ferret99gt@1801
    44
	decl String:title[100];
ferret99gt@1801
    45
	Format(title, sizeof(title), "%T:", "Slay player", client);
ferret99gt@1801
    46
	SetMenuTitle(menu, title);
ferret99gt@1801
    47
	SetMenuExitBackButton(menu, true);
ferret99gt@1801
    48
	
ferret99gt@1801
    49
	AddTargetsToMenu(menu, client, true, true);
ferret99gt@1801
    50
	
ferret99gt@1801
    51
	DisplayMenu(menu, client, MENU_TIME_FOREVER);
ferret99gt@1801
    52
}
ferret99gt@1801
    53
ferret99gt@1801
    54
public AdminMenu_Slay(Handle:topmenu, 
ferret99gt@1801
    55
					  TopMenuAction:action,
ferret99gt@1801
    56
					  TopMenuObject:object_id,
ferret99gt@1801
    57
					  param,
ferret99gt@1801
    58
					  String:buffer[],
ferret99gt@1801
    59
					  maxlength)
ferret99gt@1801
    60
{
ferret99gt@1801
    61
	if (action == TopMenuAction_DisplayOption)
ferret99gt@1801
    62
	{
ferret99gt@1801
    63
		Format(buffer, maxlength, "%T", "Slay player", param);
ferret99gt@1801
    64
	}
ferret99gt@1801
    65
	else if (action == TopMenuAction_SelectOption)
ferret99gt@1801
    66
	{
ferret99gt@1801
    67
		DisplaySlayMenu(param);
ferret99gt@1801
    68
	}
ferret99gt@1801
    69
}
ferret99gt@1801
    70
ferret99gt@1801
    71
public MenuHandler_Slay(Handle:menu, MenuAction:action, param1, param2)
ferret99gt@1801
    72
{
ferret99gt@1801
    73
	if (action == MenuAction_End)
ferret99gt@1801
    74
	{
ferret99gt@1801
    75
		CloseHandle(menu);
ferret99gt@1801
    76
	}
ferret99gt@1801
    77
	else if (action == MenuAction_Cancel)
ferret99gt@1801
    78
	{
ferret99gt@1801
    79
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
ferret99gt@1801
    80
		{
ferret99gt@1801
    81
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
ferret99gt@1801
    82
		}
ferret99gt@1801
    83
	}
ferret99gt@1801
    84
	else if (action == MenuAction_Select)
ferret99gt@1801
    85
	{
ferret99gt@1801
    86
		decl String:info[32];
ferret99gt@1801
    87
		new userid, target;
ferret99gt@1801
    88
		
ferret99gt@1801
    89
		GetMenuItem(menu, param2, info, sizeof(info));
ferret99gt@1801
    90
		userid = StringToInt(info);
ferret99gt@1801
    91
ferret99gt@1801
    92
		if ((target = GetClientOfUserId(userid)) == 0)
ferret99gt@1801
    93
		{
ferret99gt@1801
    94
			PrintToChat(param1, "[SM] %t", "Player no longer available");
ferret99gt@1801
    95
		}
ferret99gt@1801
    96
		else if (!CanUserTarget(param1, target))
ferret99gt@1801
    97
		{
ferret99gt@1801
    98
			PrintToChat(param1, "[SM] %t", "Unable to target");
ferret99gt@1801
    99
		}
ferret99gt@1801
   100
		else if (!IsPlayerAlive(target))
ferret99gt@1801
   101
		{
ferret99gt@1801
   102
			ReplyToCommand(param1, "[SM] %t", "Player has since died");
ferret99gt@1801
   103
		}
ferret99gt@1801
   104
		else
ferret99gt@1801
   105
		{
ferret99gt@1801
   106
			decl String:name[32];
ferret99gt@1801
   107
			GetClientName(target, name, sizeof(name));
ferret99gt@1801
   108
			PerformSlay(param1, target);
ferret99gt@1801
   109
			ShowActivity2(param1, "[SM] ", "%t", "Slayed target", "_s", name);
ferret99gt@1801
   110
		}
ferret99gt@1801
   111
		
ferret99gt@1801
   112
		DisplaySlayMenu(param1);
ferret99gt@1801
   113
	}
ferret99gt@1801
   114
}
ferret99gt@1801
   115
ferret99gt@1801
   116
public Action:Command_Slay(client, args)
ferret99gt@1801
   117
{
ferret99gt@1801
   118
	if (args < 1)
ferret99gt@1801
   119
	{
ferret99gt@1801
   120
		ReplyToCommand(client, "[SM] Usage: sm_slay <#userid|name>");
ferret99gt@1801
   121
		return Plugin_Handled;
ferret99gt@1801
   122
	}
ferret99gt@1801
   123
ferret99gt@1801
   124
	decl String:arg[65];
ferret99gt@1801
   125
	GetCmdArg(1, arg, sizeof(arg));
ferret99gt@1801
   126
ferret99gt@1801
   127
	decl String:target_name[MAX_TARGET_LENGTH];
ferret99gt@1801
   128
	decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
ferret99gt@1801
   129
	
ferret99gt@1801
   130
	if ((target_count = ProcessTargetString(
ferret99gt@1801
   131
			arg,
ferret99gt@1801
   132
			client,
ferret99gt@1801
   133
			target_list,
ferret99gt@1801
   134
			MAXPLAYERS,
ferret99gt@1801
   135
			COMMAND_FILTER_ALIVE,
ferret99gt@1801
   136
			target_name,
ferret99gt@1801
   137
			sizeof(target_name),
ferret99gt@1801
   138
			tn_is_ml)) <= 0)
ferret99gt@1801
   139
	{
ferret99gt@1801
   140
		ReplyToTargetError(client, target_count);
ferret99gt@1801
   141
		return Plugin_Handled;
ferret99gt@1801
   142
	}
ferret99gt@1801
   143
ferret99gt@1801
   144
	for (new i = 0; i < target_count; i++)
ferret99gt@1801
   145
	{
ferret99gt@1801
   146
		PerformSlay(client, target_list[i]);
ferret99gt@1801
   147
	}
ferret99gt@1801
   148
	
ferret99gt@1801
   149
	if (tn_is_ml)
ferret99gt@1801
   150
	{
ferret99gt@1801
   151
		ShowActivity2(client, "[SM] ", "%t", "Slayed target", target_name);
ferret99gt@1801
   152
	}
ferret99gt@1801
   153
	else
ferret99gt@1801
   154
	{
ferret99gt@1801
   155
		ShowActivity2(client, "[SM] ", "%t", "Slayed target", "_s", target_name);
ferret99gt@1801
   156
	}
ferret99gt@1801
   157
ferret99gt@1801
   158
	return Plugin_Handled;
ferret99gt@1801
   159
}