First draft of immunity modes. Compiles, but class commands and class editor is not updated.
This commit is contained in:
parent
f2044c8d9b
commit
cd604c2f95
@ -32,8 +32,17 @@
|
|||||||
// fov number Field of view value. 90 is default.
|
// fov number Field of view value. 90 is default.
|
||||||
// has_napalm yes/no Allows player to throw napalm grenades. Humans only.
|
// has_napalm yes/no Allows player to throw napalm grenades. Humans only.
|
||||||
// napalm_time decimal Napalm burn duration. Zombies only.
|
// napalm_time decimal Napalm burn duration. Zombies only.
|
||||||
// immunity_mode number Sets the immunity mode.
|
// immunity_mode test How the human is infected (humans only):
|
||||||
// immunity_amount decimal Sets the immunity value.
|
// "none" - Instant infection.
|
||||||
|
// "full" - Immune to infection. Careful with this, it might not be that fun.
|
||||||
|
// "damage" - Allow zombies to stab humans to death, or below a HP threshold.
|
||||||
|
// "delay" - Delay infection for a certain number of seconds.
|
||||||
|
// "shield" - Allow human to deploy a shield that will give a temporary full immunity against infections.
|
||||||
|
// immunity_amount number Immunity data value (humans only). Depends on the immunity mode above:
|
||||||
|
// "damage" - HP threshold. Infection will be allowed when HP go below this value. Zero will enable stabbing to death.
|
||||||
|
// "delay" - Number of seconds the infection is delayed since first hit by a zombie.
|
||||||
|
// "shield" - Number of seconds the shield is active.
|
||||||
|
// immunity_cooldown number Number of seconds of cooldown for temporary immunity effects (currently just shield mode).
|
||||||
// no_fall_damage on/off Disables fall damage.
|
// no_fall_damage on/off Disables fall damage.
|
||||||
// health number How many health points to give.
|
// health number How many health points to give.
|
||||||
// health_regen_interval decimal Sets the regeneration interval. 0 to disable.
|
// health_regen_interval decimal Sets the regeneration interval. 0 to disable.
|
||||||
@ -79,9 +88,9 @@
|
|||||||
"has_napalm" "no"
|
"has_napalm" "no"
|
||||||
"napalm_time" "10.0"
|
"napalm_time" "10.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "2500"
|
"health" "2500"
|
||||||
@ -123,9 +132,9 @@
|
|||||||
"has_napalm" "no"
|
"has_napalm" "no"
|
||||||
"napalm_time" "5.0"
|
"napalm_time" "5.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "2000"
|
"health" "2000"
|
||||||
@ -167,9 +176,9 @@
|
|||||||
"has_napalm" "no"
|
"has_napalm" "no"
|
||||||
"napalm_time" "15.0"
|
"napalm_time" "15.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "3500"
|
"health" "3500"
|
||||||
@ -211,9 +220,9 @@
|
|||||||
"has_napalm" "no"
|
"has_napalm" "no"
|
||||||
"napalm_time" "20.0"
|
"napalm_time" "20.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "4000"
|
"health" "4000"
|
||||||
@ -255,9 +264,9 @@
|
|||||||
"has_napalm" "0"
|
"has_napalm" "0"
|
||||||
"napalm_time" "5.0"
|
"napalm_time" "5.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "2500"
|
"health" "2500"
|
||||||
@ -299,9 +308,9 @@
|
|||||||
"has_napalm" "no"
|
"has_napalm" "no"
|
||||||
"napalm_time" "3.0"
|
"napalm_time" "3.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "3500"
|
"health" "3500"
|
||||||
@ -349,9 +358,9 @@
|
|||||||
"has_napalm" "yes"
|
"has_napalm" "yes"
|
||||||
"napalm_time" "0.0"
|
"napalm_time" "0.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "no"
|
"no_fall_damage" "no"
|
||||||
|
|
||||||
"health" "100"
|
"health" "100"
|
||||||
@ -393,9 +402,9 @@
|
|||||||
"has_napalm" "yes"
|
"has_napalm" "yes"
|
||||||
"napalm_time" "0.0"
|
"napalm_time" "0.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "200"
|
"health" "200"
|
||||||
@ -437,9 +446,9 @@
|
|||||||
"has_napalm" "yes"
|
"has_napalm" "yes"
|
||||||
"napalm_time" "0.0"
|
"napalm_time" "0.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "200"
|
"health" "200"
|
||||||
@ -481,9 +490,9 @@
|
|||||||
"has_napalm" "no"
|
"has_napalm" "no"
|
||||||
"napalm_time" "0.0"
|
"napalm_time" "0.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "0"
|
"no_fall_damage" "0"
|
||||||
|
|
||||||
"health" "100"
|
"health" "100"
|
||||||
@ -525,9 +534,9 @@
|
|||||||
"has_napalm" "yes"
|
"has_napalm" "yes"
|
||||||
"napalm_time" "0.0"
|
"napalm_time" "0.0"
|
||||||
|
|
||||||
// Player behaviour
|
// Player behavior
|
||||||
"immunity_mode" "0"
|
"immunity_mode" "none"
|
||||||
"immunity_amount" "0.0"
|
"immunity_amount" "0"
|
||||||
"no_fall_damage" "yes"
|
"no_fall_damage" "yes"
|
||||||
|
|
||||||
"health" "100"
|
"health" "100"
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
// Header includes.
|
// Header includes.
|
||||||
#include "zr/log.h"
|
#include "zr/log.h"
|
||||||
#include "zr/models.h"
|
#include "zr/models.h"
|
||||||
|
#include "zr/immunityhandler.h"
|
||||||
|
|
||||||
#if defined ADD_VERSION_INFO
|
#if defined ADD_VERSION_INFO
|
||||||
#include "zr/hgversion.h"
|
#include "zr/hgversion.h"
|
||||||
@ -89,6 +90,7 @@
|
|||||||
#include "zr/roundstart"
|
#include "zr/roundstart"
|
||||||
#include "zr/roundend"
|
#include "zr/roundend"
|
||||||
#include "zr/infect"
|
#include "zr/infect"
|
||||||
|
#include "zr/immunityhandler"
|
||||||
#include "zr/damage"
|
#include "zr/damage"
|
||||||
#include "zr/event"
|
#include "zr/event"
|
||||||
#include "zr/zadmin"
|
#include "zr/zadmin"
|
||||||
|
41
src/zr/immunityhandler.h.inc
Normal file
41
src/zr/immunityhandler.h.inc
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* ============================================================================
|
||||||
|
*
|
||||||
|
* Zombie:Reloaded
|
||||||
|
*
|
||||||
|
* File: immunityhandler.h.inc
|
||||||
|
* Type: Header
|
||||||
|
* Description: Immunity modes.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2013 Greyscale, Richard Helgeby
|
||||||
|
*
|
||||||
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Immunity modes.
|
||||||
|
*/
|
||||||
|
enum ImmunityMode
|
||||||
|
{
|
||||||
|
Immunity_Invalid = -1, /** Invalid immunity mode. Used by validators. */
|
||||||
|
Immunity_None, /** No immunity mode. */
|
||||||
|
|
||||||
|
Immunity_Full, /** Completely immune. Humans can't be infected, zombies don't receive damage or knock back. Admin commands may override this. */
|
||||||
|
Immunity_Infect, /** Humans are immune to infections until HP go below a threshold. Threshold at zero enable stabbing to death. */
|
||||||
|
Immunity_Damage, /** Zombies are immune to damage from humans/grenades, but still vulnerable to knock back. */
|
||||||
|
Immunity_Delay, /** Delay infection for a certain amount of seconds. */
|
||||||
|
Immunity_Shield /** Shield against infections (humans) or knock back (zombies) for a certain amount of seconds (similar to TF2's übercharge). */
|
||||||
|
}
|
234
src/zr/immunityhandler.inc
Normal file
234
src/zr/immunityhandler.inc
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
/*
|
||||||
|
* ============================================================================
|
||||||
|
*
|
||||||
|
* Zombie:Reloaded
|
||||||
|
*
|
||||||
|
* File: immunityhandler.inc
|
||||||
|
* Type: Core module
|
||||||
|
* Description: Manages infection immunity modes for every player.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2013 Greyscale, Richard Helgeby
|
||||||
|
*
|
||||||
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* ============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current immunity modes.
|
||||||
|
*/
|
||||||
|
new ImmunityMode:PlayerImmunityMode[MAXPLAYERS + 1] = {Immunity_None, ...};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timers for handling timed immunity actions.
|
||||||
|
*/
|
||||||
|
new Handle:PlayerImmunityTimer[MAXPLAYERS + 1] = {INVALID_HANDLE, ...};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last time a temporary immunity action was used (currently just shield mode).
|
||||||
|
* Used with cooldown of actions.
|
||||||
|
*/
|
||||||
|
new PlayerImmunityLastUse[MAXPLAYERS + 1] = {-1, ...};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles immunity when a client is about to be infected. This function may
|
||||||
|
* delay or block infection according to the immunity mode class settings.
|
||||||
|
*
|
||||||
|
* @param client Client that's being infected.
|
||||||
|
*
|
||||||
|
* @return True if infection will be handled by this module, false if
|
||||||
|
* infection can be applied instantly.
|
||||||
|
*/
|
||||||
|
bool:ImmunityOnClientInfect(client)
|
||||||
|
{
|
||||||
|
// Get immunity data from client class.
|
||||||
|
new ImmunityMode:mode = ClassGetImmunityMode(client);
|
||||||
|
|
||||||
|
// Check mode.
|
||||||
|
switch(mode)
|
||||||
|
{
|
||||||
|
case Immunity_None:
|
||||||
|
{
|
||||||
|
// Instant infection.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
case Immunity_Full:
|
||||||
|
{
|
||||||
|
// Full immunity, do nothing.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case Immunity_Damage:
|
||||||
|
{
|
||||||
|
return ImmunityDamageModeHandler(client);
|
||||||
|
}
|
||||||
|
case Immunity_Delay:
|
||||||
|
{
|
||||||
|
return ImmunityDelayModeHandler(client);
|
||||||
|
}
|
||||||
|
case Immunity_Shield:
|
||||||
|
{
|
||||||
|
return ImmunityShieldModeHandler(client);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
ThrowError("Invalid immunity mode. This is a bug in ZR.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Client is about to receive damage (zombie).
|
||||||
|
*
|
||||||
|
* @param Client that's receiving damage.
|
||||||
|
*
|
||||||
|
* @return True if damage should be blocked, false otherwise.
|
||||||
|
*/
|
||||||
|
bool:ImmunityOnClientHurt(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Client is about to receive knock back (zombie).
|
||||||
|
*
|
||||||
|
* @param Client that's receiving knock back.
|
||||||
|
*
|
||||||
|
* @return True if knock back should be blocked, false otherwise.
|
||||||
|
*/
|
||||||
|
bool:ImmunityOnClientKnockBack(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles damage mode immunity.
|
||||||
|
*
|
||||||
|
* @param client Client that's being infected.
|
||||||
|
*
|
||||||
|
* @return True if infection will be handled by this module, false if
|
||||||
|
* infection can be applied instantly.
|
||||||
|
*/
|
||||||
|
bool:ImmunityDamageModeHandler(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles delayed infections.
|
||||||
|
*
|
||||||
|
* @param client Client that's being infected.
|
||||||
|
*
|
||||||
|
* @return True if infection will be handled by this module, false if
|
||||||
|
* infection can be applied instantly.
|
||||||
|
*/
|
||||||
|
bool:ImmunityDelayModeHandler(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles shield mode immunity.
|
||||||
|
*
|
||||||
|
* @param client Client that's being infected.
|
||||||
|
*
|
||||||
|
* @return True if infection will be handled by this module, false if
|
||||||
|
* infection can be applied instantly.
|
||||||
|
*/
|
||||||
|
bool:ImmunityShieldModeHandler(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Aborts any immunity mode in action (shields, delays, etc.).
|
||||||
|
*
|
||||||
|
* @param client Client that's aborting immunity mode actions.
|
||||||
|
*/
|
||||||
|
ImmunityAbortHandler(client)
|
||||||
|
{
|
||||||
|
// TODO: Stop timers, disable shield.
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityAbortAll()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityOnClientHuman(client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityOnClientDeath(client, attacker)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityClientInit(client)
|
||||||
|
{
|
||||||
|
// Abord old actions, initialize variables.
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityOnClientDisconnect(client, attacker)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityOnClientTeam(client, team)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityOnRoundEnd()
|
||||||
|
{
|
||||||
|
ImmunityAbortAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmunityOnMapEnd()
|
||||||
|
{
|
||||||
|
ImmunityAbortAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a string to an immunity mode.
|
||||||
|
*
|
||||||
|
* @param mode String to convert.
|
||||||
|
*
|
||||||
|
* @return Immunity mode or Immunity_Invalid on error.
|
||||||
|
*/
|
||||||
|
ImmunityMode:ImmunityStringToMode(const String:mode[])
|
||||||
|
{
|
||||||
|
if (strlen(mode) == 0)
|
||||||
|
{
|
||||||
|
return Immunity_Invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrEqual(mode, "none", false))
|
||||||
|
{
|
||||||
|
return Immunity_None;
|
||||||
|
}
|
||||||
|
else if (StrEqual(mode, "full", false))
|
||||||
|
{
|
||||||
|
return Immunity_Full;
|
||||||
|
}
|
||||||
|
else if (StrEqual(mode, "infect", false))
|
||||||
|
{
|
||||||
|
return Immunity_Infect;
|
||||||
|
}
|
||||||
|
else if (StrEqual(mode, "damage", false))
|
||||||
|
{
|
||||||
|
return Immunity_Damage;
|
||||||
|
}
|
||||||
|
else if (StrEqual(mode, "delay", false))
|
||||||
|
{
|
||||||
|
return Immunity_Delay;
|
||||||
|
}
|
||||||
|
else if (StrEqual(mode, "shield", false))
|
||||||
|
{
|
||||||
|
return Immunity_Shield;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Immunity_Invalid;
|
||||||
|
}
|
@ -640,7 +640,7 @@ stock Float:ClassGetNapalmTime(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the immunity mode to the specified class.
|
* Gets the immunity mode for the specified class.
|
||||||
*
|
*
|
||||||
* @param index Index of the class in a class cache or a client index,
|
* @param index Index of the class in a class cache or a client index,
|
||||||
* depending on the cache type specified.
|
* depending on the cache type specified.
|
||||||
@ -649,9 +649,10 @@ stock Float:ClassGetNapalmTime(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
|||||||
* ZR_CLASS_CACHE_MODIFIED - Changed/newest class data.
|
* ZR_CLASS_CACHE_MODIFIED - Changed/newest class data.
|
||||||
* ZR_CLASS_CACHE_PLAYER (default) - Player cache. If this one
|
* ZR_CLASS_CACHE_PLAYER (default) - Player cache. If this one
|
||||||
* is used, index will be used as a client index.
|
* is used, index will be used as a client index.
|
||||||
* @return Current immunity mode to the specified class. -1 on error.
|
* @return Current immunity mode to the specified class. Immunity_Invalid on
|
||||||
|
* error.
|
||||||
*/
|
*/
|
||||||
stock ClassGetImmunityMode(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
stock ImmunityMode:ClassGetImmunityMode(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
||||||
{
|
{
|
||||||
switch (cachetype)
|
switch (cachetype)
|
||||||
{
|
{
|
||||||
@ -668,11 +669,11 @@ stock ClassGetImmunityMode(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
|||||||
return ClassPlayerCache[index][Class_ImmunityMode];
|
return ClassPlayerCache[index][Class_ImmunityMode];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return Immunity_Invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the immunity amount to the specified class.
|
* Gets the immunity amount for the specified class.
|
||||||
*
|
*
|
||||||
* @param index Index of the class in a class cache or a client index,
|
* @param index Index of the class in a class cache or a client index,
|
||||||
* depending on the cache type specified.
|
* depending on the cache type specified.
|
||||||
@ -681,9 +682,9 @@ stock ClassGetImmunityMode(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
|||||||
* ZR_CLASS_CACHE_MODIFIED - Changed/newest class data.
|
* ZR_CLASS_CACHE_MODIFIED - Changed/newest class data.
|
||||||
* ZR_CLASS_CACHE_PLAYER (default) - Player cache. If this one
|
* ZR_CLASS_CACHE_PLAYER (default) - Player cache. If this one
|
||||||
* is used, index will be used as a client index.
|
* is used, index will be used as a client index.
|
||||||
* @return Current immunity amount to the specified class. -1.0 on error.
|
* @return Current immunity amount fot the specified class. -1 on error.
|
||||||
*/
|
*/
|
||||||
stock Float:ClassGetImmunityAmount(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
stock ClassGetImmunityAmount(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
||||||
{
|
{
|
||||||
switch (cachetype)
|
switch (cachetype)
|
||||||
{
|
{
|
||||||
@ -700,7 +701,39 @@ stock Float:ClassGetImmunityAmount(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
|||||||
return ClassPlayerCache[index][Class_ImmunityAmount];
|
return ClassPlayerCache[index][Class_ImmunityAmount];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1.0;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the immunity cooldown for the specified class.
|
||||||
|
*
|
||||||
|
* @param index Index of the class in a class cache or a client index,
|
||||||
|
* depending on the cache type specified.
|
||||||
|
* @param cachetype Optional. Specifies what class cache to read from. Options:
|
||||||
|
* ZR_CLASS_CACHE_ORIGINAL - Unchanced class data.
|
||||||
|
* ZR_CLASS_CACHE_MODIFIED - Changed/newest class data.
|
||||||
|
* ZR_CLASS_CACHE_PLAYER (default) - Player cache. If this one
|
||||||
|
* is used, index will be used as a client index.
|
||||||
|
* @return Current immunity cooldown for the specified class. -1 on error.
|
||||||
|
*/
|
||||||
|
stock ClassGetImmunityCooldown(index, cachetype = ZR_CLASS_CACHE_PLAYER)
|
||||||
|
{
|
||||||
|
switch (cachetype)
|
||||||
|
{
|
||||||
|
case ZR_CLASS_CACHE_ORIGINAL:
|
||||||
|
{
|
||||||
|
return ClassData[index][Class_ImmunityCooldown];
|
||||||
|
}
|
||||||
|
case ZR_CLASS_CACHE_MODIFIED:
|
||||||
|
{
|
||||||
|
return ClassDataCache[index][Class_ImmunityCooldown];
|
||||||
|
}
|
||||||
|
case ZR_CLASS_CACHE_PLAYER:
|
||||||
|
{
|
||||||
|
return ClassPlayerCache[index][Class_ImmunityCooldown];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,8 +103,6 @@ stock bool:ClassValidateTeamDefaults(cachetype = ZR_CLASS_CACHE_ORIGINAL)
|
|||||||
*/
|
*/
|
||||||
stock ClassValidateAttributes(classindex, bool:logErrors = false)
|
stock ClassValidateAttributes(classindex, bool:logErrors = false)
|
||||||
{
|
{
|
||||||
// TODO: Validate immunity mode and amount.
|
|
||||||
|
|
||||||
new flags;
|
new flags;
|
||||||
|
|
||||||
// Team.
|
// Team.
|
||||||
@ -287,8 +285,19 @@ stock ClassValidateAttributes(classindex, bool:logErrors = false)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Immunity mode (not implemented).
|
// Immunity mode.
|
||||||
|
new ImmunityMode:immunityMode = ClassData[classindex][Class_ImmunityMode];
|
||||||
|
if (immunityMode == Immunity_Invalid)
|
||||||
|
{
|
||||||
|
flags += ZR_CLASS_IMMUNITY_MODE;
|
||||||
|
if (logErrors)
|
||||||
|
{
|
||||||
|
LogEvent(false, LogType_Error, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Warning: Invalid immunity_mode at index %d.", classindex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Immunity amount.
|
||||||
|
// TODO: Validate amount value. This depends on the immunity mode.
|
||||||
|
|
||||||
// Health.
|
// Health.
|
||||||
new health = ClassData[classindex][Class_Health];
|
new health = ClassData[classindex][Class_Health];
|
||||||
@ -484,7 +493,15 @@ stock ClassValidateEditableAttributes(attributes[ClassEditableAttributes])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Immunity mode not implemented yet.
|
// Immunity mode.
|
||||||
|
new ImmunityMode:immunityMode = attributes[ClassEdit_ImmunityMode];
|
||||||
|
if (immunityMode == Immunity_Invalid)
|
||||||
|
{
|
||||||
|
flags += ZR_CLASS_IMMUNITY_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Immunity amount.
|
||||||
|
// TODO: Validate amount value. This depends on the immunity mode.
|
||||||
|
|
||||||
// Health regen interval.
|
// Health regen interval.
|
||||||
new Float:healthRegenInterval = attributes[ClassEdit_RegenInterval];
|
new Float:healthRegenInterval = attributes[ClassEdit_RegenInterval];
|
||||||
|
@ -115,8 +115,9 @@
|
|||||||
#define ZR_CLASS_DEFAULT_FOV 90
|
#define ZR_CLASS_DEFAULT_FOV 90
|
||||||
#define ZR_CLASS_DEFAULT_HAS_NAPALM "no"
|
#define ZR_CLASS_DEFAULT_HAS_NAPALM "no"
|
||||||
#define ZR_CLASS_DEFAULT_NAPALM_TIME 10.0
|
#define ZR_CLASS_DEFAULT_NAPALM_TIME 10.0
|
||||||
#define ZR_CLASS_DEFAULT_IMMUNITY_MODE ZR_CLASS_IMMUNITY_DISABLED
|
#define ZR_CLASS_DEFAULT_IMMUNITY_MODE "none"
|
||||||
#define ZR_CLASS_DEFAULT_IMMUNITY_AMOUNT 0.0
|
#define ZR_CLASS_DEFAULT_IMMUNITY_AMOUNT 1
|
||||||
|
#define ZR_CLASS_DEFAULT_IMMUNITY_COOLDOWN 60
|
||||||
#define ZR_CLASS_DEFAULT_NO_FALL_DAMAGE "yes"
|
#define ZR_CLASS_DEFAULT_NO_FALL_DAMAGE "yes"
|
||||||
#define ZR_CLASS_DEFAULT_HEALTH 6000
|
#define ZR_CLASS_DEFAULT_HEALTH 6000
|
||||||
#define ZR_CLASS_DEFAULT_HEALTH_REGEN_INTERVAL 0.0
|
#define ZR_CLASS_DEFAULT_HEALTH_REGEN_INTERVAL 0.0
|
||||||
@ -152,6 +153,8 @@
|
|||||||
#define ZR_CLASS_FOV_MAX 165
|
#define ZR_CLASS_FOV_MAX 165
|
||||||
#define ZR_CLASS_NAPALM_TIME_MIN 0.0
|
#define ZR_CLASS_NAPALM_TIME_MIN 0.0
|
||||||
#define ZR_CLASS_NAPALM_TIME_MAX 600.0
|
#define ZR_CLASS_NAPALM_TIME_MAX 600.0
|
||||||
|
#define ZR_CLASS_IMMUNITY_COOLDOWN_MIN 0
|
||||||
|
#define ZR_CLASS_IMMUNITY_COOLDOWN_MAX 600
|
||||||
#define ZR_CLASS_HEALTH_MIN 1
|
#define ZR_CLASS_HEALTH_MIN 1
|
||||||
#define ZR_CLASS_HEALTH_MAX 20000
|
#define ZR_CLASS_HEALTH_MAX 20000
|
||||||
#define ZR_CLASS_REGEN_INTERVAL_MIN 0.0
|
#define ZR_CLASS_REGEN_INTERVAL_MIN 0.0
|
||||||
@ -198,16 +201,17 @@
|
|||||||
#define ZR_CLASS_NAPALM_TIME (1<<15)
|
#define ZR_CLASS_NAPALM_TIME (1<<15)
|
||||||
#define ZR_CLASS_IMMUNITY_MODE (1<<16)
|
#define ZR_CLASS_IMMUNITY_MODE (1<<16)
|
||||||
#define ZR_CLASS_IMMUNITY_AMOUNT (1<<17)
|
#define ZR_CLASS_IMMUNITY_AMOUNT (1<<17)
|
||||||
#define ZR_CLASS_NO_FALL_DAMAGE (1<<18)
|
#define ZR_CLASS_IMMUNITY_COOLDOWN (1<<18)
|
||||||
#define ZR_CLASS_HEALTH (1<<19)
|
#define ZR_CLASS_NO_FALL_DAMAGE (1<<19)
|
||||||
#define ZR_CLASS_HEALTH_REGEN_INTERVAL (1<<20)
|
#define ZR_CLASS_HEALTH (1<<20)
|
||||||
#define ZR_CLASS_HEALTH_REGEN_AMOUNT (1<<21)
|
#define ZR_CLASS_HEALTH_REGEN_INTERVAL (1<<21)
|
||||||
#define ZR_CLASS_HEALTH_INFECT_GAIN (1<<22)
|
#define ZR_CLASS_HEALTH_REGEN_AMOUNT (1<<22)
|
||||||
#define ZR_CLASS_KILL_BONUS (1<<23)
|
#define ZR_CLASS_HEALTH_INFECT_GAIN (1<<23)
|
||||||
#define ZR_CLASS_SPEED (1<<24)
|
#define ZR_CLASS_KILL_BONUS (1<<24)
|
||||||
#define ZR_CLASS_KNOCKBACK (1<<25)
|
#define ZR_CLASS_SPEED (1<<25)
|
||||||
#define ZR_CLASS_JUMP_HEIGHT (1<<26)
|
#define ZR_CLASS_KNOCKBACK (1<<26)
|
||||||
#define ZR_CLASS_JUMP_DISTANCE (1<<27)
|
#define ZR_CLASS_JUMP_HEIGHT (1<<27)
|
||||||
|
#define ZR_CLASS_JUMP_DISTANCE (1<<28)
|
||||||
/**
|
/**
|
||||||
* @endsection
|
* @endsection
|
||||||
*/
|
*/
|
||||||
@ -258,8 +262,9 @@ enum ClassAttributes
|
|||||||
Float:Class_NapalmTime,
|
Float:Class_NapalmTime,
|
||||||
|
|
||||||
/* Player behaviour */
|
/* Player behaviour */
|
||||||
Class_ImmunityMode,
|
ImmunityMode:Class_ImmunityMode,
|
||||||
Float:Class_ImmunityAmount,
|
Class_ImmunityAmount,
|
||||||
|
Class_ImmunityCooldown,
|
||||||
bool:Class_NoFallDamage,
|
bool:Class_NoFallDamage,
|
||||||
|
|
||||||
Class_Health,
|
Class_Health,
|
||||||
@ -300,9 +305,10 @@ enum ClassEditableAttributes
|
|||||||
ClassEdit_HasNapalm,
|
ClassEdit_HasNapalm,
|
||||||
Float:ClassEdit_NapalmTime,
|
Float:ClassEdit_NapalmTime,
|
||||||
|
|
||||||
/* Player behaviour */
|
/* Player behavior */
|
||||||
ClassEdit_ImmunityMode,
|
ImmunityMode:ClassEdit_ImmunityMode,
|
||||||
Float:ClassEdit_ImmunityAmount,
|
ClassEdit_ImmunityAmount,
|
||||||
|
ClassEdit_ImmunityCooldown,
|
||||||
|
|
||||||
ClassEdit_NoFallDamage,
|
ClassEdit_NoFallDamage,
|
||||||
Float:ClassEdit_RegenInterval,
|
Float:ClassEdit_RegenInterval,
|
||||||
@ -398,13 +404,13 @@ new ClassNoFilter[ClassFilter];
|
|||||||
new ClassNoSpecialClasses[ClassFilter] = {false, 0, ZR_CLASS_SPECIALFLAGS, -1};
|
new ClassNoSpecialClasses[ClassFilter] = {false, 0, ZR_CLASS_SPECIALFLAGS, -1};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The original class data. This array only changed when class data is loaded.
|
* The original class data. This array is only changed when class data is
|
||||||
* ZR_CLASS_CACHE_ORIGINAL is the cache type to this array.
|
* loaded. ZR_CLASS_CACHE_ORIGINAL is the cache type to this array.
|
||||||
*/
|
*/
|
||||||
new ClassData[ZR_CLASS_MAX][ClassAttributes];
|
new ClassData[ZR_CLASS_MAX][ClassAttributes];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The class thata cache that can be modified. ZR_CLASS_CACHE_MODIFIED is the
|
* The class data cache that can be modified. ZR_CLASS_CACHE_MODIFIED is the
|
||||||
* cache type to this array.
|
* cache type to this array.
|
||||||
*/
|
*/
|
||||||
new ClassDataCache[ZR_CLASS_MAX][ClassAttributes];
|
new ClassDataCache[ZR_CLASS_MAX][ClassAttributes];
|
||||||
@ -545,11 +551,12 @@ ClassLoad()
|
|||||||
LogEvent(false, LogType_Fatal, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Can't find any classes in \"%s\"", pathclasses);
|
LogEvent(false, LogType_Fatal, LOG_CORE_EVENTS, LogModule_Playerclasses, "Config Validation", "Can't find any classes in \"%s\"", pathclasses);
|
||||||
}
|
}
|
||||||
|
|
||||||
decl String:name[64];
|
new String:name[64];
|
||||||
decl String:group[64];
|
new String:group[64];
|
||||||
decl String:description[256];
|
new String:description[256];
|
||||||
decl String:model_path[PLATFORM_MAX_PATH];
|
new String:model_path[PLATFORM_MAX_PATH];
|
||||||
decl String:overlay_path[PLATFORM_MAX_PATH];
|
new String:immunity_mode[32];
|
||||||
|
new String:overlay_path[PLATFORM_MAX_PATH];
|
||||||
|
|
||||||
ClassCount = 0;
|
ClassCount = 0;
|
||||||
new failedcount;
|
new failedcount;
|
||||||
@ -605,8 +612,9 @@ ClassLoad()
|
|||||||
|
|
||||||
|
|
||||||
/* Player behaviour */
|
/* Player behaviour */
|
||||||
ClassData[ClassCount][Class_ImmunityMode] = KvGetNum(kvClassData, "immunity_mode", ZR_CLASS_DEFAULT_IMMUNITY_MODE);
|
KvGetString(kvClassData, "immunity_mode", immunity_mode, sizeof(immunity_mode), ZR_CLASS_DEFAULT_IMMUNITY_MODE);
|
||||||
ClassData[ClassCount][Class_ImmunityAmount] = KvGetFloat(kvClassData, "immunity_amount", ZR_CLASS_DEFAULT_IMMUNITY_AMOUNT);
|
ClassData[ClassCount][Class_ImmunityMode] = ImmunityStringToMode(immunity_mode);
|
||||||
|
ClassData[ClassCount][Class_ImmunityAmount] = KvGetNum(kvClassData, "immunity_amount", ZR_CLASS_DEFAULT_IMMUNITY_AMOUNT);
|
||||||
ClassData[ClassCount][Class_NoFallDamage] = ConfigKvGetStringBool(kvClassData, "no_fall_damage", ZR_CLASS_DEFAULT_NO_FALL_DAMAGE);
|
ClassData[ClassCount][Class_NoFallDamage] = ConfigKvGetStringBool(kvClassData, "no_fall_damage", ZR_CLASS_DEFAULT_NO_FALL_DAMAGE);
|
||||||
|
|
||||||
ClassData[ClassCount][Class_Health] = KvGetNum(kvClassData, "health", ZR_CLASS_DEFAULT_HEALTH);
|
ClassData[ClassCount][Class_Health] = KvGetNum(kvClassData, "health", ZR_CLASS_DEFAULT_HEALTH);
|
||||||
|
@ -41,8 +41,9 @@ new VolEmptyAttributes[ClassEditableAttributes] = {
|
|||||||
|
|
||||||
-1, /** HasNapalm */
|
-1, /** HasNapalm */
|
||||||
-1.0, /** NapalmTime */
|
-1.0, /** NapalmTime */
|
||||||
-1, /** ImmunityMode */
|
Immunity_Invalid, /** ImmunityMode */
|
||||||
-1.0, /** ImmunityAmount */
|
-1, /** ImmunityAmount */
|
||||||
|
-1, /** ImmunityCooldown */
|
||||||
-1, /** NoFallDamage */
|
-1, /** NoFallDamage */
|
||||||
|
|
||||||
-1.0, /** RegenInterval */
|
-1.0, /** RegenInterval */
|
||||||
|
Loading…
Reference in New Issue
Block a user