diff --git a/src/order_backup.h b/src/order_backup.h --- a/src/order_backup.h +++ b/src/order_backup.h @@ -28,12 +28,18 @@ typedef Pool { private: + friend const struct SaveLoad *GetOrderBackupDescription(); ///< Saving and loading of order backups. + friend void Load_BKOR(); ///< Creating empty orders upon savegame loading. + uint32 user; ///< The user that requested the backup. TileIndex tile; ///< Tile of the depot where the order was changed. GroupID group; ///< The group the vehicle was part of. uint16 service_interval; ///< The service interval of the vehicle. @@ -43,17 +49,21 @@ private: VehicleOrderID orderindex; ///< The order-index the vehicle had. Order *orders; ///< The actual orders if the vehicle was not a clone. + /** Creation for savegame restoration. */ + OrderBackup() {} + /** * Create an order backup for the given vehicle. - * @param v The vehicle to make a backup of. + * @param v The vehicle to make a backup of. + * @param user The user that is requesting the backup. */ - OrderBackup(const Vehicle *v); + OrderBackup(const Vehicle *v, uint32 user); /** * Restore the data of this order to the given vehicle. * @param v The vehicle to restore to. */ - void DoRestore(const Vehicle *v); + void DoRestore(Vehicle *v); public: /** Free everything that is allocated. */ @@ -61,23 +71,43 @@ public: /** * Create an order backup for the given vehicle. - * @param v The vehicle to make a backup of. + * @param v The vehicle to make a backup of. + * @param user The user that is requesting the backup. * @note Will automatically remove any previous backups of this user. */ - static void Backup(const Vehicle *v); + static void Backup(const Vehicle *v, uint32 user); /** * Restore the data of this order to the given vehicle. - * @param v The vehicle to restore to. + * @param v The vehicle to restore to. + * @param user The user that built the vehicle, thus wants to restore. * @note After restoration the backup will automatically be removed. */ - static void Restore(const Vehicle *v); + static void Restore(Vehicle *v, uint32 user); + + /** + * Reset an OrderBackup given a tile and user. + * @param tile The tile associated with the OrderBackup. + * @param user The user associated with the OrderBackup. + * @note Must not be used from the GUI! + */ + static void ResetOfUser(TileIndex tile, uint32 user); /** - * Reset the OrderBackups. - * @param tile The tile of the order backup. + * Reset an user's OrderBackup if needed. + * @param user The user associated with the OrderBackup. + * @pre _network_server. + * @note Must not be used from a command. */ - static void Reset(TileIndex tile = INVALID_TILE); + static void ResetUser(uint32 user); + + /** + * Reset the OrderBackups from GUI/game logic. + * @param tile The tile of the order backup. + * @param from_gui Whether the call came from the GUI, i.e. whether + * it must be synced over the network. + */ + static void Reset(TileIndex tile = INVALID_TILE, bool from_gui = true); /** * Clear the group of all backups having this group ID.