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: }