Weapons module added, still needs better validations
This commit is contained in:
186
src/zr/weapons/weapons.inc
Normal file
186
src/zr/weapons/weapons.inc
Normal file
@ -0,0 +1,186 @@
|
||||
/**
|
||||
* ====================
|
||||
* Zombie:Reloaded
|
||||
* File: weapons.inc
|
||||
* Author: Greyscale
|
||||
* ====================
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handle to store trie weapon data
|
||||
*/
|
||||
new Handle:trieWeapons = INVALID_HANDLE;
|
||||
|
||||
/**
|
||||
* Maximum length of a weapon name string
|
||||
*/
|
||||
#define WEAPONS_MAX_LENGTH 32
|
||||
|
||||
/**
|
||||
* @section Config array indexes.
|
||||
*/
|
||||
#define WEAPON_RESTRICT 0
|
||||
#define WEAPON_MENU 1
|
||||
/**
|
||||
* @endsection
|
||||
*/
|
||||
|
||||
/**
|
||||
* Array to store keyvalue data.
|
||||
*/
|
||||
new Handle:kvWeapons = INVALID_HANDLE;
|
||||
|
||||
#include "zr/weapons/restrict"
|
||||
#include "zr/weapons/markethandler"
|
||||
#include "zr/weapons/menu_weapons"
|
||||
|
||||
/**
|
||||
* Loads weapon data from file.
|
||||
*/
|
||||
WeaponsOnMapStart()
|
||||
{
|
||||
// Destroy trie data if populated
|
||||
if (trieWeapons != INVALID_HANDLE)
|
||||
{
|
||||
CloseHandle(trieWeapons);
|
||||
}
|
||||
|
||||
// Create trie to store weapon data
|
||||
trieWeapons = CreateTrie();
|
||||
|
||||
// Load weapon data
|
||||
if (kvWeapons != INVALID_HANDLE)
|
||||
{
|
||||
CloseHandle(kvWeapons);
|
||||
}
|
||||
|
||||
kvWeapons = CreateKeyValues("weapons");
|
||||
|
||||
decl String:path[PLATFORM_MAX_PATH];
|
||||
BuildPath(Path_SM, path, sizeof(path), "configs/zr/weapons/weapons.txt");
|
||||
|
||||
// If file isn't found, stop plugin
|
||||
if (!FileToKeyValues(kvWeapons, path))
|
||||
{
|
||||
SetFailState("\"%s\" missing from server", path);
|
||||
}
|
||||
|
||||
KvRewind(kvWeapons);
|
||||
if (KvGotoFirstSubKey(kvWeapons))
|
||||
{
|
||||
decl String:weapon[WEAPONS_MAX_LENGTH];
|
||||
decl String:restrict[8];
|
||||
decl String:menu[8];
|
||||
|
||||
do
|
||||
{
|
||||
KvGetSectionName(kvWeapons, weapon, sizeof(weapon));
|
||||
KvGetString(kvWeapons, "restrict", restrict, sizeof(restrict), "no");
|
||||
KvGetString(kvWeapons, "menu", menu, sizeof(menu), "yes");
|
||||
|
||||
new bool:config[2];
|
||||
config[WEAPON_RESTRICT] = ConfigOptionToBool(restrict);
|
||||
config[WEAPON_MENU] = ConfigOptionToBool(menu);
|
||||
|
||||
SetTrieArray(trieWeapons, weapon, config, sizeof(config), false);
|
||||
|
||||
} while (KvGotoNextKey(kvWeapons));
|
||||
}
|
||||
|
||||
// Weapon restrict
|
||||
WeaponRestrictOnMapStart();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array of all listed weapons in weapons.txt.
|
||||
* @param arrayWeapons The handle of the array, don't forget to call CloseHandle
|
||||
* on it when finished!
|
||||
* @return The size of the array.
|
||||
*/
|
||||
WeaponsCreateWeaponArray(&Handle:arrayWeapons, maxlen = WEAPONS_MAX_LENGTH)
|
||||
{
|
||||
arrayWeapons = CreateArray(maxlen);
|
||||
new count = 0;
|
||||
|
||||
KvRewind(kvWeapons);
|
||||
if (KvGotoFirstSubKey(kvWeapons))
|
||||
{
|
||||
decl String:weapon[maxlen];
|
||||
|
||||
do
|
||||
{
|
||||
KvGetSectionName(kvWeapons, weapon, maxlen);
|
||||
|
||||
PushArrayString(arrayWeapons, weapon);
|
||||
count++;
|
||||
} while (KvGotoNextKey(kvWeapons));
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array of all listed weapon groups in weapongroups.txt.
|
||||
* @param arrayWeaponGroups The handle of the array, don't forget to call CloseHandle
|
||||
* on it when finished!
|
||||
* @return The size of the array.
|
||||
*/
|
||||
WeaponsCreateWeaponGroupArray(&Handle:arrayWeaponGroups, maxlen = WEAPONS_MAX_LENGTH)
|
||||
{
|
||||
arrayWeaponGroups = CreateArray(maxlen);
|
||||
new count = 0;
|
||||
|
||||
KvRewind(kvWeaponGroups);
|
||||
if (KvGotoFirstSubKey(kvWeaponGroups))
|
||||
{
|
||||
decl String:weapongroup[maxlen];
|
||||
|
||||
do
|
||||
{
|
||||
KvGetSectionName(kvWeaponGroups, weapongroup, maxlen);
|
||||
|
||||
PushArrayString(arrayWeaponGroups, weapongroup);
|
||||
count++;
|
||||
} while (KvGotoNextKey(kvWeaponGroups));
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a weapon is valid (aka listed in weapons.txt)
|
||||
* @param weapon The weapon name.
|
||||
* @return Returns true if valid, false it not.
|
||||
*/
|
||||
bool:WeaponsIsValidWeapon(const String:weapon[])
|
||||
{
|
||||
new bool:config[2];
|
||||
|
||||
return GetTrieArray(trieWeapons, weapon, config, sizeof(config));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a weapon is restricted by default.
|
||||
* @param weapon The weapon name.
|
||||
* @return Returns true if restricted, false it not.
|
||||
*/
|
||||
bool:WeaponsIsWeaponRestrict(const String:weapon[])
|
||||
{
|
||||
new bool:config[2];
|
||||
GetTrieArray(trieWeapons, weapon, config, sizeof(config));
|
||||
|
||||
return config[WEAPON_RESTRICT];
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a weapon restriction can be toggled by the admin menu.
|
||||
* @param weapon The weapon name.
|
||||
* @return Returns true if restricted, false it not.
|
||||
*/
|
||||
bool:WeaponsIsWeaponMenu(const String:weapon[])
|
||||
{
|
||||
new bool:config[2];
|
||||
GetTrieArray(trieWeapons, weapon, config, sizeof(config));
|
||||
|
||||
return config[WEAPON_MENU];
|
||||
}
|
Reference in New Issue
Block a user