plugins/basecomm/gag.sp
author David Anderson <dvander@alliedmods.net>
Sun Oct 14 21:31:39 2007 +0000 (2007-10-14)
changeset 1558 95a3d8bf618d
parent 1536 fe2146e4975d
child 1592 ff10cfeaf5d2
permissions -rw-r--r--
all pdbs are now packaged with windows
pred@1536
     1
enum CommType
pred@1536
     2
{
pred@1536
     3
	CommType_Mute,
pred@1536
     4
	CommType_UnMute,
pred@1536
     5
	CommType_Gag,
pred@1536
     6
	CommType_UnGag,
pred@1536
     7
	CommType_Silence,
pred@1536
     8
	CommType_UnSilence
pred@1536
     9
pred@1536
    10
};
pred@1536
    11
pred@1536
    12
DisplayGagTypesMenu(client)
pred@1536
    13
{
pred@1536
    14
	new Handle:menu = CreateMenu(MenuHandler_GagTypes);
pred@1536
    15
	
pred@1536
    16
	decl String:title[100];
pred@1536
    17
	Format(title, sizeof(title), "%T:", "Choose Type", client);
pred@1536
    18
	SetMenuTitle(menu, title);
pred@1536
    19
	SetMenuExitBackButton(menu, true);
pred@1536
    20
	
pred@1536
    21
	new target = g_GagTarget[client];
pred@1536
    22
	
pred@1536
    23
	if (!g_Muted[target])
pred@1536
    24
	{
pred@1536
    25
		AddMenuItem(menu, "0", "Mute Player");
pred@1536
    26
	}
pred@1536
    27
	else
pred@1536
    28
	{
pred@1536
    29
		AddMenuItem(menu, "1", "UnMute Player");
pred@1536
    30
	}
pred@1536
    31
	
pred@1536
    32
	if (!g_Gagged[target])
pred@1536
    33
	{
pred@1536
    34
		AddMenuItem(menu, "2", "Gag Player");
pred@1536
    35
	}
pred@1536
    36
	else
pred@1536
    37
	{
pred@1536
    38
		AddMenuItem(menu, "3", "UnGag Player");
pred@1536
    39
	}
pred@1536
    40
	
pred@1536
    41
	if (!g_Muted[target] || !g_Gagged[target])
pred@1536
    42
	{
pred@1536
    43
		AddMenuItem(menu, "4", "Silence Player");
pred@1536
    44
	}
pred@1536
    45
	else
pred@1536
    46
	{
pred@1536
    47
		AddMenuItem(menu, "5", "UnSilence Player");
pred@1536
    48
	}
pred@1536
    49
		
pred@1536
    50
	DisplayMenu(menu, client, MENU_TIME_FOREVER);
pred@1536
    51
}
pred@1536
    52
pred@1536
    53
DisplayGagPlayerMenu(client)
pred@1536
    54
{
pred@1536
    55
	new Handle:menu = CreateMenu(MenuHandler_GagPlayer);
pred@1536
    56
	
pred@1536
    57
	decl String:title[100];
pred@1536
    58
	Format(title, sizeof(title), "%T:", "Gag/Mute Player", client);
pred@1536
    59
	SetMenuTitle(menu, title);
pred@1536
    60
	SetMenuExitBackButton(menu, true);
pred@1536
    61
	
pred@1536
    62
	AddTargetsToMenu(menu, client, false);
pred@1536
    63
	
pred@1536
    64
	DisplayMenu(menu, client, MENU_TIME_FOREVER);
pred@1536
    65
}
pred@1536
    66
pred@1536
    67
public AdminMenu_Gag(Handle:topmenu, 
pred@1536
    68
					  TopMenuAction:action,
pred@1536
    69
					  TopMenuObject:object_id,
pred@1536
    70
					  param,
pred@1536
    71
					  String:buffer[],
pred@1536
    72
					  maxlength)
pred@1536
    73
{
pred@1536
    74
	if (action == TopMenuAction_DisplayOption)
pred@1536
    75
	{
pred@1536
    76
		Format(buffer, maxlength, "%T", "Gag/Mute Player", param);
pred@1536
    77
	}
pred@1536
    78
	else if (action == TopMenuAction_SelectOption)
pred@1536
    79
	{
pred@1536
    80
		DisplayGagPlayerMenu(param);
pred@1536
    81
	}
pred@1536
    82
}
pred@1536
    83
pred@1536
    84
public MenuHandler_GagPlayer(Handle:menu, MenuAction:action, param1, param2)
pred@1536
    85
{
pred@1536
    86
	if (action == MenuAction_End)
pred@1536
    87
	{
pred@1536
    88
		CloseHandle(menu);
pred@1536
    89
	}
pred@1536
    90
	else if (action == MenuAction_Cancel)
pred@1536
    91
	{
pred@1536
    92
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
pred@1536
    93
		{
pred@1536
    94
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
pred@1536
    95
		}
pred@1536
    96
	}
pred@1536
    97
	else if (action == MenuAction_Select)
pred@1536
    98
	{
pred@1536
    99
		decl String:info[32];
pred@1536
   100
		new userid, target;
pred@1536
   101
		
pred@1536
   102
		GetMenuItem(menu, param2, info, sizeof(info));
pred@1536
   103
		userid = StringToInt(info);
pred@1536
   104
pred@1536
   105
		if ((target = GetClientOfUserId(userid)) == 0)
pred@1536
   106
		{
pred@1536
   107
			PrintToChat(param1, "[SM] %t", "Player no longer available");
pred@1536
   108
		}
pred@1536
   109
		else if (!CanUserTarget(param1, target))
pred@1536
   110
		{
pred@1536
   111
			PrintToChat(param1, "[SM] %t", "Unable to target");
pred@1536
   112
		}
pred@1536
   113
		else
pred@1536
   114
		{
pred@1536
   115
			g_GagTarget[param1] = GetClientOfUserId(userid);
pred@1536
   116
			DisplayGagTypesMenu(param1);
pred@1536
   117
		}
pred@1536
   118
	}
pred@1536
   119
}
pred@1536
   120
pred@1536
   121
public MenuHandler_GagTypes(Handle:menu, MenuAction:action, param1, param2)
pred@1536
   122
{
pred@1536
   123
	if (action == MenuAction_End)
pred@1536
   124
	{
pred@1536
   125
		CloseHandle(menu);
pred@1536
   126
	}
pred@1536
   127
	else if (action == MenuAction_Cancel)
pred@1536
   128
	{
pred@1536
   129
		if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
pred@1536
   130
		{
pred@1536
   131
			DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
pred@1536
   132
		}
pred@1536
   133
	}
pred@1536
   134
	else if (action == MenuAction_Select)
pred@1536
   135
	{
pred@1536
   136
		decl String:info[32];
pred@1536
   137
		new CommType:type;
pred@1536
   138
		
pred@1536
   139
		GetMenuItem(menu, param2, info, sizeof(info));
pred@1536
   140
		type = CommType:StringToInt(info);
pred@1536
   141
pred@1536
   142
		switch (type)
pred@1536
   143
		{
pred@1536
   144
			case CommType_Mute:	PerformMute(param1, g_GagTarget[param1]);
pred@1536
   145
			case CommType_UnMute:	PerformUnMute(param1, g_GagTarget[param1]);
pred@1536
   146
			case CommType_Gag:	PerformGag(param1, g_GagTarget[param1]);
pred@1536
   147
			case CommType_UnGag:	PerformUnGag(param1, g_GagTarget[param1]);
pred@1536
   148
			case CommType_Silence:	PerformSilence(param1, g_GagTarget[param1]);
pred@1536
   149
			case CommType_UnSilence:	PerformUnSilence(param1, g_GagTarget[param1]);
pred@1536
   150
		}
pred@1536
   151
	}
pred@1536
   152
}
pred@1536
   153
pred@1536
   154
PerformMute(client, target)
pred@1536
   155
{
pred@1536
   156
	if (g_Muted[target])
pred@1536
   157
	{
pred@1536
   158
		ReplyToCommand(client, "%t", "Already Muted");
pred@1536
   159
		return;		
pred@1536
   160
	}
pred@1536
   161
		
pred@1536
   162
	g_Muted[target] = true;
pred@1536
   163
	SetClientListeningFlags(target, VOICE_MUTED);
pred@1536
   164
	
pred@1536
   165
	decl String:name[64];
pred@1536
   166
	GetClientName(target, name, sizeof(name));
pred@1536
   167
pred@1536
   168
	ShowActivity(client, "%t", "Player Muted", name);
pred@1536
   169
	ReplyToCommand(client, "%t", "Player Muted", name);
pred@1536
   170
	LogAction(client, target, "\"%L\" muted \"%L\"", client, target);
pred@1536
   171
}
pred@1536
   172
