All pastes #919163 Raw Edit

Mine

public diff v1 · immutable
#919163 ·published 2008-02-26 17:18 UTC
rendered paste body
Index: src/game/ItemPrototype.h===================================================================--- src/game/ItemPrototype.h	(revision 5306)+++ src/game/ItemPrototype.h	(working copy)@@ -536,7 +536,7 @@     uint32 socketBonus;                                     // id from SpellItemEnchantment.dbc     uint32 GemProperties;                                   // id from GemProperties.dbc     uint32 ExtendedCost;                                    // id from ItemExtendedCost.dbc-    uint32 RequiredArenaRank;+    uint32 RequiredArenaRank;                               // id from ItemCondExtCosts.dbc     // note: this field should be renamed accordingly     uint32 RequiredDisenchantSkill;     float  ArmorDamageModifier;     char* ScriptName;Index: src/game/ObjectMgr.cpp===================================================================--- src/game/ObjectMgr.cpp	(revision 5306)+++ src/game/ObjectMgr.cpp	(working copy)@@ -1340,6 +1340,10 @@         if(proto->ExtendedCost && !sItemExtendedCostStore.LookupEntry(proto->ExtendedCost))             sLog.outErrorDb("Item (Entry: %u) has wrong ExtendedCost (%u)",i,proto->ExtendedCost); +        // check if the extended cost and the required arena rank pair is valid (does it have entry in ItemCondExtCosts.dbc?)+        if(proto->ExtendedCost && proto->RequiredArenaRank && !GetItemCondExtCostsMask(proto->RequiredArenaRank, proto->ExtendedCost))+            sLog.outErrorDb("Item (Entry: %u) has wrong ExtendedCost - RequiredArenaRank pair (%u, %u)",i,proto->ExtendedCost,proto->RequiredArenaRank);+         if(proto->FoodType >= MAX_PET_DIET)         {             sLog.outErrorDb("Item (Entry: %u) has wrong FoodType value (%u)",i,proto->FoodType);Index: src/game/Player.cpp===================================================================--- src/game/Player.cpp	(revision 5306)+++ src/game/Player.cpp	(working copy)@@ -15280,6 +15280,9 @@         if(pProto->ExtendedCost)         {             ItemExtendedCostEntry const* iece = sItemExtendedCostStore.LookupEntry(pProto->ExtendedCost);+            uint32 mask = 0;+            if(pProto->RequiredArenaRank)+                mask = GetItemCondExtCostsMask(pProto->RequiredArenaRank, pProto->ExtendedCost);             if(iece)             {                 if(GetHonorPoints() < (iece->reqhonorpoints * count))@@ -15299,6 +15302,13 @@                     SendEquipError(EQUIP_ERR_VENDOR_MISSING_TURNINS, NULL, NULL);                     return false;                 }+                // check for personal arena rating requirement+                if( (mask & (1<<3)) && (GetMaxPersonalArenaRatingRequirement() < iece->reqpersonalarenarating) )+                {+                    // probably not the proper equip err+                    SendEquipError(EQUIP_ERR_CANT_EQUIP_RANK,NULL,NULL);+                    return false;+                }             }             else             {@@ -15434,6 +15444,26 @@     return false; } +uint32 Player::GetMaxPersonalArenaRatingRequirement()+{+    // returns the maximal personal arena rating that can be used to purchase items requiring this condition+    // the personal rating of the arena team must match the required limit as well+    // so return max[in arenateams](min(personalrating[teamtype], teamrating[teamtype]))+    uint32 max_personal_rating = 0;+    for(int i = 0; i < 3; ++i)+    {+        if(ArenaTeam * at = objmgr.GetArenaTeamById(GetArenaTeamId(i)))+        {+            uint32 p_rating = GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (i * 6) + 5);+            uint32 t_rating = at->GetRating();+            p_rating = p_rating<t_rating? p_rating : t_rating;+            if(max_personal_rating < p_rating)+                max_personal_rating = p_rating;+        }+    }+    return max_personal_rating;+}+ void Player::_SaveBoundInstances() {     CharacterDatabase.PExecute("DELETE FROM character_instance WHERE (guid = '%u')", GetGUIDLow());Index: src/game/Player.h===================================================================--- src/game/Player.h	(revision 5306)+++ src/game/Player.h	(working copy)@@ -1598,6 +1598,7 @@         bool RewardHonor(Unit *pVictim, uint32 groupsize, float honor = -1);         uint32 GetHonorPoints() { return GetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY); }         uint32 GetArenaPoints() { return GetUInt32Value(PLAYER_FIELD_ARENA_CURRENCY); }+        uint32 GetMaxPersonalArenaRatingRequirement();         void SetHonorPoints(uint32 val) { SetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY, val); }         void SetArenaPoints(uint32 val) { SetUInt32Value(PLAYER_FIELD_ARENA_CURRENCY, val); }         void SetFlushKills(bool value) { m_flushKills = value; }Index: src/shared/Database/DBCfmt.cpp===================================================================--- src/shared/Database/DBCfmt.cpp	(revision 5306)+++ src/shared/Database/DBCfmt.cpp	(working copy)@@ -42,7 +42,8 @@ const char GtRegenHPPerSptfmt[]="f"; const char GtRegenMPPerSptfmt[]="f"; const char ItemDisplayTemplateEntryfmt[]="nxxxxxxxxxxixxxxxxxxxxx";-const char ItemExtendedCostEntryfmt[]="niiiiixxiiixxx";+const char ItemCondExtCostsEntryfmt[]="xiii";+const char ItemExtendedCostEntryfmt[]="niiiiixxiiixxi"; const char ItemRandomPropertiesfmt[]="nxiiixxxxxxxxxxxxxxxxxxx"; const char ItemRandomSuffixfmt[]="nxxxxxxxxxxxxxxxxxxiiiiii"; const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii";Index: src/shared/Database/DBCStores.cpp===================================================================--- src/shared/Database/DBCStores.cpp	(revision 5306)+++ src/shared/Database/DBCStores.cpp	(working copy)@@ -66,6 +66,7 @@  DBCStorage <ItemSetEntry> sItemSetStore(ItemSetEntryfmt); //DBCStorage <ItemDisplayInfoEntry> sItemDisplayInfoStore(ItemDisplayTemplateEntryfmt); -- not used currently+DBCStorage <ItemCondExtCostsEntry> sItemCondExtCostsStore(ItemCondExtCostsEntryfmt); DBCStorage <ItemExtendedCostEntry> sItemExtendedCostStore(ItemExtendedCostEntryfmt); DBCStorage <ItemRandomPropertiesEntry> sItemRandomPropertiesStore(ItemRandomPropertiesfmt); DBCStorage <ItemRandomSuffixEntry> sItemRandomSuffixStore(ItemRandomSuffixfmt);@@ -170,7 +171,7 @@ {     std::string tmpPath=""; -    const uint32 DBCFilesCount = 48;+    const uint32 DBCFilesCount = 49;      barGoLink bar( DBCFilesCount ); @@ -230,6 +231,7 @@     LoadDBC(bar,bad_dbc_files,sGtRegenMPPerSptStore,     dataPath+"dbc/gtRegenMPPerSpt.dbc");      //LoadDBC(bar,bad_dbc_files,sItemDisplayInfoStore,     dataPath+"dbc/ItemDisplayInfo.dbc");     -- not used currently+    LoadDBC(bar,bad_dbc_files,sItemCondExtCostsStore,    dataPath+"dbc/ItemCondExtCosts.dbc");     LoadDBC(bar,bad_dbc_files,sItemExtendedCostStore,    dataPath+"dbc/ItemExtendedCost.dbc");     LoadDBC(bar,bad_dbc_files,sItemRandomPropertiesStore,dataPath+"dbc/ItemRandomProperties.dbc");     LoadDBC(bar,bad_dbc_files,sItemRandomSuffixStore,    dataPath+"dbc/ItemRandomSuffix.dbc");@@ -542,6 +544,19 @@     return sTalentTabPages[cls]; } +uint32 GetItemCondExtCostsMask(uint32 requiredarenarank, uint32 itemextendedcost)+{+    // create and return mask for (RequiredArenaRank, ItemExtendedCost) pair+    uint32 mask = 0;+    for(uint32 i = 0; i < sItemCondExtCostsStore.nCount; ++i)+    {+        ItemCondExtCostsEntry const* icece = sItemCondExtCostsStore.LookupEntry(i);+        if(icece && icece->requiredarenarank == requiredarenarank && icece->itemextendedcostentry == itemextendedcost)+            mask |= (1 << icece->requirementtype);+    }+    return mask;+}+ // script support functions MANGOS_DLL_SPEC DBCStorage <SpellEntry>      const* GetSpellStore()      { return &sSpellStore;      } MANGOS_DLL_SPEC DBCStorage <SpellRangeEntry> const* GetSpellRangeStore() { return &sSpellRangeStore; }Index: src/shared/Database/DBCStores.h===================================================================--- src/shared/Database/DBCStores.h	(revision 5306)+++ src/shared/Database/DBCStores.h	(working copy)@@ -44,6 +44,7 @@ uint32 GetTalentInspectBitPosInTab(uint32 talentId); uint32 GetTalentTabInspectBitSize(uint32 talentTabId); uint32 const* /*[3]*/ GetTalentTabPages(uint32 cls);+uint32 GetItemCondExtCostsMask(uint32 requiredarenarank, uint32 itemextendedcost);  template<class T> class DBCStorageIndex: src/shared/Database/DBCStructure.h===================================================================--- src/shared/Database/DBCStructure.h	(revision 5306)+++ src/shared/Database/DBCStructure.h	(working copy)@@ -283,6 +283,16 @@     uint32      randomPropertyChance; }; +struct ItemCondExtCostsEntry+{+    // uint32      ID;+    uint32      requiredarenarank;                          // ItemPrototype::RequiredArenaRank+    uint32      itemextendedcostentry;                      // ItemPrototype::ExtendedCost+    uint32      requirementtype;                            // 1 - honor and/or arena point from itemextendedcost+                                                            // 2 - required item(s) from itemextendedcost+                                                            // 3 - required personal arena rating from itemextendedcost+};+ struct ItemExtendedCostEntry {     uint32      ID;                                         // 0 extended-cost entry id@@ -296,7 +306,7 @@     uint32      reqitemcount2;                              // 9 required count of 2st item     uint32      reqitemcount3;                              // 10 required count of 3st item                                                             // 11-12 not used, always 0 (4-5 item count?)-                                                            // 13 not used+    uint32      reqpersonalarenarating;                     // 13 required personal arena rating };  struct ItemRandomPropertiesEntry