Fix extended order info not being saved for vehicle current order.

This fixes desync and related issues when loading savegames where
extended order info is used.
This commit is contained in:
Jonathan G Rennison
2016-10-11 19:01:16 +01:00
parent 08fb60d314
commit 4c74bda0af
3 changed files with 31 additions and 2 deletions

View File

@@ -934,6 +934,33 @@ static void Ptrs_VEHS()
}
}
const SaveLoad *GetOrderExtraInfoDescription();
void Save_VEOX()
{
/* save extended order info for vehicle current order */
Vehicle *v;
FOR_ALL_VEHICLES(v) {
if (v->current_order.extra) {
SlSetArrayIndex(v->index);
SlObject(v->current_order.extra.get(), GetOrderExtraInfoDescription());
}
}
}
void Load_VEOX()
{
/* load extended order info for vehicle current order */
int index;
while ((index = SlIterateArray()) != -1) {
Vehicle *v = Vehicle::GetIfValid(index);
assert(v != NULL);
v->current_order.AllocExtraInfo();
SlObject(v->current_order.extra.get(), GetOrderExtraInfoDescription());
}
}
extern const ChunkHandler _veh_chunk_handlers[] = {
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, NULL, CH_SPARSE_ARRAY | CH_LAST},
{ 'VEHS', Save_VEHS, Load_VEHS, Ptrs_VEHS, NULL, CH_SPARSE_ARRAY},
{ 'VEOX', Save_VEOX, Load_VEOX, NULL, NULL, CH_SPARSE_ARRAY | CH_LAST},
};