public List <VerbEntry> GetUpdatedAvailableVerbsList(bool terrainTools) { meleeVerbs.Clear(); verbsToAdd.Clear(); if (!terrainTools) { List <Verb> allVerbs = pawn.verbTracker.AllVerbs; for (int i = 0; i < allVerbs.Count; i++) { if (IsUsableMeleeVerb(allVerbs[i])) { verbsToAdd.Add(allVerbs[i]); } } if (pawn.equipment != null) { List <ThingWithComps> allEquipmentListForReading = pawn.equipment.AllEquipmentListForReading; for (int j = 0; j < allEquipmentListForReading.Count; j++) { CompEquippable comp = allEquipmentListForReading[j].GetComp <CompEquippable>(); if (comp == null) { continue; } List <Verb> allVerbs2 = comp.AllVerbs; if (allVerbs2 == null) { continue; } for (int k = 0; k < allVerbs2.Count; k++) { if (IsUsableMeleeVerb(allVerbs2[k])) { verbsToAdd.Add(allVerbs2[k]); } } } } if (pawn.apparel != null) { List <Apparel> wornApparel = pawn.apparel.WornApparel; for (int l = 0; l < wornApparel.Count; l++) { CompEquippable comp2 = wornApparel[l].GetComp <CompEquippable>(); if (comp2 == null) { continue; } List <Verb> allVerbs3 = comp2.AllVerbs; if (allVerbs3 == null) { continue; } for (int m = 0; m < allVerbs3.Count; m++) { if (IsUsableMeleeVerb(allVerbs3[m])) { verbsToAdd.Add(allVerbs3[m]); } } } } foreach (Verb hediffsVerb in pawn.health.hediffSet.GetHediffsVerbs()) { if (IsUsableMeleeVerb(hediffsVerb)) { verbsToAdd.Add(hediffsVerb); } } } else if (pawn.Spawned) { TerrainDef terrain = pawn.Position.GetTerrain(pawn.Map); if (terrainVerbs == null || terrainVerbs.def != terrain) { terrainVerbs = Pawn_MeleeVerbs_TerrainSource.Create(this, terrain); } List <Verb> allVerbs4 = terrainVerbs.tracker.AllVerbs; for (int n = 0; n < allVerbs4.Count; n++) { Verb verb = allVerbs4[n]; if (IsUsableMeleeVerb(verb)) { verbsToAdd.Add(verb); } } } float num = 0f; foreach (Verb item in verbsToAdd) { float num2 = VerbUtility.InitialVerbWeight(item, pawn); if (num2 > num) { num = num2; } } foreach (Verb item2 in verbsToAdd) { meleeVerbs.Add(new VerbEntry(item2, pawn, verbsToAdd, num)); } return(meleeVerbs); bool IsUsableMeleeVerb(Verb v) { if (v.IsStillUsableBy(pawn)) { return(v.IsMeleeAttack); } return(false); } }
public static bool GetUpdatedAvailableVerbsList(Pawn_MeleeVerbs __instance, ref List <VerbEntry> __result, bool terrainTools) { Pawn this_pawn = pawn(__instance); //meleeVerbs.Clear(); //verbsToAdd.Clear(); List <VerbEntry> meleeVerbs = new List <VerbEntry>(); List <Verb> verbsToAdd = new List <Verb>(); if (!terrainTools) { List <Verb> allVerbs1 = this_pawn.verbTracker.AllVerbs; for (int index = 0; index < allVerbs1.Count; ++index) { if (IsUsableMeleeVerb(allVerbs1[index])) { verbsToAdd.Add(allVerbs1[index]); } } if (this_pawn.equipment != null) { List <ThingWithComps> equipmentListForReading = this_pawn.equipment.AllEquipmentListForReading; for (int index1 = 0; index1 < equipmentListForReading.Count; ++index1) { CompEquippable comp = equipmentListForReading[index1].GetComp <CompEquippable>(); if (comp != null) { List <Verb> allVerbs2 = comp.AllVerbs; if (allVerbs2 != null) { for (int index2 = 0; index2 < allVerbs2.Count; ++index2) { if (IsUsableMeleeVerb(allVerbs2[index2])) { verbsToAdd.Add(allVerbs2[index2]); } } } } } } if (this_pawn.apparel != null) { List <Apparel> wornApparel = this_pawn.apparel.WornApparel; for (int index1 = 0; index1 < wornApparel.Count; ++index1) { CompEquippable comp = wornApparel[index1].GetComp <CompEquippable>(); if (comp != null) { List <Verb> allVerbs2 = comp.AllVerbs; if (allVerbs2 != null) { for (int index2 = 0; index2 < allVerbs2.Count; ++index2) { if (IsUsableMeleeVerb(allVerbs2[index2])) { verbsToAdd.Add(allVerbs2[index2]); } } } } } } foreach (Verb hediffsVerb in this_pawn.health.hediffSet.GetHediffsVerbs()) { if (IsUsableMeleeVerb(hediffsVerb)) { verbsToAdd.Add(hediffsVerb); } } } else if (this_pawn.Spawned) { TerrainDef terrain = this_pawn.Position.GetTerrain(this_pawn.Map); if (terrainVerbs(__instance) == null || terrainVerbs(__instance).def != terrain) { terrainVerbs(__instance) = Pawn_MeleeVerbs_TerrainSource.Create(__instance, terrain); } List <Verb> allVerbs = terrainVerbs(__instance).tracker.AllVerbs; for (int index = 0; index < allVerbs.Count; ++index) { Verb v = allVerbs[index]; if (IsUsableMeleeVerb(v)) { verbsToAdd.Add(v); } } } float highestSelWeight = 0.0f; foreach (Verb v in verbsToAdd) { float num = VerbUtility.InitialVerbWeight(v, this_pawn); if ((double)num > (double)highestSelWeight) { highestSelWeight = num; } } foreach (Verb verb in verbsToAdd) { meleeVerbs.Add(new VerbEntry(verb, this_pawn, verbsToAdd, highestSelWeight)); } __result = meleeVerbs; return(false); bool IsUsableMeleeVerb(Verb v) { return(v.IsStillUsableBy(this_pawn) && v.IsMeleeAttack); } }