dvander@1889: /** dvander@1889: * vim: set ts=4 : dvander@1889: * ============================================================================= dvander@1889: * SourceMod Basic Fun Commands Plugin dvander@1889: * Implements basic punishment commands. 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: dvander@1889: #pragma semicolon 1 dvander@1889: dvander@1889: #include dvander@1889: #include dvander@1889: #undef REQUIRE_PLUGIN dvander@1889: #include dvander@1889: dvander@1889: public Plugin:myinfo = dvander@1889: { dvander@1889: name = "Fun Commands", dvander@1889: author = "AlliedModders LLC", dvander@1889: description = "Fun Commands", dvander@1889: version = SOURCEMOD_VERSION, dvander@1889: url = "http://www.sourcemod.net/" dvander@1889: }; dvander@1889: rbutler14@2501: // Admin Menu dvander@1889: new Handle:hTopMenu = INVALID_HANDLE; dvander@1889: dvander@1889: // Sounds dvander@1889: #define SOUND_BLIP "buttons/blip1.wav" dvander@1889: #define SOUND_BEEP "buttons/button17.wav" dvander@1889: #define SOUND_FINAL "weapons/cguard/charging.wav" dvander@1889: #define SOUND_BOOM "weapons/explode3.wav" dvander@1889: #define SOUND_FREEZE "physics/glass/glass_impact_bullet4.wav" dvander@1889: dvander@1889: // Following are model indexes for temp entities skamonkey@3094: new g_BeamSprite = -1; skamonkey@3094: new g_BeamSprite2 = -1; skamonkey@3094: new g_HaloSprite = -1; skamonkey@3094: new g_GlowSprite = -1; skamonkey@3094: new g_ExplosionSprite = -1; dvander@1889: dvander@1889: // Basic color arrays for temp entities rbutler14@2501: new redColor[4] = {255, 75, 75, 255}; rbutler14@2501: new orangeColor[4] = {255, 128, 0, 255}; rbutler14@2501: new greenColor[4] = {75, 255, 75, 255}; rbutler14@2501: new blueColor[4] = {75, 75, 255, 255}; rbutler14@2501: new whiteColor[4] = {255, 255, 255, 255}; rbutler14@2501: new greyColor[4] = {128, 128, 128, 255}; dvander@1889: dvander@1889: // UserMessageId for Fade. dvander@1889: new UserMsg:g_FadeUserMsgId; dvander@1889: rbutler14@2501: // Serial Generator for Timer Safety rbutler14@2501: new g_Serial_Gen = 0; rbutler14@2501: ds@2583: new g_GameEngine = SOURCE_SDK_UNKNOWN; ds@2583: rbutler14@2501: // Flags used in various timers rbutler14@2501: #define DEFAULT_TIMER_FLAGS TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE rbutler14@2501: dvander@1889: // Include various commands and supporting functions dvander@1889: #include "funcommands/beacon.sp" dvander@1889: #include "funcommands/timebomb.sp" dvander@1889: #include "funcommands/fire.sp" dvander@1889: #include "funcommands/ice.sp" dvander@1889: #include "funcommands/gravity.sp" dvander@1889: #include "funcommands/blind.sp" dvander@1889: #include "funcommands/noclip.sp" dvander@1889: #include "funcommands/drug.sp" dvander@1889: dvander@1889: public OnPluginStart() dvander@1889: { dvander@1889: if (FindPluginByFile("basefuncommands.smx") != INVALID_HANDLE) dvander@1889: { dvander@1889: ThrowError("This plugin replaces basefuncommands. You cannot run both at once."); dvander@1889: } dvander@1889: dvander@1889: LoadTranslations("common.phrases"); dvander@2020: LoadTranslations("funcommands.phrases"); ds@2583: g_GameEngine = GuessSDKVersion(); dvander@1889: g_FadeUserMsgId = GetUserMessageId("Fade"); dvander@1889: rbutler14@2501: RegisterCvars( ); rbutler14@2501: RegisterCmds( ); rbutler14@2501: HookEvents( ); dvander@1889: dvander@1889: /* Account for late loading */ dvander@1889: new Handle:topmenu; dvander@1889: if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != INVALID_HANDLE)) dvander@1889: { dvander@1889: OnAdminMenuReady(topmenu); dvander@1889: } dvander@1889: } dvander@1889: rbutler14@2501: RegisterCvars( ) rbutler14@2501: { rbutler14@2501: // beacon rbutler14@2501: g_Cvar_BeaconRadius = CreateConVar("sm_beacon_radius", "375", "Sets the radius for beacon's light rings.", 0, true, 50.0, true, 1500.0); rbutler14@2501: rbutler14@2501: // timebomb rbutler14@2501: g_Cvar_TimeBombTicks = CreateConVar("sm_timebomb_ticks", "10.0", "Sets how long the timebomb fuse is.", 0, true, 5.0, true, 120.0); rbutler14@2501: g_Cvar_TimeBombRadius = CreateConVar("sm_timebomb_radius", "600", "Sets the bomb blast radius.", 0, true, 50.0, true, 3000.0); rbutler14@2501: g_Cvar_TimeBombMode = CreateConVar("sm_timebomb_mode", "0", "Who is killed by the timebomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); rbutler14@2501: rbutler14@2501: // fire rbutler14@2501: g_Cvar_BurnDuration = CreateConVar("sm_burn_duration", "20.0", "Sets the default duration of sm_burn and firebomb victims.", 0, true, 0.5, true, 20.0); rbutler14@2501: g_Cvar_FireBombTicks = CreateConVar("sm_firebomb_ticks", "10.0", "Sets how long the FireBomb fuse is.", 0, true, 5.0, true, 120.0); rbutler14@2501: g_Cvar_FireBombRadius = CreateConVar("sm_firebomb_radius", "600", "Sets the bomb blast radius.", 0, true, 50.0, true, 3000.0); rbutler14@2501: g_Cvar_FireBombMode = CreateConVar("sm_firebomb_mode", "0", "Who is targetted by the FireBomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); rbutler14@2501: rbutler14@2501: // ice rbutler14@2501: g_Cvar_FreezeDuration = CreateConVar("sm_freeze_duration", "10.0", "Sets the default duration for sm_freeze and freezebomb victims", 0, true, 1.0, true, 120.0); rbutler14@2501: g_Cvar_FreezeBombTicks = CreateConVar("sm_freezebomb_ticks", "10.0", "Sets how long the freezebomb fuse is.", 0, true, 5.0, true, 120.0); rbutler14@2501: g_Cvar_FreezeBombRadius = CreateConVar("sm_freezebomb_radius", "600", "Sets the freezebomb blast radius.", 0, true, 50.0, true, 3000.0); rbutler14@2501: g_Cvar_FreezeBombMode = CreateConVar("sm_freezebomb_mode", "0", "Who is targetted by the freezebomb? 0 = Target only, 1 = Target's team, 2 = Everyone", 0, true, 0.0, true, 2.0); rbutler14@2501: rbutler14@2501: AutoExecConfig(true, "funcommands"); rbutler14@2501: } rbutler14@2501: rbutler14@2501: RegisterCmds( ) rbutler14@2501: { rbutler14@2501: RegAdminCmd("sm_beacon", Command_Beacon, ADMFLAG_SLAY, "sm_beacon <#userid|name> [0/1]"); rbutler14@2501: RegAdminCmd("sm_timebomb", Command_TimeBomb, ADMFLAG_SLAY, "sm_timebomb <#userid|name> [0/1]"); rbutler14@2501: RegAdminCmd("sm_burn", Command_Burn, ADMFLAG_SLAY, "sm_burn <#userid|name> [time]"); rbutler14@2501: RegAdminCmd("sm_firebomb", Command_FireBomb, ADMFLAG_SLAY, "sm_firebomb <#userid|name> [0/1]"); rbutler14@2501: RegAdminCmd("sm_freeze", Command_Freeze, ADMFLAG_SLAY, "sm_freeze <#userid|name> [time]"); rbutler14@2501: RegAdminCmd("sm_freezebomb", Command_FreezeBomb, ADMFLAG_SLAY, "sm_freezebomb <#userid|name> [0/1]"); rbutler14@2501: RegAdminCmd("sm_gravity", Command_Gravity, ADMFLAG_SLAY, "sm_gravity <#userid|name> [amount] - Leave amount off to reset. Amount is 0.0 through 5.0"); rbutler14@2501: RegAdminCmd("sm_blind", Command_Blind, ADMFLAG_SLAY, "sm_blind <#userid|name> [amount] - Leave amount off to reset."); rbutler14@2501: RegAdminCmd("sm_noclip", Command_NoClip, ADMFLAG_SLAY|ADMFLAG_CHEATS, "sm_noclip <#userid|name>"); rbutler14@2501: RegAdminCmd("sm_drug", Command_Drug, ADMFLAG_SLAY, "sm_drug <#userid|name> [0/1]"); rbutler14@2501: } rbutler14@2501: rbutler14@2501: HookEvents( ) rbutler14@2501: { rbutler14@2501: HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy); rbutler14@2501: } rbutler14@2501: dvander@1889: public OnMapStart() dvander@1889: { dvander@1889: PrecacheSound(SOUND_BLIP, true); dvander@1889: PrecacheSound(SOUND_BEEP, true); dvander@1889: PrecacheSound(SOUND_FINAL, true); dvander@1889: PrecacheSound(SOUND_BOOM, true); dvander@1889: PrecacheSound(SOUND_FREEZE, true); dvander@1889: skamonkey@3200: new sdkversion = GuessSDKVersion(); skamonkey@3200: if (sdkversion == SOURCE_SDK_LEFT4DEAD || sdkversion == SOURCE_SDK_LEFT4DEAD2) skamonkey@3094: { skamonkey@3094: g_BeamSprite = PrecacheModel("materials/sprites/laserbeam.vmt"); skamonkey@3094: g_HaloSprite = PrecacheModel("materials/sprites/glow01.vmt"); skamonkey@3094: } skamonkey@3094: else skamonkey@3094: { skamonkey@3094: g_BeamSprite = PrecacheModel("materials/sprites/laser.vmt"); skamonkey@3094: g_HaloSprite = PrecacheModel("materials/sprites/halo01.vmt"); skamonkey@3094: g_BeamSprite2 = PrecacheModel("sprites/bluelight1.vmt"); skamonkey@3094: g_GlowSprite = PrecacheModel("sprites/blueglow2.vmt"); skamonkey@3094: g_ExplosionSprite = PrecacheModel("sprites/sprite_fire01.vmt"); skamonkey@3094: } skamonkey@3094: dvander@1889: } dvander@1889: dvander@1889: public OnMapEnd() dvander@1889: { rbutler14@2501: KillAllBeacons( ); dvander@1889: KillAllTimeBombs(); dvander@1889: KillAllFireBombs(); dvander@1889: KillAllFreezes(); dvander@1889: KillAllDrugs(); dvander@1889: } dvander@1889: dvander@1889: public Action:Event_RoundEnd(Handle:event,const String:name[],bool:dontBroadcast) dvander@1889: { rbutler14@2501: KillAllBeacons( ); dvander@1889: KillAllTimeBombs(); dvander@1889: KillAllFireBombs(); dvander@1889: KillAllFreezes(); dvander@1889: KillAllDrugs(); dvander@1889: } dvander@1889: dvander@1889: public OnAdminMenuReady(Handle:topmenu) dvander@1889: { dvander@1889: /* Block us from being called twice */ dvander@1889: if (topmenu == hTopMenu) dvander@1889: { dvander@1889: return; dvander@1889: } dvander@1889: dvander@1889: /* Save the Handle */ dvander@1889: hTopMenu = topmenu; dvander@1889: dvander@1889: /* Find the "Player Commands" category */ dvander@1889: new TopMenuObject:player_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_PLAYERCOMMANDS); dvander@1889: dvander@1889: if (player_commands != INVALID_TOPMENUOBJECT) dvander@1889: { dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_beacon", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_Beacon, dvander@1889: player_commands, dvander@1889: "sm_beacon", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_timebomb", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_TimeBomb, dvander@1889: player_commands, dvander@1889: "sm_timebomb", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_burn", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_Burn, dvander@1889: player_commands, dvander@1889: "sm_burn", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_firebomb", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_FireBomb, dvander@1889: player_commands, dvander@1889: "sm_firebomb", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_freeze", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_Freeze, dvander@1889: player_commands, dvander@1889: "sm_freeze", dvander@1889: ADMFLAG_SLAY); dvander@1889: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_freezebomb", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_FreezeBomb, dvander@1889: player_commands, dvander@1889: "sm_freezebomb", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_gravity", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_Gravity, dvander@1889: player_commands, dvander@1889: "sm_gravity", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_blind", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_Blind, dvander@1889: player_commands, dvander@1889: "sm_blind", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_noclip", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_NoClip, dvander@1889: player_commands, dvander@1889: "sm_noclip", dvander@1889: ADMFLAG_SLAY); rbutler14@2501: dvander@1889: AddToTopMenu(hTopMenu, dvander@1889: "sm_drug", dvander@1889: TopMenuObject_Item, dvander@1889: AdminMenu_Drug, dvander@1889: player_commands, dvander@1889: "sm_drug", dvander@1889: ADMFLAG_SLAY); dvander@1889: } dvander@1889: } dvander@1889: