Автор Тема: HK: ранг система  (Прочетена 4540 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Неактивен zeraful

  • Rival
  • ******
  • Публикации: 1506
  • EVO Karma: 56
  • Само забравените мечти са неосъществими! ;>
  • ISP: Blizoo
  • Герой: Scream
HK: ранг система
« -: Февруари 17, 2013, 01:40:35 am »
Няма ли вариант този "мод" да се пусне и на нашия сървър и да се върне HK ранг системата? Говоря за HK ранговете, които се получават когато натрупаш определен брой HK от противниковата фракция.

Ще бъде забавно и нещо ново за сървъра.
    

Lasciate ogni speranza, voi ch'entrate!

Неактивен Feat

  • Crusader
  • **
  • Публикации: 183
  • EVO Karma: 10
  • wild child
Re: HK: ранг система
« Отговор #1 -: Февруари 17, 2013, 12:26:51 pm »
Ето и линг към нещо подобно старите рангове от Vanila, да и аз мисля че това би било добри да го има и при нас

http://filebeam.com/4209482b729a8e726645c0debb0b6a60

Password = MuskWoW


Неактивен FoX

  • Knight
  • *
  • Публикации: 42
  • EVO Karma: -11
  • Възбуден оптимист
Re: HK: ранг система
« Отговор #2 -: Февруари 17, 2013, 01:16:04 pm »
Да.Нещо от сорта би било добре,само че HK да бъдат както бяха на classic wow.Grand Marshal на 50к убийства.Това може да доведе до малко напреварване в сървъра и може ви ще повиши търсенето по бг-та :) Аз съм за.
 :clover: :clover: :clover:

Неактивен Sapphiron

  • EVOWOW Fan
  • Duelist
  • *
  • Публикации: 1035
  • EVO Karma: -96
  • It is too personal....
  • ISP: BTK
  • Side: For The Horde
  • Герой: Sapphiron
Re: HK: ранг система
« Отговор #3 -: Февруари 17, 2013, 08:02:56 pm »
+1 от мен! Идеята е добра! Мисля даже ,че и преди беше дискутирана ,но не помня какво стана тогава.Ако се пуска е важно всеки да му ги отчита от сегашните ми HK.Имам предвид хората с над 50к kills да не взимат автоматично титлата.Така ще е честно и може би ще има повече участници по BG-тата. Отделно ,за да бъде по - интересно може да се обвържат с нещо тези титли. Примерно при 50к kills получаваш правото да пазаруваш от някакво си npc и взимаш usefull pvp колби (free action potion ,speed potionkata и др.)Всичко е просто една идея ,съвсем друга приказа е дали може да се направи и дали си заслужава.
L2P -Learn To Play _!_
I am Paladin

Неактивен zeraful

  • Rival
  • ******
  • Публикации: 1506
  • EVO Karma: 56
  • Само забравените мечти са неосъществими! ;>
  • ISP: Blizoo
  • Герой: Scream
Re: HK: ранг система
« Отговор #4 -: Февруари 17, 2013, 08:19:47 pm »
Идеята ми може да бъде реализирана и си заслужава да се направи, но е въпрос на знания и възможности дали ще бъде осъществена :)

Относно това за пазаруването - твърдо не, достатъчна награда и стимул за правене на бг-та е това че от тази система получавате титла, няма нужда от други благинки.
    

Lasciate ogni speranza, voi ch'entrate!

Неактивен zeraful

  • Rival
  • ******
  • Публикации: 1506
  • EVO Karma: 56
  • Само забравените мечти са неосъществими! ;>
  • ISP: Blizoo
  • Герой: Scream
Re: HK: ранг система
« Отговор #5 -: Февруари 21, 2013, 07:56:26 pm »
 :doh:

И все пак?
    

Lasciate ogni speranza, voi ch'entrate!

Неактивен zeraful

  • Rival
  • ******
  • Публикации: 1506
  • EVO Karma: 56
  • Само забравените мечти са неосъществими! ;>
  • ISP: Blizoo
  • Герой: Scream
Re: HK: ранг система
« Отговор #6 -: Февруари 23, 2013, 09:35:40 pm »
up ?
    

Lasciate ogni speranza, voi ch'entrate!

Неактивен admin

  • Owner
  • Challenger
  • *****
  • Публикации: 11572
  • EVO Karma: 316
  • Think of will!
    • Peycho's Blog - Think of will!
  • ISP: AWS
  • Герой: Alein
Re: HK: ранг система
« Отговор #7 -: Февруари 23, 2013, 09:59:50 pm »
Видях темата. Няма нужда от ъп/бумп и др. подобни.

Къде ще се виждат тези рангове изобщо?
A systems programmer will know what to do when society breaks down, because the systems programmer already lives in a world without laws.

EVOWOW Private Wow Server
WOTLK Database

Неактивен dobermana

  • Duelist
  • *****
  • Публикации: 1313
  • EVO Karma: 51
Re: HK: ранг система
« Отговор #8 -: Февруари 23, 2013, 10:37:12 pm »
Къде ще се виждат тези рангове изобщо?

Като титла до името " Grand Marshal Dobermana" примерно
Ние, можещите, водени от незнаещите, вършим невъзможното за кефа на неблагодарните. И сме направили толкова много, с толкова малко, за толкова кратко време, че сме се квалифицирали да правим всичко от нищо. - Константин Иречек (1854 - 1918)

Неактивен zeraful

  • Rival
  • ******
  • Публикации: 1506
  • EVO Karma: 56
  • Само забравените мечти са неосъществими! ;>
  • ISP: Blizoo
  • Герой: Scream
Re: HK: ранг система
« Отговор #9 -: Февруари 23, 2013, 11:50:26 pm »
Видях темата. Няма нужда от ъп/бумп и др. подобни.

Къде ще се виждат тези рангове изобщо?

Тези рангове ти ги изписва първо с едни жълти буквички когато натрупаш нужните килове, в момента в който придобиеш този ранг същият ти дава и титла.

Примерно HK: Scout, ти дава титлата Scout.

Най-доброто, според мен, на тези титли е, че те имат еквивалент за всяка от двете фракции. Тоест за един и същи ранг алианса получава една титла, а ордите друга.
    

Lasciate ogni speranza, voi ch'entrate!

Неактивен admin

  • Owner
  • Challenger
  • *****
  • Публикации: 11572
  • EVO Karma: 316
  • Think of will!
    • Peycho's Blog - Think of will!
  • ISP: AWS
  • Герой: Alein
Re: HK: ранг система
« Отговор #10 -: Февруари 24, 2013, 03:22:14 pm »
Тоест това е свързано с ачивмент системата?
A systems programmer will know what to do when society breaks down, because the systems programmer already lives in a world without laws.

EVOWOW Private Wow Server
WOTLK Database

Неактивен zeraful

  • Rival
  • ******
  • Публикации: 1506
  • EVO Karma: 56
  • Само забравените мечти са неосъществими! ;>
  • ISP: Blizoo
  • Герой: Scream
Re: HK: ранг система
« Отговор #11 -: Февруари 24, 2013, 03:54:19 pm »
Тоест това е свързано с ачивмент системата?

Tова го имаше на доста стар пач, мисля че още на Vanila, а там мисля, че нямаше въобще ach-ове, но в момента идея си нямам как е направено, само знам че е възможно да се имплантира и на wotlk пач.
    

Lasciate ogni speranza, voi ch'entrate!

Неактивен admin

  • Owner
  • Challenger
  • *****
  • Публикации: 11572
  • EVO Karma: 316
  • Think of will!
    • Peycho's Blog - Think of will!
  • ISP: AWS
  • Герой: Alein
Re: HK: ранг система
« Отговор #12 -: Февруари 24, 2013, 04:03:35 pm »
Може би ще тествам това:

From 3d78218c0b63ea0ed5916f4bf333bccf58807d65 Mon Sep 17 00:00:00 2001
From: LordPsyan <[email protected]>
Date: Wed, 9 Nov 2011 08:54:23 -0600
Subject: [PATCH] 2011-11-09_PVPRanks

