Example #1
0
        public void SetupEntityClasses(EntityModel model)
        {
            var ns = model.App.GetType().Namespace + ".Proxies";

            _assemblyInfo = _assemblyInfo ?? DynamicAssemblyInfo.Create(ns);

            var attrHandler = new AttributeHandler(addStandardAttributes: true);

            foreach (var ent in model.Entities)
            {
                var className  = ns + "." + ent.EntityType.Name.Substring(1); //Cut-off I
                var controller = new EntityEmitController(ent, _assemblyInfo, className, attrHandler);
                var emitter    = new ProxyEmitter(controller);
                emitter.ImplementInterface(ent.EntityType);
                var classType = emitter.CreateClass();
                var factory   = emitter.GetProxyFactory <Func <EntityRecord, EntityBase> >();
                ent.ClassInfo = new EntityClassInfo()
                {
                    Type = classType, CreateInstance = factory
                };
                //assign member Clr info
                var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
                foreach (var member in ent.Members)
                {
                    member.ClrClassMemberInfo = classType.GetProperty(member.MemberName, flags);
                }
            }
        }
Example #2
0
        public static InventoryItem HandleItemTrade(Character.Models.Character player, Character.Models.Character character, Items foundItem, Room.Models.Room currentRoom)
        {
            if (foundItem.InventoryItems.Any())
            {
                AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, foundItem.InventoryItems.First(), true);
                player.Attributes.CarriedItemsCount -= foundItem.InventoryItems.First().InventorySpaceConsumed;
                character.CarriedItems.Add(foundItem.InventoryItems.First());
                player.CarriedItems.Remove(foundItem.InventoryItems.First());

                if (character.DesiredItem != null &&
                    player.Attributes.CarriedItemsCount + character.OfferedItem.InventorySpaceConsumed <= player.Attributes.MaximumCarryingCapacity)
                {
                    AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, character.OfferedItem);
                    player.Attributes.CarriedItemsCount += character.OfferedItem.InventorySpaceConsumed;
                    player.CarriedItems.Add(character.OfferedItem);
                    character.CarriedItems.Remove(character.OfferedItem);
                    character.DesiredItem = new InventoryItem();
                    return(character.OfferedItem);
                }
            }

            return(new InventoryItem {
                ItemName = ""
            });
        }
 /// <summary>
 /// Register handlers that are invoked in "Handle" when an instance has, or is missing,
 /// the given attribute type.
 /// </summary>
 /// <param name="attributeType"></param>
 /// <param name="presentHandler"></param>
 /// <param name="missingHandler"></param>
 public void RegisterHandler(Type attributeType
                             , AttributeHandler presentHandler
                             , AttributeHandler missingHandler
                             , bool inheritable = false)
 {
     if (registeredAttributes.Contains(attributeType))
     {
         if (presentHandler != null)
         {
             attributePresentHandlers[attributeType] += presentHandler;
         }
         if (missingHandler != null)
         {
             attributeMissingHandlers[attributeType] += missingHandler;
         }
     }
     else
     {
         if (presentHandler != null)
         {
             attributePresentHandlers.Add(attributeType, presentHandler);
         }
         if (missingHandler != null)
         {
             attributeMissingHandlers.Add(attributeType, missingHandler);
         }
         registeredAttributes.Add(attributeType);
     }
     if (inheritable)
     {
         registeredInheritableAttributes.Add(attributeType);
     }
 }
 /// <summary>
 /// Register handlers that are invoked in "Handle" when an instance has, or is missing,
 /// the given attribute type.
 /// </summary>
 /// <typeparam name="U"></typeparam>
 /// <param name="presentHandler"></param>
 /// <param name="missingHandler"></param>
 public void RegisterHandler <U>(AttributeHandler presentHandler
                                 , AttributeHandler missingHandler
                                 , bool inheritable = false)
     where U : Attribute
 {
     RegisterHandler(typeof(U), presentHandler, missingHandler);
 }
            /// <summary>
            /// Sets the value of the property, or if it has a NamedCollectionOption, adds it to the collection of the property value.
            /// </summary>
            /// <param name="instance"></param>
            /// <param name="value"></param>
            public void SetValue(object instance, object?value)
            {
                if (AttributeHandler.IsCollectionAttribute(Option))
                {
                    if (value == null)
                    {
                        throw new InvalidOperationException($"The target value for the property \"{PropertyInfo.Name}\" on \"{PropertyInfo.DeclaringType}\" is null, but it is marked as a collection.");
                    }
                    var propertyValue = PropertyInfo.GetValue(instance) ?? throw new InvalidOperationException($"The property \"{PropertyInfo.Name}\" on \"{PropertyInfo.DeclaringType}\" must return an instance.");

                    //TODO: use ICollection for this case, instead of IList.
                    //that way we don't demand both IList and ICollection<>
                    var list = (IList)propertyValue;

                    list.Clear();
                    foreach (var element in (IList)value)
                    {
                        list.Add(element);
                    }
                }
                else
                {
                    PropertyInfo.SetValue(instance, value);
                }
            }
Example #6
0
 public static void DropItemInRoom(Character.Models.Character player, Room.Models.Room room,
                                   InventoryItem itemBeingDropped)
 {
     AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, itemBeingDropped, true);
     player.Attributes.CarriedItemsCount -= itemBeingDropped.InventorySpaceConsumed;
     room.RoomItems.InventoryItems.Add(itemBeingDropped);
     player.CarriedItems.Remove(itemBeingDropped);
 }
 public static void DropItemInRoom(Character.Models.Character player, Room.Models.Room room,
                                   InventoryItem itemToDrop)
 {
     player.Attributes.CarriedItemsCount -= 1;
     room.RoomItems.InventoryItems.Add(itemToDrop);
     AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, itemToDrop, true);
     player.CarriedItems.Remove(itemToDrop);
 }
Example #8
0
	public void Initialize(AttributeHandler handler){
		this.handler = handler;	
		if (raiseButton != null) {
			raiseButton.onClick.AddListener (delegate {
				handler.IncreaseAttribute(attribute);
			});
		}
	}
 public override void OnResponse(Network.NetState sender, RelayInfo info)
 {
     if (info.ButtonID >= 1000)
     {
         AttributeHandler handler = AttributeHandler.Definitions[info.ButtonID - 1000];
         Process.BeginUpgrade(handler);
     }
 }
Example #10
0
 public static void DropWeaponAndPickupNew(Character.Models.Character player, Room.Models.Room room,
                                           WeaponItem weaponToAddToPlayer)
 {
     room.RoomItems.WeaponItems.Add(player.WeaponItem);
     AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, player.WeaponItem, true);
     AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, weaponToAddToPlayer);
     weaponToAddToPlayer.InOriginalLocation = false;
     player.WeaponItem = weaponToAddToPlayer;
     room.RoomItems.WeaponItems.Remove(weaponToAddToPlayer);
 }
Example #11
0
 /// <summary>
 /// Parses the xml document
 /// </summary>
 /// <param name="tagfile"></param>
 protected void init(string tagfile)
 {
     try {
         AttributeHandler a = new AttributeHandler(this);
         a.Parse(tagfile);
     }
     catch (Exception e) {
         throw e;
     }
 }
Example #12
0
 /// <summary>
 /// Parses the xml document
 /// </summary>
 /// <param name="tagfile"></param>
 protected void Init(XmlDocument xTagfile)
 {
     try {
         AttributeHandler a = new AttributeHandler(this);
         a.Parse(xTagfile);
     }
     catch (Exception e) {
         throw e;
     }
 }
        public EnhancementGump(EnhancementStoneProcess process) : base(40, 40)
        {
            bool MoreAttributesAllowed = true;

            Process = process;

            if (Process.CurrentAttributeCount >= Process.MaxAttrCount)
            {
                MoreAttributesAllowed = false;
            }

            AddBackground(0, 0, 620, 390, 9200);
            AddImageTiled(8, 10, 604, 24, 2624);
            AddImageTiled(8, 38, 300, 345, 2624);
            AddImageTiled(312, 38, 300, 345, 2624);
            AddAlphaRegion(8, 10, 604, 373);

            AddLabel(224, 12, 0x481, "Equipment Enhancement");

            AddLabel(15, 40, 0x481, "Attributes");
            AddLabel(184, 40, 0x481, "Cost");
            AddLabel(273, 40, 0x481, "Buy");

            AddLabel(319, 40, 0x481, "Attributes");
            AddLabel(488, 40, 0x481, "Cost");
            AddLabel(577, 40, 0x481, "Buy");

            int column = 0;
            int row    = 0;

            for (int i = 0; i < AttributeHandler.Definitions.Count; i++)
            {
                AttributeHandler handler = AttributeHandler.Definitions[i];

                if (handler.IsUpgradable(Process.ItemToUpgrade))
                {
                    int currentValue = handler.Upgrade(Process.ItemToUpgrade, true);

                    if (currentValue > 0 || MoreAttributesAllowed)
                    {
                        if (row > 11)
                        {
                            row    = 0;
                            column = 1;
                        }

                        AddLabel(15 + (304 * column), 65 + (25 * row), 0x481, handler.Description);
                        AddLabel(184 + (304 * column), 65 + (25 * row), 0x481, Process.GetCostToUpgrade(handler).ToString());
                        AddButton(270 + (304 * column), 62 + (25 * row), 4023, 4024, 1000 + i, GumpButtonType.Reply, 0);

                        row++;
                    }
                }
            }
        }
Example #14
0
    public override int CalculateModifier(int value)
    {
        var attributeValue = AttributeHandler.Value(AttributeName);

        if ((Above == null || attributeValue > Above) &&
            (Below == null || attributeValue < Below))
        {
            return(value + Value);
        }
        return(Value);
    }
Example #15
0
 public AttributeParser(AttributeConfiguration configuration, IParameterFormatter parameterFormatter, IValueConverter valueConverter, IHelpPresenter helpPresenter)
 {
     Configuration     = configuration ?? throw new ArgumentNullException(nameof(configuration));
     _attributeHandler = new AttributeHandler(configuration, parameterFormatter,
                                              (option, value) =>
     {
         var parameterValueOption = configuration.GetParameterValueOption(option);
         return(valueConverter.ConvertFromString(option, parameterValueOption.ParameterInfo, AttributeHandler.GetValueType(parameterValueOption.Option, parameterValueOption.ParameterInfo.ParameterType), value));
     },
                                              (option) => configuration.GetParameterValueOption(option).ParameterInfo.ParameterType
                                              );
     _helpPresenter = helpPresenter ?? throw new ArgumentNullException(nameof(helpPresenter));
 }
        public void UpdatePlayerAttributesFromWeaponItem_ShouldRemoveTraitPointToPlayer()
        {
            var player = MockCharacters.MockPlayerAlbert;

            player.Attributes = MockAttributes.MockPlayerAttrBeforeUpdate;
            MockAttributes.MockPlayerAttrBeforeUpdate.Dexterity = 6;

            var expectedOutput = MockAttributes.MockPlayerAttrAfterRemoveDexterity;

            AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, MockItems.MockItemKatana, true);

            Assert.AreEqual(expectedOutput.Dexterity, player.Attributes.Dexterity);
        }
        public void UpdatePlayerAttributesFromInventoryItem_ShouldRemoveTraitPointToPlayer()
        {
            var player = MockCharacters.MockPlayerAlbert;

            player.Attributes = MockAttributes.MockPlayerAttrBeforeUpdate;
            MockAttributes.MockPlayerAttrBeforeUpdate.Luck = 7;

            var expectedOutput = MockAttributes.MockPlayerAttrAfterRemoveLuck;

            AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, MockItems.MockItemRabbitsFoot, true);

            Assert.AreEqual(expectedOutput.Luck, player.Attributes.Luck);
        }
