- extensive framework for dueling, tournaments, and events

- IP address command implementor
- miscellaneous minor fixes
This commit is contained in:
mark 2012-04-22 05:37:16 +00:00
parent c52504151b
commit 599b2af6d5
82 changed files with 11920 additions and 63 deletions

View file

@ -363,6 +363,33 @@ namespace Server.Spells
if( to.Hidden && to.AccessLevel > from.AccessLevel )
return false;
#region Dueling
PlayerMobile pmFrom = from as PlayerMobile;
PlayerMobile pmTarg = to as PlayerMobile;
if ( pmFrom == null && from is BaseCreature )
{
BaseCreature bcFrom = (BaseCreature) from;
if ( bcFrom.Summoned )
pmFrom = bcFrom.SummonMaster as PlayerMobile;
}
if ( pmTarg == null && to is BaseCreature )
{
BaseCreature bcTarg = (BaseCreature) to;
if ( bcTarg.Summoned )
pmTarg = bcTarg.SummonMaster as PlayerMobile;
}
if ( pmFrom != null && pmTarg != null )
{
if ( pmFrom.DuelContext != null && pmFrom.DuelContext == pmTarg.DuelContext && pmFrom.DuelContext.Started && pmFrom.DuelPlayer != null && pmTarg.DuelPlayer != null )
return ( pmFrom.DuelPlayer.Participant != pmTarg.DuelPlayer.Participant );
}
#endregion
Guild fromGuild = GetGuildFor( from );
Guild toGuild = GetGuildFor( to );
@ -550,6 +577,7 @@ namespace Server.Spells
new TravelValidator( IsCrystalCave ),
new TravelValidator( IsDoomGauntlet ),
new TravelValidator( IsDoomFerry ),
new TravelValidator( IsSafeZone ),
new TravelValidator( IsFactionStronghold ),
new TravelValidator( IsChampionSpawn ),
new TravelValidator( IsTokunoDungeon ),
@ -561,14 +589,14 @@ namespace Server.Spells
private static bool[,] m_Rules = new bool[,]
{
/*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom), Heartwood, MLDungeons */
/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false, false, false },
/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, false, true },
/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true, false, false },
/*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), SafeZone, Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom), Heartwood, MLDungeons */
/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, true, false, true, false, false, false, false },
/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Tele From */ { true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, true },
/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, false, true, true, true, true, false, false },
};
public static void SendInvalidMessage( Mobile caster, TravelCheckType type )
@ -706,6 +734,26 @@ namespace Server.Spells
|| ( x >= 1188 && y >= 509 && x < 1201 && y < 513 );
}
public static bool IsSafeZone( Map map, Point3D loc )
{
#region Duels
if ( Region.Find( loc, map ).IsPartOf( typeof( Engines.ConPVP.SafeZone ) ) )
{
if ( m_TravelType == TravelCheckType.TeleportTo || m_TravelType == TravelCheckType.TeleportFrom )
{
PlayerMobile pm = m_TravelCaster as PlayerMobile;
if ( pm != null && pm.DuelPlayer != null && !pm.DuelPlayer.Eliminated )
return true;
}
return true;
}
#endregion
return false;
}
public static bool IsFactionStronghold( Map map, Point3D loc )
{
/*// Teleporting is allowed, but only for faction members
@ -821,7 +869,19 @@ namespace Server.Spells
if( map == null )
return false;
GuardedRegion reg = (GuardedRegion)Region.Find( loc, map ).GetRegion( typeof( GuardedRegion ) );
#region Dueling
Engines.ConPVP.SafeZone sz = (Engines.ConPVP.SafeZone) Region.Find( loc, map ).GetRegion( typeof( Engines.ConPVP.SafeZone ) );
if ( sz != null )
{
PlayerMobile pm = (PlayerMobile) caster;
if ( pm == null || pm.DuelContext == null || !pm.DuelContext.Started || pm.DuelPlayer == null || pm.DuelPlayer.Eliminated )
return true;
}
#endregion
GuardedRegion reg = (GuardedRegion) Region.Find( loc, map ).GetRegion( typeof( GuardedRegion ) );
return (reg != null && !reg.IsDisabled());
}