/* AMX Mod X * * by the AMX Mod X Development Team * originally developed by OLO * * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * In addition, as a special exception, the author gives permission to * link the code of this program with the Half-Life Game Engine ("HL * Engine") and Modified Game Libraries ("MODs") developed by Valve, * L.L.C ("Valve"). You must obey the GNU General Public License in all * respects for all of the code used other than the HL Engine and MODs * from Valve. If you modify this file, you may extend this exception * to your version of the file, but you are not obligated to do so. If * you do not wish to do so, delete this exception statement from your * version. */ #ifndef CMISC_H #define CMISC_H #include "CList.h" // ***************************************************** // class CCVar // ***************************************************** class CCVar { cvar_t cvar; String name; String plugin; public: CCVar(const char* pname, const char* pplugin, int pflags, float pvalue) : name(pname), plugin(pplugin) { cvar.name = (char*)name.c_str(); cvar.flags = pflags; cvar.string = ""; cvar.value = pvalue; } inline cvar_t* getCvar() { return &cvar; } inline const char* getPluginName() { return plugin.c_str(); } inline const char* getName() { return name.c_str(); } inline bool operator == (const char* string) { return (strcmp(name.c_str(),string)==0); } }; // ***************************************************** // class CPlayer // ***************************************************** struct ClientCvarQuery_Info { bool querying; // Are we actually waiting for a response at the moment? String cvarName; int resultFwd; int paramLen; cell *params; }; class CPlayer { public: edict_t* pEdict; String name; String ip; String team; bool initialized; bool ingame; bool bot; bool authorized; float time; float playtime; struct { int ammo; int clip; } weapons[MAX_WEAPONS]; int current; int teamId; int deaths; int aiming; int menu; int keys; int index; int flags[32]; int death_headshot; int death_killer; int death_victim; bool death_tk; String death_weapon; int newmenu; int page; Vector lastTrace; Vector thisTrace; Vector lastHit; CQueue cvarQueryQueue; void Init(edict_t* e, int i); void Disconnect(); void PutInServer(); bool Connect(const char* connectname, const char* ipaddress); inline bool IsBot() { return ((pEdict->v.flags & FL_FAKECLIENT) ? true : false); } inline bool IsAlive() { return ((pEdict->v.deadflag == DEAD_NO) && (pEdict->v.health > 0)); } inline void Authorize() { authorized = true; } }; // ***************************************************** // class Grenades // ***************************************************** class Grenades { struct Obj { CPlayer* player; edict_t* grenade; float time; int type; Obj* next; } *head; public: Grenades() { head = 0; } ~Grenades() { clear(); } void put(edict_t* grenade, float time, int type, CPlayer* player); bool find(edict_t* enemy, CPlayer** p, int& type); void clear(); }; // ***************************************************** // class ForceObject // ***************************************************** class ForceObject { String filename; FORCE_TYPE type; Vector mins; Vector maxs; AMX* amx; public: ForceObject(const char* n, FORCE_TYPE c, Vector& mi, Vector& ma, AMX* a) : filename(n), type(c), mins(mi), maxs(ma), amx(a) {} inline const char* getFilename() { return filename.c_str(); } inline AMX* getAMX() { return amx; } Vector& getMin() { return mins; } Vector& getMax() { return maxs; } inline FORCE_TYPE getForceType() { return type; } }; // ***************************************************** // class XVars // ***************************************************** class XVars { struct XVarEle { AMX* amx; cell* value; }; XVarEle* head; int size; int num; int realloc_array(int nsize); public: XVars() { num = 0; size = 0; head = 0; } ~XVars() { clear(); } void clear(); int put(AMX* a, cell* v); inline cell getValue(int a) { return (a >= 0 && a < num) ? *(head[a].value) : 0; } inline int setValue(int a, cell v) { if (a >= 0 && a < num) { *(head[a].value) = v; return 0; } return 1; } }; // ***************************************************** // class CScript // ***************************************************** class CScript { String filename; AMX* amx; void* code; public: CScript(AMX* aa, void* cc, const char* ff) : filename(ff), amx(aa), code(cc) { } inline AMX* getAMX() { return amx; } inline const char* getName() { return filename.c_str(); } inline bool operator==(void* a) { return (amx == (AMX*)a); } inline void* getCode() { return code; } }; // ***************************************************** // class TeamIds // ***************************************************** class TeamIds { struct TeamEle { String name; int id; char tid; static char uid; TeamEle* next; TeamEle(const char* n, int& i) : name(n), id(i), next(0) { tid = uid++; } ~TeamEle() { --uid; } } *head; int newTeam; public: TeamIds(); ~TeamIds(); void registerTeam(const char* n, int s); int findTeamId(const char* n); int findTeamIdCase(const char* n); inline bool isNewTeam() { return newTeam ? true : false; } }; #endif //CMISC_H