public override bool FireEvent(Event E) { if (E.ID == "BeforeDie") { if (LastCat == null) { return(true); } ParentObject.DirectMoveTo(LastCat, 0, true); GameObject Cat = GameObject.findById(LastCatID); if (Cat != null) { ParentObject.DirectMoveTo(Cat.pPhysics.CurrentCell.GetFirstEmptyAdjacentCell(), 0, true); Popup.Show("Right before your life begins to fade, you suddenly feel spirited away and find yourself before a feline friend ... at a cost."); } else { LastCat = null; Popup.Show("As you feel your life dwindle, your soul drifts towards where its astral tether once existed. But the feline is gone, and now, so are you."); return(true); } ParentObject.SpatialDistortionBlip(); if (ParentObject.HasStat("Hitpoints")) { ParentObject.Statistics["Hitpoints"].Penalty = 0; //AddPlayerMessage("You died."); } if (Level <= 1) { if (Cat != null) { Cat.pBrain.GetAngryAt(ParentObject, -400); } ParentObject.GetPart <Mutations>().RemoveMutation(this); Popup.Show("{{red|Your strange connection with cats has been severed.}}"); } else { Level = Level - 1; } return(false); } return(base.FireEvent(E)); }
public bool Constrict(GameObject Target, Event E = null) { // AddPlayerMessage("Phase: initialize constrict"); CheckConstricted(); if (Constricted != null) { EndConstriction(Constricted, null, null); if (Constricted != null) { // AddPlayerMessage("Phase: end constrict"); return(false); } } // AddPlayerMessage("Phase: 1"); // !Target.CanChangeMovementMode("Constricted", false, true, false) if (!Target.CanChangeBodyPosition("Constricted", false, true, false)) { if (ParentObject.IsPlayer()) { Popup.Show(string.Concat(new string[] { "You cannot do that while ", Target.the, Target.ShortDisplayName, "&y", Target.Is, " in ", Target.its, " present situation." }), true); } return(false); } // AddPlayerMessage("Phase: 2"); if (!Target.PhaseAndFlightMatches(ParentObject)) { return(false); } // AddPlayerMessage("Phase: 3"); if (Target.SameAs(ParentObject)) { return(false); } // AddPlayerMessage("Phase: 4"); Cell currentCell = ParentObject.pPhysics.CurrentCell; // AddPlayerMessage("Phase: 5"); if (currentCell == null) { return(false); } // Save vs constriction // AddPlayerMessage("Phase: 6"); if (ResistanceSave(Target)) { // AddPlayerMessage("Phase: 6a"); if (ParentObject.IsPlayer()) { // AddPlayerMessage("Phase: 6b"); Popup.Show("You fail to constrict " + Target.the + Target.ShortDisplayName + ".", true); } else if (Target.IsPlayer()) { // AddPlayerMessage("Phase: 7"); IPart.AddPlayerMessage(string.Concat(new string[] { ParentObject.The, ParentObject.ShortDisplayName, "&y", ParentObject.GetVerb("try", true, false), " to wrap around and constrict you, but", ParentObject.GetVerb("fail", true, false), "." })); } else if (IPart.Visible(ParentObject)) { // AddPlayerMessage("Phase: 8"); IPart.AddPlayerMessage(string.Concat(new string[] { ParentObject.The, ParentObject.ShortDisplayName, "&y", ParentObject.GetVerb("try", true, false), " to wrap around and constrict ", Target.the, Target.ShortDisplayName, "&y, but", ParentObject.GetVerb("fail", true, false), "." })); } // CheckEnterDamage(Target, true); ParentObject.UseEnergy(1000, "Position"); if (E != null) { // AddPlayerMessage("Phase: 9"); E.RequestInterfaceExit(); } return(false); } if (Target.CurrentCell != currentCell && !ParentObject.DirectMoveTo(Target.CurrentCell, 0, true, true)) { // AddPlayerMessage("Phase: 10"); if (E != null) { // AddPlayerMessage("Phase: 11"); E.RequestInterfaceExit(); } return(false); } // AddPlayerMessage("Phase: 12"); // CheckEnterDamage(Target, false); string verb = "are"; string preposition = "constricted by"; GameObject parentObject = ParentObject; XDidYToZ(Target, verb, preposition, parentObject, null, null); Constricted = Target; Target.ApplyEffect(new Constricted(ParentObject), null); ParentObject.UseEnergy(1000, "Position"); ParentObject.FireEvent(Event.New("Constricted", "Object", Target)); Target.FireEvent(Event.New("ObjectConstricted", "Object", ParentObject)); if (E != null) { E.RequestInterfaceExit(); } return(true); }