69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
|
//----------------------------------------------------------------
|
||
|
// Buying.cpp
|
||
|
//
|
||
|
// Copyright 2005 Ritual Entertainment
|
||
|
//
|
||
|
// This file essentially serves as an extension to the Game DLL
|
||
|
// source files Multiplayer.cpp and Player.cpp, in an attempt
|
||
|
// to isolate, as much as possible, these changes from the main
|
||
|
// body of code (for merge simplification, etc).
|
||
|
//----------------------------------------------------------------
|
||
|
|
||
|
#include "../../idlib/precompiled.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "Buying.h"
|
||
|
|
||
|
|
||
|
riBuyingManager::riBuyingManager() :
|
||
|
_buyingGameBalanceConstants( NULL ),
|
||
|
opponentKillCashAward( 0 ),
|
||
|
opponentKillFragCount( -1 ) { }
|
||
|
|
||
|
riBuyingManager::~riBuyingManager() { }
|
||
|
|
||
|
int riBuyingManager::GetIntValueForKey( const char* keyName, int defaultValue ) {
|
||
|
if( !keyName )
|
||
|
{
|
||
|
return defaultValue;
|
||
|
}
|
||
|
|
||
|
if( !_buyingGameBalanceConstants )
|
||
|
{
|
||
|
_buyingGameBalanceConstants = static_cast<const idDeclEntityDef*>( declManager->FindType( DECL_ENTITYDEF, "BuyingGameBalanceConstants", false ) );
|
||
|
|
||
|
if( !_buyingGameBalanceConstants )
|
||
|
{
|
||
|
return defaultValue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for( int i = 0; i < _buyingGameBalanceConstants->dict.GetNumKeyVals(); i++ )
|
||
|
{
|
||
|
const idKeyValue* keyValuePair = _buyingGameBalanceConstants->dict.GetKeyVal( i );
|
||
|
if( !keyValuePair->GetKey().Icmp( keyName ) )
|
||
|
{
|
||
|
return atoi( keyValuePair->GetValue() );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return defaultValue;
|
||
|
}
|
||
|
|
||
|
int riBuyingManager::GetOpponentKillCashAward( void ) {
|
||
|
int targetFragCount = gameLocal.serverInfo.GetInt( "si_fragLimit" );
|
||
|
if ( opponentKillFragCount != targetFragCount ) {
|
||
|
opponentKillFragCount = targetFragCount;
|
||
|
if ( idStr::Icmp( gameLocal.serverInfo.GetString( "si_gameType" ), "DM" ) && idStr::Icmp( gameLocal.serverInfo.GetString( "si_gameType" ), "Team DM" ) ) {
|
||
|
// only do frag reward scaling in DM/TDM
|
||
|
opponentKillCashAward = GetIntValueForKey( "playerCashAward_killingOpponent", 600 );
|
||
|
} else {
|
||
|
targetFragCount = idMath::ClampInt( GetIntValueForKey( "killingOpponent_minFragAdjust", 10 ), GetIntValueForKey( "killingOpponent_maxFragAdjust",50 ), targetFragCount );
|
||
|
int baseVal = GetIntValueForKey( "playerCashAward_killingOpponent", 600 );
|
||
|
int fragTarget = GetIntValueForKey( "killingOpponent_bestFragCount", 25 );
|
||
|
opponentKillCashAward = ( baseVal * fragTarget ) / targetFragCount;
|
||
|
}
|
||
|
}
|
||
|
return opponentKillCashAward;
|
||
|
}
|