Пример #1
0
        public override void OnWeaponHit( Mobile attacker, Mobile defender, BaseWeapon weapon, int damageGiven )
        {
            if( Damage < 1 || Chance < 1 )
                return;

            if( Chance >= Utility.RandomMinMax( 0, 100 ) )
            {
                if( Damage > 0 )
                {
                    SpellHelper.Damage( TimeSpan.Zero, defender, attacker, Damage, 0, 0, 0, 0, 100 );
                    defender.BoltEffect( 0 );
                }
            }
        }
Пример #2
0
        public override bool OnMoveOver(Mobile m)
        {
            if (!m_AllowCreatures && !m.Player)
                return true;

            if (m.Backpack.ConsumeTotal(typeof(SphereOfProtection), 1))
            {
                return false;
            }

            m.BoltEffect(0);
            m.Hits -= 25;
            return true;
        }
		public override void OnDoubleClick( Mobile from )
		{
			if ( !from.InRange( this.GetWorldLocation(), 2 ) )
				return;

			int firstOne = Utility.Random( 1, 6 );
			int secondOne = Utility.Random( 1, 6 );

			if ((firstOne + secondOne) <= 5) {
				this.PublicOverheadMessage( MessageType.Regular, 0, false, string.Format( "{0} is dead!", from.Name, firstOne, secondOne) );
				from.BoltEffect( 0 );
				from.Kill();
			} else {
				this.PublicOverheadMessage( MessageType.Regular, 0, false, string.Format( "{0} survives!", from.Name, firstOne, secondOne) );
			}
		}
Пример #4
0
		// note that this method will be called when attached to either a mobile or a weapon
		// when attached to a weapon, only that weapon will do additional damage
		// when attached to a mobile, any weapon the mobile wields will do additional damage
		public override void OnWeaponHit(Mobile attacker, Mobile defender, BaseWeapon weapon, int damageGiven)
		{
			// if it is still refractory then return
			if(DateTime.UtcNow < m_EndTime) return;

			int damage = 0;

			if(m_Damage > 0)
				damage = Utility.Random(m_Damage);

			if(defender != null && attacker != null && damage > 0)
			{
				defender.BoltEffect( 0 );

				SpellHelper.Damage( TimeSpan.Zero, defender, attacker, damage, 0, 0, 0, 0, 100 );

				m_EndTime = DateTime.UtcNow + Refractory;
			}
		}
Пример #5
0
		public void ApplyShock(Mobile m, int tick)
		{
            if (m == null || !m.Alive || this.Deleted)
            {
                if (m_DamageTimer != null)
                    m_DamageTimer.Stop();
            }
            else
            {
                int damage = (int)(75 / Math.Max(1, tick - 1)) + Utility.RandomMinMax(1, 9);

                AOS.Damage(m, damage, 0, 0, 0, 0, 100);

                m.BoltEffect(0);

                m.FixedParticles(0x3818, 1, 11, 0x13A8, 0, 0, EffectLayer.CenterFeet);
                m.FixedParticles(0x3818, 1, 11, 0x13A8, 0, 0, EffectLayer.Waist);
                m.FixedParticles(0x3818, 1, 11, 0x13A8, 0, 0, EffectLayer.Head);
                m.PlaySound(0x1DC);

                m.LocalOverheadMessage(Server.Network.MessageType.Regular, 0x21, 1114443); // * Your body convulses from electric shock *
                m.NonlocalOverheadMessage(Server.Network.MessageType.Regular, 0x21, 1114443, m.Name); //  * ~1_NAME~ spasms from electric shock *
            }
		}
Пример #6
0
		public override void OnTrigger(object activator, Mobile m)
		{
			if(m == null ) return;

			// if it is still refractory then return
			if(DateTime.UtcNow < m_EndTime) return;

			int damage = 0;

			if(m_Damage > 0)
				damage = Utility.Random(m_Damage);

			if(damage > 0)
			{
				m.BoltEffect( 0 );

				SpellHelper.Damage( TimeSpan.Zero, m, damage, 0, 0, 0, 0, 100 );
			}

			m_EndTime = DateTime.UtcNow + Refractory;

		}    
