Ejemplo n.º 1
0
 private void Setup()
 {
     VerbMovement = VerbManager.GetVerb(agent, initialInventory.movementType, initialInventory.movementModifier);
     VerbMovement = VerbMovement ?? new Walk(ModifierTypes.None, agent);
     VerbA        = VerbManager.GetVerb(agent, initialInventory.verbA, initialInventory.modifierA);
     VerbB        = VerbManager.GetVerb(agent, initialInventory.verbB, initialInventory.modifierB);
 }
Ejemplo n.º 2
0
        public static Verb BestVerbForTarget(this Pawn p, LocalTargetInfo target, IEnumerable <ManagedVerb> verbs,
                                             VerbManager man = null)
        {
            if (!target.IsValid || !target.Cell.InBounds(p.Map))
            {
                Log.Error("[MVCF] BestVerbForTarget given invalid target with pawn " + p + " and target " + target);
                if (man?.debugOpts != null && man.debugOpts.ScoreLogging)
                {
                    Log.Error("(Current job is " + p.CurJob + " with verb " + p.CurJob?.verbToUse + " and target " +
                              p.CurJob?.targetA + ")");
                }
                return(null);
            }

            Verb  bestVerb  = null;
            float bestScore = 0;

            foreach (var verb in verbs)
            {
                var score = VerbScore(p, verb.Verb, target, man != null && man.debugOpts.ScoreLogging);
                if (score <= bestScore)
                {
                    continue;
                }
                bestScore = score;
                bestVerb  = verb.Verb;
            }

            return(bestVerb);
        }
        public static void AddVerbs(this VerbManager man, Hediff hediff)
        {
            if (man == null)
            {
                return;
            }
            if (Base.IsIgnoredMod(hediff?.def?.modContentPack?.Name))
            {
                return;
            }
            var comp = hediff.TryGetComp <HediffComp_VerbGiver>();

            if (comp?.VerbTracker?.AllVerbs == null)
            {
                return;
            }
            if (!Base.Features.HediffVerbs && !Base.IgnoredFeatures.HediffVerbs &&
                comp.VerbTracker.AllVerbs.Any(v => !v.IsMeleeAttack))
            {
                Log.ErrorOnce(
                    "[MVCF] Found a hediff with a ranged verb while that feature is not enabled. Enabling now. This is not recommend. Contant the author of " +
                    hediff?.def?.modContentPack?.Name + " and ask them to add a MVCF.ModDef.",
                    hediff?.def?.modContentPack?.Name?.GetHashCode() ?? -1);
                Base.Features.HediffVerbs = true;
                Base.ApplyPatches();
            }

            var extComp = comp as HediffComp_ExtendedVerbGiver;

            foreach (var verb in comp.VerbTracker.AllVerbs)
            {
                man.AddVerb(verb, VerbSource.Hediff, extComp?.PropsFor(verb));
            }
        }
        public static bool GetVerbsCommands_Prefix(ref IEnumerable <Command> __result, CompEquippable __instance)
        {
            var rangedVerbs = __instance.AllVerbs.Where(v => !v.IsMeleeAttack).ToList();
            var melee       = VerbManager.PreferMelee(__instance.parent);

            if (rangedVerbs.Count <= 1 && !melee)
            {
                return(true);
            }
            var man = __instance.PrimaryVerb?.CasterPawn?.Manager(false);

            __result = rangedVerbs
                       .SelectMany(v => v.GetGizmosForVerb(man?.GetManagedVerbForVerb(v)))
                       .OfType <Command>();
            if (melee)
            {
                __result = __result.Prepend((Command)CreateVerbTargetCommand.Invoke(__instance.verbTracker,
                                                                                    new object[] { __instance.parent, __instance.AllVerbs.First(v => v.verbProps.IsMeleeAttack) }));
            }
            return(false);
        }
Ejemplo n.º 5
0
        public void ChooseMovement()
        {
            if (State == InventoryState.Idle)
            {
                return;
            }

            if (State == InventoryState.ChoosingModifier)
            {
                player.Inventory.ChangeMovementModifier(targetModifier);
                EndChoosingState();
                return;
            }

            if (!VerbManager.IsMovementType(targetVerb))
            {
                return;
            }

            player.Inventory.ChangeMovementVerb(targetVerb);
            EndChoosingState();
        }
        public static void AddVerbs(this VerbManager man, ThingWithComps eq)
        {
            if (man == null)
            {
                return;
            }
            if (Base.IsIgnoredMod(eq?.def?.modContentPack?.Name))
            {
                return;
            }
            if (Compat.ShouldIgnore(eq))
            {
                return;
            }
            var comp = eq.TryGetComp <CompEquippable>();

            if (comp?.VerbTracker?.AllVerbs == null)
            {
                return;
            }
            if (!Base.Features.ExtraEquipmentVerbs && !Base.IgnoredFeatures.ExtraEquipmentVerbs &&
                comp.VerbTracker.AllVerbs.Count(v => !v.IsMeleeAttack) > 1)
            {
                Log.ErrorOnce(
                    "[MVCF] Found equipment with more than one ranged attack while that feature is not enabled. Enabling now. This is not recommend. Contact the author of " +
                    eq?.def?.modContentPack?.Name + " and ask them to add a MVCF.ModDef.",
                    eq?.def?.modContentPack?.Name?.GetHashCode() ?? -1);
                Base.Features.ExtraEquipmentVerbs = true;
                Base.ApplyPatches();
            }

            foreach (var verb in comp.VerbTracker.AllVerbs)
            {
                man.AddVerb(verb, VerbSource.Equipment, comp.props is CompProperties_VerbProps props
                    ? props.PropsFor(verb)
                    : eq.TryGetComp <Comp_VerbProps>()?.Props?.PropsFor(verb));
            }
        }
        public static void AddVerbs(this VerbManager man, Apparel apparel)
        {
            if (man == null)
            {
                return;
            }
            if (Base.IsIgnoredMod(apparel?.def?.modContentPack?.Name))
            {
                return;
            }
            if (Compat.ShouldIgnore(apparel))
            {
                return;
            }
            var comp = apparel.TryGetComp <Comp_VerbGiver>();

            if (comp?.VerbTracker?.AllVerbs == null)
            {
                return;
            }
            if (!Base.Features.ApparelVerbs && !Base.IgnoredFeatures.ApparelVerbs)
            {
                Log.ErrorOnce(
                    "[MVCF] Found apparel with a verb while that feature is not enabled. Enabling now. This is not recommend. Contact the author of " +
                    apparel?.def?.modContentPack?.Name + " and ask them to add a MVCF.ModDef.",
                    apparel?.def?.modContentPack?.Name?.GetHashCode() ?? -1);
                Base.Features.ApparelVerbs = true;
                Base.ApplyPatches();
            }

            comp.Notify_Worn(man.Pawn);
            foreach (var verb in comp.VerbTracker.AllVerbs)
            {
                man.AddVerb(verb, VerbSource.Apparel, comp.PropsFor(verb));
            }
        }
Ejemplo n.º 8
0
 public void ChangeVerbB(VerbTypes verb)
 {
     VerbB = VerbManager.GetVerb(agent, verb, VerbB.Modifier);
 }
Ejemplo n.º 9
0
 public void ChangeMovementVerb(VerbTypes verb)
 {
     VerbMovement = VerbManager.GetVerb(agent, verb, VerbMovement.Modifier);
 }