Advertisement
Guest User

Untitled

a guest
May 28th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.23 KB | None | 0 0
  1. Trinitycore.conf
  2. ###################################################################################################################
  3. # PVP RANK / TITLE SYSTEM
  4. #
  5. # PvPRank.Rate.ExtraHonor
  6. # Rate of honor bonus for killing higher pvp ranked players
  7. # Default: 1 - 10% more honor per rank difference
  8. # 2 - 20%
  9. # 0 - off
  10. #
  11. # PvPRank.HKPerRank
  12. # Honor Kills needed for each rank, use "," between values.
  13. # Whole string must be enclosed with " "
  14. # Always specify 14 values, for 14 ranks
  15. # Default: "10,50,100,200,450,750,1300,2000,3500,6000,9500,15000,21000,30000"
  16. #
  17. ##################################################################################################################
  18.  
  19. PvPRank.Rate.ExtraHonor = 2
  20. PvPRank.HKPerRank = "10,50,100,200,450,750,1300,2000,3500,6000,9500,15000,21000,30000"
  21.  
  22.  
  23.  
  24.  
  25. ______________________________________________________________________________
  26.  
  27.  
  28.  
  29. PVP RANK / TITLE SYSTEM
  30.  
  31. diff -r 82e97dd44602 src/game/Player.cpp
  32. --- a/src/game/Player.cpp Wed Sep 02 12:36:14 2009 +0200
  33. +++ b/src/game/Player.cpp Wed Sep 02 15:12:18 2009 +0300
  34. @@ -6263,6 +6263,7 @@
  35.  
  36. uint64 victim_guid = 0;
  37. uint32 victim_rank = 0;
  38. + uint32 rank_diff = 0;
  39. time_t now = time(NULL);
  40.  
  41. // need call before fields update to have chance move yesterday data to appropriate fields before today data change.
  42. @@ -6298,21 +6299,50 @@
  43. // [15..28] Horde honor titles and player name
  44. // [29..38] Other title and player name
  45. // [39+] Nothing
  46. - uint32 victim_title = pVictim->GetUInt32Value(PLAYER_CHOSEN_TITLE);
  47. - // Get Killer titles, CharTitlesEntry::bit_index
  48. + // PLAYER__FIELD_KNOWN_TITLES describe which titles player can use,
  49. + // so we must find biggest pvp title , even for killer to find extra honor value
  50. + uint32 vtitle = pVictim->GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES);
  51. + uint32 victim_title = 0;
  52. + uint32 ktitle = GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES);
  53. + uint32 killer_title = 0;
  54. + if(PLAYER_TITLE_MASK_ALL_PVP & ktitle)
  55. + {
  56. + for(int i = ((GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)
  57. + {
  58. + if(ktitle & (1<<i))
  59. + killer_title = i;
  60. + }
  61. + }
  62. + if(PLAYER_TITLE_MASK_ALL_PVP & vtitle)
  63. + {
  64. + for(int i = ((pVictim->GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((pVictim->GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)
  65. + {
  66. + if(vtitle & (1<<i))
  67. + victim_title = i;
  68. + }
  69. + }
  70. + // Get Killer titles, CharTitlesEntry::bit_index
  71. // Ranks:
  72. // title[1..14] -> rank[5..18]
  73. // title[15..28] -> rank[5..18]
  74. // title[other] -> 0
  75. if (victim_title == 0)
  76. victim_guid = 0; // Don't show HK: <rank> message, only log.
  77. - else if (victim_title < 15)
  78. + else if (victim_title < HKRANKMAX)
  79. victim_rank = victim_title + 4;
  80. - else if (victim_title < 29)
  81. - victim_rank = victim_title - 14 + 4;
  82. + else if (victim_title < (2*HKRANKMAX-1))
  83. + victim_rank = victim_title - (HKRANKMAX-1) + 4;
  84. else
  85. victim_guid = 0; // Don't show HK: <rank> message, only log.
  86. - }
  87. +
  88. + // now find rank difference
  89. + if (killer_title == 0 && victim_rank>4)
  90. + rank_diff = victim_rank - 4;
  91. + else if (killer_title < HKRANKMAX)
  92. + rank_diff = (victim_rank>(killer_title + 4))? (victim_rank - (killer_title + 4)) : 0;
  93. + else if (killer_title < (2*HKRANKMAX-1))
  94. + rank_diff = (victim_rank>(killer_title - (HKRANKMAX-1) +4))? (victim_rank - (killer_title - (HKRANKMAX-1) + 4)) : 0;
  95. + }
  96.  
  97. k_grey = Trinity::XP::GetGrayLevel(k_level);
  98.  
  99. @@ -6325,6 +6355,7 @@
  100.  
  101. honor = ((f * diff_level * (190 + v_rank*10))/6);
  102. honor *= ((float)k_level) / 70.0f; //factor of dependence on levels of the killer
  103. + honor *= 1 + sWorld.getRate(RATE_PVP_RANK_EXTRA_HONOR)*(((float)rank_diff) / 10.0f);
  104.  
  105. // count the number of playerkills in one day
  106. ApplyModUInt32Value(PLAYER_FIELD_KILLS, 1, true);
  107. @@ -6333,6 +6364,7 @@
  108. UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL);
  109. UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS, pVictim->getClass());
  110. UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_RACE, pVictim->getRace());
  111. + UpdateKnownTitles();
  112. }
  113. else
  114. {
  115. @@ -6415,6 +6447,30 @@
  116. return true;
  117. }
  118.  
  119. +void Player::UpdateKnownTitles()
  120. +{
  121. + uint32 new_title = 0;
  122. + uint32 honor_kills = GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);
  123. + uint32 old_title = GetUInt32Value(PLAYER_CHOSEN_TITLE);
  124. + RemoveFlag64(PLAYER__FIELD_KNOWN_TITLES,PLAYER_TITLE_MASK_ALL_PVP);
  125. + if(honor_kills < 0)
  126. + return;
  127. + bool max_rank = ((honor_kills >= sWorld.pvp_ranks[HKRANKMAX-1]) ? true : false);
  128. + for(int i = HKRANK01; i != HKRANKMAX; ++i)
  129. + {
  130. + if(honor_kills < sWorld.pvp_ranks[i] || (max_rank))
  131. + {
  132. + new_title = ((max_rank) ? (HKRANKMAX-1) : (i-1));
  133. + if(new_title > 0)
  134. + new_title += ((GetTeam() == ALLIANCE) ? 0 : (HKRANKMAX-1));
  135. + break;
  136. + }
  137. + }
  138. + SetFlag64(PLAYER__FIELD_KNOWN_TITLES,uint64(1) << new_title);
  139. + if(old_title > 0 && old_title < (2*HKRANKMAX-1) && new_title > old_title)
  140. + SetUInt32Value(PLAYER_CHOSEN_TITLE,new_title);
  141. +}
  142. +
  143. void Player::ModifyHonorPoints( int32 value )
  144. {
  145. if(value < 0)
  146. diff -r 82e97dd44602 src/game/Player.h
  147. --- a/src/game/Player.h Wed Sep 02 12:36:14 2009 +0200
  148. +++ b/src/game/Player.h Wed Sep 02 15:12:18 2009 +0300
  149. @@ -441,6 +441,27 @@
  150. PLAYER_FLAGS_UNK25 = 0x01000000 // disabled all melee ability on tab include autoattack
  151. };
  152.  
  153. +#define PLAYER_TITLE_MASK_ALLIANCE_PVP \
  154. + ( PLAYER_TITLE_PRIVATE | PLAYER_TITLE_CORPORAL | \
  155. + PLAYER_TITLE_SERGEANT_A | PLAYER_TITLE_MASTER_SERGEANT | \
  156. + PLAYER_TITLE_SERGEANT_MAJOR | PLAYER_TITLE_KNIGHT | \
  157. + PLAYER_TITLE_KNIGHT_LIEUTENANT | PLAYER_TITLE_KNIGHT_CAPTAIN | \
  158. + PLAYER_TITLE_KNIGHT_CHAMPION | PLAYER_TITLE_LIEUTENANT_COMMANDER | \
  159. + PLAYER_TITLE_COMMANDER | PLAYER_TITLE_MARSHAL | \
  160. + PLAYER_TITLE_FIELD_MARSHAL | PLAYER_TITLE_GRAND_MARSHAL )
  161. +
  162. +#define PLAYER_TITLE_MASK_HORDE_PVP \
  163. + ( PLAYER_TITLE_SCOUT | PLAYER_TITLE_GRUNT | \
  164. + PLAYER_TITLE_SERGEANT_H | PLAYER_TITLE_SENIOR_SERGEANT | \
  165. + PLAYER_TITLE_FIRST_SERGEANT | PLAYER_TITLE_STONE_GUARD | \
  166. + PLAYER_TITLE_BLOOD_GUARD | PLAYER_TITLE_LEGIONNAIRE | \
  167. + PLAYER_TITLE_CENTURION | PLAYER_TITLE_CHAMPION | \
  168. + PLAYER_TITLE_LIEUTENANT_GENERAL | PLAYER_TITLE_GENERAL | \
  169. + PLAYER_TITLE_WARLORD | PLAYER_TITLE_HIGH_WARLORD )
  170. +
  171. +#define PLAYER_TITLE_MASK_ALL_PVP \
  172. + ( PLAYER_TITLE_MASK_ALLIANCE_PVP | PLAYER_TITLE_MASK_HORDE_PVP )
  173. +
  174. // used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
  175. // can't use enum for uint64 values
  176. #define PLAYER_TITLE_DISABLED UI64LIT(0x0000000000000000)
  177. @@ -1836,6 +1857,7 @@
  178. void ModifyHonorPoints( int32 value );
  179. void ModifyArenaPoints( int32 value );
  180. uint32 GetMaxPersonalArenaRatingRequirement();
  181. + void UpdateKnownTitles();
  182.  
  183. //End of PvP System
  184.  
  185. diff -r 82e97dd44602 src/game/World.cpp
  186. --- a/src/game/World.cpp Wed Sep 02 12:36:14 2009 +0200
  187. +++ b/src/game/World.cpp Wed Sep 02 15:12:18 2009 +0300
  188. @@ -820,6 +820,19 @@
  189. m_configs[CONFIG_START_ARENA_POINTS] = m_configs[CONFIG_MAX_ARENA_POINTS];
  190. }
  191.  
  192. + rate_values[RATE_PVP_RANK_EXTRA_HONOR] = sConfig.GetFloatDefault("PvPRank.Rate.ExtraHonor", 1);
  193. + std::string s_pvp_ranks = sConfig.GetStringDefault("PvPRank.HKPerRank", "10,50,100,200,450,750,1300,2000,3500,6000,9500,15000,21000,30000");
  194. + char *c_pvp_ranks = const_cast<char*>(s_pvp_ranks.c_str());
  195. + for (int i = 0; i !=HKRANKMAX; i++)
  196. + {
  197. + if(i==0)
  198. + pvp_ranks[0] = 0;
  199. + else if(i==1)
  200. + pvp_ranks[1] = atoi(strtok (c_pvp_ranks, ","));
  201. + else
  202. + pvp_ranks[i] = atoi(strtok (NULL, ","));
  203. + }
  204. +
  205. m_configs[CONFIG_ALL_TAXI_PATHS] = sConfig.GetBoolDefault("AllFlightPaths", false);
  206.  
  207. m_configs[CONFIG_INSTANCE_IGNORE_LEVEL] = sConfig.GetBoolDefault("Instance.IgnoreLevel", false);
  208. diff -r 82e97dd44602 src/game/World.h
  209. --- a/src/game/World.h Wed Sep 02 12:36:14 2009 +0200
  210. +++ b/src/game/World.h Wed Sep 02 15:12:18 2009 +0300
  211. @@ -327,10 +327,31 @@
  212. RATE_DURABILITY_LOSS_PARRY,
  213. RATE_DURABILITY_LOSS_ABSORB,
  214. RATE_DURABILITY_LOSS_BLOCK,
  215. + RATE_PVP_RANK_EXTRA_HONOR,
  216. RATE_MOVESPEED,
  217. MAX_RATES
  218. };
  219.  
  220. +enum HonorKillPvPRank
  221. +{
  222. + HKRANK00,
  223. + HKRANK01,
  224. + HKRANK02,
  225. + HKRANK03,
  226. + HKRANK04,
  227. + HKRANK05,
  228. + HKRANK06,
  229. + HKRANK07,
  230. + HKRANK08,
  231. + HKRANK09,
  232. + HKRANK10,
  233. + HKRANK11,
  234. + HKRANK12,
  235. + HKRANK13,
  236. + HKRANK14,
  237. + HKRANKMAX
  238. +};
  239. +
  240. /// Type of server
  241. enum RealmType
  242. {
  243. @@ -525,6 +546,8 @@
  244. void SendZoneText(uint32 zone, const char *text, WorldSession *self = 0, uint32 team = 0);
  245. void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL);
  246.  
  247. + uint32 pvp_ranks[HKRANKMAX];
  248. +
  249. /// Are we in the middle of a shutdown?
  250. bool IsShutdowning() const { return m_ShutdownTimer > 0; }
  251. void ShutdownServ(uint32 time, uint32 options, uint8 exitcode);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement