private static bool TryInsertIntoState(DesignState state, int itemID, int x, int y, int z) { MultiComponentList mcl = state.Components; if (x < mcl.Min.X || y < mcl.Min.Y || x > mcl.Max.X || y > mcl.Max.Y) return false; mcl.Add(itemID, x, y, z); state.OnRevised(); return true; }
public static void SendDetails( NetState ns, HouseFoundation house, DesignState state ) { m_SendQueue.Enqueue( new SendQueueEntry( ns, house, state ) ); m_Sync.Set(); }
public DesignState( DesignState toCopy ) { m_Foundation = toCopy.m_Foundation; m_Components = new MultiComponentList( toCopy.m_Components ); m_Revision = toCopy.m_Revision; m_Fixtures = new MultiTileEntry[toCopy.m_Fixtures.Length]; for ( int i = 0; i < m_Fixtures.Length; ++i ) m_Fixtures[i] = toCopy.m_Fixtures[i]; }
public void SetInitialState() { // This is a new house, it has not yet loaded a design state m_Current = new DesignState( this, GetEmptyFoundation() ); m_Design = new DesignState( m_Current ); m_Backup = new DesignState( m_Current ); }
public void EndConfirmCommit( Mobile from ) { if (Deleted || DesignContext.Find(from) == null) return; int oldPrice = Price; int newPrice = oldPrice + 10000 + ((DesignState.Components.List.Length - CurrentState.Components.List.Length) * 500); int cost = newPrice - oldPrice; if ( cost > 0 ) { if ( Banker.Withdraw( from, cost ) ) { from.SendLocalizedMessage( 1060398, cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box. } else { from.SendLocalizedMessage( 1061903 ); // You cannot commit this house design, because you do not have the necessary funds in your bank box to pay for the upgrade. Please back up your design, obtain the required funds, and commit your design again. return; } } else if ( cost < 0 ) { if ( Banker.Deposit( from, -cost ) ) from.SendLocalizedMessage( 1060397, (-cost).ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box. else return; } /* Client chose to commit current design state * - Commit design state * - Construct a copy of the current design state * - Clear visible fixtures * - Melt fixtures from constructed state * - Add melted fixtures from constructed state * - Assign constructed state to foundation * - Update house price * - Remove design context * - Notify the client that customization has ended * - Notify the core that the foundation has changed and should be resent to all clients * - If a signpost is needed, add it * - Eject all from house * - Restore relocated entities */ // Commit design state : Construct a copy of the current design state DesignState copyState = new DesignState( DesignState ); // Commit design state : Clear visible fixtures ClearFixtures( from ); // Commit design state : Melt fixtures from constructed state copyState.MeltFixtures(); // Commit design state : Add melted fixtures from constructed state AddFixtures( from, copyState.Fixtures ); // Commit design state : Assign constructed state to foundation CurrentState = copyState; // Update house price Price = newPrice - 10000; // Remove design context DesignContext.Remove( from ); // Notify the client that customization has ended from.Send( new EndHouseCustomization( this ) ); // Notify the core that the foundation has changed and should be resent to all clients Delta( ItemDelta.Update ); ProcessDelta(); CurrentState.SendDetailedInfoTo( from.NetState ); // If a signpost is needed, add it CheckSignpost(); // Eject all from house from.RevealingAction(); foreach ( Item item in GetItems() ) item.Location = BanLocation; foreach ( Mobile mobile in GetMobiles() ) mobile.Location = BanLocation; // Restore relocated entities RestoreRelocatedEntities(); }
public override void Deserialize( GenericReader reader ) { int version = reader.ReadInt(); switch ( version ) { case 5: case 4: { m_Signpost = reader.ReadItem(); m_SignpostGraphic = reader.ReadInt(); goto case 3; } case 3: { m_Type = (FoundationType)reader.ReadInt(); goto case 2; } case 2: { m_SignHanger = reader.ReadItem(); goto case 1; } case 1: { if ( version < 5 ) m_DefaultPrice = reader.ReadInt(); goto case 0; } case 0: { if ( version < 3 ) m_Type = FoundationType.Stone; if ( version < 4 ) m_SignpostGraphic = 9; m_LastRevision = reader.ReadInt(); m_Fixtures = reader.ReadItemList(); m_Current = new DesignState( this, reader ); m_Design = new DesignState( this, reader ); m_Backup = new DesignState( this, reader ); break; } } base.Deserialize( reader ); }
public static void Designer_Revert( NetState state, IEntity e, EncodedReader pvSrc ) { Mobile from = state.Mobile; DesignContext context = DesignContext.Find( from ); if ( context != null ) { /* Client chose to revert design state to currently visible state * - Revert design state * - Construct a copy of the current visible state * - Freeze fixtures in constructed state * - Assign constructed state to foundation * - If a signpost is needed, add it * - Update revision * - Update client with new state */ // Revert design state : Construct a copy of the current visible state DesignState copyState = new DesignState( context.Foundation.CurrentState ); // Revert design state : Freeze fixtures in constructed state copyState.FreezeFixtures(); // Revert design state : Assign constructed state to foundation context.Foundation.DesignState = copyState; // Revert design state : If a signpost is needed, add it context.Foundation.CheckSignpost(); // Update revision copyState.OnRevised(); // Update client with new state context.Foundation.SendInfoTo( state ); copyState.SendDetailedInfoTo( state ); } }
public static void Designer_Backup( NetState state, IEntity e, EncodedReader pvSrc ) { Mobile from = state.Mobile; DesignContext context = DesignContext.Find( from ); if ( context != null ) { /* Client chose to backup design state * - Construct a copy of the current design state * - Assign constructed state to backup state field */ // Construct a copy of the current design state DesignState copyState = new DesignState( context.Foundation.DesignState ); // Assign constructed state to backup state field context.Foundation.BackupState = copyState; } }
public static void Designer_Clear( NetState state, IEntity e, EncodedReader pvSrc ) { Mobile from = state.Mobile; DesignContext context = DesignContext.Find( from ); if ( context != null ) { /* Client chose to clear the design * - Restore empty foundation * - Construct new design state from empty foundation * - Assign constructed state to foundation * - Update revision * - Update client with new state */ // Restore empty foundation : Construct new design state from empty foundation DesignState newDesign = new DesignState( context.Foundation, context.Foundation.GetEmptyFoundation() ); // Restore empty foundation : Assign constructed state to foundation context.Foundation.DesignState = newDesign; // Update revision newDesign.OnRevised(); // Update client with new state context.Foundation.SendInfoTo( state ); newDesign.SendDetailedInfoTo( state ); } }
public void EndConfirmCommit(Mobile from) { int oldPrice = this.Price; int newPrice = oldPrice + this.CustomizationCost + ((this.DesignState.Components.List.Length - (this.CurrentState.Components.List.Length + this.CurrentState.Fixtures.Length)) * 500); int cost = newPrice - oldPrice; if (!this.Deleted) { // Temporary Fix. We should be booting a client out of customization mode in the delete handler. if (from.AccessLevel >= AccessLevel.GameMaster && cost != 0) { from.SendMessage("{0} gold would have been {1} your bank if you were not a GM.", cost.ToString(), ((cost > 0) ? "withdrawn from" : "deposited into")); } else { if (cost > 0) { if (Banker.Withdraw(from, cost)) { from.SendLocalizedMessage(1060398, cost.ToString()); // ~1_AMOUNT~ gold has been withdrawn from your bank box. } else { from.SendLocalizedMessage(1061903); // You cannot commit this house design, because you do not have the necessary funds in your bank box to pay for the upgrade. Please back up your design, obtain the required funds, and commit your design again. return; } } else if (cost < 0) { if (Banker.Deposit(from, -cost)) from.SendLocalizedMessage(1060397, (-cost).ToString()); // ~1_AMOUNT~ gold has been deposited into your bank box. else return; } } } /* Client chose to commit current design state * - Commit design state * - Construct a copy of the current design state * - Clear visible fixtures * - Melt fixtures from constructed state * - Add melted fixtures from constructed state * - Assign constructed state to foundation * - Update house price * - Remove design context * - Notify the client that customization has ended * - Notify the core that the foundation has changed and should be resent to all clients * - If a signpost is needed, add it * - Eject all from house * - Restore relocated entities */ // Commit design state : Construct a copy of the current design state DesignState copyState = new DesignState(this.DesignState); // Commit design state : Clear visible fixtures this.ClearFixtures(from); // Commit design state : Melt fixtures from constructed state copyState.MeltFixtures(); // Commit design state : Add melted fixtures from constructed state this.AddFixtures(from, copyState.Fixtures); // Commit design state : Assign constructed state to foundation this.CurrentState = copyState; // Update house price this.Price = newPrice - this.CustomizationCost; // Remove design context DesignContext.Remove(from); // Notify the client that customization has ended from.Send(new EndHouseCustomization(this)); // Notify the core that the foundation has changed and should be resent to all clients this.Delta(ItemDelta.Update); this.ProcessDelta(); this.CurrentState.SendDetailedInfoTo(from.NetState); // If a signpost is needed, add it this.CheckSignpost(); // Eject all from house from.RevealingAction(); foreach (Item item in this.GetItems()) item.Location = this.BanLocation; foreach (Mobile mobile in this.GetMobiles()) mobile.Location = this.BanLocation; // Restore relocated entities this.RestoreRelocatedEntities(); }
public void RefreshHouse(Mobile owner) { DesignState copyState = new DesignState(DesignState); // Commit design state : Clear visible fixtures ClearFixtures(owner); // Commit design state : Melt fixtures from constructed state copyState.MeltFixtures(); // Commit design state : Add melted fixtures from constructed state AddFixtures(owner, copyState.Fixtures); // Commit design state : Assign constructed state to foundation CurrentState = copyState; Delta(ItemDelta.Update); ProcessDelta(); CurrentState.SendDetailedInfoTo(owner.NetState); }
public void ECEndConfirmCommit(Mobile from) { if (this.Deleted) return; /* Client chose to commit current design state * - Commit design state * - Construct a copy of the current design state * - Clear visible fixtures * - Melt fixtures from constructed state * - Add melted fixtures from constructed state * - Assign constructed state to foundation * - Update house price * - Remove design context * - Notify the client that customization has ended * - Notify the core that the foundation has changed and should be resent to all clients * - If a signpost is needed, add it * - Eject all from house * - Restore relocated entities */ // Commit design state : Construct a copy of the current design state DesignState copyState = new DesignState(DesignState); // Commit design state : Clear visible fixtures ClearFixtures(from); // Commit design state : Melt fixtures from constructed state copyState.MeltFixtures(); // Commit design state : Add melted fixtures from constructed state AddFixtures(from, copyState.Fixtures); // Commit design state : Assign constructed state to foundation CurrentState = copyState; //// Update house price //Price = newPrice; // Remove design context DesignContext.Remove(from); // Notify the client that customization has ended from.Send(new EndHouseCustomization(this)); // Notify the core that the foundation has changed and should be resent to all clients Delta(ItemDelta.Update); ProcessDelta(); CurrentState.SendDetailedInfoTo(from.NetState); // If a signpost is needed, add it CheckSignpost(); // Eject all from house from.RevealingAction(); foreach (Item item in GetItems()) item.Location = BanLocation; foreach (Mobile mobile in GetMobiles()) mobile.Location = BanLocation; // Restore relocated entities RestoreRelocatedEntities(); }
public override void SetInitialState() { m_Current = new DesignState(this, GetEmptyFoundation()); // explicitly unused in StaticHousing m_Design = null; m_Backup = null; //init the other two design states just so they don't crash the base's serilization MultiComponentList y = new MultiComponentList(m_Current.Components); MultiComponentList x = new MultiComponentList(StaticHouseHelper.GetComponents(m_HouseBlueprintID)); //merge x into y. //first, remove all in y for (int i = y.List.Length - 1; i >= 0; i--) { y.Remove(y.List[i].m_ItemID, y.List[i].m_OffsetX, y.List[i].m_OffsetY, y.List[i].m_OffsetZ); } //then add all the ones we want to the list for (int i = 0; i < x.List.Length; ++i) { y.Add(x.List[i].m_ItemID, x.List[i].m_OffsetX, x.List[i].m_OffsetY, x.List[i].m_OffsetZ,true); } m_Current.Components = y; return; }
public void EndConfirmCommit(Mobile from) { int oldPrice = Price; int newPrice = oldPrice + CustomizationCost + ((DesignState.Components.List.Length - (CurrentState.Components.List.Length + CurrentState.Fixtures.Length)) * 500); int cost = newPrice - oldPrice; if (!Deleted) { // Temporary Fix. We should be booting a client out of customization mode in the delete handler. if (from.AccessLevel >= AccessLevel.GameMaster && cost != 0) { from.SendMessage("Staff may commit freely, no charges or rebates."); } else { Type cType = Expansion == Expansion.T2A ? typeof(Silver) : typeof(Gold); if (cost > 0) { if (Banker.Withdraw(from, cType, cost)) { from.SendMessage("{0:#,0} {1} has been withdrawn from your bank box.", cost, cType.Name); } else { // You cannot commit this house design, because you do not have the necessary funds in your bank box to pay for the upgrade. // Please back up your design, obtain the required funds, and commit your design again. from.SendLocalizedMessage(1061903); return; } } else if (cost < 0) { cost = Math.Abs(cost); if (Banker.Deposit(from, cType, cost)) { from.SendMessage("{0:#,0} {1} has been deposited into your bank box.", cost, cType.Name); } else { return; } } } } /* Client chose to commit current design state * - Commit design state * - Construct a copy of the current design state * - Clear visible fixtures * - Melt fixtures from constructed state * - Add melted fixtures from constructed state * - Assign constructed state to foundation * - Update house price * - Remove design context * - Notify the client that customization has ended * - Notify the core that the foundation has changed and should be resent to all clients * - If a signpost is needed, add it * - Eject all from house * - Restore relocated entities */ // Commit design state : Construct a copy of the current design state var copyState = new DesignState(DesignState); // Commit design state : Clear visible fixtures ClearFixtures(from); // Commit design state : Melt fixtures from constructed state copyState.MeltFixtures(); // Commit design state : Add melted fixtures from constructed state AddFixtures(from, copyState.Fixtures); // Commit design state : Assign constructed state to foundation CurrentState = copyState; // Update house price Price = newPrice - CustomizationCost; // Remove design context DesignContext.Remove(from); // Notify the client that customization has ended from.Send(new EndHouseCustomization(this)); // Notify the core that the foundation has changed and should be resent to all clients Delta(ItemDelta.Update); ProcessDelta(); CurrentState.SendDetailedInfoTo(from.NetState); // If a signpost is needed, add it CheckSignpost(); // Eject all from house from.RevealingAction(); foreach (Item item in GetItems()) { item.Location = BanLocation; } foreach (Mobile mobile in GetMobiles()) { mobile.Location = BanLocation; } // Restore relocated entities RestoreRelocatedEntities(); }
public SendQueueEntry( NetState ns, HouseFoundation foundation, DesignState state ) { m_NetState = ns; m_Serial = foundation.Serial; m_Revision = state.Revision; m_Root = state; MultiComponentList mcl = state.Components; m_xMin = mcl.Min.X; m_yMin = mcl.Min.Y; m_xMax = mcl.Max.X; m_yMax = mcl.Max.Y; m_Tiles = mcl.List; }
public static void Designer_Restore( NetState state, IEntity e, EncodedReader pvSrc ) { Mobile from = state.Mobile; DesignContext context = DesignContext.Find( from ); if ( context != null ) { /* Client chose to restore design to the last backup state * - Restore backup * - Construct new design state from backup state * - Assign constructed state to foundation * - Update revision * - Update client with new state */ // Restore backup : Construct new design state from backup state DesignState backupDesign = new DesignState( context.Foundation.BackupState ); // Restore backup : Assign constructed state to foundation context.Foundation.DesignState = backupDesign; // Update revision; backupDesign.OnRevised(); // Update client with new state context.Foundation.SendInfoTo( state ); backupDesign.SendDetailedInfoTo( state ); } }
public DesignStateGeneral( HouseFoundation house, DesignState state ) : base(0xBF) { EnsureCapacity( 13 ); m_Stream.Write( (short) 0x1D ); m_Stream.Write( (int) house.Serial ); m_Stream.Write( (int) state.Revision ); }
public override void Deserialize(GenericReader reader) { int version = reader.ReadInt(); switch (version) { case 6: { m_flags = (SaveFlags)reader.ReadInt32(); goto case 5; } case 5: { // versions < 6 always read Design & Backup if (version < 6) { m_flags |= SaveFlags.DesignState_Design; m_flags |= SaveFlags.DesignState_Backup; } goto case 4; } case 4: { m_Signpost = reader.ReadItem(); m_SignpostGraphic = reader.ReadInt(); goto case 3; } case 3: { m_Type = (FoundationType)reader.ReadInt(); goto case 2; } case 2: { m_SignHanger = reader.ReadItem(); goto case 1; } case 1: { if (version < 5) m_DefaultPrice = reader.ReadInt(); goto case 0; } case 0: { if (version < 3) m_Type = FoundationType.Stone; if (version < 4) m_SignpostGraphic = 9; m_LastRevision = reader.ReadInt(); m_Fixtures = reader.ReadItemList(); m_Current = new DesignState(this, reader); if ((m_flags & SaveFlags.DesignState_Design) != 0) m_Design = new DesignState(this, reader); if ((m_flags & SaveFlags.DesignState_Backup) != 0) m_Backup = new DesignState(this, reader); break; } } base.Deserialize(reader); }