mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[8343] Extand level allowed range for item use to upper values if it end at max player level.
Also add DEFAULT_MAX_LEVEL define for store current used client expection about max player level. For example for current supported this is 80.
This commit is contained in:
parent
6a4b79cdc2
commit
93ed08e886
5 changed files with 24 additions and 7 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -6508,13 +6508,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 (int i = 0; i < MAX_ITEM_PROTO_STATS; ++i)
|
for (int i = 0; i < MAX_ITEM_PROTO_STATS; ++i)
|
||||||
|
|
@ -9784,7 +9791,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 );
|
||||||
|
|
|
||||||
|
|
@ -673,12 +673,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 mangosd.conf reload, using current value (%u).",m_configs[CONFIG_MAX_PLAYER_LEVEL]);
|
sLog.outError("MaxPlayerLevel option can't be changed at mangosd.conf 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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -70,4 +70,8 @@ enum LoginResult
|
||||||
|
|
||||||
#define EXPECTED_MANGOS_CLIENT_BUILD {9947, 0}
|
#define EXPECTED_MANGOS_CLIENT_BUILD {9947, 0}
|
||||||
|
|
||||||
|
// At update excepted builds please update if need define DEFAULT_MAX_LEVEL
|
||||||
|
// in DBCEnum.h to default max player level expected by build
|
||||||
|
// and alos in mangosd.conf.in
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8342"
|
#define REVISION_NR "8343"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue