mirror of https://github.com/OpenTTD/OpenTTD
(svn r23199) -Fix [FS#4822]: oil rigs that "expired" did not get removed from the station list
parent
7fd1e1df81
commit
fb63543e2a
|
@ -16,6 +16,7 @@
|
||||||
#include "network/network_func.h"
|
#include "network/network_func.h"
|
||||||
#include "order_backup.h"
|
#include "order_backup.h"
|
||||||
#include "vehicle_base.h"
|
#include "vehicle_base.h"
|
||||||
|
#include "window_func.h"
|
||||||
|
|
||||||
OrderBackupPool _order_backup_pool("BackupOrder");
|
OrderBackupPool _order_backup_pool("BackupOrder");
|
||||||
INSTANTIATE_POOL_METHODS(OrderBackup)
|
INSTANTIATE_POOL_METHODS(OrderBackup)
|
||||||
|
@ -84,6 +85,8 @@ void OrderBackup::DoRestore(Vehicle *v)
|
||||||
} else if (this->orders != NULL && OrderList::CanAllocateItem()) {
|
} else if (this->orders != NULL && OrderList::CanAllocateItem()) {
|
||||||
v->orders.list = new OrderList(this->orders, v);
|
v->orders.list = new OrderList(this->orders, v);
|
||||||
this->orders = NULL;
|
this->orders = NULL;
|
||||||
|
/* Make sure buoys/oil rigs are updated in the station list. */
|
||||||
|
InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint num_orders = v->GetNumOrders();
|
uint num_orders = v->GetNumOrders();
|
||||||
|
|
|
@ -51,7 +51,7 @@ public:
|
||||||
uint16 travel_time; ///< How long in ticks the journey to this destination should take.
|
uint16 travel_time; ///< How long in ticks the journey to this destination should take.
|
||||||
|
|
||||||
Order() : refit_cargo(CT_NO_REFIT) {}
|
Order() : refit_cargo(CT_NO_REFIT) {}
|
||||||
~Order() {}
|
~Order();
|
||||||
|
|
||||||
Order(uint32 packed);
|
Order(uint32 packed);
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,19 @@ INSTANTIATE_POOL_METHODS(Order)
|
||||||
OrderListPool _orderlist_pool("OrderList");
|
OrderListPool _orderlist_pool("OrderList");
|
||||||
INSTANTIATE_POOL_METHODS(OrderList)
|
INSTANTIATE_POOL_METHODS(OrderList)
|
||||||
|
|
||||||
|
/** Clean everything up. */
|
||||||
|
Order::~Order()
|
||||||
|
{
|
||||||
|
if (CleaningPool()) return;
|
||||||
|
|
||||||
|
/* We can visit oil rigs and buoys that are not our own. They will be shown in
|
||||||
|
* the list of stations. So, we need to invalidate that window if needed. */
|
||||||
|
if (this->IsType(OT_GOTO_STATION) || this->IsType(OT_GOTO_WAYPOINT)) {
|
||||||
|
BaseStation *bs = BaseStation::GetIfValid(this->GetDestination());
|
||||||
|
if (bs != NULL && bs->owner == OWNER_NONE) InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 'Free' the order
|
* 'Free' the order
|
||||||
* @note ONLY use on "current_order" vehicle orders!
|
* @note ONLY use on "current_order" vehicle orders!
|
||||||
|
@ -367,6 +380,14 @@ void OrderList::InsertOrderAt(Order *new_order, int index)
|
||||||
++this->num_orders;
|
++this->num_orders;
|
||||||
if (!new_order->IsType(OT_IMPLICIT)) ++this->num_manual_orders;
|
if (!new_order->IsType(OT_IMPLICIT)) ++this->num_manual_orders;
|
||||||
this->timetable_duration += new_order->wait_time + new_order->travel_time;
|
this->timetable_duration += new_order->wait_time + new_order->travel_time;
|
||||||
|
|
||||||
|
/* We can visit oil rigs and buoys that are not our own. They will be shown in
|
||||||
|
* the list of stations. So, we need to invalidate that window if needed. */
|
||||||
|
if (new_order->IsType(OT_GOTO_STATION) || new_order->IsType(OT_GOTO_WAYPOINT)) {
|
||||||
|
BaseStation *bs = BaseStation::Get(new_order->GetDestination());
|
||||||
|
if (bs->owner == OWNER_NONE) InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -99,8 +99,12 @@ Station::~Station()
|
||||||
/* Clear the persistent storage. */
|
/* Clear the persistent storage. */
|
||||||
delete this->airport.psa;
|
delete this->airport.psa;
|
||||||
|
|
||||||
|
if (this->owner == OWNER_NONE) {
|
||||||
|
/* Invalidate all in case of oil rigs. */
|
||||||
|
InvalidateWindowClassesData(WC_STATION_LIST, 0);
|
||||||
|
} else {
|
||||||
InvalidateWindowData(WC_STATION_LIST, this->owner, 0);
|
InvalidateWindowData(WC_STATION_LIST, this->owner, 0);
|
||||||
|
}
|
||||||
|
|
||||||
DeleteWindowById(WC_STATION_VIEW, index);
|
DeleteWindowById(WC_STATION_VIEW, index);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue