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(); }
//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); }
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(); }