Misc fixes and missed stuff.

This commit is contained in:
hondacrx
2022-01-04 17:37:55 -05:00
parent ed761eb400
commit 97ce4d6db7
11 changed files with 112 additions and 102 deletions
+55 -55
View File
@@ -47,18 +47,18 @@ namespace Game.BattlePets
foreach (var battlePetBreedState in CliDB.BattlePetBreedStateStorage.Values)
{
if (!_battlePetBreedStates.ContainsKey(battlePetBreedState.BattlePetBreedID))
_battlePetBreedStates[battlePetBreedState.BattlePetBreedID] = new Dictionary<BattlePetState, int>();
if (!BattlePetBreedStates.ContainsKey(battlePetBreedState.BattlePetBreedID))
BattlePetBreedStates[battlePetBreedState.BattlePetBreedID] = new Dictionary<BattlePetState, int>();
_battlePetBreedStates[battlePetBreedState.BattlePetBreedID][(BattlePetState)battlePetBreedState.BattlePetStateID] = battlePetBreedState.Value;
BattlePetBreedStates[battlePetBreedState.BattlePetBreedID][(BattlePetState)battlePetBreedState.BattlePetStateID] = battlePetBreedState.Value;
}
foreach (var battlePetSpeciesState in CliDB.BattlePetSpeciesStateStorage.Values)
{
if (!_battlePetSpeciesStates.ContainsKey(battlePetSpeciesState.BattlePetSpeciesID))
_battlePetSpeciesStates[battlePetSpeciesState.BattlePetSpeciesID] = new Dictionary<BattlePetState, int>();
if (!BattlePetSpeciesStates.ContainsKey(battlePetSpeciesState.BattlePetSpeciesID))
BattlePetSpeciesStates[battlePetSpeciesState.BattlePetSpeciesID] = new Dictionary<BattlePetState, int>();
_battlePetSpeciesStates[battlePetSpeciesState.BattlePetSpeciesID][(BattlePetState)battlePetSpeciesState.BattlePetStateID] = battlePetSpeciesState.Value;
BattlePetSpeciesStates[battlePetSpeciesState.BattlePetSpeciesID][(BattlePetState)battlePetSpeciesState.BattlePetStateID] = battlePetSpeciesState.Value;
}
LoadAvailablePetBreeds();
@@ -709,62 +709,62 @@ namespace Game.BattlePets
Dictionary<ulong, BattlePet> _pets = new();
List<BattlePetSlot> _slots = new();
static Dictionary<uint, Dictionary<BattlePetState, int>> _battlePetBreedStates = new();
static Dictionary<uint, Dictionary<BattlePetState, int>> _battlePetSpeciesStates = new();
public static Dictionary<uint, Dictionary<BattlePetState, int>> BattlePetBreedStates = new();
public static Dictionary<uint, Dictionary<BattlePetState, int>> BattlePetSpeciesStates = new();
static MultiMap<uint, byte> _availableBreedsPerSpecies = new();
static Dictionary<uint, BattlePetBreedQuality> _defaultQualityPerSpecies = new();
}
public class BattlePet
public class BattlePet
{
public void CalculateStats()
{
public void CalculateStats()
// get base breed stats
var breedState = BattlePetMgr.BattlePetBreedStates.LookupByKey(PacketInfo.Breed);
if (breedState == null) // non existing breed id
return;
float health = breedState[BattlePetState.StatStamina];
float power = breedState[BattlePetState.StatPower];
float speed = breedState[BattlePetState.StatSpeed];
// modify stats depending on species - not all pets have this
var speciesState = BattlePetMgr.BattlePetSpeciesStates.LookupByKey(PacketInfo.Species);
if (speciesState != null)
{
// get base breed stats
var breedState = _battlePetBreedStates.LookupByKey(PacketInfo.Breed);
if (breedState == null) // non existing breed id
return;
float health = breedState[BattlePetState.StatStamina];
float power = breedState[BattlePetState.StatPower];
float speed = breedState[BattlePetState.StatSpeed];
// modify stats depending on species - not all pets have this
var speciesState = _battlePetSpeciesStates.LookupByKey(PacketInfo.Species);
if (speciesState != null)
{
health += speciesState[BattlePetState.StatStamina];
power += speciesState[BattlePetState.StatPower];
speed += speciesState[BattlePetState.StatSpeed];
}
// modify stats by quality
foreach (var battlePetBreedQuality in CliDB.BattlePetBreedQualityStorage.Values)
{
if (battlePetBreedQuality.QualityEnum == PacketInfo.Quality)
{
health *= battlePetBreedQuality.StateMultiplier;
power *= battlePetBreedQuality.StateMultiplier;
speed *= battlePetBreedQuality.StateMultiplier;
break;
}
// TOOD: add check if pet has existing quality
}
// scale stats depending on level
health *= PacketInfo.Level;
power *= PacketInfo.Level;
speed *= PacketInfo.Level;
// set stats
// round, ceil or floor? verify this
PacketInfo.MaxHealth = (uint)((Math.Round(health / 20) + 100));
PacketInfo.Power = (uint)(Math.Round(power / 100));
PacketInfo.Speed = (uint)(Math.Round(speed / 100));
health += speciesState[BattlePetState.StatStamina];
power += speciesState[BattlePetState.StatPower];
speed += speciesState[BattlePetState.StatSpeed];
}
public BattlePetStruct PacketInfo;
public long NameTimestamp;
public DeclinedName DeclinedName;
public BattlePetSaveInfo SaveInfo;
// modify stats by quality
foreach (var battlePetBreedQuality in CliDB.BattlePetBreedQualityStorage.Values)
{
if (battlePetBreedQuality.QualityEnum == PacketInfo.Quality)
{
health *= battlePetBreedQuality.StateMultiplier;
power *= battlePetBreedQuality.StateMultiplier;
speed *= battlePetBreedQuality.StateMultiplier;
break;
}
// TOOD: add check if pet has existing quality
}
// scale stats depending on level
health *= PacketInfo.Level;
power *= PacketInfo.Level;
speed *= PacketInfo.Level;
// set stats
// round, ceil or floor? verify this
PacketInfo.MaxHealth = (uint)((Math.Round(health / 20) + 100));
PacketInfo.Power = (uint)(Math.Round(power / 100));
PacketInfo.Speed = (uint)(Math.Round(speed / 100));
}
public BattlePetStruct PacketInfo;
public long NameTimestamp;
public DeclinedName DeclinedName;
public BattlePetSaveInfo SaveInfo;
}
}