From 1d8657dc6c84e1989938fa19a558bfee20aeeefd Mon Sep 17 00:00:00 2001 From: Elias Stepanik <40958815+eliasstepanik@users.noreply.github.com> Date: Sun, 3 Dec 2023 14:07:42 +0100 Subject: [PATCH] Init --- Dockerfile | 28 +++++ config/rotation.cfg | 181 ++++++++++++++++++++++++++++++ config/server-allgametypes.cfg | 12 ++ config/server-bigballoon.cfg | 16 +++ config/server-capturethelolly.cfg | 16 +++ config/server-lastpadstanding.cfg | 16 +++ config/server-settings.cfg | 73 ++++++++++++ config/server-sprayyourcolour.cfg | 18 +++ docker-compose.yml | 8 ++ start-ffa.sh | 7 ++ 10 files changed, 375 insertions(+) create mode 100644 Dockerfile create mode 100644 config/rotation.cfg create mode 100644 config/server-allgametypes.cfg create mode 100644 config/server-bigballoon.cfg create mode 100644 config/server-capturethelolly.cfg create mode 100644 config/server-lastpadstanding.cfg create mode 100644 config/server-settings.cfg create mode 100644 config/server-sprayyourcolour.cfg create mode 100644 docker-compose.yml create mode 100644 start-ffa.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3267de9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# https://worldofpadman.net/en/tutorials/create-a-dedicated-wop-server/ + + +FROM ubuntu:22.04 +RUN echo 'APT::Install-Suggests "0";' >> /etc/apt/apt.conf.d/00-docker +RUN echo 'APT::Install-Recommends "0";' >> /etc/apt/apt.conf.d/00-docker +RUN DEBIAN_FRONTEND=noninteractive \ + apt-get update \ + && apt-get install -y python3 \ + && apt-get install -y unzip \ + && apt-get install -y wget + +RUN mkdir /wop +RUN mkdir /wop/server +RUN mkdir /wop/server/data +RUN mkdir /wop/server/data/wop + +WORKDIR /tmp +RUN wget --no-check-certificate https://res.sailehd.de/wop-1.6.2-full-unified.zip +RUN unzip /tmp/wop-1.6.2-full-unified.zip -d /tmp/ +RUN mv /tmp/worldofpadman-1-6-2/* /wop/server/data/ + +WORKDIR /wop/server + +ADD start-* /wop/server/ +ADD config/ /wop/server/server/wop/ + +CMD ./data/wopded-linux.x86_64 +set dedicated 1 +set net_port 27960 +set com_hunkMegs 256 +exec /wop/server/server/wop/server_settings.cfg \ No newline at end of file diff --git a/config/rotation.cfg b/config/rotation.cfg new file mode 100644 index 0000000..fe04ec8 --- /dev/null +++ b/config/rotation.cfg @@ -0,0 +1,181 @@ +// +// World of Padman - example map and gametype rotation +// +// +// Rotates through each official map for each supported gametype. +// Sets point- and timelimit for each gametype. +// +// Does not load a map itself! +// + +// +// Maps +// + +// Free For All +set map_ffa1 "map wop_airplane; set nextmap_ffa vstr map_ffa2" +set map_ffa2 "map wop_anteroom; set nextmap_ffa vstr map_ffa3" +set map_ffa3 "map wop_backyard; set nextmap_ffa vstr map_ffa4" +set map_ffa4 "map wop_bath; set nextmap_ffa vstr map_ffa5" +set map_ffa5 "map wop_cabin; set nextmap_ffa vstr map_ffa6" +set map_ffa6 "map wop_diner; set nextmap_ffa vstr map_ffa7" +set map_ffa7 "map wop_jail; set nextmap_ffa vstr map_ffa8" +set map_ffa8 "map wop_padattic; set nextmap_ffa vstr map_ffa9" +set map_ffa9 "map wop_padcrash; set nextmap_ffa vstr map_ffa10" +set map_ffa10 "map wop_padcrash_dm17; set nextmap_ffa vstr map_ffa11" +set map_ffa11 "map wop_padgarden; set nextmap_ffa vstr map_ffa12" +set map_ffa12 "map wop_padgarden_night; set nextmap_ffa vstr map_ffa13" +set map_ffa13 "map wop_padkitchen; set nextmap_ffa vstr map_ffa14" +set map_ffa14 "map wop_padlibrary; set nextmap_ffa vstr map_ffa15" +set map_ffa15 "map wop_padship; set nextmap_ffa vstr map_ffa16" +set map_ffa16 "map wop_padshop; set nextmap_ffa vstr map_ffa17" +set map_ffa17 "map wop_trashmap; set nextmap_ffa vstr map_ffa1" + + +// Spray Your Color +set map_syc1 "map wop_airplane; set nextmap_syc vstr map_syc2" +set map_syc2 "map wop_anteroom; set nextmap_syc vstr map_syc3" +set map_syc3 "map wop_backyard; set nextmap_syc vstr map_syc4" +set map_syc4 "map wop_bath; set nextmap_syc vstr map_syc5" +set map_syc5 "map wop_cabin; set nextmap_syc vstr map_syc6" +set map_syc6 "map wop_diner; set nextmap_syc vstr map_syc7" +set map_syc7 "map wop_huette; set nextmap_syc vstr map_syc8" +set map_syc8 "map wop_jail; set nextmap_syc vstr map_syc9" +set map_syc9 "map wop_padattic; set nextmap_syc vstr map_syc10" +set map_syc10 "map wop_padgarden; set nextmap_syc vstr map_syc11" +set map_syc11 "map wop_padkitchen; set nextmap_syc vstr map_syc12" +set map_syc12 "map wop_padlibrary; set nextmap_syc vstr map_syc13" +set map_syc13 "map wop_padship; set nextmap_syc vstr map_syc14" +set map_syc14 "map wop_padshop; set nextmap_syc vstr map_syc15" +set map_syc15 "map wop_trashmap; set nextmap_syc vstr map_syc1" + + +// Last Pad Standing +set map_lps1 "map wop_airplane; set nextmap_lps vstr map_lps2" +set map_lps2 "map wop_anteroom; set nextmap_lps vstr map_lps3" +set map_lps3 "map wop_backyard; set nextmap_lps vstr map_lps4" +set map_lps4 "map wop_cabin; set nextmap_lps vstr map_lps5" +set map_lps5 "map wop_diner; set nextmap_lps vstr map_lps6" +set map_lps6 "map wop_huette; set nextmap_lps vstr map_lps7" +set map_lps7 "map wop_padatticLPS; set nextmap_lps vstr map_lps8" +set map_lps8 "map wop_padcrash; set nextmap_lps vstr map_lps9" +set map_lps9 "map wop_padgarden_night; set nextmap_lps vstr map_lps10" +set map_lps10 "map wop_padkitchenLPS; set nextmap_lps vstr map_lps11" +set map_lps11 "map wop_padlibraryLPS; set nextmap_lps vstr map_lps1" + + +// Free For All Team +set map_tffa1 "map wop_airplane; set nextmap_tffa vstr map_tffa2" +set map_tffa2 "map wop_anteroom; set nextmap_tffa vstr map_tffa3" +set map_tffa3 "map wop_backyard; set nextmap_tffa vstr map_tffa4" +set map_tffa4 "map wop_bath; set nextmap_tffa vstr map_tffa5" +set map_tffa5 "map wop_cabin; set nextmap_tffa vstr map_tffa6" +set map_tffa6 "map wop_diner; set nextmap_tffa vstr map_tffa7" +set map_tffa7 "map wop_huette; set nextmap_tffa vstr map_tffa8" +set map_tffa8 "map wop_jail; set nextmap_tffa vstr map_tffa9" +set map_tffa9 "map wop_padattic; set nextmap_tffa vstr map_tffa10" +set map_tffa10 "map wop_padcrash; set nextmap_tffa vstr map_tffa11" +set map_tffa11 "map wop_padcrash_dm17; set nextmap_tffa vstr map_tffa12" +set map_tffa12 "map wop_padgarden; set nextmap_tffa vstr map_tffa13" +set map_tffa13 "map wop_padkitchen; set nextmap_tffa vstr map_tffa14" +set map_tffa14 "map wop_padlibrary; set nextmap_tffa vstr map_tffa15" +set map_tffa15 "map wop_padship; set nextmap_tffa vstr map_tffa16" +set map_tffa16 "map wop_padshop; set nextmap_tffa vstr map_tffa17" +set map_tffa17 "map wop_trashmap; set nextmap_tffa vstr map_tffa1" + + +// Capture The Lolly +set map_ctl0 "map wop_colorstageCTL; set nextmap_ctl vstr map_ctl1" +set map_ctl1 "map wop_fridgeCTL; set nextmap_ctl vstr map_ctl2" +set map_ctl2 "map wop_journeyCTL; set nextmap_ctl vstr map_ctl3" +set map_ctl3 "map wop_padasiaCTL; set nextmap_ctl vstr map_ctl4" +set map_ctl4 "map wop_padbaseCTL; set nextmap_ctl vstr map_ctl5" +set map_ctl5 "map wop_padboxCTL; set nextmap_ctl vstr map_ctl6" +set map_ctl6 "map wop_padcloisterCTL; set nextmap_ctl vstr map_ctl7" +set map_ctl7 "map wop_padcrashCTL; set nextmap_ctl vstr map_ctl8" +set map_ctl8 "map wop_westernCTL; set nextmap_ctl vstr map_ctl0" + + +// Spray Your Color Team +set map_tsyc1 "map wop_airplane; set nextmap_tsyc vstr map_tsyc2" +set map_tsyc2 "map wop_anteroom; set nextmap_tsyc vstr map_tsyc3" +set map_tsyc3 "map wop_backyard; set nextmap_tsyc vstr map_tsyc4" +set map_tsyc4 "map wop_bath; set nextmap_tsyc vstr map_tsyc5" +set map_tsyc5 "map wop_cabin; set nextmap_tsyc vstr map_tsyc6" +set map_tsyc6 "map wop_diner; set nextmap_tsyc vstr map_tsyc7" +set map_tsyc7 "map wop_huette; set nextmap_tsyc vstr map_tsyc8" +set map_tsyc8 "map wop_jail; set nextmap_tsyc vstr map_tsyc9" +set map_tsyc9 "map wop_padattic; set nextmap_tsyc vstr map_tsyc10" +set map_tsyc10 "map wop_padgarden; set nextmap_tsyc vstr map_tsyc11" +set map_tsyc11 "map wop_padkitchen; set nextmap_tsyc vstr map_tsyc12" +set map_tsyc12 "map wop_padlibrary; set nextmap_tsyc vstr map_tsyc13" +set map_tsyc13 "map wop_padship; set nextmap_tsyc vstr map_tsyc14" +set map_tsyc14 "map wop_padshop; set nextmap_tsyc vstr map_tsyc15" +set map_tsyc15 "map wop_trashmap; set nextmap_tsyc vstr map_tsyc1" + + +// BigBalloon +set map_bb0 "map wop_anteroomBB; set nextmap_bb vstr map_bb1" +set map_bb1 "map wop_backyardBB; set nextmap_bb vstr map_bb2" +set map_bb2 "map wop_bathBB; set nextmap_bb vstr map_bb3" +set map_bb3 "map wop_cabinBB; set nextmap_bb vstr map_bb4" +set map_bb4 "map wop_dinerBB; set nextmap_bb vstr map_bb5" +set map_bb5 "map wop_huetteBB; set nextmap_bb vstr map_bb6" +set map_bb6 "map wop_jailBB; set nextmap_bb vstr map_bb7" +set map_bb7 "map wop_padatticBB; set nextmap_bb vstr map_bb8" +set map_bb8 "map wop_padcrashBB; set nextmap_bb vstr map_bb9" +set map_bb9 "map wop_padgardenBB; set nextmap_bb vstr map_bb10" +set map_bb10 "map wop_padkitchenBB; set nextmap_bb vstr map_bb11" +set map_bb11 "map wop_padlibraryBB; set nextmap_bb vstr map_bb12" +set map_bb12 "map wop_padshipBB; set nextmap_bb vstr map_bb13" +set map_bb13 "map wop_padshopBB; set nextmap_bb vstr map_bb14" +set map_bb14 "map wop_trashmapBB; set nextmap_bb vstr map_bb0" + + +// +// Gametypes +// + +// Start with 8 lives in Last Pad Standing +set g_LPS_startLives "8" +// Do not enable InstaPad +set g_instaPad "0" + +// Free For All +set gametype_ffa "set g_gametype 0; set pointlimit 32; set timelimit 16; vstr nextmap_ffa; set next_gametype vstr gametype_syc" +// Spray Your Color +set gametype_syc "set g_gametype 3; set pointlimit 256; set timelimit 16; vstr nextmap_syc; set next_gametype vstr gametype_lps" +// Last Pad Standing +set gametype_lps "set g_gametype 4; set pointlimit 8; set timelimit 16; vstr nextmap_lps; set next_gametype vstr gametype_tffa" +// Free For All Team +set gametype_tffa "set g_gametype 5; set pointlimit 64; set timelimit 16; vstr nextmap_tffa; set next_gametype vstr gametype_ctl" +// Capture The Lolly +set gametype_ctl "set g_gametype 6; set pointlimit 8; set timelimit 16; vstr nextmap_ctl; set next_gametype vstr gametype_tsyc" +// Spray Your Color Team +set gametype_tsyc "set g_gametype 7; set pointlimit 512; set timelimit 16; vstr nextmap_tsyc; set next_gametype vstr gametype_bb" +// BigBalloon +set gametype_bb "set g_gametype 8; set pointlimit 256; set timelimit 16; vstr nextmap_bb; set next_gametype vstr gametype_ffa" + + +// +// Setup the rotations +// +set nextmap "vstr nextscript" +set nextscript "vstr next_gametype; set nextmap vstr nextscript" + +// Initialize individual map rotations +set nextmap_ffa "vstr map_ffa1" +set nextmap_syc "vstr map_syc3" +set nextmap_lps "vstr map_lps8" +set nextmap_tffa "vstr map_tffa17" +set nextmap_ctl "vstr map_ctl3" +set nextmap_tsyc "vstr map_tsyc12" +set nextmap_bb "vstr map_bb4" + +// Initialize gametype to start with +set next_gametype "vstr gametype_ctl" + +// +// You can now load a map via "vstr nextmap" +// + diff --git a/config/server-allgametypes.cfg b/config/server-allgametypes.cfg new file mode 100644 index 0000000..5345a74 --- /dev/null +++ b/config/server-allgametypes.cfg @@ -0,0 +1,12 @@ +// +// World of Padman - example server settings for all gametypes +// + + +// Just execute server-settings.cfg, which will load rotation.cfg +// which includes all gametypes by default +exec "server-settings.cfg" + +// Now load a map +vstr nextmap + diff --git a/config/server-bigballoon.cfg b/config/server-bigballoon.cfg new file mode 100644 index 0000000..ce1a35d --- /dev/null +++ b/config/server-bigballoon.cfg @@ -0,0 +1,16 @@ +// +// World of Padman - example server settings for BigBalloon gametype +// + + +// Just execute server-settings.cfg, which will load rotation.cfg +// which includes all gametypes by default +exec "server-settings.cfg" + +// Overwrite rotation to loop BigBalloon only +set gametype_bb "set g_gametype 8; set pointlimit 256; set timelimit 16; vstr nextmap_bb; set next_gametype vstr gametype_bb" +set next_gametype "vstr gametype_bb" + +// Now load a map +vstr nextmap + diff --git a/config/server-capturethelolly.cfg b/config/server-capturethelolly.cfg new file mode 100644 index 0000000..0a0b331 --- /dev/null +++ b/config/server-capturethelolly.cfg @@ -0,0 +1,16 @@ +// +// World of Padman - example server settings for Capture the Lolly gametype +// + + +// Just execute server-settings.cfg, which will load rotation.cfg +// which includes all gametypes by default +exec "server-settings.cfg" + +// Overwrite rotation to loop Capture the Lolly only +set gametype_ctl "set g_gametype 6; set pointlimit 8; set timelimit 16; vstr nextmap_ctl; set next_gametype vstr gametype_ctl" +set next_gametype "vstr gametype_ctl" + +// Now load a map +vstr nextmap + diff --git a/config/server-lastpadstanding.cfg b/config/server-lastpadstanding.cfg new file mode 100644 index 0000000..755bc4d --- /dev/null +++ b/config/server-lastpadstanding.cfg @@ -0,0 +1,16 @@ +// +// World of Padman - example server settings for Last Pad Standing gametype +// + + +// Just execute server-settings.cfg, which will load rotation.cfg +// which includes all gametypes by default +exec "server-settings.cfg" + +// Overwrite rotation to loop Last Pad Standing only +set gametype_lps "set g_gametype 4; set pointlimit 8; set timelimit 16; vstr nextmap_lps; set next_gametype vstr gametype_lps" +set next_gametype "vstr gametype_lps" + +// Now load a map +vstr nextmap + diff --git a/config/server-settings.cfg b/config/server-settings.cfg new file mode 100644 index 0000000..019ed7e --- /dev/null +++ b/config/server-settings.cfg @@ -0,0 +1,73 @@ +// +// World of Padman - example server settings +// +// NOTE: Any line that starts with // is ignored by WoP. +// Whitespace between commands is also ignored. +// + +// +// Administrator info +// +// Do not forget to edit and uncomment the two lines below +//sets admin "YOUR NAME HERE" +//sets email "YOUR EMAIL HERE" + +// +// Server name and message +// +// Name of the server. Can include color tags +set sv_hostName "My ^2first ^6WoP ^7server" +// "Message of the Day". Can include color tags +set g_MOTD "^7Visit ^6www.worldofpadman.net ^7for news and files" + +// +// Server settings +// +// Maximum number of players, including bots +set sv_maxClients "12" +// Enable Voice over IP +set sv_VoIP "1" +// Maximum bandwith per player. VoIP needs additional bandwidth. +// You only need to set this if your server is on a home connection with +// small upstream bandwith, e.g. dial-up. +// A value of 9000 is for 12 sv_maxClients and sv_VoIP 1 while on a 1 Mbps upstream. +set sv_maxRate "9000" + +// +// Bot settings +// +// Enable bots +set bot_enable "1" +// Automatically add 4 bots and kick them when humans connect +set bot_minPlayers "4" +// Bot skill, from 1 to 5. 2 is default +set g_spSkill "3" + +// +// Passwords +// +// Remote administration password. If not set, no remote administration is possible +set rconPassword "" +// Password needed for anyone to join the server. If not set, anyone can join +set g_password "" + +// +// Game settings +// +// Allow players to call votes for next map, kicking a player etc. +set g_allowVote "1" +// Do warmup at the start of every map +set g_doWarmup "1" +// Duration of the warmup, 30 seconds +set g_warmup "30" + +// +// Map and gametype rotation +// +// Execute contents of "rotation.cfg" +exec "rotation.cfg" + +// +// You can now load a map via "vstr nextmap" +// + diff --git a/config/server-sprayyourcolour.cfg b/config/server-sprayyourcolour.cfg new file mode 100644 index 0000000..4c2456d --- /dev/null +++ b/config/server-sprayyourcolour.cfg @@ -0,0 +1,18 @@ +// +// World of Padman - example server settings for Spray your colour and +// Spray your color Team gametype +// + + +// Just execute server-settings.cfg, which will load rotation.cfg +// which includes all gametypes by default +exec "server-settings.cfg" + +// Overwrite rotation to loop Spray your colour and Spray your color Team only +set gametype_syc "set g_gametype 3; set pointlimit 256; set timelimit 16; vstr nextmap_syc; set next_gametype vstr gametype_tsyc" +set gametype_tsyc "set g_gametype 7; set pointlimit 512; set timelimit 16; vstr nextmap_tsyc; set next_gametype vstr gametype_syc" +set next_gametype "vstr gametype_syc" + +// Now load a map +vstr nextmap + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..869351a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3.9" + +services: + wop: + build: . + ports: + - 27960:27960/tcp + - 27960:27960/udp \ No newline at end of file diff --git a/start-ffa.sh b/start-ffa.sh new file mode 100644 index 0000000..85f4f7f --- /dev/null +++ b/start-ffa.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +#[[ -n $SERVER_NAME ]] || SERVER_NAME="WOP Server" +#[[ -z $RCON_PASSWORD ]] || RCON_PASSWORD="ADMIN_PASS $RCON_PASSWORD + +#cd /wop/server/worldofpadman-1-6-2/ +./wop/server/data/wopded-linux.x86_64 +set dedicated 1 +set net_port 27960 +set com_hunkMegs 256 +exec wop/server_settings.cfg \ No newline at end of file