7 require(dirname(dirname(__FILE__)) . "/inc/config.php");
9 // Load all include files
10 require(PATH . "inc/includes.php");
12 // Load all game classes
13 require(PATH . "inc/classes.php");
15 // Load more include files
16 $_GET['app'] = "ship-simu";
17 require_once(PATH . "inc/selector.php");
19 // Wir tun hier so, als waere schon das Reederei-Objekt generiert und wir wollen
20 // jetzt die Personalliste wiederherstellen
22 $personell = SimulatorPersonell::createSimulatorPersonellByID("SimulatorPersonell@829292aeca3f6bf78c16e25fc4f75c98");
23 } catch (InvalidIDFormatException $e) {
24 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
27 } catch (InvalidArrayCountException $e) {
28 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
31 } catch (NullPointerException $e) {
32 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
35 } catch (NoObjectException $e) {
36 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
39 } catch (MissingMethodException $e) {
40 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
43 } catch (FileIsEmptyException $e) {
44 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
47 } catch (FilePointerNotOpenedException $e) {
48 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
51 } catch (InvalidArrayCountException $e) {
52 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
55 } catch (InvalidMD5ChecksumException $e) {
56 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
59 } catch (InvalidDataLengthException $e) {
60 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
63 } catch (InvalidSimulatorIDException $e) {
64 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
67 } catch (MismatchingCompressorsException $e) {
68 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
71 } catch (ContainerItemIsNullException $e) {
72 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
75 } catch (ContainerItemIsNoArrayException $e) {
76 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
79 } catch (ContainerMaybeDamagedException $e) {
80 die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
85 // Personal-Objekt debuggen
86 if (defined('DEBUG_PERSONELL_OBJ')) {
87 DebugMiddleware::getInstance()->output(sprintf("Das Personal-Objekt sieht wie folgt aus:<br />
89 print_r($personell, true)
94 $harbor = Harbor::createHarbor("Hamburger Hafen");
97 DebugMiddleware::getInstance()->output(sprintf("Der <strong>%s</strong> ist gegründet worden.<br />\n",
98 $harbor->getHarborName()
101 // Hafen-Objekt debuggen
102 if (defined('DEBUG_HARBOR_OBJ')) {
103 DebugMiddleware::getInstance()->output(sprintf("Der <strong>%s</strong> sieht wie folgt aus:<br />
105 $harbor->getHarborName(),
106 print_r($harbor, true)
111 $merchant = Merchant::createMerchant("Namenlos", $harbor);
113 // Array mit Einbauten erstellen
115 'parts' => array( // *** Die zu einbauenden Schiffsteile ***
116 'Motor' => array( // --- Maschinenraum mit Motor ---
117 "Ocean-Power 2000", // Bezeichnung
118 20000, // Pferdestaerken
120 2.5, 2, 3.5 // Abmasse (Breite/Hoehe/Laenge)
122 'Bridge' => array( // --- Kommandobruecke ---
123 26, 2.5, 15 // Abmasse (Breite/Hoehe/Laenge)
125 'CarDeck' => array( // --- Autodecks ---
126 'amount' => 8, // Anzahl Autodecks (einige liegen hintereinander im selben Deck!)
127 'dim' => array( // Abmessung (Breite/Hoehe/Laenge)
131 'TruckDeck' => array( // --- Decks fuer LKW/Busse haben vielleicht ein anderes Belueftgungssystem, etc. ---
132 'amount' => 1, // Anzahl der Decks
133 'dim' => array( // Abmessung (Breite/Hoehe/Laenge)
134 8, 5, 195 // Geht durchs gesamte Schiff!
137 'TrainDeck' => array( // --- Decks fuer Zuege haben Schienen... ---
138 'amount' => 1, // Anzahl der Decks
139 'dim' => array( // Abmessung (Breite/Hoehe/Laenge)
140 8, 4, 195 // Geht durchs gesamte Schiff!
143 'LuxuryCabin' => array( // --- Luxuskabinen ---
144 'amount' => 20, // Anzahl Luxuskabinen im Schiff
145 'rooms' => 4, // Raeume: 2 Schlafzimmer, 1 Auffenthaltszimmer, 1 Bad mit Dusche/Toilette/Waschbecken
146 'bed' => 3, // Anzahl Betten (1 Doppelbett 2 Einzelbetten, Doppel-/Einzelbetten in getrennte Raeume)
147 'dim' => array( // Abmessung der Luxuskabine (Breite/Hoehe/Laenge)
151 'PremierCabin' => array( // --- Mittlere Kabinen ---
152 'amount' => 40, // Anzahl
153 'rooms' => 2, // Raeume: Schlafzimmer, Bad mit Toilette/Waschbecken
154 'bed' => 2, // Anzahl Betten (1 Doppelbett, 1 Einzelbett; gemeinsamer Raum)
155 'dim' => array( // Abmessungen der Kabine (Breite/Hoehe/Laenge)
159 'LowCabin' => array( // --- Untere Kabinen (befinden sich in den Unterbauten) ---
160 'amount' => 90, // Anzahl
161 'rooms' => 1, // Raeume: Schlafzimmer, Waschbecken
162 'bed' => 2, // Anzahl Betten (2 Etagenbetten)
163 'dim' => array( // Abmessungen der Kabine (Breite/Hoehe/Laenge)
167 'EconomyCabin' => array( // --- Unterste Kabinen (befinden sich tief unten im Schiffsbauch) ---
168 'amount' => 140, // Anzahl
169 'rooms' => 1, // Raeume: Schlafzimmer, Waschbecken
170 'bed' => 1, // Anzahl Betten (1 Etagenbett)
171 'dim' => array( // Abmessungen der Kabine (Breite/Hoehe/Laenge)
176 'builds' => array( // *** Welche Oberklasse verwendet werden sollen ***
177 'Motor' => "MaschineRoom",
178 'Bridge' => "BaseUpperStructure",
179 'LuxuryCabin' => "BaseCabin",
180 'PremierCabin' => "BaseCabin",
181 'LowCabin' => "BaseCabin",
182 'EconomyCabin' => "BaseCabin",
183 'CarDeck' => "BaseDeck",
184 'TrainDeck' => "BaseDeck",
185 'TruckDeck' => "BaseDeck"
189 // Preisliste auffuellen
190 foreach ($einbauten['parts'] as $key=>$part) {
191 // Create item array string
193 foreach ($part as $idx=>$itemPart) {
194 if (is_string($itemPart)) {
196 $item .= sprintf("\"%s\", ", $itemPart);
197 } elseif (is_int($itemPart)) {
199 $item .= sprintf("%d, ", $itemPart);
200 } elseif (is_float($itemPart)) {
202 $item .= sprintf("%f, ", $itemPart);
203 } elseif (is_array($itemPart)) {
207 // Go all items through
208 foreach ($itemPart as $idx2=>$subPart) {
209 if (is_int($subPart)) {
210 // Integer again found
211 $item .= sprintf("%d, ", $subPart);
212 } elseif (is_float($subPart)) {
214 $item .= sprintf("%f, ", $subPart);
216 // Unsupport part found
217 die(sprintf("[Main:] Unsupported sub-array element on pos <strong>%d</strong> in array <strong>%s</strong> found: <u>%s</u>", $idx2, $idx, $subPart));
221 // Remove trailing comma
222 $item = substr($item, 0, -2);
224 // Add closing bracket
227 // Unsupport part found
228 die(sprintf("[Main:] Unsupported array element on pos <strong>%d</strong>: <u>%s</u>", $idx, $itemPart));
232 // Remove trailing comma
233 $item = substr($item, 0, -2);
236 $price = mt_rand(5, 12) * 10000;
240 // Generate command for adding objects to a price list
241 $eval = sprintf("\$merchant->addItemToPriceList(%s::create%s(%s), %d);",
249 if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) DebugMiddleware::getInstance()->output(sprintf("[Main:] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
253 // Run the constructed command
255 } catch (ItemNotTradeableException $e) {
256 die(sprintf("[Main:] Die Preisliste des Händlers <strong>%s</strong> kann nicht befüllt werden. Grund: <strong>%s</strong><br />\n",
257 $merchant->getMerchantName(),
263 // Haendler-Objekt debuggen
264 if (defined('DEBUG_MERCHANT_OBJ')) {
265 DebugMiddleware::getInstance()->output(sprintf("Der Händler <strong>%s</strong> sieht wie folgt aus:<br />
267 $merchant->getMerchantName(),
268 print_r($merchant, true)
273 $shipping = ShippingCompany::createShippingCompany("Hanseatic Travel Company", $harbor);
275 // Firmenschef setzen
277 $shipping->setCompanyFounder(CompanyEmployee::createCompanyEmployee("Roland", "Häder", "M", 1977, 9, 26, true, 2000));
278 } catch (BirthdayInvalidException $e) {
279 die(sprintf("[Main:] Reederei-Gründer konnte nicht gesetzt werden. Grund: <strong>%s</strong><br />\n",
284 // Dann mal ausgeben...
285 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> ist von <strong>%s %s</strong> gegründet worden.<br />\n",
286 $shipping->getCompanyName(),
287 $shipping->getFounderInstance()->getSurname(),
288 $shipping->getFounderInstance()->getFamily()
291 // Die Reederei stellt Personal ein und bedient sich an der $personell-Instanz
293 $shipping->recruitRandomEmployees(10, $personell);
294 } catch (ToMuchEmployeesException $e) {
295 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal einstellen. Grund: <strong>%s</strong><br />\n",
296 $shipping->getCompanyName(),
299 } catch (OutOfBoundsException $e) {
300 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal einstellen. Grund: <strong>%s</strong><br />\n",
301 $shipping->getCompanyName(),
306 // Anzahl Personal ausgeben
307 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> hat nun <strong>%d</strong> weitere Mitarbeiter.<br />\n",
308 $shipping->getCompanyName(),
309 $shipping->getTotalEmployee()
312 // Dann die ersten 3 Werften in den Hafen einbauen und Personal zuweisen
313 $shipping->createShipyardInHarbor("Werft 1", $harbor);
314 $shipping->createShipyardInHarbor("Werft 2", $harbor);
315 $shipping->createShipyardInHarbor("Werft 3", $harbor);
317 // In alle Werften sollen Passagierschiffe gebaut werden koennen
319 $shipping->addShipTypeToAllShipyards("PassengerShip");
320 } catch (ClassNotFoundException $e) {
321 die(sprintf("[Main:] Die Reederei <strong>%s</strong> kann ihre Werften nicht beschäftigen. Grund: <strong>%s</strong><br />\n",
322 $shipping->getCompanyName(),
325 } catch (ClassMismatchException $e) {
326 die(sprintf("[Main:] Die Reederei <strong>%s</strong> kann ihre Werften nicht beschäftigen. Grund: <strong>%s</strong><br />\n",
327 $shipping->getCompanyName(),
330 } catch (NoObjectException $e) {
331 die(sprintf("[Main:] Die Reederei <strong>%s</strong> kann ihre Werften nicht beschäftigen. Grund: <strong>%s</strong><br />\n",
332 $shipping->getCompanyName(),
337 // Personal auf die Werften verteilen
339 $shipping->distributeAllPersonellOnShipyards();
340 } catch (NoShipyardsConstructedException $e) {
341 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
342 $shipping->getCompanyName(),
345 } catch (ClassMismatchException $e) {
346 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
347 $shipping->getCompanyName(),
350 } catch (NullPointerException $e) {
351 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
352 $shipping->getCompanyName(),
355 } catch (NoObjectException $e) {
356 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
357 $shipping->getCompanyName(),
362 // Normale Meldung ausgeben
363 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> beschäftigt nun ihre <strong>%d</strong> Mitarbeiter in <strong>%d</strong> Werft(en):<br />\n",
364 $shipping->getCompanyName(),
365 $shipping->getTotalEmployee(),
366 $shipping->getTotalShipyards()
369 // Dann nimmt die Reederei ihren ersten Bauauftrag entgegen.
370 // Sie muss auch sich selber Bauauftraege erteilen!
372 $shipping->addNewWorksContract(WorksContract::createWorksContract("PassengerShip", "M/S Poseidon", $shipping));
373 } catch (ClassNotFoundException $e) {
374 die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
377 } catch (NullPointerException $e) {
378 die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
381 } catch (NoObjectException $e) {
382 die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
385 } catch (MissingMethodException $e) {
386 die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
389 } catch (EmptyStructuresListException $e) {
390 die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
395 // Auftrag-Instanz holen
396 $contract = $shipping->getLastContractInstance();
398 // Die Reederei hat einen Haendler gewaehlt
400 $shipping->setMerchantInstance($merchant);
401 } catch (NullPointerException $e) {
402 die(sprintf("[Main:] Der Händler <strong>%s</strong> konnte nicht ausgewählt werden. Grund: <strong>%s</strong><br />\n",
403 $merchant->getMerchantName(),
406 } catch (NoObjectException $e) {
407 die(sprintf("[Main:] Der Händler <strong>%s</strong> konnte nicht ausgewählt werden. Grund: <strong>%s</strong><br />\n",
408 $merchant->getMerchantName(),
411 } catch (ClassMismatchException $e) {
412 die(sprintf("[Main:] Der Händler <strong>%s</strong> konnte nicht ausgewählt werden. Grund: <strong>%s</strong><br />\n",
413 $merchant->getMerchantName(),
418 // Den Bauauftrag mit der Reederei abgleichen, ob sie den Schiffstyp bauen koennen
420 $typeValid = $shipping->validateWorksContractShipType($contract);
421 } catch (NullPointerException $e) {
422 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht validieren. Grund: <strong>%s</strong><br />\n",
423 $shipping->getCompanyName(),
426 } catch (NoObjectException $e) {
427 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht validieren. Grund: <strong>%s</strong><br />\n",
428 $shipping->getCompanyName(),
433 // Kann gebaut werden?
435 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> kann Schiffe vom Typ <strong>%s</strong> bauen.<br />\n",
436 $shipping->getCompanyName(),
437 $contract->getShipInstance()->getPartDescr()
440 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> kann keine Schiffe vom Typ <strong>%s</strong> bauen!<br />\n",
441 $shipping->getCompanyName(),
442 $contract->getShipInstance()->getPartDescr()
447 // Dann den Bauauftrag verfeinern
448 foreach ($einbauten['parts'] as $key=>$part) {
450 $contract->addContractDetails($key, $einbauten['builds'][$key], $part);
451 } catch (ShipPartNotConstructableException $e) {
453 die($e->getMessage());
454 } catch (ShipNotConstructedException $e) {
456 die($e->getMessage());
457 } catch (ItemNotInPriceListException $e) {
458 die(sprintf("[Main:] Der Artikel <strong>%s</strong> konnte nicht in der Preisliste gefunden werden. Grund: <strong>%s</strong><br />\n",
462 } catch (InvalidArrayCountException $e) {
463 die(sprintf("[Main:] Der Artikel <strong>%s</strong> konnte nicht in der Preisliste gefunden werden. Grund: <strong>%s</strong><br />\n",
470 // Reederei-Objekt ausgeben
471 if (defined('DEBUG_COMPANY_OBJ')) {
472 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> sieht wie folgt aus:<br />
474 $shipping->getCompanyName(),
475 print_r($shipping, true)
487 // Gesamtwert ausgeben
489 $totalValue = $contract->getTotalPrice();
490 } catch (NullPointerException $e) {
491 die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
494 } catch (NoObjectException $e) {
495 die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
498 } catch (MissingMethodException $e) {
499 die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
502 } catch (EmptyStructuresListException $e) {
503 die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
506 } catch (TotalPriceNotCalculatedException $e) {
507 die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
513 DebugMiddleware::getInstance()->output(sprintf("Der Bau der <strong>%s</strong> wird der Reederei <strong>%s</strong> voraussichtlich <strong>%s</strong> kosten.<br />\n",
514 $contract->getShipInstance()->getShipName(),
515 $shipping->getCompanyName(),
516 $contract->formatCurrency($totalValue)
522 // Den Bauvertrag unterschreiben (damit wird er in den Bau-Queue aufgenommen)
524 $shipping->signContract($contract, $shipping);
525 } catch (NullPointerException $e) {
526 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
527 $shipping->getCompanyName(),
530 } catch (NoObjectException $e) {
531 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
532 $shipping->getCompanyName(),
535 } catch (MissingMethodException $e) {
536 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
537 $shipping->getCompanyName(),
540 } catch (InvalidContractPartnerException $e) {
541 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
542 $shipping->getCompanyName(),
545 } catch (ContractAllreadySignedException $e) {
546 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
547 $shipping->getCompanyName(),
550 } catch (WrongContractPartnerException $e) {
551 die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
552 $shipping->getCompanyName(),
558 if ($contract->isSigned()) {
559 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> hat den Bau der <strong>%s</strong> zugestimmt.<br />\n",
560 $shipping->getCompanyName(),
561 $contract->getShipInstance()->getShipName()
564 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> hat den Bau der <strong>%s</strong> abgelehnt.<br />\n",
565 $shipping->getCompanyName(),
566 $contract->getShipInstance()->getShipName()
571 // Auftrag-Objekt ausgeben
572 if (defined('DEBUG_CONTRACT_OBJ')) {
573 DebugMiddleware::getInstance()->output(sprintf("Der Bauauftrag sieht wie folgt aus:<br />
575 print_r($contract, true)
579 // Erstmal bis hier hin...
582 // Anzahl Betten ermitteln
584 $totalBeds = $contract->getShipInstance()->calcTotalBeds();
585 } catch (StructuresOutOfBoundsException $e) {
586 die(sprintf("[Main:] Anzahl Betten konnten nicht ermittelt werden. Grund: <strong>%s</strong><br />\n",
589 } catch (EmptyStructuresListException $e) {
590 die(sprintf("[Main:] Anzahl Betten konnten nicht ermittelt werden. Grund: <strong>%s</strong><br />\n",
595 // Bettenanzahl ausgeben
596 DebugMiddleware::getInstance()->output(sprintf("Es stehen <strong>%d</strong> Betten zur Verfügung.",