Mercurial > hg > openttd
changeset 4831:1965a9c3ce48 draft
(svn r6755) - Fix: Pass the newly created vehicle when checking for articulated engines. As this could result in more parts being added than previously counted, we check to see if we need to allocate more vehicles as we add parts.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Thu, 12 Oct 2006 15:03:19 +0000 |
parents | 4f6ff5b2a5be |
children | 7616105a7370 |
files | train_cmd.c |
diffstat | 1 files changed, 11 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/train_cmd.c +++ b/train_cmd.c @@ -508,10 +508,15 @@ if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return; for (i = 1; i < 10; i++) { - callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, NULL); + callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, v); if (callback == CALLBACK_FAILED || callback == 0xFF) return; + /* Attempt to use pre-allocated vehicles until they run out. This can happen + * if the callback returns different values depending on the cargo type. */ u->next = vl[i]; + if (u->next == NULL) u->next = AllocateVehicle(); + if (u->next == NULL) return; + u = u->next; engine_type = GB(callback, 0, 7); @@ -571,6 +576,8 @@ int x; int y; + memset(&vl, 0, sizeof(vl)); + if (!AllocateVehicles(vl, num_vehicles)) return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME); @@ -742,6 +749,9 @@ if (!(flags & DC_QUERY_COST)) { Vehicle *vl[12]; // Allow for upto 10 artic parts and dual-heads + + memset(&vl, 0, sizeof(vl)); + if (!AllocateVehicles(vl, num_vehicles) || IsOrderPoolFull()) return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);