plugins/basefuncommands/slap.sp
author David Anderson <dvander@alliedmods.net>
Sun Oct 21 23:50:37 2007 +0000 (2007-10-21)
changeset 1624 709b1f973c05
parent 1592 ff10cfeaf5d2
child 1625 8e4a6a8c3256
permissions -rw-r--r--
- updated basecommands and basefuncommands to use ProcessTargetString() and ShowActivity2()
- moved a bunch of translation phrases around
- ShowActivity2() no longer prints to console
- fixed a memory corruption bug in the translation parser
pred@1536
     1
PerformSlap(client, target, damage)
pred@1536
     2
{
pred@1536
     3
	LogAction(client, target, "\"%L\" slapped \"%L\" (damage \"%d\")", client, target, damage);
pred@1536
     4
	SlapPlayer(target, damage, true);
pred@1536
     5
}
pred@1536
     6
pred@1536
     7
DisplaySlapDamageMenu(client)
pred@1536
     8
{
pred@1536
     9
	new Handle:menu = CreateMenu(MenuHandler_SlapDamage);
pred@1536
    10
	
pred@1536
    11
	decl String:title[100];
dvander@1592
    12
	Format(title, sizeof(title), "%T:", "Slap damage", client);
pred@1536
    13
	SetMenuTitle(menu, title);
pred@1536
    14
	SetMenuExitBackButton(menu, true);
pred@1536
    15
	
pred@1536
    16
	AddMenuItem(menu, "0", "0");
pred@1536
    17
	AddMenuItem(menu, "1", "1");
pred@1536
    18
	AddMenuItem(menu, "5", "5");
pred@1536
    19
	AddMenuItem(menu, "10", "10");
pred@1536
    20
	AddMenuItem(menu, "20", "20");
pred@1536
    21
	AddMenuItem(menu, "50", "50");
pred@1536
    22
	AddMenuItem(menu, "99", "99");
pred@1536
    23
	
pred@1536
    24
	DisplayMenu(menu, client, MENU_TIME_FOREVER);
pred@1536
    25
}
pred@1536
    26
pred@1536
    27
DisplaySlapTargetMenu(client)
pred@1536
    28
{
pred@1536
    29
	new Handle:menu = CreateMenu(MenuHandler_Slap);
pred@1536
    30
	
pred@1536
    31
	decl String:title[100];
dvander@1592
    32
	Format(title, sizeof(title), "%T:", "Slap player", client);
pred@1536
    33
	SetMenuTitle(menu, title);
pred@1536
    34
	SetMenuExitBackButton(menu, true);
pred@1536
    35
	
pred@1536
    36
	AddTargetsToMenu(menu, client, false);
pred@1536
    37
	
pred@1536
    38
	DisplayMenu(menu, client, MENU_TIME_FOREVER);
pred@1536
    39
}
pred@1536
    40
pred@1536
    41
public AdminMenu_Slap(Handle:topmenu, 
pred@1536
    42
					  TopMenuAction:action,
pred@1536
    43
					  TopMenuObject:object_id,
pred@1536
    44
					  param,
pred@1536
    45
					  String:buffer[],
pred@1536
    46
					  maxlength)
pred@1536
    47
{
pred@1536
    48
	if (action == TopMenuAction_DisplayOption)
pred@1536
    49
	{
dvander@1592
    50
		Format(buffer, maxlength, "%T", "Slap player", param);
pred@1536
    51
	}
pred@1536
    52
	else if (action == TopMenuAction_SelectOption)
pred@1536
    53
	{
pred@1536
    54
		DisplaySlapDamageMenu(param);
pred@1536
    55
	}
pred@1536
    56
}
pred@1536
    57
pred@1536
    58
public MenuHandler_SlapDamage(Handle:menu, MenuAction:action, param1, param2)
pred@1536
    59
{
pred@1536
    60
	if (action == MenuAction_End)
pred@1536
    61
	{
pred@1536
    62
		CloseHandle(menu);
pred@1536
    63
	}
pred@1536
    64
	else if (action == MenuAction_Cancel)
pred@1536
    65
	{
pred@1536
    66
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
pred@1536
    67
		{
pred@1536
    68
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
pred@1536
    69
		}
pred@1536
    70
	}
pred@1536
    71
	else if (action == MenuAction_Select)
pred@1536
    72
	{
pred@1536
    73
		decl String:info[32];
pred@1536
    74
		
pred@1536
    75
		GetMenuItem(menu, param2, info, sizeof(info));
pred@1536
    76
		g_SlapDamage[param1] = StringToInt(info);
pred@1536
    77
		
pred@1536
    78
		DisplaySlapTargetMenu(param1);
pred@1536
    79
	}
pred@1536
    80
}
pred@1536
    81
pred@1536
    82
public MenuHandler_Slap(Handle:menu, MenuAction:action, param1, param2)
pred@1536
    83
{
pred@1536
    84
	if (action == MenuAction_End)
pred@1536
    85
	{
pred@1536
    86
		CloseHandle(menu);
pred@1536
    87
	}
pred@1536
    88
	else if (action == MenuAction_Cancel)
pred@1536
    89
	{
pred@1536
    90
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
pred@1536
    91
		{
pred@1536
    92
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
pred@1536
    93
		}
pred@1536
    94
	}
pred@1536
    95
	else if (action == MenuAction_Select)
pred@1536
    96
	{
pred@1536
    97
		decl String:info[32];
pred@1536
    98
		new userid, target;
pred@1536
    99
		
pred@1536
   100
		GetMenuItem(menu, param2, info, sizeof(info));
pred@1536
   101
		userid = StringToInt(info);
pred@1536
   102
pred@1536
   103
		if ((target = GetClientOfUserId(userid)) == 0)
pred@1536
   104
		{
pred@1536
   105
			PrintToChat(param1, "[SM] %t", "Player no longer available");
pred@1536
   106
		}
pred@1536
   107
		else if (!CanUserTarget(param1, target))
pred@1536
   108
		{
pred@1536
   109
			PrintToChat(param1, "[SM] %t", "Unable to target");
pred@1536
   110
		}
dvander@1624
   111
		else if (!IsPlayerAlive(target))
dvander@1624
   112
		{
dvander@1624
   113
			ReplyToCommand(param1, "[SM] %t", "Player has since died");
dvander@1624
   114
		}	
pred@1536
   115
		else
pred@1536
   116
		{
dvander@1624
   117
			decl String:name[32];
dvander@1624
   118
			GetClientName(target, name, sizeof(name));
pred@1536
   119
			PerformSlap(param1, target, g_SlapDamage[param1]);
dvander@1624
   120
			ShowActivity2(param1, "[SM] ", "%t", "Slapped target", "_s", name);
pred@1536
   121
		}
pred@1536
   122
		
dvander@1624
   123
		DisplaySlapTargetMenu(param1);
pred@1536
   124
	}
pred@1536
   125
}
pred@1536
   126
pred@1536
   127
public Action:Command_Slap(client, args)
pred@1536
   128
{
pred@1536
   129
	if (args < 1)
pred@1536
   130
	{
pred@1536
   131
		ReplyToCommand(client, "[SM] Usage: sm_slap <#userid|name> [damage]");
pred@1536
   132
		return Plugin_Handled;
pred@1536
   133
	}
pred@1536
   134
pred@1536
   135
	decl String:arg[65];
pred@1536
   136
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   137
pred@1536
   138
	new damage = 0;
pred@1536
   139
	if (args > 1)
pred@1536
   140
	{
pred@1536
   141
		decl String:arg2[20];
pred@1536
   142
		GetCmdArg(2, arg2, sizeof(arg2));
pred@1536
   143
		if (StringToIntEx(arg2, damage) == 0)
pred@1536
   144
		{
pred@1536
   145
			ReplyToCommand(client, "[SM] %t", "Invalid Amount");
pred@1536
   146
			return Plugin_Handled;
pred@1536
   147
		}
pred@1536
   148
	}
dvander@1624
   149
	
dvander@1624
   150
	decl String:target_name[MAX_TARGET_LENGTH];
dvander@1624
   151
	decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
dvander@1624
   152
	
dvander@1624
   153
	if ((target_count = ProcessTargetString(
dvander@1624
   154
			arg,
dvander@1624
   155
			client,
dvander@1624
   156
			target_list,
dvander@1624
   157
			MAXPLAYERS,
dvander@1624
   158
			COMMAND_FILTER_NO_BOTS,
dvander@1624
   159
			target_name,
dvander@1624
   160
			sizeof(target_name),
dvander@1624
   161
			tn_is_ml)) <= 0)
dvander@1624
   162
	{
dvander@1624
   163
		ReplyToTargetError(client, target_count);
dvander@1624
   164
		return Plugin_Handled;
dvander@1624
   165
	}
dvander@1624
   166
	
dvander@1624
   167
	for (new i = 0; i < target_count; i++)
dvander@1624
   168
	{
dvander@1624
   169
		PerformSlap(client, target_list[i], damage);
dvander@1624
   170
	}
pred@1536
   171
dvander@1624
   172
	if (tn_is_ml)
dvander@1624
   173
	{
dvander@1624
   174
		ShowActivity2(client, "[SM] ", "%t", "Slapped target", target_name);
dvander@1624
   175
	}
dvander@1624
   176
	else
dvander@1624
   177
	{
dvander@1624
   178
		ShowActivity2(client, "[SM] ", "%t", "Slapped target", "_s", target_name);
dvander@1624
   179
	}
pred@1536
   180
pred@1536
   181
	return Plugin_Handled;
dvander@1624
   182
}