2012-12-30 16:37:54 +00:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//
|
|
|
|
// $Logfile:: /Code/DLLs/game/multiplayerArena.cpp $
|
|
|
|
// $Revision:: 48 $
|
|
|
|
// $Author:: Steven $
|
|
|
|
// $Date:: 7/23/02 2:55p $
|
|
|
|
//
|
|
|
|
// Copyright (C) 2002 by Ritual Entertainment, Inc.
|
|
|
|
// All rights reserved.
|
|
|
|
//
|
|
|
|
// This source may not be distributed and/or modified without
|
|
|
|
// expressly written permission by Ritual Entertainment, Inc.
|
|
|
|
//
|
|
|
|
// Description:
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef __MP_MODIFIERS_HPP__
|
|
|
|
#define __MP_MODIFIERS_HPP__
|
|
|
|
|
|
|
|
#include "g_local.h" // common game stuff
|
|
|
|
#include "player.h" // for Player
|
|
|
|
#include "item.h"
|
|
|
|
#include "PlayerStart.h" // for PlayerDeathmatchStart
|
|
|
|
#include "container.h" // for Container
|
|
|
|
#include "str.h" // for str
|
|
|
|
#include "mp_shared.hpp"
|
|
|
|
#include "equipment.h"
|
|
|
|
|
|
|
|
class MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
|
|
|
|
public:
|
|
|
|
MultiplayerModifier() {};
|
|
|
|
virtual ~MultiplayerModifier() {};
|
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void init( int maxPlayers ) { Q_UNUSED(maxPlayers); };
|
2012-12-30 16:37:54 +00:00
|
|
|
virtual void initItems( void ) {};
|
|
|
|
virtual void start( void ) {};
|
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual bool shouldKeepItem( MultiplayerItem *item ) { Q_UNUSED(item); return false; }
|
|
|
|
virtual bool shouldKeepNormalItem( Item *item ) { Q_UNUSED(item); return true; }
|
|
|
|
virtual void itemKept( MultiplayerItem *item ) { Q_UNUSED(item); };
|
|
|
|
virtual bool checkRule( const char *rule, bool defaultValue, Player *player = NULL ) { Q_UNUSED(rule); Q_UNUSED(player); return defaultValue; }
|
|
|
|
virtual bool checkGameType( const char *rule ) { Q_UNUSED(rule); return false; }
|
|
|
|
virtual bool doesPlayerHaveItem( Player *player, const char *itemName ) { Q_UNUSED(player); Q_UNUSED(itemName); return false; }
|
|
|
|
|
|
|
|
virtual int getStat( Player *player, int statNum, int value ) { Q_UNUSED(player); Q_UNUSED(statNum); return value; }
|
|
|
|
virtual int getIcon( Player *player, int statNum, int value ) { Q_UNUSED(player); Q_UNUSED(statNum); return value; }
|
|
|
|
virtual int getScoreIcon( Player *player, int index, int value ) { Q_UNUSED(player); Q_UNUSED(index); return value; }
|
|
|
|
virtual int getInfoIcon( Player *player ) { Q_UNUSED(player); return 0; }
|
|
|
|
|
|
|
|
virtual float playerDamaged( Player *damagedPlayer, Player *attackingPlayer, float damage, int meansOfDeath ) { Q_UNUSED(damagedPlayer); Q_UNUSED(attackingPlayer); Q_UNUSED(meansOfDeath); return damage; };
|
|
|
|
virtual void playerFired( Player *attackingPlayer ) { Q_UNUSED(attackingPlayer); };
|
|
|
|
virtual void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath ) { Q_UNUSED(killedPlayer); Q_UNUSED(attackingPlayer); Q_UNUSED(inflictor); Q_UNUSED(meansOfDeath); };
|
2012-12-31 14:05:16 +00:00
|
|
|
virtual void playerSpawned( Player * ) {};
|
2012-12-30 16:37:54 +00:00
|
|
|
|
|
|
|
virtual void matchOver( void ) {};
|
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void itemTouched( Player *player, MultiplayerItem *item ) { Q_UNUSED(player); Q_UNUSED(item); };
|
|
|
|
virtual void itemDestroyed( Player *player, MultiplayerItem *item ) { Q_UNUSED(player); Q_UNUSED(item); };
|
|
|
|
virtual float itemDamaged( MultiplayerItem *item, Player *attackingPlayer, float damage, int meansOfDeath ) { Q_UNUSED(item); Q_UNUSED(attackingPlayer); Q_UNUSED(meansOfDeath); return damage; }
|
|
|
|
virtual void itemUsed( Entity *entity, MultiplayerItem *item ) { Q_UNUSED(entity); Q_UNUSED(item); };
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void playerUsed( Player *usedPlayer, Player *usingPlayer, Equipment *equipment ) { Q_UNUSED(usedPlayer); Q_UNUSED(usingPlayer); Q_UNUSED(equipment); };
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual bool canGivePlayerItem( int entnum, const str &itemName ) { Q_UNUSED(entnum); Q_UNUSED(itemName); return true; }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 14:05:16 +00:00
|
|
|
virtual void addPlayer( Player * ) {};
|
|
|
|
virtual void removePlayer( Player * ) {};
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void joinedTeam( Player *player, const str &teamName ) { Q_UNUSED(player); Q_UNUSED(teamName); }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void applySpeedModifiers( Player *player, int *moveSpeed ) { Q_UNUSED(player); Q_UNUSED(moveSpeed); }
|
|
|
|
virtual void applyJumpModifiers( Player *player, int *jumpSpeed ) { Q_UNUSED(player); Q_UNUSED(jumpSpeed); }
|
|
|
|
virtual void applyAirAccelerationModifiers( Player *player, int *airAcceleration ) { Q_UNUSED(player); Q_UNUSED(airAcceleration); }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual bool canPickup( Player *player, MultiplayerItemType itemType, const char *item_name ) { Q_UNUSED(player); Q_UNUSED(itemType); Q_UNUSED(item_name); return true; }
|
|
|
|
virtual void pickedupItem( Player *player, MultiplayerItemType itemType, const char *itemName ) { Q_UNUSED(player); Q_UNUSED(itemType); Q_UNUSED(itemName); }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void update( float frameTime ) { Q_UNUSED(frameTime); }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual int getPointsForKill( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath, int points ) { Q_UNUSED(killedPlayer); Q_UNUSED(attackingPlayer); Q_UNUSED(inflictor); Q_UNUSED(meansOfDeath); return points; }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void playerEventNotification( const char *eventName, const char *eventItemName, Player *eventPlayer ) { Q_UNUSED(eventName); Q_UNUSED(eventItemName); Q_UNUSED(eventPlayer); }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual void playerCommand( Player *player, const char *command, const char *parm ) { Q_UNUSED(player); Q_UNUSED(command); Q_UNUSED(parm); }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
|
|
|
virtual void matchStarted( void ) {};
|
|
|
|
virtual void matchStarting( void ) {};
|
|
|
|
virtual void matchRestarted( void ) {};
|
|
|
|
virtual void matchEnded( void ) {};
|
|
|
|
|
2012-12-31 14:05:16 +00:00
|
|
|
virtual str getSpawnPointType( Player * ) { return ""; }
|
|
|
|
virtual float getSpawnPointPriority( Player * ) { return 0.0f; }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 15:19:55 +00:00
|
|
|
virtual bool isValidPlayerModel( Player *player, str modelToUse, bool defaultValue ) { Q_UNUSED(player); Q_UNUSED(modelToUse); return defaultValue; }
|
|
|
|
virtual str getDefaultPlayerModel( Player *player, str modelName ) { Q_UNUSED(player); return modelName; }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
2012-12-31 14:05:16 +00:00
|
|
|
virtual void playerChangedModel( Player * ) {};
|
2012-12-30 16:37:54 +00:00
|
|
|
virtual bool skipWeaponReloads( void ) { return false; }
|
|
|
|
};
|
|
|
|
|
|
|
|
class DestructionPlayerData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
float _lastHealTime;
|
|
|
|
float _damageDone;
|
|
|
|
float _healthHealed;
|
|
|
|
|
|
|
|
DestructionPlayerData() { reset(); }
|
|
|
|
void reset( void ) { _lastHealTime = 0.0f; _damageDone = 0.0f; _healthHealed = 0.0f; }
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierDestruction : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _defaultObjectHealth;
|
|
|
|
static const int _pointsForDestroyingObject;
|
|
|
|
static const float _objectHealRate;
|
|
|
|
static const float _maxGuardingDist;
|
|
|
|
|
|
|
|
static const float _minDamageForPoints;
|
|
|
|
static const float _minHealingForPoints;
|
|
|
|
|
|
|
|
static const int _pointsForDamage;
|
|
|
|
static const int _pointsForHealing;
|
|
|
|
static const int _pointsForDestroying;
|
|
|
|
static const int _pointsForGuarding;
|
|
|
|
|
|
|
|
MultiplayerItem * _redDestructionObject;
|
|
|
|
MultiplayerItem * _blueDestructionObject;
|
|
|
|
|
|
|
|
float _redLastDamageSoundTime;
|
|
|
|
float _blueLastDamageSoundTime;
|
|
|
|
|
|
|
|
int _maxPlayers;
|
|
|
|
DestructionPlayerData * _destructionPlayerData;
|
|
|
|
|
|
|
|
float _redObjectLasthealth;
|
|
|
|
float _blueObjectLasthealth;
|
|
|
|
|
|
|
|
bool _blueObjectDestroyed;
|
|
|
|
bool _redObjectDestroyed;
|
|
|
|
|
|
|
|
float _respawnTime;
|
|
|
|
|
|
|
|
float findDistanceToTeamsObject( const str &teamName, const Vector &position );
|
|
|
|
void updateObjectAnim( MultiplayerItem *destructionObject, float health, float lastHealth, float maxHealth );
|
|
|
|
int getStage( float health, float maxHealth );
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierDestruction();
|
|
|
|
~ModifierDestruction();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
|
|
|
|
/* virtual */ int getStat( Player *player, int statNum, int value );
|
|
|
|
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
/* virtual */ void playerSpawned( Player *player );
|
|
|
|
/* virtual */ void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
|
|
|
|
/* virtual */ bool shouldKeepItem( MultiplayerItem *item );
|
|
|
|
/* virtual */ void itemDestroyed( Player *player, MultiplayerItem *item );
|
|
|
|
/* virtual */ float itemDamaged( MultiplayerItem *item, Player *attackingPlayer, float damage, int meansOfDeath );
|
|
|
|
/* virtual */ void itemUsed( Entity *entity, MultiplayerItem *item );
|
|
|
|
/* virtual */ void update( float frameTime );
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
/* virtual */ bool checkGameType( const char *rule );
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierOneFlag : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierOneFlag() {};
|
|
|
|
~ModifierOneFlag() {};
|
|
|
|
/* virtual */ bool shouldKeepItem( MultiplayerItem *item );
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
/* virtual */ bool checkGameType( const char *rule );
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
};
|
|
|
|
|
|
|
|
class EliminationPlayerData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
bool _eliminated;
|
|
|
|
|
|
|
|
EliminationPlayerData() { reset(); }
|
|
|
|
void reset( void ) { _eliminated = false; }
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierElimination : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const int _pointsForBeingLastAlive;
|
|
|
|
|
|
|
|
bool _respawning;
|
|
|
|
bool _playerEliminated;
|
|
|
|
int _maxPlayers;
|
|
|
|
|
|
|
|
EliminationPlayerData* _playerEliminationData;
|
|
|
|
|
|
|
|
bool _matchOver;
|
|
|
|
float _matchStartTime;
|
|
|
|
|
|
|
|
int _eliminatedIconIndex;
|
|
|
|
|
|
|
|
bool _needPlayers;
|
|
|
|
|
|
|
|
int _eliminatedTextIndex;
|
|
|
|
int _nextRoundTextIndex;
|
|
|
|
|
|
|
|
void reset( void );
|
|
|
|
int numPlayersAliveOnTeam( const str &teamName );
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierElimination();
|
|
|
|
~ModifierElimination();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
/* virtual */ void update( float frameTime );
|
|
|
|
|
|
|
|
/* virtual */ int getStat( Player *player, int statNum, int value );
|
|
|
|
/* virtual */ int getScoreIcon( Player *player, int index, int value );
|
|
|
|
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
/* virtual */ void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
|
|
|
|
/* virtual */ void matchStarting( void );
|
|
|
|
};
|
|
|
|
|
|
|
|
/* typedef enum
|
|
|
|
{
|
|
|
|
DIFFUSION_NONE,
|
|
|
|
DIFFUSION_BOMBER,
|
|
|
|
DIFFUSION_DIFFUSER
|
|
|
|
} DiffusionType;
|
|
|
|
|
|
|
|
class DiffusionPlayerData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
DiffusionType _diffusionSpecialty;
|
|
|
|
MultiplayerItem * _item;
|
|
|
|
|
|
|
|
DiffusionPlayerData() { reset(); }
|
|
|
|
void reset( void ) { _diffusionSpecialty = DIFFUSION_NONE; _item = NULL; }
|
|
|
|
}; */
|
|
|
|
|
|
|
|
class DiffusionBombPlace
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
MultiplayerItem * _item;
|
|
|
|
|
|
|
|
bool _armed;
|
|
|
|
|
|
|
|
float _totalArmingTime;
|
|
|
|
float _totalDisarmingTime;
|
|
|
|
|
|
|
|
float _lastArmingTime;
|
|
|
|
float _lastDisarmingTime;
|
|
|
|
|
|
|
|
float _totalArmedTime;
|
|
|
|
|
|
|
|
DiffusionBombPlace();
|
|
|
|
void reset( void );
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierDiffusion : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _timeNeededToArmBomb;
|
|
|
|
static const float _timeNeededToDisarmBomb;
|
|
|
|
static const float _maxGuardingDist;
|
|
|
|
static const float _maxArmingPause;
|
|
|
|
static const float _maxDisarmingPause;
|
|
|
|
static const float _maxBombOnGroundTime;
|
|
|
|
|
|
|
|
static const int _pointsForArmingBomb;
|
|
|
|
static const int _pointsForExplodingBomb;
|
|
|
|
static const int _pointsForDisarmingBomb;
|
|
|
|
static const int _pointsForGuardingBase;
|
|
|
|
static const int _pointsForGuardingTheBomber;
|
|
|
|
static const int _pointsForGuardingBomb;
|
|
|
|
static const int _pointsForKillingTheBomber;
|
|
|
|
|
|
|
|
static const int _teamPointsForBombing;
|
|
|
|
|
|
|
|
|
|
|
|
int _bomber;
|
|
|
|
int _bombArmedByPlayer;
|
|
|
|
|
|
|
|
int _lastBomber;
|
|
|
|
float _bombDroppedTime;
|
|
|
|
|
|
|
|
float _timeNeededForBombToExplode;
|
|
|
|
|
|
|
|
DiffusionBombPlace _redBombPlace;
|
|
|
|
DiffusionBombPlace _blueBombPlace;
|
|
|
|
|
|
|
|
MultiplayerItem * _bomb;
|
|
|
|
MultiplayerItem * _tempBombItem;
|
|
|
|
Entity * _attachedBomb;
|
|
|
|
|
|
|
|
float _tempBombItemTime;
|
|
|
|
|
|
|
|
//DiffusionPlayerData *_playerDiffusionData;
|
|
|
|
int _maxPlayers;
|
|
|
|
|
|
|
|
int _bomberIconIndex;
|
|
|
|
int _diffuserIconIndex;
|
|
|
|
|
|
|
|
int _bombNormalIconIndex;
|
|
|
|
int _bombPlacedIconIndex;
|
|
|
|
int _bombArmedIconIndex;
|
|
|
|
|
|
|
|
int _redBombPlaceArmedIconIndex;
|
|
|
|
int _blueBombPlaceArmedIconIndex;
|
|
|
|
int _bombCarriedByRedTeamIconIndex;
|
|
|
|
int _bombCarriedByBlueTeamIconIndex;
|
|
|
|
int _bombInBaseIconIndex;
|
|
|
|
int _bombOnGroundIconIndex;
|
|
|
|
|
|
|
|
float _respawnTime;
|
|
|
|
|
|
|
|
|
|
|
|
void dropBomb( Player *player );
|
|
|
|
void respawnBomb( bool quiet = false );
|
|
|
|
bool playerOnOffense( Player *player );
|
|
|
|
|
|
|
|
Player * getBomber( void );
|
|
|
|
void makeBomber( Player *player );
|
|
|
|
void clearBomber( void );
|
|
|
|
bool withinGuardDistance( const Vector &origin1, const Vector &origin2 );
|
|
|
|
|
|
|
|
bool playerGuardedBomber( Player *attackingPlayer, Player *killedPlayer );
|
|
|
|
bool playerGuardedBase( Player *attackingPlayer, Player *killedPlayer );
|
|
|
|
bool playerGuardedBomb( Player *attackingPlayer, Player *killedPlayer );
|
|
|
|
|
|
|
|
void attachBomb( Player *player );
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierDiffusion();
|
|
|
|
~ModifierDiffusion();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
/* virtual */ bool shouldKeepItem( MultiplayerItem *item );
|
|
|
|
///* virtual */ void start( void );
|
|
|
|
/* virtual */ void matchStarted( void );
|
|
|
|
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
|
|
|
|
/* virtual */ void update( float frameTime );
|
|
|
|
|
|
|
|
/* virtual */ void itemTouched( Player *player, MultiplayerItem *item );
|
|
|
|
/* virtual */ void itemUsed( Entity *entity, MultiplayerItem *item );
|
|
|
|
|
|
|
|
/* virtual */ int getStat( Player *player, int statNum, int value );
|
|
|
|
|
|
|
|
///* virtual */ int getPointsForKill( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath, int points );
|
|
|
|
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
/* virtual */ void removePlayer( Player *player );
|
|
|
|
|
|
|
|
/* virtual */ void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
/* virtual */ void playerCommand( Player *player, const char *command, const char *parm );
|
|
|
|
|
|
|
|
/* virtual */ void playerSpawned( Player *player );
|
|
|
|
/* virtual */ void playerEventNotification( const char *eventName, const char *eventItemName, Player *eventPlayer );
|
|
|
|
|
|
|
|
/* virtual */ int getIcon( Player *player, int statNum, int value );
|
|
|
|
/* virtual */ int getScoreIcon( Player *player, int index, int value );
|
|
|
|
|
|
|
|
/* virtual */ void playerChangedModel( Player *player );
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
SPECIALTY_NONE,
|
|
|
|
SPECIALTY_INFILTRATOR,
|
|
|
|
SPECIALTY_MEDIC,
|
|
|
|
SPECIALTY_TECHNICIAN,
|
|
|
|
SPECIALTY_DEMOLITIONIST,
|
|
|
|
SPECIALTY_HEAVY_WEAPONS,
|
|
|
|
SPECIALTY_SNIPER
|
|
|
|
} SpecialtyType;
|
|
|
|
|
|
|
|
class SpecialtyPlayerData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
static const SpecialtyType _defaultSpecialty;
|
|
|
|
|
|
|
|
SpecialtyType _specialty;
|
|
|
|
MultiplayerItem * _item;
|
|
|
|
float _lastUseTime;
|
|
|
|
bool _forced;
|
|
|
|
float _amountOfHealing;
|
|
|
|
int _lastPlayer;
|
|
|
|
float _lastPlayerTime;
|
|
|
|
float _regenHoldableItemTime;
|
|
|
|
|
|
|
|
SpecialtyPlayerData();
|
|
|
|
void reset( void );
|
|
|
|
};
|
|
|
|
|
|
|
|
class SpecialtyItem
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
MultiplayerItem * _item;
|
|
|
|
SpecialtyType _type;
|
|
|
|
str _teamName;
|
|
|
|
|
|
|
|
bool _needToRespawn;
|
|
|
|
float _respawnTime;
|
|
|
|
float _minimumRespawnTime;
|
|
|
|
float _pickedupTime;
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierSpecialties : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _infiltratorMinRespawnTime;
|
|
|
|
static const float _medicMinRespawnTime;
|
|
|
|
static const float _technicianMinRespawnTime;
|
|
|
|
static const float _demolitionistMinRespawnTime;
|
|
|
|
static const float _heavyweaponsMinRespawnTime;
|
|
|
|
static const float _sniperMinRespawnTime;
|
|
|
|
|
|
|
|
static const float _startingInfiltratorHealth;
|
|
|
|
static const float _startingInfiltratorMassModifier;
|
|
|
|
static const float _startingMedicArmor;
|
|
|
|
static const float _startingTechnicianArmor;
|
|
|
|
static const float _startingDemolitionistArmor;
|
|
|
|
static const float _startingHeavyWeaponsHealth;
|
|
|
|
static const float _startingHeavyWeaponsArmor;
|
|
|
|
static const float _startingHeavyWeaponsMassModifier;
|
|
|
|
static const float _startingSniperArmor;
|
|
|
|
static const float _startingNormalHealth;
|
|
|
|
|
|
|
|
static const float _medicHealOtherRate;
|
|
|
|
static const float _medicHealSelfRate;
|
|
|
|
static const float _infiltratorMoveSpeedModifier;
|
|
|
|
static const float _heavyWeaponsMoveSpeedModifier;
|
|
|
|
static const float _infiltratorJumpSpeedModifier;
|
|
|
|
static const float _infiltratorAirAccelerationModifier;
|
|
|
|
|
|
|
|
static const float _technicianHoldableItemRegenTime;
|
|
|
|
static const float _demolitionistHoldableItemRegenTime;
|
|
|
|
|
|
|
|
static const bool _medicCanSeeEnemyHealth;
|
|
|
|
|
|
|
|
static const float _amountOfHealingForPoints;
|
|
|
|
static const int _pointsForHealing;
|
|
|
|
|
|
|
|
static const bool _removeItems;
|
|
|
|
|
|
|
|
SpecialtyPlayerData *_playerSpecialtyData;
|
|
|
|
int _maxPlayers;
|
|
|
|
|
|
|
|
Container<SpecialtyItem> _specialtyItems;
|
|
|
|
|
|
|
|
int _infiltratorIconIndex;
|
|
|
|
int _medicIconIndex;
|
|
|
|
int _technicianIconIndex;
|
|
|
|
int _demolitionistIconIndex;
|
|
|
|
int _heavyweaponsIconIndex;
|
|
|
|
int _sniperIconIndex;
|
|
|
|
|
|
|
|
void putItemBack( Player *player );
|
|
|
|
void removeItem( MultiplayerItem *item );
|
|
|
|
void setupSpecialty( Player *player, SpecialtyType specialty, bool chosen );
|
|
|
|
|
|
|
|
SpecialtyItem * findSpecialtyItem( MultiplayerItem *item );
|
|
|
|
void attachBackpack( Player *player );
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
ModifierSpecialties();
|
|
|
|
~ModifierSpecialties();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
|
|
|
|
/* virtual */ bool shouldKeepItem( MultiplayerItem *item );
|
|
|
|
/* virtual */ bool shouldKeepNormalItem( Item *item );
|
|
|
|
/* virtual */ void itemTouched( Player *player, MultiplayerItem *item );
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
/* virtual */ void removePlayer( Player *player );
|
|
|
|
|
|
|
|
/* virtual */ void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
/* virtual */ void playerSpawned( Player *player );
|
|
|
|
|
|
|
|
/* virtual */ void applySpeedModifiers( Player *player, int *moveSpeed );
|
|
|
|
/* virtual */ void applyJumpModifiers( Player *player, int *jumpSpeed );
|
|
|
|
/* virtual */ void applyAirAccelerationModifiers( Player *player, int *airAcceleration );
|
|
|
|
|
|
|
|
/* virtual */ bool canPickup( Player *player, MultiplayerItemType itemType, const char *item_name );
|
|
|
|
|
|
|
|
/* virtual */ void update( float frameTime );
|
|
|
|
|
|
|
|
/* virtual */ int getStat( Player *player, int statNum, int value );
|
|
|
|
/* virtual */ int getIcon( Player *player, int statNum, int value );
|
|
|
|
/* virtual */ int getScoreIcon( Player *player, int index, int value );
|
|
|
|
|
|
|
|
/* virtual */ void playerUsed( Player *usedPlayer, Player *usingPlayer, Equipment *equipment );
|
|
|
|
|
|
|
|
/* virtual */ void playerCommand( Player *player, const char *command, const char *parm );
|
|
|
|
|
|
|
|
/* virtual */ str getSpawnPointType( Player *player );
|
2012-12-31 14:05:16 +00:00
|
|
|
/* virtual */ float getSpawnPointPriority( Player * ) { return 100.0f; }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
|
|
|
/* virtual */ void playerChangedModel( Player *player );
|
|
|
|
};
|
|
|
|
|
|
|
|
class HandicapPlayerData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
float _handicap;
|
|
|
|
|
|
|
|
HandicapPlayerData() { _handicap = 1.0f; }
|
|
|
|
void reset( void ) { _handicap = 1.0f; }
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierAutoHandicap : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _attackerHandicapModifier;
|
|
|
|
static const float _victimHandicapModifier;
|
|
|
|
|
|
|
|
HandicapPlayerData *_playerHandicapData;
|
|
|
|
public:
|
|
|
|
ModifierAutoHandicap();
|
|
|
|
~ModifierAutoHandicap();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
|
|
|
|
/* virtual */ float playerDamaged( Player *damagedPlayer, Player *attackingPlayer, float damage, int meansOfDeath );
|
|
|
|
/* virtual */ void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
};
|
|
|
|
|
|
|
|
class PointsPerWeaponData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
str _name;
|
|
|
|
int _points;
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierPointsPerWeapon : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
Container<PointsPerWeaponData> _weapons;
|
|
|
|
Container<PointsPerWeaponData> _projectiles;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierPointsPerWeapon() {};
|
|
|
|
~ModifierPointsPerWeapon();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
|
|
|
|
void readMultiplayerConfig( const char *configName );
|
|
|
|
bool parseConfigToken( const char *key, Script *buffer );
|
|
|
|
|
|
|
|
/* virtual */ int getPointsForKill( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath, int points );
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
CONTROL_POINT_NONE,
|
|
|
|
CONTROL_POINT_ALPHA,
|
|
|
|
CONTROL_POINT_BETA,
|
|
|
|
CONTROL_POINT_DELTA,
|
|
|
|
CONTROL_POINT_GAMMA
|
|
|
|
} ControlPointType;
|
|
|
|
|
|
|
|
struct ControlPointData
|
|
|
|
{
|
|
|
|
MultiplayerItem * _controlPoint;
|
|
|
|
ControlPointType _controlPointType;
|
|
|
|
Team * _controllingTeam;
|
|
|
|
Team * _lastControllingTeam;
|
|
|
|
float _lastTime;
|
|
|
|
int _lastPlayerToTouch;
|
|
|
|
int _playerPointsAwardedForCapture;
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierControlPoints : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _timeNeededToControl;
|
|
|
|
static const int _maxNumberAwardsForPlayerCapture;
|
|
|
|
static const int _pointsForEachAwardForCapture;
|
|
|
|
static const int _pointsForProtectingControlPoint;
|
|
|
|
static const int _maxGuardingDist;
|
|
|
|
|
|
|
|
Container<ControlPointData> _controlPoints;
|
|
|
|
|
|
|
|
int _alphaControlPointRedControlledIndex;
|
|
|
|
int _alphaControlPointBlueControlledIndex;
|
|
|
|
int _alphaControlPointNeutralControlledIndex;
|
|
|
|
|
|
|
|
int _betaControlPointRedControlledIndex;
|
|
|
|
int _betaControlPointBlueControlledIndex;
|
|
|
|
int _betaControlPointNeutralControlledIndex;
|
|
|
|
|
|
|
|
int _deltaControlPointRedControlledIndex;
|
|
|
|
int _deltaControlPointBlueControlledIndex;
|
|
|
|
int _deltaControlPointNeutralControlledIndex;
|
|
|
|
|
|
|
|
int _gammaControlPointRedControlledIndex;
|
|
|
|
int _gammaControlPointBlueControlledIndex;
|
|
|
|
int _gammaControlPointNeutralControlledIndex;
|
|
|
|
|
|
|
|
float findNearestControlledControlPoint( const str &teamName, const Vector &position );
|
|
|
|
ControlPointType getControlPointType( const str &name );
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierControlPoints();
|
|
|
|
~ModifierControlPoints();
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
|
|
|
|
/* virtual */ void addPlayer( Player *player );
|
|
|
|
/* virtual */ int getStat( Player *player, int statNum, int value );
|
|
|
|
|
|
|
|
/* virtual */ bool shouldKeepItem( MultiplayerItem *item );
|
|
|
|
/* virtual */ void itemTouched( Player *player, MultiplayerItem *item );
|
|
|
|
/* virtual */ void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
|
|
|
|
///* virtual */ int getPointsForKill( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath, int points );
|
|
|
|
|
|
|
|
/* virtual */ void update( float frameTime );
|
|
|
|
|
|
|
|
/* virtual */ str getSpawnPointType( Player *player );
|
2012-12-31 14:05:16 +00:00
|
|
|
/* virtual */ float getSpawnPointPriority( Player * ) { return 10.0f; }
|
2012-12-30 16:37:54 +00:00
|
|
|
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierInstantKill : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _instantKillDamage;
|
|
|
|
|
|
|
|
static const float _regenTime;
|
|
|
|
static const int _regenAmount;
|
|
|
|
|
|
|
|
float _lastRegenTime;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierInstantKill();
|
|
|
|
~ModifierInstantKill() {};
|
|
|
|
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
float playerDamaged( Player *damagedPlayer, Player *attackingPlayer, float damage, int meansOfDeath );
|
|
|
|
/* virtual */ bool canGivePlayerItem( int entnum, const str &itemName );
|
|
|
|
/* virtual */ bool checkRule( const char *rule, bool defaultValue, Player *player = NULL );
|
|
|
|
/* virtual */ void playerSpawned( Player *player );
|
|
|
|
/* virtual */ bool shouldKeepNormalItem( Item *item );
|
|
|
|
/* virtual */ void update( float frameTime );
|
|
|
|
/* virtual */ bool skipWeaponReloads( void ) { return true; }
|
|
|
|
};
|
|
|
|
|
|
|
|
class ModifierActionHero : public MultiplayerModifier
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
static const float _actionHeroRegenRate;
|
|
|
|
static const int _extraPointsForKillingActionHero;
|
|
|
|
|
|
|
|
int _actionHeroNum;
|
|
|
|
float _healthRegenRate;
|
|
|
|
|
|
|
|
int _actionHeroIconIndex;
|
|
|
|
int _actionHeroInfoIconIndex;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ModifierActionHero();
|
|
|
|
~ModifierActionHero() {};
|
|
|
|
/* virtual */ void init( int maxPlayers );
|
|
|
|
virtual void playerKilled( Player *killedPlayer, Player *attackingPlayer, Entity *inflictor, int meansOfDeath );
|
|
|
|
virtual void removePlayer( Player *player );
|
|
|
|
virtual void update( float frameTime );
|
|
|
|
|
|
|
|
/* virutal */ void matchStarting( void );
|
|
|
|
|
|
|
|
/* virtual */ int getIcon( Player *player, int statNum, int value );
|
|
|
|
/* virtual */ int getScoreIcon( Player *player, int index, int value );
|
|
|
|
/* virtual */ int getInfoIcon( Player *player );
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // __MP_MODIFIERS_HPP__
|