Advertisement
Guest User

GPP anticamping patch

a guest
Feb 4th, 2012
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 5.32 KB | None | 0 0
  1. Index: src/game/g_local.h
  2. ===================================================================
  3. --- src/game/g_local.h  (revision 2260)
  4. +++ src/game/g_local.h  (working copy)
  5. @@ -1136,6 +1136,13 @@
  6.  extern  vmCvar_t  g_teamImbalanceWarnings;
  7.  extern  vmCvar_t  g_freeFundPeriod;
  8.  
  9. +extern  vmCvar_t  g_alienAnticampBonusMax;
  10. +extern  vmCvar_t  g_alienAnticampBonus1;
  11. +extern  vmCvar_t  g_alienAnticampRange;
  12. +extern  vmCvar_t  g_humanAnticampBonusMax;
  13. +extern  vmCvar_t  g_humanAnticampBonus1;
  14. +extern  vmCvar_t  g_humanAnticampRange;
  15. +
  16.  extern  vmCvar_t  g_unlagged;
  17.  
  18.  extern  vmCvar_t  g_disabledEquipment;
  19. Index: src/game/g_combat.c
  20. ===================================================================
  21. --- src/game/g_combat.c (revision 2260)
  22. +++ src/game/g_combat.c (working copy)
  23. @@ -129,6 +129,94 @@
  24.  
  25.  /*
  26.  ==================
  27. +G_CamperRewardBonus
  28. +
  29. +
  30. +Function to compute additional reward bonus for the attacker if this killed
  31. +entity was a player near one of his/her defensive structures.
  32. +Returns a factor for multiplying the reward.
  33. +==================
  34. +*/
  35. +float G_CamperRewardBonus(  gentity_t *self )
  36. +{
  37. +  int       maxCounted = 10;
  38. +  float     bonusMax = 2.0f; // Must positive!
  39. +  float     bonus1 = 1.0f; // Must positive!
  40. +  int       maxDistance = 0;
  41. +
  42. +  float     multiplier = 0.0;
  43. +  float     mod = 1.0;
  44. +
  45. +  vec3_t    temp_v;
  46. +  gentity_t *ent;
  47. +  int       i;
  48. +  int       team = self->client->ps.stats[ STAT_TEAM ];
  49. +  int       defences = 0;
  50. +  int       distance = 0;
  51. +  float     value = 0.0f;
  52. +
  53. +  // exclude builders:
  54. +  switch( BG_GetPlayerWeapon( &self->client->ps ) )
  55. +  {
  56. +      case WP_ABUILD:
  57. +      case WP_ABUILD2:
  58. +      case WP_HBUILD:   return 1.0f;
  59. +      default: ;
  60. +  }
  61. +
  62. +  if( team == TEAM_ALIENS ) {
  63. +      bonusMax = g_alienAnticampBonusMax.value;
  64. +      bonus1 = g_alienAnticampBonus1.value;
  65. +      maxDistance = g_alienAnticampRange.integer;
  66. +  } else if( team == TEAM_HUMANS ) {
  67. +      bonusMax = g_humanAnticampBonusMax.value;
  68. +      bonus1 = g_humanAnticampBonus1.value;
  69. +      maxDistance = g_humanAnticampRange.integer;
  70. +  }
  71. +  if( bonusMax <= 0.01f )
  72. +      return 1.0f;
  73. +  // Ensures that the denominator is positive:
  74. +  bonus1 = MAX(bonus1, bonusMax / (maxCounted - 1));
  75. +  // Ensures that the numerator is non-negative:
  76. +  bonus1 = MIN(bonus1, bonusMax);
  77. +  mod = (bonusMax - bonus1) / (bonus1 - bonusMax / maxCounted);
  78. +  multiplier = bonus1 * (1 + mod);
  79. +  
  80. +  // Look for buildables,
  81. +  for( i = MAX_CLIENTS, ent = g_entities + i; i < level.num_entities; i++, ent++ )
  82. +  {
  83. +    if( ( ent->s.eType != ET_BUILDABLE ) ||
  84. +        ( !ent->spawned ) ||
  85. +        ( ent->health <= 0 ) )
  86. +      continue;
  87. +    // and filter the defensive ones in the victim's team:
  88. +    switch (ent->s.modelindex) {
  89. +      case BA_A_HIVE:
  90. +      case BA_A_ACIDTUBE: if (team == TEAM_ALIENS) break; else continue;
  91. +      case BA_H_TESLAGEN:
  92. +      case BA_H_MGTURRET: if (team == TEAM_HUMANS) break; else continue;
  93. +      default: continue;
  94. +    }
  95. +      
  96. +    VectorSubtract( self->client->ps.origin, ent->s.origin, temp_v );
  97. +    distance = VectorLength( temp_v );
  98. +    if( distance < maxDistance )
  99. +      if (++defences >= maxCounted)
  100. +        break;
  101. +  }
  102. +
  103. +  if (defences > 0) {
  104. +      value = 1.0f + multiplier * (defences / (defences + mod));
  105. +      value = MAX(value, 0.0f);
  106. +      G_LogPrintf( "Anti-camper bonus for killing %s near %d defences: %d%%\n",
  107. +              self->client->pers.netname, defences, (int)(value * 100.0f) );
  108. +      return value;
  109. +  } else
  110. +      return 1.0f;
  111. +}
  112. +
  113. +/*
  114. +==================
  115.  G_RewardAttackers
  116.  
  117.  Function to distribute rewards to entities that killed this one.
  118. @@ -159,6 +247,7 @@
  119.    if( self->client )
  120.    {
  121.      value = BG_GetValueOfPlayer( &self->client->ps );
  122. +    value *= G_CamperRewardBonus( self );
  123.      team = self->client->pers.teamSelection;
  124.      maxHealth = self->client->ps.stats[ STAT_MAX_HEALTH ];
  125.    }
  126. Index: src/game/g_main.c
  127. ===================================================================
  128. --- src/game/g_main.c   (revision 2260)
  129. +++ src/game/g_main.c   (working copy)
  130. @@ -99,6 +99,13 @@
  131.  vmCvar_t  g_teamImbalanceWarnings;
  132.  vmCvar_t  g_freeFundPeriod;
  133.  
  134. +vmCvar_t  g_alienAnticampBonusMax;
  135. +vmCvar_t  g_alienAnticampBonus1;
  136. +vmCvar_t  g_alienAnticampRange;
  137. +vmCvar_t  g_humanAnticampBonusMax;
  138. +vmCvar_t  g_humanAnticampBonus1;
  139. +vmCvar_t  g_humanAnticampRange;
  140. +
  141.  vmCvar_t  g_unlagged;
  142.  
  143.  vmCvar_t  g_disabledEquipment;
  144. @@ -230,6 +237,13 @@
  145.    { &g_teamImbalanceWarnings, "g_teamImbalanceWarnings", "30", CVAR_ARCHIVE, 0, qfalse  },
  146.    { &g_freeFundPeriod, "g_freeFundPeriod", DEFAULT_FREEKILL_PERIOD, CVAR_ARCHIVE, 0, qtrue },
  147.  
  148. +  { &g_alienAnticampBonusMax, "g_alienAnticampBonusMax", "1.5", 0, 0, qfalse  },
  149. +  { &g_alienAnticampBonus1, "g_alienAnticampBonus1", "0.5", 0, 0, qfalse  },
  150. +  { &g_alienAnticampRange, "g_alienAnticampRange", "600", 0, 0, qfalse  },
  151. +  { &g_humanAnticampBonusMax, "g_humanAnticampBonusMax", "1.5", 0, 0, qfalse  },
  152. +  { &g_humanAnticampBonus1, "g_humanAnticampBonus1", "0.5", 0, 0, qfalse  },
  153. +  { &g_humanAnticampRange, "g_humanAnticampRange", "800", 0, 0, qfalse  },
  154. +
  155.    { &g_unlagged, "g_unlagged", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue  },
  156.  
  157.    { &g_disabledEquipment, "g_disabledEquipment", "", CVAR_ROM | CVAR_SYSTEMINFO, 0, qfalse  },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement