- Enlarged the region bounds for the Painted Caves, Bedlam and the Citadel.
- Corrected the RequiredFixedPoint parsing in the decoration scripts for SkillTeleporters. - Added a Z limit for spawning ore elementals on the map's Z level when mining. - Movement will now also ignore movable surfaces, as well as movable impassables, when ignoreMovableImpassables is set. - Some Teleporter refactoring. - Added ConditionTeleporter. - Orc brutes will now only drop large ore piles. - Added TileFlag corrections for a few walls that should block line of sight.
This commit is contained in:
parent
9d7569e225
commit
39b8686a94
8 changed files with 268 additions and 53 deletions
|
|
@ -1,6 +1,8 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Server;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Spells;
|
||||
|
||||
|
|
@ -150,6 +152,26 @@ namespace Server.Items
|
|||
}
|
||||
}
|
||||
|
||||
public virtual bool CanTeleport( Mobile m )
|
||||
{
|
||||
if ( !m_Creatures && !m.Player )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if ( m_CriminalCheck && m.Criminal )
|
||||
{
|
||||
m.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
|
||||
return false;
|
||||
}
|
||||
else if ( m_CombatCheck && SpellHelper.CheckCombat( m ) )
|
||||
{
|
||||
m.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual void StartTeleport( Mobile m )
|
||||
{
|
||||
if ( m_Delay == TimeSpan.Zero )
|
||||
|
|
@ -188,23 +210,8 @@ namespace Server.Items
|
|||
|
||||
public override bool OnMoveOver( Mobile m )
|
||||
{
|
||||
if ( m_Active )
|
||||
if ( m_Active && CanTeleport( m ) )
|
||||
{
|
||||
if ( !m_Creatures && !m.Player )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if ( m_CriminalCheck && m.Criminal )
|
||||
{
|
||||
m.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
|
||||
return true;
|
||||
}
|
||||
else if ( m_CombatCheck && SpellHelper.CheckCombat( m ) )
|
||||
{
|
||||
m.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
|
||||
return true;
|
||||
}
|
||||
|
||||
StartTeleport( m );
|
||||
return false;
|
||||
}
|
||||
|
|
@ -322,31 +329,25 @@ namespace Server.Items
|
|||
((Mobile)state).EndAction( this );
|
||||
}
|
||||
|
||||
public override bool OnMoveOver( Mobile m )
|
||||
public override bool CanTeleport( Mobile m )
|
||||
{
|
||||
if ( Active )
|
||||
if ( !base.CanTeleport( m ) )
|
||||
return false;
|
||||
|
||||
Skill sk = m.Skills[m_Skill];
|
||||
|
||||
if ( sk == null || sk.Base < m_Required )
|
||||
{
|
||||
if ( !Creatures && !m.Player )
|
||||
return true;
|
||||
|
||||
Skill sk = m.Skills[m_Skill];
|
||||
|
||||
if ( sk == null || sk.Base < m_Required )
|
||||
if ( m.BeginAction( this ) )
|
||||
{
|
||||
if ( m.BeginAction( this ) )
|
||||
{
|
||||
if ( m_MessageString != null )
|
||||
m.Send( new UnicodeMessage( Serial, ItemID, MessageType.Regular, 0x3B2, 3, "ENU", null, m_MessageString ) );
|
||||
else if ( m_MessageNumber != 0 )
|
||||
m.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, m_MessageNumber, null, "" ) );
|
||||
if ( m_MessageString != null )
|
||||
m.Send( new UnicodeMessage( Serial, ItemID, MessageType.Regular, 0x3B2, 3, "ENU", null, m_MessageString ) );
|
||||
else if ( m_MessageNumber != 0 )
|
||||
m.Send( new MessageLocalized( Serial, ItemID, MessageType.Regular, 0x3B2, 3, m_MessageNumber, null, "" ) );
|
||||
|
||||
Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerStateCallback( EndMessageLock ), m );
|
||||
}
|
||||
|
||||
return false;
|
||||
Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerStateCallback( EndMessageLock ), m );
|
||||
}
|
||||
|
||||
StartTeleport( m );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -450,9 +451,6 @@ namespace Server.Items
|
|||
{
|
||||
Mobile m = e.Mobile;
|
||||
|
||||
if ( !Creatures && !m.Player )
|
||||
return;
|
||||
|
||||
if ( !m.InRange( GetWorldLocation(), m_Range ) )
|
||||
return;
|
||||
|
||||
|
|
@ -463,7 +461,7 @@ namespace Server.Items
|
|||
else if ( m_Substring != null && e.Speech.ToLower().IndexOf( m_Substring.ToLower() ) >= 0 )
|
||||
isMatch = true;
|
||||
|
||||
if ( !isMatch )
|
||||
if ( !isMatch || !CanTeleport( m ) )
|
||||
return;
|
||||
|
||||
e.Handled = true;
|
||||
|
|
@ -789,8 +787,13 @@ namespace Server.Items
|
|||
|
||||
public override bool OnMoveOver( Mobile m )
|
||||
{
|
||||
if ( Active && ( m.Player || Creatures ) )
|
||||
if ( Active )
|
||||
{
|
||||
if ( !CanTeleport( m ) )
|
||||
return false;
|
||||
|
||||
StartTimer( m );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -894,4 +897,198 @@ namespace Server.Items
|
|||
m_Teleporter = reader.ReadItem<TimeoutTeleporter>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ConditionTeleporter : Teleporter
|
||||
{
|
||||
[Flags]
|
||||
protected enum ConditionFlag
|
||||
{
|
||||
None = 0x00,
|
||||
DenyMounted = 0x01,
|
||||
DenyFollowers = 0x02,
|
||||
DenyPackContents = 0x04,
|
||||
DenyHolding = 0x08,
|
||||
DenyEquipment = 0x10,
|
||||
DenyTransformed = 0x20
|
||||
}
|
||||
|
||||
private ConditionFlag m_Flags;
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool DenyMounted
|
||||
{
|
||||
get{ return GetFlag( ConditionFlag.DenyMounted ); }
|
||||
set{ SetFlag( ConditionFlag.DenyMounted, value ); InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool DenyFollowers
|
||||
{
|
||||
get{ return GetFlag( ConditionFlag.DenyFollowers ); }
|
||||
set{ SetFlag( ConditionFlag.DenyFollowers, value ); InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool DenyPackContents
|
||||
{
|
||||
get{ return GetFlag( ConditionFlag.DenyPackContents ); }
|
||||
set{ SetFlag( ConditionFlag.DenyPackContents, value ); InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool DenyHolding
|
||||
{
|
||||
get{ return GetFlag( ConditionFlag.DenyHolding ); }
|
||||
set{ SetFlag( ConditionFlag.DenyHolding, value ); InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool DenyEquipment
|
||||
{
|
||||
get{ return GetFlag( ConditionFlag.DenyEquipment ); }
|
||||
set{ SetFlag( ConditionFlag.DenyEquipment, value ); InvalidateProperties(); }
|
||||
}
|
||||
|
||||
[CommandProperty( AccessLevel.GameMaster )]
|
||||
public bool DenyTransformed
|
||||
{
|
||||
get{ return GetFlag( ConditionFlag.DenyTransformed ); }
|
||||
set{ SetFlag( ConditionFlag.DenyTransformed, value ); InvalidateProperties(); }
|
||||
}
|
||||
|
||||
public override bool CanTeleport( Mobile m )
|
||||
{
|
||||
if ( !base.CanTeleport( m ) )
|
||||
return false;
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyMounted ) && m.Mounted )
|
||||
{
|
||||
m.SendLocalizedMessage( 1077252 ); // You must dismount before proceeding.
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyFollowers ) && ( m.Followers != 0 || ( m is PlayerMobile && ( (PlayerMobile) m ).AutoStabled.Count != 0 ) ) )
|
||||
{
|
||||
m.SendLocalizedMessage( 1077250 ); // No pets permitted beyond this point.
|
||||
return false;
|
||||
}
|
||||
|
||||
Container pack;
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyPackContents ) && ( pack = m.Backpack ) != null && pack.TotalItems != 0 )
|
||||
{
|
||||
m.SendMessage( "You must empty your backpack before proceeding." );
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyHolding ) && m.Holding != null )
|
||||
{
|
||||
m.SendMessage( "You must let go of what you are holding before proceeding." );
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyEquipment ) )
|
||||
{
|
||||
foreach ( Item item in m.Items )
|
||||
{
|
||||
switch ( item.Layer )
|
||||
{
|
||||
case Layer.Hair:
|
||||
case Layer.FacialHair:
|
||||
case Layer.Backpack:
|
||||
case Layer.Mount:
|
||||
case Layer.Bank:
|
||||
{
|
||||
continue; // ignore
|
||||
}
|
||||
default:
|
||||
{
|
||||
m.SendMessage( "You must remove all of your equipment before proceeding." );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyTransformed ) && m.IsBodyMod )
|
||||
{
|
||||
m.SendMessage( "You cannot go there in this form." );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ConditionTeleporter()
|
||||
{
|
||||
}
|
||||
|
||||
public override void GetProperties( ObjectPropertyList list )
|
||||
{
|
||||
base.GetProperties( list );
|
||||
|
||||
StringBuilder props = new StringBuilder();
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyMounted ) )
|
||||
props.Append( "<BR>Deny Mounted" );
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyFollowers ) )
|
||||
props.Append( "<BR>Deny Followers" );
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyPackContents ) )
|
||||
props.Append( "<BR>Deny Pack Contents" );
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyHolding ) )
|
||||
props.Append( "<BR>Deny Holding" );
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyEquipment ) )
|
||||
props.Append( "<BR>Deny Equipment" );
|
||||
|
||||
if ( GetFlag( ConditionFlag.DenyTransformed ) )
|
||||
props.Append( "<BR>Deny Transformed" );
|
||||
|
||||
if ( props.Length != 0 )
|
||||
{
|
||||
props.Remove( 0, 4 );
|
||||
list.Add( props.ToString() );
|
||||
}
|
||||
}
|
||||
|
||||
public ConditionTeleporter( Serial serial )
|
||||
: base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 ); // version
|
||||
|
||||
writer.Write( (int) m_Flags );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
m_Flags = (ConditionFlag) reader.ReadInt();
|
||||
}
|
||||
|
||||
protected bool GetFlag( ConditionFlag flag )
|
||||
{
|
||||
return ( ( m_Flags & flag ) != 0 );
|
||||
}
|
||||
|
||||
protected void SetFlag( ConditionFlag flag, bool value )
|
||||
{
|
||||
if ( value )
|
||||
m_Flags |= flag;
|
||||
else
|
||||
m_Flags &= ~flag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue