Ejemplo n.º 1
0
        public IResult PerformCommand(IMobileObject performer, ICommand command)
        {
            IPlayerCharacter pc = performer as IPlayerCharacter;

            if (pc == null)
            {
                return(new Result(false, "Only player characters can receive."));
            }

            Tuple <INonPlayerCharacter, ICraftsman> foundCraftsman = null;

            foreach (INonPlayerCharacter npc in performer.Room.NonPlayerCharacters)
            {
                foreach (IPersonality personality in npc.Personalities)
                {
                    ICraftsman craftsman = personality as ICraftsman;
                    if (craftsman != null)
                    {
                        foundCraftsman = new Tuple <INonPlayerCharacter, ICraftsman>(npc, craftsman);
                        break;
                    }
                }
                if (foundCraftsman != null)
                {
                    break;
                }
            }

            if (foundCraftsman == null)
            {
                return(new Result(false, "No craftsman found at this location."));
            }

            bool foundItem = false;

            for (int i = pc.CraftsmanObjects.Count - 1; i >= 0; i--)
            {
                ICraftsmanObject craftsmanObject = pc.CraftsmanObjects[i];

                if (craftsmanObject.CraftsmanId.Zone == foundCraftsman.Item1.Zone &&
                    craftsmanObject.CraftsmanId.Id == foundCraftsman.Item1.Id &&
                    craftsmanObject.Completion < DateTime.Now)
                {
                    pc.Items.Add(craftsmanObject.Item);
                    pc.CraftsmanObjects.RemoveAt(i);
                    foundCraftsman.Item1.EnqueueCommand($"Tell {pc.KeyWords[0]} As promised, here is your {craftsmanObject.Item.KeyWords[0]}.");
                    foundItem = true;
                }
            }

            if (foundItem)
            {
                return(new Result(true, ""));
            }
            else
            {
                foundCraftsman.Item1.EnqueueCommand($"Tell {pc.KeyWords[0]} Sorry I don't have anything for you to pick up at this time.");
                return(new Result(false, ""));
            }
        }
Ejemplo n.º 2
0
Archivo: Craft.cs Proyecto: crybx/mud
        public IResult PerformCommand(IMobileObject performer, ICommand command)
        {
            IPlayerCharacter pc = performer as IPlayerCharacter;

            if (pc == null)
            {
                return(new Result(false, "Only player characters can have craftsman craft items."));
            }

            INonPlayerCharacter craftsman            = null;
            ICraftsman          craftsmanPersonality = null;

            FindCraftsman(performer, ref craftsman, ref craftsmanPersonality);

            if (craftsman == null)
            {
                return(new Result(false, "There is no craftsman to make anything for you."));
            }

            if (command.Parameters.Count < 7)
            {
                return(new Result(false, "Please provide all the parameters needed for the craftsman to make your item."));
            }

            try
            {
                AvalableItemPosition position = GetPosition(command.Parameters[0].ParameterValue);
                if (position == AvalableItemPosition.Wield && command.Parameters.Count < 8)
                {
                    return(new Result(false, "Damage type is required for weapons."));
                }

                int        level               = int.Parse(command.Parameters[1].ParameterValue);
                string     keyword             = command.Parameters[2].ParameterValue;
                string     sentenceDescription = command.Parameters[3].ParameterValue;
                string     shortDescription    = command.Parameters[4].ParameterValue;
                string     longDescription     = command.Parameters[5].ParameterValue;
                string     examineDescription  = command.Parameters[6].ParameterValue;
                DamageType damageType          = DamageType.Acid;
                if (position == AvalableItemPosition.Wield)
                {
                    damageType = GetDamageType(command.Parameters[7].ParameterValue);
                }

                return(craftsmanPersonality.Build(craftsman, pc, position, level, keyword, sentenceDescription, shortDescription, longDescription, examineDescription, damageType));
            }
            catch (Exception ex)
            {
                if (ex is ArgumentException)
                {
                    return(new Result(false, ex.Message));
                }
                else
                {
                    return(new Result(false, "Please verify all parameters and try again."));
                }
            }
        }
Ejemplo n.º 3
0
        public IResult PerformCommand(IMobileObject performer, ICommand command)
        {
            IResult result = base.PerfomCommand(performer, command);

            if (result != null)
            {
                return(result);
            }

            if (!(performer is IPlayerCharacter pc))
            {
                return(new Result("Only player characters can have craftsman craft items.", true));
            }

            INonPlayerCharacter craftsman            = null;
            ICraftsman          craftsmanPersonality = null;

            FindCraftsman(performer, ref craftsman, ref craftsmanPersonality);

            if (craftsman == null)
            {
                return(new Result("There is no craftsman to make anything for you.", true));
            }

            if (command.Parameters.Count < 7)
            {
                return(new Result("Please provide all the parameters needed for the craftsman to make your item.", true));
            }

            try
            {
                AvalableItemPosition position = GetPosition(command.Parameters[0].ParameterValue);
                if (position == AvalableItemPosition.Wield && command.Parameters.Count < 8)
                {
                    return(new Result("Damage type is required for weapons.", true));
                }

                int        level               = int.Parse(command.Parameters[1].ParameterValue);
                string     keyword             = command.Parameters[2].ParameterValue;
                string     sentenceDescription = command.Parameters[3].ParameterValue;
                string     shortDescription    = command.Parameters[4].ParameterValue;
                string     lookDescription     = command.Parameters[5].ParameterValue;
                string     examineDescription  = command.Parameters[6].ParameterValue;
                DamageType damageType          = DamageType.Acid;
                if (position == AvalableItemPosition.Wield)
                {
                    damageType = GetDamageType(command.Parameters[7].ParameterValue);
                }

                if (level > craftsman.Level)
                {
                    craftsman.EnqueueCommand($"Tell {performer.KeyWords[0]} That is above my skill level.  You will need to find someone a higher level to craft such an item.");
                    return(new Result(null, true));
                }

                return(craftsmanPersonality.Build(craftsman, pc, position, level, keyword, sentenceDescription, shortDescription, lookDescription, examineDescription, damageType));
            }
            catch (Exception ex)
            {
                if (ex is ArgumentException)
                {
                    return(new Result(ex.Message, true));
                }
                else
                {
                    return(new Result("Please verify all parameters and try again.", true));
                }
            }
        }
Ejemplo n.º 4
0
        private static void FindCraftsman(IMobileObject performer, ref INonPlayerCharacter craftsman, ref ICraftsman craftsmanPersonality)
        {
            foreach (INonPlayerCharacter npc in performer.Room.NonPlayerCharacters)
            {
                foreach (IPersonality personality in npc.Personalities)
                {
                    if (personality is ICraftsman)
                    {
                        craftsmanPersonality = personality as ICraftsman;
                        craftsman            = npc;
                        break;
                    }
                }

                if (craftsman != null)
                {
                    break;
                }
            }
        }