示例#1
0
        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));
    }
示例#3
0
    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;
    }