some ugly but necessary changes to support both pre and post 7.x clients
This commit is contained in:
parent
94d1a17b6f
commit
115e74f44e
6 changed files with 457 additions and 117 deletions
|
|
@ -115,21 +115,28 @@ namespace Server.Commands
|
|||
|
||||
if ( Utility.InUpdateRange( targ, from ) )
|
||||
{
|
||||
if ( targ.CanSee( from ) )
|
||||
{
|
||||
targ.Send( new Network.MobileIncoming( targ, from ) );
|
||||
NetState ns = targ.NetState;
|
||||
|
||||
if ( ObjectPropertyList.Enabled )
|
||||
if ( ns != null ) {
|
||||
if ( targ.CanSee( from ) )
|
||||
{
|
||||
targ.Send( from.OPLPacket );
|
||||
if ( ns.IsPost7000 )
|
||||
ns.Send( new MobileIncoming( targ, from ) );
|
||||
else
|
||||
ns.Send( new MobileIncomingOld( targ, from ) );
|
||||
|
||||
foreach ( Item item in from.Items )
|
||||
targ.Send( item.OPLPacket );
|
||||
if ( ObjectPropertyList.Enabled )
|
||||
{
|
||||
ns.Send( from.OPLPacket );
|
||||
|
||||
foreach ( Item item in from.Items )
|
||||
ns.Send( item.OPLPacket );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ns.Send( from.RemovePacket );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
targ.Send( from.RemovePacket );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ namespace Server.Engines.Craft
|
|||
|
||||
int resIndex = ( context == null ? -1 : context.LastResourceIndex );
|
||||
|
||||
Type resourceType = craftSystem.CraftSubRes.ResType;
|
||||
Type resourceType = craftSystem.CraftSubRes.ResType;
|
||||
|
||||
if ( resIndex > -1 )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3203,8 +3203,13 @@ namespace Server.Mobiles
|
|||
{
|
||||
Type t = m.GetType();
|
||||
|
||||
if ( t == oldType || t == newType )
|
||||
Send( new MobileMoving( m, Notoriety.Compute( this, m ) ) );
|
||||
if ( t == oldType || t == newType ) {
|
||||
if ( this.NetState.IsPost7000 ) {
|
||||
Send( new MobileMoving( m, Notoriety.Compute( this, m ) ) );
|
||||
} else {
|
||||
Send( new MobileMovingOld( m, Notoriety.Compute( this, m ) ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
|
|
|||
296
Server/Mobile.cs
296
Server/Mobile.cs
|
|
@ -1156,8 +1156,13 @@ namespace Server
|
|||
m_Aggressors.RemoveAt( i );
|
||||
info.Free();
|
||||
|
||||
if( m_NetState != null && this.CanSee( attacker ) && Utility.InUpdateRange( m_Location, attacker.m_Location ) )
|
||||
m_NetState.Send( new MobileIncoming( this, attacker ) );
|
||||
if( m_NetState != null && this.CanSee( attacker ) && Utility.InUpdateRange( m_Location, attacker.m_Location ) ) {
|
||||
if ( m_NetState.IsPost7000 ) {
|
||||
m_NetState.Send( new MobileIncoming( this, attacker ) );
|
||||
} else {
|
||||
m_NetState.Send( new MobileIncomingOld( this, attacker ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1176,8 +1181,13 @@ namespace Server
|
|||
m_Aggressed.RemoveAt( i );
|
||||
info.Free();
|
||||
|
||||
if( m_NetState != null && this.CanSee( defender ) && Utility.InUpdateRange( m_Location, defender.m_Location ) )
|
||||
m_NetState.Send( new MobileIncoming( this, defender ) );
|
||||
if( m_NetState != null && this.CanSee( defender ) && Utility.InUpdateRange( m_Location, defender.m_Location ) ) {
|
||||
if ( m_NetState.IsPost7000 ) {
|
||||
m_NetState.Send( new MobileIncoming( this, defender ) );
|
||||
} else {
|
||||
m_NetState.Send( new MobileIncomingOld( this, defender ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2375,8 +2385,13 @@ namespace Server
|
|||
{
|
||||
m_Aggressors.Add( AggressorInfo.Create( aggressor, this, criminal ) ); // new AggressorInfo( aggressor, this, criminal, true ) );
|
||||
|
||||
if( this.CanSee( aggressor ) && m_NetState != null )
|
||||
m_NetState.Send( new MobileIncoming( this, aggressor ) );
|
||||
if( this.CanSee( aggressor ) && m_NetState != null ) {
|
||||
if ( m_NetState.IsPost7000 ) {
|
||||
m_NetState.Send( new MobileIncoming( this, aggressor ) );
|
||||
} else {
|
||||
m_NetState.Send( new MobileIncomingOld( this, aggressor ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( Combatant == null )
|
||||
setCombatant = true;
|
||||
|
|
@ -2388,8 +2403,13 @@ namespace Server
|
|||
{
|
||||
aggressor.m_Aggressed.Add( AggressorInfo.Create( aggressor, this, criminal ) ); // new AggressorInfo( aggressor, this, criminal, false ) );
|
||||
|
||||
if( this.CanSee( aggressor ) && m_NetState != null )
|
||||
m_NetState.Send( new MobileIncoming( this, aggressor ) );
|
||||
if( this.CanSee( aggressor ) && m_NetState != null ) {
|
||||
if ( m_NetState.IsPost7000 ) {
|
||||
m_NetState.Send( new MobileIncoming( this, aggressor ) );
|
||||
} else {
|
||||
m_NetState.Send( new MobileIncomingOld( this, aggressor ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( Combatant == null )
|
||||
setCombatant = true;
|
||||
|
|
@ -2419,8 +2439,13 @@ namespace Server
|
|||
m_Aggressed.RemoveAt( i );
|
||||
info.Free();
|
||||
|
||||
if( m_NetState != null && this.CanSee( aggressed ) )
|
||||
m_NetState.Send( new MobileIncoming( this, aggressed ) );
|
||||
if( m_NetState != null && this.CanSee( aggressed ) ) {
|
||||
if ( m_NetState.IsPost7000 ) {
|
||||
m_NetState.Send( new MobileIncoming( this, aggressed ) );
|
||||
} else {
|
||||
m_NetState.Send( new MobileIncomingOld( this, aggressed ) );
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -2445,8 +2470,13 @@ namespace Server
|
|||
m_Aggressors.RemoveAt( i );
|
||||
info.Free();
|
||||
|
||||
if( m_NetState != null && this.CanSee( aggressor ) )
|
||||
m_NetState.Send( new MobileIncoming( this, aggressor ) );
|
||||
if( m_NetState != null && this.CanSee( aggressor ) ) {
|
||||
if ( m_NetState.IsPost7000 ) {
|
||||
m_NetState.Send( new MobileIncoming( this, aggressor ) );
|
||||
} else {
|
||||
m_NetState.Send( new MobileIncomingOld( this, aggressor ) );
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -2921,7 +2951,11 @@ namespace Server
|
|||
return true;
|
||||
}
|
||||
|
||||
private static Packet[] m_MovingPacketCache = new Packet[8];
|
||||
private static Packet[][] m_MovingPacketCache = new Packet[2][]
|
||||
{
|
||||
new Packet[8],
|
||||
new Packet[8]
|
||||
};
|
||||
|
||||
private bool m_Pushing;
|
||||
|
||||
|
|
@ -3148,11 +3182,6 @@ namespace Server
|
|||
|
||||
TimeSpan delay = ComputeMovementSpeed( d );
|
||||
|
||||
/*if ( Mounted )
|
||||
delay = ( d & Direction.Running ) != 0 ? m_RunMount : m_WalkMount;
|
||||
else
|
||||
delay = ( d & Direction.Running ) != 0 ? m_RunFoot : m_WalkFoot;*/
|
||||
|
||||
DateTime end;
|
||||
|
||||
if( m_MoveRecords.Count > 0 )
|
||||
|
|
@ -3205,10 +3234,11 @@ namespace Server
|
|||
|
||||
eable.Free();
|
||||
|
||||
Packet[] cache = m_MovingPacketCache;
|
||||
Packet[][] cache = m_MovingPacketCache;
|
||||
|
||||
for( int i = 0; i < cache.Length; ++i )
|
||||
Packet.Release( ref cache[i] );
|
||||
for( int j = 0; j < cache[i].Length; ++j )
|
||||
Packet.Release( ref cache[i][j] );
|
||||
|
||||
for( int i = 0; i < m_MoveList.Count; ++i )
|
||||
{
|
||||
|
|
@ -3221,11 +3251,21 @@ namespace Server
|
|||
|
||||
if( ns != null && Utility.InUpdateRange( m_Location, m.m_Location ) && m.CanSee( this ) )
|
||||
{
|
||||
int noto = Notoriety.Compute( m, this );
|
||||
Packet p = cache[noto];
|
||||
Packet p = null;
|
||||
|
||||
if( p == null )
|
||||
cache[noto] = p = Packet.Acquire( new MobileMoving( this, noto ) );
|
||||
if ( ns.IsPost7000 ) {
|
||||
int noto = Notoriety.Compute( m, this );
|
||||
p = cache[0][noto];
|
||||
|
||||
if( p == null )
|
||||
cache[0][noto] = p = Packet.Acquire( new MobileMoving( this, noto ) );
|
||||
} else {
|
||||
int noto = Notoriety.Compute( m, this );
|
||||
p = cache[1][noto];
|
||||
|
||||
if( p == null )
|
||||
cache[1][noto] = p = Packet.Acquire( new MobileMovingOld( this, noto ) );
|
||||
}
|
||||
|
||||
ns.Send( p );
|
||||
}
|
||||
|
|
@ -3239,7 +3279,8 @@ namespace Server
|
|||
}
|
||||
|
||||
for( int i = 0; i < cache.Length; ++i )
|
||||
Packet.Release( ref cache[i] );
|
||||
for( int j = 0; j < cache[i].Length; ++j )
|
||||
Packet.Release( ref cache[i][j] );
|
||||
|
||||
if( m_MoveList.Count > 0 )
|
||||
m_MoveList.Clear();
|
||||
|
|
@ -3257,10 +3298,12 @@ namespace Server
|
|||
{
|
||||
return ComputeMovementSpeed( this.Direction, false );
|
||||
}
|
||||
|
||||
public TimeSpan ComputeMovementSpeed( Direction dir )
|
||||
{
|
||||
return ComputeMovementSpeed( dir, true );
|
||||
}
|
||||
|
||||
public virtual TimeSpan ComputeMovementSpeed( Direction dir, bool checkTurning )
|
||||
{
|
||||
TimeSpan delay;
|
||||
|
|
@ -6676,14 +6719,16 @@ namespace Server
|
|||
|
||||
if( CanSee( m ) && Utility.InUpdateRange( m_Location, m.m_Location ) )
|
||||
{
|
||||
ns.Send( new MobileIncoming( this, m ) );
|
||||
|
||||
if ( ns.IsPost7000 ) {
|
||||
ns.Send( new MobileIncoming( this, m ) );
|
||||
|
||||
if ( m.Poisoned )
|
||||
ns.Send( new HealthbarPoison( m ) );
|
||||
|
||||
if ( m.Blessed || m.YellowHealthbar )
|
||||
ns.Send( new HealthbarYellow( m ) );
|
||||
} else {
|
||||
ns.Send( new MobileIncomingOld( this, m ) );
|
||||
}
|
||||
|
||||
if( m.IsDeadBondedPet )
|
||||
|
|
@ -6743,17 +6788,19 @@ namespace Server
|
|||
|
||||
NetState ns = m_NetState;
|
||||
|
||||
if( m_Map != null )
|
||||
if( ns != null && m_Map != null )
|
||||
{
|
||||
if( ns != null && m_Map != null )
|
||||
{
|
||||
ns.Sequence = 0;
|
||||
ns.Send( new MapChange( this ) );
|
||||
ns.Send( new MapPatches() );
|
||||
ns.Send( SeasonChange.Instantiate( GetSeason(), true ) );
|
||||
ns.Sequence = 0;
|
||||
ns.Send( new MapChange( this ) );
|
||||
ns.Send( new MapPatches() );
|
||||
ns.Send( SeasonChange.Instantiate( GetSeason(), true ) );
|
||||
|
||||
if ( ns.IsPost7000 )
|
||||
ns.Send( new MobileUpdate( this ) );
|
||||
ClearFastwalkStack();
|
||||
}
|
||||
else
|
||||
ns.Send( new MobileUpdateOld( this ) );
|
||||
|
||||
ClearFastwalkStack();
|
||||
}
|
||||
|
||||
if( ns != null )
|
||||
|
|
@ -6764,10 +6811,17 @@ namespace Server
|
|||
ns.Sequence = 0;
|
||||
ClearFastwalkStack();
|
||||
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
CheckLightLevels( true );
|
||||
Send( new MobileUpdate( this ) );
|
||||
if ( ns.IsPost7000 ) {
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
CheckLightLevels( true );
|
||||
Send( new MobileUpdate( this ) );
|
||||
} else {
|
||||
Send( new MobileIncomingOld( this, this ) );
|
||||
Send( new MobileUpdateOld( this ) );
|
||||
CheckLightLevels( true );
|
||||
Send( new MobileUpdateOld( this ) );
|
||||
}
|
||||
}
|
||||
|
||||
SendEverything();
|
||||
|
|
@ -6778,10 +6832,17 @@ namespace Server
|
|||
ns.Sequence = 0;
|
||||
ClearFastwalkStack();
|
||||
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( SupportedFeatures.Instantiate( ns ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
Send( new MobileAttributes( this ) );
|
||||
if ( ns.IsPost7000 ) {
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( SupportedFeatures.Instantiate( ns ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
Send( new MobileAttributes( this ) );
|
||||
} else {
|
||||
Send( new MobileIncomingOld( this, this ) );
|
||||
Send( SupportedFeatures.Instantiate( ns ) );
|
||||
Send( new MobileUpdateOld( this ) );
|
||||
Send( new MobileAttributes( this ) );
|
||||
}
|
||||
}
|
||||
|
||||
OnMapChange( oldMap );
|
||||
|
|
@ -7665,13 +7726,31 @@ namespace Server
|
|||
if( m_Female )
|
||||
flags |= 0x02;
|
||||
|
||||
if( m_NetState.IsPost7000 ) {
|
||||
if( m_Flying ) {
|
||||
flags |= 0x04;
|
||||
}
|
||||
} else if( m_Poison != null ) {
|
||||
if( m_Flying )
|
||||
flags |= 0x04;
|
||||
|
||||
if( m_Blessed || m_YellowHealthbar )
|
||||
flags |= 0x08;
|
||||
|
||||
if( m_Warmode )
|
||||
flags |= 0x40;
|
||||
|
||||
if( m_Hidden )
|
||||
flags |= 0x80;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
// Pre-7.0.0.0 Packet Flags
|
||||
public virtual int GetOldPacketFlags()
|
||||
{
|
||||
int flags = 0x0;
|
||||
|
||||
if( m_Female )
|
||||
flags |= 0x02;
|
||||
|
||||
if( m_Poison != null )
|
||||
flags |= 0x04;
|
||||
}
|
||||
|
||||
if( m_Blessed || m_YellowHealthbar )
|
||||
flags |= 0x08;
|
||||
|
|
@ -7789,7 +7868,10 @@ namespace Server
|
|||
}
|
||||
else
|
||||
{
|
||||
state.Send( new MobileIncoming( state.Mobile, this ) );
|
||||
if ( state.IsPost7000 )
|
||||
state.Send( new MobileIncoming( state.Mobile, this ) );
|
||||
else
|
||||
state.Send( new MobileIncomingOld( state.Mobile, this ) );
|
||||
|
||||
if( IsDeadBondedPet )
|
||||
state.Send( new BondedStatus( 0, m_Serial, 1 ) );
|
||||
|
|
@ -8799,7 +8881,12 @@ namespace Server
|
|||
ns.Send( new MapChange( this ) );
|
||||
ns.Send( new MapPatches() );
|
||||
ns.Send( SeasonChange.Instantiate( GetSeason(), true ) );
|
||||
ns.Send( new MobileUpdate( this ) );
|
||||
|
||||
if ( ns.IsPost7000 )
|
||||
ns.Send( new MobileUpdate( this ) );
|
||||
else
|
||||
ns.Send( new MobileUpdate( this ) );
|
||||
|
||||
ClearFastwalkStack();
|
||||
}
|
||||
}
|
||||
|
|
@ -8816,10 +8903,17 @@ namespace Server
|
|||
ns.Sequence = 0;
|
||||
ClearFastwalkStack();
|
||||
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
CheckLightLevels( true );
|
||||
Send( new MobileUpdate( this ) );
|
||||
if ( ns.IsPost7000 ) {
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
CheckLightLevels( true );
|
||||
Send( new MobileUpdate( this ) );
|
||||
} else {
|
||||
Send( new MobileIncomingOld( this, this ) );
|
||||
Send( new MobileUpdateOld( this ) );
|
||||
CheckLightLevels( true );
|
||||
Send( new MobileUpdateOld( this ) );
|
||||
}
|
||||
}
|
||||
|
||||
SendEverything();
|
||||
|
|
@ -8830,10 +8924,17 @@ namespace Server
|
|||
ns.Sequence = 0;
|
||||
ClearFastwalkStack();
|
||||
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( SupportedFeatures.Instantiate( ns ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
Send( new MobileAttributes( this ) );
|
||||
if ( ns.IsPost7000 ) {
|
||||
Send( new MobileIncoming( this, this ) );
|
||||
Send( SupportedFeatures.Instantiate( ns ) );
|
||||
Send( new MobileUpdate( this ) );
|
||||
Send( new MobileAttributes( this ) );
|
||||
} else {
|
||||
Send( new MobileIncomingOld( this, this ) );
|
||||
Send( SupportedFeatures.Instantiate( ns ) );
|
||||
Send( new MobileUpdateOld( this ) );
|
||||
Send( new MobileAttributes( this ) );
|
||||
}
|
||||
}
|
||||
|
||||
OnMapChange( oldMap );
|
||||
|
|
@ -8869,7 +8970,12 @@ namespace Server
|
|||
if( isTeleport && m_NetState != null )
|
||||
{
|
||||
m_NetState.Sequence = 0;
|
||||
m_NetState.Send( new MobileUpdate( this ) );
|
||||
|
||||
if ( m_NetState.IsPost7000 )
|
||||
m_NetState.Send( new MobileUpdate( this ) );
|
||||
else
|
||||
m_NetState.Send( new MobileUpdateOld( this ) );
|
||||
|
||||
ClearFastwalkStack();
|
||||
}
|
||||
|
||||
|
|
@ -8926,14 +9032,16 @@ namespace Server
|
|||
|
||||
if( (isTeleport || !inOldRange) && m.m_NetState != null && m.CanSee( this ) )
|
||||
{
|
||||
m.m_NetState.Send( new MobileIncoming( m, this ) );
|
||||
|
||||
if ( m.m_NetState.IsPost7000 ) {
|
||||
m.m_NetState.Send( new MobileIncoming( m, this ) );
|
||||
|
||||
if ( m_Poison != null )
|
||||
m.m_NetState.Send( new HealthbarPoison( this ) );
|
||||
|
||||
if ( m_Blessed || m_YellowHealthbar )
|
||||
m.m_NetState.Send( new HealthbarYellow( this ) );
|
||||
} else {
|
||||
m.m_NetState.Send( new MobileIncomingOld( m, this ) );
|
||||
}
|
||||
|
||||
if( IsDeadBondedPet )
|
||||
|
|
@ -8950,14 +9058,16 @@ namespace Server
|
|||
|
||||
if( !inOldRange && CanSee( m ) )
|
||||
{
|
||||
ourState.Send( new MobileIncoming( this, m ) );
|
||||
|
||||
if ( ourState.IsPost7000 ) {
|
||||
ourState.Send( new MobileIncoming( this, m ) );
|
||||
|
||||
if ( m.Poisoned )
|
||||
ourState.Send( new HealthbarPoison( m ) );
|
||||
|
||||
if ( m.Blessed || m.YellowHealthbar )
|
||||
ourState.Send( new HealthbarYellow( m ) );
|
||||
} else {
|
||||
ourState.Send( new MobileIncomingOld( this, m ) );
|
||||
}
|
||||
|
||||
if( m.IsDeadBondedPet )
|
||||
|
|
@ -8985,14 +9095,16 @@ namespace Server
|
|||
{
|
||||
if( (isTeleport || !Utility.InUpdateRange( oldLocation, ns.Mobile.Location )) && ns.Mobile.CanSee( this ) )
|
||||
{
|
||||
ns.Send( new MobileIncoming( ns.Mobile, this ) );
|
||||
|
||||
if ( ns.IsPost7000 ) {
|
||||
ns.Send( new MobileIncoming( ns.Mobile, this ) );
|
||||
|
||||
if ( m_Poison != null )
|
||||
ns.Send( new HealthbarPoison( this ) );
|
||||
|
||||
if ( m_Blessed || m_YellowHealthbar )
|
||||
ns.Send( new HealthbarYellow( this ) );
|
||||
} else {
|
||||
ns.Send( new MobileIncomingOld( ns.Mobile, this ) );
|
||||
}
|
||||
|
||||
if( IsDeadBondedPet )
|
||||
|
|
@ -9322,14 +9434,16 @@ namespace Server
|
|||
{
|
||||
if( state.Mobile.CanSee( this ) )
|
||||
{
|
||||
state.Send( new MobileIncoming( state.Mobile, this ) );
|
||||
|
||||
if ( state.IsPost7000 ) {
|
||||
state.Send( new MobileIncoming( state.Mobile, this ) );
|
||||
|
||||
if ( m_Poison != null )
|
||||
state.Send( new HealthbarPoison( this ) );
|
||||
|
||||
if ( m_Blessed || m_YellowHealthbar )
|
||||
state.Send( new HealthbarYellow( this ) );
|
||||
} else {
|
||||
state.Send( new MobileIncomingOld( state.Mobile, this ) );
|
||||
}
|
||||
|
||||
if( IsDeadBondedPet )
|
||||
|
|
@ -9852,12 +9966,13 @@ namespace Server
|
|||
sendFacialHair = true;
|
||||
}
|
||||
|
||||
Packet[] cache = m_MovingPacketCache;
|
||||
Packet[][] cache = m_MovingPacketCache;
|
||||
|
||||
if( sendMoving || sendNonlocalMoving )
|
||||
if( sendMoving || sendNonlocalMoving || sendHealthbarPoison || sendHealthbarYellow )
|
||||
{
|
||||
for( int i = 0; i < cache.Length; ++i )
|
||||
Packet.Release( ref cache[i] );
|
||||
for( int j = 0; j < cache[i].Length; ++j )
|
||||
Packet.Release( ref cache[i][j] );
|
||||
}
|
||||
|
||||
NetState ourState = m.m_NetState;
|
||||
|
|
@ -9867,18 +9982,23 @@ namespace Server
|
|||
if( sendUpdate )
|
||||
{
|
||||
ourState.Sequence = 0;
|
||||
ourState.Send( new MobileUpdate( m ) );
|
||||
|
||||
if ( ourState.IsPost7000 )
|
||||
ourState.Send( new MobileUpdate( m ) );
|
||||
else
|
||||
ourState.Send( new MobileUpdateOld( m ) );
|
||||
|
||||
ClearFastwalkStack();
|
||||
}
|
||||
|
||||
if( sendIncoming )
|
||||
ourState.Send( new MobileIncoming( m, m ) );
|
||||
|
||||
if ( ourState.IsPost7000 ) {
|
||||
if( sendIncoming )
|
||||
ourState.Send( new MobileIncoming( m, m ) );
|
||||
|
||||
if( sendMoving )
|
||||
{
|
||||
int noto = Notoriety.Compute( m, m );
|
||||
ourState.Send( cache[noto] = Packet.Acquire( new MobileMoving( m, noto ) ) );
|
||||
ourState.Send( cache[0][noto] = Packet.Acquire( new MobileMoving( m, noto ) ) );
|
||||
}
|
||||
|
||||
if ( sendHealthbarPoison )
|
||||
|
|
@ -9887,10 +10007,13 @@ namespace Server
|
|||
if ( sendHealthbarYellow )
|
||||
ourState.Send( new HealthbarYellow( m ) );
|
||||
} else {
|
||||
if( sendIncoming )
|
||||
ourState.Send( new MobileIncomingOld( m, m ) );
|
||||
|
||||
if( sendMoving || sendHealthbarPoison || sendHealthbarYellow )
|
||||
{
|
||||
int noto = Notoriety.Compute( m, m );
|
||||
ourState.Send( cache[noto] = Packet.Acquire( new MobileMoving( m, noto ) ) );
|
||||
ourState.Send( cache[1][noto] = Packet.Acquire( new MobileMovingOld( m, noto ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -9972,7 +10095,11 @@ namespace Server
|
|||
|
||||
if( sendIncoming )
|
||||
{
|
||||
state.Send( new MobileIncoming( beholder, m ) );
|
||||
if ( state.IsPost7000 ) {
|
||||
state.Send( new MobileIncoming( beholder, m ) );
|
||||
} else {
|
||||
state.Send( new MobileIncomingOld( beholder, m ) );
|
||||
}
|
||||
|
||||
if( m.IsDeadBondedPet )
|
||||
{
|
||||
|
|
@ -9988,10 +10115,10 @@ namespace Server
|
|||
{
|
||||
int noto = Notoriety.Compute( beholder, m );
|
||||
|
||||
Packet p = cache[noto];
|
||||
Packet p = cache[0][noto];
|
||||
|
||||
if( p == null )
|
||||
cache[noto] = p = Packet.Acquire( new MobileMoving( m, noto ) );
|
||||
cache[0][noto] = p = Packet.Acquire( new MobileMoving( m, noto ) );
|
||||
|
||||
state.Send( p );
|
||||
}
|
||||
|
|
@ -10013,10 +10140,10 @@ namespace Server
|
|||
{
|
||||
int noto = Notoriety.Compute( beholder, m );
|
||||
|
||||
Packet p = cache[noto];
|
||||
Packet p = cache[1][noto];
|
||||
|
||||
if( p == null )
|
||||
cache[noto] = p = Packet.Acquire( new MobileMoving( m, noto ) );
|
||||
cache[1][noto] = p = Packet.Acquire( new MobileMoving( m, noto ) );
|
||||
|
||||
state.Send( p );
|
||||
}
|
||||
|
|
@ -10093,7 +10220,8 @@ namespace Server
|
|||
if( sendMoving || sendNonlocalMoving || sendHealthbarPoison || sendHealthbarYellow )
|
||||
{
|
||||
for( int i = 0; i < cache.Length; ++i )
|
||||
Packet.Release( ref cache[i] );
|
||||
for( int j = 0; j < cache.Length; ++j )
|
||||
Packet.Release( ref cache[i][j] );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1235,8 +1235,13 @@ namespace Server.Network
|
|||
{
|
||||
Mobile m = state.Mobile;
|
||||
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
state.Send( new MobileIncoming( m, m ) );
|
||||
if ( state.IsPost7000 ) {
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
state.Send( new MobileIncoming( m, m ) );
|
||||
} else {
|
||||
state.Send( new MobileUpdateOld( m ) );
|
||||
state.Send( new MobileIncomingOld( m, m ) );
|
||||
}
|
||||
|
||||
m.SendEverything();
|
||||
|
||||
|
|
@ -1955,26 +1960,50 @@ namespace Server.Network
|
|||
state.Send( SupportedFeatures.Instantiate( state ) );
|
||||
|
||||
state.Sequence = 0;
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
|
||||
m.CheckLightLevels( true );
|
||||
if ( state.IsPost7000 ) {
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
m.CheckLightLevels( true );
|
||||
|
||||
state.Send( new MobileIncoming( m, m ) );
|
||||
//state.Send( new MobileAttributes( m ) );
|
||||
state.Send( new MobileStatus( m, m ) );
|
||||
state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) );
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
|
||||
m.SendEverything();
|
||||
state.Send( new MobileIncoming( m, m ) );
|
||||
//state.Send( new MobileAttributes( m ) );
|
||||
state.Send( new MobileStatus( m, m ) );
|
||||
state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) );
|
||||
|
||||
state.Send( SupportedFeatures.Instantiate( state ) );
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
//state.Send( new MobileAttributes( m ) );
|
||||
state.Send( new MobileStatus( m, m ) );
|
||||
state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) );
|
||||
state.Send( new MobileIncoming( m, m ) );
|
||||
m.SendEverything();
|
||||
|
||||
state.Send( SupportedFeatures.Instantiate( state ) );
|
||||
state.Send( new MobileUpdate( m ) );
|
||||
//state.Send( new MobileAttributes( m ) );
|
||||
state.Send( new MobileStatus( m, m ) );
|
||||
state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) );
|
||||
state.Send( new MobileIncoming( m, m ) );
|
||||
} else {
|
||||
state.Send( new MobileUpdateOld( m ) );
|
||||
state.Send( new MobileUpdateOld( m ) );
|
||||
|
||||
m.CheckLightLevels( true );
|
||||
|
||||
state.Send( new MobileUpdateOld( m ) );
|
||||
|
||||
state.Send( new MobileIncomingOld( m, m ) );
|
||||
//state.Send( new MobileAttributes( m ) );
|
||||
state.Send( new MobileStatus( m, m ) );
|
||||
state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) );
|
||||
|
||||
m.SendEverything();
|
||||
|
||||
state.Send( SupportedFeatures.Instantiate( state ) );
|
||||
state.Send( new MobileUpdateOld( m ) );
|
||||
//state.Send( new MobileAttributes( m ) );
|
||||
state.Send( new MobileStatus( m, m ) );
|
||||
state.Send( Server.Network.SetWarMode.Instantiate( m.Warmode ) );
|
||||
state.Send( new MobileIncomingOld( m, m ) );
|
||||
}
|
||||
|
||||
state.Send( LoginComplete.Instance );
|
||||
state.Send( new CurrentTime() );
|
||||
|
|
|
|||
|
|
@ -1959,7 +1959,7 @@ namespace Server.Network
|
|||
|
||||
public sealed class MobileMoving : Packet
|
||||
{
|
||||
public MobileMoving( Mobile m, int noto/*Mobile beholder, Mobile beheld*/ ) : base( 0x77, 17 )
|
||||
public MobileMoving( Mobile m, int noto ) : base( 0x77, 17 )
|
||||
{
|
||||
Point3D loc = m.Location;
|
||||
|
||||
|
|
@ -1976,7 +1976,31 @@ namespace Server.Network
|
|||
m_Stream.Write( (byte) m.Direction );
|
||||
m_Stream.Write( (short) hue );
|
||||
m_Stream.Write( (byte) m.GetPacketFlags() );
|
||||
m_Stream.Write( (byte) noto );//Notoriety.Compute( beholder, beheld ) );
|
||||
m_Stream.Write( (byte) noto );
|
||||
}
|
||||
}
|
||||
|
||||
// Pre-7.0.0.0 Mobile Moving
|
||||
public sealed class MobileMovingOld : Packet
|
||||
{
|
||||
public MobileMovingOld( Mobile m, int noto ) : base( 0x77, 17 )
|
||||
{
|
||||
Point3D loc = m.Location;
|
||||
|
||||
int hue = m.Hue;
|
||||
|
||||
if ( m.SolidHueOverride >= 0 )
|
||||
hue = m.SolidHueOverride;
|
||||
|
||||
m_Stream.Write( (int) m.Serial );
|
||||
m_Stream.Write( (short) m.Body );
|
||||
m_Stream.Write( (short) loc.m_X );
|
||||
m_Stream.Write( (short) loc.m_Y );
|
||||
m_Stream.Write( (sbyte) loc.m_Z );
|
||||
m_Stream.Write( (byte) m.Direction );
|
||||
m_Stream.Write( (short) hue );
|
||||
m_Stream.Write( (byte) m.GetOldPacketFlags() );
|
||||
m_Stream.Write( (byte) noto );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2953,6 +2977,29 @@ namespace Server.Network
|
|||
}
|
||||
}
|
||||
|
||||
// Pre-7.0.0.0 Mobile Update
|
||||
public sealed class MobileUpdateOld : Packet
|
||||
{
|
||||
public MobileUpdateOld( Mobile m ) : base( 0x20, 19 )
|
||||
{
|
||||
int hue = m.Hue;
|
||||
|
||||
if ( m.SolidHueOverride >= 0 )
|
||||
hue = m.SolidHueOverride;
|
||||
|
||||
m_Stream.Write( (int) m.Serial );
|
||||
m_Stream.Write( (short) m.Body );
|
||||
m_Stream.Write( (byte) 0 );
|
||||
m_Stream.Write( (short) hue );
|
||||
m_Stream.Write( (byte) m.GetOldPacketFlags() );
|
||||
m_Stream.Write( (short) m.X );
|
||||
m_Stream.Write( (short) m.Y );
|
||||
m_Stream.Write( (short) 0 );
|
||||
m_Stream.Write( (byte) m.Direction );
|
||||
m_Stream.Write( (sbyte) m.Z );
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class MobileIncoming : Packet
|
||||
{
|
||||
private static int[] m_DupedLayers = new int[256];
|
||||
|
|
@ -3076,6 +3123,130 @@ namespace Server.Network
|
|||
}
|
||||
}
|
||||
|
||||
// Pre-7.0.0.0 Mobile Incoming
|
||||
public sealed class MobileIncomingOld : Packet
|
||||
{
|
||||
private static int[] m_DupedLayers = new int[256];
|
||||
private static int m_Version;
|
||||
|
||||
public Mobile m_Beheld;
|
||||
|
||||
public MobileIncomingOld( Mobile beholder, Mobile beheld ) : base( 0x78 )
|
||||
{
|
||||
m_Beheld = beheld;
|
||||
++m_Version;
|
||||
|
||||
List<Item> eq = beheld.Items;
|
||||
int count = eq.Count;
|
||||
|
||||
if( beheld.HairItemID > 0 )
|
||||
count++;
|
||||
if( beheld.FacialHairItemID > 0 )
|
||||
count++;
|
||||
|
||||
this.EnsureCapacity( 23 + (count * 9) );
|
||||
|
||||
int hue = beheld.Hue;
|
||||
|
||||
if ( beheld.SolidHueOverride >= 0 )
|
||||
hue = beheld.SolidHueOverride;
|
||||
|
||||
m_Stream.Write( (int) beheld.Serial );
|
||||
m_Stream.Write( (short) beheld.Body );
|
||||
m_Stream.Write( (short) beheld.X );
|
||||
m_Stream.Write( (short) beheld.Y );
|
||||
m_Stream.Write( (sbyte) beheld.Z );
|
||||
m_Stream.Write( (byte) beheld.Direction );
|
||||
m_Stream.Write( (short) hue );
|
||||
m_Stream.Write( (byte) beheld.GetOldPacketFlags() );
|
||||
m_Stream.Write( (byte) Notoriety.Compute( beholder, beheld ) );
|
||||
|
||||
for ( int i = 0; i < eq.Count; ++i )
|
||||
{
|
||||
Item item = eq[i];
|
||||
|
||||
byte layer = (byte) item.Layer;
|
||||
|
||||
if ( !item.Deleted && beholder.CanSee( item ) && m_DupedLayers[layer] != m_Version )
|
||||
{
|
||||
m_DupedLayers[layer] = m_Version;
|
||||
|
||||
hue = item.Hue;
|
||||
|
||||
if ( beheld.SolidHueOverride >= 0 )
|
||||
hue = beheld.SolidHueOverride;
|
||||
|
||||
int itemID = item.ItemID & 0x3FFF;
|
||||
bool writeHue = ( hue != 0 );
|
||||
|
||||
if ( writeHue )
|
||||
itemID |= 0x8000;
|
||||
|
||||
m_Stream.Write( (int) item.Serial );
|
||||
m_Stream.Write( (short) itemID );
|
||||
m_Stream.Write( (byte) layer );
|
||||
|
||||
if ( writeHue )
|
||||
m_Stream.Write( (short) hue );
|
||||
}
|
||||
}
|
||||
|
||||
if( beheld.HairItemID > 0 )
|
||||
{
|
||||
if( m_DupedLayers[(int)Layer.Hair] != m_Version )
|
||||
{
|
||||
m_DupedLayers[(int)Layer.Hair] = m_Version;
|
||||
hue = beheld.HairHue;
|
||||
|
||||
if( beheld.SolidHueOverride >= 0 )
|
||||
hue = beheld.SolidHueOverride;
|
||||
|
||||
int itemID = beheld.HairItemID & 0x3FFF;
|
||||
|
||||
bool writeHue = (hue != 0);
|
||||
|
||||
if( writeHue )
|
||||
itemID |= 0x8000;
|
||||
|
||||
m_Stream.Write( (int)HairInfo.FakeSerial( beheld ) );
|
||||
m_Stream.Write( (short)itemID );
|
||||
m_Stream.Write( (byte)Layer.Hair );
|
||||
|
||||
if( writeHue )
|
||||
m_Stream.Write( (short)hue );
|
||||
}
|
||||
}
|
||||
|
||||
if( beheld.FacialHairItemID > 0 )
|
||||
{
|
||||
if( m_DupedLayers[(int)Layer.FacialHair] != m_Version )
|
||||
{
|
||||
m_DupedLayers[(int)Layer.FacialHair] = m_Version;
|
||||
hue = beheld.FacialHairHue;
|
||||
|
||||
if( beheld.SolidHueOverride >= 0 )
|
||||
hue = beheld.SolidHueOverride;
|
||||
|
||||
int itemID = beheld.FacialHairItemID & 0x3FFF;
|
||||
|
||||
bool writeHue = (hue != 0);
|
||||
|
||||
if( writeHue )
|
||||
itemID |= 0x8000;
|
||||
|
||||
m_Stream.Write( (int)FacialHairInfo.FakeSerial( beheld ) );
|
||||
m_Stream.Write( (short)itemID );
|
||||
m_Stream.Write( (byte)Layer.FacialHair );
|
||||
|
||||
if( writeHue )
|
||||
m_Stream.Write( (short)hue );
|
||||
}
|
||||
}
|
||||
|
||||
m_Stream.Write( (int) 0 ); // terminate
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class AsciiMessage : Packet
|
||||
{
|
||||
public AsciiMessage( Serial serial, int graphic, MessageType type, int hue, int font, string name, string text ) : base( 0x1C )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue