All pastes #70793 Raw Edit

Miscellany

public text v1 · immutable
#70793 ·published 2006-06-24 20:52 UTC
rendered paste body
using System;
using System.IO;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.Commands;
using Server.Network;
using Server.Items;
using Server.Spells;
using Server.Mobiles;
using Server.Gumps;
using Server.Menus.Questions;
using Server.Engines.Event;
using Server.Spells.Eighth;
using Server.Spells.Sixth;
using Server.Spells.Fourth;
using Server.Spells.Seventh;
using Server.Spells.Third;

namespace Server.Regions
{
	public class PvpSpectatorRegion : BaseRegion
	{
		PvpEvent m_Event;

		public PvpSpectatorRegion( PvpEvent e, Map map, params Rectangle3D[] area ) : base( e.Name + " spectators", map, DefaultPriority, area )
		{
			//LoadFromXml = false;
			//Priority = Region.HighestPriority;
			//Coords = new ArrayList();
			//Coords.Add(coords);
			
			m_Event = e;

			Region.AddRegion(this);
		}

		public void Clean()
		{
			m_Event = null;
			Region.RemoveRegion(this);
		}

		public override bool AllowBeneficial( Mobile from, Mobile target ){return from == target;}
		public override bool AllowHarmful( Mobile from, Mobile target ){return false;}
		public override bool AllowHousing( Mobile from, Point3D p ){return false;}
		public override bool AllowSpawn(){return true;}
		public override bool CanUseStuckMenu( Mobile m ){return false;}

		public override bool OnDamage( Mobile m, ref int Damage )
		{
			m.SendMessage( "You cannot be damaged here." );
			return false;
		}

		public override bool OnBeginSpellCast( Mobile from, ISpell s )
		{
			if ( from.AccessLevel == AccessLevel.Player )
			{
				Spell spell = s as Spell;

				if ( ((Spell)s).Info.Name == "Ethereal Mount" && !m_Event.Requirements.AllowMounts )
				{
					from.SendMessage( "You cannot mount your ethereal here." );
					return false; 
				}
				else
				{
					from.SendMessage( "You cannot cast spells in the spectator area.");
					return false;
				}
			}

			return true;
		}

		public override bool OnHeal( Mobile m, ref int Heal )
		{
			return true; //Users can always heal in the spectator area
		}

		public override bool OnSkillUse( Mobile m, int skill )
		{
			bool restricted = false;

			switch(skill)
			{
				case (int)SkillName.Peacemaking:
				case (int)SkillName.Hiding:
				case (int)SkillName.Stealing:
				case (int)SkillName.Snooping:
				case (int)SkillName.Musicianship:
					restricted = true;
					break;
				case (int)SkillName.Healing:
					restricted = false; //Users can heal in spectator area
					break;
			}

			if ( restricted && m.AccessLevel == AccessLevel.Player )
			{
				m.SendMessage( "You cannot use that skill here." ); 
				return false;
			}

			return base.OnSkillUse( m, skill );
		}

		public override void OnExit( Mobile m )
		{
			base.OnExit( m );
		}

		public override void OnEnter( Mobile m )
		{
			base.OnEnter( m );
		}


		
		public override bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
		{

			return true;
		}

		public override TimeSpan GetLogoutDelay( Mobile m )
		{
			return TimeSpan.Zero;
		}


		
		public override bool OnDoubleClick( Mobile m, object o )
		{
			
			if( o is Corpse )
			{
				Corpse c = (Corpse)o;
				return c.Owner == m;
			}

			if(o is StrongBackpack && RealmPlayer.FindOwner((Item) o) != m && m.AccessLevel == AccessLevel.Player)
			{
				m.SendMessage("You cannot snoop animals here.");
				return false;
			}


			return base.OnDoubleClick( m, o );
		}

	}


	public class PvpFighterRegion : BaseRegion
	{
		PvpEvent m_Event;

		public PvpFighterRegion( PvpEvent e, Map map, Rectangle2D coords ) : base( "", e.Name + " fighters", map )
		{
			LoadFromXml = false;
			Priority = 0x96;
			Coords = new ArrayList();
			Coords.Add(coords);
			
			m_Event = e;

			Region.AddRegion(this);
		}

		public void Clean()
		{
			m_Event = null;
			Region.RemoveRegion(this);
		}

		public override bool AllowBeneficial( Mobile from, Mobile target )
		{
			return ((from == target) || m_Event.SameTeam(from, target));
		}

