Ejemplo n.º 1
0
 public void SetDirection(Direction direction)
 {
     m_ArmyDirection = direction;
     for (int i = Soldiers.Count - 1; i >= 0; i--)
     {
         BaseCreature soldier = (BaseCreature)Soldiers[i];
         if (soldier.Direction != m_ArmyDirection)
         {
             if (!(soldier.AIObject is ArmyAI))
             {
                 soldier.ChangeAIType(AIType.AI_Army);
             }
             ((ArmyAI)(soldier.AIObject)).ArmyDirection = m_ArmyDirection;
         }
     }
     UpdateAction();
 }
Ejemplo n.º 2
0
        //public bool GeoRecruit(Mobile from, BaseCreature soldier)
        //{

        //    if (!Soldiers.Contains(soldier))
        //    {
        //            //BaseHire recruit = soldier as BaseHire;
        //            if (from is PlayerMobile)
        //            {
        //                if (Soldiers.Count + 1 <= ((PlayerMobile)from).GetAptitudeValue(Aptitude.Commandement))
        //                Soldiers.Add(soldier);
        //                soldier.ChangeAIType(AIType.AI_Army);
        //                soldier.Controlled = false;
        //                soldier.ControlMaster = null;
        //                from.SendMessage("{0} has joined the Army.", soldier.Name);
        //                //SetFormation(ArmyFormationEnum.Latest);
        //                //SetDirection(m_ArmyDirection);
        //                return true;
        //            }
        //            /*else if (Soldiers.Count + 1 <= CalculateMaxFollowers(from))
        //            {
        //                Soldiers.Add(soldier);
        //                soldier.ChangeAIType(AIType.AI_Army);
        //                soldier.Controlled = false;
        //                soldier.ControlMaster = null;
        //                from.SendMessage("{0} has joined the Army.", recruit.Title);
        //                //SetFormation(ArmyFormationEnum.Latest);
        //                //SetDirection(m_ArmyDirection);
        //                return true;
        //            }*/
        //            else
        //            {
        //                from.SendMessage("Vous avez {0} soldats et pouvez seulement en avoir {1}", ArmySize, ((PlayerMobile)from).GetAptitudeValue(Aptitude.Commandement));
        //                //soldier.Say("You have {0} soldiers already, and can only have {1}!", ArmySize, CalculateMaxFollowers(from));
        //                return false;
        //            }
        //    }
        //    else
        //    {
        //        soldier.Say("Sir, I am already in the Army!");
        //        return false;
        //    }
        //}

        public void Recruit(Mobile from, BaseCreature soldier)
        {
            if (!Soldiers.Contains(soldier))
            {
                //if (soldier is BaseHire)
                //{
                //BaseHire recruit = soldier as BaseHire;
                //if (from == recruit.GetOwner())
                //{

                if (Soldiers.Count + 1 <= CalculateMaxFollowers(from))
                {
                    Soldiers.Add(soldier);
                    soldier.ChangeAIType(AIType.AI_Army);
                    soldier.Controlled    = false;
                    soldier.ControlMaster = null;
                    from.SendMessage("{0} has joined the Army.", soldier.Name);
                    SetFormation(ArmyFormationEnum.Latest);
                    SetDirection(m_ArmyDirection);
                }
                else
                {
                    /*TEMP*/
                    soldier.Say("You have {0} soldiers already, and can only have {1}!", ArmySize, CalculateMaxFollowers(from));
                }
                //soldier.Say("Your army is bigger then your head!");
                //}
                //else
                //    soldier.Say("You need to hire me first!");
                //}
                //else
                //    soldier.Say("I am not for hire!");
            }
            else
            {
                soldier.Say("Sir, I am already in the Army!");
            }
            TargetRecruit(from);
        }
Ejemplo n.º 3
0
        public void GoThere(Point3D point)
        {
            m_ArmyHome = point;
            int    xx = 0;
            int    yy = 0;
            int    x  = 0;
            int    y  = 0;
            int    a  = 0;
            int    b  = 0;
            double c  = 0.0;

            a = Soldiers.Count;
            b = (int)Math.Sqrt((double)Soldiers.Count);
            c = ((double)a) / 6.292;

            for (int i = 0; i < a; i++)
            {
                BaseCreature soldier = (BaseCreature)Soldiers[i];
                switch (m_ArmyFormationDirection)
                {
                case Direction.North: xx = x; yy = y; break;

                case Direction.Right: xx = x + y; yy = -x + y; break;

                case Direction.East: xx = y; yy = -x; break;

                case Direction.Down: xx = -x + y; yy = -x - y; break;

                case Direction.South: xx = -x; yy = -y; break;

                case Direction.Left: xx = -x - y; yy = x - y; break;

                case Direction.West: xx = -y; yy = x; break;

                case Direction.Up: xx = x - y; yy = x + y; break;

                default: break;
                }
                if (!(soldier.AIObject is ArmyAI))
                {
                    soldier.ChangeAIType(AIType.AI_Army);
                }
                ((ArmyAI)(soldier.AIObject)).ArmyHome = new Point3D(point.X + xx, point.Y + yy, point.Z);
                switch (m_CurrentFormation)
                {
                case ArmyFormationEnum.Latest:
                    break;

                case ArmyFormationEnum.FullSquare:
                    if (x == 0)
                    {
                        x = y + 1;
                        y = 0;
                    }
                    else if (y < x)
                    {
                        y++;
                    }
                    else
                    {
                        x--;
                    }
                    break;

                case ArmyFormationEnum.EmptySquare:
                    if ((x < a / 4) && (y == 0))
                    {
                        x = x + 1;
                    }
                    else if ((x == a / 4) && (y < a / 4))
                    {
                        y++;
                    }
                    else if ((x > 0) && (y == a / 4))
                    {
                        x--;
                    }
                    else
                    {
                        y--;
                    }
                    break;

                case ArmyFormationEnum.Line:
                    x++;
                    break;

                case ArmyFormationEnum.Triangle:
                    if (x == 0)
                    {
                        x = y + 1;
                        y = 0;
                    }
                    else
                    {
                        y = x;
                        x = 0;
                    }
                    break;

                case ArmyFormationEnum.Other:
                    x = (int)((c + 0.5) * Math.Cos((double)(i + 1) / c) - (c + 0.5));
                    y = (int)((c + 0.5) * Math.Sin((double)(i + 1) / c));
                    break;

                case ArmyFormationEnum.Bordel:
                {
                    x = Utility.RandomMinMax(0, b * 2);
                    y = Utility.RandomMinMax(0, b * 2);
                }
                break;

                default:
                    break;
                }
            }
            CheckSoldiersStatus();
        }