diff --git a/src/order_backup.cpp b/src/order_backup.cpp --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -25,8 +25,6 @@ INSTANTIATE_POOL_METHODS(OrderBackup) /** Free everything that is allocated. */ OrderBackup::~OrderBackup() { - free(this->name); - if (CleaningPool()) return; Order *o = this->orders; @@ -46,11 +44,9 @@ OrderBackup::OrderBackup(const Vehicle * { this->user = user; this->tile = v->tile; - this->orderindex = v->cur_implicit_order_index; this->group = v->group_id; - this->service_interval = v->service_interval; - if (v->name != NULL) this->name = strdup(v->name); + this->CopyConsistPropertiesFrom(v); /* If we have shared orders, store the vehicle we share the order with. */ if (v->IsOrderListShared()) { @@ -76,10 +72,6 @@ OrderBackup::OrderBackup(const Vehicle * */ void OrderBackup::DoRestore(Vehicle *v) { - /* If we have a custom name, process that */ - v->name = this->name; - this->name = NULL; - /* If we had shared orders, recover that */ if (this->clone != NULL) { DoCommand(0, v->index | CO_SHARE << 30, this->clone->index, DC_EXEC, CMD_CLONE_ORDER); @@ -90,12 +82,11 @@ void OrderBackup::DoRestore(Vehicle *v) InvalidateWindowClassesData(WC_STATION_LIST, 0); } - uint num_orders = v->GetNumOrders(); - if (num_orders != 0) { - v->cur_real_order_index = v->cur_implicit_order_index = this->orderindex % num_orders; - v->UpdateRealOrderIndex(); - } - v->service_interval = this->service_interval; + v->CopyConsistPropertiesFrom(this); + + /* Make sure orders are in range */ + v->UpdateRealOrderIndex(); + v->cur_implicit_order_index = v->cur_real_order_index; /* Restore vehicle group */ DoCommand(0, this->group, v->index, DC_EXEC, CMD_ADD_VEHICLE_GROUP);