plugins/basefuncommands.sp
author Michael McKoy <ferret99gt@gmail.com>
Wed Dec 19 01:16:15 2007 +0000 (2007-12-19)
changeset 1801 06ff8ce94b2b
parent 1791 38e83ea09a24
child 1821 214e212a8c04
permissions -rw-r--r--
Large additions to basefuncommands. Moved slay and slap to a new plugin.
ferret99gt@1194
     1
/**
ds@1330
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
ds@1330
     4
 * SourceMod Basic Fun Commands Plugin
ferret99gt@1194
     5
 * Implements basic punishment commands.
ds@1330
     6
 *
ds@1330
     7
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
ds@1330
     8
 * =============================================================================
ferret99gt@1194
     9
 *
ds@1330
    10
 * This program is free software; you can redistribute it and/or modify it under
ds@1330
    11
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1330
    12
 * Free Software Foundation.
ds@1330
    13
 * 
ds@1330
    14
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1330
    15
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1330
    16
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1330
    17
 * details.
ferret99gt@1194
    18
 *
ds@1330
    19
 * You should have received a copy of the GNU General Public License along with
ds@1330
    20
 * this program.  If not, see <http://www.gnu.org/licenses/>.
teame06@1212
    21
 *
ds@1330
    22
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1330
    23
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1330
    24
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1330
    25
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1330
    26
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1330
    27
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1330
    28
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1330
    29
 * or <http://www.sourcemod.net/license.php>.
ferret99gt@1194
    30
 *
ferret99gt@1194
    31
 * Version: $Id$
ferret99gt@1194
    32
 */
ferret99gt@1194
    33
ferret99gt@1194
    34
#pragma semicolon 1
ferret99gt@1194
    35
ferret99gt@1194
    36
#include <sourcemod>
ferret99gt@1194
    37
#include <sdktools>
pred@1536
    38
#undef REQUIRE_PLUGIN
pred@1536
    39
#include <adminmenu>
ferret99gt@1194
    40
teame06@1212
    41
public Plugin:myinfo =
ferret99gt@1194
    42
{
ferret99gt@1194
    43
	name = "Basic Fun Commands",
ferret99gt@1194
    44
	author = "AlliedModders LLC",
ferret99gt@1194
    45
	description = "Basic Fun Commands",
ferret99gt@1194
    46
	version = SOURCEMOD_VERSION,
ferret99gt@1194
    47
	url = "http://www.sourcemod.net/"
ferret99gt@1194
    48
};
ferret99gt@1194
    49
pred@1536
    50
new Handle:hTopMenu = INVALID_HANDLE;
pred@1536
    51
ferret99gt@1801
    52
// Sounds
ferret99gt@1801
    53
#define SOUND_BLIP		"buttons/blip1.wav"
ferret99gt@1801
    54
#define SOUND_BEEP		"buttons/button17.wav"
ferret99gt@1801
    55
#define SOUND_FINAL		"weapons/cguard/charging.wav"
ferret99gt@1801
    56
#define SOUND_BOOM		"weapons/explode3.wav"
ferret99gt@1801
    57
#define SOUND_FREEZE		"physics/glass/glass_impact_bullet4.wav"
ferret99gt@1801
    58
ferret99gt@1801
    59
// Following are model indexes for temp entities
ferret99gt@1801
    60
new g_BeamSprite;
ferret99gt@1801
    61
new g_BeamSprite2;
ferret99gt@1801
    62
new g_HaloSprite;
ferret99gt@1801
    63
new g_GlowSprite;
ferret99gt@1801
    64
new g_ExplosionSprite;
pred@1536
    65
ferret99gt@1801
    66
// Basic color arrays for temp entities
ferret99gt@1801
    67
new redColor[4] = {255, 75, 75, 255};
ferret99gt@1801
    68
new orangeColor[4] = {255, 128, 0, 255};
ferret99gt@1801
    69
new greenColor[4] = {75, 255, 75, 255};
ferret99gt@1801
    70