Пример #7
0
        public override void OnDoubleClick(Mobile from)
        {
            base.OnDoubleClick(from);

            if (from != m_Owner && m_Owner != null)
            {
                from.SendMessage("You do not own this stone!");
                return;
            }

            if (m_Owner == null)
            {
                if (from.AccessLevel == AccessLevel.Player)
                {
                    if (HideEffects)
                        from.SendMessage("You are not authorized to have me! Goodbye!");
                    else
                        this.Say(String.Format("You are not authorized to have me! Goodbye!"));
                    deleting = true;
                    DoDelete(this);
                    return;
                }
                else
                {
                    if (HideEffects)
                        from.SendMessage("How May I serve you master!");
                    else
                        this.Say(String.Format("How May I serve you master!"));
                    m_Owner = from;
                    Name = m_Owner.Name + "'s Staff Stone";
                    this.StaffLevel = m_Owner.AccessLevel;
                    Movable = false;
                    this.HomeLocation = from.Location;
                    this.HomeMap = from.Map;
                    if (from.Title != null)
                        this.Title = from.Title;
                }
                return;
            }

            if (from is PlayerMobile)
            {
                PlayerMobile player = (PlayerMobile)from;
                if (player != null)
                {
                    if (this.Title == null)
                        this.Title = from.Title;

                    if (DateTime.UtcNow < LastClicked + TimeSpan.FromSeconds(1.0))
                    {
                        if (!HideEffects)
                            this.Say(String.Format("Try clicking again a little later."));
                        else
                            from.SendMessage("Try clicking again a little later.");
                        return;
                    }
                    else
                    {
                        LastClicked = DateTime.UtcNow;
                        switch (player.AccessLevel)
                        {
                            case AccessLevel.Owner:
                                m_StaffLevel = from.AccessLevel;
                                player.AccessLevel = AccessLevel.Player;
                                break;
                            case AccessLevel.Administrator:
                                m_StaffLevel = from.AccessLevel;
                                player.AccessLevel = AccessLevel.Player;
                                break;
                            case AccessLevel.GameMaster:
                                m_StaffLevel = from.AccessLevel;
                                player.AccessLevel = AccessLevel.Player;
                                break;
                            case AccessLevel.Seer:
                                m_StaffLevel = from.AccessLevel;
                                player.AccessLevel = AccessLevel.Player;
                                break;
                            case AccessLevel.Counselor:
                                m_StaffLevel = from.AccessLevel;
                                player.AccessLevel = AccessLevel.Player;
                                break;
                            case AccessLevel.Player:
                                player.AccessLevel = m_StaffLevel;
                                break;
                            default:
                                deleting = true;
                                DoDelete(this);
                                break;
                        }
                    }
                    if (!HideEffects)
                        from.BoltEffect(0);
                }
            }
        }
Пример #8
0
 public override bool OnDragLift(Mobile from)
 {
     if (m_Owner != from && m_Owner != null)
     {
         from.SendMessage("You cannot pick that up.");
         if (!HideEffects)
             from.BoltEffect(0);
         return false;
     }
     return base.OnDragLift(from);
 }
Пример #9
0
        public void SpringTrap(Mobile from)
        {
            if (from == null || !from.Alive)
                return;

            int cliloc;
            int damage = Utility.RandomMinMax(75, 150);

            switch (Utility.Random(4))
            {
                default:
                case 0:
                    Effects.SendLocationEffect( from, from.Map, 0x3709, 30 );
					from.PlaySound( 0x54 );
                    cliloc = 1010524; // Searing heat scorches thy skin.
                    AOS.Damage(from, damage, 0, 100, 0, 0, 0);
                    break;
                case 1:
                    from.PlaySound(0x223);
                    cliloc = 1010525; // Pain lances through thee from a sharp metal blade.
                    AOS.Damage(from, damage, 100, 0, 0, 0, 0);
                    break;
                case 2:
                    from.BoltEffect(0);
                    cliloc = 1010526; // Lightning arcs through thy body.
                    AOS.Damage(from, damage, 0, 0, 0, 0, 100);
                    break;
                case 3:
                    Effects.SendLocationEffect( from, from.Map, 0x113A, 20, 10 );
					from.PlaySound( 0x231 );
                    from.ApplyPoison(from, Poison.Deadly);
                    cliloc = 1010523; // A toxic vapor envelops thee.
                    AOS.Damage(from, damage, 0, 0, 0, 100, 0);
                    break;
            }

            from.LocalOverheadMessage(Server.Network.MessageType.Regular, 0xEE, cliloc);
        }
Пример #10
0
		public override void OnDamagedBySpell( Mobile from )
		{
			if (Combatant == null)
				return;

			if (Body == 58)
				Say( "I will steal your Body and now your Soul..." );

			if (Body != from.Body)
            {
                BoltEffect( 0 );

                Body = from.Body;
                Hue = from.Hue;
                Name = from.Name;

                Fame = from.Fame;
                Karma = (0 -from.Karma);
                Title = from.Title;

                Str = from.Str;
                Int = from.Int;
                Dex = from.Dex;

                Hits = from.Hits;

                Dex = from.Dex;
                Mana = from.Mana;
                Stam = from.Stam;

                Female = from.Female;

                VirtualArmor = (from.VirtualArmor);

                Item hair = new Item( Utility.RandomList( 8265 ) );
                hair.Hue = 1153;
                hair.Layer = Layer.Hair;
                hair.Movable = false;
                AddItem( hair );

                JesterHat hat = new JesterHat();
                hat.Hue = 1175;
                hat.Movable = false;
                AddItem( hat );

                DeathRobe robe = new DeathRobe();
                robe.Hue = 1175;
                robe.Movable = false;
                AddItem( robe );

                Sandals sandals = new Sandals();
                sandals.Hue = 1;
                sandals.Movable = false;
                AddItem( sandals );

                Spellbook book = new Spellbook( UInt64.MaxValue );
                book.Hue = 1175;
                book.Movable = false;
                AddItem( book );

                BoltEffect( 0 );
			}
			switch ( Utility.Random( 6 ) )
			{
				case 0: Say( "You can not win with magic..." ); break;
				case 1: Say( "Your image is weak as is your mind..." ); break;
				case 2: Say( "It feels good to wear your skin..." ); break;
				case 3: Say( "I'll take over your life as soon as I end it..." ); break;
				case 4: Say( "Don't you like having a twin..." ); break;
				case 5: Say( "You lack the skills to defeat me..." ); break;
			}
			from.BoltEffect( 0 );
			from.Damage( Utility.Random( 20, 40 ) );
			Hits += ( Utility.Random( 20, 40 ) );
		}
Пример #11
0
        public override void AggressiveAction(Mobile aggressor, bool criminal)
        {
            base.AggressiveAction(aggressor, criminal);

            if (m_Game != null && m_Game.Running && aggressor != null)
            {
                Item item = aggressor.FindItemOnLayer(Layer.OuterTorso);

                if (item is CTFRobe)
                {
                    CTFTeam team = m_Game.GetTeam(aggressor);

                    if (team != null && team.Name == m_Team.Name)
                    {
                        AOS.Damage(aggressor, 200, 0, 100, 0, 0, 0);
                        this.Game.PlayerMessage("{0} ({1}) was killed for betraying his orc!", aggressor.Name, team.Name);
                        aggressor.BoltEffect(0);
                        aggressor.PlaySound(0x307);
                    }
                }
            }
        }
Пример #12
0
		public override void OnDamagedBySpell( Mobile from )
		{
			if (from.Combatant == null)
			return;

			Mobile m = from.Combatant;						

			if (m.Body == 58)
				m.Say( "I now own your soul!!!" ); 

			if (m.Body != from.Body)
                    	{
				m.BoltEffect( 0 );

				m.Body = from.Body; 
				m.Hue = from.Hue; 
				m.Name = from.Name;

      				m.Fame = from.Fame;
      				m.Karma = (0-from.Karma);
      				m.Title = from.Title;
      	 			
      				m.Str = from.Str;
      				m.Int = from.Int;
				m.Dex = from.Dex;

      				m.Hits =from.Hits + 2000;

      				m.Dex = from.Dex;
      				m.Mana = from.Mana;
      				m.Stam = from.Stam;

				m.Female = from.Female;
      	
      				m.VirtualArmor = (from.VirtualArmor +95);
      	
				Item hair = new Item( Utility.RandomList( 8265 ) );
				hair.Hue = 1167;
				hair.Layer = Layer.Hair;
				hair.Movable = false;
				m.AddItem( hair );

				Kasa hat = new Kasa();				
				hat.Hue = 1167;
				hat.Movable = false;
				m.AddItem( hat );

				DeathRobe robe = new DeathRobe();
				robe.Name = "Death Robe";
				robe.Hue = 1167;
				robe.Movable = false;
				m.AddItem( robe );
		
				Sandals sandals = new Sandals();				
				sandals.Hue = 1167;
				sandals.Movable = false;
				m.AddItem( sandals );				

				BagOfAllReagents bag = new BagOfAllReagents();
				m.AddToBackpack( bag );
			
				m.BoltEffect( 0 );
			}
			switch ( Utility.Random( 5 ) )
			{
				
				case 0: m.Say( "We are now one with each other!!" ); break;
				case 1: m.Say( "Your weak spells have no effect on me, muahahaha!!" ); break;
				case 2: m.Say( "Your end is near young adventurer!!" ); break;
				case 3: m.Say( "Thou shalt not pass my post!!" ); break;
				case 4: m.Say( "I now own your soul!!!" ); break;
			}
			from.BoltEffect( 0 );
			from.Damage( Utility.Random( 1, 50 ) );
			m.Hits += ( Utility.Random( 1, 50 ) );
		}
Пример #13
0
		public override void OnHit( Mobile attacker, Mobile defender, int damage )
		{
			if ( !Validate( attacker )  )
				return;

			ClearCurrentAbility( attacker );

			Map map = attacker.Map;

			if ( map == null )
				return;

			BaseWeapon weapon = attacker.Weapon as BaseWeapon;

			if ( weapon == null )
				return;

			if ( !CheckMana( attacker, true ) )
				return;

			ArrayList list = new ArrayList();
					
					defender.PlaySound(1471);
					defender.BoltEffect(0);
					attacker.SendMessage( "The Lighting Arrow strikes a target" );

			foreach ( Mobile m in defender.GetMobilesInRange( 1 ) )
				list.Add( m );

			ArrayList targets = new ArrayList();

			for ( int i = 0; i < list.Count; ++i )
			{
				Mobile m = (Mobile)list[i];

				if ( m != defender && m != attacker && SpellHelper.ValidIndirectTarget( attacker, m ) )
				{
					if ( m == null || m.Deleted || m.Map != attacker.Map || !m.Alive || !attacker.CanSee( m ) || !attacker.CanBeHarmful( m ) )
						continue;

					if ( !attacker.InRange( m, weapon.MaxRange ) )
						continue;

					if ( attacker.InLOS( m ) )
						targets.Add( m );
				}
			}

			if ( targets.Count > 0 )
			{
				double damageBonus = 1.0 + Math.Pow( 1, 2 ) / 100;

				for ( int i = 0; i < targets.Count; ++i )
				{
					Mobile m = (Mobile)targets[i];

						attacker.SendMessage( "The Lighting Arrow strikes around a target" );
					m.PlaySound(1471);
					m.BoltEffect(0);
					weapon.OnHit( attacker, m, damageBonus );
				}

			}
		}
Пример #14
0
        public override bool DoEffect(Mobile from, Mobile target)
        {
            if ( from.CanSee( target ) && from.CanBeHarmful( target ) && from.InLOS( target ) && target.Alive )
            {
                from.DoHarmful( target );

                Mobile source = from;
                SpellHelper.Turn( source, target );

                SpellHelper.CheckReflect( 2, ref source, ref target );

                double damage = Utility.RandomMinMax( m_Min, m_Max );
                double scalar = 1;
                if ( !target.Player && !target.Body.IsHuman && !Core.AOS )
                    scalar *= 2.0; // Double magery damage to monsters/animals if not AOS
                if ( target is BaseCreature )
                    ((BaseCreature)target).AlterDamageScalarFrom( from, ref scalar );
                if ( from is BaseCreature )
                    ((BaseCreature)from).AlterDamageScalarTo( target, ref scalar );
                target.Region.SpellDamageScalar( from, target, ref scalar );

                damage *= scalar;
                if ( damage < 1 )
                    damage = 1;

                if ( Spell.CheckResisted( target, damage ) )
                {
                    damage *= 0.5;
                    target.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
                }

                if ( m_ExpSnd >= 0 )
                {
                    source.MovingParticles( target, m_EffIID, m_Spd, 0, false, true, m_Eff, m_Exp, m_ExpSnd );
                }
                else
                {
                    if ( m_EffIID == 0 && m_Spd == 0 )
                        target.BoltEffect( m_Eff );
                    else
                        target.FixedParticles( m_EffIID, m_Spd, m_Exp, m_Eff, (EffectLayer)(-(m_ExpSnd - 1)) );
                }

                if ( m_Snd > 0 )
                    source.PlaySound( m_Snd );

                SpellHelper.Damage( TimeSpan.Zero, target, from, damage, 0, 100, 0, 0, 0 );

                return true;
            }
            else
            {
                return false;
            }
        }
