plugins/mapmanager/events.sp
author Michael McKoy <ferret99gt@gmail.com>
Wed Dec 19 22:19:34 2007 +0000 (2007-12-19)
branchsourcemod-1.1.0
changeset 1807 a0de5251fb1a
child 1947 e73a1e51833b
permissions -rw-r--r--
Don't even bother trying to compile these, it's not finished. Just committing for archiving purposes, this is not intended for 1.0 release.
ferret99gt@1807
     1
/**
ferret99gt@1807
     2
 * vim: set ts=4 :
ferret99gt@1807
     3
 * =============================================================================
ferret99gt@1807
     4
 * SourceMod Map Manager Plugin
ferret99gt@1807
     5
 * Contains event callbacks
ferret99gt@1807
     6
 *
ferret99gt@1807
     7
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
ferret99gt@1807
     8
 * =============================================================================
ferret99gt@1807
     9
 *
ferret99gt@1807
    10
 * This program is free software; you can redistribute it and/or modify it under
ferret99gt@1807
    11
 * the terms of the GNU General Public License, version 3.0, as published by the
ferret99gt@1807
    12
 * Free Software Foundation.
ferret99gt@1807
    13
 * 
ferret99gt@1807
    14
 * This program is distributed in the hope that it will be useful, but WITHOUT
ferret99gt@1807
    15
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ferret99gt@1807
    16
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ferret99gt@1807
    17
 * details.
ferret99gt@1807
    18
 *
ferret99gt@1807
    19
 * You should have received a copy of the GNU General Public License along with
ferret99gt@1807
    20
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ferret99gt@1807
    21
 *
ferret99gt@1807
    22
 * As a special exception, AlliedModders LLC gives you permission to link the
ferret99gt@1807
    23
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ferret99gt@1807
    24
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ferret99gt@1807
    25
 * by the Valve Corporation.  You must obey the GNU General Public License in
ferret99gt@1807
    26
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ferret99gt@1807
    27
 * this exception to all derivative works.  AlliedModders LLC defines further
ferret99gt@1807
    28
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ferret99gt@1807
    29
 * or <http://www.sourcemod.net/license.php>.
ferret99gt@1807
    30
 *
ferret99gt@1807
    31
 * Version: $Id$
ferret99gt@1807
    32
 */
ferret99gt@1807
    33
ferret99gt@1807
    34
public Action:UserMsg_VGUIMenu(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init)
ferret99gt@1807
    35
{
ferret99gt@1807
    36
	if (g_IntermissionCalled)
ferret99gt@1807
    37
	{
ferret99gt@1807
    38
		return Plugin_Handled;
ferret99gt@1807
    39
	}
ferret99gt@1807
    40
	
ferret99gt@1807
    41
	decl String:type[15];
ferret99gt@1807
    42
ferret99gt@1807
    43
	/* If we don't get a valid string, bail out. */
ferret99gt@1807
    44
	if (BfReadString(bf, type, sizeof(type)) < 0)
ferret99gt@1807
    45
	{
ferret99gt@1807
    46
		return Plugin_Handled;
ferret99gt@1807
    47
	}
ferret99gt@1807
    48
 
ferret99gt@1807
    49
	if (BfReadByte(bf) == 1 && BfReadByte(bf) == 0 && (strcmp(type, "scores", false) == 0))
ferret99gt@1807
    50
	{
ferret99gt@1807
    51
		g_IntermissionCalled = true;
ferret99gt@1807
    52
		
ferret99gt@1807
    53
		decl String:map[32];
ferret99gt@1807
    54
		new Float:fChatTime = GetConVarFloat(g_Cvar_Chattime);
ferret99gt@1807
    55
		
ferret99gt@1807
    56
		if (fChatTime < 2.0)
ferret99gt@1807
    57
		{
ferret99gt@1807
    58
			SetConVarFloat(g_Cvar_Chattime, 2.0);
ferret99gt@1807
    59
		}
ferret99gt@1807
    60
		
ferret99gt@1807
    61
		LogMessage("[MapManager] Changing map to '%s' due to map ending.", g_NextMap);
ferret99gt@1807
    62
		
ferret99gt@1807
    63
		g_MapChanged = true;
ferret99gt@1807
    64
		CreateTimer(fChatTime - 1.0, Timer_ChangeMap);		
ferret99gt@1807
    65
	}
ferret99gt@1807
    66
	
ferret99gt@1807
    67
	return Plugin_Handled;
ferret99gt@1807
    68
}
ferret99gt@1807
    69
ferret99gt@1807
    70
