private void OnTick() { DateTime now = DateTime.Now; TimeSpan age = now - this.Created; if (age >= TimeSpan.FromSeconds(100.0)) { this.Delete(); } else if (age >= TimeSpan.FromSeconds(90.0)) { this.Status = CampfireStatus.Off; } else if (age >= TimeSpan.FromSeconds(60.0)) { if (this.Status == CampfireStatus.Burning) { Ashes ash = new Ashes(Utility.RandomMinMax(1, 3)); ash.MoveToWorld(this.Location, this.Map); } this.Status = CampfireStatus.Extinguishing; } if (this.Status == CampfireStatus.Off || this.Deleted) { return; } foreach (CampfireEntry entry in new ArrayList(m_Entries)) { if (!entry.Valid || entry.Player.NetState == null) { RemoveEntry(entry); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0)) { entry.Safe = true; entry.Player.SendLocalizedMessage(500621); // The camp is now secure. } } IPooledEnumerable eable = this.GetClientsInRange(SecureRange); foreach (NetState state in eable) { PlayerMobile pm = state.Mobile as PlayerMobile; if (pm != null && GetEntry(pm) == null) { CampfireEntry entry = new CampfireEntry(pm, this); m_Table[pm] = entry; m_Entries.Add(entry); pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp. } } eable.Free(); }
public LogoutGump(CampfireEntry entry, BlanketOfDarkness BlanketOfDarkness) : base(100, 0) { m_Entry = entry; m_BlanketOfDarkness = BlanketOfDarkness; m_CloseTimer = Timer.DelayCall(TimeSpan.FromSeconds(10.0), new TimerCallback(CloseGump)); AddBackground(0, 0, 400, 350, 0xA28); AddHtmlLocalized(100, 20, 200, 35, 1011015, false, false); // <center>Logging out via camping</center> /* Using a bedroll in the safety of a camp will log you out of the game safely. * If this is what you wish to do choose CONTINUE and you will be logged out. * Otherwise, select the CANCEL button to avoid logging out at this time. * The camp will remain secure for 10 seconds at which time this window will close * and you not be logged out. */ AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true); AddButton(45, 298, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0); AddHtmlLocalized(80, 300, 110, 35, 1011011, false, false); // CONTINUE AddButton(200, 298, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0); AddHtmlLocalized(235, 300, 110, 35, 1011012, false, false); // CANCEL }
public LogoutGump( CampfireEntry entry, Bedroll bedroll ) : base( 100, 0 ) { m_Entry = entry; m_Bedroll = bedroll; m_CloseTimer = Timer.DelayCall( TimeSpan.FromSeconds( 10.0 ), new TimerCallback( Close ) ); AddBackground( 0, 0, 400, 350, 0xA28 ); AddHtmlLocalized( 100, 20, 200, 35, 1011015, false, false ); // <center>Logging out via camping</center> /* Using a bedroll in the safety of a camp will log you out of the game safely. * If this is what you wish to do choose CONTINUE and you will be logged out. * Otherwise, select the CANCEL button to avoid logging out at this time. * The camp will remain secure for 10 seconds at which time this window will close * and you not be logged out. */ AddHtmlLocalized( 50, 55, 300, 140, 1011016, true, true ); AddButton( 45, 298, 0xFA5, 0xFA7, 1, GumpButtonType.Reply, 0 ); AddHtmlLocalized( 80, 300, 110, 35, 1011011, false, false ); // CONTINUE AddButton( 200, 298, 0xFA5, 0xFA7, 0, GumpButtonType.Reply, 0 ); AddHtmlLocalized( 235, 300, 110, 35, 1011012, false, false ); // CANCEL }
private void OnTick() { DateTime now = DateTime.UtcNow; TimeSpan age = now - Created; if (age >= TimeSpan.FromSeconds(100.0)) { Delete(); } else if (age >= TimeSpan.FromSeconds(90.0)) { Status = CampfireStatus.Off; } else if (age >= TimeSpan.FromSeconds(60.0)) { Status = CampfireStatus.Extinguishing; } if (Status == CampfireStatus.Off || Deleted) { return; } var list = new ArrayList(m_Entries); for (var index = 0; index < list.Count; index++) { var entry = (CampfireEntry)list[index]; if (!entry.Valid || entry.Player.NetState == null) { RemoveEntry(entry); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0)) { entry.Safe = true; entry.Player.SendLocalizedMessage(500621); // The camp is now secure. } } IPooledEnumerable eable = GetClientsInRange(SecureRange); foreach (NetState state in eable) { if (state.Mobile is PlayerMobile pm && GetEntry(pm) == null) { CampfireEntry entry = new CampfireEntry(pm, this); m_Table[pm] = entry; m_Entries.Add(entry); pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp. } } eable.Free(); }
public override void OnDoubleClick(Mobile from) { if (from == TrapOwner) { this.Delete(); from.SendMessage("You successfully remove the trap."); } else { int trapmaxskill = (int)Math.Round(from.Skills.RemoveTrap.Value) + (int)Math.Round(from.Skills.Tinkering.Value) + 50; int bonusmaxskill = (int)Math.Round(from.Skills[BonusSkill].Value); trapmaxskill += bonusmaxskill; int trapminskill = trapmaxskill - 20; int trappower = this.TrapPower; int trapcheck = Utility.RandomMinMax(trapminskill, trapmaxskill); CampfireEntry entry = Campfire.GetEntry(from); if (entry != null && entry.Safe) { trapcheck += 20; } if (trappower > trapmaxskill) { from.SendMessage("You have no chance of removing this trap."); return; } if (lastused + delay > DateTime.Now) { from.SendMessage("You must wait 7 seconds between uses."); return; } else { lastused = DateTime.Now; } if (trapcheck >= trappower) { this.Delete(); from.SendMessage("You successfully remove the trap."); } else { from.SendMessage("You fail to remove the trap."); if (0.5 >= Utility.RandomDouble()) { from.SendMessage("You accidently trigger one of the trap's components. It damages you before you can deactive it."); Spells.SpellHelper.Damage(TimeSpan.FromSeconds(0.5), from, from, Utility.RandomMinMax(15, 25), 100, 0, 0, 0, 0); } } } }
private void OnTick() { DateTime now = DateTime.Now; TimeSpan age = now - this.Created; if (age >= TimeSpan.FromSeconds(100.0)) { this.Delete(); } else if (age >= TimeSpan.FromSeconds(90.0)) { this.Status = CampfireStatus.Off; } else if (age >= TimeSpan.FromSeconds(60.0)) { this.Status = CampfireStatus.Extinguishing; } if (this.Status == CampfireStatus.Off || this.Deleted) { return; } foreach (CampfireEntry entry in new ArrayList(m_Entries)) { if (!entry.Valid || entry.Player.Client == null) { RemoveEntry(entry); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0)) { entry.Safe = true; entry.Player.SendLocalizedMessage(500621); // The camp is now secure. } } var eable = this.GetClientsInRange(SecureRange); foreach (GameClient state in eable) { PlayerMobile pm = state.Mobile as PlayerMobile; if (pm != null && GetEntry(pm) == null) { CampfireEntry entry = new CampfireEntry(pm, this); m_Table[pm] = entry; m_Entries.Add(entry); pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp. } } }
public static bool CheckMusicianship(Mobile m) { CampfireEntry entry = Campfire.GetEntry(m); m.CheckSkill(SkillName.Musicianship, 0.0, 120.0); if (entry != null && entry.Safe) { return(((m.Skills[SkillName.Musicianship].Value + 20) / 100) > Utility.RandomDouble()); } else { return((m.Skills[SkillName.Musicianship].Value / 100) > Utility.RandomDouble()); } }
public override void OnDoubleClick(Mobile from) { if (this.Parent != null || !this.VerifyMove(from)) { return; } if (!from.InRange(this, 2)) { from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that. return; } //adam : if within a rectricted camping zone then don't allow camping, i.e., a ransom chest rect if (CampHelper.InRestrictedArea(from)) { from.SendMessage("You do not consider it safe to secure a camp here"); return; } if (this.ItemID == 0xA57) // rolled { Direction dir = PlayerMobile.GetDirection4(from.Location, this.Location); if (dir == Direction.North || dir == Direction.South) { this.ItemID = 0xA55; } else { this.ItemID = 0xA56; } } else // unrolled { this.ItemID = 0xA57; if (!from.HasGump(typeof(LogoutGump))) { CampfireEntry entry = Campfire.GetEntry(from); if (entry != null && entry.Safe) { from.SendGump(new LogoutGump(entry, this)); } } } }
public override void OnDoubleClick(Mobile from) { if (Parent != null || !VerifyMove(from)) { return; } if (!from.InRange(this, 2)) { from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that. return; } if (ItemID == 0xA57) // rolled { Direction dir = PlayerMobile.GetDirection4(from.Location, Location); if (dir == Direction.North || dir == Direction.South) { ItemID = 0xA55; } else { ItemID = 0xA56; } } else // unrolled { ItemID = 0xA57; if (!from.HasGump(typeof(LogoutGump))) { CampfireEntry entry = Campfire.GetEntry(from); if (entry != null && entry.Safe) { from.SendGump(new LogoutGump(entry, this)); } } } }
private void OnTick() { DateTime now = DateTime.Now; TimeSpan age = now - this.Created; if ( age >= TimeSpan.FromSeconds( 100.0 ) ) this.Delete(); else if ( age >= TimeSpan.FromSeconds( 90.0 ) ) this.Status = CampfireStatus.Off; else if ( age >= TimeSpan.FromSeconds( 60.0 ) ) this.Status = CampfireStatus.Extinguishing; if ( this.Status == CampfireStatus.Off || this.Deleted ) return; foreach ( CampfireEntry entry in new List<CampfireEntry>( m_Entries ) ) { if ( !entry.Valid || entry.Player.NetState == null ) RemoveEntry( entry ); else if ( !entry.Safe && now - entry.Start >= TimeSpan.FromSeconds( 30.0 ) ) { entry.Safe = true; entry.Player.SendLocalizedMessage( 500621 ); // The camp is now secure. } } IPooledEnumerable eable = this.GetClientsInRange( SecureRange ); foreach ( NetState state in eable ) { PlayerMobile pm = state.Mobile as PlayerMobile; if ( pm != null && GetEntry( pm ) == null ) { CampfireEntry entry = new CampfireEntry( pm, this ); m_Table[pm] = entry; m_Entries.Add( entry ); pm.SendLocalizedMessage( 500620 ); // You feel it would take a few moments to secure your camp. } } eable.Free(); }
public static void RemoveEntry(CampfireEntry entry) { m_Table.Remove(entry.Player); entry.Fire.m_Entries.Remove(entry); }
private void OnTick() { DateTime now = DateTime.UtcNow; TimeSpan age = now - this.Created; if (age >= TimeSpan.FromSeconds(100.0)) { this.Delete(); } else if (age >= TimeSpan.FromSeconds(90.0)) { this.Status = CampfireStatus.Off; } else if (age >= TimeSpan.FromSeconds(60.0)) { this.Status = CampfireStatus.Extinguishing; } if (this.Status == CampfireStatus.Off || this.Deleted) { return; } foreach (CampfireEntry entry in new ArrayList(this.m_Entries)) { if (!entry.Valid || entry.Player.NetState == null) { RemoveEntry(entry); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0)) { entry.Safe = true; this.Safe = true; entry.Player.SendMessage("O Acampamento esta seguro"); if (entry.Player.Skills[SkillName.Camping].Value > 50) { GoGump.GetDiscoveredLocation(entry.Player); } } } IPooledEnumerable eable = this.GetClientsInRange(SecureRange); foreach (NetState state in eable) { PlayerMobile pm = state.Mobile as PlayerMobile; if (regenera) { var timenow = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; if (!pm.Warmode && pm.GetMillisSinceLastDamage() >= 1000 * 10) // 10 segundos { pm.FixedParticles(0x376A, 9, 32, 5005, EffectLayer.Waist); pm.Hits += 1; pm.Stam += 5; } } if (pm != null && GetEntry(pm) == null) { CampfireEntry entry = new CampfireEntry(pm, this); m_Table[pm] = entry; this.m_Entries.Add(entry); pm.SendMessage("Em alguns momentos seu acampamento ficara seguro"); } } eable.Free(); }
private void OnTick() { DateTime now = DateTime.Now; TimeSpan age = now - this.Created; if ( age >= TimeSpan.FromSeconds( 100.0 ) ) this.Delete(); else if ( age >= TimeSpan.FromSeconds( 90.0 ) ) this.Status = CampfireStatus.Off; else if ( age >= TimeSpan.FromSeconds( 60.0 ) ) this.Status = CampfireStatus.Extinguishing; if ( this.Status == CampfireStatus.Off || this.Deleted ) return; foreach ( CampfireEntry entry in new ArrayList( m_Entries ) ) { if ( !entry.Valid || entry.Player.NetState == null ) { RemoveEntry( entry ); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0)) { entry.Safe = true; entry.Player.SendAsciiMessage("The camp is now secure."); // The camp is now secure. } else { } } int Count = 0; IPooledEnumerable eable = this.GetItemsInRange(1); foreach (Object o in eable) { if (o is Campfire) Count++; } eable.Free(); eable = this.GetClientsInRange( SecureRange ); foreach ( NetState state in eable ) { PlayerMobile pm = state.Mobile as PlayerMobile; if ( pm != null && GetEntry( pm ) == null ) { CampfireEntry entry = new CampfireEntry( pm, this ); m_Table[pm] = entry; m_Entries.Add( entry ); pm.SendAsciiMessage( "You feel it would take a few moments to secure your camp." ); // You feel it would take a few moments to secure your camp. } if (pm != null && GetEntry(pm) != null && !GetEntry(pm).Safe) { if (Utility.Random(1, Count) != Count) { eable.Free(); return; } if (pm.InRange(this, 1) && m_Starter != null && pm == m_Starter) pm.CheckSkill(SkillName.Camping, 0.5); } } eable.Free(); }
private void OnTick() { DateTime now = DateTime.UtcNow; TimeSpan age = now - Created; if (age >= TimeSpan.FromSeconds(220.0)) // 100 { Delete(); } else if (age >= TimeSpan.FromSeconds(210.0)) // 90 { Status = CampfireStatus.Off; } else if (age >= TimeSpan.FromSeconds(180.0)) // 60 { Status = CampfireStatus.Extinguishing; } if (Status == CampfireStatus.Off || Deleted) { return; } foreach (CampfireEntry entry in new ArrayList(m_Entries)) { if (!entry.Valid || entry.Player.NetState == null) { RemoveEntry(entry); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(60 - 45 * (entry.Player.Skills[SkillName.Camping].Value / 100))) //originally was: TimeSpan.FromSeconds(30.0) { entry.Safe = true; entry.Player.SendLocalizedMessage(500621); // The camp is now secure. #region NewCamping if (!entry.Player.HasGump(typeof(CampfireGump))) { CampfireEntry cf = Campfire.GetEntry(entry.Player); if (cf != null && cf.Safe) { entry.Player.SendGump(new CampfireGump(cf, this)); } } #endregion } if (IsUpgraded) { /* * if(entry.Player.Hits < entry.Player.HitsMax) * entry.Player.Hits +=1; * if(entry.Player.Mana < entry.Player.ManaMax) * entry.Player.Mana +=1; */ Effects.SendLocationParticles(this, 0x3779, 1, 30, 1160, 3, 9502, 0); if (!entry.IsBuffed) { DoBuff(entry.Player); entry.IsBuffed = true; } } } IPooledEnumerable eable = GetClientsInRange(SecureRange); foreach (NetState state in eable) { PlayerMobile pm = state.Mobile as PlayerMobile; if (pm != null && GetEntry(pm) == null) { CampfireEntry entry = new CampfireEntry(pm, this); m_Table[pm] = entry; m_Entries.Add(entry); pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp. } } eable.Free(); }
public static void RemoveEntry( CampfireEntry entry ) { m_Table.Remove( entry.Player ); entry.Fire.m_Entries.Remove( entry ); }
public void EndHeal() { StopHeal(); int healerNumber = -1, patientNumber = -1; bool playSound = true; bool checkSkills = false; SkillName primarySkill = GetPrimarySkill(m_Patient); SkillName secondarySkill = GetSecondarySkill(m_Patient); BaseCreature petPatient = m_Patient as BaseCreature; if (!m_Healer.Alive) { healerNumber = 500962; // You were unable to finish your work before you died. patientNumber = -1; playSound = false; } else if (!m_Healer.InRange(m_Patient, Bandage.Range)) { healerNumber = 500963; // You did not stay close enough to heal your target. patientNumber = -1; playSound = false; } else if (!m_Patient.Alive || (petPatient != null && petPatient.IsDeadPet)) { double healing = m_Healer.Skills[primarySkill].Value; double anatomy = m_Healer.Skills[secondarySkill].Value; CampfireEntry entry = Campfire.GetEntry(m_Healer); if (entry != null && entry.Safe) { healing += 20; } double chance = ((healing - 68.0) / 50.0) - (m_Slips * 0.02); if (((checkSkills = (healing >= 80.0 && anatomy >= 80.0)) && chance > Utility.RandomDouble()) || (Core.SE && petPatient is Factions.FactionWarHorse && petPatient.ControlMaster == m_Healer)) //TODO: Dbl check doesn't check for faction of the horse here? { if (m_Patient.Map == null || !m_Patient.Map.CanFit(m_Patient.Location, 16, false, false)) { healerNumber = 501042; // Target can not be resurrected at that location. patientNumber = 502391; // Thou can not be resurrected there! } else if (m_Patient.Region != null && m_Patient.Region.IsPartOf("Khaldun")) { healerNumber = 1010395; // The veil of death in this area is too strong and resists thy efforts to restore life. patientNumber = -1; } else { healerNumber = 500965; // You are able to resurrect your patient. patientNumber = -1; m_Patient.PlaySound(0x214); m_Patient.FixedEffect(0x376A, 10, 16); if (petPatient != null && petPatient.IsDeadPet) { Mobile master = petPatient.ControlMaster; if (master != null && m_Healer == master) { petPatient.ResurrectPet(); for (int i = 0; i < petPatient.Skills.Length; ++i) { petPatient.Skills[i].Base -= 0.1; } } else if (master != null && master.InRange(petPatient, 3)) { healerNumber = 503255; // You are able to resurrect the creature. master.CloseGump(typeof(PetResurrectGump)); master.SendGump(new PetResurrectGump(m_Healer, petPatient)); } else { bool found = false; List <Mobile> friends = petPatient.Friends; for (int i = 0; friends != null && i < friends.Count; ++i) { Mobile friend = friends[i]; if (friend.InRange(petPatient, 3)) { healerNumber = 503255; // You are able to resurrect the creature. friend.CloseGump(typeof(PetResurrectGump)); friend.SendGump(new PetResurrectGump(m_Healer, petPatient)); found = true; break; } } if (!found) { healerNumber = 1049670; // The pet's owner must be nearby to attempt resurrection. } } } else { m_Patient.CloseGump(typeof(ResurrectGump)); m_Patient.SendGump(new ResurrectGump(m_Patient, m_Healer)); } } } else { if (petPatient != null && petPatient.IsDeadPet) { healerNumber = 503256; // You fail to resurrect the creature. } else { healerNumber = 500966; // You are unable to resurrect your patient. } patientNumber = -1; } } else if (m_Patient.Poisoned) { m_Healer.SendLocalizedMessage(500969); // You finish applying the bandages. double healing = m_Healer.Skills[primarySkill].Value; double anatomy = m_Healer.Skills[secondarySkill].Value; CampfireEntry entry = Campfire.GetEntry(m_Healer); if (entry != null && entry.Safe) { healing += 20; } double chance = ((healing - 30.0) / 50.0) - (m_Patient.Poison.Level * 0.1) - (m_Slips * 0.02); if ((checkSkills = (healing >= 60.0 && anatomy >= 60.0)) && chance > Utility.RandomDouble()) { if (m_Patient.CurePoison(m_Healer)) { healerNumber = (m_Healer == m_Patient) ? -1 : 1010058; // You have cured the target of all poisons. patientNumber = 1010059; // You have been cured of all poisons. } else { healerNumber = -1; patientNumber = -1; } } else { healerNumber = 1010060; // You have failed to cure your target! patientNumber = -1; } } else if (BleedAttack.IsBleeding(m_Patient)) { healerNumber = 1060088; // You bind the wound and stop the bleeding patientNumber = 1060167; // The bleeding wounds have healed, you are no longer bleeding! BleedAttack.EndBleed(m_Patient, false); } else if (MortalStrike.IsWounded(m_Patient)) { healerNumber = (m_Healer == m_Patient ? 1005000 : 1010398); patientNumber = -1; playSound = false; } else if (m_Patient.Hits == m_Patient.HitsMax) { healerNumber = 500967; // You heal what little damage your patient had. patientNumber = -1; } else { checkSkills = true; patientNumber = -1; double healing = m_Healer.Skills[primarySkill].Value; double anatomy = m_Healer.Skills[secondarySkill].Value; CampfireEntry entry = Campfire.GetEntry(m_Healer); if (entry != null && entry.Safe) { healing += 20; } double chance = ((healing + 10.0) / 100.0) - (m_Slips * 0.02); if (chance > Utility.RandomDouble()) { healerNumber = 500969; // You finish applying the bandages. double min, max; if (Core.AOS) { min = (anatomy / 8.0) + (healing / 5.0) + 4.0; max = (anatomy / 6.0) + (healing / 2.5) + 4.0; } else { min = (anatomy / 5.0) + (healing / 5.0) + 3.0; max = (anatomy / 5.0) + (healing / 2.0) + 10.0; } double toHeal = min + (Utility.RandomDouble() * (max - min)); toHeal += (m_Healer.Skills[SkillName.Veterinary].Value + m_Healer.Skills[SkillName.Healing].Value - healing) / 8.0; if (m_Patient.Body.IsMonster || m_Patient.Body.IsAnimal) { toHeal += m_Patient.HitsMax / 100; } if (Core.AOS) { toHeal -= toHeal * m_Slips * 0.35; // TODO: Verify algorithm } else { toHeal -= m_Slips * 4; } if (toHeal < 1) { toHeal = 1; healerNumber = 500968; // You apply the bandages, but they barely help. } m_Patient.Heal((int)toHeal, m_Healer, false); } else { healerNumber = 500968; // You apply the bandages, but they barely help. playSound = false; } } if (healerNumber != -1) { m_Healer.SendLocalizedMessage(healerNumber); } if (patientNumber != -1) { m_Patient.SendLocalizedMessage(patientNumber); } if (playSound) { m_Patient.PlaySound(0x57); } if (checkSkills) { m_Healer.CheckSkill(secondarySkill, 0.0, 120.0); m_Healer.CheckSkill(primarySkill, 0.0, 120.0); } }
private void OnTick() { DateTime now = DateTime.Now; TimeSpan age = now - this.Created; if ( age >= TimeSpan.FromSeconds( 300.0 ) ) this.Delete(); else if ( age >= TimeSpan.FromSeconds( 270.0 ) ) this.Status = CampfireStatus.Off; else if ( age >= TimeSpan.FromSeconds( 180.0 ) ) this.Status = CampfireStatus.Extinguishing; if ( this.Status == CampfireStatus.Off || this.Deleted ) return; foreach ( CampfireEntry entry in new ArrayList( m_Entries ) ) { if ( !entry.Valid || entry.Player.NetState == null ) { RemoveEntry( entry ); } else if ( !entry.Safe && now - entry.Start >= TimeSpan.FromSeconds( 30.0 ) ) { entry.Safe = true; entry.Player.SendLocalizedMessage( 500621 ); // The camp is now secure. } } IPooledEnumerable eable = this.GetClientsInRange( SecureRange ); foreach ( NetState state in eable ) { PlayerMobile pm = state.Mobile as PlayerMobile; if( pm != null ) { bool foundbedroll = false; foreach( Item bedroll in pm.GetItemsInRange ( 1 ) ) { if( bedroll is Bedroll ) foundbedroll = true; } if( foundbedroll ) { if ( pm.CheckSkill( SkillName.Camping, 0.0, 100.0 ) ) { if( pm.Hits < pm.HitsMax ) { pm.Hits++; } if( pm.Stam < pm.StamMax ) { pm.Stam++; } } } } if ( pm != null && GetEntry( pm ) == null ) { CampfireEntry entry = new CampfireEntry( pm, this ); m_Table[pm] = entry; m_Entries.Add( entry ); pm.SendLocalizedMessage( 500620 ); // You feel it would take a few moments to secure your camp. } } eable.Free(); }
private void OnTick() { DateTime now = DateTime.Now; TimeSpan age = now - this.Created; if (age >= TimeSpan.FromSeconds(100.0)) { this.Delete(); } else if (age >= TimeSpan.FromSeconds(90.0)) { this.Status = CampfireStatus.Off; } else if (age >= TimeSpan.FromSeconds(60.0)) { this.Status = CampfireStatus.Extinguishing; } if (this.Status == CampfireStatus.Off || this.Deleted) { return; } foreach (CampfireEntry entry in new ArrayList(m_Entries)) { if (!entry.Valid || entry.Player.NetState == null) { RemoveEntry(entry); } else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0)) { entry.Safe = true; entry.Player.SendAsciiMessage("The camp is now secure."); // The camp is now secure. } else { } } int Count = 0; IPooledEnumerable eable = this.GetItemsInRange(1); foreach (Object o in eable) { if (o is Campfire) { Count++; } } eable.Free(); eable = this.GetClientsInRange(SecureRange); foreach (NetState state in eable) { PlayerMobile pm = state.Mobile as PlayerMobile; if (pm != null && GetEntry(pm) == null) { CampfireEntry entry = new CampfireEntry(pm, this); m_Table[pm] = entry; m_Entries.Add(entry); pm.SendAsciiMessage("You feel it would take a few moments to secure your camp."); // You feel it would take a few moments to secure your camp. } if (pm != null && GetEntry(pm) != null && !GetEntry(pm).Safe) { if (Utility.Random(1, Count) != Count) { eable.Free(); return; } if (pm.InRange(this, 1) && m_Starter != null && pm == m_Starter) { pm.CheckSkill(SkillName.Camping, 0.5); } } } eable.Free(); }