new blueColor[4] = {75, 75, 255, 255};
ferret99gt@1801
    71
new whiteColor[4] = {255, 255, 255, 255};
ferret99gt@1801
    72
new greyColor[4] = {128, 128, 128, 255};
ferret99gt@1801
    73
ferret99gt@1801
    74
// Used for some trace rays.
ferret99gt@1801
    75
/*
ferret99gt@1801
    76
new g_FilteredEntity = -1;
ferret99gt@1801
    77
public bool:TR_Filter_Client(ent, contentMask)
ferret99gt@1801
    78
{
ferret99gt@1801
    79
   return (ent == g_FilteredEntity) ? false : true;
ferret99gt@1801
    80
}
ferret99gt@1801
    81
*/
ferret99gt@1801
    82
ferret99gt@1801
    83
// Include various commands and supporting functions
ferret99gt@1785
    84
#include "basefuncommands/beacon.sp"
ferret99gt@1801
    85
#include "basefuncommands/timebomb.sp"
ferret99gt@1801
    86
#include "basefuncommands/fire.sp"
ferret99gt@1801
    87
#include "basefuncommands/ice.sp"
pred@1536
    88
ferret99gt@1194
    89
public OnPluginStart()
ferret99gt@1194
    90
{
ferret99gt@1194
    91
	LoadTranslations("common.phrases");
dvander@1624
    92
	LoadTranslations("basefuncommands.phrases");
ferret99gt@1194
    93
teame06@1214
    94
	RegAdminCmd("sm_play", Command_Play, ADMFLAG_GENERIC, "sm_play <#userid|name> <filename>");
ferret99gt@1801
    95
ferret99gt@1801
    96
	HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy);	
ferret99gt@1801
    97
ferret99gt@1801
    98
	SetupBeacon();		// sm_beacon
ferret99gt@1801
    99
	SetupTimeBomb();	// sm_timebomb
ferret99gt@1801
   100
	SetupFire();		// sm_burn and sm_firebomb
ferret99gt@1801
   101
	SetupIce();			// sm_freeze and sm_freezebomb
ferret99gt@1801
   102
	
ferret99gt@1801
   103
	AutoExecConfig(true, "funcommands");
pred@1536
   104
	
pred@1536
   105
	/* Account for late loading */
pred@1536
   106
	new Handle:topmenu;
pred@1536
   107
	if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE))
pred@1536
   108
	{
pred@1536
   109
		OnAdminMenuReady(topmenu);
pred@1536
   110
	}
pred@1536
   111
}
pred@1536
   112
dvander@1788
   113
public OnMapStart()
dvander@1788
   114
{
ferret99gt@1801
   115
	PrecacheSound(SOUND_BLIP, true);
ferret99gt@1801
   116
	PrecacheSound(SOUND_BEEP, true);
ferret99gt@1801
   117
	PrecacheSound(SOUND_FINAL, true);
ferret99gt@1801
   118
	PrecacheSound(SOUND_BOOM, true);
ferret99gt@1801
   119
	PrecacheSound(SOUND_FREEZE, true);
ferret99gt@1801
   120
ferret99gt@1801
   121
	g_BeamSprite = PrecacheModel("materials/sprites/laser.vmt");
ferret99gt@1801
   122
	g_BeamSprite2 = PrecacheModel("sprites/bluelight1.vmt");
ferret99gt@1801
   123
	g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt");	
ferret99gt@1801
   124
	g_GlowSprite = PrecacheModel("sprites/blueglow2.vmt");
ferret99gt@1801
   125
	g_ExplosionSprite = PrecacheModel("sprites/sprite_fire01.vmt");
dvander@1788
   126
}
dvander@1788
   127
ferret99gt@1785
   128
public OnMapEnd()
ferret99gt@1785
   129
{
ferret99gt@1785
   130
	KillAllBeacons();
ferret99gt@1801
   131
	KillAllTimeBombs();
ferret99gt@1801
   132
	KillAllFireBombs();
ferret99gt@1801
   133
	KillAllFreezes();
ferret99gt@1801
   134
}
ferret99gt@1801
   135
