# Build binaries: make cmake, make build # One time initial setup (or to reset db): make prep, make inject-mariadb, make maps # Update custom db edits: make inject-custom # Start up server: make shared, make login, make world, make zone # in game, stop combat spam #logs set gmsay 79 0 # in game, stop loot spam #logs set gmsay 69 0 NAME := eqemu-server .PHONY: prep prep: is-vscode @echo "Preparing build/bin for usage..." @echo "Prepping folders..." @mkdir -p .devcontainer/override @mkdir -p .devcontainer/repo @mkdir -p .devcontainer/cache @mkdir -p build/bin/logs @mkdir -p build/bin/shared @mkdir -p build/bin/assets @echo "Applying overrides..." @if [ ! -f .devcontainer/override/eqemu_config.json ]; then cp .devcontainer/base/eqemu_config.json .devcontainer/override/eqemu_config.json; fi @if [ -f build/bin/eqemu_config.json ]; then unlink build/bin/eqemu_config.json; fi cd build/bin && ln -s ../../.devcontainer/override/eqemu_config.json eqemu_config.json @if [ ! -f .devcontainer/override/login.json ]; then cp .devcontainer/base/login.json .devcontainer/override/login.json; fi @if [ -f build/bin/login.json ]; then unlink build/bin/login.json; fi cd build/bin && ln -s ../../.devcontainer/override/login.json login.json @echo "Cloning repositories..." cd .devcontainer/repo && if [ ! -d "quests" ]; then cd ../../.devcontainer/repo/ && git clone https://github.com/ProjectEQ/projecteqquests.git quests; fi cd .devcontainer/repo && if [ ! -d "eqemu-definitions" ]; then cd ../../.devcontainer/repo/ && git clone https://github.com/xackery/eqemu-definitions.git eqemu-definitions; fi cd .devcontainer/repo && if [ ! -d "maps" ]; then cd ../../ && make maps; fi @if [ -d build/bin/quests ]; then unlink build/bin/quests; fi cd build/bin && ln -s ../../.devcontainer/repo/quests quests @if [ -d build/bin/maps ]; then unlink build/bin/maps; fi cd build/bin && ln -s ../../.devcontainer/repo/maps maps @if [ -d build/bin/eqemu-definitions ]; then unlink build/bin/eqemu-definitions; fi cd build/bin && ln -s ../../.devcontainer/repo/eqemu-definitions eqemu-definitions @mkdir -p build/bin/quests/mods @echo "Applying base links..." cp -R -u -p utils/patches .devcontainer/base/ @if [ -d build/bin/assets/patches ]; then unlink build/bin/assets/patches; fi cd build/bin/assets && ln -s ../../../.devcontainer/base/patches patches @if [ -d build/bin/lua_modules ]; then unlink build/bin/lua_modules; fi cd build/bin && ln -s ../../.devcontainer/repo/quests/lua_modules lua_modules @if [ -d build/bin/mods ]; then unlink build/bin/mods; fi cd build/bin && ln -s ../../.devcontainer/repo/quests/mods mods @if [ -d build/bin/plugins ]; then unlink build/bin/plugins; fi cd build/bin && ln -s ../../.devcontainer/repo/quests/plugins plugins @echo "Eqemu is prepared. Edit build/bin/eqemu_config.json to configure." is-vscode: @if [ -z "$$REMOTE_CONTAINERS" ]; then \ echo "Not running in VS Code devcontainer"; \ exit 1; \ fi clean: is-vscode rm -rf build .PHONY: maps maps: is-vscode @echo "Downloading maps..." @mkdir -p .devcontainer/repo/maps @cd .devcontainer/repo/maps && wget -nc https://github.com/EQEmu/maps/archive/refs/heads/master.zip @cd .devcontainer/repo/maps && unzip -o master.zip @cd .devcontainer/repo/maps && mv maps-master/* . @cd .devcontainer/repo/maps && rm -rf maps-master @echo "Maps downloaded." # Runs tests .PHONY: test test: is-vscode cd build/bin && ./tests # Runs login binary .PHONY: login login: is-vscode check-mariadb cd build/bin && ./loginserver .PHONY: hotfix hotfix: shared # Runs shared_memory binary .PHONY: shared shared: is-vscode check-mariadb cd build/bin && ./shared_memory # Runs zone binary .PHONY: zone zone: is-vscode check-mariadb @find build/bin/logs/zone/ -type f -name 'zone*.log' -exec rm -f {} + cd build/bin && ./zone check-mariadb: is-vscode @if ! sudo service mariadb status | grep -q 'active (running)'; then \ sudo service mariadb start; \ fi # Runs world binary .PHONY: world world: is-vscode check-mariadb @find build/bin/logs/ -type f -name 'world*.log' -exec rm -f {} + cd build/bin && ./world # Runs ucs binary .PHONY: ucs ucs: is-vscode check-mariadb @find build/bin/logs/ -type f -name 'ucs*.log' -exec rm -f {} + cd build/bin && ./ucs # Runs queryserv binary .PHONY: queryserv queryserv: is-vscode check-mariadb @find build/bin/logs/ -type f -name 'query_server*.log' -exec rm -f {} + cd build/bin && ./queryserv reset-content: @echo "Resetting content tables in database peq..." cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_content.sql" valgrind-%: is-vscode cd build/bin && valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=logs/$*.valgrind.log ./$* # Start mariaDB standalone .PHONY: mariadb mariadb: @sudo service mariadb start .PHONY: inject-mariadb inject-mariadb: -sudo service mariadb start -mkdir -p .devcontainer/cache/db/ -sudo mariadb -e 'DROP DATABASE IF EXISTS peq;' -sudo mariadb -e 'CREATE DATABASE peq;' -sudo mariadb -e "CREATE USER IF NOT EXISTS 'peq'@'127.0.0.1' IDENTIFIED BY 'peqpass';" -sudo mariadb -e "GRANT ALL PRIVILEGES ON *.* TO 'peq'@'127.0.0.1';" ifeq (,$(wildcard .devcontainer/cache/db/db.sql.zip)) @echo ".devcontainer/cache/db.sql.zip not found. Downloading database from https://db.eqemu.dev/latest" wget -nc https://db.eqemu.dev/latest -O .devcontainer/cache/db/db.sql.zip -cd .devcontainer/cache/db && unzip db.sql.zip endif @echo "Sourcing db may take a while, please wait..." @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_content.sql" @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_login.sql" @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_player.sql" @# deprecated cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_queryserv.sql" @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_state.sql" @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_system.sql" @echo "MariaDB is now injected." .PHONY: gm-% gm-%: is-vscode sudo mariadb --database peq -e "UPDATE account SET status=255 WHERE name = '$*';" @echo "Account $* is now a GM. /camp to have it go into effect." depends: is-vscode sudo apt install graphviz pip time pip3 install graphviz mkdir -p build/depends @if [ ! -f "build/depends/dependency_graph.py" ]; then \ wget https://raw.githubusercontent.com/pvigier/dependency-graph/master/dependency_graph.py -O build/depends/dependency_graph.py; \ fi @echo "Generating dependency graphs (This may take a while)..." @echo "Login..." time python3 build/depends/dependency_graph.py -f png login build/depends/login.dot @echo "World..." time python3 build/depends/dependency_graph.py -f png world build/depends/world.dot @echo "Zone..." time python3 build/depends/dependency_graph.py -f png zone build/depends/zone.dot @echo "Common..." time python3 build/depends/dependency_graph.py -f png common build/depends/common.dot backup: is-vscode @mkdir -p build/bin/backup cd build/bin && ./world database:dump --compress --player-tables --state-tables --system-tables --query-serv-tables restore-%: is-vscode @if [ -z "$*" ]; then \ echo "Please provide a backup file to restore from. Example: make restore-backup.sql"; \ exit 1; \ fi @echo "Restoring from backup $*" @sudo mariadb --database peq -e "$*" cpu-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif @cd build/bin && mkdir -p tmp cd build/bin && CPUPROFILE=prof.out ./zone pprof-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif cd build/bin && google-pprof --pdf zone prof.out > prof.pdf pprof-gv-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif cd build/bin && google-pprof --gv zone prof.out > prof.gv heap-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif @cd build/bin && mkdir -p tmp cd build/bin && HEAPPROFILE=prof.out ./zone .PHONY: pull pull: git pull @if [ ! -d "quests" ]; then git clone https://github.com/rebuildeq/quests.git quests; fi cd quests && git pull @if [ ! -d "eqemu-definitions" ]; then git clone https://github.com/xackery/eqemu-definitions.git eqemu-definitions; fi cd eqemu-definitions && git pull