---
 src/server/game/Entities/Player/Player.cpp |   81 ++++++++++++++++++++++++---
 src/server/game/Entities/Player/Player.h   |   22 ++++++++
 src/server/game/World/World.cpp            |   12 ++++
 src/server/game/World/World.h              |   23 ++++++++
 4 files changed, 129 insertions(+), 9 deletions(-)

diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index adcefdd..2ef010b 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7107,6 +7107,7 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool pvpt
 
     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();
@@ -7151,17 +7152,54 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool pvpt
             //  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 < 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.
+                // 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 = victim->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 = ((plrVictim->GetTeam() == ALLIANCE) ? 1:HKRANKMAX);i!=((plrVictim->GetTeam() == ALLIANCE) ? HKRANKMAX : (2*HKRANKMAX-1));i++)
+                    {
+                        if (vtitle & (1<<i))
+                            victim_title = i;
+                    }
+                }
 
-            honor_f = ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey));
+                // 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.
+
+                // 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 *= 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);
             // and those in a lifetime
@@ -7169,6 +7207,7 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool pvpt
             UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL);
             UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS, victim->getClass());
             UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_RACE, victim->getRace());
+            UpdateKnownTitles();
             UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA, GetAreaId());
             UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL, 1, 0, victim);
         }
@@ -7262,6 +7301,30 @@ void Player::SetArenaPoints(uint32 value)
         AddKnownCurrency(ITEM_ARENA_POINTS_ID);
 }
 
+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, SQLTransaction* trans /*=NULL*/)
 {
     int32 newValue = int32(GetHonorPoints()) + value;
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 0b2ddb6..a58c79b 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -401,6 +401,27 @@ enum PlayerFlags
     PLAYER_FLAGS_UNK31             = 0x80000000
 };
 
+#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)
@@ -2058,6 +2079,7 @@ class Player : public Unit, public GridObject<Player>
         void ModifyHonorPoints(int32 value, SQLTransaction* trans = NULL);      //! If trans is specified, honor save query will be added to trans
         void ModifyArenaPoints(int32 value, SQLTransaction* trans = NULL);      //! If trans is specified, arena point save query will be added to trans
         uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const;
+        void UpdateKnownTitles();
         void SetHonorPoints(uint32 value);
         void SetArenaPoints(uint32 value);
 
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 408db18..6a2d03d 100755
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -848,6 +848,18 @@ void World::LoadConfigSettings(bool reload)
         sLog->outError(LOG_FILTER_SERVER_LOADING, "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] = ConfigMgr::GetFloatDefault("PvPRank.Rate.ExtraHonor", 1);
+    std::string s_pvp_ranks = ConfigMgr::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]        = ConfigMgr::GetIntDefault("GM.LoginState", 2);
     m_int_configs[CONFIG_GM_VISIBLE_STATE]      = ConfigMgr::GetIntDefault("GM.Visible", 2);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index b493b8b..952ccab 100755
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -375,10 +375,31 @@ 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
 {
@@ -633,6 +654,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 IsShuttingDown() const { return m_ShutdownTimer > 0; }
         uint32 GetShutDownTimeLeft() const { return m_ShutdownTimer; }
--
1.7.2.3
A systems programmer will know what to do when society breaks down, because the systems programmer already lives in a world without laws.

EVOWOW Private Wow Server
WOTLK Database

Problem

  • Гост
Re: HK: ранг система
« Отговор #13 -: Февруари 25, 2013, 10:32:14 pm »
Тъй като съм със 110к + убийства, как мога да получа титлите за по-малко убийства и има ли натам още титли ?

Неактивен admin

  • Owner
  • Challenger
  • *****
  • Публикации: 11572
  • EVO Karma: 316
  • Think of will!
    • Peycho's Blog - Think of will!
  • ISP: AWS
  • Герой: Alein
Re: HK: ранг система
« Отговор #14 -: Февруари 25, 2013, 10:37:43 pm »
Не съм наясно как работи точно системата но мисля че подменя старата титла с по-високия клас.
A systems programmer will know what to do when society breaks down, because the systems programmer already lives in a world without laws.

EVOWOW Private Wow Server
WOTLK Database