pred@1536
   173
PerformUnMute(client, target)
pred@1536
   174
{
pred@1536
   175
	if (!g_Muted[target])
pred@1536
   176
	{
pred@1536
   177
		ReplyToCommand(client, "%t", "Player Not Muted");
pred@1536
   178
		return;		
pred@1536
   179
	}
pred@1536
   180
		
pred@1536
   181
	g_Muted[target] = false;
pred@1536
   182
	if (GetConVarInt(g_Cvar_Deadtalk) == 1 && !IsPlayerAlive(target))
pred@1536
   183
	{
pred@1536
   184
		SetClientListeningFlags(target, VOICE_LISTENALL);
pred@1536
   185
	}
pred@1536
   186
	else if (GetConVarInt(g_Cvar_Deadtalk) == 2 && !IsPlayerAlive(target))
pred@1536
   187
	{
pred@1536
   188
		SetClientListeningFlags(target, VOICE_TEAM);
pred@1536
   189
	}
pred@1536
   190
	else
pred@1536
   191
	{
pred@1536
   192
		SetClientListeningFlags(target, VOICE_NORMAL);
pred@1536
   193
	}
pred@1536
   194
	
pred@1536
   195
	decl String:name[64];
pred@1536
   196
	GetClientName(target, name, sizeof(name));
pred@1536
   197
pred@1536
   198
	ShowActivity(client, "%t", "Player Unmuted", name);
pred@1536
   199
	ReplyToCommand(client, "%t", "Player Unmuted", name);
pred@1536
   200
	LogAction(client, target, "\"%L\" unmuted \"%L\"", client, target);
pred@1536
   201
}
pred@1536
   202
pred@1536
   203
PerformGag(client, target)
pred@1536
   204
{
pred@1536
   205
	if (g_Gagged[target])
pred@1536
   206
	{
pred@1536
   207
		ReplyToCommand(client, "%t", "Already Gagged");
pred@1536
   208
		return;		
pred@1536
   209
	}
pred@1536
   210
		
pred@1536
   211
	g_Gagged[target] = true;
pred@1536
   212
	
pred@1536
   213
	decl String:name[64];
pred@1536
   214
	GetClientName(target, name, sizeof(name));
pred@1536
   215
pred@1536
   216
	ShowActivity(client, "%t", "Player Gagged", name);
pred@1536
   217
	ReplyToCommand(client, "%t", "Player Gagged", name);
pred@1536
   218
	LogAction(client, target, "\"%L\" gagged \"%L\"", client, target);
pred@1536
   219
}
pred@1536
   220
pred@1536
   221
PerformUnGag(client, target)
pred@1536
   222
{
pred@1536
   223
	if (!g_Gagged[target])
pred@1536
   224
	{
pred@1536
   225
		ReplyToCommand(client, "%t", "Player Not Gagged");
pred@1536
   226
		return;		
pred@1536
   227
	}
pred@1536
   228
		
pred@1536
   229
	g_Gagged[target] = false;
pred@1536
   230
	
pred@1536
   231
	decl String:name[64];
pred@1536
   232
	GetClientName(target, name, sizeof(name));
pred@1536
   233
pred@1536
   234
	ShowActivity(client, "%t", "Player Ungagged", name);
pred@1536
   235
	ReplyToCommand(client, "%t", "Player Ungagged", name);
pred@1536
   236
	LogAction(client, target, "\"%L\" ungagged \"%L\"", client, target);
pred@1536
   237
}
pred@1536
   238
pred@1536
   239
PerformSilence(client, target)
pred@1536
   240
{
pred@1536
   241
	if (g_Gagged[target] && g_Muted[target])
pred@1536
   242
	{
pred@1536
   243
		ReplyToCommand(client, "%t", "Already Silenced");
pred@1536
   244
		return;		
pred@1536
   245
	}
pred@1536
   246
pred@1536
   247
	decl String:name[64];
pred@1536
   248
	GetClientName(target, name, sizeof(name));
pred@1536
   249
	
pred@1536
   250
	if (!g_Gagged[target])
pred@1536
   251
	{
pred@1536
   252
		g_Gagged[target] = true;
pred@1536
   253
pred@1536
   254
		ShowActivity(client, "%t", "Player Gagged", name);
pred@1536
   255
		ReplyToCommand(client, "%t", "Player Gagged", name);
pred@1536
   256
		LogAction(client, target, "\"%L\" gagged \"%L\"", client, target);
pred@1536
   257
	}
pred@1536
   258
	
pred@1536
   259
	if (!g_Muted[target])
pred@1536
   260
	{
pred@1536
   261
		g_Muted[target] = true;
pred@1536
   262
		SetClientListeningFlags(target, VOICE_MUTED);
pred@1536
   263
	
pred@1536
   264
		ShowActivity(client, "%t", "Player Muted", name);
pred@1536
   265
		ReplyToCommand(client, "%t", "Player Muted", name);
pred@1536
   266
		LogAction(client, target, "\"%L\" muted \"%L\"", client, target);
pred@1536
   267
	}
pred@1536
   268
}
pred@1536
   269
pred@1536
   270
PerformUnSilence(client, target)
pred@1536
   271
{
pred@1536
   272
	if (!g_Gagged[target] && !g_Muted[target])
pred@1536
   273
	{
pred@1536
   274
		ReplyToCommand(client, "%t", "Player Not Silenced");
pred@1536
   275
		return;		
pred@1536
   276
	}
pred@1536
   277
	
pred@1536
   278
	decl String:name[64];
pred@1536
   279
	GetClientName(target, name, sizeof(name));
pred@1536
   280
	
pred@1536
   281
	if (g_Gagged[target])
pred@1536
   282
	{
pred@1536
   283
		g_Gagged[target] = false;
pred@1536
   284
		
pred@1536
   285
		ShowActivity(client, "%t", "Player Ungagged", name);
pred@1536
   286
		ReplyToCommand(client, "%t", "Player Ungagged", name);	
pred@1536
   287
		LogAction(client, target, "\"%L\" ungagged \"%L\"", client, target);
pred@1536
   288
	}
pred@1536
   289
	
pred@1536
   290
	if (g_Muted[target])
pred@1536
   291
	{
pred@1536
   292
		g_Muted[target] = false;
pred@1536
   293
		
pred@1536
   294
		if (GetConVarInt(g_Cvar_Deadtalk) == 1 && !IsPlayerAlive(target))
pred@1536
   295
		{
pred@1536
   296
			SetClientListeningFlags(target, VOICE_LISTENALL);
pred@1536
   297
		}
pred@1536
   298
		else if (GetConVarInt(g_Cvar_Deadtalk) == 2 && !IsPlayerAlive(target))
pred@1536
   299
		{
pred@1536
   300
			SetClientListeningFlags(target, VOICE_TEAM);
pred@1536
   301
		}
pred@1536
   302
		else
pred@1536
   303
		{
pred@1536
   304
			SetClientListeningFlags(target, VOICE_NORMAL);
pred@1536
   305
		}
pred@1536
   306
		
pred@1536
   307
		ShowActivity(client, "%t", "Player Unmuted", name);
pred@1536
   308
		ReplyToCommand(client, "%t", "Player Unmuted", name);
pred@1536
   309
		LogAction(client, target, "\"%L\" unmuted \"%L\"", client, target);		
pred@1536
   310
	}
pred@1536
   311
}
pred@1536
   312
pred@1536
   313
public Action:Command_Mute(client, args)
pred@1536
   314
{	
pred@1536
   315
	if (args < 1)
pred@1536
   316
	{
pred@1536
   317
		ReplyToCommand(client, "[SM] Usage: sm_mute <player>");
pred@1536
   318
		return Plugin_Handled;
pred@1536
   319
	}
pred@1536
   320
	
pred@1536
   321
	decl String:arg[64];
pred@1536
   322
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   323
	
pred@1536
   324
	new target = FindTarget(client, arg);
pred@1536
   325
	if (target == -1)
pred@1536
   326
	{
pred@1536
   327
		return Plugin_Handled;
pred@1536
   328
	}
pred@1536
   329
pred@1536
   330
	PerformMute(client, target);
pred@1536
   331
	
pred@1536
   332
	return Plugin_Handled;	
pred@1536
   333
}
pred@1536
   334
pred@1536
   335