Пример #15
0
		public virtual void TjnarsScythe_OnTarget( Mobile from, object target )
		{
			if( !from.CanSee( target ) )
			{
				from.SendLocalizedMessage( 500237 ); //Target cannot be seen.
			}
			else if( target is Mobile )
			{
				Mobile targetMobile = (Mobile)target;
				
				if( targetMobile.Body.IsHuman )
				{
					if( targetMobile.Hits < (targetMobile.HitsMax / 10) )
					{
						targetMobile.PlaySound( 565 ); //Consecrate Weapon sound
						from.PlaySound( 565 );
						
						from.MovingEffect( targetMobile, 0x26C4, 9, 1, false, false ); //Launches a solid scythe
						Effects.SendMovingParticles( from, targetMobile, 0x26C4, 1, 0, false, false, 1109, 3, 9501, 1, 0, EffectLayer.Waist, 0x100 ); //Launches a rendered scythe
						
						targetMobile.FixedParticles( 0x3779, 1, 30, 9964, 1109, 3, EffectLayer.Waist ); //Small sparklies on the target
						
						targetMobile.Kill();
						
						Head head = new Head( String.Format( "the head of {0}", targetMobile.Name ) );
						from.AddToBackpack( head );
						
						from.BoltEffect( 1 );
						
						this.Delete();
					}
					else
					{
						from.PublicOverheadMessage( MessageType.Emote, from.EmoteHue, false, "*the voice of Tjnar rings out across the region:*", false );
						from.PublicOverheadMessage( MessageType.Yell, from.SpeechHue, false, "\"You fool! That mere mortal is not prepared to die! Crush the body, and the mind shall be yours!\"", false );
						
						from.SendMessage( "Your target must have less than 10% of his health in order for this spell to work." );
					}
				}
				else
				{
					from.SendMessage( "This spell will only work on humans." );
				}
			}

			from.Frozen = false;
		}
Пример #16
0
		public void DoDamage( Mobile to )
		{
			switch ( Utility.Random( 4 ) )
			{
				case 0:
				{
					Effects.SendLocationEffect( to, to.Map, 0x113A, 20, 10 );
					to.PlaySound( 0x231 );
					to.LocalOverheadMessage( MessageType.Regular, 0x44, 1010523 ); // A toxic vapor envelops thee.

					to.ApplyPoison( to, Poison.Regular );

					break;
				}
				case 1:
				{
					Effects.SendLocationEffect( to, to.Map, 0x3709, 30 );
					to.PlaySound( 0x54 );
					to.LocalOverheadMessage( MessageType.Regular, 0xEE, 1010524 ); // Searing heat scorches thy skin.

					AOS.Damage( to, to, Utility.RandomMinMax( 10, 40 ), 0, 100, 0, 0, 0 );

					break;
				}
				case 2:
				{
					to.PlaySound( 0x223 );
					to.LocalOverheadMessage( MessageType.Regular, 0x62, 1010525 ); // Pain lances through thee from a sharp metal blade.

					AOS.Damage( to, to, Utility.RandomMinMax( 10, 40 ), 100, 0, 0, 0, 0 );

					break;
				}
				default:
				{
					to.BoltEffect( 0 );
					to.LocalOverheadMessage( MessageType.Regular, 0xDA, 1010526 ); // Lightning arcs through thy body.

					AOS.Damage( to, to, Utility.RandomMinMax( 10, 40 ), 0, 0, 0, 0, 100 );

					break;
				}
			}
		}
Пример #17
0
        public void DoDamage( Mobile to )
        {
            to.Send( new UnicodeMessage( Serial, ItemID, MessageType.Regular, 0x3B2, 3, "", "", "The generator shoots an arc of electricity at you!" ) );
            to.BoltEffect( 0 );
            to.LocalOverheadMessage( MessageType.Regular, 0xC9, true, "* Your body convulses from electric shock *" );
            to.NonlocalOverheadMessage( MessageType.Regular, 0xC9, true, string.Format( "* {0} spasms from electric shock *", to.Name ) );

            AOS.Damage( to, to, 60, 0, 0, 0, 0, 100, 0, 0, 0 );

            if ( !to.Alive )
                return;

            if ( m_DamageTable[to] == null )
            {
                to.Frozen = true;

                DamageTimer timer = new DamageTimer( this, to );
                m_DamageTable[to] = timer;

                timer.Start();
            }
        }
Пример #18
0
 public static void DoLightningEffect( Mobile attacker, Mobile defender, int min, int max )
 {
     defender.PlaySound( 1471 );
     defender.BoltEffect( 1153 );
     attacker.DoHarmful( defender );
     AOS.Damage( defender, attacker, Utility.RandomMinMax( min, max ), 0, 0, 0, 0, 100 );
 }