public static void SendPvpData(IPacketReceiver reciever, BattlegroundSide side, Battleground bg) { bg.EnsureContext(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.MSG_PVP_LOG_DATA, 10 + bg.PlayerCount * 40)) { BattlegroundTeam winner = bg.Winner; packet.Write(bg.IsArena); if (bg.IsArena) { for (int index = 0; index < 2; ++index) { packet.Write(0); packet.Write(3999); packet.Write(0); } packet.WriteCString(string.Empty); packet.WriteCString(string.Empty); } bool flag = bg.Winner != null; packet.Write(flag); if (flag) { packet.Write((byte)bg.Winner.Side); } List <Character> characters = bg.Characters; List <BattlegroundStats> listStats = new List <BattlegroundStats>(characters.Count); characters.ForEach(chr => listStats.Add(chr.Battlegrounds.Stats)); packet.Write(listStats.Count); for (int index = 0; index < listStats.Count; ++index) { Character character = characters[index]; if (character.IsInBattleground) { BattlegroundStats stats = character.Battlegrounds.Stats; packet.Write(character.EntityId); packet.Write(stats.KillingBlows); if (bg.IsArena) { packet.Write(winner != null && character.Battlegrounds.Team == winner); } else { packet.Write(stats.HonorableKills); packet.Write(stats.Deaths); packet.Write(stats.BonusHonor); } packet.Write(stats.TotalDamage); packet.Write(stats.TotalHealing); packet.Write(stats.SpecialStatCount); stats.WriteSpecialStats(packet); } } reciever.Send(packet, false); } }
public static BattleStats Battle(Creature creatureA, Creature creatureB, Battleground battleground) { BattlegroundStats bgStats = new BattlegroundStats();//ScriptableObject.CreateInstance<BattlegroundStats>(); bgStats.GenerateBattlegroundStats(battleground); creatureA.ApplyGenesPerBattleground(bgStats); creatureB.ApplyGenesPerBattleground(bgStats); return(DoBattleSimulation(creatureA, creatureB)); }
public void ApplyGenesPerBattleground(BattlegroundStats bgStats) { ResetToBase(); int hpModAccum = 0; int apModAccum = 0; int attCostModAccum = 0; int attDmgModAccum = 0; int armorRatingModAccum = 0; foreach (CreatureGene.GeneFlags geneFlag in System.Enum.GetValues(typeof(CreatureGene.GeneFlags))) { if (geneFlag != CreatureGene.GeneFlags.LastEntry) { if ((chromosome & (int)geneFlag) == (int)geneFlag) { foreach (CreatureGene.CreatureGeneModifier mod in GeneMap[geneFlag].modifiers) { if (mod.statType == CreatureGene.CreatureGeneModifier.CreatureStatType.HP) { hpModAccum += Mathf.CeilToInt(baseHealthPoints * bgStats.modifierPerTileType[mod.tileType]); } else if (mod.statType == CreatureGene.CreatureGeneModifier.CreatureStatType.AP) { apModAccum += Mathf.CeilToInt(baseActionPoints * bgStats.modifierPerTileType[mod.tileType]); } else if (mod.statType == CreatureGene.CreatureGeneModifier.CreatureStatType.AttackCost) { attCostModAccum += Mathf.CeilToInt(baseAttackCost * bgStats.modifierPerTileType[mod.tileType]); } else if (mod.statType == CreatureGene.CreatureGeneModifier.CreatureStatType.AttackDamage) { attDmgModAccum += Mathf.CeilToInt(baseAttackDamage * bgStats.modifierPerTileType[mod.tileType]); } else if (mod.statType == CreatureGene.CreatureGeneModifier.CreatureStatType.Armor) { armorRatingModAccum += Mathf.CeilToInt(baseArmorRating * bgStats.modifierPerTileType[mod.tileType]); } } foreach (CreatureGene.CreatureAbility ability in GeneMap[geneFlag].abilities) { abilities[ability.abilityType].Add(ability); } } } } healthPoints += hpModAccum; actionPoints += apModAccum; attackCost += attCostModAccum; attackDamage += attDmgModAccum; armorRating += armorRatingModAccum; preBattleHealthPoints = healthPoints; }