public static void SelfConsume(Verb_ShootOneUse __instance) { if (__instance.caster is Pawn) { Pawn pawn = (__instance.caster as Pawn); ThingDefStuffDefPair weapon = __instance.EquipmentSource.toThingDefStuffDefPair(); bool anotherFound = WeaponAssingment.equipSpecificWeaponTypeFromInventory(pawn, weapon, false, false); if (!anotherFound) { WeaponAssingment.equipBestWeaponFromInventoryByPreference(pawn, DroppingModeEnum.UsedUp); } } }
public void handleInteraction(SidearmsListInteraction interaction, Event ev) { CompSidearmMemory pawnMemory = CompSidearmMemory.GetMemoryCompForPawn(parent); if (pawnMemory == null) { return; } var dropMode = parent.Drafted ? DroppingModeEnum.Combat : DroppingModeEnum.Calm; if (ev.button == LEFT_CLICK) { switch (interaction) { case SidearmsListInteraction.SelectorRanged: PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsPreference, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.primaryWeaponMode = PrimaryWeaponMode.Ranged; break; case SidearmsListInteraction.SelectorSkill: PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsPreference, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.primaryWeaponMode = PrimaryWeaponMode.BySkill; break; case SidearmsListInteraction.SelectorMelee: PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsPreference, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.primaryWeaponMode = PrimaryWeaponMode.Melee; break; case SidearmsListInteraction.Weapon: Thing weapon = interactionWeapon; ThingDefStuffDefPair weaponType = weapon.toThingDefStuffDefPair(); if (parent.Drafted) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedDrafted, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetWeaponAsForced(weaponType, true); if (parent.equipment.Primary != weapon && weapon is ThingWithComps) { WeaponAssingment.equipSpecificWeaponTypeFromInventory(parent, weaponType, MiscUtils.shouldDrop(dropMode), false); } } else if (pawnMemory.DefaultRangedWeapon == weaponType || pawnMemory.PreferredMeleeWeapon == weaponType || weaponType.isToolNotWeapon()) { if (weaponType.thing.IsRangedWeapon) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); } PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetWeaponAsForced(weaponType, false); if (parent.equipment.Primary != weapon && weapon is ThingWithComps) { WeaponAssingment.equipSpecificWeaponTypeFromInventory(parent, weaponType, MiscUtils.shouldDrop(dropMode), false); } } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); if (weaponType.thing.IsRangedWeapon) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); pawnMemory.SetRangedWeaponTypeAsDefault(weaponType); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); pawnMemory.SetMeleeWeaponTypeAsPreferred(weaponType); } } break; case SidearmsListInteraction.WeaponMemory: ThingDefStuffDefPair weaponMemory = interactionWeaponType.Value; if (parent.Drafted) { //allow nothing } else { if (weaponMemory.thing.IsRangedWeapon) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetRangedWeaponTypeAsDefault(weaponMemory); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetMeleeWeaponTypeAsPreferred(weaponMemory); } } break; case SidearmsListInteraction.Unarmed: if (parent.Drafted) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedDrafted, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetUnarmedAsForced(true); if (parent.equipment.Primary != null) { WeaponAssingment.equipSpecificWeapon(parent, null, MiscUtils.shouldDrop(dropMode), false); } } else if (pawnMemory.PreferredUnarmed) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetUnarmedAsForced(false); if (parent.equipment.Primary != null) { WeaponAssingment.equipSpecificWeapon(parent, null, MiscUtils.shouldDrop(dropMode), false); } } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.SetUnarmedAsPreferredMelee(); } break; case SidearmsListInteraction.None: default: return; break; } } else if (ev.button == RIGHT_CLICK) { switch (interaction) { case SidearmsListInteraction.SelectorRanged: case SidearmsListInteraction.SelectorSkill: case SidearmsListInteraction.SelectorMelee: break; case SidearmsListInteraction.Weapon: Thing weapon = interactionWeapon; ThingDefStuffDefPair weaponType = weapon.toThingDefStuffDefPair(); if (interactionWeaponIsDuplicate) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SidearmsDropping, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); WeaponAssingment.dropSidearm(parent, weapon, true); } else { if (parent.Drafted) { if (pawnMemory.ForcedWeaponWhileDrafted == weaponType) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedDrafted, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetForcedWeapon(true); } } else { if (pawnMemory.ForcedWeapon == weaponType) { if (weaponType.thing.IsRangedWeapon) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); } PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetForcedWeapon(false); } else if (weaponType.thing.IsRangedWeapon & pawnMemory.DefaultRangedWeapon == weaponType) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetRangedWeaponDefault(); } else if (pawnMemory.PreferredMeleeWeapon == weaponType) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetMeleeWeaponPreference(); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SidearmsDropping, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); WeaponAssingment.dropSidearm(parent, weapon, true); } } } break; case SidearmsListInteraction.WeaponMemory: ThingDefStuffDefPair weaponMemory = interactionWeaponType.Value; if (interactionWeaponIsDuplicate) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SidearmsMissing, KnowledgeAmount.SmallInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.ForgetSidearmMemory(weaponMemory); } else { if (parent.Drafted) { if (pawnMemory.ForcedWeaponWhileDrafted == weaponMemory) { if (weaponMemory.thing.IsRangedWeapon) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); } PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetForcedWeapon(true); } } else { if (pawnMemory.ForcedWeapon == weaponMemory) { if (weaponMemory.thing.IsRangedWeapon) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); } PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetForcedWeapon(false); } else if (weaponMemory.thing.IsRangedWeapon & pawnMemory.DefaultRangedWeapon == weaponMemory) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedRanged, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetRangedWeaponDefault(); } else if (pawnMemory.PreferredMeleeWeapon == weaponMemory) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetMeleeWeaponPreference(); } else { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SidearmsMissing, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.ForgetSidearmMemory(weaponMemory); } } } break; case SidearmsListInteraction.Unarmed: if (parent.Drafted && pawnMemory.ForcedUnarmedWhileDrafted) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedDrafted, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetUnarmedAsForced(true); } else if (pawnMemory.ForcedUnarmed) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetUnarmedAsForced(false); } else if (pawnMemory.PreferredUnarmed) { PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsAdvancedMelee, KnowledgeAmount.SpecificInteraction); PlayerKnowledgeDatabase.KnowledgeDemonstrated(SidearmsDefOf.Concept_SimpleSidearmsBasic, KnowledgeAmount.SmallInteraction); pawnMemory.UnsetMeleeWeaponPreference(); } break; case SidearmsListInteraction.None: default: return; break; } } }