Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //================================================================
- // DAMAGE TRACKER
- // by JademusSreg
- //----------------------------------------------------------------
- // Requires: Time (by grim001)
- // Debug utility to track the damage output of players, unit types
- // and effect types and outputs the stats to a logfile, to assist
- // in balancing gameplay content.
- //----------------------------------------------------------------
- // API
- //
- // void DmgTrack_StartTracking ()
- // Enables the damage event trigger and stores the time at
- // which the tracking begins.
- //
- // void DmgTrack_FinishTracking ()
- // Disables the damage event trigger, logs the stats, then
- // clears the data table.
- //
- // void DmgTrack_ClearTable ()
- // Deletes all the DmgTrack entries from the data table.
- //
- // void DmgTrack_OutputToLogfile ()
- // Outputs the damage stats to a logfile.
- //
- //================================================================
- // Function Declarations
- void DmgTrack_Init ();
- void DmgTrack_StartTracking ();
- void DmgTrack_FinishTracking ();
- void DmgTrack_ClearTable ();
- void DmgTrack_RemoveTableEntry (string key);
- void DmgTrack_OutputToLogfile ();
- void DmgTrack_OutputTimeMessage (fixed gameTime, fixed realTime);
- void DmgTrack_OutputDamageMessage (string key, fixed gameTime, fixed realTime);
- text DmgTrack_FormatDamageMessage (string key, fixed gameTime, fixed realTime);
- fixed DmgTrack_GetDamageTakenValue (string key);
- text DmgTrack_ReplaceTokenWithValue (text message, text token, fixed value);
- bool DmgTrack_DamageAction (bool testConditions, bool runActions);
- void DmgTrack_SaveTargetAndSourceStatsToTable (unit target, unit source, fixed damage, string effect);
- string DmgTrack_HandlePlayerKey (int player);
- string DmgTrack_HandleUnitTypeKey (unit unitType);
- string DmgTrack_HandleEffectTypeKey (string effectType);
- void DmgTrack_SaveValueToTable (string key, fixed value);
- //================================================================
- // Constants
- const int DmgTrack_debugType = 4;
- const string DmgTrack_debugLogfile = "DamageTrackerOutput.txt";
- const string DmgTrack_tableKey = "DmgTrack ";
- const string DmgTrack_damageDealtKey = "Dealt ";
- const string DmgTrack_damageTakenKey = "Taken ";
- const string DmgTrack_nullPlayerKey = "Null Player";
- const string DmgTrack_nullUnitKey = " : Null Unit";
- const string DmgTrack_nullEffectKey = " : Null Effect";
- const fixed DmgTrack_invalidValue = 0.0;
- const int DmgTrack_decimalPrecision = 2;
- // Data
- text DmgTrack_entryToken = StringToText("%Entry%");
- text DmgTrack_dealtToken = StringToText("%Dealt%");
- text DmgTrack_takenToken = StringToText("%Taken%");
- text DmgTrack_dpgsToken = StringToText("%DPGS%");
- text DmgTrack_dprsToken = StringToText("%DPRS%");
- text DmgTrack_gameTimeMessage = StringToText("Elapsed game time: %Entry% seconds");
- text DmgTrack_realTimeMessage = StringToText("Elapsed real time: %Entry% seconds");
- text DmgTrack_entryMessage = StringToText("[%Entry%] ");
- text DmgTrack_dealtMessage = StringToText("Damage Dealt: %Dealt% | ");
- text DmgTrack_takenMessage = StringToText("Damage Taken: %Taken% | ");
- text DmgTrack_dpgsMessage = StringToText("DPS (game): %DPGS% | ");
- text DmgTrack_dprsMessage = StringToText("DPS (real): %DPRS% | ");
- trigger DmgTrack_damageTrigger = TriggerCreate("DmgTrack_DamageAction");
- fixed DmgTrack_gameStart;
- fixed DmgTrack_realStart;
- //================================================================
- // Functions
- void DmgTrack_Init ()
- {
- TriggerDebugSetTypeFile(DmgTrack_debugType,DmgTrack_debugLogfile);
- TriggerAddEventUnitDamaged(DmgTrack_damageTrigger,null,c_unitDamageTypeAny,c_unitDamageEither,null);
- TriggerEnable(DmgTrack_damageTrigger,false);
- }
- void DmgTrack_StartTracking ()
- {
- TriggerEnable(DmgTrack_damageTrigger,true);
- DmgTrack_gameStart = GetTime(c_timeGame);
- DmgTrack_realStart = GetTime(c_timeReal);
- }
- void DmgTrack_FinishTracking ()
- {
- TriggerEnable(DmgTrack_damageTrigger,false);
- DmgTrack_OutputToLogfile();
- DmgTrack_ClearTable();
- }
- void DmgTrack_ClearTable ()
- {
- int tableCount;
- for (tableCount = DataTableValueCount(true); (tableCount > 0); tableCount-=1)
- {
- DmgTrack_RemoveTableEntry(DataTableValueName(true,tableCount));
- }
- }
- void DmgTrack_RemoveTableEntry (string key)
- {
- if ((StringWord(key,1)+" ") == DmgTrack_tableKey)
- {
- DataTableValueRemove(true,key);
- }
- }
- void DmgTrack_OutputToLogfile ()
- {
- fixed elapsedGameTime = GetTime(c_timeGame)-DmgTrack_gameStart;
- fixed elapsedRealTime = GetTime(c_timeReal)-DmgTrack_realStart;
- int tableCount;
- DmgTrack_OutputTimeMessage(elapsedGameTime, elapsedRealTime);
- for (tableCount = DataTableValueCount(true); (tableCount > 0); tableCount-=1)
- {
- DmgTrack_OutputDamageMessage(DataTableValueName(true,tableCount),elapsedGameTime,elapsedRealTime);
- }
- }
- void DmgTrack_OutputTimeMessage (fixed gameTime, fixed realTime)
- {
- TriggerDebugOutput(DmgTrack_debugType,TextReplaceWord(DmgTrack_gameTimeMessage,DmgTrack_entryToken,FixedToText(gameTime,DmgTrack_decimalPrecision),1,true),false);
- TriggerDebugOutput(DmgTrack_debugType,TextReplaceWord(DmgTrack_realTimeMessage,DmgTrack_entryToken,FixedToText(realTime,DmgTrack_decimalPrecision),1,true),false);
- }
- void DmgTrack_OutputDamageMessage (string key, fixed gameTime, fixed realTime)
- {
- if ((StringWord(key,1)+" "+StringWord(key,2)+" ") == DmgTrack_tableKey+DmgTrack_damageDealtKey)
- {
- TriggerDebugOutput(DmgTrack_debugType,DmgTrack_FormatDamageMessage(key,gameTime,realTime),false);
- }
- }
- text DmgTrack_FormatDamageMessage (string key, fixed gameTime, fixed realTime)
- {
- fixed damageDealt = DataTableGetFixed(true,key);
- fixed damageTaken = DmgTrack_GetDamageTakenValue(key);
- text entry = TextReplaceWord(DmgTrack_entryMessage,DmgTrack_entryToken,StringToText(StringReplaceWord(key,DmgTrack_tableKey+DmgTrack_damageDealtKey,null,1,true)),1,true);
- text dealt = DmgTrack_ReplaceTokenWithValue(DmgTrack_dealtMessage,DmgTrack_dealtToken,damageDealt);
- text taken = DmgTrack_ReplaceTokenWithValue(DmgTrack_takenMessage,DmgTrack_takenToken,damageTaken);
- text dpgs = DmgTrack_ReplaceTokenWithValue(DmgTrack_dpgsMessage,DmgTrack_dpgsToken,(damageDealt/gameTime));
- text dprs = DmgTrack_ReplaceTokenWithValue(DmgTrack_dprsMessage,DmgTrack_dprsToken,(damageDealt/realTime));
- return entry+dealt+taken+dpgs+dprs;
- }
- fixed DmgTrack_GetDamageTakenValue (string key)
- {
- string takenKey = StringReplaceWord(key,DmgTrack_damageDealtKey,DmgTrack_damageTakenKey,1,true);
- if (!DataTableValueExists(true,takenKey)) { return DmgTrack_invalidValue; }
- return DataTableGetFixed(true,takenKey);
- }
- text DmgTrack_ReplaceTokenWithValue (text message, text token, fixed value)
- {
- if (value == DmgTrack_invalidValue) { return null; }
- return TextReplaceWord(message,token,FixedToText(value,DmgTrack_decimalPrecision),1,true);
- }
- bool DmgTrack_DamageAction (bool testConditions, bool runActions)
- {
- DmgTrack_SaveTargetAndSourceStatsToTable(EventUnit(),EventUnitDamageSourceUnit(),EventUnitDamageAmount(),EventUnitDamageEffect());
- return true;
- }
- void DmgTrack_SaveTargetAndSourceStatsToTable (unit target, unit source, fixed damage, string effect)
- {
- string targetPlayerKey = DmgTrack_tableKey+DmgTrack_damageTakenKey+DmgTrack_HandlePlayerKey(UnitGetOwner(target));
- string targetUnitKey = targetPlayerKey+DmgTrack_HandleUnitTypeKey(target);
- string sourcePlayerKey = DmgTrack_tableKey+DmgTrack_damageDealtKey+DmgTrack_HandlePlayerKey(UnitGetOwner(source));
- string sourceUnitKey = sourcePlayerKey+DmgTrack_HandleUnitTypeKey(source);
- string sourceEffectKey = sourceUnitKey+DmgTrack_HandleEffectTypeKey(effect);
- DmgTrack_SaveValueToTable(targetPlayerKey,damage);
- DmgTrack_SaveValueToTable(targetUnitKey,damage);
- DmgTrack_SaveValueToTable(sourcePlayerKey,damage);
- DmgTrack_SaveValueToTable(sourceUnitKey,damage);
- DmgTrack_SaveValueToTable(sourceEffectKey,damage);
- }
- string DmgTrack_HandlePlayerKey (int player)
- {
- if (player == c_maxPlayers) { return DmgTrack_nullPlayerKey; }
- return "Player "+IntToString(player);
- }
- string DmgTrack_HandleUnitTypeKey (unit unitType)
- {
- if (unitType == null) { return DmgTrack_nullUnitKey; }
- return " : "+UnitGetType(unitType);
- }
- string DmgTrack_HandleEffectTypeKey (string effectType)
- {
- if (effectType == null) { return DmgTrack_nullEffectKey; }
- return " : "+effectType;
- }
- void DmgTrack_SaveValueToTable (string key, fixed value)
- {
- if (DataTableValueExists(true,key)) { DataTableSetFixed(true,key,DataTableGetFixed(true,key)+value); }
- else { DataTableSetFixed(true,key,value); }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement