コード例 #1
0
ファイル: Hunting.cs プロジェクト: Talindor2/eco_mod
        public override IAtomicAction CreateLevelUpAction(Player player)
        {
            if (this.Level != 0 || this.HasGivenItems)
            {
                return(base.CreateLevelUpAction(player));
            }

            InventoryChangeSet changeSet = InventoryChangeSet.New(player.User.Inventory, player.User);

            foreach (Tuple <Type, int> tuple in ItemsGiven)
            {
                changeSet.AddItems(tuple.Item1, tuple.Item2);
            }

            SimpleAtomicAction setHasGivenItems = new SimpleAtomicAction(() => this.HasGivenItems = true);

            return(new DecoratedResultAtomicAction(new MultiAtomicAction(changeSet, setHasGivenItems), (result) =>
            {
                if (result.Success)
                {
                    return result;
                }
                else
                {
                    return Skill.CantCarry(ItemDescriptions());
                }
            }));
        }
コード例 #2
0
        public override void OnUsed(Player player, ItemStack itemStack)
        {
            if (player.User.Skillset.HasSkill(this.SkillType))
            {
                player.SendTemporaryErrorLoc(string.Format("You already know {0}.", this.Skill));
            }
            else
            {
                using (var changes = InventoryChangeSet.New(new Inventory[] { player.User.Inventory, itemStack.Parent }.Distinct(), player.User))
                {
                    changes.ModifyStack(itemStack, -1);

                    if (changes.TryApply())
                    {
                        if (!this.Skill.IsDiscovered())
                        {
                            ChatManager.ServerMessageToAllLoc(string.Format("{0} discovered {1}!", player.User.UILink(), this.Skill.UILink()), false, DefaultChatTags.Skills);
                        }

                        player.User.Skillset.LearnSkill(this.Skill.GetType());
                        player.SendTemporaryMessageLoc(string.Format("You have learned a new skill {0}!", this.Skill.UILink()), ChatCategory.Info);
                    }
                    else
                    {
                        player.SendTemporaryErrorLoc(string.Format("Could not learn {0}: more inventory space required.", this.Skill));
                    }
                }
            }
        }