dvander@1889: /**
dvander@1889: * vim: set ts=4 :
dvander@1889: * =============================================================================
dvander@1889: * SourceMod Basefuncommands Plugin
dvander@1889: * Provides freeze and freezebomb functionality
dvander@1889: *
ds@1947: * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved.
dvander@1889: * =============================================================================
dvander@1889: *
dvander@1889: * This program is free software; you can redistribute it and/or modify it under
dvander@1889: * the terms of the GNU General Public License, version 3.0, as published by the
dvander@1889: * Free Software Foundation.
dvander@1889: *
dvander@1889: * This program is distributed in the hope that it will be useful, but WITHOUT
dvander@1889: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
dvander@1889: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
dvander@1889: * details.
dvander@1889: *
dvander@1889: * You should have received a copy of the GNU General Public License along with
dvander@1889: * this program. If not, see .
dvander@1889: *
dvander@1889: * As a special exception, AlliedModders LLC gives you permission to link the
dvander@1889: * code of this program (as well as its derivative works) to "Half-Life 2," the
dvander@1889: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
dvander@1889: * by the Valve Corporation. You must obey the GNU General Public License in
dvander@1889: * all respects for all other code used. Additionally, AlliedModders LLC grants
dvander@1889: * this exception to all derivative works. AlliedModders LLC defines further
dvander@1889: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
dvander@1889: * or .
dvander@1889: *
dvander@1889: * Version: $Id$
dvander@1889: */
dvander@1889:
rbutler14@2501: new g_FreezeSerial[MAXPLAYERS+1] = { 0, ... };
rbutler14@2501: new g_FreezeBombSerial[MAXPLAYERS+1] = { 0, ... };
rbutler14@2501: new g_FreezeTime[MAXPLAYERS+1] = { 0, ... };
rbutler14@2501: new g_FreezeBombTime[MAXPLAYERS+1] = { 0, ... };
dvander@1889:
rbutler14@2501: new Handle:g_Cvar_FreezeDuration = INVALID_HANDLE;
rbutler14@2501: new Handle:g_Cvar_FreezeBombTicks = INVALID_HANDLE;
rbutler14@2501: new Handle:g_Cvar_FreezeBombRadius = INVALID_HANDLE;
rbutler14@2501: new Handle:g_Cvar_FreezeBombMode = INVALID_HANDLE;
dvander@1889:
dvander@1889: FreezeClient(client, time)
dvander@1889: {
rbutler14@2501: if (g_FreezeSerial[client] != 0)
dvander@1889: {
dvander@1889: UnfreezeClient(client);
rbutler14@2501: return;
dvander@1889: }
dvander@1889: SetEntityMoveType(client, MOVETYPE_NONE);
dvander@1889: SetEntityRenderColor(client, 0, 128, 255, 192);
rbutler14@2501:
dvander@1889: new Float:vec[3];
dvander@1889: GetClientEyePosition(client, vec);
dvander@1889: EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN);
dvander@1889:
rbutler14@2501: g_FreezeTime[client] = time;
rbutler14@2501: g_FreezeSerial[client] = ++ g_Serial_Gen;
rbutler14@2501: CreateTimer(1.0, Timer_Freeze, client | (g_Serial_Gen << 7), DEFAULT_TIMER_FLAGS);
dvander@1889: }
dvander@1889:
dvander@1889: UnfreezeClient(client)
dvander@1889: {
rbutler14@2501: g_FreezeSerial[client] = 0;
rbutler14@2501: g_FreezeTime[client] = 0;
dvander@1889:
rbutler14@2501: if (IsClientInGame(client))
rbutler14@2501: {
rbutler14@2501: new Float:vec[3];
rbutler14@2501: GetClientAbsOrigin(client, vec);
rbutler14@2501: vec[2] += 10;
rbutler14@2501:
rbutler14@2501: GetClientEyePosition(client, vec);
rbutler14@2501: EmitAmbientSound(SOUND_FREEZE, vec, client, SNDLEVEL_RAIDSIREN);
dvander@1889:
rbutler14@2501: SetEntityMoveType(client, MOVETYPE_WALK);
rbutler14@2501:
rbutler14@2501: SetEntityRenderColor(client, 255, 255, 255, 255);
rbutler14@2501: }
dvander@1889: }
dvander@1889:
dvander@1889: CreateFreezeBomb(client)
dvander@1889: {
rbutler14@2501: if (g_FreezeBombSerial[client] != 0)
rbutler14@2501: {
rbutler14@2501: KillFreezeBomb(client);
rbutler14@2501: return;
rbutler14@2501: }
rbutler14@2501: g_FreezeBombTime[client] = GetConVarInt(g_Cvar_FreezeBombTicks);
rbutler14@2501: g_FreezeBombSerial[client] = ++g_Serial_Gen;
rbutler14@2501: CreateTimer(1.0, Timer_FreezeBomb, client | (g_Serial_Gen << 7), DEFAULT_TIMER_FLAGS);
dvander@1889: }
dvander@1889:
dvander@1889: KillFreezeBomb(client)
dvander@1889: {
rbutler14@2501: g_FreezeBombSerial[client] = 0;
rbutler14@2501: g_FreezeBombTime[client] = 0;
rbutler14@2501:
rbutler14@2501: if (IsClientInGame(client))
rbutler14@2501: {
rbutler14@2501: SetEntityRenderColor(client, 255, 255, 255, 255);
rbutler14@2501: }
dvander@1889: }
dvander@1889:
rbutler14@2501: KillAllFreezes( )
dvander@1889: {
skamonkey@2920: for(new i = 1; i <= MaxClients; i++)
dvander@1889: {
rbutler14@2501: if (g_FreezeSerial[i] != 0)
dvander@1889: {
rbutler14@2501: UnfreezeClient(i);
rbutler14@2501: }
rbutler14@2501:
rbutler14@2501: if (g_FreezeBombSerial[i] != 0)
dvander@1889: {
dvander@1889: KillFreezeBomb(i);
dvander@1889: }
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: PerformFreeze(client, target, time)
dvander@1889: {
dvander@1889: FreezeClient(target, time);
dvander@1889: LogAction(client, target, "\"%L\" froze \"%L\"", client, target);
dvander@1889: }
dvander@1889:
rbutler14@2501: PerformFreezeBomb(client, target)
dvander@1889: {
rbutler14@2501: if (g_FreezeBombSerial[target] != 0)
dvander@1889: {
rbutler14@2501: KillFreezeBomb(target);
rbutler14@2501: LogAction(client, target, "\"%L\" removed a FreezeBomb on \"%L\"", client, target);
rbutler14@2501: }
rbutler14@2501: else
rbutler14@2501: {
rbutler14@2501: CreateFreezeBomb(target);
rbutler14@2501: LogAction(client, target, "\"%L\" set a FreezeBomb on \"%L\"", client, target);
dvander@1889: }
dvander@1889: }
dvander@1889:
rbutler14@2501: public Action:Timer_Freeze(Handle:timer, any:value)
dvander@1889: {
rbutler14@2501: new client = value & 0x7f;
rbutler14@2501: new serial = value >> 7;
rbutler14@2501:
rbutler14@2501: if (!IsClientInGame(client)
rbutler14@2501: || !IsPlayerAlive(client)
rbutler14@2501: || g_FreezeSerial[client] != serial)
dvander@1889: {
rbutler14@2501: UnfreezeClient(client);
rbutler14@2501: return Plugin_Stop;
rbutler14@2501: }
dvander@1889:
rbutler14@2501: if (g_FreezeTime[client] == 0)
rbutler14@2501: {
rbutler14@2501: UnfreezeClient(client);
ds@2583:
ds@2583: /* HintText doesn't work on Dark Messiah */
ds@2583: if (g_GameEngine != SOURCE_SDK_DARKMESSIAH)
ds@2583: {
skamonkey@3097: PrintHintText(client, "%t", "Unfrozen");
ds@2583: }
ds@2583: else
ds@2583: {
skamonkey@3097: PrintCenterText(client, "%t", "Unfrozen");
ds@2583: }
ds@2583:
rbutler14@2501: return Plugin_Stop;
dvander@1889: }
ds@2583:
ds@2583: if (g_GameEngine != SOURCE_SDK_DARKMESSIAH)
ds@2583: {
skamonkey@3097: PrintHintText(client, "%t", "You will be unfrozen", g_FreezeTime[client]);
ds@2583: }
ds@2583: else
ds@2583: {
skamonkey@3097: PrintCenterText(client, "%t", "You will be unfrozen", g_FreezeTime[client]);
ds@2583: }
dvander@1889:
rbutler14@2501: g_FreezeTime[client]--;
dvander@1889: SetEntityMoveType(client, MOVETYPE_NONE);
dvander@1889: SetEntityRenderColor(client, 0, 128, 255, 135);
rbutler14@2501:
dvander@1889: new Float:vec[3];
dvander@1889: GetClientAbsOrigin(client, vec);
dvander@1889: vec[2] += 10;
dvander@1889:
skamonkey@3094: if (g_GlowSprite > -1)
skamonkey@3094: {
skamonkey@3094: TE_SetupGlowSprite(vec, g_GlowSprite, 0.95, 1.5, 50);
skamonkey@3094: }
skamonkey@3094: else
skamonkey@3094: {
skamonkey@3094: TE_SetupGlowSprite(vec, g_HaloSprite, 0.95, 1.5, 50);
skamonkey@3094: }
skamonkey@3094:
rbutler14@2501: TE_SendToAll();
dvander@1889:
rbutler14@2501: return Plugin_Continue;
dvander@1889: }
dvander@1889:
rbutler14@2501: public Action:Timer_FreezeBomb(Handle:timer, any:value)
dvander@1889: {
rbutler14@2501: new client = value & 0x7f;
rbutler14@2501: new serial = value >> 7;
rbutler14@2501:
rbutler14@2501: if (!IsClientInGame(client)
rbutler14@2501: || !IsPlayerAlive(client)
rbutler14@2501: || g_FreezeBombSerial[client] != serial)
dvander@1889: {
dvander@1889: KillFreezeBomb(client);
rbutler14@2501: return Plugin_Stop;
dvander@1889: }
rbutler14@2501:
dvander@1889: new Float:vec[3];
dvander@1889: GetClientEyePosition(client, vec);
rbutler14@2501: g_FreezeBombTime[client]--;
rbutler14@2501:
rbutler14@2501: if (g_FreezeBombTime[client] > 0)
dvander@1889: {
dvander@1889: new color;
rbutler14@2501:
rbutler14@2501: if (g_FreezeBombTime[client] > 1)
dvander@1889: {
rbutler14@2501: color = RoundToFloor(g_FreezeBombTime[client] * (255.0 / GetConVarFloat(g_Cvar_FreezeBombTicks)));
dvander@1889: EmitAmbientSound(SOUND_BEEP, vec, client, SNDLEVEL_RAIDSIREN);
dvander@1889: }
dvander@1889: else
dvander@1889: {
dvander@1889: color = 0;
dvander@1889: EmitAmbientSound(SOUND_FINAL, vec, client, SNDLEVEL_RAIDSIREN);
dvander@1889: }
dvander@1889:
dvander@1889: SetEntityRenderColor(client, color, color, 255, 255);
dvander@1889:
dvander@1889: decl String:name[64];
dvander@1889: GetClientName(client, name, sizeof(name));
rbutler14@2501: PrintCenterTextAll("%t", "Till Explodes", name, g_FreezeBombTime[client]);
rbutler14@2501:
dvander@1889: GetClientAbsOrigin(client, vec);
dvander@1889: vec[2] += 10;
dvander@1889:
rbutler14@2501: TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_FreezeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.5, 5.0, 0.0, greyColor, 10, 0);
dvander@1889: TE_SendToAll();
rbutler14@2501: TE_SetupBeamRingPoint(vec, 10.0, GetConVarFloat(g_Cvar_FreezeBombRadius) / 3.0, g_BeamSprite, g_HaloSprite, 0, 10, 0.6, 10.0, 0.5, whiteColor, 10, 0);
dvander@1889: TE_SendToAll();
rbutler14@2501: return Plugin_Continue;
dvander@1889: }
dvander@1889: else
dvander@1889: {
skamonkey@3094: if (g_ExplosionSprite > -1)
skamonkey@3094: {
skamonkey@3094: TE_SetupExplosion(vec, g_ExplosionSprite, 5.0, 1, 0, GetConVarInt(g_Cvar_FreezeBombRadius), 5000);
skamonkey@3094: TE_SendToAll();
skamonkey@3094: }
dvander@1889:
dvander@1889: EmitAmbientSound(SOUND_BOOM, vec, client, SNDLEVEL_RAIDSIREN);
dvander@1889:
dvander@1889: KillFreezeBomb(client);
rbutler14@2501: FreezeClient(client, GetConVarInt(g_Cvar_FreezeDuration));
dvander@1889:
rbutler14@2501: if (GetConVarInt(g_Cvar_FreezeBombMode) > 0)
dvander@1889: {
rbutler14@2501: new bool:teamOnly = ((GetConVarInt(g_Cvar_FreezeBombMode) == 1) ? true : false);
dvander@1889:
skamonkey@2920: for (new i = 1; i <= MaxClients; i++)
dvander@1889: {
dvander@1889: if (!IsClientInGame(i) || !IsPlayerAlive(i) || i == client)
dvander@1889: {
dvander@1889: continue;
dvander@1889: }
dvander@1889:
dvander@1889: if (teamOnly && GetClientTeam(i) != GetClientTeam(client))
dvander@1889: {
dvander@1889: continue;
dvander@1889: }
dvander@1889:
dvander@1889: new Float:pos[3];
dvander@1889: GetClientEyePosition(i, pos);
dvander@1889:
dvander@1889: new Float:distance = GetVectorDistance(vec, pos);
dvander@1889:
rbutler14@2501: if (distance > GetConVarFloat(g_Cvar_FreezeBombRadius))
dvander@1889: {
dvander@1889: continue;
dvander@1889: }
dvander@1889:
skamonkey@3094: if (g_BeamSprite2 > -1)
skamonkey@3094: {
skamonkey@3094: TE_SetupBeamPoints(vec, pos, g_BeamSprite2, g_HaloSprite, 0, 1, 0.7, 20.0, 50.0, 1, 1.5, blueColor, 10);
skamonkey@3094: }
skamonkey@3094: else
skamonkey@3094: {
skamonkey@3094: TE_SetupBeamPoints(vec, pos, g_BeamSprite, g_HaloSprite, 0, 1, 0.7, 20.0, 50.0, 1, 1.5, blueColor, 10);
skamonkey@3094: }
dvander@1889: TE_SendToAll();
dvander@1889:
rbutler14@2501: FreezeClient(i, GetConVarInt(g_Cvar_FreezeDuration));
dvander@1889: }
dvander@1889: }
rbutler14@2501: return Plugin_Stop;
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: public AdminMenu_Freeze(Handle:topmenu,
dvander@1889: TopMenuAction:action,
dvander@1889: TopMenuObject:object_id,
dvander@1889: param,
dvander@1889: String:buffer[],
dvander@1889: maxlength)
dvander@1889: {
dvander@1889: if (action == TopMenuAction_DisplayOption)
dvander@1889: {
dvander@1889: Format(buffer, maxlength, "%T", "Freeze player", param);
dvander@1889: }
dvander@1889: else if (action == TopMenuAction_SelectOption)
dvander@1889: {
dvander@1889: DisplayFreezeMenu(param);
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: public AdminMenu_FreezeBomb(Handle:topmenu,
dvander@1889: TopMenuAction:action,
dvander@1889: TopMenuObject:object_id,
dvander@1889: param,
dvander@1889: String:buffer[],
dvander@1889: maxlength)
dvander@1889: {
dvander@1889: if (action == TopMenuAction_DisplayOption)
dvander@1889: {
dvander@1889: Format(buffer, maxlength, "%T", "FreezeBomb player", param);
dvander@1889: }
dvander@1889: else if (action == TopMenuAction_SelectOption)
dvander@1889: {
dvander@1889: DisplayFreezeBombMenu(param);
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: DisplayFreezeMenu(client)
dvander@1889: {
dvander@1889: new Handle:menu = CreateMenu(MenuHandler_Freeze);
dvander@1889:
dvander@1889: decl String:title[100];
dvander@1889: Format(title, sizeof(title), "%T:", "Freeze player", client);
dvander@1889: SetMenuTitle(menu, title);
dvander@1889: SetMenuExitBackButton(menu, true);
dvander@1889:
dvander@1889: AddTargetsToMenu(menu, client, true, true);
dvander@1889:
dvander@1889: DisplayMenu(menu, client, MENU_TIME_FOREVER);
dvander@1889: }
dvander@1889:
dvander@1889: DisplayFreezeBombMenu(client)
dvander@1889: {
dvander@1889: new Handle:menu = CreateMenu(MenuHandler_FreezeBomb);
dvander@1889:
dvander@1889: decl String:title[100];
dvander@1889: Format(title, sizeof(title), "%T:", "FreezeBomb player", client);
dvander@1889: SetMenuTitle(menu, title);
dvander@1889: SetMenuExitBackButton(menu, true);
dvander@1889:
dvander@1889: AddTargetsToMenu(menu, client, true, true);
dvander@1889:
dvander@1889: DisplayMenu(menu, client, MENU_TIME_FOREVER);
dvander@1889: }
dvander@1889:
dvander@1889: public MenuHandler_Freeze(Handle:menu, MenuAction:action, param1, param2)
dvander@1889: {
dvander@1889: if (action == MenuAction_End)
dvander@1889: {
dvander@1889: CloseHandle(menu);
dvander@1889: }
dvander@1889: else if (action == MenuAction_Cancel)
dvander@1889: {
dvander@1889: if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
dvander@1889: {
dvander@1889: DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
dvander@1889: }
dvander@1889: }
dvander@1889: else if (action == MenuAction_Select)
dvander@1889: {
dvander@1889: decl String:info[32];
dvander@1889: new userid, target;
dvander@1889:
dvander@1889: GetMenuItem(menu, param2, info, sizeof(info));
dvander@1889: userid = StringToInt(info);
dvander@1889:
dvander@1889: if ((target = GetClientOfUserId(userid)) == 0)
dvander@1889: {
dvander@1889: PrintToChat(param1, "[SM] %t", "Player no longer available");
dvander@1889: }
dvander@1889: else if (!CanUserTarget(param1, target))
dvander@1889: {
dvander@1889: PrintToChat(param1, "[SM] %t", "Unable to target");
dvander@1889: }
dvander@1889: else
dvander@1889: {
dvander@1889: new String:name[32];
dvander@1889: GetClientName(target, name, sizeof(name));
dvander@1889:
rbutler14@2501: PerformFreeze(param1, target, GetConVarInt(g_Cvar_FreezeDuration));
dvander@1889: ShowActivity2(param1, "[SM] ", "%t", "Froze target", "_s", name);
dvander@1889: }
dvander@1889:
dvander@1889: /* Re-draw the menu if they're still valid */
dvander@1889: if (IsClientInGame(param1) && !IsClientInKickQueue(param1))
dvander@1889: {
dvander@1889: DisplayFreezeMenu(param1);
dvander@1889: }
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: public MenuHandler_FreezeBomb(Handle:menu, MenuAction:action, param1, param2)
dvander@1889: {
dvander@1889: if (action == MenuAction_End)
dvander@1889: {
dvander@1889: CloseHandle(menu);
dvander@1889: }
dvander@1889: else if (action == MenuAction_Cancel)
dvander@1889: {
dvander@1889: if (param2 == MenuCancel_ExitBack && hTopMenu != INVALID_HANDLE)
dvander@1889: {
dvander@1889: DisplayTopMenu(hTopMenu, param1, TopMenuPosition_LastCategory);
dvander@1889: }
dvander@1889: }
dvander@1889: else if (action == MenuAction_Select)
dvander@1889: {
dvander@1889: decl String:info[32];
dvander@1889: new userid, target;
dvander@1889:
dvander@1889: GetMenuItem(menu, param2, info, sizeof(info));
dvander@1889: userid = StringToInt(info);
dvander@1889:
dvander@1889: if ((target = GetClientOfUserId(userid)) == 0)
dvander@1889: {
dvander@1889: PrintToChat(param1, "[SM] %t", "Player no longer available");
dvander@1889: }
dvander@1889: else if (!CanUserTarget(param1, target))
dvander@1889: {
dvander@1889: PrintToChat(param1, "[SM] %t", "Unable to target");
dvander@1889: }
dvander@1889: else
dvander@1889: {
dvander@1889: new String:name[32];
dvander@1889: GetClientName(target, name, sizeof(name));
dvander@1889:
rbutler14@2501: PerformFreezeBomb(param1, target);
dvander@1889: ShowActivity2(param1, "[SM] ", "%t", "Toggled FreezeBomb on target", "_s", name);
dvander@1889: }
dvander@1889:
dvander@1889: /* Re-draw the menu if they're still valid */
dvander@1889: if (IsClientInGame(param1) && !IsClientInKickQueue(param1))
dvander@1889: {
dvander@1889: DisplayFreezeBombMenu(param1);
dvander@1889: }
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: public Action:Command_Freeze(client, args)
dvander@1889: {
dvander@1889: if (args < 1)
dvander@1889: {
dvander@1889: ReplyToCommand(client, "[SM] Usage: sm_freeze <#userid|name> [time]");
dvander@1889: return Plugin_Handled;
dvander@1889: }
dvander@1889:
dvander@1889: decl String:arg[65];
dvander@1889: GetCmdArg(1, arg, sizeof(arg));
dvander@1889:
rbutler14@2501: new seconds = GetConVarInt(g_Cvar_FreezeDuration);
dvander@1889:
dvander@1889: if (args > 1)
dvander@1889: {
dvander@1889: decl String:time[20];
dvander@1889: GetCmdArg(2, time, sizeof(time));
dvander@1889: if (StringToIntEx(time, seconds) == 0)
dvander@1889: {
dvander@1889: ReplyToCommand(client, "[SM] %t", "Invalid Amount");
dvander@1889: return Plugin_Handled;
dvander@1889: }
dvander@1889: }
dvander@1889:
dvander@1889: decl String:target_name[MAX_TARGET_LENGTH];
dvander@1889: decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
dvander@1889:
dvander@1889: if ((target_count = ProcessTargetString(
dvander@1889: arg,
dvander@1889: client,
dvander@1889: target_list,
dvander@1889: MAXPLAYERS,
dvander@1889: COMMAND_FILTER_ALIVE,
dvander@1889: target_name,
dvander@1889: sizeof(target_name),
dvander@1889: tn_is_ml)) <= 0)
dvander@1889: {
dvander@1889: ReplyToTargetError(client, target_count);
dvander@1889: return Plugin_Handled;
dvander@1889: }
dvander@1889:
dvander@1889: for (new i = 0; i < target_count; i++)
dvander@1889: {
dvander@1889: PerformFreeze(client, target_list[i], seconds);
dvander@1889: }
dvander@1889:
dvander@1889: if (tn_is_ml)
dvander@1889: {
dvander@1889: ShowActivity2(client, "[SM] ", "%t", "Froze target", target_name);
dvander@1889: }
dvander@1889: else
dvander@1889: {
dvander@1889: ShowActivity2(client, "[SM] ", "%t", "Froze target", "_s", target_name);
dvander@1889: }
dvander@1889:
dvander@1889: return Plugin_Handled;
dvander@1889: }
dvander@1889:
dvander@1889: public Action:Command_FreezeBomb(client, args)
dvander@1889: {
dvander@1889: if (args < 1)
dvander@1889: {
rbutler14@2501: ReplyToCommand(client, "[SM] Usage: sm_freezebomb <#userid|name>");
dvander@1889: return Plugin_Handled;
dvander@1889: }
dvander@1889:
dvander@1889: decl String:arg[65];
dvander@1889: GetCmdArg(1, arg, sizeof(arg));
dvander@1889:
dvander@1889: decl String:target_name[MAX_TARGET_LENGTH];
dvander@1889: decl target_list[MAXPLAYERS], target_count, bool:tn_is_ml;
dvander@1889:
dvander@1889: if ((target_count = ProcessTargetString(
dvander@1889: arg,
dvander@1889: client,
dvander@1889: target_list,
dvander@1889: MAXPLAYERS,
dvander@1889: COMMAND_FILTER_ALIVE,
dvander@1889: target_name,
dvander@1889: sizeof(target_name),
dvander@1889: tn_is_ml)) <= 0)
dvander@1889: {
dvander@1889: ReplyToTargetError(client, target_count);
dvander@1889: return Plugin_Handled;
dvander@1889: }
dvander@1889:
dvander@1889: for (new i = 0; i < target_count; i++)
dvander@1889: {
rbutler14@2501: PerformFreezeBomb(client, target_list[i]);
dvander@1889: }
dvander@1889:
dvander@1889: if (tn_is_ml)
dvander@1889: {
dvander@1889: ShowActivity2(client, "[SM] ", "%t", "Toggled FreezeBomb on target", target_name);
dvander@1889: }
dvander@1889: else
dvander@1889: {
dvander@1889: ShowActivity2(client, "[SM] ", "%t", "Toggled FreezeBomb on target", "_s", target_name);
dvander@1889: }
dvander@1889:
dvander@1889: return Plugin_Handled;
dvander@1889: }