public void SW_Choke(Cell C) { TextConsole textConsole = Look._TextConsole; ScreenBuffer scrapBuffer = TextConsole.ScrapBuffer; XRLCore.Core.RenderMapToBuffer(scrapBuffer); bool bDraw = C.IsVisible(); int nBonus = Math.Max(ParentObject.Statistics["Ego"].Modifier, Level); if (C != null) { foreach (GameObject GO in C.GetObjectsInCell()) { if (GO.HasPart("Brain")) { //if(GO.HasTag("HeroNamePrefixes")) if (GO.HasTag("CanBeChoked")) { ChokedObject = GO; EquipForceGesture(); //Apply force choking effect to victim GO.ApplyEffect((Effect) new XRL.World.Parts.Effects.ZD_Choking(Level, GetBaseDamage(Level), GetBonusDamage(Level), ParentObject, GetSaveBonus(Level), GetRange(Level), ForceGestureObject)); } else { Popup.Show("The target does not have a throat for you to choke!", true); } } } } scrapBuffer.Goto(C.X, C.Y); scrapBuffer.Write("&Y#"); if (bDraw) { textConsole.DrawBuffer(scrapBuffer, (IScreenBufferExtra)null, false); } if (!bDraw) { return; } Thread.Sleep(50); }
public void Tick() { if (ParentObject.OnWorldMap() || (ParentObject.InInventory != null && ParentObject.InInventory.OnWorldMap())) { return; } GetFerments(); //IPart.AddPlayerMessage("fermentation:\n"+ferments.ToString()); LiquidVolume volume = ParentObject.GetPart <LiquidVolume>(); if (volume == null) { return; } if (ParentObject.pPhysics.Temperature < 15) { //IPart.AddPlayerMessage("too cold"); return; } int bads = 0; int total = 0; var test = volume.ComponentLiquids; int adram = (int)Math.Ceiling(1000f / Math.Max(volume.Volume, 1)); foreach (string f in ferments.Keys.ToList()) { IPart.AddPlayerMessage("ferments:" + f + ":" + ferments[f]); } foreach (string id in volume._ComponentLiquids.Keys.ToList()) { IPart.AddPlayerMessage("checking liquid:" + id); if (ferments.ContainsKey(id) || ferments.Values.ToList().Contains(id)) { IPart.AddPlayerMessage("good"); } else { bads += volume._ComponentLiquids[id]; IPart.AddPlayerMessage("bad"); } total += volume._ComponentLiquids[id]; } total = Math.Max(total, 1); if (ParentObject.pPhysics.Temperature > 30f || Stat.Rnd2.NextDouble() < bads / total) { string result = "putrid"; if (volume.GetPrimaryLiquid() != null) { volume._ComponentLiquids[volume.GetPrimaryLiquid().ID] -= adram; } if (!volume._ComponentLiquids.ContainsKey(result)) { volume._ComponentLiquids[result] = 0; } volume._ComponentLiquids[result] += adram; } else { foreach (string id in volume._ComponentLiquids.Keys.ToList()) { if (LiquidVolume.getLiquid(id) != null) { string SourceLiquidName = id; if (ferments.ContainsKey(SourceLiquidName)) //Its a liquid that ferments { string ResultName = ferments[SourceLiquidName]; if (LiquidVolume.getLiquid(SourceLiquidName) != null) { if (LiquidVolume.getLiquid(ResultName) != null) { string ResultLiquidId = ResultName; volume._ComponentLiquids[id] = volume._ComponentLiquids[id] - adram; if (volume._ComponentLiquids[id] <= 0) { volume._ComponentLiquids.Remove(id); } if (!volume._ComponentLiquids.ContainsKey(ResultLiquidId)) { volume._ComponentLiquids[ResultLiquidId] = 0; } volume._ComponentLiquids[ResultLiquidId] = volume._ComponentLiquids[ResultLiquidId] + adram; } else { volume._ComponentLiquids[id] = volume._ComponentLiquids[id] - adram; if (volume._ComponentLiquids[id] <= 0) { volume._ComponentLiquids.Remove(id); } volume.Volume -= 1; ParentObject.GetPart <Inventory>().AddObject(GameObject.create(ResultName)); } } } } } List <string> seen = new List <string>(); foreach (GameObject GO in ParentObject.GetPart <Inventory>().GetObjects()) { if (GO.HasTag("FermentTo")) { string result = GO.GetTag("FermentTo"); if (!seen.Contains(GO.GetBlueprint().Name)) { if (GO.Count > 1) { GO.RemoveOne(); } else { GO.Destroy(); } seen.Add(GO.GetBlueprint().Name); if (LiquidVolume.getLiquid(result) != null) { volume.Volume += 1; if (LiquidVolume.getLiquid(result) == null) { IPart.AddPlayerMessage("ERROR: Tried to ferment " + GO.DisplayName + " but output was invalid:" + result); } else { string LiquidID = result; if (!volume._ComponentLiquids.ContainsKey(LiquidID)) { volume._ComponentLiquids[LiquidID] = 0; } volume._ComponentLiquids[LiquidID] = volume._ComponentLiquids[LiquidID] + adram; } } else { ParentObject.GetPart <Inventory>().AddObject(GameObject.create(result)); } } } } } volume.NormalizeProportions(); volume.RecalculatePrimary(); volume.RecalculateProperties(); volume.FlushWeightCaches(); }