Giter Site home page Giter Site logo

bratkartoffel / blm2 Goto Github PK

View Code? Open in Web Editor NEW
5.0 4.0 0.0 6.59 MB

Der BioladenManager - Das Original seit 2008

Home Page: https://blm2.fraho.eu

License: MIT License

PHP 83.28% CSS 2.44% JavaScript 2.61% Batchfile 0.02% Shell 0.24% Java 10.41% Smarty 0.99%
browsergame multiplayer-browser-game php realtime-games simulation-game

blm2's Introduction

Der Bioladenmanager 2 (BLM 2)

Ein einfaches, klassisches Open Source Aufbaustrategie Spiel

Der Bioladenmanager ist ein klassisches Echtzeit-Aufbaustrategie Spiel. Pflanze auf deiner Plantage 15 verschiedene Obst- und Gemüsesorten an, erfosche im Forschungszentrum neue Pflanzen und verbessere die bereits bekannten. Im Bioladen kannst du die Waren an virtuelle Kunden verkaufen und per Marktplatz auch an andere Spieler. Mit der Mafia kannst du deine Gegenspieler ausrauben und ihre Plantagen attackieren um dir so einen Vorteil im harten Wettbewerb zu erkämpfen. Organisiere dich mit anderen Spielern in Gruppen, schliesse Bündnisse oder führe Krieg.

Das komplette Spiel ist kostenlos, werbefrei, OpenSource und auf Geschwindigkeit optimiert. Selbst mit einer Edge-Mobilfunkverbindung ist das Spiel noch sehr gut spielbar.

Gebäude und Plantage Mafia und Rangliste

Installation

0) Voraussetzungen

  • Apache 2.4+ (für .htaccess Zugriffsbeschränkungen)
    • mod_alias
    • (empfohlen) mod_headers
    • (empfohlen) mod_brotli und mod_setenvif
  • PHP 7.4+
    • gd (mit WebP-Unterstützung)
    • mcrypt
    • pdo_mysql
    • zip
  • MariaDB 10.2+ (oder MySQL 8.0+)

Die automatischen Tests laufen mit:

  • Apache 2.4.56
  • PHP 7.4.33
  • MariaDB 10.2.44.

Auf dem Livesystem läuft die Anwendung (Stand Jannuar 2024) mit:

  • Apache 2.4
  • PHP 8.2
  • MariaDB 11.2

1) Dateien entpacken / hochladen

Das Projekt kann entweder direkt als git-Repository oder entpackt aus einem Zip-Archiv installiert werden. Hierzu einfach alle Dateien des Projekts auf dem Webspace laden.

2) Konfiguration erstellen

Anschliessend muss noch eine minimale Konfiguration erstellt und als config/config.ini gespeichert werden:

[base]

; a random secret which is used to initialize the random number generators
; for the deterministic interest and item selling rates
random_secret = "!!replace this!!"

; a random secret which is used to initialize the random number generators
upgrade_secret = "!!replace this!!"

; base url for this game (needed for absolute urls like in mails)
base_url = "https://blm2.example.com"

; operator name
admin_name = "Insert Name Here"

; operator email address
admin_email = "[email protected]"

; address line 1 (for impressum, optional)
admin_addr_line_1 = "Street Name, may be empty"

; address line 2 (for impressum, optional)
admin_addr_line_2 = "Zip-Code and Country, may be empty"

[database]
; hostname to connect to
hostname = "localhost"
; database name to connect to
database = "blm2"
; username for connection
username = "blm2"
; password for connection
password = "blm2"

Die als !!replace this!! markierten Felder müssen mit zufälligen Werten gefüllt werden. Dies dient der Fairness und Sicherheit des Spiels und sorgt dafür, dass die zufällig generierten Werte (unter Anderem die Warenkurse des Bioladens und die Zinsraten der Bank) nicht im voraus berechnet werden können. Hierzu kann der Generator von dieser Seite verwendet werden.

Eine Liste der verfügbaren Parameter kann der Standardkonfiguration entnommen werden. Nicht explizit gesetzte Optionen werden von dieser Datei übernommen.

Wichtig: Die Standardkonfiguration sollte nicht geändert werden, da diese mit jedem Release neu ausgeliefert wird. Stattdessen sollten alle von der Standardkonfiguration abweichenden Einstellungen in der config.ini gesetzt werden.

