Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
355
Scripts/SubSystem/ACC/Public Gates/Gumps/PGAddEditGump.cs
Normal file
355
Scripts/SubSystem/ACC/Public Gates/Gumps/PGAddEditGump.cs
Normal file
@@ -0,0 +1,355 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.ACC.PG
|
||||
{
|
||||
[Flags]
|
||||
public enum Conditions
|
||||
{
|
||||
None = 0x00000000,
|
||||
Adding = 0x00000001,
|
||||
Category = 0x00000002,
|
||||
}
|
||||
|
||||
public class PGAddEditGump : Gump
|
||||
{
|
||||
private Conditions m_Conditions;
|
||||
private int m_CurCat;
|
||||
private int m_CurLoc;
|
||||
private PGCategory m_Cat;
|
||||
private PGLocation m_Loc;
|
||||
private PublicGate m_Gate;
|
||||
|
||||
private bool GetFlag( Conditions flag ) { return( (m_Conditions & flag) != 0 ); }
|
||||
|
||||
public PGAddEditGump( Conditions conditions, int curC, int curL, PublicGate gate ) : base( 0, 0 )
|
||||
{
|
||||
if( !PGSystem.Running )
|
||||
return;
|
||||
|
||||
m_Conditions = conditions;
|
||||
m_CurCat = curC;
|
||||
m_CurLoc = curL;
|
||||
m_Gate = gate;
|
||||
|
||||
if( !GetFlag( Conditions.Category ) || (GetFlag( Conditions.Category ) && !GetFlag( Conditions.Adding )) )
|
||||
m_Cat = PGSystem.CategoryList[curC];
|
||||
if( m_Cat != null && (!GetFlag( Conditions.Category ) && !GetFlag( Conditions.Adding )) )
|
||||
m_Loc = m_Cat.Locations[curL];
|
||||
|
||||
|
||||
string Name = "";
|
||||
if( !GetFlag( Conditions.Adding ) )
|
||||
{
|
||||
if( GetFlag( Conditions.Category ) )
|
||||
Name = m_Cat.Name;
|
||||
else
|
||||
Name = m_Loc.Name;
|
||||
}
|
||||
|
||||
Point3D Loc = new Point3D( 0, 0, 0 );
|
||||
Map Map = Map.Trammel;
|
||||
bool Gen, Staff, Reds, Charge, Young;
|
||||
int Hue, Cost;
|
||||
Gen = Staff = Reds = Charge = Young = false;
|
||||
Hue = Cost = 0;
|
||||
|
||||
if( GetFlag( Conditions.Category ) && !GetFlag( Conditions.Adding ) )
|
||||
{
|
||||
Gen = m_Cat.GetFlag( EntryFlag.Generate );
|
||||
Staff = m_Cat.GetFlag( EntryFlag.StaffOnly );
|
||||
Reds = m_Cat.GetFlag( EntryFlag.Reds );
|
||||
Charge = m_Cat.GetFlag( EntryFlag.Charge );
|
||||
Young = m_Cat.GetFlag( EntryFlag.Young );
|
||||
Cost = m_Cat.Cost;
|
||||
}
|
||||
|
||||
if( !GetFlag( Conditions.Category ) && !GetFlag( Conditions.Adding ) )
|
||||
{
|
||||
Loc = m_Loc.Location;
|
||||
Map = m_Loc.Map;
|
||||
Gen = m_Loc.GetFlag( EntryFlag.Generate );
|
||||
Staff = m_Loc.GetFlag( EntryFlag.StaffOnly );
|
||||
Reds = m_Loc.GetFlag( EntryFlag.Reds );
|
||||
Charge = m_Loc.GetFlag( EntryFlag.Charge );
|
||||
Young = m_Loc.GetFlag( EntryFlag.Young );
|
||||
Hue = m_Loc.Hue;
|
||||
Cost = m_Loc.Cost;
|
||||
}
|
||||
|
||||
Closable = true;
|
||||
Disposable = true;
|
||||
Dragable = true;
|
||||
Resizable = false;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
AddBackground( 530, 100, 230, 410, 2600 );
|
||||
AddLabel( 602, 120, 0, string.Format("{0} {1}", (GetFlag(Conditions.Adding) ? "Add" : "Edit"), (GetFlag(Conditions.Category) ? "Category" : "Location")) );
|
||||
|
||||
AddLabel( 625, 145, 0, "Name :" );
|
||||
AddImage( 555, 170, 2446 );
|
||||
AddTextEntry( 565, 170, 160, 20, 0, 2, Name );
|
||||
|
||||
AddLabel( 715, 235, 0, ": C" );
|
||||
AddImage( 650, 235, 2443 );
|
||||
AddTextEntry( 655, 235, 55, 20, 0, 15, Cost.ToString() );
|
||||
|
||||
if( !GetFlag(Conditions.Category) )
|
||||
{
|
||||
|
||||
AddLabel( 560, 210, 0, "X :" );
|
||||
AddImage( 580, 210, 2443 );
|
||||
AddTextEntry( 585, 210, 55, 20, 0, 3, Loc.X.ToString() );
|
||||
|
||||
AddLabel( 560, 235, 0, "Y :" );
|
||||
AddImage( 580, 235, 2443 );
|
||||
AddTextEntry( 585, 235, 55, 20, 0, 4, Loc.Y.ToString() );
|
||||
|
||||
AddLabel( 560, 260, 0, "Z :" );
|
||||
AddImage( 580, 260, 2443 );
|
||||
AddTextEntry( 585, 260, 55, 20, 0, 5, Loc.Z.ToString() );
|
||||
|
||||
AddLabel( 715, 210, 0, ": H" );
|
||||
AddImage( 650, 210, 2443 );
|
||||
AddTextEntry( 655, 210, 55, 20, 0, 14, Hue.ToString() );
|
||||
|
||||
AddLabel( 585, 315, 0, "Trammel" );
|
||||
AddRadio( 555, 315, 208, 209, (Map == Map.Trammel ? true : false), 6 );
|
||||
|
||||
AddLabel( 585, 340, 0, "Felucca" );
|
||||
AddRadio( 555, 340, 208, 209, (Map == Map.Felucca ? true : false), 7 );
|
||||
|
||||
AddLabel( 685, 315, 0, "Malas" );
|
||||
AddRadio( 655, 315, 208, 209, (Map == Map.Malas ? true : false), 8 );
|
||||
|
||||
AddLabel( 685, 345, 0, "Ilshenar" );
|
||||
AddRadio( 655, 340, 208, 209, (Map == Map.Ilshenar ? true : false), 9 );
|
||||
|
||||
AddLabel( 585, 365, 0, "Tokuno" );
|
||||
AddRadio( 555, 370, 208, 209, (Map == Map.Tokuno ? true : false), 10 );
|
||||
|
||||
AddLabel( 685, 365, 0, "TerMur" );
|
||||
AddRadio( 655, 370, 208, 209, (Map == Map.TerMur ? true : false), 20 );
|
||||
}
|
||||
|
||||
|
||||
AddLabel( 585, 395, 0, "Generate?" );
|
||||
AddCheck( 555, 395, 210, 211, Gen, 11 );
|
||||
|
||||
AddLabel( 665, 395, 0, "Young?" );
|
||||
AddCheck( 715, 395, 210, 211, Young, 16 );
|
||||
|
||||
AddLabel( 585, 420, 0, "Reds?" );
|
||||
AddCheck( 555, 420, 210, 211, Reds, 13 );
|
||||
|
||||
AddLabel( 658, 420, 0, "Charge?" );
|
||||
AddCheck( 715, 420, 210, 211, Charge, 17 );
|
||||
|
||||
AddLabel( 585, 445, 0, "Staff Only?" );
|
||||
AddCheck( 555, 445, 210, 211, Staff, 12 );
|
||||
|
||||
AddButton( 700, 450, 1417, 1417, 1, GumpButtonType.Reply, 0 );
|
||||
AddLabel( 728, 481, 69, "Apply" );
|
||||
}
|
||||
|
||||
private EntryFlag Flags;
|
||||
private void SetFlag( EntryFlag flag, bool value )
|
||||
{
|
||||
if( value )
|
||||
Flags |= flag;
|
||||
else Flags &= ~flag;
|
||||
}
|
||||
|
||||
public override void OnResponse( NetState state, RelayInfo info )
|
||||
{
|
||||
if( state.Mobile.AccessLevel < PGSystem.PGAccessLevel )
|
||||
return;
|
||||
|
||||
Mobile from = state.Mobile;
|
||||
int BID = info.ButtonID;
|
||||
if( BID == 0 )
|
||||
return;
|
||||
|
||||
SetFlag( EntryFlag.Generate, info.IsSwitched( 11 ) );
|
||||
SetFlag( EntryFlag.StaffOnly, info.IsSwitched( 12 ) );
|
||||
SetFlag( EntryFlag.Reds, info.IsSwitched( 13 ) );
|
||||
SetFlag( EntryFlag.Young, info.IsSwitched( 16 ) );
|
||||
SetFlag( EntryFlag.Charge, info.IsSwitched( 17 ) );
|
||||
|
||||
Map Map = null;
|
||||
for( int i = 0; i < info.Switches.Length; i++ )
|
||||
{
|
||||
int m = info.Switches[i];
|
||||
switch( m )
|
||||
{
|
||||
case 6: Map = Map.Trammel; break;
|
||||
case 7: Map = Map.Felucca; break;
|
||||
case 8: Map = Map.Malas; break;
|
||||
case 9: Map = Map.Ilshenar; break;
|
||||
case 10: Map = Map.Tokuno; break;
|
||||
case 20: Map = Map.TerMur; break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TextRelay NR = info.GetTextEntry( 2 );
|
||||
TextRelay XR = info.GetTextEntry( 3 );
|
||||
TextRelay YR = info.GetTextEntry( 4 );
|
||||
TextRelay ZR = info.GetTextEntry( 5 );
|
||||
TextRelay HR = info.GetTextEntry( 14 );
|
||||
TextRelay CR = info.GetTextEntry( 15 );
|
||||
string NS = (NR == null ? null : NR.Text.Trim());
|
||||
string XS = (XR == null ? null : XR.Text.Trim());
|
||||
string YS = (YR == null ? null : YR.Text.Trim());
|
||||
string ZS = (ZR == null ? null : ZR.Text.Trim());
|
||||
string HS = (HR == null ? null : HR.Text.Trim());
|
||||
string CS = (CR == null ? null : CR.Text.Trim());
|
||||
|
||||
if( BID == 1 )
|
||||
{
|
||||
if( GetFlag( Conditions.Category ) )
|
||||
{
|
||||
if( GetFlag( Conditions.Adding ) )
|
||||
{
|
||||
if( NS == null || NS.Length == 0 || CS == null || CS.Length == 0 )
|
||||
{
|
||||
from.SendMessage( "Please enter a name and cost for this Category." );
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.SendGump( new PGAddEditGump( m_Conditions, m_CurCat, m_CurLoc, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
int c = 0;
|
||||
try
|
||||
{
|
||||
c = Int32.Parse( CS );
|
||||
PGSystem.CategoryList.Add( new PGCategory( NS, Flags, c ) );
|
||||
from.SendMessage( "Added Category." );
|
||||
}
|
||||
catch
|
||||
{
|
||||
from.SendMessage( "Bad cost value, defaulting to 0." );
|
||||
PGSystem.CategoryList.Add( new PGCategory( NS, Flags ) );
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if( NS == null || NS.Length == 0 )
|
||||
{
|
||||
from.SendMessage( "Removed the Category." );
|
||||
PGSystem.CategoryList.RemoveAt( m_CurCat );
|
||||
m_CurCat = 0;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
from.SendMessage( "Changed the Category." );
|
||||
PGSystem.CategoryList[m_CurCat].Name = NS;
|
||||
PGSystem.CategoryList[m_CurCat].Flags = Flags;
|
||||
if( CS == null || CS.Length == 0 )
|
||||
PGSystem.CategoryList[m_CurCat].Cost = 0;
|
||||
else
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
try
|
||||
{
|
||||
c = Int32.Parse( CS );
|
||||
PGSystem.CategoryList[m_CurCat].Cost = c;
|
||||
}
|
||||
catch
|
||||
{
|
||||
PGSystem.CategoryList[m_CurCat].Cost = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if( NS == null || NS.Length == 0 ||
|
||||
XS == null || XS.Length == 0 ||
|
||||
YS == null || YS.Length == 0 ||
|
||||
ZS == null || ZS.Length == 0 ||
|
||||
HS == null || HS.Length == 0 ||
|
||||
CS == null || CS.Length == 0 )
|
||||
{
|
||||
if( GetFlag( Conditions.Adding ) )
|
||||
{
|
||||
from.SendMessage( "Please fill in each field." );
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.SendGump( new PGAddEditGump( m_Conditions, m_CurCat, m_CurLoc, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendMessage( "Removed the Location." );
|
||||
PGSystem.CategoryList[m_CurCat].Locations.RemoveAt( m_CurLoc );
|
||||
}
|
||||
|
||||
else if( Map == null )
|
||||
{
|
||||
from.SendMessage( "Please select a Map." );
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.SendGump( new PGAddEditGump( m_Conditions, m_CurCat, m_CurLoc, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
int x, y, z, h, c = 0;
|
||||
Point3D Loc;
|
||||
int Hue;
|
||||
int Cost;
|
||||
try
|
||||
{
|
||||
x = Int32.Parse( XS );
|
||||
y = Int32.Parse( YS );
|
||||
z = Int32.Parse( ZS );
|
||||
h = Int32.Parse( HS );
|
||||
c = Int32.Parse( CS );
|
||||
Loc = new Point3D( x, y, z );
|
||||
Hue = h;
|
||||
Cost = c;
|
||||
}
|
||||
catch
|
||||
{
|
||||
from.SendMessage( "Please enter an integer in each of the info fields. (X, Y, Z, H, C)" );
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.SendGump( new PGAddEditGump( m_Conditions, m_CurCat, m_CurLoc, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
PGLocation PGL = new PGLocation( NS, Flags, Loc, Map, Hue, Cost );
|
||||
if( PGL == null )
|
||||
{
|
||||
from.SendMessage( "Bad Location information, can't add!" );
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.SendGump( new PGAddEditGump( m_Conditions, m_CurCat, m_CurLoc, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
if( GetFlag( Conditions.Adding ) )
|
||||
{
|
||||
from.SendMessage( "Added the Location." );
|
||||
PGSystem.CategoryList[m_CurCat].Locations.Add( PGL );
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendMessage( "Changed the Location." );
|
||||
PGSystem.CategoryList[m_CurCat].Locations[m_CurLoc] = PGL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
from.CloseGump( typeof( PGGump ) );
|
||||
from.SendGump( new PGGump( from, m_CurCat, m_Gate ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
411
Scripts/SubSystem/ACC/Public Gates/Gumps/PGGump.cs
Normal file
411
Scripts/SubSystem/ACC/Public Gates/Gumps/PGGump.cs
Normal file
@@ -0,0 +1,411 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.ACC.PG
|
||||
{
|
||||
public class PGGump : Gump
|
||||
{
|
||||
private Mobile m_From;
|
||||
private int m_Page;
|
||||
private PublicGate m_Gate;
|
||||
|
||||
private EntryFlag EFlags;
|
||||
private void SetFlag( EntryFlag flag, bool value )
|
||||
{
|
||||
if( value )
|
||||
EFlags |= flag;
|
||||
else EFlags &= ~flag;
|
||||
}
|
||||
|
||||
public PGGump( Mobile from, int Page, PublicGate gate ) : base( 0, 0 )
|
||||
{
|
||||
if( !PGSystem.Running )
|
||||
return;
|
||||
|
||||
if( PGSystem.CategoryList == null || PGSystem.CategoryList.Count == 0 )
|
||||
{
|
||||
SetFlag( EntryFlag.StaffOnly, true );
|
||||
SetFlag( EntryFlag.Generate, false );
|
||||
PGSystem.CategoryList = new List<PGCategory>();
|
||||
PGSystem.CategoryList.Add( new PGCategory( "Empty System", EFlags ) );
|
||||
}
|
||||
|
||||
m_From = from;
|
||||
m_Page = Page;
|
||||
m_Gate = gate;
|
||||
|
||||
Closable = true;
|
||||
Disposable = true;
|
||||
Dragable = true;
|
||||
Resizable = false;
|
||||
|
||||
AddPage(0);
|
||||
|
||||
#region Categories
|
||||
int Cats = CountCats();
|
||||
|
||||
int CStart = (250 - ((Cats / 2) * 25));
|
||||
if( CStart < 0 )
|
||||
CStart = 0;
|
||||
|
||||
AddBackground( 0, CStart, 230, 100+Cats*25, 2600 );
|
||||
AddHtml(0, CStart + 15, 230, 20, "<BASEFONT COLOR=#58D3F7 SIZE=8><CENTER>Traveler's Traverse</CENTER></BASEFONT>", false, false);
|
||||
|
||||
int CurC = 0;
|
||||
for( int i = 0; i < PGSystem.CategoryList.Count; i++ )
|
||||
{
|
||||
PGCategory PGC = PGSystem.CategoryList[i];
|
||||
if( PGC != null )
|
||||
{
|
||||
if( from.AccessLevel >= PGSystem.PGAccessLevel )
|
||||
{
|
||||
AddButton( 20, CStart+53+CurC*25, (Page == i ? 209 : 208), (Page == i ? 208 : 209), 100+i, GumpButtonType.Reply, 0);
|
||||
AddLabel( 50, CStart+53+CurC*25, (Page == i ? 69 : 0), PGC.Name );
|
||||
CurC++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if( PGC.GetFlag( EntryFlag.StaffOnly ) && from.AccessLevel == AccessLevel.Player )
|
||||
continue;
|
||||
if( !PGC.GetFlag( EntryFlag.StaffOnly ) )
|
||||
{
|
||||
if( PGC.GetFlag( EntryFlag.Young ) && !((PlayerMobile)from).Young )
|
||||
continue;
|
||||
if( !PGC.GetFlag( EntryFlag.Reds ) && from.Kills >= 5 )
|
||||
continue;
|
||||
}
|
||||
|
||||
AddButton( 20, CStart+53+CurC*25, (Page == i ? 209 : 208), (Page == i ? 208 : 209), 100+i, GumpButtonType.Reply, 0);
|
||||
AddLabel( 50, CStart+53+CurC*25, (Page == i ? 69 : 0), PGC.Name );
|
||||
CurC++;
|
||||
}
|
||||
}
|
||||
|
||||
if( from.AccessLevel >= PGSystem.PGAccessLevel )
|
||||
{
|
||||
AddLabel( 75, CStart+65+Cats*25, 0, "Add" );
|
||||
AddButton( 50, CStart+65+Cats*25, 208, 209, 2, GumpButtonType.Reply, 0 );
|
||||
AddLabel( 125, CStart+65+Cats*25, 0, "Edit" );
|
||||
AddButton( 160, CStart+65+Cats*25, 208, 209, 3, GumpButtonType.Reply, 0 );
|
||||
}
|
||||
#endregion //Categories
|
||||
|
||||
#region Locations
|
||||
int Locs = CountLocs();
|
||||
if( Locs == -1 )
|
||||
Locs = 0;
|
||||
|
||||
int LStart = (250 - ((Locs / 2) * 25));
|
||||
if( LStart < 20 )
|
||||
LStart = 20;
|
||||
|
||||
AddBackground( 230, LStart, 300, 100+Locs*25, 2600 );
|
||||
|
||||
int CurL = 0;
|
||||
PGCategory PGCL = PGSystem.CategoryList[m_Page];
|
||||
if( PGCL != null && PGCL.Locations != null )
|
||||
{
|
||||
for( int i = 0; i < PGCL.Locations.Count; i++ )
|
||||
{
|
||||
PGLocation PGL = PGCL.Locations[i];
|
||||
if( PGL != null )
|
||||
{
|
||||
if( from.AccessLevel >= PGSystem.PGAccessLevel )
|
||||
{
|
||||
AddRadio( 250, LStart+53+CurL*25, 208, 209, false, 200+i );
|
||||
AddLabel( 280, LStart+53+CurL*25, 0, PGL.Name );
|
||||
CurL++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if( PGL.GetFlag( EntryFlag.StaffOnly ) && from.AccessLevel == AccessLevel.Player )
|
||||
continue;
|
||||
if( !PGL.GetFlag( EntryFlag.StaffOnly ) )
|
||||
{
|
||||
if( PGL.GetFlag( EntryFlag.Young ) && !((PlayerMobile)from).Young )
|
||||
continue;
|
||||
if( !PGL.GetFlag( EntryFlag.Reds ) && from.Kills >= 5 )
|
||||
continue;
|
||||
}
|
||||
|
||||
AddRadio( 250, LStart+53+CurL*25, 208, 209, false, 200+i );
|
||||
AddLabel( 280, LStart+53+CurL*25, 0, PGL.Name );
|
||||
CurL++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AddButton( 465, LStart-20, 1417, 1417, 1, GumpButtonType.Reply, 0);
|
||||
AddHtml(485, LStart + 10, 40, 40, "<BODY><BASEFONT SIZE=7 COLOR=#2E64FE><CENTER><I><B>GO</B></I></CENTER></BASEFONT></BODY>", false, false);
|
||||
|
||||
if( from.AccessLevel >= PGSystem.PGAccessLevel )
|
||||
{
|
||||
AddLabel( 305, LStart+15, 0, "Add Current Gate" );
|
||||
AddButton( 280, LStart+15, 208, 209, 6, GumpButtonType.Reply, 0 );
|
||||
|
||||
AddLabel( 305, LStart+65+Locs*25, 0, "Add" );
|
||||
AddButton( 280, LStart+65+Locs*25, 208, 209, 4, GumpButtonType.Reply, 0 );
|
||||
|
||||
AddLabel( 430, LStart+65+Locs*25, 0, "Edit" );
|
||||
AddButton( 460, LStart+65+Locs*25, 208, 209, 5, GumpButtonType.Reply, 0);
|
||||
}
|
||||
#endregion //Locations
|
||||
}
|
||||
|
||||
private int CountCats()
|
||||
{
|
||||
int count = 0;
|
||||
foreach( PGCategory PGC in PGSystem.CategoryList )
|
||||
{
|
||||
if( (PGC.GetFlag( EntryFlag.StaffOnly ) && m_From.AccessLevel > AccessLevel.Player) ||
|
||||
(!PGC.GetFlag( EntryFlag.StaffOnly ) && ((!PGC.GetFlag( EntryFlag.Reds ) && m_From.Kills < 5) || PGC.GetFlag( EntryFlag.Reds ))) ||
|
||||
(m_From.AccessLevel > AccessLevel.Player) )
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private int CountLocs()
|
||||
{
|
||||
if( m_Page < 0 || m_Page >= PGSystem.CategoryList.Count )
|
||||
return -1;
|
||||
|
||||
int count = 0;
|
||||
PGCategory PGC = PGSystem.CategoryList[m_Page];
|
||||
if( PGC != null && PGC.Locations != null )
|
||||
{
|
||||
IEnumerator<PGLocation> PGL = PGC.Locations.GetEnumerator();
|
||||
while(PGL.MoveNext())
|
||||
{
|
||||
if( (PGL.Current.GetFlag( EntryFlag.StaffOnly ) && m_From.AccessLevel > AccessLevel.Player) ||
|
||||
(!PGL.Current.GetFlag(EntryFlag.StaffOnly) && ((!PGL.Current.GetFlag(EntryFlag.Reds) && m_From.Kills < 5) || PGL.Current.GetFlag(EntryFlag.Reds))) ||
|
||||
(m_From.AccessLevel > AccessLevel.Player) )
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private Conditions Flags;
|
||||
private void SetFlag( Conditions flag, bool value )
|
||||
{
|
||||
if( value )
|
||||
Flags |= flag;
|
||||
else Flags &= ~flag;
|
||||
}
|
||||
|
||||
public override void OnResponse( NetState state, RelayInfo info )
|
||||
{
|
||||
Mobile from = state.Mobile;
|
||||
int BID = info.ButtonID;
|
||||
int Loc = -1;
|
||||
|
||||
if( !PGSystem.Running )
|
||||
return;
|
||||
|
||||
if( m_From.Deleted || m_Gate.Deleted || m_From.Map == null )
|
||||
return;
|
||||
|
||||
if( info.Switches.Length > 0 )
|
||||
Loc = info.Switches[0];
|
||||
|
||||
Loc -= 200;
|
||||
|
||||
if( BID == 0 )
|
||||
{
|
||||
from.SendMessage( "You choose not to go anywhere." );
|
||||
return;
|
||||
}
|
||||
|
||||
if( BID == 1 )
|
||||
{
|
||||
if( Loc <= -1 )
|
||||
{
|
||||
from.SendMessage( "You must select a location!" );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
PGCategory PGC = PGSystem.CategoryList[m_Page];
|
||||
if( PGC == null )
|
||||
return;
|
||||
|
||||
PGLocation PGL = PGC.Locations[Loc];
|
||||
if( PGL == null )
|
||||
return;
|
||||
|
||||
if( !from.InRange( m_Gate.GetWorldLocation(), 1 ) || from.Map != m_Gate.Map )
|
||||
{
|
||||
from.SendLocalizedMessage( 1019002 ); // You are too far away to use the gate.
|
||||
}
|
||||
else if( Factions.Sigil.ExistsOn( from ) && PGL.Map != Factions.Faction.Facet )
|
||||
{
|
||||
from.SendLocalizedMessage( 1019004 ); // You are not allowed to travel there.
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
}
|
||||
else if( from.Criminal )
|
||||
{
|
||||
from.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
|
||||
}
|
||||
else if( Server.Spells.SpellHelper.CheckCombat( from ) )
|
||||
{
|
||||
from.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
|
||||
}
|
||||
else if( from.Spell != null )
|
||||
{
|
||||
from.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
|
||||
}
|
||||
else if( from.Map == PGL.Map && from.InRange( PGL.Location, 1 ) )
|
||||
{
|
||||
from.SendLocalizedMessage( 1019003 ); // You are already there.
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
}
|
||||
else if( PGL.GetFlag( EntryFlag.Young ) && !((PlayerMobile)from).Young && from.AccessLevel == AccessLevel.Player )
|
||||
{
|
||||
from.SendMessage( "You are too old to travel here." );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
}
|
||||
else if( !PGL.GetFlag( EntryFlag.Reds ) && from.Kills >= 5 && from.AccessLevel == AccessLevel.Player )
|
||||
{
|
||||
from.SendMessage( "You too many murders to travel here." );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
}
|
||||
else if( PGL.GetFlag( EntryFlag.StaffOnly ) && from.AccessLevel == AccessLevel.Player )
|
||||
{
|
||||
from.SendMessage( "You are not allowed to travel here." );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
bool charged = false;
|
||||
if( PGC.GetFlag( EntryFlag.Charge ) && PGC.Cost > 0 && from.AccessLevel == AccessLevel.Player )
|
||||
{
|
||||
Container pack = from.Backpack;
|
||||
if( pack == null )
|
||||
return;
|
||||
if( !pack.ConsumeTotal( typeof( Gold ), PGC.Cost ) )
|
||||
{
|
||||
from.SendMessage( "You require {0} gold to travel there.", PGC.Cost );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
charged = true;
|
||||
}
|
||||
|
||||
if( !charged && PGL.GetFlag( EntryFlag.Charge ) && PGL.Cost > 0 && from.AccessLevel == AccessLevel.Player )
|
||||
{
|
||||
Container pack = from.Backpack;
|
||||
if( pack == null )
|
||||
return;
|
||||
if( !pack.ConsumeTotal( typeof( Gold ), PGL.Cost ) )
|
||||
{
|
||||
from.SendMessage( "You require {0} gold to travel there.", PGL.Cost );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
BaseCreature.TeleportPets( from, PGL.Location, PGL.Map );
|
||||
|
||||
from.Combatant = null;
|
||||
from.Warmode = false;
|
||||
from.Hidden = true;
|
||||
|
||||
from.MoveToWorld( PGL.Location, PGL.Map );
|
||||
|
||||
Effects.PlaySound( PGL.Location, PGL.Map, 0x1FE );
|
||||
from.SendMessage( "You have been teleported to: " + PGL.Name );
|
||||
}
|
||||
}
|
||||
|
||||
else if( BID >= 100 )
|
||||
{
|
||||
from.CloseGump( typeof( PGGump ) );
|
||||
from.SendGump( new PGGump( from, BID-100, m_Gate ) );
|
||||
}
|
||||
|
||||
else if( BID == 2 && from.AccessLevel >= PGSystem.PGAccessLevel)
|
||||
{
|
||||
SetFlag( Conditions.Adding, true );
|
||||
SetFlag( Conditions.Category, true );
|
||||
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.CloseGump( typeof( PGGump ) );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
from.SendGump( new PGAddEditGump( Flags, m_Page, -1, m_Gate ) );
|
||||
}
|
||||
|
||||
else if (BID == 3 && from.AccessLevel >= PGSystem.PGAccessLevel)
|
||||
{
|
||||
SetFlag( Conditions.Adding, false );
|
||||
SetFlag( Conditions.Category, true );
|
||||
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.CloseGump( typeof( PGGump ) );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
from.SendGump( new PGAddEditGump( Flags, m_Page, -1, m_Gate ) );
|
||||
}
|
||||
|
||||
else if (BID == 4 && from.AccessLevel >= PGSystem.PGAccessLevel)
|
||||
{
|
||||
SetFlag( Conditions.Adding, true );
|
||||
SetFlag( Conditions.Category, false );
|
||||
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.CloseGump( typeof( PGGump ) );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
from.SendGump( new PGAddEditGump( Flags, m_Page, Loc, m_Gate ) );
|
||||
}
|
||||
|
||||
else if (BID == 5 && from.AccessLevel >= PGSystem.PGAccessLevel)
|
||||
{
|
||||
if( Loc <= -1 )
|
||||
{
|
||||
from.SendMessage( "You must select a location!" );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
SetFlag( Conditions.Adding, false );
|
||||
SetFlag( Conditions.Category, false );
|
||||
|
||||
from.CloseGump( typeof( PGAddEditGump ) );
|
||||
from.CloseGump( typeof( PGGump ) );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
from.SendGump( new PGAddEditGump( Flags, m_Page, Loc, m_Gate ) );
|
||||
}
|
||||
|
||||
else if (BID == 6 && from.AccessLevel >= PGSystem.PGAccessLevel)
|
||||
{
|
||||
if( m_Gate.Parent != null )
|
||||
{
|
||||
from.SendMessage( "You must place the gate in the World to add it." );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
PGLocation PGL = new PGLocation( "Un-named Gate", EntryFlag.None, m_Gate.Location, m_Gate.Map, 0 );
|
||||
if( PGL == null )
|
||||
{
|
||||
from.SendMessage( "Could not add." );
|
||||
from.SendGump( new PGGump( from, m_Page, m_Gate ) );
|
||||
return;
|
||||
}
|
||||
|
||||
from.SendMessage( "Added the Gate. Please edit any other features you wish it to have." );
|
||||
PGSystem.CategoryList[m_Page].Locations.Add( PGL );
|
||||
from.SendGump(new PGGump(from, m_Page, m_Gate));
|
||||
from.SendGump(new PGAddEditGump(Flags, m_Page, PGSystem.CategoryList[m_Page].Locations.Count-1, m_Gate));
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
from.SendMessage( "Undefined button pressed: {0}", BID );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
114
Scripts/SubSystem/ACC/Public Gates/Items/PublicGate.cs
Normal file
114
Scripts/SubSystem/ACC/Public Gates/Items/PublicGate.cs
Normal file
@@ -0,0 +1,114 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
using Server.Gumps;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.ACC.PG
|
||||
{
|
||||
public class PublicGate : Item
|
||||
{
|
||||
[Constructable]
|
||||
public PublicGate() : base( 3948 )
|
||||
{
|
||||
Movable = false;
|
||||
Name = "Public Gate";
|
||||
Light = LightType.Circle300;
|
||||
}
|
||||
|
||||
public PublicGate( Serial serial ) : base( serial )
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( !from.Player )
|
||||
return;
|
||||
|
||||
if ( from.InRange( GetWorldLocation(), 1 ) )
|
||||
UseGate( from );
|
||||
else
|
||||
from.SendLocalizedMessage( 500446 ); // That is too far away.
|
||||
}
|
||||
|
||||
public override bool OnMoveOver( Mobile m )
|
||||
{
|
||||
return !m.Player || UseGate( m );
|
||||
}
|
||||
|
||||
public bool UseGate( Mobile m )
|
||||
{
|
||||
if( !PGSystem.Running )
|
||||
{
|
||||
m.SendMessage( "The Public Gate System is not active. Please page a GM for assistance." );
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( m.Criminal )
|
||||
{
|
||||
m.SendLocalizedMessage( 1005561, "", 0x22 ); // Thou'rt a criminal and cannot escape so easily.
|
||||
return false;
|
||||
}
|
||||
else if ( Server.Spells.SpellHelper.CheckCombat( m ) )
|
||||
{
|
||||
m.SendLocalizedMessage( 1005564, "", 0x22 ); // Wouldst thou flee during the heat of battle??
|
||||
return false;
|
||||
}
|
||||
else if ( m.Spell != null )
|
||||
{
|
||||
m.SendLocalizedMessage( 1049616 ); // You are too busy to do that at the moment.
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
int page = 0;
|
||||
bool found = false;
|
||||
for( int i = 0; i < PGSystem.CategoryList.Count && !found; i++ )
|
||||
{
|
||||
PGCategory PGC = PGSystem.CategoryList[i];
|
||||
if( PGC != null && PGC.Locations != null && PGC.Locations.Count > 0 &&
|
||||
(PGC.GetFlag( EntryFlag.StaffOnly ) && m.AccessLevel > AccessLevel.Player) ||
|
||||
(!PGC.GetFlag( EntryFlag.StaffOnly ) && ((!PGC.GetFlag( EntryFlag.Reds ) && m.Kills < 5) || PGC.GetFlag( EntryFlag.Reds ))) ||
|
||||
(m.AccessLevel > AccessLevel.Player) )
|
||||
{
|
||||
for( int j = 0; j < PGC.Locations.Count && !found; j++ )
|
||||
{
|
||||
PGLocation PGL = PGC.Locations[j];
|
||||
if( PGL != null && (PGL.GetFlag( EntryFlag.StaffOnly ) && m.AccessLevel > AccessLevel.Player) ||
|
||||
(!PGL.GetFlag( EntryFlag.StaffOnly) && ((!PGL.GetFlag( EntryFlag.Reds ) && m.Kills < 5) || PGL.GetFlag( EntryFlag.Reds ))) ||
|
||||
(m.AccessLevel > AccessLevel.Player) )
|
||||
{
|
||||
if( PGL.Location == this.Location && PGL.Map == this.Map )
|
||||
{
|
||||
page = i;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m.CloseGump( typeof( PGGump ) );
|
||||
m.SendGump( new PGGump( m, page, this ) );
|
||||
|
||||
if ( !m.Hidden || m.AccessLevel == AccessLevel.Player )
|
||||
Effects.PlaySound( m.Location, m.Map, 0x20E );
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize( GenericWriter writer )
|
||||
{
|
||||
base.Serialize( writer );
|
||||
writer.Write( (int) 0 ); // version
|
||||
}
|
||||
|
||||
public override void Deserialize( GenericReader reader )
|
||||
{
|
||||
base.Deserialize( reader );
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
145
Scripts/SubSystem/ACC/Public Gates/PGEntry.cs
Normal file
145
Scripts/SubSystem/ACC/Public Gates/PGEntry.cs
Normal file
@@ -0,0 +1,145 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Server.ACC.PG
|
||||
{
|
||||
public enum EntryFlag
|
||||
{
|
||||
None = 0x00000000,
|
||||
Generate = 0x00000001,
|
||||
StaffOnly = 0x00000002,
|
||||
Reds = 0x00000004,
|
||||
Young = 0x00000008,
|
||||
Charge = 0x00000010,
|
||||
}
|
||||
|
||||
#region PGCategory Class
|
||||
public class PGCategory
|
||||
{
|
||||
private string m_Name;
|
||||
private List<PGLocation> m_Locations;
|
||||
private EntryFlag m_Flags;
|
||||
private int m_Cost;
|
||||
|
||||
public string Name{ get{ return m_Name; } set{ m_Name = value; } }
|
||||
public List<PGLocation> Locations{ get{ return m_Locations; } set{ m_Locations = value; } }
|
||||
public EntryFlag Flags{ get{ return m_Flags; } set{ m_Flags = value; } }
|
||||
public int Cost{ get{ return m_Cost; } set{ m_Cost = value; } }
|
||||
|
||||
public bool GetFlag( EntryFlag flag ){ return( (m_Flags & flag) != 0 ); }
|
||||
|
||||
public PGCategory( string name, EntryFlag flags ) : this( name, flags, 0 )
|
||||
{
|
||||
}
|
||||
|
||||
public PGCategory( string name, EntryFlag flags, int cost )
|
||||
{
|
||||
m_Name = name;
|
||||
m_Locations = new List<PGLocation>();
|
||||
m_Flags = flags;
|
||||
m_Cost = cost;
|
||||
}
|
||||
|
||||
public PGCategory( GenericReader reader )
|
||||
{
|
||||
Deserialize( reader );
|
||||
}
|
||||
|
||||
public void Serialize( GenericWriter writer )
|
||||
{
|
||||
writer.Write( 0 ); //version
|
||||
|
||||
writer.Write( m_Name );
|
||||
|
||||
writer.Write( m_Locations.Count );
|
||||
IEnumerator<PGLocation> Locs = m_Locations.GetEnumerator();
|
||||
while(Locs.MoveNext())
|
||||
Locs.Current.Serialize(writer);
|
||||
|
||||
writer.Write( (int)m_Flags );
|
||||
writer.Write( (int)m_Cost );
|
||||
}
|
||||
|
||||
public void Deserialize( GenericReader reader )
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
m_Name = reader.ReadString();
|
||||
|
||||
m_Locations = new List<PGLocation>();
|
||||
|
||||
for (int i = reader.ReadInt(); i >0; i--)
|
||||
{
|
||||
m_Locations.Add( new PGLocation( reader ) );
|
||||
}
|
||||
|
||||
m_Flags = (EntryFlag)reader.ReadInt();
|
||||
m_Cost = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
#endregion //PGCategory Class
|
||||
|
||||
#region PGLocation Class
|
||||
public class PGLocation
|
||||
{
|
||||
private string m_Name;
|
||||
private EntryFlag m_Flags;
|
||||
private Point3D m_Location;
|
||||
private Map m_Map;
|
||||
private int m_Hue;
|
||||
private int m_Cost;
|
||||
|
||||
public string Name{ get{ return m_Name; } set{ m_Name = value; } }
|
||||
public EntryFlag Flags{ get{ return m_Flags; } set{ m_Flags = value; } }
|
||||
public Point3D Location{ get{ return m_Location; } set{ m_Location = value; } }
|
||||
public Map Map{ get{ return m_Map; } set{ m_Map = value; } }
|
||||
public int Hue{ get{ return m_Hue; } set{ m_Hue = value; } }
|
||||
public int Cost{ get{ return m_Cost; } set{ m_Cost = value; } }
|
||||
|
||||
public bool GetFlag( EntryFlag flag ){ return( (m_Flags & flag) != 0 ); }
|
||||
|
||||
public PGLocation( string name, EntryFlag flags, Point3D location, Map map, int hue ) : this( name, flags, location, map, hue, 0 )
|
||||
{
|
||||
}
|
||||
|
||||
public PGLocation( string name, EntryFlag flags, Point3D location, Map map, int hue, int cost )
|
||||
{
|
||||
m_Name = name;
|
||||
m_Flags = flags;
|
||||
m_Location = location;
|
||||
m_Map = map;
|
||||
m_Hue = hue;
|
||||
m_Cost = cost;
|
||||
}
|
||||
|
||||
public PGLocation( GenericReader reader )
|
||||
{
|
||||
Deserialize( reader );
|
||||
}
|
||||
|
||||
public void Serialize( GenericWriter writer )
|
||||
{
|
||||
writer.Write( (int)0 ); //version
|
||||
|
||||
writer.Write( (string)m_Name );
|
||||
writer.Write( (int)m_Flags );
|
||||
writer.Write( m_Location );
|
||||
writer.Write( m_Map );
|
||||
writer.Write( m_Hue );
|
||||
writer.Write( m_Cost );
|
||||
}
|
||||
|
||||
public void Deserialize( GenericReader reader )
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
m_Name = reader.ReadString();
|
||||
m_Flags = (EntryFlag)reader.ReadInt();
|
||||
m_Location = reader.ReadPoint3D();
|
||||
m_Map = reader.ReadMap();
|
||||
m_Hue = reader.ReadInt();
|
||||
m_Cost = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
#endregion //PGLocation Class
|
||||
}
|
||||
16
Scripts/SubSystem/ACC/Public Gates/PGGlobalSettings.cs
Normal file
16
Scripts/SubSystem/ACC/Public Gates/PGGlobalSettings.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Server.ACC.PG
|
||||
{
|
||||
public partial class PGSystem
|
||||
{
|
||||
/* PGAccessLevel:
|
||||
* Set this to whatever minimum AccessLevel you want to be able to
|
||||
* modify this system via the Public Gate gumps.
|
||||
* NOTE: This has no effect on the ACC Main Gump settings.
|
||||
*/
|
||||
public static AccessLevel PGAccessLevel = AccessLevel.GameMaster;
|
||||
}
|
||||
}
|
||||
800
Scripts/SubSystem/ACC/Public Gates/PGSystem.cs
Normal file
800
Scripts/SubSystem/ACC/Public Gates/PGSystem.cs
Normal file
@@ -0,0 +1,800 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using Server.Gumps;
|
||||
using Server.Network;
|
||||
using Server.Commands;
|
||||
|
||||
namespace Server.ACC.PG
|
||||
{
|
||||
public enum Pages
|
||||
{
|
||||
Manage,
|
||||
Import
|
||||
};
|
||||
|
||||
public enum ImportSelections
|
||||
{
|
||||
Systems,
|
||||
Categories,
|
||||
Locations
|
||||
};
|
||||
|
||||
public class PGGumpParams : ACCGumpParams
|
||||
{
|
||||
public Pages Page;
|
||||
public ImportSelections ImportSelection;
|
||||
public KeyValuePair<PGCategory, int> SelectedCategory;
|
||||
public KeyValuePair<PGLocation, int> SelectedLocation;
|
||||
|
||||
public PGGumpParams()
|
||||
: base()
|
||||
{
|
||||
SelectedCategory = new KeyValuePair<PGCategory, int>(null, -1);
|
||||
SelectedLocation = new KeyValuePair<PGLocation, int>(null, -1);
|
||||
}
|
||||
}
|
||||
|
||||
public partial class PGSystem : ACCSystem
|
||||
{
|
||||
#region System
|
||||
private static List<PGCategory> m_CategoryList = new List<PGCategory>();
|
||||
public static List<PGCategory> CategoryList { get { return m_CategoryList; } set { m_CategoryList = value; } }
|
||||
|
||||
public override string Name() { return "Public Gates"; }
|
||||
|
||||
public override void Enable()
|
||||
{
|
||||
Console.WriteLine("{0} has just been enabled!", Name());
|
||||
GenGates();
|
||||
}
|
||||
|
||||
public override void Disable()
|
||||
{
|
||||
Console.WriteLine("{0} has just been disabled!", Name());
|
||||
RemGates();
|
||||
}
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
ACC.RegisterSystem("Server.ACC.PG.PGSystem");
|
||||
}
|
||||
|
||||
public static bool Running
|
||||
{
|
||||
get { return ACC.SysEnabled("Server.ACC.PG.PGSystem"); }
|
||||
}
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
CommandSystem.Register("GenGates", PGSystem.PGAccessLevel, new CommandEventHandler(OnGenGates));
|
||||
CommandSystem.Register("RemGates", PGSystem.PGAccessLevel, new CommandEventHandler(OnRemGates));
|
||||
}
|
||||
|
||||
[Usage("GenGates")]
|
||||
[Description("Generates a gate at each location of the control stone.")]
|
||||
private static void OnGenGates(CommandEventArgs e)
|
||||
{
|
||||
if (Running)
|
||||
GenGates();
|
||||
else
|
||||
e.Mobile.SendMessage("The Public Gate System is not active.");
|
||||
}
|
||||
|
||||
[Usage("RemGates")]
|
||||
[Description("Removes all Public Gates from the world.")]
|
||||
private static void OnRemGates(CommandEventArgs e)
|
||||
{
|
||||
if (Running)
|
||||
RemGates();
|
||||
else
|
||||
e.Mobile.SendMessage("The Public Gate System is not active.");
|
||||
}
|
||||
|
||||
public static void GenGates()
|
||||
{
|
||||
RemGates();
|
||||
|
||||
if (m_CategoryList == null)
|
||||
m_CategoryList = new List<PGCategory>();
|
||||
|
||||
int count = 0;
|
||||
IEnumerator<PGCategory> PGC = m_CategoryList.GetEnumerator();
|
||||
while (PGC.MoveNext())
|
||||
{
|
||||
if (PGC.Current.GetFlag(EntryFlag.Generate))
|
||||
{
|
||||
IEnumerator<PGLocation> PGL = PGC.Current.Locations.GetEnumerator();
|
||||
while (PGL.MoveNext())
|
||||
{
|
||||
if (PGL.Current.GetFlag(EntryFlag.Generate))
|
||||
{
|
||||
PublicGate gate = new PublicGate();
|
||||
|
||||
gate.MoveToWorld(PGL.Current.Location, PGL.Current.Map);
|
||||
gate.Name = "Public Gate: " + PGL.Current.Name;
|
||||
gate.Hue = PGL.Current.Hue;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
World.Broadcast(6, true, "{0} public gates generated.", count);
|
||||
}
|
||||
|
||||
public static void RemGates()
|
||||
{
|
||||
List<PublicGate> list = new List<PublicGate>();
|
||||
|
||||
foreach (Item item in World.Items.Values)
|
||||
{
|
||||
if (item is PublicGate && item.Parent == null)
|
||||
list.Add((PublicGate)item);
|
||||
}
|
||||
|
||||
foreach (Item item in list)
|
||||
item.Delete();
|
||||
|
||||
if (list.Count > 0)
|
||||
World.Broadcast(6, true, "{0} public gates removed.", list.Count);
|
||||
}
|
||||
|
||||
public override void Save(GenericWriter idx, GenericWriter tdb, GenericWriter writer)
|
||||
{
|
||||
writer.Write((int)0); //version
|
||||
|
||||
writer.Write(m_CategoryList.Count);
|
||||
IEnumerator<PGCategory> Cats = m_CategoryList.GetEnumerator();
|
||||
while (Cats.MoveNext())
|
||||
Cats.Current.Serialize(writer);
|
||||
}
|
||||
|
||||
public override void Load(BinaryReader idx, BinaryReader tdb, BinaryFileReader reader)
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
m_CategoryList = new List<PGCategory>();
|
||||
|
||||
for (int i = reader.ReadInt(); i > 0; i--)
|
||||
{
|
||||
m_CategoryList.Add(new PGCategory(reader));
|
||||
}
|
||||
}
|
||||
#endregion //System
|
||||
|
||||
#region Gumps
|
||||
private PGGumpParams Params;
|
||||
private string[] Dirs = null;
|
||||
|
||||
public override void Gump(Mobile from, Gump gump, ACCGumpParams subParams)
|
||||
{
|
||||
gump.AddButton(195, 40, 2445, 2445, 101, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(200, 41, 1153, "Manage System");
|
||||
gump.AddButton(310, 40, 2445, 2445, 102, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(342, 41, 1153, "Import");
|
||||
|
||||
if (subParams == null || !(subParams is PGGumpParams))
|
||||
{
|
||||
gump.AddHtml(215, 65, 300, 25, "<basefont size=7 color=white><center>Public Gates</center></font>", false, false);
|
||||
gump.AddHtml(140, 95, 450, 250, "<basefont color=white><center>Welcome to the Public Gate Admin Gump!</center><br>With this gump, you can manage the entire system and import and export locations or full categories. Please choose an option from the top bar.<br><br>Manage System allows you to add/change/delete locations and categories from anywhere in the world.<br><br>Im/Ex port allows you to import or export categories and locations to files that you can distribute to other servers that use this system.</font>", false, false);
|
||||
return;
|
||||
}
|
||||
|
||||
Params = subParams as PGGumpParams;
|
||||
|
||||
switch ((int)Params.Page)
|
||||
{
|
||||
#region Manage Gump Code
|
||||
case (int)Pages.Manage:
|
||||
{
|
||||
gump.AddBackground(640, 0, 160, 400, 5120);
|
||||
gump.AddButton(425, 40, 2445, 2445, 123, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(456, 41, 1153, "Export");
|
||||
|
||||
for (int i = 0; i < m_CategoryList.Count && i < 50; i++)
|
||||
{
|
||||
PGCategory PGC = m_CategoryList[i];
|
||||
if (PGC != null)
|
||||
{
|
||||
gump.AddButton(650, 10 + i * 30, 2501, 2501, 150 + i, GumpButtonType.Reply, 0);
|
||||
gump.AddButton(655, 12 + i * 30, (Params.SelectedCategory.Key == PGC ? 5401 : 5402), (Params.SelectedCategory.Key == PGC ? 5402 : 5401), 150 + i, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(675, 10 + i * 30, 1153, PGC.Name);
|
||||
}
|
||||
}
|
||||
|
||||
if (Params.SelectedCategory.Key != null)
|
||||
{
|
||||
gump.AddBackground(425, 75, 170, 285, 5120);
|
||||
gump.AddButton(195, 65, 2445, 2445, 121, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(206, 66, 1153, "Add Category");
|
||||
gump.AddButton(310, 65, 2445, 2445, 122, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(322, 66, 1153, "Add Location");
|
||||
|
||||
for (int i = 0, c = 0, r = 0; i < Params.SelectedCategory.Key.Locations.Count; i++)
|
||||
{
|
||||
PGLocation PGL = Params.SelectedCategory.Key.Locations[i];
|
||||
if (PGL != null)
|
||||
{
|
||||
gump.AddButton(120 + c * 150, 100 + r * 30, 2501, 2501, 200 + i, GumpButtonType.Reply, 0);
|
||||
gump.AddButton(125 + c * 150, 102 + r * 30, (Params.SelectedLocation.Key == PGL ? 5401 : 5402), (Params.SelectedLocation.Key == PGL ? 5402 : 5401), 200 + i, GumpButtonType.Reply, 0);
|
||||
gump.AddLabel(145 + c * 150, 100 + r * 30, 1153, PGL.Name);
|
||||
r += (c == 1 ? 1 : 0);
|
||||
c += (c == 1 ? -1 : 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (Params.SelectedLocation.Key != null)
|
||||
{
|
||||
gump.AddButton(550, 265, 2642, 2643, 103, GumpButtonType.Reply, 0); //Apply Location
|
||||
|
||||
gump.AddImage(440, 85, 2501);
|
||||
gump.AddTextEntry(446, 85, 130, 20, 0, 105, Params.SelectedLocation.Key.Name);
|
||||
|
||||
gump.AddImage(445, 110, 2443);
|
||||
gump.AddImage(513, 110, 2443);
|
||||
gump.AddImage(445, 135, 2443);
|
||||
gump.AddImage(513, 135, 2443);
|
||||
gump.AddImage(445, 160, 2443);
|
||||
|
||||
gump.AddTextEntry(450, 110, 53, 20, 0, 106, Params.SelectedLocation.Key.Location.X.ToString());
|
||||
gump.AddTextEntry(518, 110, 53, 20, 0, 107, Params.SelectedLocation.Key.Location.Y.ToString());
|
||||
gump.AddTextEntry(450, 135, 53, 20, 0, 108, Params.SelectedLocation.Key.Location.Z.ToString());
|
||||
gump.AddTextEntry(518, 135, 53, 20, 0, 109, Params.SelectedLocation.Key.Hue.ToString());
|
||||
gump.AddTextEntry(450, 160, 53, 20, 0, 110, Params.SelectedLocation.Key.Cost.ToString());
|
||||
|
||||
gump.AddLabel(435, 112, 1153, "X");
|
||||
gump.AddLabel(578, 112, 1153, "Y");
|
||||
gump.AddLabel(435, 137, 1153, "Z");
|
||||
gump.AddLabel(578, 137, 1153, "H");
|
||||
gump.AddLabel(435, 162, 1153, "C");
|
||||
|
||||
gump.AddRadio(435, 190, 208, 209, (Params.SelectedLocation.Key.Map == Map.Trammel), 111);
|
||||
gump.AddRadio(570, 190, 208, 209, (Params.SelectedLocation.Key.Map == Map.Malas), 112);
|
||||
gump.AddRadio(435, 215, 208, 209, (Params.SelectedLocation.Key.Map == Map.Felucca), 113);
|
||||
gump.AddRadio(570, 215, 208, 209, (Params.SelectedLocation.Key.Map == Map.Ilshenar), 114);
|
||||
gump.AddRadio(435, 240, 208, 209, (Params.SelectedLocation.Key.Map == Map.Tokuno), 115);
|
||||
gump.AddRadio(570, 240, 208, 209, (Params.SelectedLocation.Key.Map == Map.TerMur), 127);
|
||||
|
||||
gump.AddLabel(460, 192, 1153, "Tram");
|
||||
gump.AddLabel(530, 192, 1153, "Malas");
|
||||
gump.AddLabel(460, 217, 1153, "Fel");
|
||||
gump.AddLabel(542, 217, 1153, "Ilsh");
|
||||
gump.AddLabel(460, 242, 1153, "Tokuno");
|
||||
gump.AddLabel(530, 242, 1153, "TerMur");
|
||||
|
||||
gump.AddLabel(465, 282, 1153, "Young?");
|
||||
gump.AddCheck(440, 280, 210, 211, Params.SelectedLocation.Key.GetFlag(EntryFlag.Young), 120);
|
||||
gump.AddLabel(465, 307, 1153, "Gen?");
|
||||
gump.AddCheck(440, 305, 210, 211, Params.SelectedLocation.Key.GetFlag(EntryFlag.Generate), 116);
|
||||
gump.AddLabel(515, 307, 1153, "Staff?");
|
||||
gump.AddCheck(565, 305, 210, 211, Params.SelectedLocation.Key.GetFlag(EntryFlag.StaffOnly), 117);
|
||||
gump.AddLabel(465, 332, 1153, "Reds?");
|
||||
gump.AddCheck(440, 330, 210, 211, Params.SelectedLocation.Key.GetFlag(EntryFlag.Reds), 118);
|
||||
gump.AddLabel(522, 332, 1153, "Chrg?");
|
||||
gump.AddCheck(565, 330, 210, 211, Params.SelectedLocation.Key.GetFlag(EntryFlag.Charge), 119);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
gump.AddButton(550, 265, 2642, 2643, 104, GumpButtonType.Reply, 0); //Apply Category
|
||||
|
||||
gump.AddImage(440, 110, 2501);
|
||||
gump.AddTextEntry(446, 110, 130, 20, 0, 105, Params.SelectedCategory.Key.Name);
|
||||
|
||||
gump.AddImage(445, 160, 2443);
|
||||
gump.AddTextEntry(450, 160, 53, 20, 0, 110, Params.SelectedCategory.Key.Cost.ToString());
|
||||
gump.AddLabel(435, 162, 1153, "C");
|
||||
|
||||
gump.AddLabel(465, 282, 1153, "Young?");
|
||||
gump.AddCheck(440, 280, 210, 211, Params.SelectedCategory.Key.GetFlag(EntryFlag.Young), 120);
|
||||
gump.AddLabel(465, 307, 1153, "Gen?");
|
||||
gump.AddCheck(440, 305, 210, 211, Params.SelectedCategory.Key.GetFlag(EntryFlag.Generate), 116);
|
||||
gump.AddLabel(515, 307, 1153, "Staff?");
|
||||
gump.AddCheck(565, 305, 210, 211, Params.SelectedCategory.Key.GetFlag(EntryFlag.StaffOnly), 117);
|
||||
gump.AddLabel(465, 332, 1153, "Reds?");
|
||||
gump.AddCheck(440, 330, 210, 211, Params.SelectedCategory.Key.GetFlag(EntryFlag.Reds), 118);
|
||||
gump.AddLabel(522, 332, 1153, "Chrg?");
|
||||
gump.AddCheck(565, 330, 210, 211, Params.SelectedCategory.Key.GetFlag(EntryFlag.Charge), 119);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endregion //Manage Gump Code
|
||||
|
||||
#region Import Gump Code
|
||||
case (int)Pages.Import:
|
||||
{//Import
|
||||
if (!Directory.Exists("ACC Exports"))
|
||||
{
|
||||
from.SendMessage("There are no files to import!");
|
||||
return;
|
||||
}
|
||||
|
||||
gump.AddButton(195, 65, 2445, 2445, 124, GumpButtonType.Reply, 0); //Switch to Systems
|
||||
gump.AddLabel(220, 66, 1153, "Systems");
|
||||
|
||||
gump.AddButton(310, 65, 2445, 2445, 125, GumpButtonType.Reply, 0); //Switch to Categories
|
||||
gump.AddLabel(328, 66, 1153, "Categories");
|
||||
|
||||
gump.AddButton(425, 65, 2445, 2445, 126, GumpButtonType.Reply, 0); //Switch to Locations
|
||||
gump.AddLabel(447, 66, 1153, "Locations");
|
||||
switch ((int)Params.ImportSelection)
|
||||
{
|
||||
case (int)ImportSelections.Systems: { Dirs = Directory.GetFiles("ACC Exports/", "*.pgs"); break; }
|
||||
case (int)ImportSelections.Categories: { Dirs = Directory.GetFiles("ACC Exports/", "*.pgc"); break; }
|
||||
case (int)ImportSelections.Locations: { Dirs = Directory.GetFiles("ACC Exports/", "*.pgl"); break; }
|
||||
default: { return; }
|
||||
}
|
||||
if (Dirs == null || Dirs.Length == 0)
|
||||
{
|
||||
from.SendMessage("There are no files of that type!");
|
||||
return;
|
||||
}
|
||||
for (int i = 0, r = 0, c = 0; i < Dirs.Length && c < 3; i++)
|
||||
{
|
||||
string s = Dirs[i];
|
||||
s = s.Remove(0, 12);
|
||||
s = s.Remove(s.Length - 4, 4);
|
||||
if (Params.ImportSelection == ImportSelections.Systems)
|
||||
s = s.Remove(0, 9);
|
||||
|
||||
gump.AddButton(120 + c * 150, 100 + r * 30, 2501, 2501, 300 + i, GumpButtonType.Reply, 0);
|
||||
gump.AddLabelCropped(125 + c * 150, 101 + r * 30, 140, 30, 1153, s);
|
||||
|
||||
c += (r == 7 ? 1 : 0);
|
||||
r += (r == 7 ? -7 : 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endregion //Import Gump Code
|
||||
}
|
||||
}
|
||||
|
||||
public override void Help(Mobile from, Gump gump)
|
||||
{
|
||||
}
|
||||
/* ID's:
|
||||
101 = Button Manage System
|
||||
102 = Button Import Page
|
||||
103 = Button Apply Location
|
||||
104 = Button Apply Category
|
||||
105 = Text Name
|
||||
106 = Text X
|
||||
107 = Text Y
|
||||
108 = Text Z
|
||||
109 = Text Hue
|
||||
110 = Text Cost
|
||||
111 = Radio Trammel
|
||||
112 = Radio Malas
|
||||
113 = Radio Felucca
|
||||
114 = Radio Ilshenar
|
||||
115 = Radio Tokuno
|
||||
116 = Check Generate
|
||||
117 = Check StaffOnly
|
||||
118 = Check Reds
|
||||
119 = Check Charge
|
||||
120 = Check Young
|
||||
121 = Button Add Category
|
||||
122 = Button Add Location
|
||||
123 = Button Export
|
||||
124 = Button Import Systems
|
||||
125 = Button Import Categories
|
||||
126 = Button Import Locations
|
||||
127 = Radio TerMur
|
||||
300+ = Imports
|
||||
*/
|
||||
public override void OnResponse(NetState state, RelayInfo info, ACCGumpParams subParams)
|
||||
{
|
||||
if (info.ButtonID == 0 || state.Mobile.AccessLevel < ACC.GlobalMinimumAccessLevel)
|
||||
return;
|
||||
|
||||
if (subParams is PGGumpParams)
|
||||
Params = subParams as PGGumpParams;
|
||||
|
||||
PGGumpParams newParams = new PGGumpParams();
|
||||
|
||||
if (info.ButtonID == 101)
|
||||
newParams.Page = Pages.Manage;
|
||||
|
||||
else if (info.ButtonID == 102)
|
||||
newParams.Page = Pages.Import;
|
||||
|
||||
#region Add/Remove
|
||||
else if (info.ButtonID == 103 || info.ButtonID == 104 || info.ButtonID == 121 || info.ButtonID == 122)
|
||||
{
|
||||
SetFlag(EntryFlag.Generate, info.IsSwitched(116));
|
||||
SetFlag(EntryFlag.StaffOnly, info.IsSwitched(117));
|
||||
SetFlag(EntryFlag.Reds, info.IsSwitched(118));
|
||||
SetFlag(EntryFlag.Charge, info.IsSwitched(119));
|
||||
|
||||
Map Map = info.IsSwitched(111) ? Map.Trammel : info.IsSwitched(112) ? Map.Malas : info.IsSwitched(113) ? Map.Felucca : info.IsSwitched(114) ? Map.Ilshenar : info.IsSwitched(115) ? Map.Tokuno : info.IsSwitched(127) ? Map.TerMur : Map.Trammel;
|
||||
|
||||
string Name = GetString(info, 105);
|
||||
string X = GetString(info, 106);
|
||||
string Y = GetString(info, 107);
|
||||
string Z = GetString(info, 108);
|
||||
string H = GetString(info, 109);
|
||||
string C = GetString(info, 110);
|
||||
|
||||
if (Name == null || Name.Length == 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
state.Mobile.SendMessage("Removed the entry");
|
||||
if (info.ButtonID == 103)
|
||||
Params.SelectedCategory.Key.Locations.Remove(Params.SelectedLocation.Key);
|
||||
else
|
||||
m_CategoryList.Remove(Params.SelectedCategory.Key);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Exception caught removing entry");
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (info.ButtonID == 103 || info.ButtonID == 122)
|
||||
{
|
||||
int x, y, z, h, c = 0;
|
||||
Point3D Loc;
|
||||
int Hue;
|
||||
int Cost;
|
||||
PGLocation PGL;
|
||||
|
||||
if (X == null || X.Length == 0 ||
|
||||
Y == null || Y.Length == 0 ||
|
||||
Z == null || Z.Length == 0 ||
|
||||
H == null || H.Length == 0 ||
|
||||
C == null || C.Length == 0)
|
||||
{
|
||||
if (info.ButtonID == 122)
|
||||
{
|
||||
Hue = 0;
|
||||
Loc = new Point3D(0, 0, 0);
|
||||
Cost = 0;
|
||||
|
||||
PGL = new PGLocation(Name, Flags, Loc, Map, Hue, Cost);
|
||||
if (PGL == null)
|
||||
{
|
||||
state.Mobile.SendMessage("Error adding Location.");
|
||||
return;
|
||||
}
|
||||
|
||||
m_CategoryList[Params.SelectedCategory.Value].Locations.Add(PGL);
|
||||
}
|
||||
|
||||
state.Mobile.SendMessage("Please fill in each field.");
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, this.ToString(), Params));
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
x = Int32.Parse(X);
|
||||
y = Int32.Parse(Y);
|
||||
z = Int32.Parse(Z);
|
||||
h = Int32.Parse(H);
|
||||
c = Int32.Parse(C);
|
||||
Loc = new Point3D(x, y, z);
|
||||
Hue = h;
|
||||
Cost = c;
|
||||
}
|
||||
catch
|
||||
{
|
||||
state.Mobile.SendMessage("Please enter an integer in each of the info fields. (X, Y, Z, H, Cost)");
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, this.ToString(), Params));
|
||||
return;
|
||||
}
|
||||
|
||||
PGL = new PGLocation(Name, Flags, Loc, Map, Hue, Cost);
|
||||
if (PGL == null)
|
||||
{
|
||||
state.Mobile.SendMessage("Bad Location information, can't add!");
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
if (info.ButtonID == 122)
|
||||
{
|
||||
m_CategoryList[Params.SelectedCategory.Value].Locations.Add(PGL);
|
||||
state.Mobile.SendMessage("Added the Location.");
|
||||
}
|
||||
else
|
||||
{
|
||||
state.Mobile.SendMessage("Changed the Location.");
|
||||
m_CategoryList[Params.SelectedCategory.Value].Locations[Params.SelectedLocation.Value] = PGL;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Problem adding/changing Location!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (C == null || C.Length == 0)
|
||||
{
|
||||
state.Mobile.SendMessage("Please fill in each field.");
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, this.ToString(), Params));
|
||||
return;
|
||||
}
|
||||
|
||||
int c = 0;
|
||||
int Cost;
|
||||
try
|
||||
{
|
||||
c = Int32.Parse(C);
|
||||
Cost = c;
|
||||
}
|
||||
catch
|
||||
{
|
||||
state.Mobile.SendMessage("Please enter an integer for the Cost");
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, this.ToString(), Params));
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (info.ButtonID == 121)
|
||||
{
|
||||
m_CategoryList.Add(new PGCategory(Name, Flags, Cost));
|
||||
state.Mobile.SendMessage("Added the Category.");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_CategoryList[Params.SelectedCategory.Value].Name = Name;
|
||||
m_CategoryList[Params.SelectedCategory.Value].Flags = Flags;
|
||||
m_CategoryList[Params.SelectedCategory.Value].Cost = Cost;
|
||||
state.Mobile.SendMessage("Changed the Category.");
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.WriteLine("Problems adding/changing Category!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion //Add/Remove
|
||||
|
||||
#region Imports/Exports
|
||||
#region Exports
|
||||
else if (info.ButtonID == 123)
|
||||
{
|
||||
if (!Directory.Exists("ACC Exports"))
|
||||
Directory.CreateDirectory("ACC Exports");
|
||||
|
||||
string fileName;
|
||||
string Path = "ACC Exports/";
|
||||
|
||||
if (Params.SelectedLocation.Key != null)
|
||||
fileName = String.Format("Location - {0}.pgl", Params.SelectedLocation.Key.Name);
|
||||
else if (Params.SelectedCategory.Key != null)
|
||||
fileName = String.Format("Category - {0}.pgc", Params.SelectedCategory.Key.Name);
|
||||
else
|
||||
fileName = String.Format("System - {0:yyMMdd-HHmmss}.pgs", DateTime.Now);
|
||||
|
||||
try
|
||||
{
|
||||
using (FileStream m_FileStream = new FileStream(Path + fileName, FileMode.Create, FileAccess.Write))
|
||||
{
|
||||
GenericWriter writer = new BinaryFileWriter(m_FileStream, true);
|
||||
|
||||
if (Params.SelectedLocation.Key != null)
|
||||
{
|
||||
Params.SelectedLocation.Key.Serialize(writer);
|
||||
state.Mobile.SendMessage("Exported the Location to {0}{1}", Path, fileName);
|
||||
}
|
||||
else if (Params.SelectedCategory.Key != null)
|
||||
{
|
||||
Params.SelectedCategory.Key.Serialize(writer);
|
||||
state.Mobile.SendMessage("Exported the Category (and all Locations contained within) to {0}{1}", Path, fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write((int)0); //version
|
||||
|
||||
writer.Write(m_CategoryList.Count);
|
||||
for (int i = 0; i < m_CategoryList.Count; i++)
|
||||
{
|
||||
m_CategoryList[i].Serialize(writer);
|
||||
}
|
||||
state.Mobile.SendMessage("Exported the entire Public Gates System to {0}{1}", Path, fileName);
|
||||
}
|
||||
|
||||
writer.Close();
|
||||
m_FileStream.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
state.Mobile.SendMessage("Problem exporting the selection. Please contact the admin.");
|
||||
Console.WriteLine("Error exporting PGSystem : {0}", e);
|
||||
}
|
||||
}
|
||||
#endregion //Exports
|
||||
#region Imports
|
||||
//Switch between import types
|
||||
else if (info.ButtonID == 124 || info.ButtonID == 125 || info.ButtonID == 126)
|
||||
{
|
||||
newParams.Page = Pages.Import;
|
||||
switch (info.ButtonID)
|
||||
{
|
||||
case 124: newParams.ImportSelection = ImportSelections.Systems; break;
|
||||
case 125: newParams.ImportSelection = ImportSelections.Categories; break;
|
||||
case 126: newParams.ImportSelection = ImportSelections.Locations; break;
|
||||
}
|
||||
}
|
||||
//Perform the import
|
||||
else if (info.ButtonID >= 300 && Dirs != null && Dirs.Length > 0)
|
||||
{
|
||||
if (!Directory.Exists("ACC Exports"))
|
||||
Directory.CreateDirectory("ACC Exports");
|
||||
|
||||
string Path = null;
|
||||
try
|
||||
{
|
||||
Path = Dirs[info.ButtonID - 300];
|
||||
|
||||
if (File.Exists(Path))
|
||||
{
|
||||
using (FileStream m_FileStream = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.Read))
|
||||
{
|
||||
BinaryFileReader reader = new BinaryFileReader(new BinaryReader(m_FileStream));
|
||||
|
||||
switch ((int)Params.ImportSelection)
|
||||
{
|
||||
case (int)ImportSelections.Systems:
|
||||
{//Systems
|
||||
int version = reader.ReadInt();
|
||||
int count = reader.ReadInt();
|
||||
List<PGCategory> list = new List<PGCategory>();
|
||||
for (int i = 0; i < count; i++)
|
||||
list.Add(new PGCategory(reader));
|
||||
|
||||
state.Mobile.CloseGump(typeof(SysChoiceGump));
|
||||
state.Mobile.SendGump(new SysChoiceGump(this.ToString(), Params, list));
|
||||
reader.Close();
|
||||
return;
|
||||
}
|
||||
case (int)ImportSelections.Categories:
|
||||
{//Categories
|
||||
if (m_CategoryList == null)
|
||||
m_CategoryList = new List<PGCategory>();
|
||||
|
||||
m_CategoryList.Add(new PGCategory(reader));
|
||||
state.Mobile.SendMessage("Added the Category.");
|
||||
break;
|
||||
}
|
||||
case (int)ImportSelections.Locations:
|
||||
{//Locations
|
||||
state.Mobile.CloseGump(typeof(CatSelGump));
|
||||
state.Mobile.SendMessage("Please choose a Category to put this Location in.");
|
||||
state.Mobile.SendGump(new CatSelGump(this.ToString(), Params, new PGLocation(reader)));
|
||||
reader.Close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
reader.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
#endregion //Imports
|
||||
#endregion //Imports/Exports
|
||||
|
||||
else if (info.ButtonID >= 150 && info.ButtonID < m_CategoryList.Count + 150)
|
||||
newParams.SelectedCategory = new KeyValuePair<PGCategory, int>(m_CategoryList[info.ButtonID - 150], info.ButtonID - 150);
|
||||
|
||||
else if (info.ButtonID >= 200 && info.ButtonID < 200 + Params.SelectedCategory.Key.Locations.Count)
|
||||
{
|
||||
newParams.SelectedCategory = Params.SelectedCategory;
|
||||
newParams.SelectedLocation = new KeyValuePair<PGLocation, int>(Params.SelectedCategory.Key.Locations[info.ButtonID - 200], info.ButtonID - 200);
|
||||
}
|
||||
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, this.ToString(), newParams));
|
||||
}
|
||||
|
||||
private string GetString(RelayInfo info, int id)
|
||||
{
|
||||
TextRelay t = info.GetTextEntry(id);
|
||||
return (t == null ? null : t.Text.Trim());
|
||||
}
|
||||
|
||||
private EntryFlag Flags;
|
||||
private void SetFlag(EntryFlag flag, bool value)
|
||||
{
|
||||
if (value)
|
||||
Flags |= flag;
|
||||
else Flags &= ~flag;
|
||||
}
|
||||
|
||||
private class SysChoiceGump : Gump
|
||||
{
|
||||
private string Sys = null;
|
||||
private List<PGCategory> List;
|
||||
private PGGumpParams Params;
|
||||
public SysChoiceGump(string sys, ACCGumpParams subParams, List<PGCategory> list)
|
||||
: base(0, 0)
|
||||
{
|
||||
Sys = sys;
|
||||
if (subParams is PGGumpParams)
|
||||
Params = subParams as PGGumpParams;
|
||||
List = list;
|
||||
AddPage(0);
|
||||
AddBackground(250, 245, 300, 90, 5120);
|
||||
AddLabel(282, 260, 1153, "Overwrite or Add To current system?");
|
||||
AddButton(280, 290, 2445, 2445, 1, GumpButtonType.Reply, 0);
|
||||
AddButton(410, 290, 2445, 2445, 2, GumpButtonType.Reply, 0);
|
||||
AddLabel(300, 291, 1153, "Overwrite");
|
||||
AddLabel(442, 291, 1153, "Add To");
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState state, RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 0)
|
||||
return;
|
||||
|
||||
if (info.ButtonID == 1)
|
||||
m_CategoryList = new List<PGCategory>();
|
||||
|
||||
for (int i = 0; i < List.Count; i++)
|
||||
m_CategoryList.Add(List[i]);
|
||||
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, Sys, Params));
|
||||
state.Mobile.SendMessage("Import successful.");
|
||||
}
|
||||
}
|
||||
|
||||
private class CatSelGump : Gump
|
||||
{
|
||||
private string Sys = null;
|
||||
private PGGumpParams Params;
|
||||
private PGLocation Loc = null;
|
||||
public CatSelGump(string sys, ACCGumpParams subParams, PGLocation loc)
|
||||
: base(0, 0)
|
||||
{
|
||||
if (sys == null || subParams == null || loc == null || m_CategoryList == null)
|
||||
return;
|
||||
|
||||
Sys = sys;
|
||||
if (subParams is PGGumpParams)
|
||||
Params = subParams as PGGumpParams;
|
||||
Loc = loc;
|
||||
|
||||
AddPage(0);
|
||||
AddBackground(640, 0, 160, 400, 5120);
|
||||
|
||||
for (int i = 0; i < PGSystem.CategoryList.Count; i++)
|
||||
{
|
||||
PGCategory PGC = m_CategoryList[i];
|
||||
if (PGC != null)
|
||||
{
|
||||
AddButton(650, 10 + i * 30, 2501, 2501, 1 + i, GumpButtonType.Reply, 0);
|
||||
AddLabel(675, 10 + i * 30, 1153, PGC.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState state, RelayInfo info)
|
||||
{
|
||||
if (info.ButtonID == 0)
|
||||
return;
|
||||
|
||||
m_CategoryList[info.ButtonID - 1].Locations.Add(Loc);
|
||||
state.Mobile.SendGump(new ACCGump(state.Mobile, Sys, Params));
|
||||
state.Mobile.SendMessage("Location added to {0}.", m_CategoryList[info.ButtonID - 1].Name);
|
||||
}
|
||||
}
|
||||
#endregion //Gumps
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user