[8343] Extand level allowed range for item use to upper values if it end at max player level. Author: VladimirMangos

Also add DEFAULT_MAX_LEVEL define for store current used client expection about max player level.
    For example for current supported this is 80.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-08-12 20:30:17 -05:00
parent 4f4775a31b
commit d575793f6d
3 changed files with 19 additions and 6 deletions
+5
View File
@@ -19,6 +19,11 @@
#ifndef DBCENUMS_H #ifndef DBCENUMS_H
#define DBCENUMS_H #define DBCENUMS_H
// Client expected level limitation, like as used in DBC item max levels for "until max player level"
// use as default max player level, must be fit max level for used client
// also see MAX_LEVEL and STRONG_MAX_LEVEL define
#define DEFAULT_MAX_LEVEL 80
// client supported max level for player/pets/etc. Avoid overflow or client stability affected. // client supported max level for player/pets/etc. Avoid overflow or client stability affected.
// also see GT_MAX_LEVEL define // also see GT_MAX_LEVEL define
#define MAX_LEVEL 100 #define MAX_LEVEL 100
+12 -4
View File
@@ -6690,13 +6690,20 @@ void Player::_ApplyItemMods(Item *item, uint8 slot,bool apply)
void Player::_ApplyItemBonuses(ItemPrototype const *proto, uint8 slot, bool apply, bool only_level_scale /*= false*/) void Player::_ApplyItemBonuses(ItemPrototype const *proto, uint8 slot, bool apply, bool only_level_scale /*= false*/)
{ {
if(slot >= INVENTORY_SLOT_BAG_END || !proto) if (slot >= INVENTORY_SLOT_BAG_END || !proto)
return; return;
ScalingStatDistributionEntry const *ssd = proto->ScalingStatDistribution ? sScalingStatDistributionStore.LookupEntry(proto->ScalingStatDistribution) : NULL; ScalingStatDistributionEntry const *ssd = proto->ScalingStatDistribution ? sScalingStatDistributionStore.LookupEntry(proto->ScalingStatDistribution) : NULL;
ScalingStatValuesEntry const *ssv = proto->ScalingStatValue ? sScalingStatValuesStore.LookupEntry(getLevel()) : NULL; if (only_level_scale && !ssd)
return;
if(only_level_scale && !(ssd && ssv)) // req. check at equip, but allow use for extended range if range limit max level, set proper level
uint32 ssd_level = getLevel();
if (ssd && ssd_level > ssd->MaxLevel)
ssd_level = ssd->MaxLevel;
ScalingStatValuesEntry const *ssv = proto->ScalingStatValue ? sScalingStatValuesStore.LookupEntry(ssd_level) : NULL;
if (only_level_scale && !ssv)
return; return;
for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i)
@@ -10145,7 +10152,8 @@ uint8 Player::CanEquipItem( uint8 slot, uint16 &dest, Item *pItem, bool swap, bo
} }
ScalingStatDistributionEntry const *ssd = pProto->ScalingStatDistribution ? sScalingStatDistributionStore.LookupEntry(pProto->ScalingStatDistribution) : 0; ScalingStatDistributionEntry const *ssd = pProto->ScalingStatDistribution ? sScalingStatDistributionStore.LookupEntry(pProto->ScalingStatDistribution) : 0;
if (ssd && ssd->MaxLevel < getLevel()) // check allowed level (extend range to upper values if MaxLevel more or equal max player level, this let GM set high level with 1...max range items)
if (ssd && ssd->MaxLevel < DEFAULT_MAX_LEVEL && ssd->MaxLevel < getLevel())
return EQUIP_ERR_ITEM_CANT_BE_EQUIPPED; return EQUIP_ERR_ITEM_CANT_BE_EQUIPPED;
uint8 eslot = FindEquipSlot( pProto, slot, swap ); uint8 eslot = FindEquipSlot( pProto, slot, swap );
+2 -2
View File
@@ -711,12 +711,12 @@ void World::LoadConfigSettings(bool reload)
if(reload) if(reload)
{ {
uint32 val = sConfig.GetIntDefault("MaxPlayerLevel", 80); uint32 val = sConfig.GetIntDefault("MaxPlayerLevel", DEFAULT_MAX_LEVEL);
if(val!=m_configs[CONFIG_MAX_PLAYER_LEVEL]) if(val!=m_configs[CONFIG_MAX_PLAYER_LEVEL])
sLog.outError("MaxPlayerLevel option can't be changed at config reload, using current value (%u).",m_configs[CONFIG_MAX_PLAYER_LEVEL]); sLog.outError("MaxPlayerLevel option can't be changed at config reload, using current value (%u).",m_configs[CONFIG_MAX_PLAYER_LEVEL]);
} }
else else
m_configs[CONFIG_MAX_PLAYER_LEVEL] = sConfig.GetIntDefault("MaxPlayerLevel", 80); m_configs[CONFIG_MAX_PLAYER_LEVEL] = sConfig.GetIntDefault("MaxPlayerLevel", DEFAULT_MAX_LEVEL);
if(m_configs[CONFIG_MAX_PLAYER_LEVEL] > MAX_LEVEL) if(m_configs[CONFIG_MAX_PLAYER_LEVEL] > MAX_LEVEL)
{ {