init
This commit is contained in:
279
mp/_behavior_tracker.gsc
Normal file
279
mp/_behavior_tracker.gsc
Normal file
@@ -0,0 +1,279 @@
|
||||
#using scripts\shared\math_shared;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#namespace behaviorTracker;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
///// Inititialize & Finaliize ////
|
||||
/////////////////////////////////////////////////////
|
||||
function SetupTraits()
|
||||
{
|
||||
if ( isDefined( self.behaviorTracker.traits ) )
|
||||
return;
|
||||
|
||||
self.behaviorTracker.traits = [];
|
||||
// Define the traits with a default value. This default value will be used if we dont have stats.
|
||||
// Add the information to the BBPrint()
|
||||
self.behaviorTracker.traits["effectiveCombat"] = 0.5;
|
||||
self.behaviorTracker.traits["effectiveWallRunCombat"] = 0.5;
|
||||
self.behaviorTracker.traits["effectiveDoubleJumpCombat"] = 0.5;
|
||||
self.behaviorTracker.traits["effectiveSlideCombat"] = 0.5;
|
||||
|
||||
if ( self.behaviorTracker.version != 0 )
|
||||
{
|
||||
traits = getArrayKeys( self.behaviorTracker.traits );
|
||||
|
||||
for ( i = 0; i < traits.size; i++ )
|
||||
{
|
||||
trait = traits[i];
|
||||
self.behaviorTracker.traits[trait] = float( self GetTraitStatValue( trait ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Initialize()
|
||||
{
|
||||
if ( isdefined( self.pers["isBot"] ) )
|
||||
return;
|
||||
|
||||
if ( isDefined( self.behaviorTracker ) )
|
||||
return;
|
||||
|
||||
if ( isdefined( level.disableBehaviorTracker ) && level.disableBehaviorTracker == true )
|
||||
return;
|
||||
|
||||
self.behaviorTracker = spawnstruct();
|
||||
self.behaviorTracker.version = int( self GetTraitStatValue( "version" ) );
|
||||
self.behaviorTracker.numRecords = int( self GetTraitStatValue( "numRecords" ) ) + 1;
|
||||
self SetupTraits();
|
||||
|
||||
self.behaviorTracker.valid = true;
|
||||
}
|
||||
|
||||
function Finalize()
|
||||
{
|
||||
if ( !( self IsAllowed() ) )
|
||||
return;
|
||||
|
||||
self SetTraitStats();
|
||||
|
||||
self PrintTrackerToBlackBox();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
///// Utility Functions ////
|
||||
/////////////////////////////////////////////////////
|
||||
function IsAllowed()
|
||||
{
|
||||
if ( !isDefined( self ) )
|
||||
return false;
|
||||
|
||||
if ( !isDefined( self.behaviorTracker ) )
|
||||
return false;
|
||||
|
||||
if ( !self.behaviorTracker.valid )
|
||||
return false;
|
||||
|
||||
if ( isdefined( level.disableBehaviorTracker ) && level.disableBehaviorTracker == true )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function PrintTrackerToBlackBox()
|
||||
{
|
||||
// Prepare the list of traits & its values
|
||||
// TODO: Construct the string with all the traits so that it can just be added as a single variable in the print.
|
||||
/*traitsStr = "";
|
||||
traits = getArrayKeys( self.behaviorTracker.traits );
|
||||
|
||||
for ( i = 0; i < traits.size; i++ )
|
||||
{
|
||||
trait = traits[i];
|
||||
value = self.behaviorTracker.traits[trait];
|
||||
|
||||
traitsStr = traitsStr + trait + " " + value + " ";
|
||||
}
|
||||
|
||||
bbPrint( "mpbehaviortracker", "username %s version %d numRecords %d %s", self.name, self.behaviorTracker.version, self.behaviorTracker.numRecords, traitsStr ); */
|
||||
|
||||
bbPrint( "mpbehaviortracker", "username %s version %d numRecords %d effectiveSlideCombat %f effectiveDoubleJumpCombat %f effectiveWallRunCombat %f effectiveCombat %f",
|
||||
self.name, self.behaviorTracker.version, self.behaviorTracker.numRecords, self.behaviorTracker.traits["effectiveSlideCombat"],
|
||||
self.behaviorTracker.traits["effectiveDoubleJumpCombat"], self.behaviorTracker.traits["effectiveWallRunCombat"], self.behaviorTracker.traits["effectiveCombat"] );
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
///// Set, Get & Update Trait ////
|
||||
/////////////////////////////////////////////////////
|
||||
function GetTraitValue( trait )
|
||||
{
|
||||
return self.behaviorTracker.traits[ trait ];
|
||||
}
|
||||
|
||||
function SetTraitValue( trait, value )
|
||||
{
|
||||
self.behaviorTracker.traits[trait] = value;
|
||||
}
|
||||
|
||||
function UpdateTrait( trait, percent )
|
||||
{
|
||||
if ( !( self IsAllowed() ) )
|
||||
return;
|
||||
|
||||
math::clamp( percent, -1.0, 1.0 );
|
||||
|
||||
currentValue = self GetTraitValue( trait );
|
||||
|
||||
if ( percent >= 0 )
|
||||
{
|
||||
delta = ( 1.0 - currentValue ) * percent;
|
||||
}
|
||||
else
|
||||
{
|
||||
delta = ( currentValue - 0.0 ) * percent;
|
||||
}
|
||||
|
||||
weightedDelta = 0.1 * delta;
|
||||
|
||||
newValue = currentvalue + weightedDelta;
|
||||
newValue = math::clamp( newValue, 0.0, 1.0 );
|
||||
self SetTraitValue( trait, newValue );
|
||||
|
||||
bbprint( "mpbehaviortraitupdate", "username %s trait %s percent %f", self.name, trait, percent );
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
///// Game Side Hooks ////
|
||||
/////////////////////////////////////////////////////
|
||||
function UpdatePlayerDamage( attacker, victim, damage )
|
||||
{
|
||||
if ( isDefined( victim ) && victim IsAllowed() )
|
||||
{
|
||||
damageRatio = float( damage ) / float( victim.maxhealth );
|
||||
math::clamp( damageRatio, 0.0, 1.0 );
|
||||
|
||||
damageRatio = damageRatio * -1.0; // Negative damage percent since this is the victim
|
||||
|
||||
victim UpdateTrait( "effectiveCombat", damageRatio );
|
||||
|
||||
if ( victim IsWallRunning() )
|
||||
{
|
||||
victim UpdateTrait( "effectiveWallRunCombat", damageRatio );
|
||||
}
|
||||
|
||||
if ( victim IsSliding() )
|
||||
{
|
||||
victim UpdateTrait( "effectiveSlideCombat", damageRatio );
|
||||
}
|
||||
|
||||
if ( victim IsDoubleJumping() )
|
||||
{
|
||||
victim UpdateTrait( "effectiveDoubleJumpCombat", damageRatio );
|
||||
}
|
||||
}
|
||||
|
||||
if ( isDefined( attacker ) && ( attacker IsAllowed() ) && attacker != victim )
|
||||
{
|
||||
damageRatio = float( damage ) / float( attacker.maxhealth );
|
||||
math::clamp( damageRatio, 0.0, 1.0 );
|
||||
|
||||
attacker UpdateTrait( "effectiveCombat", damageRatio );
|
||||
|
||||
if ( attacker IsWallRunning() )
|
||||
{
|
||||
attacker UpdateTrait( "effectiveWallRunCombat", damageRatio );
|
||||
}
|
||||
|
||||
if ( attacker IsSliding() )
|
||||
{
|
||||
attacker UpdateTrait( "effectiveSlideCombat", damageRatio );
|
||||
}
|
||||
|
||||
if ( attacker IsDoubleJumping() )
|
||||
{
|
||||
attacker UpdateTrait( "effectiveDoubleJumpCombat", damageRatio );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function UpdatePlayerKilled( attacker, victim )
|
||||
{
|
||||
if ( isDefined( victim ) && victim IsAllowed() )
|
||||
{
|
||||
// Passing -1.0 since to denote negative 100%.
|
||||
victim UpdateTrait( "effectiveCombat", -1.0 );
|
||||
|
||||
if ( victim IsWallRunning() )
|
||||
{
|
||||
victim UpdateTrait( "effectiveWallRunCombat", -1.0 );
|
||||
}
|
||||
|
||||
if ( victim IsSliding() )
|
||||
{
|
||||
victim UpdateTrait( "effectiveSlideCombat", -1.0 );
|
||||
}
|
||||
|
||||
if ( victim IsDoubleJumping() )
|
||||
{
|
||||
victim UpdateTrait( "effectiveDoubleJumpCombat", -1.0 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( isDefined( attacker ) && ( attacker IsAllowed() ) && attacker != victim )
|
||||
{
|
||||
// Passing 1.0 since to denote positive 100%.
|
||||
attacker UpdateTrait( "effectiveCombat", 1.0 );
|
||||
|
||||
if ( attacker IsWallRunning() )
|
||||
{
|
||||
attacker UpdateTrait( "effectiveWallRunCombat", 1.0 );
|
||||
}
|
||||
|
||||
if ( attacker IsSliding() )
|
||||
{
|
||||
attacker UpdateTrait( "effectiveSlideCombat", 1.0 );
|
||||
}
|
||||
|
||||
if ( attacker IsDoubleJumping() )
|
||||
{
|
||||
attacker UpdateTrait( "effectiveDoubleJumpCombat", 1.0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
///// Stats Related ////
|
||||
/////////////////////////////////////////////////////
|
||||
function SetTraitStats()
|
||||
{
|
||||
if ( self.behaviorTracker.version == 0 )
|
||||
return;
|
||||
|
||||
self.behaviorTracker.numRecords = self.behaviorTracker.numRecords + 1;
|
||||
self SetTraitStatValue( "numRecords", self.behaviorTracker.numRecords );
|
||||
|
||||
traits = getArrayKeys( self.behaviorTracker.traits );
|
||||
|
||||
for ( i = 0; i < traits.size; i++ )
|
||||
{
|
||||
trait = traits[i];
|
||||
value = self.behaviorTracker.traits[trait];
|
||||
|
||||
self SetTraitStatValue( trait, value );
|
||||
}
|
||||
}
|
||||
|
||||
function GetTraitStatValue( trait )
|
||||
{
|
||||
return self getDStat( "behaviorTracker", trait );
|
||||
}
|
||||
|
||||
function SetTraitStatValue( trait, value )
|
||||
{
|
||||
self setDStat( "behaviorTracker", trait, value );
|
||||
}
|
Reference in New Issue
Block a user