Added hitgroup API, and logging values for it. Knockback module is done.
This commit is contained in:
parent
648a875c14
commit
e7ace94625
70
cstrike/addons/sourcemod/configs/zr/hitgroups.txt
Normal file
70
cstrike/addons/sourcemod/configs/zr/hitgroups.txt
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
// Hitgroups
|
||||||
|
//
|
||||||
|
// Format
|
||||||
|
//
|
||||||
|
// "hitgroup index" // Index of the hitgroup (listed below)
|
||||||
|
// {
|
||||||
|
// "name" "name of hitgroup" // Redundant as of now, used for readability.
|
||||||
|
// "knockback" "1.0" (default) // The knockback multiplier for the hitgroup
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Notes:
|
||||||
|
//
|
||||||
|
// A missing config setting will be assumed to be its default value (documented above).
|
||||||
|
|
||||||
|
"hitgroups" // Counter-Strike: Source hitgroups
|
||||||
|
{
|
||||||
|
"0"
|
||||||
|
{
|
||||||
|
"name" "Generic"
|
||||||
|
"knockback" "1.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
"1"
|
||||||
|
{
|
||||||
|
"name" "Head"
|
||||||
|
"knockback" "2.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
"2"
|
||||||
|
{
|
||||||
|
"name" "Chest"
|
||||||
|
"knockback" "1.3"
|
||||||
|
}
|
||||||
|
|
||||||
|
"3"
|
||||||
|
{
|
||||||
|
"name" "Stomach"
|
||||||
|
"knockback" "1.2"
|
||||||
|
}
|
||||||
|
|
||||||
|
"4"
|
||||||
|
{
|
||||||
|
"name" "Left Arm"
|
||||||
|
"knockback" "1.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
"5"
|
||||||
|
{
|
||||||
|
"name" "Right Arm"
|
||||||
|
"knockback" "1.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
"6"
|
||||||
|
{
|
||||||
|
"name" "Left Leg"
|
||||||
|
"knockback" "0.9"
|
||||||
|
}
|
||||||
|
|
||||||
|
"7"
|
||||||
|
{
|
||||||
|
"name" "Right Leg"
|
||||||
|
"knockback" "0.9"
|
||||||
|
}
|
||||||
|
|
||||||
|
"10"
|
||||||
|
{
|
||||||
|
"name" "Gear"
|
||||||
|
"knockback" "1.0"
|
||||||
|
}
|
||||||
|
}
|
@ -36,6 +36,9 @@
|
|||||||
// Weapons
|
// Weapons
|
||||||
#include "zr/weapons/weapons"
|
#include "zr/weapons/weapons"
|
||||||
|
|
||||||
|
// Hitgroups
|
||||||
|
#include "zr/hitgroups"
|
||||||
|
|
||||||
// Knockback
|
// Knockback
|
||||||
#include "zr/knockback"
|
#include "zr/knockback"
|
||||||
|
|
||||||
@ -126,7 +129,8 @@ public OnMapStart()
|
|||||||
|
|
||||||
// Forward event to modules.
|
// Forward event to modules.
|
||||||
ClassLoad();
|
ClassLoad();
|
||||||
WeaponsOnMapStart();
|
WeaponsLoad();
|
||||||
|
HitgroupsLoad();
|
||||||
Anticamp_Startup();
|
Anticamp_Startup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,13 +240,15 @@ public Action:PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
|
|||||||
new index = GetClientOfUserId(GetEventInt(event, "userid"));
|
new index = GetClientOfUserId(GetEventInt(event, "userid"));
|
||||||
new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
|
new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
|
||||||
|
|
||||||
|
new hitgroup = GetEventInt(event, "hitgroup");
|
||||||
|
|
||||||
new dmg_health = GetEventInt(event, "dmg_health");
|
new dmg_health = GetEventInt(event, "dmg_health");
|
||||||
|
|
||||||
decl String:weapon[32];
|
decl String:weapon[32];
|
||||||
GetEventString(event, "weapon", weapon, sizeof(weapon));
|
GetEventString(event, "weapon", weapon, sizeof(weapon));
|
||||||
|
|
||||||
// Forward event to modules.
|
// Forward event to modules.
|
||||||
KnockbackPlayerHurt(index, attacker, weapon, dmg_health);
|
KnockbackPlayerHurt(index, attacker, weapon, hitgroup, dmg_health);
|
||||||
|
|
||||||
// Check if the attacker is a player.
|
// Check if the attacker is a player.
|
||||||
if (attacker != 0)
|
if (attacker != 0)
|
||||||
|
104
src/zr/hitgroups.inc
Normal file
104
src/zr/hitgroups.inc
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* ============================================================================
|
||||||
|
*
|
||||||
|
* Zombie:Reloaded
|
||||||
|
*
|
||||||
|
* File: hitgroup.inc
|
||||||
|
* Description: API for loading hitgroup specific settings.
|
||||||
|
* Author: Greyscale, Richard Helgeby
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array to store keyvalue data.
|
||||||
|
*/
|
||||||
|
new Handle:kvHitgroups = INVALID_HANDLE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @section Player hitgroup values.
|
||||||
|
*/
|
||||||
|
#define HITGROUP_GENERIC 0
|
||||||
|
#define HITGROUP_HEAD 1
|
||||||
|
#define HITGROUP_CHEST 2
|
||||||
|
#define HITGROUP_STOMACH 3
|
||||||
|
#define HITGROUP_LEFTARM 4
|
||||||
|
#define HITGROUP_RIGHTARM 5
|
||||||
|
#define HITGROUP_LEFTLEG 6
|
||||||
|
#define HITGROUP_RIGHTLEG 7
|
||||||
|
#define HITGROUP_GEAR 10
|
||||||
|
/**
|
||||||
|
* @endsection
|
||||||
|
*/
|
||||||
|
|
||||||
|
HitgroupsClearData()
|
||||||
|
{
|
||||||
|
// Load hitgroup data
|
||||||
|
if (kvHitgroups != INVALID_HANDLE)
|
||||||
|
{
|
||||||
|
CloseHandle(kvHitgroups);
|
||||||
|
}
|
||||||
|
|
||||||
|
kvHitgroups = CreateKeyValues("hitgroups");
|
||||||
|
}
|
||||||
|
|
||||||
|
HitgroupsLoad()
|
||||||
|
{
|
||||||
|
// Clear hitgroup data
|
||||||
|
HitgroupsClearData();
|
||||||
|
|
||||||
|
decl String:path[PLATFORM_MAX_PATH];
|
||||||
|
BuildPath(Path_SM, path, sizeof(path), "configs/zr/hitgroups.txt");
|
||||||
|
|
||||||
|
// If file isn't found, stop plugin
|
||||||
|
if (!FileToKeyValues(kvHitgroups, path))
|
||||||
|
{
|
||||||
|
if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_HITGROUPS))
|
||||||
|
{
|
||||||
|
ZR_LogMessageFormatted(-1, "Hitgroups", "Config Validation", "Missing file hitgroups.txt, disabling hitgroup-based modules.", LOG_FORMAT_TYPE_FULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate hitgroups config
|
||||||
|
HitgroupsValidateConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
HitgroupsValidateConfig()
|
||||||
|
{
|
||||||
|
// If log flag check fails, don't log
|
||||||
|
if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_HITGROUPS))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
KvRewind(kvHitgroups);
|
||||||
|
if (!KvGotoFirstSubKey(kvHitgroups))
|
||||||
|
{
|
||||||
|
ZR_LogMessageFormatted(-1, "Hitgroups", "Config Validation", "No hitgroups listed in hitgroups.txt, disabling hitgroup-based modules.", LOG_FORMAT_TYPE_FULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Float:HitgroupsGetHitgroupKnockback(hitgroup)
|
||||||
|
{
|
||||||
|
// Reset keyvalue's traversal stack.
|
||||||
|
KvRewind(kvHitgroups);
|
||||||
|
if (KvGotoFirstSubKey(kvHitgroups))
|
||||||
|
{
|
||||||
|
decl String:sHitgroup[4];
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
KvGetSectionName(kvHitgroups, sHitgroup, sizeof(sHitgroup));
|
||||||
|
|
||||||
|
// If this is the right hitgroup, then return knockback for it.
|
||||||
|
if (hitgroup == StringToInt(sHitgroup))
|
||||||
|
{
|
||||||
|
return KvGetFloat(kvHitgroups, "knockback", 1.0);
|
||||||
|
}
|
||||||
|
} while (KvGotoNextKey(kvHitgroups));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1.0;
|
||||||
|
}
|
@ -6,29 +6,14 @@
|
|||||||
* ====================
|
* ====================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @section Player hitgroup values.
|
|
||||||
*/
|
|
||||||
#define HITGROUP_GENERIC 0
|
|
||||||
#define HITGROUP_HEAD 1
|
|
||||||
#define HITGROUP_CHEST 2
|
|
||||||
#define HITGROUP_STOMACH 3
|
|
||||||
#define HITGROUP_LEFTARM 4
|
|
||||||
#define HITGROUP_RIGHTARM 5
|
|
||||||
#define HITGROUP_LEFTLEG 6
|
|
||||||
#define HITGROUP_RIGHTLEG 7
|
|
||||||
#define HITGROUP_GEAR 10
|
|
||||||
/**
|
|
||||||
* @endsection
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** Player hurt event
|
/** Player hurt event
|
||||||
* @param client The victim index. (zombie)
|
* @param client The victim index. (zombie)
|
||||||
* @param attacker The attacker index. (human)
|
* @param attacker The attacker index. (human)
|
||||||
* @param weapon The weapon used.
|
* @param weapon The weapon used.
|
||||||
|
* @param hitgroup Hitgroup attacker has damaged.
|
||||||
* @param dmg_health Damage done.
|
* @param dmg_health Damage done.
|
||||||
*/
|
*/
|
||||||
KnockbackPlayerHurt(client, attacker, const String:weapon[], dmg_health)
|
KnockbackPlayerHurt(client, attacker, const String:weapon[], hitgroup, dmg_health)
|
||||||
{
|
{
|
||||||
// Check if the attacker is a player.
|
// Check if the attacker is a player.
|
||||||
if (attacker != 0)
|
if (attacker != 0)
|
||||||
@ -68,14 +53,15 @@ KnockbackPlayerHurt(client, attacker, const String:weapon[], dmg_health)
|
|||||||
TR_GetEndPosition(clientloc);
|
TR_GetEndPosition(clientloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply damage knockback multiplier
|
|
||||||
knockback *= float(dmg_health);
|
|
||||||
|
|
||||||
// Retrieve weapon knockback boost.
|
// Retrieve weapon knockback boost.
|
||||||
new Float:boostWeapon = WeaponGetWeaponKnockback(weapon);
|
new Float:boostWeapon = WeaponGetWeaponKnockback(weapon);
|
||||||
|
|
||||||
// Apply weapon knockback multiplier.
|
// Retrieve hitgroup knockback boost.
|
||||||
knockback *= boostWeapon;
|
new Float:boostHitgroup = HitgroupsGetHitgroupKnockback(hitgroup);
|
||||||
|
|
||||||
|
// Apply all knockback multipliers
|
||||||
|
PrintToChatAll("Multipliers %f * %f * %f * %f", knockback, float(dmg_health), boostWeapon, boostHitgroup);
|
||||||
|
knockback *= float(dmg_health) * boostWeapon * boostHitgroup;
|
||||||
|
|
||||||
// Apply knockback.
|
// Apply knockback.
|
||||||
KnockbackSetVelocity(client, attackerloc, clientloc, knockback);
|
KnockbackSetVelocity(client, attackerloc, clientloc, knockback);
|
||||||
|
@ -126,14 +126,16 @@ RestrictDefaultRestrictions()
|
|||||||
*/
|
*/
|
||||||
RestrictValidateWeaponGroups()
|
RestrictValidateWeaponGroups()
|
||||||
{
|
{
|
||||||
// If log flag check fails, don't log
|
// If log flag check fails, don't log.
|
||||||
if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS))
|
if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset keygroup's traversal stack.
|
||||||
KvRewind(kvWeaponGroups);
|
KvRewind(kvWeaponGroups);
|
||||||
|
|
||||||
|
// Traverse into the keygroup. (weapon groups level)
|
||||||
if (KvGotoFirstSubKey(kvWeaponGroups))
|
if (KvGotoFirstSubKey(kvWeaponGroups))
|
||||||
{
|
{
|
||||||
decl String:weapongroup[WEAPONS_MAX_LENGTH];
|
decl String:weapongroup[WEAPONS_MAX_LENGTH];
|
||||||
@ -143,12 +145,14 @@ RestrictValidateWeaponGroups()
|
|||||||
{
|
{
|
||||||
KvGetSectionName(kvWeaponGroups, weapongroup, sizeof(weapongroup));
|
KvGetSectionName(kvWeaponGroups, weapongroup, sizeof(weapongroup));
|
||||||
|
|
||||||
|
// Traverse into the keygroup. (weapons level)
|
||||||
if (KvGotoFirstSubKey(kvWeaponGroups))
|
if (KvGotoFirstSubKey(kvWeaponGroups))
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
KvGetSectionName(kvWeaponGroups, groupweapon, sizeof(groupweapon));
|
KvGetSectionName(kvWeaponGroups, groupweapon, sizeof(groupweapon));
|
||||||
|
|
||||||
|
// If weapon is invalid, then log it.
|
||||||
if (!WeaponsIsValidWeapon(groupweapon))
|
if (!WeaponsIsValidWeapon(groupweapon))
|
||||||
{
|
{
|
||||||
ZR_LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "Invalid weapon \"%s\" in group \"%s\" configured in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, groupweapon, weapongroup);
|
ZR_LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "Invalid weapon \"%s\" in group \"%s\" configured in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, groupweapon, weapongroup);
|
||||||
@ -157,6 +161,7 @@ RestrictValidateWeaponGroups()
|
|||||||
|
|
||||||
KvGoBack(kvWeaponGroups);
|
KvGoBack(kvWeaponGroups);
|
||||||
}
|
}
|
||||||
|
// If it couldn't traverse to the weapons, then log no weapons within group.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ZR_LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "No weapons listed in weapon group \"%s\" in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, weapongroup);
|
ZR_LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "No weapons listed in weapon group \"%s\" in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, weapongroup);
|
||||||
|
@ -50,7 +50,7 @@ WeaponsClearData()
|
|||||||
/**
|
/**
|
||||||
* Loads weapon data from file.
|
* Loads weapon data from file.
|
||||||
*/
|
*/
|
||||||
WeaponsOnMapStart()
|
WeaponsLoad()
|
||||||
{
|
{
|
||||||
// Clear weapon data
|
// Clear weapon data
|
||||||
WeaponsClearData();
|
WeaponsClearData();
|
||||||
@ -73,13 +73,13 @@ WeaponsOnMapStart()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validate weapons config
|
// Validate weapons config
|
||||||
WeaponsValidateWeaponsConfig();
|
WeaponsValidateConfig();
|
||||||
|
|
||||||
// Forward event to sub-module
|
// Forward event to sub-module
|
||||||
RestrictOnMapStart();
|
RestrictOnMapStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
WeaponsValidateWeaponsConfig()
|
WeaponsValidateConfig()
|
||||||
{
|
{
|
||||||
// If log flag check fails, don't log
|
// If log flag check fails, don't log
|
||||||
if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS))
|
if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS))
|
||||||
|
@ -11,10 +11,9 @@ new curMenuClass[MAXPLAYERS + 1];
|
|||||||
|
|
||||||
bool:ZRAdminMenu(client)
|
bool:ZRAdminMenu(client)
|
||||||
{
|
{
|
||||||
if (!GetAdminFlag(GetUserAdmin(client), Admin_Generic))
|
if (!IsClientAdmin(client))
|
||||||
{
|
{
|
||||||
ZR_PrintToChat(client, "Must be admin");
|
ZR_PrintToChat(client, "Must be admin");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,6 +519,7 @@ ZRLogFlagsMenu(client)
|
|||||||
decl String:z_log_module_teleport[64];
|
decl String:z_log_module_teleport[64];
|
||||||
decl String:z_log_module_classes[64];
|
decl String:z_log_module_classes[64];
|
||||||
decl String:z_log_module_weapons[64];
|
decl String:z_log_module_weapons[64];
|
||||||
|
decl String:z_log_module_hitgroups[64];
|
||||||
decl String:z_log_module_commands[64];
|
decl String:z_log_module_commands[64];
|
||||||
decl String:z_log_module_anticamp[64];
|
decl String:z_log_module_anticamp[64];
|
||||||
decl String:z_log_module_damagecontrol[64];
|
decl String:z_log_module_damagecontrol[64];
|
||||||
@ -542,6 +542,7 @@ ZRLogFlagsMenu(client)
|
|||||||
Format(z_log_module_teleport, sizeof(z_log_module_teleport), "Teleporter (%d)", LogHasFlag(LOG_MODULE_TELEPORT));
|
Format(z_log_module_teleport, sizeof(z_log_module_teleport), "Teleporter (%d)", LogHasFlag(LOG_MODULE_TELEPORT));
|
||||||
Format(z_log_module_classes, sizeof(z_log_module_classes), "Classes (%d)", LogHasFlag(LOG_MODULE_CLASSES));
|
Format(z_log_module_classes, sizeof(z_log_module_classes), "Classes (%d)", LogHasFlag(LOG_MODULE_CLASSES));
|
||||||
Format(z_log_module_weapons, sizeof(z_log_module_weapons), "Weapons (%d)", LogHasFlag(LOG_MODULE_WEAPONS));
|
Format(z_log_module_weapons, sizeof(z_log_module_weapons), "Weapons (%d)", LogHasFlag(LOG_MODULE_WEAPONS));
|
||||||
|
Format(z_log_module_hitgroups, sizeof(z_log_module_hitgroups), "Hitgroups (%d)", LogHasFlag(LOG_MODULE_HITGROUPS));
|
||||||
Format(z_log_module_commands, sizeof(z_log_module_commands), "Admin commands (%d)", LogHasFlag(LOG_MODULE_COMMANDS));
|
Format(z_log_module_commands, sizeof(z_log_module_commands), "Admin commands (%d)", LogHasFlag(LOG_MODULE_COMMANDS));
|
||||||
Format(z_log_module_anticamp, sizeof(z_log_module_anticamp), "Anticamp (%d)", LogHasFlag(LOG_MODULE_ANTICAMP));
|
Format(z_log_module_anticamp, sizeof(z_log_module_anticamp), "Anticamp (%d)", LogHasFlag(LOG_MODULE_ANTICAMP));
|
||||||
Format(z_log_module_damagecontrol, sizeof(z_log_module_damagecontrol), "Damage control (suicides) (%d)", LogHasFlag(LOG_MODULE_DAMAGECONTROL));
|
Format(z_log_module_damagecontrol, sizeof(z_log_module_damagecontrol), "Damage control (suicides) (%d)", LogHasFlag(LOG_MODULE_DAMAGECONTROL));
|
||||||
@ -666,20 +667,25 @@ public ZRLogFlagsMenuHandle(Handle:menu_log_flags , MenuAction:action, client, s
|
|||||||
}
|
}
|
||||||
case 17:
|
case 17:
|
||||||
{
|
{
|
||||||
ToggleLogFlag(LOG_MODULE_COMMANDS);
|
ToggleLogFlag(LOG_MODULE_HITGROUPS);
|
||||||
ZRLogFlagsMenu(client);
|
ZRLogFlagsMenu(client);
|
||||||
}
|
}
|
||||||
case 18:
|
case 18:
|
||||||
{
|
{
|
||||||
ToggleLogFlag(LOG_MODULE_ANTICAMP);
|
ToggleLogFlag(LOG_MODULE_COMMANDS);
|
||||||
ZRLogFlagsMenu(client);
|
ZRLogFlagsMenu(client);
|
||||||
}
|
}
|
||||||
case 19:
|
case 19:
|
||||||
{
|
{
|
||||||
ToggleLogFlag(LOG_MODULE_DAMAGECONTROL);
|
ToggleLogFlag(LOG_MODULE_ANTICAMP);
|
||||||
ZRLogFlagsMenu(client);
|
ZRLogFlagsMenu(client);
|
||||||
}
|
}
|
||||||
case 20:
|
case 20:
|
||||||
|
{
|
||||||
|
ToggleLogFlag(LOG_MODULE_DAMAGECONTROL);
|
||||||
|
ZRLogFlagsMenu(client);
|
||||||
|
}
|
||||||
|
case 21:
|
||||||
{
|
{
|
||||||
ToggleLogFlag(LOG_MODULE_OFFSETS);
|
ToggleLogFlag(LOG_MODULE_OFFSETS);
|
||||||
ZRLogFlagsMenu(client);
|
ZRLogFlagsMenu(client);
|
||||||
|
@ -55,9 +55,10 @@ enum ZTeam
|
|||||||
#define LOG_MODULE_OVERLAYS 65536 /** overlays.inc */
|
#define LOG_MODULE_OVERLAYS 65536 /** overlays.inc */
|
||||||
#define LOG_MODULE_TELEPORT 131072 /** teleport.inc */
|
#define LOG_MODULE_TELEPORT 131072 /** teleport.inc */
|
||||||
#define LOG_MODULE_WEAPONS 262144 /** Weapons module - weapons/ *.inc */
|
#define LOG_MODULE_WEAPONS 262144 /** Weapons module - weapons/ *.inc */
|
||||||
#define LOG_MODULE_ANTICAMP 524288 /** anticamp.inc */
|
#define LOG_MODULE_HITGROUPS 524288 /** hitgroups.inc */
|
||||||
#define LOG_MODULE_DAMAGECONTROL 1048576 /** damagecontrol.inc */
|
#define LOG_MODULE_ANTICAMP 1048576 /** anticamp.inc */
|
||||||
#define LOG_MODULE_OFFSETS 2097152 /** offsets.inc */
|
#define LOG_MODULE_DAMAGECONTROL 2097152 /** damagecontrol.inc */
|
||||||
|
#define LOG_MODULE_OFFSETS 4194304 /** offsets.inc */
|
||||||
/*
|
/*
|
||||||
* @endsection
|
* @endsection
|
||||||
*/
|
*/
|
||||||
@ -248,3 +249,21 @@ bool:IsClientPlayer(client)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether a player is a generic admin or not.
|
||||||
|
*
|
||||||
|
* @param client The client index.
|
||||||
|
* @return True if generic admin, false otherwise.
|
||||||
|
*/
|
||||||
|
bool:IsClientAdmin(client)
|
||||||
|
{
|
||||||
|
if (GetAdminFlag(GetUserAdmin(client), Admin_Generic))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user