예제 #1
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}");
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you must be in the colony to use this command.");
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count <= 0)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} your pawn doesn't have any traits.");
                return(false);
            }

            string traitKind = command[2].ToLower();

            BuyableTrait search = AllTraits.buyableTraits.Find(s => traitKind == s.label);

            if (search == null)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} trait {traitKind} not found.");
                return(false);
            }

            buyableTrait = search;

            return(true);
        }
예제 #2
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}");
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you must be in the colony to use this command.");
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            float customMaxTraits = AddTraitSettings.maxTraits > 0 ? AddTraitSettings.maxTraits : 4;

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count >= customMaxTraits)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} your pawn already has max {customMaxTraits} traits.");
                return(false);
            }

            string traitKind = command[2].ToLower();

            BuyableTrait search = AllTraits.buyableTraits.Find(s => traitKind == s.label);


            if (search == null)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} trait {traitKind} not found.");
                return(false);
            }

            buyableTrait = search;
            traitDef     = buyableTrait.def;

            //if (!pawn.story.traits.allTraits.Any((Trait tr) =>
            //    traitDef.ConflictsWith(tr)) &&
            //    (traitDef.conflictingTraits == null ||
            //    !traitDef.conflictingTraits.Any((TraitDef tr) => pawn.story.traits.HasTrait(tr))))
            //{
            //    return true;
            //}

            trait = new Trait(traitDef, buyableTrait.degree);

            foreach (Trait tr in pawn.story.traits.allTraits)
            {
                if (tr.def.ConflictsWith(trait) || traitDef.ConflictsWith(tr))
                {
                    TwitchWrapper.SendChatMessage($"@{viewer.username} {traitDef.defName} conflicts with your pawn's trait {tr.LabelCap}.");
                    return(false);
                }
            }

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Find(s => s.def.defName == search.def.defName) != null)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you already have this trait of this type.");
                return(false);
            }

            return(true);
        }
예제 #3
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you must be in the colony to use this command.", separateChannel);
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            float customMaxTraits = CustomSettings.LookupFloatSetting("Toolkit.AddTrait.MaxTraits") > 0 ? CustomSettings.LookupFloatSetting("Toolkit.AddTrait.MaxTraits") : 4;

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count >= customMaxTraits)
            {
                Toolkit.client.SendMessage($"@{viewer.username} your pawn already has max {customMaxTraits} traits.", separateChannel);
                return(false);
            }

            string traitKind = command[2].ToLower();

            BuyableTrait search = AllTraits.buyableTraits.Find(s => traitKind == s.label);


            if (search == null)
            {
                Toolkit.client.SendMessage($"@{viewer.username} trait {traitKind} not found.", separateChannel);
                return(false);
            }

            buyableTrait = search;
            traitDef     = buyableTrait.def;

            if (!pawn.story.traits.allTraits.Any((Trait tr) =>
                                                 traitDef.ConflictsWith(tr)) &&
                (traitDef.conflictingTraits == null ||
                 !traitDef.conflictingTraits.Any((TraitDef tr) => pawn.story.traits.HasTrait(tr))))
            {
                return(true);
            }

            foreach (Trait tr in pawn.story.traits.allTraits)
            {
                if (tr.def.ConflictsWith(trait) || traitDef.ConflictsWith(tr))
                {
                    Toolkit.client.SendMessage($"@{viewer.username} {traitDef.defName} conflicts with your pawn's trait {tr.LabelCap}.");
                    return(false);
                }
            }

            return(true);
        }