Example #1
0
        public void OnPlayerDeath()
        {
            NWPlayer player  = (_.GetLastPlayerDied());
            NWObject hostile = (_.GetLastHostileActor(player.Object));

            var factionMember = _.GetFirstFactionMember(hostile.Object, FALSE);

            while (_.GetIsObjectValid(factionMember) == TRUE)
            {
                _.ClearPersonalReputation(player.Object, factionMember);
                factionMember = _.GetNextFactionMember(hostile.Object, FALSE);
            }

            for (int index = 0; index < NUM_INVENTORY_SLOTS; index++)
            {
                NWItem equipped = _.GetItemInSlot(index, player);
                _durability.RunItemDecay(player, equipped, _random.RandomFloat(0.02f, 0.07f));
            }

            foreach (var item in player.InventoryItems)
            {
                _durability.RunItemDecay(player, item, _random.RandomFloat(0.02f, 0.07f));
            }

            _.PopUpDeathGUIPanel(player.Object, TRUE, TRUE, 0, RespawnMessage);
        }
Example #2
0
        public void OnPlayerDeath()
        {
            NWPlayer oPC           = NWPlayer.Wrap(_.GetLastPlayerDied());
            string   corpseName    = oPC.Name + "'s Corpse";
            NWObject oHostileActor = NWObject.Wrap(_.GetLastHostileActor(oPC.Object));
            Location location      = oPC.Location;
            bool     hasItems      = false;

            var factionMember = _.GetFirstFactionMember(oHostileActor.Object, FALSE);

            while (_.GetIsObjectValid(factionMember) == TRUE)
            {
                _.ClearPersonalReputation(oPC.Object, factionMember);

                factionMember = _.GetNextFactionMember(oHostileActor.Object, FALSE);
            }

            _.PopUpDeathGUIPanel(oPC.Object, TRUE, TRUE, 0, RespawnMessage);

            NWPlaceable corpse = NWPlaceable.Wrap(_.CreateObject(OBJECT_TYPE_PLACEABLE, CorpsePlaceableResref, location));
            PCCorpse    entity = new PCCorpse
            {
                AreaTag     = _.GetTag(_.GetAreaFromLocation(location)),
                Name        = corpseName,
                Orientation = _.GetFacingFromLocation(location),
                PositionX   = _.GetPositionFromLocation(location).m_X,
                PositionY   = _.GetPositionFromLocation(location).m_Y,
                PositionZ   = _.GetPositionFromLocation(location).m_Z
            };

            if (oPC.Gold > 0)
            {
                corpse.AssignCommand(() =>
                {
                    _.TakeGoldFromCreature(oPC.Gold, oPC.Object);
                });

                hasItems = true;
            }

            foreach (NWItem item in oPC.InventoryItems)
            {
                if (!item.IsCursed)
                {
                    _.CopyItem(item.Object, corpse.Object, TRUE);
                    item.Destroy();
                    hasItems = true;
                }
            }

            if (!hasItems)
            {
                corpse.Destroy();
                return;
            }

            corpse.Name = corpseName;
            corpse.IdentifiedDescription = corpseName;

            foreach (NWItem corpseItem in corpse.InventoryItems)
            {
                PCCorpseItem corpseItemEntity = new PCCorpseItem
                {
                    GlobalID       = corpseItem.GlobalID,
                    NWItemObject   = _serialization.Serialize(corpseItem),
                    PCCorpseItemID = entity.PCCorpseID,
                    ItemName       = corpseItem.Name,
                    ItemTag        = corpseItem.Tag,
                    ItemResref     = corpseItem.Resref
                };
                entity.PCCorpseItems.Add(corpseItemEntity);
            }

            _db.PCCorpses.Add(entity);
            _db.SaveChanges();
            corpse.SetLocalInt("CORPSE_ID", (int)entity.PCCorpseID);
        }