public Action:Command_Gag(client, args)
pred@1536
   336
{	
pred@1536
   337
	if (args < 1)
pred@1536
   338
	{
pred@1536
   339
		ReplyToCommand(client, "[SM] Usage: sm_gag <player>");
pred@1536
   340
		return Plugin_Handled;
pred@1536
   341
	}
pred@1536
   342
	
pred@1536
   343
	decl String:arg[64];
pred@1536
   344
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   345
	
pred@1536
   346
	new target = FindTarget(client, arg);
pred@1536
   347
	if (target == -1)
pred@1536
   348
	{
pred@1536
   349
		return Plugin_Handled;
pred@1536
   350
	}
pred@1536
   351
pred@1536
   352
	PerformGag(client, target);
pred@1536
   353
	
pred@1536
   354
	return Plugin_Handled;	
pred@1536
   355
}
pred@1536
   356
pred@1536
   357
public Action:Command_Silence(client, args)
pred@1536
   358
{	
pred@1536
   359
	if (args < 1)
pred@1536
   360
	{
pred@1536
   361
		ReplyToCommand(client, "[SM] Usage: sm_silence <player>");
pred@1536
   362
		return Plugin_Handled;
pred@1536
   363
	}
pred@1536
   364
	
pred@1536
   365
	decl String:arg[64];
pred@1536
   366
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   367
	
pred@1536
   368
	new target = FindTarget(client, arg);
pred@1536
   369
	if (target == -1)
pred@1536
   370
	{
pred@1536
   371
		return Plugin_Handled;
pred@1536
   372
	}
pred@1536
   373
pred@1536
   374
	PerformSilence(client, target);
pred@1536
   375
	
pred@1536
   376
	return Plugin_Handled;	
pred@1536
   377
}
pred@1536
   378
pred@1536
   379
public Action:Command_Unmute(client, args)
pred@1536
   380
{	
pred@1536
   381
	if (args < 1)
pred@1536
   382
	{
pred@1536
   383
		ReplyToCommand(client, "[SM] Usage: sm_unmute <player>");
pred@1536
   384
		return Plugin_Handled;
pred@1536
   385
	}
pred@1536
   386
	
pred@1536
   387
	decl String:arg[64];
pred@1536
   388
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   389
	
pred@1536
   390
	new target = FindTarget(client, arg);
pred@1536
   391
	if (target == -1)
pred@1536
   392
	{
pred@1536
   393
		return Plugin_Handled;
pred@1536
   394
	}
pred@1536
   395
pred@1536
   396
	PerformUnMute(client, target);
pred@1536
   397
	
pred@1536
   398
	return Plugin_Handled;	
pred@1536
   399
}
pred@1536
   400
pred@1536
   401
public Action:Command_Ungag(client, args)
pred@1536
   402
{	
pred@1536
   403
	if (args < 1)
pred@1536
   404
	{
pred@1536
   405
		ReplyToCommand(client, "[SM] Usage: sm_ungag <player>");
pred@1536
   406
		return Plugin_Handled;
pred@1536
   407
	}
pred@1536
   408
	
pred@1536
   409
	decl String:arg[64];
pred@1536
   410
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   411
	
pred@1536
   412
	new target = FindTarget(client, arg);
pred@1536
   413
	if (target == -1)
pred@1536
   414
	{
pred@1536
   415
		return Plugin_Handled;
pred@1536
   416
	}
pred@1536
   417
pred@1536
   418
	PerformUnGag(client, target);
pred@1536
   419
	
pred@1536
   420
	return Plugin_Handled;	
pred@1536
   421
}
pred@1536
   422
pred@1536
   423
public Action:Command_Unsilence(client, args)
pred@1536
   424
{	
pred@1536
   425
	if (args < 1)
pred@1536
   426
	{
pred@1536
   427
		ReplyToCommand(client, "[SM] Usage: sm_unsilence <player>");
pred@1536
   428
		return Plugin_Handled;
pred@1536
   429
	}
pred@1536
   430
	
pred@1536
   431
	decl String:arg[64];
pred@1536
   432
	GetCmdArg(1, arg, sizeof(arg));
pred@1536
   433
	
pred@1536
   434
	new target = FindTarget(client, arg);
pred@1536
   435
	if (target == -1)
pred@1536
   436
	{
pred@1536
   437
		return Plugin_Handled;
pred@1536
   438
	}
pred@1536
   439
pred@1536
   440
	PerformUnSilence(client, target);
pred@1536
   441
	
pred@1536
   442
	return Plugin_Handled;	
pred@1536
   443
}