5 // Set testing mode (no starter.php will be loaded!)
6 define('TEST_MODE', true);
9 require dirname(dirname(dirname(__FILE__))) . '/framework/config.php';
11 // Load all include files
12 require $cfg->getConfigEntry('framework_base_path') . 'includes.php';
14 // Load all game classes
15 require $cfg->getConfigEntry('framework_base_path') . 'classes.php';
17 // Load file I/O handler
18 require $cfg->getConfigEntry('framework_base_path') . 'file_io.php';
20 // Load database layer
21 require $cfg->getConfigEntry('framework_base_path') . 'database.php';
23 // Set default application
24 FrameworkConfiguration::getInstance()->setConfigEntry('default_application', 'shipsimu');
25 $application = 'shipsimu';
28 require $cfg->getConfigEntry('root_base_path') . 'application/shipsimu/loader.php';
30 // Wir tun hier so, als waere schon das Reederei-Objekt generiert und wir wollen
31 // jetzt die Personalliste wiederherstellen
32 $personell = SimulatorPersonell::createSimulatorPersonellByID('SimulatorPersonell@829292aeca3f6bf78c16e25fc4f75c98');
34 // Personal-Objekt debuggen
35 if (defined('DEBUG_PERSONELL_OBJ')) {
36 DebugMiddleware::getInstance()->output(sprintf("The personal object looks like this:<br />
38 print_r($personell, true)
43 $harbor = Harbor::createHarbor("Hamburger Hafen");
46 DebugMiddleware::getInstance()->output(sprintf("Der <span class=\"exception_reason\">%s</span> ist gegründet worden.<br />\n",
47 $harbor->getHarborName()
50 // Hafen-Objekt debuggen
51 if (defined('DEBUG_HARBOR_OBJ')) {
52 DebugMiddleware::getInstance()->output(sprintf("Der <span class=\"exception_reason\">%s</span> sieht wie folgt aus:<br />
54 $harbor->getHarborName(),
55 print_r($harbor, true)
60 $merchant = Merchant::createMerchant("Namenlos", $harbor);
62 // Array mit Einbauten erstellen
64 'parts' => array( // *** Die zu einbauenden Schiffsteile ***
65 'Motor' => array( // --- Maschinenraum mit Motor ---
66 "Ocean-Power 2000", // Bezeichnung
67 20000, // Pferdestaerken
69 2.5, 2, 3.5 // Abmasse (Breite/Hoehe/Laenge)
71 'Bridge' => array( // --- Kommandobruecke ---
72 26, 2.5, 15 // Abmasse (Breite/Hoehe/Laenge)
74 'CarDeck' => array( // --- Autodecks ---
75 'amount' => 8, // Anzahl Autodecks (einige liegen hintereinander im selben Deck!)
76 'dim' => array( // Abmessung (Breite/Hoehe/Laenge)
80 'TruckDeck' => array( // --- Decks fuer LKW/Busse haben vielleicht ein anderes Belueftgungssystem, etc. ---
81 'amount' => 1, // Anzahl der Decks
82 'dim' => array( // Abmessung (Breite/Hoehe/Laenge)
83 8, 5, 195 // Geht durchs gesamte Schiff!
86 'TrainDeck' => array( // --- Decks fuer Zuege haben Schienen... ---
87 'amount' => 1, // Anzahl der Decks
88 'dim' => array( // Abmessung (Breite/Hoehe/Laenge)
89 8, 4, 195 // Geht durchs gesamte Schiff!
92 'LuxuryCabin' => array( // --- Luxuskabinen ---
93 'amount' => 20, // Anzahl Luxuskabinen im Schiff
94 'rooms' => 4, // Raeume: 2 Schlafzimmer, 1 Auffenthaltszimmer, 1 Bad mit Dusche/Toilette/Waschbecken
95 'bed' => 3, // Anzahl Betten (1 Doppelbett 2 Einzelbetten, Doppel-/Einzelbetten in getrennte Raeume)
96 'dim' => array( // Abmessung der Luxuskabine (Breite/Hoehe/Laenge)
100 'PremierCabin' => array( // --- Mittlere Kabinen ---
101 'amount' => 40, // Anzahl
102 'rooms' => 2, // Raeume: Schlafzimmer, Bad mit Toilette/Waschbecken
103 'bed' => 2, // Anzahl Betten (1 Doppelbett, 1 Einzelbett; gemeinsamer Raum)
104 'dim' => array( // Abmessungen der Kabine (Breite/Hoehe/Laenge)
108 'LowCabin' => array( // --- Untere Kabinen (befinden sich in den Unterbauten) ---
109 'amount' => 90, // Anzahl
110 'rooms' => 1, // Raeume: Schlafzimmer, Waschbecken
111 'bed' => 2, // Anzahl Betten (2 Etagenbetten)
112 'dim' => array( // Abmessungen der Kabine (Breite/Hoehe/Laenge)
116 'EconomyCabin' => array( // --- Unterste Kabinen (befinden sich tief unten im Schiffsbauch) ---
117 'amount' => 140, // Anzahl
118 'rooms' => 1, // Raeume: Schlafzimmer, Waschbecken
119 'bed' => 1, // Anzahl Betten (1 Etagenbett)
120 'dim' => array( // Abmessungen der Kabine (Breite/Hoehe/Laenge)
125 'builds' => array( // *** Welche Oberklasse verwendet werden sollen ***
126 'Motor' => "MaschineRoom",
127 'Bridge' => "BaseUpperStructure",
128 'LuxuryCabin' => "BaseCabin",
129 'PremierCabin' => "BaseCabin",
130 'LowCabin' => "BaseCabin",
131 'EconomyCabin' => "BaseCabin",
132 'CarDeck' => "BaseDeck",
133 'TrainDeck' => "BaseDeck",
134 'TruckDeck' => "BaseDeck"
138 // Preisliste auffuellen
139 foreach ($einbauten['parts'] as $key=>$part) {
140 // Create item array string
142 foreach ($part as $idx=>$itemPart) {
143 if (is_string($itemPart)) {
145 $item .= sprintf("\"%s\", ", $itemPart);
146 } elseif (is_int($itemPart)) {
148 $item .= sprintf("%d, ", $itemPart);
149 } elseif (is_float($itemPart)) {
151 $item .= sprintf("%f, ", $itemPart);
152 } elseif (is_array($itemPart)) {
156 // Go all items through
157 foreach ($itemPart as $idx2=>$subPart) {
158 if (is_int($subPart)) {
159 // Integer again found
160 $item .= sprintf("%d, ", $subPart);
161 } elseif (is_float($subPart)) {
163 $item .= sprintf("%f, ", $subPart);
165 // Unsupport part found
166 die(sprintf("[Main:] Unsupported sub-array element on pos <strong>%d</strong> in array <span class=\"exception_reason\">%s</span> found: <u>%s</u>", $idx2, $idx, $subPart));
170 // Remove trailing comma
171 $item = substr($item, 0, -2);
173 // Add closing bracket
176 // Unsupport part found
177 die(sprintf("[Main:] Unsupported array element on pos <strong>%d</strong>: <u>%s</u>", $idx, $itemPart));
181 // Remove trailing comma
182 $item = substr($item, 0, -2);
185 $price = mt_rand(5, 12) * 10000;
187 // Generate command for adding objects to a price list
188 $eval = sprintf("\$merchant->addItemToPriceList(%s::create%s(%s), %d);",
196 if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) DebugMiddleware::getInstance()->output(sprintf("[Main:] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
200 // Run the constructed command
204 // Haendler-Objekt debuggen
205 if (defined('DEBUG_MERCHANT_OBJ')) {
206 DebugMiddleware::getInstance()->output(sprintf("Der Händler <span class=\"exception_reason\">%s</span> sieht wie folgt aus:<br />
208 $merchant->getMerchantName(),
209 print_r($merchant, true)
214 $shipping = ShippingCompany::createShippingCompany("Hanseatic Travel Company", $harbor);
216 // Firmenschef setzen
217 $shipping->setCompanyFounder(CompanyEmployee::createCompanyEmployee("Roland", "Häder", "M", 1977, 9, 26, true, 2000));
219 // Dann mal ausgeben...
220 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> ist von <strong>%s %s</strong> gegründet worden.<br />\n",
221 $shipping->getCompanyName(),
222 $shipping->getFounderInstance()->getSurname(),
223 $shipping->getFounderInstance()->getFamily()
226 // Die Reederei stellt Personal ein und bedient sich an der $personell-Instanz
227 $shipping->recruitRandomEmployees(10, $personell);
229 // Anzahl Personal ausgeben
230 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> hat nun <strong>%d</strong> weitere Mitarbeiter.<br />\n",
231 $shipping->getCompanyName(),
232 $shipping->getTotalEmployee()
235 // Dann die ersten 3 Werften in den Hafen einbauen und Personal zuweisen
236 $shipping->createShipyardInHarbor("Werft 1", $harbor);
237 $shipping->createShipyardInHarbor("Werft 2", $harbor);
238 $shipping->createShipyardInHarbor("Werft 3", $harbor);
240 // In alle Werften sollen Passagierschiffe gebaut werden koennen
241 $shipping->addShipTypeToAllShipyards("PassengerShip");
243 // Personal auf die Werften verteilen
244 $shipping->distributeAllPersonellOnShipyards();
246 // Normale Meldung ausgeben
247 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> beschäftigt nun ihre <strong>%d</strong> Mitarbeiter in <strong>%d</strong> Werft(en):<br />\n",
248 $shipping->getCompanyName(),
249 $shipping->getTotalEmployee(),
250 $shipping->getTotalShipyards()
253 // Dann nimmt die Reederei ihren ersten Bauauftrag entgegen.
254 // Sie muss auch sich selber Bauauftraege erteilen!
255 $shipping->addNewWorksContract(WorksContract::createWorksContract("PassengerShip", "M/S Poseidon", $shipping));
257 // Auftrag-Instanz holen
258 $contract = $shipping->getLastContractInstance();
260 // Die Reederei hat einen Haendler gewaehlt
261 $shipping->setMerchantInstance($merchant);
263 // Den Bauauftrag mit der Reederei abgleichen, ob sie den Schiffstyp bauen koennen
264 $typeValid = $shipping->validateWorksContractShipType($contract);
266 // Kann gebaut werden?
268 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> kann Schiffe vom Typ <span class=\"exception_reason\">%s</span> bauen.<br />\n",
269 $shipping->getCompanyName(),
270 $contract->getShipInstance()->getObjectDescription()
273 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> kann keine Schiffe vom Typ <span class=\"exception_reason\">%s</span> bauen!<br />\n",
274 $shipping->getCompanyName(),
275 $contract->getShipInstance()->getObjectDescription()
280 // Dann den Bauauftrag verfeinern
281 foreach ($einbauten['parts'] as $key=>$part) {
282 $contract->addContractDetails($key, $einbauten['builds'][$key], $part);
285 // Reederei-Objekt ausgeben
286 if (defined('DEBUG_COMPANY_OBJ')) {
287 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> sieht wie folgt aus:<br />
289 $shipping->getCompanyName(),
290 print_r($shipping, true)
302 // Gesamtwert ausgeben
303 $totalValue = $contract->getTotalPrice();
306 DebugMiddleware::getInstance()->output(sprintf("Der Bau der <span class=\"exception_reason\">%s</span> wird der Reederei <span class=\"exception_reason\">%s</span> voraussichtlich <span class=\"exception_reason\">%s</span> kosten.<br />\n",
307 $contract->getShipInstance()->getShipName(),
308 $shipping->getCompanyName(),
309 $contract->formatCurrency($totalValue)
315 // Den Bauvertrag unterschreiben (damit wird er in den Bau-Queue aufgenommen)
316 $shipping->signContract($contract, $shipping);
319 if ($contract->isSigned()) {
320 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> hat den Bau der <span class=\"exception_reason\">%s</span> zugestimmt.<br />\n",
321 $shipping->getCompanyName(),
322 $contract->getShipInstance()->getShipName()
325 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <span class=\"exception_reason\">%s</span> hat den Bau der <span class=\"exception_reason\">%s</span> abgelehnt.<br />\n",
326 $shipping->getCompanyName(),
327 $contract->getShipInstance()->getShipName()
332 // Auftrag-Objekt ausgeben
333 if (defined('DEBUG_CONTRACT_OBJ')) {
334 DebugMiddleware::getInstance()->output(sprintf("Der Bauauftrag sieht wie folgt aus:<br />
336 print_r($contract, true)
340 // Erstmal bis hier hin...
343 // Anzahl Betten ermitteln
344 $totalBeds = $contract->getShipInstance()->calcTotalBeds();
346 // Bettenanzahl ausgeben
347 DebugMiddleware::getInstance()->output(sprintf("Es stehen <strong>%d</strong> Betten zur Verfügung.",