From b2b1229fb8f38eca10c2010e50775cd2690b86cb Mon Sep 17 00:00:00 2001 From: mark Date: Wed, 29 Jun 2011 03:29:14 +0000 Subject: [PATCH] --- Scripts/Accounting/AccountHandler.cs | 43 ++++++----- Scripts/Items/Misc/LOSBlocker.cs | 11 ++- Scripts/Misc/CharacterCreation.cs | 1 - Server/Network/NetState.cs | 10 ++- Server/Network/PacketHandlers.cs | 6 +- Server/Network/Packets.cs | 105 ++++++++++++++++++++++++--- 6 files changed, 140 insertions(+), 36 deletions(-) diff --git a/Scripts/Accounting/AccountHandler.cs b/Scripts/Accounting/AccountHandler.cs index 20b193f27..105ab493b 100644 --- a/Scripts/Accounting/AccountHandler.cs +++ b/Scripts/Accounting/AccountHandler.cs @@ -37,18 +37,34 @@ namespace Server.Misc private static CityInfo[] StartingCities = new CityInfo[] { - new CityInfo( "Yew", "The Empath Abbey", 633, 858, 0 ), - new CityInfo( "Minoc", "The Barnacle", 2476, 413, 15 ), - new CityInfo( "Britain", "Sweet Dreams Inn", 1496, 1628, 10 ), - new CityInfo( "Moonglow", "The Scholars Inn", 4408, 1168, 0 ), - new CityInfo( "Trinsic", "The Traveler's Inn", 1845, 2745, 0 ), - new CityInfo( "Magincia", "The Great Horns Tavern", 3734, 2222, 20 ), - new CityInfo( "Jhelom", "The Mercenary Inn", 1374, 3826, 0 ), - new CityInfo( "Skara Brae", "The Falconer's Inn", 618, 2234, 0 ), - new CityInfo( "Vesper", "The Ironwood Inn", 2771, 976, 0 ), - new CityInfo( "Haven", "Buckler's Hideaway", 3667, 2625, 0 ) + new CityInfo( "New Haven", "New Haven Bank", 1150168, 3667, 2625, 0 ), + new CityInfo( "Yew", "The Empath Abbey", 1075072, 633, 858, 0 ), + new CityInfo( "Minoc", "The Barnacle", 1075073, 2476, 413, 15 ), + new CityInfo( "Britain", "The Wayfarer's Inn", 1075074, 1602, 1591, 20 ), + new CityInfo( "Moonglow", "The Scholars Inn", 1075075, 4408, 1168, 0 ), + new CityInfo( "Trinsic", "The Traveler's Inn", 1075076, 1845, 2745, 0 ), + new CityInfo( "Jhelom", "The Mercenary Inn", 1075078, 1374, 3826, 0 ), + new CityInfo( "Skara Brae", "The Falconer's Inn", 1075079, 618, 2234, 0 ), + new CityInfo( "Vesper", "The Ironwood Inn", 1075080, 2771, 976, 0 ) }; + /* Old Haven/Magincia Locations + new CityInfo( "Britain", "Sweet Dreams Inn", 1496, 1628, 10 ); + // .. + // Trinsic + new CityInfo( "Magincia", "The Great Horns Tavern", 3734, 2222, 20 ), + // Jhelom + // .. + new CityInfo( "Haven", "Buckler's Hideaway", 3667, 2625, 0 ) + + if ( Core.AOS ) + { + //CityInfo haven = new CityInfo( "Haven", "Uzeraan's Mansion", 3618, 2591, 0 ); + CityInfo haven = new CityInfo( "Haven", "Uzeraan's Mansion", 3503, 2574, 14 ); + StartingCities[StartingCities.Length - 1] = haven; + } + */ + private static bool PasswordCommandEnabled = false; public static void Initialize() @@ -59,13 +75,6 @@ namespace Server.Misc if ( PasswordCommandEnabled ) CommandSystem.Register( "Password", AccessLevel.Player, new CommandEventHandler( Password_OnCommand ) ); - - if ( Core.AOS ) - { - //CityInfo haven = new CityInfo( "Haven", "Uzeraan's Mansion", 3618, 2591, 0 ); - CityInfo haven = new CityInfo( "Haven", "Uzeraan's Mansion", 3503, 2574, 14 ); - StartingCities[StartingCities.Length - 1] = haven; - } } [Usage( "Password " )] diff --git a/Scripts/Items/Misc/LOSBlocker.cs b/Scripts/Items/Misc/LOSBlocker.cs index 076e673fa..e06e47559 100644 --- a/Scripts/Items/Misc/LOSBlocker.cs +++ b/Scripts/Items/Misc/LOSBlocker.cs @@ -8,8 +8,8 @@ namespace Server.Items { public static void Initialize() { - TileData.ItemTable[0x2199].Flags = TileFlag.Wall | TileFlag.NoShoot; - TileData.ItemTable[0x2199].Height = 20; + TileData.ItemTable[0x21A2].Flags = TileFlag.Wall | TileFlag.NoShoot; + TileData.ItemTable[0x21A2].Height = 20; } public override string DefaultName @@ -18,7 +18,7 @@ namespace Server.Items } [Constructable] - public LOSBlocker() : base( 0x2199 ) + public LOSBlocker() : base( 0x21A2 ) { Movable = false; } @@ -41,7 +41,7 @@ namespace Server.Items { base.Serialize( writer ); - writer.Write( (int) 0 ); + writer.Write( (int) 1 ); } public override void Deserialize( GenericReader reader ) @@ -49,6 +49,9 @@ namespace Server.Items base.Deserialize( reader ); int version = reader.ReadInt(); + + if ( version < 1 && ItemID == 0x2199 ) + this.ItemID = 0x21A2; } public sealed class GMItemPacket : Packet diff --git a/Scripts/Misc/CharacterCreation.cs b/Scripts/Misc/CharacterCreation.cs index 8f3fe3e9b..2d473e600 100644 --- a/Scripts/Misc/CharacterCreation.cs +++ b/Scripts/Misc/CharacterCreation.cs @@ -692,7 +692,6 @@ namespace Server.Misc } CityInfo city = GetStartLocation( args, young ); - //CityInfo city = new CityInfo( "Britain", "Sweet Dreams Inn", 1496, 1628, 10, Map.Felucca ); newChar.MoveToWorld( city.Location, city.Map ); diff --git a/Server/Network/NetState.cs b/Server/Network/NetState.cs index 7e62837f9..e994818c0 100644 --- a/Server/Network/NetState.cs +++ b/Server/Network/NetState.cs @@ -165,7 +165,9 @@ namespace Server.Network { set { m_Version = value; - if ( value >= m_Version7090 ) { + if ( value >= m_Version70130 ) { + _ProtocolChanges = ProtocolChanges.Version70130; + } else if ( value >= m_Version7090 ) { _ProtocolChanges = ProtocolChanges.Version7090; } else if ( value >= m_Version7000 ) { _ProtocolChanges = ProtocolChanges.Version7000; @@ -196,6 +198,7 @@ namespace Server.Network { private static ClientVersion m_Version60142 = new ClientVersion( "6.0.14.2" ); private static ClientVersion m_Version7000 = new ClientVersion( "7.0.0.0" ); private static ClientVersion m_Version7090 = new ClientVersion( "7.0.9.0" ); + private static ClientVersion m_Version70130 = new ClientVersion( "7.0.13.0" ); private ProtocolChanges _ProtocolChanges; @@ -209,6 +212,7 @@ namespace Server.Network { ExtendedSupportedFeatures = 0x00000040, StygianAbyss = 0x00000080, HighSeas = 0x00000100, + NewCharacterList = 0x00000200, Version400a = NewSpellbook, Version407a = Version400a | DamagePacket, @@ -218,7 +222,8 @@ namespace Server.Network { Version6017 = Version6000 | ContainerGridLines, Version60142 = Version6017 | ExtendedSupportedFeatures, Version7000 = Version60142 | StygianAbyss, - Version7090 = Version7000 | HighSeas + Version7090 = Version7000 | HighSeas, + Version70130 = Version7090 | NewCharacterList } public bool NewSpellbook { get { return ((_ProtocolChanges & ProtocolChanges.NewSpellbook) != 0); } } @@ -230,6 +235,7 @@ namespace Server.Network { public bool ExtendedSupportedFeatures { get { return ((_ProtocolChanges & ProtocolChanges.ExtendedSupportedFeatures) != 0); } } public bool StygianAbyss { get { return ((_ProtocolChanges & ProtocolChanges.StygianAbyss) != 0); } } public bool HighSeas { get { return ((_ProtocolChanges & ProtocolChanges.HighSeas) != 0); } } + public bool NewCharacterList { get { return ((_ProtocolChanges & ProtocolChanges.NewCharacterList) != 0); } } public bool IsUOTDClient { get { diff --git a/Server/Network/PacketHandlers.cs b/Server/Network/PacketHandlers.cs index 61c4461f1..dd008596f 100644 --- a/Server/Network/PacketHandlers.cs +++ b/Server/Network/PacketHandlers.cs @@ -2262,7 +2262,11 @@ namespace Server.Network state.Send( SupportedFeatures.Instantiate( state ) ); - state.Send( new CharacterList( state.Account, state.CityInfo ) ); + if ( state.NewCharacterList ) { + state.Send( new CharacterList( state.Account, state.CityInfo ) ); + } else { + state.Send( new CharacterListOld( state.Account, state.CityInfo ) ); + } } else { diff --git a/Server/Network/Packets.cs b/Server/Network/Packets.cs index 27916f8d5..73ec579b1 100644 --- a/Server/Network/Packets.cs +++ b/Server/Network/Packets.cs @@ -3579,18 +3579,28 @@ namespace Server.Network { private string m_City; private string m_Building; + private int m_Description; private Point3D m_Location; private Map m_Map; - public CityInfo( string city, string building, int x, int y, int z, Map m ) + public CityInfo( string city, string building, int description, int x, int y, int z, Map m ) { m_City = city; m_Building = building; + m_Description = description; m_Location = new Point3D( x, y, z ); m_Map = m; } - public CityInfo( string city, string building, int x, int y, int z ) : this( city, building, x, y, z, Map.Trammel ) + public CityInfo( string city, string building, int x, int y, int z, Map m ) : this( city, building, 0, x, y, z, m ) + { + } + + public CityInfo( string city, string building, int description, int x, int y, int z ) : this( city, building, description, x, y, z, Map.Trammel ) + { + } + + public CityInfo( string city, string building, int x, int y, int z ) : this( city, building, 0, x, y, z, Map.Trammel ) { } @@ -3618,6 +3628,18 @@ namespace Server.Network } } + public int Description + { + get + { + return m_Description; + } + set + { + m_Description = value; + } + } + public int X { get @@ -3711,6 +3733,75 @@ namespace Server.Network public sealed class CharacterList : Packet { public CharacterList( IAccount a, CityInfo[] info ) : base( 0xA9 ) + { + this.EnsureCapacity( 11 + (a.Length * 60) + (info.Length * 89) ); + + int highSlot = -1; + + for ( int i = 0; i < a.Length; ++i ) + { + if ( a[i] != null ) + highSlot = i; + } + + int count = Math.Max( Math.Max( highSlot + 1, a.Limit ), 5 ); + + m_Stream.Write( (byte) count ); + + for ( int i = 0; i < count; ++i ) + { + if ( a[i] != null ) + { + m_Stream.WriteAsciiFixed( a[i].Name, 30 ); + m_Stream.Fill( 30 ); // password + } + else + { + m_Stream.Fill( 60 ); + } + } + + m_Stream.Write( (byte) info.Length ); + + for ( int i = 0; i < info.Length; ++i ) + { + CityInfo ci = info[i]; + + m_Stream.Write( (byte) i ); + m_Stream.WriteAsciiFixed( ci.City, 32 ); + m_Stream.WriteAsciiFixed( ci.Building, 32 ); + m_Stream.Write( (int) ci.X ); + m_Stream.Write( (int) ci.Y ); + m_Stream.Write( (int) ci.Z ); + m_Stream.Write( (int) ci.Map.MapID ); + m_Stream.Write( (int) ci.Description ); + m_Stream.Write( (int) 0 ); + } + + CharacterListFlags flags = ExpansionInfo.CurrentExpansion.CharacterListFlags; + + if ( count > 6 ) + flags |= (CharacterListFlags.SeventhCharacterSlot | CharacterListFlags.SixthCharacterSlot); // 7th Character Slot - TODO: Is SixthCharacterSlot Required? + else if ( count == 6 ) + flags |= CharacterListFlags.SixthCharacterSlot; // 6th Character Slot + else if ( a.Limit == 1 ) + flags |= (CharacterListFlags.SlotLimit & CharacterListFlags.OneCharacterSlot); // Limit Characters & One Character + + m_Stream.Write( (int)(flags | m_AdditionalFlags) ); // Additional Flags + } + + private static CharacterListFlags m_AdditionalFlags; + + public static CharacterListFlags AdditionalFlags + { + get{ return m_AdditionalFlags; } + set{ m_AdditionalFlags = value; } + } + } + + public sealed class CharacterListOld : Packet + { + public CharacterListOld( IAccount a, CityInfo[] info ) : base( 0xA9 ) { this.EnsureCapacity( 9 + (a.Length * 60) + (info.Length * 63) ); @@ -3759,15 +3850,7 @@ namespace Server.Network else if ( a.Limit == 1 ) flags |= (CharacterListFlags.SlotLimit & CharacterListFlags.OneCharacterSlot); // Limit Characters & One Character - m_Stream.Write( (int)(flags | m_AdditionalFlags) ); // Additional Flags - } - - private static CharacterListFlags m_AdditionalFlags; - - public static CharacterListFlags AdditionalFlags - { - get{ return m_AdditionalFlags; } - set{ m_AdditionalFlags = value; } + m_Stream.Write( (int)(flags | CharacterList.AdditionalFlags) ); // Additional Flags } }