Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

пвп звания! - Форум

  • Сторінка 1 з 1
  • 1
пвп звания!
DarkensandДата: Четвер, 14.04.2011, 23:57 | Сообщение # 1



Darkensand
Главный Админ
Лучший из лучших
Группа: Администратор
Сообщений: 8083



Оффлайн
Code
--- a/src/server/game/World/World.cpp    
+++ b/src/server/game/World/World.cpp    
@@ -862,6 +862,18 @@ void World::LoadConfigSettings(bool relo    
             sLog.outError("MinPetitionSigns (%i) must be in range 0..9. Set to 9.", m_int_configs[CONFIG_MIN_PETITION_SIGNS]);    
             m_int_configs[CONFIG_MIN_PETITION_SIGNS] = 9;    
         }    
+    rate_values[RATE_PVP_RANK_EXTRA_HONOR] = sConfig.GetFloatDefault("PvPRank.Rate.ExtraHonor", 1);    
+    std::string s_pvp_ranks = sConfig.GetStringDefault("PvPRank.HKPerRank", "10,50,100,200,450,750,1300,2000,3500,6000,9500,15000,21000,30000");    
+    char *c_pvp_ranks = const_cast<char*>(s_pvp_ranks.c_str());    
+    for (int i = 0; i !=HKRANKMAX; i++)    
+    {    
+        if (i==0)    
+            pvp_ranks[0] = 0;    
+        else if (i==1)    
+            pvp_ranks[1] = atoi(strtok (c_pvp_ranks, ","));    
+        else    
+            pvp_ranks[i] = atoi(strtok (NULL, ","));    
+    }    
         
         m_int_configs[CONFIG_GM_LOGIN_STATE]        = sConfig.GetIntDefault("GM.LoginState", 2);    
         m_int_configs[CONFIG_GM_VISIBLE_STATE]      = sConfig.GetIntDefault("GM.Visible", 2);    

--- a/src/server/game/World/World.h    
+++ b/src/server/game/World/World.h    
@@ -390,9 +390,30 @@ enum Rates    
         RATE_DURABILITY_LOSS_PARRY,    
         RATE_DURABILITY_LOSS_ABSORB,    
         RATE_DURABILITY_LOSS_BLOCK,    
+    RATE_PVP_RANK_EXTRA_HONOR,       
         RATE_MOVESPEED,    
         MAX_RATES    
     };    
+        
+enum HonorKillPvPRank    
+{    
+    HKRANK00,    
+    HKRANK01,    
+    HKRANK02,    
+    HKRANK03,    
+    HKRANK04,    
+    HKRANK05,    
+    HKRANK06,    
+    HKRANK07,    
+    HKRANK08,    
+    HKRANK09,    
+    HKRANK10,    
+    HKRANK11,    
+    HKRANK12,    
+    HKRANK13,    
+    HKRANK14,    
+    HKRANKMAX    
+};    
         
     /// Can be used in SMSG_AUTH_RESPONSE packet    
     enum BillingPlanFlags    
@@ -639,6 +660,8 @@ class World    
             void SendZoneText(uint32 zone, const char *text, WorldSession *self = 0, uint32 team = 0);    
             void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL);    
         
+        uint32 pvp_ranks[HKRANKMAX];    
+    
             /// Are we in the middle of a shutdown?    
             bool IsShutdowning() const { return m_ShutdownTimer > 0; }    
             void ShutdownServ(uint32 time, uint32 options, uint8 exitcode);    

