Esempio n. 1
0
        public void Attack(CreatureBase Target)
        {
            Random RndGen      = new Random(DateTime.Now.Millisecond);
            double ChanceToHit = (((double)BaseAim - (double)Target.BaseSpeed) + (double)RndGen.Next(1, 10)) / (double)10 * (double)100;
            int    DamageDone  = 0;

            if (RndGen.Next(0, 100) > ChanceToHit)//Miss
            {
                Utilities.MessageLog.AddMsg(FirstName + " swings at " + Target.FirstName + " with a precision that leaves something to be desired.");
                return;
            }

            //Pick limb to use for attack
            bool HasPickedALimb = false;

            while (!HasPickedALimb)
            {
                foreach (LimbBase Limb in PreferredLimbAttackOrder)
                {
                    if (RndGen.Next(0, 100) < 95)
                    {
                        DamageDone     = Limb.AttackWith();
                        HasPickedALimb = true;
                        break;
                    }
                }
            }

            //Pick limb on target to strike
            HasPickedALimb = false;
            while (!HasPickedALimb)
            {
                foreach (LimbBase Limb in Target.Limbs)
                {
                    if (RndGen.Next(0, 100) < Limb.HitChance)
                    {
                        if (Limb.HP == 0)
                        {
                            Utilities.MessageLog.AddMsg(FirstName + " swings at the empty spot where " + Target.FirstName + "'s " + Limb.Description + " once was, severely injuring the air");
                            //Miss
                            return;
                        }
                        else
                        {
                            Limb.RecieveDamage(DamageDone);
                            if (Limb.HP < 30)
                            {
                                foreach (LimbDependency Dep in LimbDependencies)
                                {
                                    if (Dep.TargetLimb == Limb)
                                    {
                                        Dep.RequiredLimb.BleedRate++;
                                    }
                                }
                            }
                            Utilities.MessageLog.AddMsg(Target.FirstName + "'s " + Limb.Description + " takes the brunt of the impact!");
                            HasPickedALimb = true;
                            break;
                        }
                    }
                }
            }

            Utilities.DeathData DD = (Utilities.DeathData)Utilities.InterStateResources.Instance.Resources["Game_DeathData"];
            DD.Killer = this;
            Utilities.InterStateResources.Instance.Resources["Game_DeathData"] = DD;
        }