analyticsmanagerserver.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. class AnalyticsManagerServer
  2. {
  3. const string STAT_DISTANCE = "dist";
  4. const string STAT_PLAYTIME = "playtime";
  5. const string STAT_PLAYERS_KILLED = "players_killed";
  6. const string STAT_INFECTED_KILLED = "infected_killed";
  7. const string STAT_LONGEST_SURVIVOR_HIT = "longest_survivor_hit";
  8. void OnPlayerConnect(Man player)
  9. {
  10. player.StatRegister(STAT_DISTANCE);
  11. player.StatRegister(STAT_PLAYTIME);
  12. player.StatRegister(STAT_PLAYERS_KILLED);
  13. player.StatRegister(STAT_INFECTED_KILLED);
  14. player.StatRegister(STAT_LONGEST_SURVIVOR_HIT);
  15. }
  16. void OnPlayerDisconnect(Man player)
  17. {
  18. player.StatUpdateByPosition(STAT_DISTANCE);
  19. player.StatUpdateByTime(STAT_PLAYTIME);
  20. }
  21. //Entity-Entity hit
  22. void OnEntityHit(EntityAI source, Man target)
  23. {
  24. if (source)
  25. {
  26. Man survivor = source.GetHierarchyRootPlayer();
  27. if (survivor && source.IsWeapon())
  28. OnPlayerToPlayerHit(survivor, target);
  29. }
  30. }
  31. protected void OnPlayerToPlayerHit(Man shooter, Man target)
  32. {
  33. float longestHitDistance = shooter.StatGet(STAT_LONGEST_SURVIVOR_HIT);
  34. float currentDistance = vector.Distance(shooter.GetPosition(), target.GetPosition());
  35. float distanceUpdate;
  36. if (longestHitDistance < currentDistance)
  37. distanceUpdate = currentDistance - longestHitDistance;
  38. shooter.StatUpdate(STAT_LONGEST_SURVIVOR_HIT, distanceUpdate);
  39. }
  40. //Entity-Entity kill
  41. void OnEntityKilled(Object killer, EntityAI target)
  42. {
  43. EntityAI killerEntity = EntityAI.Cast(killer);
  44. if (killerEntity)
  45. {
  46. Man killerSurvivor = killerEntity.GetHierarchyRootPlayer();
  47. if (killerSurvivor)
  48. {
  49. if (target.IsPlayer())
  50. OnPlayerKilled(killerSurvivor, target);
  51. else if (target.IsZombie())
  52. OnInfectedKilled(killerSurvivor, target);
  53. }
  54. }
  55. }
  56. protected void OnPlayerKilled(Man killer, EntityAI target)
  57. {
  58. killer.StatUpdate(STAT_PLAYERS_KILLED, 1);
  59. }
  60. protected void OnInfectedKilled(Man killer, EntityAI target)
  61. {
  62. killer.StatUpdate(STAT_INFECTED_KILLED, 1);
  63. }
  64. }