		public override bool AllowHarmful( Mobile from, Mobile target )
		{
			return !m_Event.SameTeam(from, target);
		}

		public override bool AllowHousing( Mobile from, Point3D p ){return false;}
		public override bool AllowSpawn(){return true;}
		public override bool CanUseStuckMenu( Mobile m ){return false;}

		public override bool OnDeath( Mobile m )
		{
			m_Event.MobileDied(m);
			return false;
		}

		public override bool OnDamage( Mobile m, ref int Damage )
		{
			return true;
		}

		public override bool OnBeginSpellCast( Mobile from, ISpell s )
		{
			if ( from.AccessLevel == AccessLevel.Player )
			{

				if(m_Event.Status != PvpEventStatus.MatchInProgress)
					return false;

				Spell spell = s as Spell;
				if ( spell is EnergyVortexSpell || spell is AirElementalSpell || spell is WaterElementalSpell || spell is FireElementalSpell || spell is EarthElementalSpell || spell is SummonDaemonSpell || spell is RecallSpell || spell is MarkSpell || spell is TeleportSpell || spell is InvisibilitySpell || spell is GateTravelSpell)
				{
					from.SendMessage( "You cannot cast that spell here." ); 
					return false;
				}

				if( m_Event.EventStyle == PvpEventStyle.Caveman || m_Event.EventStyle == PvpEventStyle.Wrestling )
				{
					from.SendMessage("You cannot cast spells in this style of PvP event.");
					return false;
				}

				if ( ((Spell)s).Info.Name == "Ethereal Mount" && !m_Event.Requirements.AllowMounts )
				{
					from.SendMessage( "You cannot mount your ethereal here." );
					return false; 
				}
			}

			foreach(Item i in new ArrayList(from.Items))
			{
				if(i is BaseWeapon && ((BaseWeapon)i).Attributes.SpellChanneling == 0 && from.Backpack != null && ((Spell)s).ClearHandsOnCast)
					from.Backpack.DropItem(i);
			}
			return true;
		}

		public override bool OnHeal( Mobile m, ref int Heal )
		{
			return m_Event.Status == PvpEventStatus.MatchInProgress;
		}

		public override bool OnSkillUse( Mobile m, int skill )
		{
			bool restricted = false;

			switch(skill)
			{
				case (int)SkillName.Peacemaking:
				case (int)SkillName.Hiding:
				case (int)SkillName.Stealing:
				case (int)SkillName.Snooping:
				case (int)SkillName.Musicianship:
					restricted = true;
					break;
				case (int)SkillName.Healing:
					restricted = (m_Event.Status != PvpEventStatus.MatchInProgress);
					break;
			}

			if ( restricted && m.AccessLevel == AccessLevel.Player )
			{
				m.SendMessage( "You cannot use that skill here." ); 
				return false;
			}

			return base.OnSkillUse( m, skill );
		}

		public override void OnExit( Mobile m )
		{
			base.OnExit( m );
		}

		public override void OnEnter( Mobile m )
		{
			base.OnEnter( m );
		}


		
		public override bool OnMoveInto( Mobile m, Direction d, Point3D newLocation, Point3D oldLocation )
		{
			if(m.AccessLevel == AccessLevel.Player)
			{
				if( !this.Contains( oldLocation ) && m_Event != null )
				{
					return(m_Event.CanMoveIntoArena(m));
				}
				/*else
				{
					if(m_Event.EventStyle == PvpEventStyle.MageDuel)
					{
						m.SendMessage("You cannot move in a pure mage duel.");
						return false;
					}
				}*/
			}

			return true;
		}

		public override TimeSpan GetLogoutDelay( Mobile m )
		{
			return TimeSpan.Zero;
		}


		
		public override bool OnDoubleClick( Mobile m, object o )
		{
			if( m_Event.Status != PvpEventStatus.MatchInProgress)
				return false;

			if( o is BasePotion && !m_Event.AllowPotions )
			{
				m.SendMessage( "You cannot drink potions here." );
				return false;
			}
			
			if( o is Corpse )
			{
				Corpse c = (Corpse)o;
				return c.Owner == m;
			}

			if(o is StrongBackpack && RealmPlayer.FindOwner((Item) o) != m && m.AccessLevel == AccessLevel.Player)
			{
				m.SendMessage("You cannot snoop animals here.");
				return false;
			}


			return base.OnDoubleClick( m, o );
		}
	}
}