Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View 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 ) );
}
}
}
}

View 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 );
}
}
}
}

View 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();
}
}
}

View 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
}

View 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;
}
}

View 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
}
}