Example #18
0
        public void IndirectAttributeHandler()
        {
            AttributeHandler.RemoveHandler <CustomAttributeHandler>();
            AttributeHandler.AddHandler <CustomAttributeHandler>();

            JsonSchema expected = new JsonSchemaBuilder()
                                  .Type(SchemaValueType.Object)
                                  .Properties(
                ("MyProperty", new JsonSchemaBuilder().Type(SchemaValueType.String).MaxLength(AttributeWithIndirectHandler.MaxLength))
                );

            JsonSchema actual = new JsonSchemaBuilder().FromType <TypeWithCustomAttribute2>();

            Assert.AreEqual(expected, actual);
        }
Example #19
0
		public override void OnEnter ()
		{
			if (gameObject.Value == null) {
				Debug.Log (this.Root.Name);
			}
			handler = gameObject.Value.GetComponent<AttributeHandler> ();
			attr=handler.GetAttribute(attribute.Value);
			if (attr != null) {
				attr.OnChange.AddListener(DoGetAttribute);
				DoGetAttribute (attr);
			}

			Finish ();
	
		}
        internal AttributeConfiguration(IServiceProvider serviceProvider, IEnumerable <Type> optionTypes, object?instance = null)
        {
            _serviceProvider = serviceProvider;
            foreach (var type in optionTypes)
            {
                var typeInfo = type.GetTypeInfo();

                foreach (var methodVerbPair in typeInfo.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static).Select((x) => new KeyValuePair <MethodInfo, IVerb?>(x, GetVerbFromMethod(x))).Where((x) => x.Value != null))
                {
                    var parameterOptions = new List <IParameterValue>();
                    foreach (var parameter in methodVerbPair.Key.GetParameters())
                    {
                        var option = AttributeHandler.GetOption(this, methodVerbPair.Key.ToString(), parameter);
                        if (option == null)
                        {
                            if (parameter.HasDefaultValue)
                            {
                                parameterOptions.Add(new DefaultValueParameter(parameter));
                            }
                            else
                            {
                                throw new InvalidOperationException($"The parameter \"{parameter.Name}\" on \"{methodVerbPair.Key.DeclaringType.FullName + ":" + methodVerbPair.Key.Name}\" for the verb \"{methodVerbPair.Value.Name}\" has neither an option, nor a default value.");
                            }
                        }
                        else
                        {
                            parameterOptions.Add(new ParameterValueOption(parameter, option, methodVerbPair.Key));
                        }
                    }

                    _verbData.Add(methodVerbPair.Value, new VerbData(methodVerbPair.Value, methodVerbPair.Key, () => {
                        if (instance != null)
                        {
                            return(instance);
                        }

                        return(AttributeHandler.GetConstructor(typeInfo).Invoke(new object[0]));
                    }, parameterOptions));
                }
            }
        }
        private void Init(string elementName, int elements, long size, SettableAttributes attributes, AttributeHandler onOkClicked)
        {
            InitializeComponent();
            nameTextBox.Text     = elementName;
            sizeTextBox.Text     = size.ToString();
            elementsTextBox.Text = elements.ToString();

            if (attributes.IsReadOnly)
            {
                readOnlyChBox.Checked = true;
            }
            if (attributes.IsHidden)
            {
                hiddenChBox.Checked = true;
            }
            if (attributes.IsArchive)
            {
                archiveChBox.Checked = true;
            }
            OnOkClicked = onOkClicked;
            Show();
        }
        internal AttributeConfiguration(IServiceProvider serviceProvider, IEnumerable <Type> optionTypes)
        {
            _serviceProvider = serviceProvider;
            foreach (var type in optionTypes)
            {
                var typeInfo = type.GetTypeInfo();
                var verb     = GetVerbFromType(type);

                //get options
                var options = new List <OptionProperty>();
                foreach (var property in typeInfo.GetProperties(BindingFlags.Public | BindingFlags.Instance))
                {
                    var option = AttributeHandler.GetOption(this, type.Name, property);
                    if (option != null)
                    {
                        options.Add(new OptionProperty(option, property));
                    }
                }

                _verbsData.Add(verb, new VerbData(verb, () => AttributeHandler.GetConstructor(typeInfo).Invoke(new object[0]), options));
            }
        }
            public void SetValue(object?value)
            {
                if (AttributeHandler.IsCollectionAttribute(Option))
                {
                    if (value == null)
                    {
                        throw new InvalidOperationException($"The target value for the property \"{ParameterInfo.Name}\" on \"{MethodName}\" is null, but it is marked as a collection.");
                    }

                    //TODO: Create element of the correct type.
                    if (Value == null)
                    {
                        var constructor = ParameterInfo.ParameterType.GetConstructors().FirstOrDefault((x) => x.IsPublic && x.GetParameters().Length == 0);
                        if (constructor != null)
                        {
                            Value = constructor.Invoke(new object[0]);
                        }
                        else
                        {
                            Value = Activator.CreateInstance(typeof(List <>).MakeGenericType(AttributeHandler.GetValueType(Option, ParameterInfo.ParameterType)));
                        }
                    }

                    var list = (IList)Value;

                    list.Clear();
                    foreach (var element in (IList)value)
                    {
                        list.Add(element);
                    }
                }
                else
                {
                    Value = value;
                }
            }
 public PropertyForm(string elementName, int elements, long size,
                     SettableAttributes attributes, AttributeHandler onOkClicked)
 {
     Init(elementName, elements, size, attributes, onOkClicked);
 }
 public PropertyForm(string elementName, RequestSizeDataHandler onSizeRequested,
                     TerminationHandler onCalculationTerminated, SettableAttributes attributes, AttributeHandler onOkClicked)
 {
     RequestSizeData      = onSizeRequested;
     TerminateCalculation = onCalculationTerminated;
     Init(elementName, 0, 0, attributes, onOkClicked);
     timer1.Start();
 }
 /// <summary>
 /// Register handlers that are invoked in "Handle" when an instance has the given attribute
 /// type.
 /// </summary>
 /// <typeparam name="U"></typeparam>
 /// <param name="presentHandler"></param>
 public void RegisterHandler <U>(AttributeHandler presentHandler, bool inheritable = false)
     where U : Attribute
 {
     RegisterHandler(typeof(U), presentHandler, null, inheritable);
 }
Example #27
0
 public IPaging Align(VertialAlign align)
 {
     styleHandler += new AttributeHandler(() => String.Concat("text-align:", align.ToString().ToLower(), ';'));
     return(this);
 }
Example #28
0
 public IPaging Align(HorizontalAlign align)
 {
     styleHandler += new AttributeHandler(() => String.Concat("vertical-align:", align.ToString().ToLower(), ';'));
     return(this);
 }
Example #29
0
 /// <summary>
 /// Parses the xml document
 /// </summary>
 /// <param name="tagfile"></param>
 protected void Init(XmlDocument xTagfile)
 {
     try {
         AttributeHandler a = new AttributeHandler(this);
         a.Parse(xTagfile);
     }
     catch (Exception e) {
         throw e;
     }
 }
Example #30
0
 /// <summary>
 /// Parses the xml document
 /// </summary>
 /// <param name="tagfile"></param>
 protected void Init(string tagfile)
 {
     try {
         AttributeHandler a = new AttributeHandler(this);
         a.Parse(tagfile);
     }
     catch (Exception e) {
         throw e;
     }
 }
Example #31
0
        // This updates the room and/or player when the exchange of an item occurs
        public static void HandleItemAddOrRemove(Character.Models.Character player, Room.Models.Room currentRoom,
                                                 Items foundItem, bool removeItemFromRoom = false)
        {
            switch (removeItemFromRoom)
            {
            // We are removing an item from a room, adding it to player inventory
            case true:
                if (foundItem?.InventoryItems?.First() != null)
                {
                    var           meetsAnyRequirement          = false;
                    var           needsToDropSameTypeItemFirst = false;
                    InventoryItem carriedItemOfSameType        = null;
                    var           inventoryItemToAddToPlayer   = foundItem.InventoryItems.First();

                    if (inventoryItemToAddToPlayer?.AttributeRequirementToTake == null)
                    {
                        meetsAnyRequirement = true;
                    }

                    else if (inventoryItemToAddToPlayer?.AttributeRequirementToTake != null &&
                             CanPickupItemWithAttributeRequirement(player, inventoryItemToAddToPlayer))
                    {
                        meetsAnyRequirement = true;
                    }

                    if (inventoryItemToAddToPlayer.TreatItemAs == ItemUseTypes.Bag ||
                        inventoryItemToAddToPlayer.TreatItemAs == ItemUseTypes.Wearable)
                    {
                        foreach (var item in player.CarriedItems)
                        {
                            if (item.TreatItemAs == ItemUseTypes.Bag && inventoryItemToAddToPlayer.TreatItemAs == ItemUseTypes.Bag ||
                                item.WearableType != "" && item.WearableType == inventoryItemToAddToPlayer.WearableType)
                            {
                                carriedItemOfSameType        = item;
                                needsToDropSameTypeItemFirst = true;
                                break;
                            }
                        }
                    }

                    if (PickupOrDropItemIsOk(player, foundItem) && meetsAnyRequirement)
                    {
                        Console.WriteLine();
                        if (needsToDropSameTypeItemFirst)
                        {
                            TypingAnimation.Animate("You need to drop your " + carriedItemOfSameType.ItemName + " before you can take the " + inventoryItemToAddToPlayer?.ItemName + ".\n",
                                                    Color.ForestGreen);
                        }
                        else
                        {
                            AttributeHandler.UpdatePlayerAttributesFromInventoryItem(player, inventoryItemToAddToPlayer);
                            inventoryItemToAddToPlayer.InOriginalLocation = false;
                            player.CarriedItems.Add(inventoryItemToAddToPlayer);
                            player.Attributes.CarriedItemsCount += inventoryItemToAddToPlayer.InventorySpaceConsumed;
                            currentRoom.RoomItems.InventoryItems.Remove(inventoryItemToAddToPlayer);
                            TypingAnimation.Animate("You take the " + inventoryItemToAddToPlayer.ItemName + ".\n", Color.ForestGreen);
                        }
                    }

                    else
                    {
                        if (meetsAnyRequirement)
                        {
                            Console.WriteLine();
                            TypingAnimation.Animate("Your inventory is full! \n" +
                                                    "Drop or use an item to pick up the " + inventoryItemToAddToPlayer?.ItemName + ".\n", Color.DarkOliveGreen);
                        }
                    }
                }
                else
                if (foundItem?.WeaponItems != null)
                {
                    var weaponItemToAddToPlayer = foundItem.WeaponItems.First();
                    if (string.IsNullOrEmpty(player.WeaponItem.WeaponName))
                    {
                        AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, weaponItemToAddToPlayer);
                        weaponItemToAddToPlayer.InOriginalLocation = false;
                        player.WeaponItem = weaponItemToAddToPlayer;
                        currentRoom.RoomItems.WeaponItems.Remove(weaponItemToAddToPlayer);
                        Console.WriteLine();
                        TypingAnimation.Animate("You take the " + weaponItemToAddToPlayer?.WeaponName + ".\n", Color.ForestGreen);
                    }
                    else
                    {
                        var oldWeapon = player.WeaponItem.WeaponName.Clone();
                        DropWeaponAndPickupNew(player, currentRoom, weaponItemToAddToPlayer);
                        player.WeaponItem = weaponItemToAddToPlayer;
                        currentRoom.RoomItems.WeaponItems.Remove(weaponItemToAddToPlayer);
                        Console.WriteLine();
                        TypingAnimation.Animate("You drop your " + oldWeapon + " for the " + weaponItemToAddToPlayer?.WeaponName + ".\n",
                                                Color.ForestGreen);
                    }
                }

                break;

            // We are adding an item to a room, removing/dropping it from player inventory
            case false:
                if (foundItem?.InventoryItems != null)
                {
                    var inventoryItemToRemoveFromPlayer = foundItem.InventoryItems.First();

                    DropItemInRoom(player, currentRoom, inventoryItemToRemoveFromPlayer);
                    Console.WriteLine();
                    TypingAnimation.Animate("You drop the " + inventoryItemToRemoveFromPlayer?.ItemName + ".\n", Color.ForestGreen);
                }
                else if (foundItem?.WeaponItems != null)
                {
                    var weaponItemToRemoveFromPlayer = foundItem.WeaponItems.First();

                    DropWeaponInRoom(player, currentRoom);
                    Console.WriteLine();
                    TypingAnimation.Animate("You drop the " + weaponItemToRemoveFromPlayer?.WeaponName + ".\n", Color.ForestGreen);
                }

                break;
            }
        }
Example #32
0
 public static void DropWeaponInRoom(Character.Models.Character player, Room.Models.Room room)
 {
     room.RoomItems.WeaponItems.Add(player.WeaponItem);
     AttributeHandler.UpdatePlayerAttributesFromWeaponItem(player, player.WeaponItem, true);
     player.WeaponItem = new WeaponItem();
 }
Example #33
0
        public static bool HandleItemBeingUsed(Character.Models.Character player, Items foundItem, string playerInput)
        {
            if (foundItem?.WeaponItems?.First() != null)
            {
                Console.WriteLine();
                TypingAnimation.Animate($"You swing your {foundItem.WeaponItems.First().WeaponName} around wildly.\n", Color.ForestGreen);
                return(true);
            }

            if (foundItem?.InventoryItems?.First() != null)
            {
                var item = foundItem.InventoryItems.First();
                if (item.TreatItemAs == ItemUseTypes.Default || item.TreatItemAs == ItemUseTypes.Key)
                {
                    Console.WriteLine();
                    TypingAnimation.Animate($"You {playerInput} the {item.ItemName} but nothing happens...\n",
                                            Color.ForestGreen);
                    return(true);
                }

                if (item.TreatItemAs == ItemUseTypes.Wearable)
                {
                    Console.WriteLine();
                    TypingAnimation.Animate($"You're already wearing the {item.ItemName}...\n", Color.ForestGreen);
                    return(true);
                }

                if (item.TreatItemAs == ItemUseTypes.Document)
                {
                    var traitsAdded = "";
                    foreach (var trait in item.ItemTraits)
                    {
                        if (!string.IsNullOrEmpty(trait.RelevantCharacterAttribute))
                        {
                            if (trait.TraitValue > 0)
                            {
                                traitsAdded += $"\n\t{trait.RelevantCharacterAttribute} + ({trait.TraitValue})!";
                                AttributeHandler.AddCharacterAttributesByTrait(player, trait);
                                trait.TraitName  = "";
                                trait.TraitValue = 0;
                            }
                        }
                    }

                    Console.WriteLine();
                    TypingAnimation.Animate($"You read the {item.ItemName}: {traitsAdded}\n \n\n{item.DocumentText}\n",
                                            Color.GhostWhite);
                    return(true);
                }

                if (item.TreatItemAs == ItemUseTypes.ConsumableAttribute)
                {
                    var traitsAdded = "";
                    foreach (var trait in item.ItemTraits)
                    {
                        if (!string.IsNullOrEmpty(trait.RelevantCharacterAttribute))
                        {
                            traitsAdded += $"\n\t{trait.RelevantCharacterAttribute} + ({trait.TraitValue})!";
                            AttributeHandler.AddCharacterAttributesByTrait(player, trait);
                        }
                    }

                    player.Attributes.CarriedItemsCount -= item.InventorySpaceConsumed;
                    player.CarriedItems.Remove(item);
                    Console.WriteLine();
                    TypingAnimation.Animate($"You use the {item.ItemName}: \n{traitsAdded}\n", Color.ForestGreen);
                    return(true);
                }

                if (item.TreatItemAs == ItemUseTypes.ConsumableBattery)
                {
                    var flashlight = player.CarriedItems.SingleOrDefault(i =>
                                                                         i.ItemName == Program.ItemCreator.Flashlight.ItemName);
                    var traitsAdded = "";
                    foreach (var trait in item.ItemTraits)
                    {
                        if (!string.IsNullOrEmpty(flashlight?.ItemName))
                        {
                            traitsAdded += $"\n\tFlashlight battery: ({trait.TraitValue}%)!";
                            FlashlightBatteryUpdate.FlashlightBatteryChange(flashlight,
                                                                            percentToSet: trait.TraitValue);
                        }
                    }

                    if (!string.IsNullOrEmpty(flashlight?.ItemName))
                    {
                        player.Attributes.CarriedItemsCount -= item.InventorySpaceConsumed;
                        player.CarriedItems.Remove(item);
                        Console.WriteLine();
                        TypingAnimation.Animate($"You use the {item.ItemName}: \n{traitsAdded}\n", Color.ForestGreen);
                        return(true);
                    }

                    Console.WriteLine();
                    TypingAnimation.Animate($"You don't have anything to use the {item.ItemName} on...\n",
                                            Color.DarkOliveGreen);
                    return(true);
                }

                if (item.TreatItemAs == ItemUseTypes.ConsumableHealth)
                {
                    var traitsAdded = "";
                    if (player.HealthPoints < player.MaximumHealthPoints)
                    {
                        foreach (var trait in item.ItemTraits)
                        {
                            if (string.IsNullOrEmpty(trait.RelevantCharacterAttribute))
                            {
                                if (player.HealthPoints + trait.TraitValue > player.MaximumHealthPoints)
                                {
                                    player.HealthPoints = player.MaximumHealthPoints;
                                }
                                else
                                {
                                    player.HealthPoints += trait.TraitValue;
                                }

                                traitsAdded += $"\n\tHealth Points: + ({trait.TraitValue})!";
                            }
                            else
                            {
                                traitsAdded += trait.TraitValue >= 0 ? $"\n\t{trait.RelevantCharacterAttribute} + ({trait.TraitValue})!" : $"\n\t{trait.RelevantCharacterAttribute} - ({-1 * trait.TraitValue})";
                                AttributeHandler.AddCharacterAttributesByTrait(player, trait);
                            }
                        }
                    }

                    if (!string.IsNullOrEmpty(traitsAdded))
                    {
                        player.Attributes.CarriedItemsCount -= item.InventorySpaceConsumed;
                        player.CarriedItems.Remove(item);
                        Console.WriteLine();
                        TypingAnimation.Animate($"You consume the {item.ItemName}: \n{traitsAdded}\n",
                                                Color.ForestGreen);
                        return(true);
                    }

                    Console.WriteLine();
                    TypingAnimation.Animate(
                        $"You don't need to use the {item.ItemName}, you have full Health Points...\n",
                        Color.DarkOliveGreen);
                    return(true);
                }

                if (item.TreatItemAs == ItemUseTypes.ConsumableAmmo)
                {
                    var traitsAdded = "";

                    if (!string.IsNullOrEmpty(player.WeaponItem?.WeaponName) &&
                        !string.IsNullOrEmpty(player.WeaponItem?.AmmunitionType) &&
                        player.WeaponItem.AmmunitionType == item.AmmunitionType)
                    {
                        player.WeaponItem.AmmunitionAmount += item.AmmunitionAmount;
                        traitsAdded += $"\n\t{player.WeaponItem.WeaponName} Ammo + ({item.AmmunitionAmount}) = ({player.WeaponItem.AmmunitionAmount})!";
                        player.Attributes.CarriedItemsCount -= item.InventorySpaceConsumed;
                        player.CarriedItems.Remove(item);
                        Console.WriteLine();
                        TypingAnimation.Animate($"You use the {item.ItemName}: \n{traitsAdded}\n", Color.ForestGreen);
                        return(true);
                    }

                    Console.WriteLine();
                    TypingAnimation.Animate($"You don't have a weapon that uses {item.AmmunitionType}...\n",
                                            Color.DarkOliveGreen);
                    return(true);
                }
            }

            return(false);
        }
 public EntityEmitController(EntityInfo entityInfo, DynamicAssemblyInfo asm, string className, AttributeHandler attrHandler) : base(asm, className, typeof(EntityBase), attrHandler)
 {
     _entityInfo = entityInfo;
     if (_targetRef == null)
     {
         InitMethodRefs();
     }
 }