Advertisement
JademusSreg

Damage Tracker v2

Feb 7th, 2012
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.78 KB | None | 0 0
  1. //================================================================
  2. // DAMAGE TRACKER
  3. // by JademusSreg
  4. //----------------------------------------------------------------
  5. // Requires: Time (by grim001)
  6. // Debug utility to track the damage output of players, unit types
  7. // and effect types and outputs the stats to a logfile, to assist
  8. // in balancing gameplay content.
  9. //----------------------------------------------------------------
  10. // API
  11. //
  12. // void DmgTrack_StartTracking ()
  13. //     Enables the damage event trigger and stores the time at
  14. //     which the tracking begins.
  15. //
  16. // void DmgTrack_FinishTracking ()
  17. //     Disables the damage event trigger, logs the stats, then
  18. //     clears the data table.
  19. //
  20. // void DmgTrack_ClearTable ()
  21. //     Deletes all the DmgTrack entries from the data table.
  22. //
  23. // void DmgTrack_OutputToLogfile ()
  24. //     Outputs the damage stats to a logfile.
  25. //
  26. //================================================================
  27. // Function Declarations
  28. void DmgTrack_Init ();
  29. void DmgTrack_StartTracking ();
  30. void DmgTrack_FinishTracking ();
  31. void DmgTrack_ClearTable ();
  32. void DmgTrack_RemoveTableEntry (string key);
  33. void DmgTrack_OutputToLogfile ();
  34. void DmgTrack_OutputTimeMessage (fixed gameTime, fixed realTime);
  35. void DmgTrack_OutputDamageMessage (string key, fixed gameTime, fixed realTime);
  36. text DmgTrack_FormatDamageMessage (string key, fixed gameTime, fixed realTime);
  37. fixed DmgTrack_GetDamageTakenValue (string key);
  38. text DmgTrack_ReplaceTokenWithValue (text message, text token, fixed value);
  39. bool DmgTrack_DamageAction (bool testConditions, bool runActions);
  40. void DmgTrack_SaveTargetAndSourceStatsToTable (unit target, unit source, fixed damage, string effect);
  41. string DmgTrack_HandlePlayerKey (int player);
  42. string DmgTrack_HandleUnitTypeKey (unit unitType);
  43. string DmgTrack_HandleEffectTypeKey (string effectType);
  44. void DmgTrack_SaveValueToTable (string key, fixed value);
  45. //================================================================
  46. // Constants
  47. const int    DmgTrack_debugType        = 4;
  48. const string DmgTrack_debugLogfile     = "DamageTrackerOutput.txt";
  49. const string DmgTrack_tableKey         = "DmgTrack ";
  50. const string DmgTrack_damageDealtKey   = "Dealt ";
  51. const string DmgTrack_damageTakenKey   = "Taken ";
  52. const string DmgTrack_nullPlayerKey    = "Null Player";
  53. const string DmgTrack_nullUnitKey      = " : Null Unit";
  54. const string DmgTrack_nullEffectKey    = " : Null Effect";
  55. const fixed  DmgTrack_invalidValue     = 0.0;
  56. const int    DmgTrack_decimalPrecision = 2;
  57. // Data
  58. text    DmgTrack_entryToken      = StringToText("%Entry%");
  59. text    DmgTrack_dealtToken      = StringToText("%Dealt%");
  60. text    DmgTrack_takenToken      = StringToText("%Taken%");
  61. text    DmgTrack_dpgsToken       = StringToText("%DPGS%");
  62. text    DmgTrack_dprsToken       = StringToText("%DPRS%");
  63. text    DmgTrack_gameTimeMessage = StringToText("Elapsed game time: %Entry% seconds");
  64. text    DmgTrack_realTimeMessage = StringToText("Elapsed real time: %Entry% seconds");
  65. text    DmgTrack_entryMessage    = StringToText("[%Entry%]  ");
  66. text    DmgTrack_dealtMessage    = StringToText("Damage Dealt: %Dealt%  |  ");
  67. text    DmgTrack_takenMessage    = StringToText("Damage Taken: %Taken%  |  ");
  68. text    DmgTrack_dpgsMessage     = StringToText("DPS (game): %DPGS%  |  ");
  69. text    DmgTrack_dprsMessage     = StringToText("DPS (real): %DPRS%  |  ");
  70. trigger DmgTrack_damageTrigger   = TriggerCreate("DmgTrack_DamageAction");
  71. fixed   DmgTrack_gameStart;
  72. fixed   DmgTrack_realStart;
  73. //================================================================
  74. // Functions
  75. void DmgTrack_Init ()
  76. {
  77.     TriggerDebugSetTypeFile(DmgTrack_debugType,DmgTrack_debugLogfile);
  78.     TriggerAddEventUnitDamaged(DmgTrack_damageTrigger,null,c_unitDamageTypeAny,c_unitDamageEither,null);
  79.     TriggerEnable(DmgTrack_damageTrigger,false);
  80. }
  81. void DmgTrack_StartTracking ()
  82. {
  83.     TriggerEnable(DmgTrack_damageTrigger,true);
  84.     DmgTrack_gameStart = GetTime(c_timeGame);
  85.     DmgTrack_realStart = GetTime(c_timeReal);
  86. }
  87. void DmgTrack_FinishTracking ()
  88. {
  89.     TriggerEnable(DmgTrack_damageTrigger,false);
  90.     DmgTrack_OutputToLogfile();
  91.     DmgTrack_ClearTable();
  92. }
  93. void DmgTrack_ClearTable ()
  94. {
  95.     int tableCount;
  96.     for (tableCount = DataTableValueCount(true); (tableCount > 0); tableCount-=1)
  97.     {
  98.         DmgTrack_RemoveTableEntry(DataTableValueName(true,tableCount));
  99.     }
  100. }
  101. void DmgTrack_RemoveTableEntry (string key)
  102. {
  103.     if ((StringWord(key,1)+" ") == DmgTrack_tableKey)
  104.     {
  105.         DataTableValueRemove(true,key);
  106.     }
  107. }
  108. void DmgTrack_OutputToLogfile ()
  109. {
  110.     fixed elapsedGameTime = GetTime(c_timeGame)-DmgTrack_gameStart;
  111.     fixed elapsedRealTime = GetTime(c_timeReal)-DmgTrack_realStart;
  112.     int tableCount;
  113.     DmgTrack_OutputTimeMessage(elapsedGameTime, elapsedRealTime);
  114.     for (tableCount = DataTableValueCount(true); (tableCount > 0); tableCount-=1)
  115.     {
  116.         DmgTrack_OutputDamageMessage(DataTableValueName(true,tableCount),elapsedGameTime,elapsedRealTime);
  117.     }
  118. }
  119. void DmgTrack_OutputTimeMessage (fixed gameTime, fixed realTime)
  120. {
  121.     TriggerDebugOutput(DmgTrack_debugType,TextReplaceWord(DmgTrack_gameTimeMessage,DmgTrack_entryToken,FixedToText(gameTime,DmgTrack_decimalPrecision),1,true),false);
  122.     TriggerDebugOutput(DmgTrack_debugType,TextReplaceWord(DmgTrack_realTimeMessage,DmgTrack_entryToken,FixedToText(realTime,DmgTrack_decimalPrecision),1,true),false);
  123. }
  124. void DmgTrack_OutputDamageMessage (string key, fixed gameTime, fixed realTime)
  125. {
  126.     if ((StringWord(key,1)+" "+StringWord(key,2)+" ") == DmgTrack_tableKey+DmgTrack_damageDealtKey)
  127.     {
  128.         TriggerDebugOutput(DmgTrack_debugType,DmgTrack_FormatDamageMessage(key,gameTime,realTime),false);
  129.     }
  130. }
  131. text DmgTrack_FormatDamageMessage (string key, fixed gameTime, fixed realTime)
  132. {
  133.     fixed damageDealt = DataTableGetFixed(true,key);
  134.     fixed damageTaken = DmgTrack_GetDamageTakenValue(key);
  135.     text entry = TextReplaceWord(DmgTrack_entryMessage,DmgTrack_entryToken,StringToText(StringReplaceWord(key,DmgTrack_tableKey+DmgTrack_damageDealtKey,null,1,true)),1,true);
  136.     text dealt = DmgTrack_ReplaceTokenWithValue(DmgTrack_dealtMessage,DmgTrack_dealtToken,damageDealt);
  137.     text taken = DmgTrack_ReplaceTokenWithValue(DmgTrack_takenMessage,DmgTrack_takenToken,damageTaken);
  138.     text dpgs = DmgTrack_ReplaceTokenWithValue(DmgTrack_dpgsMessage,DmgTrack_dpgsToken,(damageDealt/gameTime));
  139.     text dprs = DmgTrack_ReplaceTokenWithValue(DmgTrack_dprsMessage,DmgTrack_dprsToken,(damageDealt/realTime));
  140.     return entry+dealt+taken+dpgs+dprs;
  141. }
  142. fixed DmgTrack_GetDamageTakenValue (string key)
  143. {
  144.     string takenKey = StringReplaceWord(key,DmgTrack_damageDealtKey,DmgTrack_damageTakenKey,1,true);
  145.     if (!DataTableValueExists(true,takenKey)) { return DmgTrack_invalidValue; }
  146.     return DataTableGetFixed(true,takenKey);
  147. }
  148. text DmgTrack_ReplaceTokenWithValue (text message, text token, fixed value)
  149. {
  150.     if (value == DmgTrack_invalidValue) { return null; }
  151.     return TextReplaceWord(message,token,FixedToText(value,DmgTrack_decimalPrecision),1,true);
  152. }
  153. bool DmgTrack_DamageAction (bool testConditions, bool runActions)
  154. {
  155.     DmgTrack_SaveTargetAndSourceStatsToTable(EventUnit(),EventUnitDamageSourceUnit(),EventUnitDamageAmount(),EventUnitDamageEffect());
  156.     return true;
  157. }
  158. void DmgTrack_SaveTargetAndSourceStatsToTable (unit target, unit source, fixed damage, string effect)
  159. {
  160.     string targetPlayerKey = DmgTrack_tableKey+DmgTrack_damageTakenKey+DmgTrack_HandlePlayerKey(UnitGetOwner(target));
  161.     string targetUnitKey   = targetPlayerKey+DmgTrack_HandleUnitTypeKey(target);
  162.     string sourcePlayerKey = DmgTrack_tableKey+DmgTrack_damageDealtKey+DmgTrack_HandlePlayerKey(UnitGetOwner(source));
  163.     string sourceUnitKey   = sourcePlayerKey+DmgTrack_HandleUnitTypeKey(source);
  164.     string sourceEffectKey = sourceUnitKey+DmgTrack_HandleEffectTypeKey(effect);
  165.     DmgTrack_SaveValueToTable(targetPlayerKey,damage);
  166.     DmgTrack_SaveValueToTable(targetUnitKey,damage);
  167.     DmgTrack_SaveValueToTable(sourcePlayerKey,damage);
  168.     DmgTrack_SaveValueToTable(sourceUnitKey,damage);
  169.     DmgTrack_SaveValueToTable(sourceEffectKey,damage);
  170. }
  171. string DmgTrack_HandlePlayerKey (int player)
  172. {
  173.     if (player == c_maxPlayers) { return DmgTrack_nullPlayerKey; }
  174.     return "Player "+IntToString(player);
  175. }
  176. string DmgTrack_HandleUnitTypeKey (unit unitType)
  177. {
  178.     if (unitType == null) { return DmgTrack_nullUnitKey; }
  179.     return " : "+UnitGetType(unitType);
  180. }
  181. string DmgTrack_HandleEffectTypeKey (string effectType)
  182. {
  183.     if (effectType == null) { return DmgTrack_nullEffectKey; }
  184.     return " : "+effectType;
  185. }
  186. void DmgTrack_SaveValueToTable (string key, fixed value)
  187. {
  188.     if (DataTableValueExists(true,key)) { DataTableSetFixed(true,key,DataTableGetFixed(true,key)+value); }
  189.     else { DataTableSetFixed(true,key,value); }
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement