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