plugins/include/tf2_stocks.inc
author Matt Woodrow <pred@alliedmods.net>
Thu Feb 26 16:54:03 2009 -0500 (2009-02-26)
changeset 2622 b3ffa8a4511c
parent 2566 33656d9247c4
child 2943 1bbdb33fee53
permissions -rw-r--r--
Bumped all versions
milo@2566
     1
/**
milo@2566
     2
 * vim: set ts=4 :
milo@2566
     3
 * =============================================================================
milo@2566
     4
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
milo@2566
     5
 * =============================================================================
milo@2566
     6
 *
milo@2566
     7
 * This file is part of the SourceMod/SourcePawn SDK.
milo@2566
     8
 *
milo@2566
     9
 * This program is free software; you can redistribute it and/or modify it under
milo@2566
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
milo@2566
    11
 * Free Software Foundation.
milo@2566
    12
 * 
milo@2566
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
milo@2566
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
milo@2566
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
milo@2566
    16
 * details.
milo@2566
    17
 *
milo@2566
    18
 * You should have received a copy of the GNU General Public License along with
milo@2566
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
milo@2566
    20
 *
milo@2566
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
milo@2566
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
milo@2566
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
milo@2566
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
milo@2566
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
milo@2566
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
milo@2566
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
milo@2566
    28
 * or <http://www.sourcemod.net/license.php>.
milo@2566
    29
 *
milo@2566
    30
 * Version: $Id$
milo@2566
    31
 */
milo@2566
    32
milo@2566
    33
#if defined _tf2_stocks_included
milo@2566
    34
 #endinput
milo@2566
    35
#endif
milo@2566
    36
#define _tf2_stocks_included
milo@2566
    37
milo@2566
    38
#include <tf2>
milo@2566
    39
#include <sdktools>
milo@2566
    40
milo@2566
    41
enum TFResourceType
milo@2566
    42
{
milo@2566
    43
	TFResource_Ping,
milo@2566
    44
	TFResource_Score,
milo@2566
    45
	TFResource_Deaths,
milo@2566
    46
	TFResource_TotalScore, 
milo@2566
    47
	TFResource_Captures,
milo@2566
    48
	TFResource_Defenses,
milo@2566
    49
	TFResource_Dominations,
milo@2566
    50
	TFResource_Revenge,
milo@2566
    51
	TFResource_BuildingsDestroyed, 
milo@2566
    52
	TFResource_Headshots,
milo@2566
    53
	TFResource_Backstabs,
milo@2566
    54
	TFResource_HealPoints,
milo@2566
    55
	TFResource_Invulns,
milo@2566
    56
	TFResource_Teleports,
milo@2566
    57
	TFResource_ResupplyPoints,
milo@2566
    58
	TFResource_KillAssists,
milo@2566
    59
	TFResource_MaxHealth,
milo@2566
    60
	TFResource_PlayerClass
milo@2566
    61
};
milo@2566
    62
milo@2566
    63
static const String:TFResourceNames[TFResourceType][] =
milo@2566
    64
{
milo@2566
    65
	"m_iPing",
milo@2566
    66
	"m_iScore",
milo@2566
    67
	"m_iDeaths",
milo@2566
    68
	"m_iTotalScore",
milo@2566
    69
	"m_iCaptures",
milo@2566
    70
	"m_iDefenses",
milo@2566
    71
	"m_iDominations",
milo@2566
    72
	"m_iRevenge",
milo@2566
    73
	"m_iBuildingsDestroyed",
milo@2566
    74
	"m_iHeadshots",
milo@2566
    75
	"m_iBackstabs",
milo@2566
    76
	"m_iHealPoints",
milo@2566
    77
	"m_iInvulns",
milo@2566
    78
	"m_iTeleports",
milo@2566
    79
	"m_iResupplyPoints",
milo@2566
    80
	"m_iKillAssists",
milo@2566
    81
	"m_iMaxHealth",
milo@2566
    82
	"m_iPlayerClass"
milo@2566
    83
};
milo@2566
    84
milo@2566
    85
/**
milo@2566
    86
 * Get's a Clients current class.
milo@2566
    87
 *
milo@2566
    88
 * @param client		Player's index.
milo@2566
    89
 * @return				Current TFClassType of player.
milo@2566
    90
 * @error				Invalid client index.
milo@2566
    91
 */
milo@2566
    92
stock TFClassType:TF2_GetPlayerClass(client)
milo@2566
    93
{
milo@2566
    94
	return TFClassType:GetEntProp(client, Prop_Send, "m_iClass");
milo@2566
    95
}
milo@2566
    96
milo@2566
    97
/**
milo@2566
    98
 * Set's a Clients class.
milo@2566
    99
 *
milo@2566
   100
 * Note: If setting player class in a player spawn hook weapons should be set to false.
milo@2566
   101
 *
milo@2566
   102
 * @param client		Player's index.
milo@2566
   103
 * @param class			TFClassType class symbol.
milo@2566
   104
 * @param weapons		This paramater is ignored.
milo@2566
   105
 * @param persistant	If true changes the players desired class so the change stays after death.
milo@2566
   106
 * @noreturn
milo@2566
   107
 * @error				Invalid client index.
milo@2566
   108
 */
milo@2566
   109
stock TF2_SetPlayerClass(client, TFClassType:class, bool:weapons=true, bool:persistant=true)
milo@2566
   110
{
milo@2566
   111
	SetEntProp(client, Prop_Send, "m_iClass", _:class);
milo@2566
   112
	
milo@2566
   113
	if (persistant)
milo@2566
   114
	{
milo@2566
   115
		SetEntProp(client, Prop_Send, "m_iDesiredPlayerClass", _:class);
milo@2566
   116
	}
milo@2566
   117
}
milo@2566
   118
milo@2566
   119
/**
milo@2566
   120
 * Retrieves client data from the resource entity
milo@2566
   121
 *
milo@2566
   122
 * @param client		Player's index.
milo@2566
   123
 * @param type			ResourceType constant
milo@2566
   124
 * @return				Value or -1 on failure.
milo@2566
   125
 * @error				Invalid client index, client not in game or failed to find resource entity.
milo@2566
   126
 */
milo@2566
   127
stock TF2_GetPlayerResourceData(client, TFResourceType:type)
milo@2566
   128
{
milo@2566
   129
	if (!IsClientConnected(client))
milo@2566
   130
	{
milo@2566
   131
		return -1;	
milo@2566
   132
	}
milo@2566
   133
	
milo@2566
   134
	new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]);
milo@2566
   135
		
milo@2566
   136
	if (offset < 1)
milo@2566
   137
	{
milo@2566
   138
		return -1;	
milo@2566
   139
	}
milo@2566
   140
				
milo@2566
   141
	new entity = TF2_GetResourceEntity();
milo@2566
   142
	
milo@2566
   143
	if (entity == -1)
milo@2566
   144
	{
milo@2566
   145
		return -1;
milo@2566
   146
	}
milo@2566
   147
	
milo@2566
   148
	return GetEntData(entity, offset + (client*4));
milo@2566
   149
}
milo@2566
   150
milo@2566
   151
/**
milo@2566
   152
 * Sets client data in the resource entity
milo@2566
   153
 *
milo@2566
   154
 * Note: The game overwrites these values every frame, so changing them will have very little effect.
milo@2566
   155
 *
milo@2566
   156
 * @param client		Player's index.
milo@2566
   157
 * @param type			ResourceType constant
milo@2566
   158
 * @param value			Value to set.
milo@2566
   159
 * @return				Value or -1 on failure.
milo@2566
   160
 * @error				Invalid client index, client not in game or failed to find resource entity.
milo@2566
   161
 */
milo@2566
   162
stock bool:TF2_SetPlayerResourceData(client, TFResourceType:type, any:value)
milo@2566
   163
{
milo@2566
   164
	if (!IsClientConnected(client))
milo@2566
   165
	{
milo@2566
   166
		return false;	
milo@2566
   167
	}
milo@2566
   168
	
milo@2566
   169
	new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]);
milo@2566
   170
						
milo@2566
   171
	if (offset < 1)
milo@2566
   172
	{
milo@2566
   173
		return false;	
milo@2566
   174
	}
milo@2566
   175
				
milo@2566
   176
	new entity = TF2_GetResourceEntity();
milo@2566
   177
	
milo@2566
   178
	if (entity == -1)
milo@2566
   179
	{
milo@2566
   180
		return false;	
milo@2566
   181
	}
milo@2566
   182
	
milo@2566
   183
	SetEntData(entity, offset + (client*4), value);
milo@2566
   184
	
milo@2566
   185
	return true;	
milo@2566
   186
}
milo@2566
   187
milo@2566
   188
/**
milo@2566
   189
 * Removes all weapons from a client's weapon slot
milo@2566
   190
 *
milo@2566
   191
 * @param client		Player's index.
milo@2566
   192
 * @param slot			Slot index (0-5)
milo@2566
   193
 * @noreturn
milo@2566
   194
 * @error				Invalid client, invalid slot or lack of mod support
milo@2566
   195
 */
milo@2566
   196
stock TF2_RemoveWeaponSlot(client, slot)
milo@2566
   197
{
milo@2566
   198
	new weaponIndex;
milo@2566
   199
	while ((weaponIndex = GetPlayerWeaponSlot(client, slot)) != -1)
milo@2566
   200
	{
milo@2566
   201
		RemovePlayerItem(client, weaponIndex);
milo@2566
   202
		RemoveEdict(weaponIndex);
milo@2566
   203
	}
milo@2566
   204
}
milo@2566
   205
milo@2566
   206
/**
milo@2566
   207
 * Removes all weapons from a client
milo@2566
   208
 *
milo@2566
   209
 * @param client		Player's index.
milo@2566
   210
 * @noreturn
milo@2566
   211
 */
milo@2566
   212
stock TF2_RemoveAllWeapons(client)
milo@2566
   213
{
milo@2566
   214
	for (new i = 0; i <= 5; i++)
milo@2566
   215
	{
milo@2566
   216
		TF2_RemoveWeaponSlot(client, i);
milo@2566
   217
	}
milo@2566
   218
}
milo@2566
   219