amxmodx/modules/cstrike/cstrike/CstrikeItemsInfos.h
2018-08-25 09:20:06 +02:00

140 lines
2.9 KiB
C++

// vim: set ts=4 sw=4 tw=99 noet:
//
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team.
//
// This software is licensed under the GNU General Public License, version 3 or higher.
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
// https://alliedmods.net/amxmodx-license
//
// Counter-Strike Module
//
#ifndef _CSTRIKE_WEAPONS_INFOS_H_
#define _CSTRIKE_WEAPONS_INFOS_H_
#include <amxxmodule.h>
#include "CstrikeDatas.h"
#include <ITextParsers.h>
#include <amtl/am-string.h>
#include <sm_stringhashmap.h>
struct ItemInfos
{
ItemInfos() : name("Empty"), ammoIndex1(-1), maxAmmo1(0), ammoIndex2(-1), maxAmmo2(0), slot(0), position(0), id(0), flags(0)
{}
ItemInfos &operator = (ItemInfos &other)
{
name = other.name;
ammoIndex1 = other.ammoIndex1;
maxAmmo1 = other.maxAmmo1;
ammoIndex2 = other.ammoIndex2;
maxAmmo2 = other.maxAmmo2;
slot = other.slot;
position = other.position;
id = other.id;
flags = other.flags;
return *this;
}
ke::AString name;
int ammoIndex1;
int maxAmmo1;
int ammoIndex2;
int maxAmmo2;
int slot;
int position;
int id;
int flags;
};
struct AliasInfo
{
AliasInfo()
{
clear();
}
void clear()
{
itemid = CSI_NONE;
classid = CS_WEAPONCLASS_NONE;
classname = nullptr;
alt_alias = nullptr;
}
int itemid;
int classid;
ke::AString classname;
ke::AString alt_alias;
};
enum class Equipments
{
None,
Vest,
Vesthelm,
Flashbang,
HEGrenade,
SmokeGrenade,
Nvg,
Defuser,
Count
};
class CsItemInfo : public ITextListener_SMC
{
public:
CsItemInfo();
virtual ~CsItemInfo();
public:
void Clear();
bool HasConfigError();
public:
SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name) override;
SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value) override;
SMCResult ReadSMC_LeavingSection(const SMCStates *states) override;
void ReadSMC_ParseEnd(bool halted, bool failed) override;
public:
bool GetAliasInfos(const char *alias, AliasInfo *info);
bool GetAliasInfosFromName(const char *classname, AliasInfo *info);
bool GetAliasFromId(size_t id, ke::AString &name, ke::AString &altname);
CsWeaponClassType WeaponIdToClass(int id);
int GetItemPrice(int id);
private: // Retrieved datas
typedef StringHashMap<AliasInfo> AliasMap;
AliasMap m_BuyAliasesList;
AliasMap m_BuyAliasesAltList;
CsWeaponClassType m_WeaponIdToClass[CSI_MAX_COUNT];
private: // Config parsing
int m_ParseState;
ke::AString m_Alias;
ke::AString m_AliasAlt;
AliasInfo m_AliasInfo;
bool m_ListsRetrievedFromConfig;
int m_EquipmentsPrice[static_cast<size_t>(Equipments::Count)];
};
extern ItemInfos WeaponsList[MAX_WEAPONS];
extern CsItemInfo ItemsManager;
#endif // _CSTRIKE_WEAPONS_INFOS_H_