3) Installationsprozess starten

Nachdem die Konfiguration angelegt wurde, kann die Installation der Datenbank beginnen. Hierzu muss die install/update.php?secret=__upgrade_secret__ aufgerufen werden. Der Parameter secret muss in der Anfrage durch das konfigurierte upgrade_secret ersetzt werden.

Die Installation läuft automtisch ab und kann einige Sekunden dauern. Währenddessen lädt die Seite und es wird erst nach Abschluss der Installation der Status ausgegeben.

[OK]: Checking installation for version 1.11.0:
[OK]: Verifying upgrade credentials
[OK]: Verifying secrets changed
[OK]: Verifying database connection
[NEEDS UPGRADE]: Checking base installation
[OK]: Executing basic setup script
[NEEDS UPGRADE]: Checking for update information
[OK]: Creating initial update information
[OK]: Enumerating update scripts (Found 11 scripts)
[OK]: Checking sql/00-1.10.0-setup.sql (skipped)
[OK]: Checking sql/01-1.10.1-update_info.sql (skipped)
[OK]: Executing new sql/10-1.10.2-groups-created.sql
[OK]: Executing new sql/11-1.10.3-log_marktplatz.sql
[OK]: Executing new sql/12-1.10.3-log_nachrichten.sql
[OK]: Executing new sql/13-1.10.3-fix_points.sql
[OK]: Executing new sql/14-1.10.3-drop_statistik-ProduktionPlus.sql
[OK]: Executing new sql/15-1.10.4-drop_auftrag-points.sql
[OK]: Executing new sql/16-1.10.6-log_login-add-anonymized.sql
[OK]: Executing new sql/17-1.10.7-nachrichten-delete-self-messages.sql
[OK]: Executing new sql/18-1.10.10-runtime_config.sql
[OK]: Saving update information
[NEEDS UPGRADE]: Verifying existing accounts (No accounts found)
[OK]: Create new admin account (New user 'admin' with password 'gCcKhP0KiSwjtXlS')
[OK]: Checking for runtime configuration
[NEEDS UPGRADE]: Verifying last cronjob run timestamp (Entry not found)
[OK]: Create lastcron entry
[NEEDS UPGRADE]: Verifying last points calculation timestamp (Entry not found)
[OK]: Create lastpoints entry
[NEEDS UPGRADE]: Verifying currently active round (No active round found)
[OK]: Starting new round

Update finished successfully!
Execution took 1,215.51 ms
102 queries were executed

Die initiale Installtion erstellt auch einen Admin-Benutzer (admin) mit einem zufällig generiertem Passwort. Das Passwort wird in der Ausgabe angezeigt und ist in dem obigen Beispiel gCcKhP0KiSwjtXlS.

4a) Cronjob einrichten (Linux)

Das Spiel benötigt einen Cronjob, welcher periodisch läuft. Dies dient dazu, die Zinsen, das Basiseinkommen und diverse weitere Funktionen durchzuführen.

Das Intervall des Cronjobs ist standardmässig 30 Minuten, ein Cronjob auf Systemebene könnte somit wie folgt aussehen:

# min   hour    day     month   weekday  command
*/30    *       *       *       *        /usr/bin/php /var/www/htdocs/cronjobs/cron.php

4b) Cronjob einrichten (Windows)

Windows selbst bietet keinen klassischen cron, hier muss der Eintag über die "Aufgabenplanung" erstellt werden. Nach einem Rechtsklick im linken Bereich des Fensters auf den obersten Einttrag, "Aufgabenplanung" -> "Aufgabe erstellen" wird ein neues Fenster geöffnet. Der Name kann frei gewählt werden, sollte aber zur einfachen Nachvollziehbarkeit schlicht "Blm2 Cron" genannt werden.

Reiter "Trigger"

Im Reiter "Trigger" kann mittels des Buttons "Neu" ein Zeitplan hinzugefügt werden.

Im oberen Bereich sollte bei "Start" eine "gerade" Zeit ausgewählt werden, so ist das ganze besser plan- und testbar. Als Beispiel kann hier auf die letzten 30 Minuten gerundet werden, z.B. 01.01.2024 15:00:00.