public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
ferret99gt@1807
    71
{
ferret99gt@1807
    72
	if (g_MapChanged)
ferret99gt@1807
    73
	{
ferret99gt@1807
    74
		return;
ferret99gt@1807
    75
	}
ferret99gt@1807
    76
	
ferret99gt@1807
    77
	if (g_MapChangeSet && g_MapChangeWhen == 'r')
ferret99gt@1807
    78
	{
ferret99gt@1807
    79
		LogMessage("[MapManager] Changing map to '%s' due to round ending.", g_NextMap);
ferret99gt@1807
    80
		
ferret99gt@1807
    81
		g_MapChanged = true;
ferret99gt@1807
    82
		CreateTimer(1.0, Timer_ChangeMap);
ferret99gt@1807
    83
		
ferret99gt@1807
    84
		return;
ferret99gt@1807
    85
	}
ferret99gt@1807
    86
	
ferret99gt@1807
    87
	if (g_HasVoteStarted)
ferret99gt@1807
    88
	{
ferret99gt@1807
    89
		return;
ferret99gt@1807
    90
	}
ferret99gt@1807
    91
ferret99gt@1807
    92
	new winner = GetEventInt(event, "winner");
ferret99gt@1807
    93
	
ferret99gt@1807
    94
	if (winner == 0 || winner == 1)
ferret99gt@1807
    95
	{
ferret99gt@1807
    96
		return;
ferret99gt@1807
    97
	}
ferret99gt@1807
    98
ferret99gt@1807
    99
	g_TotalRounds++;
ferret99gt@1807
   100
	
ferret99gt@1807
   101
	new team[2], teamPos = -1;
ferret99gt@1807
   102
	for (new i; i < GetArraySize(g_TeamScores); i++)
ferret99gt@1807
   103
	{
ferret99gt@1807
   104
		GetArrayArray(g_TeamScores, i, team);
ferret99gt@1807
   105
		if (team[0] == winner)
ferret99gt@1807
   106
		{
ferret99gt@1807
   107
			teamPos = i;
ferret99gt@1807
   108
			break;
ferret99gt@1807
   109
		}		
ferret99gt@1807
   110
	}
ferret99gt@1807
   111
	
ferret99gt@1807
   112
	if (teamPos == -1)
ferret99gt@1807
   113
	{
ferret99gt@1807
   114
		team[0] = winner;
ferret99gt@1807
   115
		team[1] = 1;
ferret99gt@1807
   116
		PushArrayArray(g_TeamScores, team);
ferret99gt@1807
   117
	}
ferret99gt@1807
   118
	else
ferret99gt@1807
   119
	{
ferret99gt@1807
   120
		team[1]++;
ferret99gt@1807
   121
		SetArrayArray(g_TeamScores, teamPos, team);
ferret99gt@1807
   122
	}	
ferret99gt@1807
   123
	
ferret99gt@1807
   124
	if (g_Cvar_Winlimit != INVALID_HANDLE)
ferret99gt@1807
   125
	{
ferret99gt@1807
   126
		new winlimit = GetConVarInt(g_Cvar_Winlimit);
ferret99gt@1807
   127
		if (winlimit)
ferret99gt@1807
   128
		{
ferret99gt@1807
   129
			if (team[1] >= (winlimit - GetConVarInt(g_Cvar_StartRounds)))
ferret99gt@1807
   130
			{
ferret99gt@1807
   131
				InitiateVote();
ferret99gt@1807
   132
			}
ferret99gt@1807
   133
		}
ferret99gt@1807
   134
	}
ferret99gt@1807
   135
	
ferret99gt@1807
   136
	if (g_Cvar_Maxrounds != INVALID_HANDLE)
ferret99gt@1807
   137
	{
ferret99gt@1807
   138
		new maxrounds = GetConVarInt(g_Cvar_Maxrounds);
ferret99gt@1807
   139
		if (maxrounds)
ferret99gt@1807
   140
		{
ferret99gt@1807
   141
			if (g_TotalRounds >= (maxrounds - GetConVarInt(g_Cvar_StartRounds)))
ferret99gt@1807
   142
			{
ferret99gt@1807
   143
				InitiateVote();
ferret99gt@1807
   144
			}			
ferret99gt@1807
   145
		}
ferret99gt@1807
   146
	}
ferret99gt@1807
   147
}
ferret99gt@1807
   148
ferret99gt@1807
   149
public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
ferret99gt@1807
   150
{
ferret99gt@1807
   151
	if (g_MapChanged || g_HasVoteStarted || g_Cvar_Fraglimit == INVALID_HANDLE)
ferret99gt@1807
   152
	{
ferret99gt@1807
   153
		return;
ferret99gt@1807
   154
	}
ferret99gt@1807
   155
	
ferret99gt@1807
   156
	if (!GetConVarInt(g_Cvar_Fraglimit))
ferret99gt@1807
   157
	{
ferret99gt@1807
   158
		return;
ferret99gt@1807
   159
	}
ferret99gt@1807
   160
ferret99gt@1807
   161
	new fragger = GetClientOfUserId(GetEventInt(event, "attacker"));
ferret99gt@1807
   162
	if (fragger && GetClientFrags(fragger) >= (GetConVarInt(g_Cvar_Fraglimit) - GetConVarInt(g_Cvar_StartFrags)))
ferret99gt@1807
   163
	{
ferret99gt@1807
   164
		InitiateVote();
ferret99gt@1807
   165
	}
ferret99gt@1807
   166
}