Core/Level: Fixes crash when trying to GM level over max level of the current Expansion

This commit is contained in:
hondacrx
2021-01-19 10:52:40 -05:00
parent 09a2f59d3a
commit c37a8a57b7
+51 -52
View File
@@ -6147,79 +6147,78 @@ namespace Game
if (level <= WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel)) if (level <= WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel))
return pInfo.levelInfo[level - 1]; return pInfo.levelInfo[level - 1];
//else else
//return BuildPlayerLevelInfo(race, _class, level, info); return BuildPlayerLevelInfo(race, _class, level);
return null;
} }
/*
void BuildPlayerLevelInfo(byte race, Class _class, byte level, PlayerLevelInfo info) PlayerLevelInfo BuildPlayerLevelInfo(Race race, Class _class, uint level)
{ {
// base data (last known level) // base data (last known level)
info = _playerInfo[race][_class].levelInfo[WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) - 1]; var info = _playerInfo[(byte)race][(int)_class].levelInfo[WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) - 1];
// if conversion from uint32 to uint8 causes unexpected behaviour, change lvl to uint32
for (int lvl = WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) - 1; lvl < level; ++lvl) for (int lvl = WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel) - 1; lvl < level; ++lvl)
{ {
switch (_class) switch (_class)
{ {
case Class.Warrior: case Class.Warrior:
info.stats[STAT_STRENGTH] += (lvl > 23 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[0] += (lvl > 23 ? 2 : (lvl > 1 ? 1 : 0));
info.stats[STAT_STAMINA] += (lvl > 23 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[1] += (lvl > 23 ? 2 : (lvl > 1 ? 1 : 0));
info.stats[STAT_AGILITY] += (lvl > 36 ? 1 : (lvl > 6 && (lvl % 2) ? 1 : 0)); info.stats[2] += (lvl > 36 ? 1 : (lvl > 6 && (lvl % 2) != 0 ? 1 : 0));
info.stats[STAT_INTELLECT] += (lvl > 9 && !(lvl % 2) ? 1 : 0); info.stats[3] += (lvl > 9 && (lvl % 2) == 0 ? 1 : 0);
break; break;
case CLASS_PALADIN: case Class.Paladin:
info.stats[STAT_STRENGTH] += (lvl > 3 ? 1 : 0); info.stats[0] += (lvl > 3 ? 1 : 0);
info.stats[STAT_STAMINA] += (lvl > 33 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[1] += (lvl > 33 ? 2 : (lvl > 1 ? 1 : 0));
info.stats[STAT_AGILITY] += (lvl > 38 ? 1 : (lvl > 7 && !(lvl % 2) ? 1 : 0)); info.stats[2] += (lvl > 38 ? 1 : (lvl > 7 && (lvl % 2) == 0 ? 1 : 0));
info.stats[STAT_INTELLECT] += (lvl > 6 && (lvl % 2) ? 1 : 0); info.stats[3] += (lvl > 6 && (lvl % 2) != 0 ? 1 : 0);
break; break;
case CLASS_HUNTER: case Class.Hunter:
info.stats[STAT_STRENGTH] += (lvl > 4 ? 1 : 0); info.stats[0] += (lvl > 4 ? 1 : 0);
info.stats[STAT_STAMINA] += (lvl > 4 ? 1 : 0); info.stats[1] += (lvl > 4 ? 1 : 0);
info.stats[STAT_AGILITY] += (lvl > 33 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[2] += (lvl > 33 ? 2 : (lvl > 1 ? 1 : 0));
info.stats[STAT_INTELLECT] += (lvl > 8 && (lvl % 2) ? 1 : 0); info.stats[3] += (lvl > 8 && (lvl % 2) != 0 ? 1 : 0);
break; break;
case CLASS_ROGUE: case Class.Rogue:
info.stats[STAT_STRENGTH] += (lvl > 5 ? 1 : 0); info.stats[0] += (lvl > 5 ? 1 : 0);
info.stats[STAT_STAMINA] += (lvl > 4 ? 1 : 0); info.stats[1] += (lvl > 4 ? 1 : 0);
info.stats[STAT_AGILITY] += (lvl > 16 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[2] += (lvl > 16 ? 2 : (lvl > 1 ? 1 : 0));
info.stats[STAT_INTELLECT] += (lvl > 8 && !(lvl % 2) ? 1 : 0); info.stats[3] += (lvl > 8 && (lvl % 2) == 0 ? 1 : 0);
break; break;
case CLASS_PRIEST: case Class.Priest:
info.stats[STAT_STRENGTH] += (lvl > 9 && !(lvl % 2) ? 1 : 0); info.stats[0] += (lvl > 9 && (lvl % 2) == 0 ? 1 : 0);
info.stats[STAT_STAMINA] += (lvl > 5 ? 1 : 0); info.stats[1] += (lvl > 5 ? 1 : 0);
info.stats[STAT_AGILITY] += (lvl > 38 ? 1 : (lvl > 8 && (lvl % 2) ? 1 : 0)); info.stats[2] += (lvl > 38 ? 1 : (lvl > 8 && (lvl % 2) != 0 ? 1 : 0));
info.stats[STAT_INTELLECT] += (lvl > 22 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[3] += (lvl > 22 ? 2 : (lvl > 1 ? 1 : 0));
break; break;
case CLASS_SHAMAN: case Class.Shaman:
info.stats[STAT_STRENGTH] += (lvl > 34 ? 1 : (lvl > 6 && (lvl % 2) ? 1 : 0)); info.stats[0] += (lvl > 34 ? 1 : (lvl > 6 && (lvl % 2) != 0 ? 1 : 0));
info.stats[STAT_STAMINA] += (lvl > 4 ? 1 : 0); info.stats[1] += (lvl > 4 ? 1 : 0);
info.stats[STAT_AGILITY] += (lvl > 7 && !(lvl % 2) ? 1 : 0); info.stats[2] += (lvl > 7 && (lvl % 2) == 0 ? 1 : 0);
info.stats[STAT_INTELLECT] += (lvl > 5 ? 1 : 0); info.stats[3] += (lvl > 5 ? 1 : 0);
break; break;
case CLASS_MAGE: case Class.Mage:
info.stats[STAT_STRENGTH] += (lvl > 9 && !(lvl % 2) ? 1 : 0); info.stats[0] += (lvl > 9 && (lvl % 2) == 0 ? 1 : 0);
info.stats[STAT_STAMINA] += (lvl > 5 ? 1 : 0); info.stats[1] += (lvl > 5 ? 1 : 0);
info.stats[STAT_AGILITY] += (lvl > 9 && !(lvl % 2) ? 1 : 0); info.stats[2] += (lvl > 9 && (lvl % 2) == 0 ? 1 : 0);
info.stats[STAT_INTELLECT] += (lvl > 24 ? 2 : (lvl > 1 ? 1 : 0)); info.stats[3] += (lvl > 24 ? 2 : (lvl > 1 ? 1 : 0));
break; break;
case CLASS_WARLOCK: case Class.Warlock:
info.stats[STAT_STRENGTH] += (lvl > 9 && !(lvl % 2) ? 1 : 0); info.stats[0] += (lvl > 9 && (lvl % 2) == 0 ? 1 : 0);
info.stats[STAT_STAMINA] += (lvl > 38 ? 2 : (lvl > 3 ? 1 : 0)); info.stats[1] += (lvl > 38 ? 2 : (lvl > 3 ? 1 : 0));
info.stats[STAT_AGILITY] += (lvl > 9 && !(lvl % 2) ? 1 : 0); info.stats[2] += (lvl > 9 && (lvl % 2) == 0 ? 1 : 0);
info.stats[STAT_INTELLECT] += (lvl > 33 ? 2 : (lvl > 2 ? 1 : 0)); info.stats[3] += (lvl > 33 ? 2 : (lvl > 2 ? 1 : 0));
break; break;
case CLASS_DRUID: case Class.Druid:
info.stats[STAT_STRENGTH] += (lvl > 38 ? 2 : (lvl > 6 && (lvl % 2) ? 1 : 0)); info.stats[0] += (lvl > 38 ? 2 : (lvl > 6 && (lvl % 2) != 0 ? 1 : 0));
info.stats[STAT_STAMINA] += (lvl > 32 ? 2 : (lvl > 4 ? 1 : 0)); info.stats[1] += (lvl > 32 ? 2 : (lvl > 4 ? 1 : 0));
info.stats[STAT_AGILITY] += (lvl > 38 ? 2 : (lvl > 8 && (lvl % 2) ? 1 : 0)); info.stats[2] += (lvl > 38 ? 2 : (lvl > 8 && (lvl % 2) != 0 ? 1 : 0));
info.stats[STAT_INTELLECT] += (lvl > 38 ? 3 : (lvl > 4 ? 1 : 0)); info.stats[3] += (lvl > 38 ? 3 : (lvl > 4 ? 1 : 0));
break; break;
} }
} }
return info;
} }
*/
//Pets //Pets
public void LoadPetLevelInfo() public void LoadPetLevelInfo()