Exemple #1
0
        private static void MakeCorpseTemporary(int level, CharacterInstance mob)
        {
            var af = new AffectData
            {
                Type     = AffectedByTypes.Charm,
                Duration = (SmaugRandom.Fuzzy((level + 1) / 4) + 1) *
                           GameConstants.GetSystemValue <int>("AffectDurationConversionValue")
            };

            mob.AddAffect(af);
        }
Exemple #2
0
        private static void AddAffectToTarget(CharacterInstance ch, int sn, int level, ApplyTypes appLocation)
        {
            int duration = 4 * level * GameConstants.GetConstant <int>("AffectDurationConversionValue");
            var af       = new AffectData
            {
                SkillNumber = sn,
                Duration    = duration,
                Location    = appLocation,
                Modifier    = -1
            };

            ch.AddAffect(af);
        }
Exemple #3
0
        private static void DrinkPoison(CharacterInstance ch, ObjectInstance obj)
        {
            comm.act(ATTypes.AT_POISON, "$n sputters and gags.", ch, null, null, ToTypes.Room);
            comm.act(ATTypes.AT_POISON, "You sputter and gag.", ch, null, null, ToTypes.Character);
            ch.MentalState = 20.GetNumberThatIsBetween(ch.MentalState + 5, 100);

            var af = new AffectData
            {
                Type     = AffectedByTypes.Poison,
                Duration = obj.Values.Poison,
                Location = ApplyTypes.None
            };

            ch.AddAffect(af);
        }
Exemple #4
0
 private static void InflictPoison(CharacterInstance ch, CharacterInstance victim)
 {
     if (!victim.SavingThrows.CheckSaveVsPoisonDeath(ch.Level, victim))
     {
         var af = new AffectData
         {
             Type     = AffectedByTypes.Poison,
             Duration = 20,
             Location = ApplyTypes.Strength,
             Modifier = -2
         };
         victim.AddAffect(af);
         ((PlayerInstance)victim).WorsenMentalState(
             20.GetNumberThatIsBetween(victim.MentalState + (victim.IsPKill() ? 1 : 2),
                                       100));
     }
 }
Exemple #5
0
        public static void JoinAffect(this CharacterInstance ch, AffectData paf)
        {
            if (ch.Affects == null || ch.Affects.Count == 0)
            {
                return;
            }

            var matchingAffects = ch.Affects.Where(x => x.Type == paf.Type);

            foreach (var affect in matchingAffects)
            {
                paf.Duration = 1000000.GetLowestOfTwoNumbers(paf.Duration + affect.Duration);
                paf.Modifier = paf.Modifier > 0 ? 5000.GetLowestOfTwoNumbers(paf.Modifier + affect.Modifier) : affect.Modifier;
                ch.RemoveAffect(affect);
                break;
            }

            ch.AddAffect(paf);
        }
Exemple #6
0
        public static void AddTo(this RoomTemplate room, CharacterInstance ch, IRepositoryManager dbManager = null)
        {
            if (ch == null)
            {
                throw new ArgumentNullException(nameof(ch));
            }

            var localRoom   = room;
            var databaseMgr = dbManager ?? RepositoryManager.Instance;

            if (databaseMgr.ROOMS.CastAs <Repository <long, RoomTemplate> >().Get(room.ID) == null)
            {
                LogManager.Instance.Bug("{0} -> NULL room! Putting char in limbo ({1})",
                                        ch.Name, VnumConstants.ROOM_VNUM_LIMBO);
                localRoom = databaseMgr.ROOMS.CastAs <Repository <long, RoomTemplate> >().Get(VnumConstants.ROOM_VNUM_LIMBO);
            }

            ch.CurrentRoom = localRoom;
            if (ch.HomeVNum < 1)
            {
                ch.HomeVNum = localRoom.ID;
            }
            localRoom.Persons.Add(ch);

            if (!ch.IsNpc())
            {
                if (localRoom.Area.NumberOfPlayers > localRoom.Area.MaximumPlayers)
                {
                    localRoom.Area.MaximumPlayers = localRoom.Area.NumberOfPlayers;
                }
            }

            foreach (var affect in localRoom.Affects.Where(x => (x.Location & ApplyTypes.IsNotRemovable) > 0))
            {
                ch.AddAffect(affect);
            }
            foreach (var affect in localRoom.PermanentAffects.Where(x => (x.Location & ApplyTypes.IsNotRemovable) > 0))
            {
                ch.AddAffect(affect);
            }
            foreach (var affect in ch.Affects)
            {
                localRoom.AddAffect(affect);
            }

            if (!ch.IsNpc() && localRoom.Flags.IsSet(RoomFlags.Safe) &&
                ch.GetTimer(TimerTypes.ShoveDrag) == null)
            {
                ch.AddTimer(TimerTypes.ShoveDrag, 10);
            }

            if (localRoom.Flags.IsSet(RoomFlags.Teleport) && localRoom.TeleportDelay > 0)
            {
                if (db.TELEPORT.Exists(x => x.Room == localRoom))
                {
                    return;
                }

                db.TELEPORT.Add(new TeleportData
                {
                    Room  = localRoom,
                    Timer = (short)localRoom.TeleportDelay
                });
            }

            if (ch.PreviousRoom == null)
            {
                ch.PreviousRoom = ch.CurrentRoom;
            }
        }