--- a/src/server/game/Entities/Player/Player.cpp    
+++ b/src/server/game/Entities/Player/Player.cpp    
@@ -6770,6 +6770,7 @@ bool Player::RewardHonor(Unit *uVictim,     
         
         uint64 victim_guid = 0;    
         uint32 victim_rank = 0;    
+    uint32 rank_diff = 0;    
         
         // need call before fields update to have chance move yesterday data to appropriate fields before today data change.    
         UpdateHonorFields();    
@@ -6808,22 +6809,52 @@ bool Player::RewardHonor(Unit *uVictim,     
                 //  [15..28] Horde honor titles and player name    
                 //  [29..38] Other title and player name    
                 //  [39+]    Nothing    
-            uint32 victim_title = pVictim->GetUInt32Value(PLAYER_CHOSEN_TITLE);    
-                    // Get Killer titles, CharTitlesEntry::bit_index    
+            // PLAYER__FIELD_KNOWN_TITLES describe which titles player can use,    
+            // so we must find biggest pvp title , even for killer to find extra honor value    
+            uint32 vtitle = pVictim->GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES);    
+            uint32 victim_title = 0;    
+            uint32 ktitle = GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES);    
+            uint32 killer_title = 0;    
+            if (PLAYER_TITLE_MASK_ALL_PVP & ktitle)    
+            {    
+                for (int i = ((GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)    
+                {    
+                    if (ktitle & (1<<i))    
+                        killer_title = i;    
+                }    
+            }    
+            if (PLAYER_TITLE_MASK_ALL_PVP & vtitle)    
+            {    
+                for (int i = ((pVictim->GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((pVictim->GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)    
+                {    
+                    if (vtitle & (1<<i))    
+                        victim_title = i;    
+                }    
+            }    
+            // Get Killer titles, CharTitlesEntry::bit_index    
                 // Ranks:    
                 //  title[1..14]  -> rank[5..18]    
                 //  title[15..28] -> rank[5..18]    
                 //  title[other]  -> 0    
                 if (victim_title == 0)    
+                victim_guid = 0;                        // Don't show HK: <rank> message, only log.]    
+            else if (victim_title < HKRANKMAX)    
+                victim_rank = victim_title + 4;    
+            else if (victim_title < (2*HKRANKMAX-1))    
+                victim_rank = victim_title - (HKRANKMAX-1) + 4;    
+            else    
                     victim_guid = 0;                        // Don't show HK: <rank> message, only log.    
-            else if (victim_title < 15)    
-                victim_rank = victim_title + 4;    
-            else if (victim_title < 29)    
-                victim_rank = victim_title - 14 + 4;    
-            else    
-                victim_guid = 0;                        // Don't show HK: <rank> message, only log.    
+     
+            // now find rank difference    
+            if (killer_title == 0 && victim_rank>4)    
+                rank_diff = victim_rank - 4;    
+            else if (killer_title < HKRANKMAX)    
+                rank_diff = (victim_rank>(killer_title + 4))? (victim_rank - (killer_title + 4)) : 0;    
+            else if (killer_title < (2*HKRANKMAX-1))    
+                rank_diff = (victim_rank>(killer_title - (HKRANKMAX-1) +4))? (victim_rank - (killer_title - (HKRANKMAX-1) + 4)) : 0;    
         
-             honor_f = ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey));    
+            honor_f = 1 + sWorld.getRate(RATE_PVP_RANK_EXTRA_HONOR)*(((float)rank_diff) / 10.0f);    

                 // count the number of playerkills in one day    
                 ApplyModUInt32Value(PLAYER_FIELD_KILLS, 1, true);    
@@ -6832,6 +6863,7 @@ bool Player::RewardHonor(Unit *uVictim,     
                 UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL);    
                 UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS, pVictim->getClass());    
                 UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_RACE, pVictim->getRace());    
+            UpdateKnownTitles();    
             }    
             else    
             {    
@@ -6905,6 +6937,30 @@ bool Player::RewardHonor(Unit *uVictim,     
         return true;    
     }    
         
+void Player::UpdateKnownTitles()    
+{    
+    uint32 new_title = 0;    
+    uint32 honor_kills = GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS);    
+    uint32 old_title = GetUInt32Value(PLAYER_CHOSEN_TITLE);    
+    RemoveFlag64(PLAYER__FIELD_KNOWN_TITLES,PLAYER_TITLE_MASK_ALL_PVP);    
+    if (honor_kills < 0)    
+        return;    
+    bool max_rank = ((honor_kills >= sWorld.pvp_ranks[HKRANKMAX-1]) ? true : false);    
+    for (int i = HKRANK01; i != HKRANKMAX; ++i)    
+    {    
+        if (honor_kills < sWorld.pvp_ranks[i] || (max_rank))    
+        {    
+            new_title = ((max_rank) ? (HKRANKMAX-1) : (i-1));    
+            if (new_title > 0)    
+                new_title += ((GetTeam() == ALLIANCE) ? 0 : (HKRANKMAX-1));    
+            break;    
+        }    
+    }    
+    SetFlag64(PLAYER__FIELD_KNOWN_TITLES,uint64(1) << new_title);    
+    if (old_title > 0 && old_title < (2*HKRANKMAX-1) && new_title > old_title)    
+        SetUInt32Value(PLAYER_CHOSEN_TITLE,new_title);    
+}    
+    
     void Player::ModifyHonorPoints(int32 value)    
     {    
         if (value < 0)    

--- a/src/server/game/Entities/Player/Player.h    
+++ b/src/server/game/Entities/Player/Player.h    
@@ -387,6 +387,27 @@ enum PlayerFlags    
         PLAYER_FLAGS_NO_XP_GAIN     = 0x02000000    
     };    
         
+#define PLAYER_TITLE_MASK_ALLIANCE_PVP             \    
+    (PLAYER_TITLE_PRIVATE | PLAYER_TITLE_CORPORAL |      
+      PLAYER_TITLE_SERGEANT_A | PLAYER_TITLE_MASTER_SERGEANT |     
+      PLAYER_TITLE_SERGEANT_MAJOR | PLAYER_TITLE_KNIGHT |     
+      PLAYER_TITLE_KNIGHT_LIEUTENANT | PLAYER_TITLE_KNIGHT_CAPTAIN |     
+      PLAYER_TITLE_KNIGHT_CHAMPION | PLAYER_TITLE_LIEUTENANT_COMMANDER |     
+      PLAYER_TITLE_COMMANDER | PLAYER_TITLE_MARSHAL |     
+      PLAYER_TITLE_FIELD_MARSHAL | PLAYER_TITLE_GRAND_MARSHAL)    
+    
+#define PLAYER_TITLE_MASK_HORDE_PVP                           \    
+    (PLAYER_TITLE_SCOUT | PLAYER_TITLE_GRUNT |      
+      PLAYER_TITLE_SERGEANT_H | PLAYER_TITLE_SENIOR_SERGEANT |     
+      PLAYER_TITLE_FIRST_SERGEANT | PLAYER_TITLE_STONE_GUARD |     
+      PLAYER_TITLE_BLOOD_GUARD | PLAYER_TITLE_LEGIONNAIRE |     
+      PLAYER_TITLE_CENTURION | PLAYER_TITLE_CHAMPION |     
+      PLAYER_TITLE_LIEUTENANT_GENERAL | PLAYER_TITLE_GENERAL |     
+      PLAYER_TITLE_WARLORD | PLAYER_TITLE_HIGH_WARLORD)    
+    
+#define PLAYER_TITLE_MASK_ALL_PVP  \    
+    (PLAYER_TITLE_MASK_ALLIANCE_PVP | PLAYER_TITLE_MASK_HORDE_PVP)    
+    
     // used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)    
     // can't use enum for uint64 values    
     #define PLAYER_TITLE_DISABLED              UI64LIT(0x0000000000000000)    
@@ -1975,6 +1996,7 @@ class Player : public Unit, public GridO    
                 if (value)    
                     AddKnownCurrency(ITEM_ARENA_POINTS_ID); // Arena Points    
             }    
+        void UpdateKnownTitles();    
         
             //End of PvP System
 
TFKKДата: Неділя, 17.04.2011, 16:30 | Сообщение # 2



TFKK
Скаут
Группа: V.I.P
Сообщений: 39

Замечания:

Оффлайн
Раздел то Патчи в базу)
А ты что выложил?))



Работаю только с Trinity Core!
DELETE TABLE account (вот бы запросик на офф)
Делаю ядра на заказ (только Win)
Пойду на любой проект! Писать в скайп "tfk---"!
 
PantadeDogmenДата: Понеділок, 16.05.2011, 16:36 | Сообщение # 3



PantadeDogmen
Капрал
Группа: Пользователи
Сообщений: 90

Замечания:

Оффлайн
Тема была перенесена в раздел патчи в ядро.




Мама, дай пять рублей. - Что? Четыре рубля? Зачем тебе три рубля? Тебе и двух хватит. Вон, рубль на холодильнике

Как оказалось, «Лада Калина» соответствует всем экологическим стандартам. Она полностью сгнивает за два года.
 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz