diff src/train_cmd.cpp @ 18306:21d2cc91c3ce draft

(svn r23142) -Change: [NewGRF v8] Unify the return values of callbacks returning D0xx texts.
author frosch <frosch@openttd.org>
date Tue, 08 Nov 2011 17:24:43 +0000 (2011-11-08)
parents 72e793b46dee
children 1945b084b0dc
line wrap: on
line diff
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -976,8 +976,26 @@
 				/* A failing callback means everything is okay */
 				StringID error = STR_NULL;
 
-				if (callback == 0xFD) error = STR_ERROR_INCOMPATIBLE_RAIL_TYPES;
-				if (callback  < 0xFD) error = GetGRFStringID(head->GetGRFID(), 0xD000 + callback);
+				if (t->GetGRF()->grf_version < 8) {
+					if (callback == 0xFD) error = STR_ERROR_INCOMPATIBLE_RAIL_TYPES;
+					if (callback  < 0xFD) error = GetGRFStringID(head->GetGRFID(), 0xD000 + callback);
+					if (callback >= 0x100) ErrorUnknownCallbackResult(head->GetGRFID(), CBID_TRAIN_ALLOW_WAGON_ATTACH, callback);
+				} else {
+					if (callback < 0x400) {
+						error = GetGRFStringID(head->GetGRFID(), 0xD000 + callback);
+					} else {
+						switch (callback) {
+							case 0x400: // allow
+							case 0x401: // allow if railtypes match (always the case for OpenTTD)
+								break;
+
+							default:    // unknown reason -> disallow
+							case 0x402: // disallow attaching
+								error = STR_ERROR_INCOMPATIBLE_RAIL_TYPES;
+								break;
+						}
+					}
+				}
 
 				if (error != STR_NULL) return_cmd_error(error);
 			}