ferret99gt@1801
   136
public Action:Event_RoundEnd(Handle:event,const String:name[],bool:dontBroadcast)
ferret99gt@1801
   137
{
ferret99gt@1801
   138
	KillAllBeacons();
ferret99gt@1801
   139
	KillAllTimeBombs();
ferret99gt@1801
   140
	KillAllFireBombs();
ferret99gt@1801
   141
	KillAllFreezes();
ferret99gt@1801
   142
	
ferret99gt@1801
   143
	return Plugin_Handled;
ferret99gt@1785
   144
}
ferret99gt@1785
   145
pred@1536
   146
public OnAdminMenuReady(Handle:topmenu)
pred@1536
   147
{
pred@1536
   148
	/* Block us from being called twice */
pred@1536
   149
	if (topmenu == hTopMenu)
pred@1536
   150
	{
pred@1536
   151
		return;
pred@1536
   152
	}
pred@1536
   153
	
pred@1536
   154
	/* Save the Handle */
pred@1536
   155
	hTopMenu = topmenu;
pred@1536
   156
	
pred@1536
   157
	/* Find the "Player Commands" category */
pred@1536
   158
	new TopMenuObject:player_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_PLAYERCOMMANDS);
pred@1536
   159
pred@1536
   160
	if (player_commands != INVALID_TOPMENUOBJECT)
pred@1536
   161
	{
pred@1536
   162
		AddToTopMenu(hTopMenu,
ferret99gt@1801
   163
			"sm_beacon",
pred@1536
   164
			TopMenuObject_Item,
ferret99gt@1801
   165
			AdminMenu_Beacon,
pred@1536
   166
			player_commands,
ferret99gt@1801
   167
			"sm_beacon",
pred@1536
   168
			ADMFLAG_SLAY);
ferret99gt@1801
   169
		
pred@1536
   170
		AddToTopMenu(hTopMenu,
dvander@1600
   171
			"sm_burn",
pred@1536
   172
			TopMenuObject_Item,
pred@1536
   173
			AdminMenu_Burn,
pred@1536
   174
			player_commands,
pred@1536
   175
			"sm_burn",
pred@1536
   176
			ADMFLAG_SLAY);
pred@1536
   177
			
pred@1536
   178
		AddToTopMenu(hTopMenu,
ferret99gt@1801
   179
			"sm_freeze",
pred@1536
   180
			TopMenuObject_Item,
ferret99gt@1801
   181
			AdminMenu_Freeze,
pred@1536
   182
			player_commands,
ferret99gt@1801
   183
			"sm_freeze",
ferret99gt@1801
   184
			ADMFLAG_SLAY);
ferret99gt@1801
   185
ferret99gt@1801
   186
		AddToTopMenu(hTopMenu,
ferret99gt@1801
   187
			"sm_timebomb",
ferret99gt@1801
   188
			TopMenuObject_Item,
ferret99gt@1801
   189
			AdminMenu_TimeBomb,
ferret99gt@1801
   190
			player_commands,
ferret99gt@1801
   191
			"sm_timebomb",
pred@1536
   192
			ADMFLAG_SLAY);	
ferret99gt@1785
   193
			
ferret99gt@1785
   194
		AddToTopMenu(hTopMenu,
ferret99gt@1801
   195
			"sm_firebomb",
ferret99gt@1785
   196
			TopMenuObject_Item,
ferret99gt@1801
   197
			AdminMenu_FireBomb,
ferret99gt@1785
   198
			player_commands,
ferret99gt@1801
   199
			"sm_firebomb",
ferret99gt@1801
   200
			ADMFLAG_SLAY);
ferret99gt@1801
   201
			
ferret99gt@1801
   202
		AddToTopMenu(hTopMenu,
ferret99gt@1801
   203
			"sm_freezebomb",
ferret99gt@1801
   204
			TopMenuObject_Item,
ferret99gt@1801
   205
			AdminMenu_FreezeBomb,
ferret99gt@1801
   206
			player_commands,
ferret99gt@1801
   207
			"sm_freezebomb",
ferret99gt@1801
   208
			ADMFLAG_SLAY);
pred@1536
   209
	}