Im Bereich "Erweiterte Einstellungen" muss die Option "Wiederholen alle" angehakt werden. Als Intervall sollte "30 Minuten" und im Feld rechts daneben, "für die Dauer von", sollte Unbegrenzt gewählt werden.

Mit einem Klick auf "OK" wird der Dialog geschlossen und in der Tabelle der Trigger steht nun ein Eintrag.

Reiter "Aktionen"

Anschliessend muss die auszuführende Aktion im Reiter "Aktionen" eingestellt werden. Mittels Klick auf den Button "Neu" kann ein Programm definiert werden.

Als "Programm / Script" bitte php.exe wählen (c:\xampp\php\php.exe).

Als "Argument" bitte den Pfad zu der cron.php des Spiels eintragen, z.B.: c:\xampp\htdocs\cronjobs\cron.php.

Speichern

Mittels "ok" wird die geplante Aufgabe gespeichert und kann in der "Aufgabenplanung" nach der Auswahl des Eintrags "Aufgabenplanungsbibliothek" im zentralen Bereich des Fensters in der Liste gesehen, bearbeitet und gelöscht werden.

Spiel aktualisieren

Nach der Installation einer neuen Version sollte das update.php nochmals aufgerufen werden. Dies sorgt dafür, dass etwaige Datenbankänderungen nachinstalliert werden.

Anpassungen an der config.ini werden hingegen nicht automatisch durchgeführt, diese müssen manuell eingetragen werden. Welche Parameter sich zwischen den Versionen geändert haben können dem CHANGELOG.md entnommen werden.

Hinweise XAMPP

Das Spiel kann auch lokal in einer XAMPP Installation gespielt oder entwickelt werden, jedoch gibt es hier ein paar Besonderheiten zu beachten.

GD-Bibliothek aktivieren

Einmalig muss im PHP die GD-Erweiterung aktiviert werden. Hierzu muss in der php/php.ini die Zeile mit extension=gd gefunden und eingeschaltet werden:

; vorher:
;extension=gd

; nachher:
extension=gd

Entwicklung

Voraussetzungen

Minify Javascript

Die Javascript Dateien werden mittels des closure-compilers optimiert und minimiert. Das sorgt dafür, dass die eingebundenen Javascript Bibliotheken schneller geladen werden.

Linux / MacOs:

java -jar ~/bin/closure-compiler-v20230103.jar --compilation_level SIMPLE_OPTIMIZATIONS --js js/functions.js

Windows:

java -jar %HOME%\bin\closure-compiler-v20230103.jar --compilation_level SIMPLE_OPTIMIZATIONS --js js\functions.js

Minify CSS

Die CSS Dateien werden mittels csso optimiert und minimiert. Das sorgt dafür, dass die eingebundenen CSS Stylesheets schneller geladen werden. Da csso-cli nur als Linux Shell-Script vorliegt, kann dieses unter Windows nur über die Git-Bash (oder WSL) ausgeführt werden.

Initial muss csso-cli via npm installiert werden: npm install -g csso-cli

Anschlissend können alle Styles mit folgendem Script minimiert werden:

#!/bin/sh
export NODE_HOME=~/devel/node-v18.13.0-linux-x64
export PATH=$NODE_HOME:$PATH

for file in $( find styles -name \*.css -and -not -name \*.min.\* ); do
  $NODE_HOME/node_modules/csso-cli/bin/csso \
    -i $file -o ${file%%.*}.min.css --no-restructure --stat
done

IDE (PhpStorm)

Die primäre Entwicklung wird mit der IDE PhpStorm durchgeführt. Um die CSS und Javascript Dateien automatisch mit dem Minify zu konvertieren können "Watcher" auf den Dateien angelegt werden.

Im watchers.xml liegen die Watchers als Beispielkonfiguration. Diese können in den Einstellungen unter File / Settings / Tools > File Watchers importiert werden.

Tests

Das Spiel wird mit jeder Änderung durch automatisierte Tests überpüft. Hierzu wird ein Java-Projekt mit JUnit und Selenium im tests/ Ordner verwendet. Die Tests benötigen eine spezielle Konfiguration des Spiels. Hierzu muss der docker-compose stack aus dem src/test/resources Ordner gestartet sein. Anschlissend können die Tests aus der IDE oder mittels ./gradlew test ausgeführt werden.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.