public static bool ExtractionWillKill(Pawn extractee, BloodExtractType bloodExtractType) { int amt = 0; switch (bloodExtractType) { case BloodExtractType.Vial: amt = AMT_BLOODVIAL; break; case BloodExtractType.Wine: amt = AMT_BLOODWINE; break; case BloodExtractType.Pack: amt = AMT_BLOODPACK; break; default: break; } if (extractee?.BloodNeed() is Need_Blood bn && (bn.CurBloodPoints <= amt || bn.DrainingIsDeadly)) { return(true); } return(false); }
public static Thing SpawnBloodFromExtraction(Pawn extractee, BloodExtractType bloodExtractType) { BloodType type = BloodTypeUtility.BloodType(extractee); Thing result = null; switch (type) { case BloodType.Animal: switch (bloodExtractType) { case BloodExtractType.Vial: case BloodExtractType.Pack: case BloodExtractType.Wine: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodPack_Animal); break; } break; case BloodType.LowBlood: switch (bloodExtractType) { case BloodExtractType.Vial: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodVial_LowBlood); break; case BloodExtractType.Pack: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodPack_LowBlood); break; case BloodExtractType.Wine: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodWine_LowBlood); break; } break; case BloodType.AverageBlood: switch (bloodExtractType) { case BloodExtractType.Vial: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodVial_AverageBlood); break; case BloodExtractType.Pack: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodPack_AverageBlood); break; case BloodExtractType.Wine: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodWine_AverageBlood); break; } break; case BloodType.HighBlood: switch (bloodExtractType) { case BloodExtractType.Vial: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodVial_HighBlood); break; case BloodExtractType.Pack: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodPack_HighBlood); break; case BloodExtractType.Wine: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodWine_HighBlood); break; } break; case BloodType.Special: switch (bloodExtractType) { case BloodExtractType.Vial: case BloodExtractType.Pack: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodVial_Special); break; case BloodExtractType.Wine: result = (Thing)ThingMaker.MakeThing(VampDefOf.BloodWine_Special); break; } break; } if (result != null) { result.stackCount = 1; GenPlace.TryPlaceThing(result, extractee.PositionHeld, extractee.Map, ThingPlaceMode.Near); int bloodAdjustAmount = 0; switch (bloodExtractType) { case BloodExtractType.Vial: bloodAdjustAmount = -AMT_BLOODVIAL; break; case BloodExtractType.Wine: bloodAdjustAmount = -AMT_BLOODWINE; break; case BloodExtractType.Pack: bloodAdjustAmount = -AMT_BLOODPACK; break; } extractee.BloodNeed().AdjustBlood(bloodAdjustAmount); } return(result); }