milo@2566: /** milo@2566: * vim: set ts=4 : milo@2566: * ============================================================================= milo@2566: * SourceMod (C)2004-2008 AlliedModders LLC. All rights reserved. milo@2566: * ============================================================================= milo@2566: * milo@2566: * This file is part of the SourceMod/SourcePawn SDK. milo@2566: * milo@2566: * This program is free software; you can redistribute it and/or modify it under milo@2566: * the terms of the GNU General Public License, version 3.0, as published by the milo@2566: * Free Software Foundation. milo@2566: * milo@2566: * This program is distributed in the hope that it will be useful, but WITHOUT milo@2566: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS milo@2566: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more milo@2566: * details. milo@2566: * milo@2566: * You should have received a copy of the GNU General Public License along with milo@2566: * this program. If not, see . milo@2566: * milo@2566: * As a special exception, AlliedModders LLC gives you permission to link the milo@2566: * code of this program (as well as its derivative works) to "Half-Life 2," the milo@2566: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software milo@2566: * by the Valve Corporation. You must obey the GNU General Public License in milo@2566: * all respects for all other code used. Additionally, AlliedModders LLC grants milo@2566: * this exception to all derivative works. AlliedModders LLC defines further milo@2566: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), milo@2566: * or . milo@2566: * milo@2566: * Version: $Id$ milo@2566: */ milo@2566: milo@2566: #if defined _tf2_stocks_included milo@2566: #endinput milo@2566: #endif milo@2566: #define _tf2_stocks_included milo@2566: milo@2566: #include milo@2566: #include milo@2566: milo@2566: enum TFResourceType milo@2566: { milo@2566: TFResource_Ping, milo@2566: TFResource_Score, milo@2566: TFResource_Deaths, milo@2566: TFResource_TotalScore, milo@2566: TFResource_Captures, milo@2566: TFResource_Defenses, milo@2566: TFResource_Dominations, milo@2566: TFResource_Revenge, milo@2566: TFResource_BuildingsDestroyed, milo@2566: TFResource_Headshots, milo@2566: TFResource_Backstabs, milo@2566: TFResource_HealPoints, milo@2566: TFResource_Invulns, milo@2566: TFResource_Teleports, milo@2566: TFResource_ResupplyPoints, milo@2566: TFResource_KillAssists, milo@2566: TFResource_MaxHealth, milo@2566: TFResource_PlayerClass milo@2566: }; milo@2566: milo@2566: static const String:TFResourceNames[TFResourceType][] = milo@2566: { milo@2566: "m_iPing", milo@2566: "m_iScore", milo@2566: "m_iDeaths", milo@2566: "m_iTotalScore", milo@2566: "m_iCaptures", milo@2566: "m_iDefenses", milo@2566: "m_iDominations", milo@2566: "m_iRevenge", milo@2566: "m_iBuildingsDestroyed", milo@2566: "m_iHeadshots", milo@2566: "m_iBackstabs", milo@2566: "m_iHealPoints", milo@2566: "m_iInvulns", milo@2566: "m_iTeleports", milo@2566: "m_iResupplyPoints", milo@2566: "m_iKillAssists", milo@2566: "m_iMaxHealth", milo@2566: "m_iPlayerClass" milo@2566: }; milo@2566: milo@2566: /** milo@2566: * Get's a Clients current class. milo@2566: * milo@2566: * @param client Player's index. milo@2566: * @return Current TFClassType of player. milo@2566: * @error Invalid client index. milo@2566: */ milo@2566: stock TFClassType:TF2_GetPlayerClass(client) milo@2566: { milo@2566: return TFClassType:GetEntProp(client, Prop_Send, "m_iClass"); milo@2566: } milo@2566: milo@2566: /** milo@2566: * Set's a Clients class. milo@2566: * milo@2566: * Note: If setting player class in a player spawn hook weapons should be set to false. milo@2566: * milo@2566: * @param client Player's index. milo@2566: * @param class TFClassType class symbol. milo@2566: * @param weapons This paramater is ignored. milo@2566: * @param persistant If true changes the players desired class so the change stays after death. milo@2566: * @noreturn milo@2566: * @error Invalid client index. milo@2566: */ milo@2566: stock TF2_SetPlayerClass(client, TFClassType:class, bool:weapons=true, bool:persistant=true) milo@2566: { milo@2566: SetEntProp(client, Prop_Send, "m_iClass", _:class); milo@2566: milo@2566: if (persistant) milo@2566: { milo@2566: SetEntProp(client, Prop_Send, "m_iDesiredPlayerClass", _:class); milo@2566: } milo@2566: } milo@2566: milo@2566: /** milo@2566: * Retrieves client data from the resource entity milo@2566: * milo@2566: * @param client Player's index. milo@2566: * @param type ResourceType constant milo@2566: * @return Value or -1 on failure. milo@2566: * @error Invalid client index, client not in game or failed to find resource entity. milo@2566: */ milo@2566: stock TF2_GetPlayerResourceData(client, TFResourceType:type) milo@2566: { milo@2566: if (!IsClientConnected(client)) milo@2566: { milo@2566: return -1; milo@2566: } milo@2566: milo@2566: new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]); milo@2566: milo@2566: if (offset < 1) milo@2566: { milo@2566: return -1; milo@2566: } milo@2566: milo@2566: new entity = TF2_GetResourceEntity(); milo@2566: milo@2566: if (entity == -1) milo@2566: { milo@2566: return -1; milo@2566: } milo@2566: milo@2566: return GetEntData(entity, offset + (client*4)); milo@2566: } milo@2566: milo@2566: /** milo@2566: * Sets client data in the resource entity milo@2566: * milo@2566: * Note: The game overwrites these values every frame, so changing them will have very little effect. milo@2566: * milo@2566: * @param client Player's index. milo@2566: * @param type ResourceType constant milo@2566: * @param value Value to set. milo@2566: * @return Value or -1 on failure. milo@2566: * @error Invalid client index, client not in game or failed to find resource entity. milo@2566: */ milo@2566: stock bool:TF2_SetPlayerResourceData(client, TFResourceType:type, any:value) milo@2566: { milo@2566: if (!IsClientConnected(client)) milo@2566: { milo@2566: return false; milo@2566: } milo@2566: milo@2566: new offset = FindSendPropInfo("CTFPlayerResource", TFResourceNames[type]); milo@2566: milo@2566: if (offset < 1) milo@2566: { milo@2566: return false; milo@2566: } milo@2566: milo@2566: new entity = TF2_GetResourceEntity(); milo@2566: milo@2566: if (entity == -1) milo@2566: { milo@2566: return false; milo@2566: } milo@2566: milo@2566: SetEntData(entity, offset + (client*4), value); milo@2566: milo@2566: return true; milo@2566: } milo@2566: milo@2566: /** milo@2566: * Removes all weapons from a client's weapon slot milo@2566: * milo@2566: * @param client Player's index. milo@2566: * @param slot Slot index (0-5) milo@2566: * @noreturn milo@2566: * @error Invalid client, invalid slot or lack of mod support milo@2566: */ milo@2566: stock TF2_RemoveWeaponSlot(client, slot) milo@2566: { milo@2566: new weaponIndex; milo@2566: while ((weaponIndex = GetPlayerWeaponSlot(client, slot)) != -1) milo@2566: { milo@2566: RemovePlayerItem(client, weaponIndex); milo@2566: RemoveEdict(weaponIndex); milo@2566: } milo@2566: } milo@2566: milo@2566: /** milo@2566: * Removes all weapons from a client milo@2566: * milo@2566: * @param client Player's index. milo@2566: * @noreturn milo@2566: */ milo@2566: stock TF2_RemoveAllWeapons(client) milo@2566: { milo@2566: for (new i = 0; i <= 5; i++) milo@2566: { milo@2566: TF2_RemoveWeaponSlot(client, i); milo@2566: } milo@2566: } milo@2566: