7.0.9.x compat

updated spawner
This commit is contained in:
mark 2010-10-14 06:34:46 +00:00
parent e86794c4e6
commit 6441f12907
10 changed files with 367 additions and 88 deletions

View file

@ -1620,11 +1620,19 @@ namespace Server.Items
public virtual void DisplayTo( Mobile to )
{
ProcessOpeners( to );
ProcessOpeners( to );
to.Send( new ContainerDisplay( this ) );
NetState ns = to.NetState;
if ( ns == null )
return;
if ( ns.HighSeas )
to.Send( new ContainerDisplayHS( this ) );
else
to.Send( new ContainerDisplay( this ) );
if ( to.NetState != null && to.NetState.ContainerGridLines )
if ( ns.ContainerGridLines )
to.Send( new ContainerContent6017( to, this ) );
else
to.Send( new ContainerContent( to, this ) );

View file

@ -26,6 +26,13 @@ namespace Server
{
public class MultiData
{
public static bool PostHSFormat {
get { return _PostHSFormat; }
set { _PostHSFormat = value; }
}
private static bool _PostHSFormat = false;
private static MultiComponentList[] m_Components;
private static FileStream m_Index, m_Stream;
@ -66,7 +73,7 @@ namespace Server
m_StreamReader.BaseStream.Seek( lookup, SeekOrigin.Begin );
return new MultiComponentList( m_StreamReader, length / 12 );
return new MultiComponentList( m_StreamReader, length / ( _PostHSFormat ? 16 : 12 ) );
}
catch
{
@ -525,6 +532,9 @@ namespace Server
allTiles[i].m_OffsetZ = reader.ReadInt16();
allTiles[i].m_Flags = reader.ReadInt32();
if ( MultiData.PostHSFormat )
reader.ReadInt32(); // ??
MultiTileEntry e = allTiles[i];
if ( i == 0 || e.m_Flags != 0 )

View file

@ -201,7 +201,9 @@ namespace Server.Network {
set {
m_Version = value;
if ( value >= m_Version7000 ) {
if ( value >= m_Version7090 ) {
_ProtocolChanges = ProtocolChanges.Version7090;
} else if ( value >= m_Version7000 ) {
_ProtocolChanges = ProtocolChanges.Version7000;
} else if ( value >= m_Version60142 ) {
_ProtocolChanges = ProtocolChanges.Version60142;
@ -229,27 +231,30 @@ namespace Server.Network {
private static ClientVersion m_Version6017 = new ClientVersion( "6.0.1.7" );
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 ProtocolChanges _ProtocolChanges;
private enum ProtocolChanges {
NewSpellbook = 0x00000001,
DamagePacket = 0x00000002,
Unpack = 0x00000004,
BuffIcon = 0x00000008,
NewHaven = 0x00000010,
ContainerGridLines = 0x00000020,
NewSpellbook = 0x00000001,
DamagePacket = 0x00000002,
Unpack = 0x00000004,
BuffIcon = 0x00000008,
NewHaven = 0x00000010,
ContainerGridLines = 0x00000020,
ExtendedSupportedFeatures = 0x00000040,
StygianAbyss = 0x00000080,
StygianAbyss = 0x00000080,
HighSeas = 0x00000100,
Version400a = NewSpellbook,
Version407a = Version400a | DamagePacket,
Version500a = Version407a | Unpack,
Version502b = Version500a | BuffIcon,
Version6000 = Version502b | NewHaven,
Version6017 = Version6000 | ContainerGridLines,
Version60142 = Version6017 | ExtendedSupportedFeatures,
Version7000 = Version60142 | StygianAbyss
Version400a = NewSpellbook,
Version407a = Version400a | DamagePacket,
Version500a = Version407a | Unpack,
Version502b = Version500a | BuffIcon,
Version6000 = Version502b | NewHaven,
Version6017 = Version6000 | ContainerGridLines,
Version60142 = Version6017 | ExtendedSupportedFeatures,
Version7000 = Version60142 | StygianAbyss,
Version7090 = Version7000 | HighSeas
}
public bool NewSpellbook { get { return ((_ProtocolChanges & ProtocolChanges.NewSpellbook) != 0); } }
@ -260,6 +265,7 @@ namespace Server.Network {
public bool ContainerGridLines { get { return ((_ProtocolChanges & ProtocolChanges.ContainerGridLines) != 0); } }
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 IsUOTDClient {
get {

View file

@ -310,7 +310,17 @@ namespace Server.Network
public DisplayBuyList( Mobile vendor ) : base( 0x24, 7 )
{
m_Stream.Write( (int)vendor.Serial );
m_Stream.Write( (short)0x30 );//buy window id?
m_Stream.Write( (short) 0x30 ); // buy window id?
}
}
public sealed class DisplayBuyListHS : Packet
{
public DisplayBuyListHS( Mobile vendor ) : base( 0x24, 9 )
{
m_Stream.Write( (int)vendor.Serial );
m_Stream.Write( (short) 0x30 ); // buy window id?
m_Stream.Write( (short) 0x00 );
}
}
@ -1112,6 +1122,47 @@ namespace Server.Network
}
}
public sealed class WorldItemHS : Packet
{
public WorldItemHS( Item item ) : base( 0xF3, 26 )
{
m_Stream.Write( (short) 0x1 );
int itemID = item.ItemID;
if ( item is BaseMulti ) {
m_Stream.Write( (byte) 0x02 );
itemID &= 0x3FFF;
} else {
m_Stream.Write( (byte) 0x00 );
itemID &= 0x7FFF;
}
m_Stream.Write( (int) item.Serial );
m_Stream.Write( (short) itemID );
m_Stream.Write( (byte) item.Direction );
int amount = item.Amount;
m_Stream.Write( (short) amount );
m_Stream.Write( (short) amount );
Point3D loc = item.Location;
int x = loc.m_X & 0x7FFF;
int y = loc.m_Y & 0x3FFF;
m_Stream.Write( (short) x );
m_Stream.Write( (short) y );
m_Stream.Write( (sbyte) loc.m_Z );
m_Stream.Write( (byte) item.Light );
m_Stream.Write( (short) item.Hue );
m_Stream.Write( (byte) item.GetPacketFlags() );
m_Stream.Write( (short) 0x00 ); // ??
}
}
public sealed class LiftRej : Packet
{
public LiftRej( LRReason reason ) : base( 0x27, 2 )
@ -1518,6 +1569,16 @@ namespace Server.Network
}
}
public sealed class DisplaySpellbookHS : Packet
{
public DisplaySpellbookHS( Item book ) : base( 0x24, 9 )
{
m_Stream.Write( (int) book.Serial );
m_Stream.Write( (short) -1 );
m_Stream.Write( (short) 0x7D );
}
}
public sealed class NewSpellbookContent : Packet
{
public NewSpellbookContent( Item item, int graphic, int offset, ulong content ) : base( 0xBF )
@ -1614,6 +1675,16 @@ namespace Server.Network
}
}
public sealed class ContainerDisplayHS : Packet
{
public ContainerDisplayHS( Container c ) : base( 0x24, 9 )
{
m_Stream.Write( (int) c.Serial );
m_Stream.Write( (short) c.GumpID );
m_Stream.Write( (short) 0x7D );
}
}
public sealed class ContainerContentUpdate : Packet
{
public ContainerContentUpdate( Item item ) : base( 0x25, 20 )

View file

@ -199,6 +199,13 @@ namespace Server
public class TileData
{
public static bool PostHSFormat {
get { return _PostHSFormat; }
set { _PostHSFormat = value; }
}
private static bool _PostHSFormat = false;
private static LandData[] m_LandData;
private static ItemData[] m_ItemData;
@ -241,42 +248,82 @@ namespace Server
{
BinaryReader bin = new BinaryReader( fs );
m_LandData = new LandData[0x4000];
if ( _PostHSFormat ) {
m_LandData = new LandData[0x4000];
for ( int i = 0; i < 0x4000; ++i )
{
if ( (i & 0x1F) == 0 )
for ( int i = 0; i < 0x4000; ++i )
{
bin.ReadInt32(); // header
if ( i == 1 || ( i > 0 && (i & 0x1F) == 0 ) )
{
bin.ReadInt32(); // header
}
TileFlag flags = (TileFlag)bin.ReadInt64();
bin.ReadInt16(); // skip 2 bytes -- textureID
m_LandData[i] = new LandData( ReadNameString( bin ), flags );
}
TileFlag flags = (TileFlag)bin.ReadInt32();
bin.ReadInt16(); // skip 2 bytes -- textureID
m_ItemData = new ItemData[0x8000];
m_LandData[i] = new LandData( ReadNameString( bin ), flags );
}
m_ItemData = new ItemData[0x4000];
for ( int i = 0; i < 0x4000; ++i )
{
if ( (i & 0x1F) == 0 )
for ( int i = 0; i < 0x8000; ++i )
{
bin.ReadInt32(); // header
if ( (i & 0x1F) == 0 )
{
bin.ReadInt32(); // header
}
TileFlag flags = (TileFlag)bin.ReadInt64();
int weight = bin.ReadByte();
int quality = bin.ReadByte();
bin.ReadInt16();
bin.ReadByte();
int quantity = bin.ReadByte();
bin.ReadInt32();
bin.ReadByte();
int value = bin.ReadByte();
int height = bin.ReadByte();
m_ItemData[i] = new ItemData( ReadNameString( bin ), flags, weight, quality, quantity, value, height );
}
} else {
m_LandData = new LandData[0x4000];
for ( int i = 0; i < 0x4000; ++i )
{
if ( (i & 0x1F) == 0 )
{
bin.ReadInt32(); // header
}
TileFlag flags = (TileFlag)bin.ReadInt32();
bin.ReadInt16(); // skip 2 bytes -- textureID
m_LandData[i] = new LandData( ReadNameString( bin ), flags );
}
TileFlag flags = (TileFlag)bin.ReadInt32();
int weight = bin.ReadByte();
int quality = bin.ReadByte();
bin.ReadInt16();
bin.ReadByte();
int quantity = bin.ReadByte();
bin.ReadInt32();
bin.ReadByte();
int value = bin.ReadByte();
int height = bin.ReadByte();
m_ItemData = new ItemData[0x4000];
m_ItemData[i] = new ItemData( ReadNameString( bin ), flags, weight, quality, quantity, value, height );
for ( int i = 0; i < 0x4000; ++i )
{
if ( (i & 0x1F) == 0 )
{
bin.ReadInt32(); // header
}
TileFlag flags = (TileFlag)bin.ReadInt32();
int weight = bin.ReadByte();
int quality = bin.ReadByte();
bin.ReadInt16();
bin.ReadByte();
int quantity = bin.ReadByte();
bin.ReadInt32();
bin.ReadByte();
int value = bin.ReadByte();
int height = bin.ReadByte();
m_ItemData[i] = new ItemData( ReadNameString( bin ), flags, weight, quality, quantity, value, height );
}
}
}
}