Exemple #1
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))
            {
                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();
        }
Exemple #2
0
            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
			}
Exemple #4
0
        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();
        }
Exemple #5
0
        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);
                    }
                }
            }
        }
Exemple #6
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.
                }
            }
        }
Exemple #7
0
        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));
                    }
                }
            }
        }
Exemple #9
0
        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();
        }
Exemple #11
0
 public static void RemoveEntry(CampfireEntry entry)
 {
     m_Table.Remove(entry.Player);
     entry.Fire.m_Entries.Remove(entry);
 }
Exemple #12
0
        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();
        }
Exemple #13
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.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();
        }
Exemple #15
0
 public static void RemoveEntry( CampfireEntry entry )
 {
     m_Table.Remove( entry.Player );
     entry.Fire.m_Entries.Remove( entry );
 }
Exemple #16
0
        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);
            }
        }
Exemple #17
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();
        }
Exemple #18
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.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();
        }