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); }
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); }
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); }
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)); } }
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); }
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; } }