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));
        }
Exemplo n.º 2
0
        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);
        }