#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.
This commit is contained in:
parent
b51c58f514
commit
3045c83799
3512 changed files with 627673 additions and 0 deletions
296
Scripts/Engines/ConPVP/ArenaGump.cs
Normal file
296
Scripts/Engines/ConPVP/ArenaGump.cs
Normal file
|
|
@ -0,0 +1,296 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.ConPVP
|
||||
{
|
||||
public class ArenasMoongate : Item
|
||||
{
|
||||
public override string DefaultName
|
||||
{
|
||||
get { return "arena moongate"; }
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ArenasMoongate() : base( 0x1FD4 )
|
||||
{
|
||||
Movable = false;
|
||||
Light = LightType.Circle300;
|
||||
}
|
||||
|
||||
public ArenasMoongate( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
|
||||
writer.Write( (int) 0 );
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
|
||||
int version = reader.ReadInt();
|
||||
Light = LightType.Circle300;
|
||||
}
|
||||
|
||||
public bool UseGate( Mobile from )
|
||||
{
|
||||
if ( DuelContext.CheckCombat( from ) )
|
||||
{
|
||||
from.SendMessage( 0x22, "You have recently been in combat with another player and cannot use this moongate." );
|
||||
return false;
|
||||
}
|
||||
else if ( from.Spell != null )
|
||||
{
|
||||
from.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
from.CloseGump( typeof( ArenaGump ) );
|
||||
from.SendGump( new ArenaGump( from, this ) );
|
||||
|
||||
if ( !from.Hidden || from.AccessLevel == AccessLevel.Player )
|
||||
Effects.PlaySound( from.Location, from.Map, 0x20E );
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( from.InRange( GetWorldLocation(), 1 ) )
|
||||
UseGate( from );
|
||||
else
|
||||
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that
|
||||
}
|
||||
|
||||
public override bool OnMoveOver( Mobile m )
|
||||
{
|
||||
return ( !m.Player || UseGate( m ) );
|
||||
}
|
||||
}
|
||||
|
||||
public class ArenaGump : Gump
|
||||
{
|
||||
private Mobile m_From;
|
||||
private ArenasMoongate m_Gate;
|
||||
private List<Arena> m_Arenas;
|
||||
|
||||
private void Append( StringBuilder sb, LadderEntry le )
|
||||
{
|
||||
if ( le == null )
|
||||
return;
|
||||
|
||||
if ( sb.Length > 0 )
|
||||
sb.Append( ", " );
|
||||
|
||||
sb.Append( le.Mobile.Name );
|
||||
}
|
||||
|
||||
public override void OnResponse( NetState sender, RelayInfo info )
|
||||
{
|
||||
if ( info.ButtonID != 1 )
|
||||
return;
|
||||
|
||||
int[] switches = info.Switches;
|
||||
|
||||
if ( switches.Length == 0 )
|
||||
return;
|
||||
|
||||
int opt = switches[0];
|
||||
|
||||
if ( opt < 0 || opt >= m_Arenas.Count )
|
||||
return;
|
||||
|
||||
Arena arena = m_Arenas[opt];
|
||||
|
||||
if ( !m_From.InRange( m_Gate.GetWorldLocation(), 1 ) || m_From.Map != m_Gate.Map )
|
||||
{
|
||||
m_From.SendLocalizedMessage( 1019002 ); // You are too far away to use the gate.
|
||||
}
|
||||
else if ( DuelContext.CheckCombat( m_From ) )
|
||||
{
|
||||
m_From.SendMessage( 0x22, "You have recently been in combat with another player and cannot use this moongate." );
|
||||
}
|
||||
else if ( m_From.Spell != null )
|
||||
{
|
||||
m_From.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
|
||||
}
|
||||
else if ( m_From.Map == arena.Facet && arena.Zone.Contains( m_From ) )
|
||||
{
|
||||
m_From.SendLocalizedMessage( 1019003 ); // You are already there.
|
||||
}
|
||||
else
|
||||
{
|
||||
BaseCreature.TeleportPets( m_From, arena.GateIn, arena.Facet );
|
||||
|
||||
m_From.Combatant = null;
|
||||
m_From.Warmode = false;
|
||||
m_From.Hidden = true;
|
||||
|
||||
m_From.MoveToWorld( arena.GateIn, arena.Facet );
|
||||
|
||||
Effects.PlaySound( arena.GateIn, arena.Facet, 0x1FE );
|
||||
}
|
||||
}
|
||||
|
||||
public ArenaGump( Mobile from, ArenasMoongate gate ) : base( 50, 50 )
|
||||
{
|
||||
m_From = from;
|
||||
m_Gate = gate;
|
||||
m_Arenas = Arena.Arenas;
|
||||
|
||||
AddPage( 0 );
|
||||
|
||||
int height = 12 + 20 + (m_Arenas.Count * 31) + 24 + 12;
|
||||
|
||||
AddBackground( 0, 0, 499+40, height, 0x2436 );
|
||||
|
||||
List<Arena> list = m_Arenas;
|
||||
|
||||
for ( int i = 1; i < list.Count; i += 2 )
|
||||
AddImageTiled( 12, 32 + (i * 31), 475+40, 30, 0x2430 );
|
||||
|
||||
AddAlphaRegion( 10, 10, 479+40, height - 20 );
|
||||
|
||||
AddColumnHeader( 35, null );
|
||||
AddColumnHeader( 115, "Arena" );
|
||||
AddColumnHeader( 325, "Participants" );
|
||||
AddColumnHeader( 40, "Obs" );
|
||||
|
||||
AddButton( 499+40 - 12 - 63 - 4 - 63, height - 12 - 24, 247, 248, 1, GumpButtonType.Reply, 0 );
|
||||
AddButton( 499+40 - 12 - 63, height - 12 - 24, 241, 242, 2, GumpButtonType.Reply, 0 );
|
||||
|
||||
for ( int i = 0; i < list.Count; ++i )
|
||||
{
|
||||
Arena ar = list[i];
|
||||
|
||||
string name = ar.Name;
|
||||
|
||||
if ( name == null )
|
||||
name = "(no name)";
|
||||
|
||||
int x = 12;
|
||||
int y = 32 + (i * 31);
|
||||
|
||||
int color = ( ar.Players.Count > 0 ? 0xCCFFCC : 0xCCCCCC );
|
||||
|
||||
AddRadio( x + 3, y + 1, 9727, 9730, false, i );
|
||||
x += 35;
|
||||
|
||||
AddBorderedText( x + 5, y + 5, 115 - 5, name, color, 0 );
|
||||
x += 115;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if ( ar.Players.Count > 0 )
|
||||
{
|
||||
Ladder ladder = Ladder.Instance;
|
||||
|
||||
if ( ladder == null )
|
||||
continue;
|
||||
|
||||
LadderEntry p1 = null, p2 = null, p3 = null, p4 = null;
|
||||
|
||||
for ( int j = 0; j < ar.Players.Count; ++j )
|
||||
{
|
||||
Mobile mob = (Mobile)ar.Players[j];
|
||||
LadderEntry c = ladder.Find( mob );
|
||||
|
||||
if ( p1 == null || c.Index < p1.Index )
|
||||
{
|
||||
p4 = p3;
|
||||
p3 = p2;
|
||||
p2 = p1;
|
||||
p1 = c;
|
||||
}
|
||||
else if ( p2 == null || c.Index < p2.Index )
|
||||
{
|
||||
p4 = p3;
|
||||
p3 = p2;
|
||||
p2 = c;
|
||||
}
|
||||
else if ( p3 == null || c.Index < p3.Index )
|
||||
{
|
||||
p4 = p3;
|
||||
p3 = c;
|
||||
}
|
||||
else if ( p4 == null || c.Index < p4.Index )
|
||||
{
|
||||
p4 = c;
|
||||
}
|
||||
}
|
||||
|
||||
Append( sb, p1 );
|
||||
Append( sb, p2 );
|
||||
Append( sb, p3 );
|
||||
Append( sb, p4 );
|
||||
|
||||
if ( ar.Players.Count > 4 )
|
||||
sb.Append( ", ..." );
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append( "Empty" );
|
||||
}
|
||||
|
||||
AddBorderedText( x + 5, y + 5, 325 - 5, sb.ToString(), color, 0 );
|
||||
x += 325;
|
||||
|
||||
AddBorderedText( x, y + 5, 40, Center( ar.Spectators.ToString() ), color, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
public string Center( string text )
|
||||
{
|
||||
return String.Format( "<CENTER>{0}</CENTER>", text );
|
||||
}
|
||||
|
||||
public string Color( string text, int color )
|
||||
{
|
||||
return String.Format( "<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", color, text );
|
||||
}
|
||||
|
||||
private void AddBorderedText( int x, int y, int width, string text, int color, int borderColor )
|
||||
{
|
||||
/*AddColoredText( x - 1, y, width, text, borderColor );
|
||||
AddColoredText( x + 1, y, width, text, borderColor );
|
||||
AddColoredText( x, y - 1, width, text, borderColor );
|
||||
AddColoredText( x, y + 1, width, text, borderColor );*/
|
||||
/*AddColoredText( x - 1, y - 1, width, text, borderColor );
|
||||
AddColoredText( x + 1, y + 1, width, text, borderColor );*/
|
||||
AddColoredText( x, y, width, text, color );
|
||||
}
|
||||
|
||||
private void AddColoredText( int x, int y, int width, string text, int color )
|
||||
{
|
||||
if ( color == 0 )
|
||||
AddHtml( x, y, width, 20, text, false, false );
|
||||
else
|
||||
AddHtml( x, y, width, 20, Color( text, color ), false, false );
|
||||
}
|
||||
|
||||
private int m_ColumnX = 12;
|
||||
|
||||
private void AddColumnHeader( int width, string name )
|
||||
{
|
||||
AddBackground( m_ColumnX, 12, width, 20, 0x242C );
|
||||
AddImageTiled( m_ColumnX + 2, 14, width - 4, 16, 0x2430 );
|
||||
|
||||
if ( name != null )
|
||||
AddBorderedText( m_ColumnX, 13, width, Center( name ), 0xFFFFFF, 0 );
|
||||
|
||||
m_ColumnX += width;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue