achievementsxbox.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. enum EAchievementError
  2. {
  3. ERR_OK,
  4. ERR_NOT_FOUND,
  5. ERR_BAD_DATA,
  6. ERR_NOT_IMPLEMENTED,
  7. ERR_UNKNOWN,
  8. };
  9. enum EAchievementTargetId
  10. {
  11. TARGET_SURVIVOR,
  12. TARGET_INFECTED,
  13. };
  14. enum EAchievementRankId
  15. {
  16. RANK_SURVIVOR, //!< must be TARGET_SURVIVOR
  17. RANK_INFECTED, //!< must be TARGET_INFECTED
  18. RANK_INFECTED_SOLDIER, //!< must be TARGET_INFECTED
  19. };
  20. enum EAchievementRangeId
  21. {
  22. RANGE_OTHER,
  23. RANGE_MELEE,
  24. RANGE_RANGED,
  25. };
  26. enum EAchievementHitId
  27. {
  28. HIT_OTHER,
  29. HIT_HEADSHOT,
  30. };
  31. enum EAchievementActionId
  32. {
  33. ACTION_EAT,
  34. ACTION_DRINK,
  35. ACTION_EQUIP_GEAR,
  36. ACTION_COOK_STEAK,
  37. ACTION_IGNITE_FIRE_MATCHBOX,
  38. ACTION_IGNITE_FIRE_ROAD_FLARE,
  39. ACTION_IGNITE_FIRE_HAND_DRILL,
  40. ACTION_SHAVE,
  41. ACTION_GUT_DEER,
  42. ACTION_APPLY_MEDS_ON_SURVIVOR,
  43. ACTION_HANDCUFF_SURVIVOR,
  44. };
  45. class Achievements
  46. {
  47. private void Achievements();
  48. private void ~Achievements();
  49. static proto EAchievementError SendEventAction(EAchievementActionId action_id);
  50. static proto EAchievementError SendEventKill(EAchievementTargetId target_id, EAchievementRankId rank_id, EAchievementRangeId range_id, EAchievementHitId hit_id, float distance);
  51. //===================================
  52. // OnActionEat
  53. //===================================
  54. static void OnActionEat()
  55. {
  56. CheckError( SendEventAction( EAchievementActionId.ACTION_EAT ) );
  57. }
  58. //===================================
  59. // OnActionDrink
  60. //===================================
  61. static void OnActionDrink()
  62. {
  63. CheckError( SendEventAction( EAchievementActionId.ACTION_DRINK ) );
  64. }
  65. //===================================
  66. // OnEquipdFullGear
  67. //===================================
  68. static void OnEquippedFullGear()
  69. {
  70. CheckError( SendEventAction( EAchievementActionId.ACTION_EQUIP_GEAR ) );
  71. }
  72. //===================================
  73. // OnCookedSteak
  74. //===================================
  75. static void OnCookedSteak()
  76. {
  77. CheckError( SendEventAction( EAchievementActionId.ACTION_COOK_STEAK ) );
  78. }
  79. //===================================
  80. // OnActionIgniteMatchbox
  81. //===================================
  82. static void OnActionIgniteMatchbox()
  83. {
  84. CheckError( SendEventAction( EAchievementActionId.ACTION_IGNITE_FIRE_MATCHBOX ) );
  85. }
  86. //===================================
  87. // OnActionIgniteRoadflare
  88. //===================================
  89. static void OnActionIgniteRoadflare()
  90. {
  91. CheckError( SendEventAction( EAchievementActionId.ACTION_IGNITE_FIRE_ROAD_FLARE ) );
  92. }
  93. //===================================
  94. // OnActionIgniteDrill
  95. //===================================
  96. static void OnActionIgniteDrill()
  97. {
  98. CheckError( SendEventAction( EAchievementActionId.ACTION_IGNITE_FIRE_HAND_DRILL ) );
  99. }
  100. //===================================
  101. // OnActionShave
  102. //===================================
  103. static void OnActionShave()
  104. {
  105. CheckError( SendEventAction( EAchievementActionId.ACTION_SHAVE ) );
  106. }
  107. //===================================
  108. // OnActionGutDeer
  109. //===================================
  110. static void OnActionGutDeer()
  111. {
  112. CheckError( SendEventAction( EAchievementActionId.ACTION_GUT_DEER ) );
  113. }
  114. //===================================
  115. // OnActionMedsSurvivor
  116. //===================================
  117. static void OnActionMedsSurvivor()
  118. {
  119. CheckError( SendEventAction( EAchievementActionId.ACTION_APPLY_MEDS_ON_SURVIVOR ) );
  120. }
  121. //===================================
  122. // OnActionHandcuff
  123. //===================================
  124. static void OnActionHandcuff()
  125. {
  126. CheckError( SendEventAction( EAchievementActionId.ACTION_HANDCUFF_SURVIVOR ) );
  127. }
  128. //===================================
  129. // OnPlayerKilled
  130. //===================================
  131. static void OnPlayerKilled(EntityAI victim, EntityAI killer, EntityAI source, bool is_headshot)
  132. {
  133. EAchievementTargetId target_id = EAchievementTargetId.TARGET_SURVIVOR;
  134. EAchievementRankId target_rank_id = EAchievementRankId.RANK_SURVIVOR;
  135. EAchievementRangeId range_id = EAchievementRangeId.RANGE_OTHER;
  136. EAchievementHitId hit_id = EAchievementHitId.HIT_OTHER;
  137. float distance = 0;
  138. if ( victim.IsZombie() )
  139. {
  140. target_id = EAchievementTargetId.TARGET_INFECTED;
  141. target_rank_id = EAchievementRankId.RANK_INFECTED;
  142. if ( victim.IsZombieMilitary() )
  143. {
  144. target_rank_id = EAchievementRankId.RANK_INFECTED_SOLDIER;
  145. }
  146. }
  147. if ( source )
  148. {
  149. if ( source.IsMeleeWeapon() )
  150. {
  151. range_id = EAchievementRangeId.RANGE_MELEE;
  152. }
  153. else if ( source.IsWeapon() && killer )
  154. {
  155. range_id = EAchievementRangeId.RANGE_RANGED;
  156. distance = vector.Distance( killer.GetPosition(), victim.GetPosition() );
  157. if ( is_headshot )
  158. {
  159. hit_id = EAchievementHitId.HIT_HEADSHOT;
  160. }
  161. }
  162. }
  163. CheckError( SendEventKill(target_id, target_rank_id, range_id, hit_id, distance) );
  164. }
  165. //-----------------------------------
  166. // CheckError
  167. //-----------------------------------
  168. private static void CheckError(EAchievementError error)
  169. {
  170. if ( error != EAchievementError.ERR_OK )
  171. {
  172. Print("Achievements: Cannot send achievement event. Error ID: " + error);
  173. }
  174. }
  175. };
  176. typedef Achievements AchievementsXbox;