teame06@1212
   210
}
teame06@1212
   211
teame06@1212
   212
public Action:Command_Play(client, args)
teame06@1212
   213
{
teame06@1241
   214
	if (args < 2)
teame06@1212
   215
	{
teame06@1214
   216
		ReplyToCommand(client, "[SM] Usage: sm_play <#userid|name> <filename>");
teame06@1212
   217
	}
teame06@1212
   218
teame06@1214
   219
	new String:Arguments[PLATFORM_MAX_PATH + 65];
teame06@1214
   220
	GetCmdArgString(Arguments, sizeof(Arguments));
teame06@1214
   221
teame06@1214
   222
 	decl String:Arg[65];
teame06@1214
   223
	new len = BreakString(Arguments, Arg, sizeof(Arg));
teame06@1212
   224
teame06@1214
   225
	/* Make sure it does not go out of bound by doing "sm_play user  "*/
teame06@1241
   226
	if (len == -1)
teame06@1214
   227
	{
teame06@1214
   228
		ReplyToCommand(client, "[SM] Usage: sm_play <#userid|name> <filename>");
teame06@1214
   229
		return Plugin_Handled;
teame06@1214
   230
	}
teame06@1212
   231
teame06@1214
   232
	/* Incase they put quotes and white spaces after the quotes */
teame06@1241
   233
	if (Arguments[len] == '"')
teame06@1214
   234
	{
teame06@1214
   235
		len++;
teame06@1214
   236
		new FileLen = TrimString(Arguments[len]) + len;
teame06@1214
   237
teame06@1241
   238
		if (Arguments[FileLen - 1] == '"')
teame06@1214
   239
		{
teame06@1214
   240
			Arguments[FileLen - 1] = '\0';
teame06@1214
   241
		}
teame06@1214
   242
	}
dvander@1624
   243
	
dvander@1624
   244
	decl String:target_name[MAX_TARGET_LENGTH];
dvander@1624
   245
	decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
dvander@1624
   246
	
dvander@1624
   247
	if ((target_count = ProcessTargetString(
dvander@1624
   248
			Arg,
dvander@1624
   249
			client,
dvander@1624
   250
			target_list,
dvander@1624
   251
			MAXPLAYERS,
dvander@1624
   252
			COMMAND_FILTER_NO_BOTS,
dvander@1624
   253
			target_name,
dvander@1624
   254
			sizeof(target_name),
dvander@1624
   255
			tn_is_ml)) <= 0)
dvander@1624
   256
	{
dvander@1624
   257
		ReplyToTargetError(client, target_count);
dvander@1624
   258
		return Plugin_Handled;
dvander@1624
   259
	}
dvander@1624
   260
	
dvander@1624
   261
	for (new i = 0; i < target_count; i++)
dvander@1624
   262
	{
dvander@1624
   263
		ClientCommand(target_list[i], "playgamesound \"%s\"", Arguments[len]);
ferret99gt@1801
   264
		LogAction(client, target_list[i], "\"%L\" played sound on \"%L\" (file \"%s\")", client, target_list[i], Arguments[len]);
dvander@1624
   265
	}
dvander@1624
   266
	
dvander@1624
   267
	if (tn_is_ml)
dvander@1624
   268
	{
dvander@1624
   269
		ShowActivity2(client, "[SM] ", "%t", "Played sound to target", target_name);
dvander@1624
   270
	}
dvander@1624
   271
	else
dvander@1624
   272
	{
dvander@1624
   273
		ShowActivity2(client, "[SM] ", "%t", "Played sound to target", "_s", target_name);
dvander@1624
   274
	}
teame06@1212
   275
teame06@1212
   276
	return Plugin_Handled;
ferret99gt@1194
   277
}