Open xe1os opened 10 months ago
https://github.com/joedwards32/CS2/issues/47
The host can run:
host_workshop_map 12313123
Where 12313123
is the ID of the workshop map (in the URL)
I was testing the workshops maps, and it works perfect with the host_workshop_map
. I'm running that from rcon when the server start. Is there a way to auto load the workshops maps? Because if I don't set host_workshop_map
when I try to changelevel
the servers says "invalid map name".
@matiargs @DizzyThermal hi, please show me your docker-compose.yml with an example where any workshop map works. I tried everything possible.
@matiargs @DizzyThermal hi, please show me your docker-compose.yml with an example where any workshop map works. I tried everything possible.
I use:
CS2_ADDITIONAL_ARGS="+host_workshop_map <id>"
Oh, here's the funny thing, as soon as I add a pool of cards, everything breaks. And if only host_workshop_map - everything works.
- CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807 +host_workshop_collection 2428398726"
does not work
- CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807"
works
Oh, here's the funny thing, as soon as I add a pool of cards, everything breaks. And if only host_workshop_map - everything works.
- CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807 +host_workshop_collection 2428398726"
does not work- CS2_ADDITIONAL_ARGS="+host_workshop_map 3075706807"
works
I had this issue as well. Not sure what is the exact reason, but if I move "${CS2_ADDITIONAL_ARGS}"
in entry.sh
to somewhere higher, so other parameters are pushed after, this solves the issue. E.g.:
eval "./cs2" -dedicated \
"${CS2_IP_ARGS}" -port "${CS2_PORT}" \
-console \
-usercon \
-maxplayers "${CS2_MAXPLAYERS}" \
"${CS2_GAME_MODE_ARGS}" \
+mapgroup "${CS2_MAPGROUP}" \
+map "${CS2_STARTMAP}" \
+rcon_password "${CS2_RCONPW}" \
+sv_password "${CS2_PW}" \
"${CS2_ADDITIONAL_ARGS}" \ <<--- this used to be last
+sv_lan "${CS2_LAN}"
asking here before posting it as an issue just to make sure there are more with this issue; if not it might be the 3 collections i tried.
when using +host_workshop_collection XXX all players are disconnected (they actually just lose connection) on mapchange to the next workshop map. also at round end it first reloads the map it was already on before switching to the next one..
I've been reading some forums and the discussion page in steam, and there's some problem with the dedicated server and the workshops collection. We need to wait the fix from Valve sides.
At the moment, I'm setting up a server with a default map (de_dust2) and when the server is up, I use rcon to send the command to host_workshop_collection XXXXXX
, and then send the command to changelevel XXXXX
to a level from that collection, and is working ok. When the map ends, the server gives you the options to vote with the maps from the collection. This solution works for me.
I couldn't make it work with the CS2_ADDITIONAL_ARGS.
@matiargs
Why does this console command work for you?
host_workshop_collection 3070959270 host_workshop_collection 2428398726
https://steamcommunity.com/sharedfiles/filedetails/?id=3070959270 https://steamcommunity.com/sharedfiles/filedetails/?id=2428398726
@yannickvr It didn’t work out for me, I changed two lines, as you advised, but there was no result. Can you please attach your docker composer file (removing all confidential data). Particularly interesting are ID cards and groups
host_workshop_collection itself works well but on first load you'll need to be patient as it needs to download the maps. (also dont forget your -authkey ;) mapgroup can be set to workshop
the only thing that is broken is the cycling between workshop maps in your collection. It tends to stick on the first map in the collection end of round. players voting for the next map in cycle does work though, endround mapvote does not.
if you have a small collection and it still refuses to load. start small with 1 or 2 maps in it and gradually add maps + restart server big chance one of the maps in the collection is broken or not for cs2 ;)
@JoSchaap Can you also please attach your docker composer file
When I set a workshop map and try to join the server, I get a segmentation fault
Below the error message:
cs2-dedicated | Server waking up from hibernation
cs2-dedicated | Sending S2C_CONNECTION to xxxxxxx:55241 [addons:'3072739628']
cs2-dedicated | Client #0 "PlayerName" connected @xxxxxxx:55241
cs2-dedicated | entry.sh: line 84: 34 Segmentation fault (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password xxxpass +sv_setsteamaccount XXX +sv_password xxxpass +sv_lan 0 "+host_workshop_map 3072739628"
Has anyone experienced similar issues and knows of a fix?
I don't know if it is releveant but when I join the server hosting a standard map, the second time I join the server, it also segfaults:
cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued.
cs2-dedicated | WatchDog! Server took too long to process (probably infinite loop)
cs2-dedicated | Watchdog timeout exceeded, exiting
cs2-dedicated | 0 Watchdog timeout exceeded, exiting
cs2-dedicated |
cs2-dedicated | entry.sh: line 84: 48 Segmentation fault (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password passxxx +sv_setsteamaccount xxxx +sv_password passxxx +sv_lan 0
@Hannes-Beckmann
cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | WatchDog! Server took too long to process (probably infinite loop) cs2-dedicated | Watchdog timeout exceeded, exiting cs2-dedicated | 0 Watchdog timeout exceeded, exiting cs2-dedicated | cs2-dedicated | entry.sh: line 84: 48 Segmentation fault (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password passxxx +sv_setsteamaccount xxxx +sv_password passxxx +sv_lan 0
I'm gonna guess your system is overloaded. Please make sure to have at least 2GB of free RAM and 2 CPU cores. Also check your file system (fsck)
For me, the server uses around 1.1 gigs when no player is connected.
@ComputersWithTimo I am running the server on a dedicated machine with Proxmox in a Ubuntu Server virtual machine. I have upgraded the RAM from 8GB to 16GB and the CPU cores from 4 cores to 8 cores. Now, the server is up and running, and I can successfully play workshop maps. Thank you for your help!
When I set a workshop map and try to join the server, I get a segmentation fault
Below the error message:
cs2-dedicated | Server waking up from hibernation cs2-dedicated | Sending S2C_CONNECTION to xxxxxxx:55241 [addons:'3072739628'] cs2-dedicated | Client #0 "PlayerName" connected @xxxxxxx:55241 cs2-dedicated | entry.sh: line 84: 34 Segmentation fault (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password xxxpass +sv_setsteamaccount XXX +sv_password xxxpass +sv_lan 0 "+host_workshop_map 3072739628"
Has anyone experienced similar issues and knows of a fix?
I don't know if it is releveant but when I join the server hosting a standard map, the second time I join the server, it also segfaults:
cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | [#3768413248 UDP steamid:xxxxx@xxxx:64489] recv queue overflow 1000 messages already queued. cs2-dedicated | WatchDog! Server took too long to process (probably infinite loop) cs2-dedicated | Watchdog timeout exceeded, exiting cs2-dedicated | 0 Watchdog timeout exceeded, exiting cs2-dedicated | cs2-dedicated | entry.sh: line 84: 48 Segmentation fault (core dumped) ./cs2 -dedicated -ip 0.0.0.0 -port 27015 -console -usercon -maxplayers 12 +game_type 1 +game_mode 2 +mapgroup mg_active +map de_inferno +rcon_password passxxx +sv_setsteamaccount xxxx +sv_password passxxx +sv_lan 0
Server hibernation seems to cause this. I tested CS2 outside of the docker container and the same segfault occurs, so it looks like a CS2 on Linux bug.
I'm looking at introducing a change to the default server.cfg to make hibernation configurable and have it disabled by default.
@matiargs
Why does this console command work for you?
host_workshop_collection 3070959270 host_workshop_collection 2428398726
https://steamcommunity.com/sharedfiles/filedetails/?id=3070959270 https://steamcommunity.com/sharedfiles/filedetails/?id=2428398726
Where do you type that message? What program? is it in portainer? if yes, how? :)
Where do you type that message? What program? is it in portainer? if yes, how? :)
I send the command from RCON. You can use this tool https://github.com/gorcon/rcon-cli.
Is it not possible to fix this an easy way yet? if yes, what to add in docker-compose?
In case anyone is still having issues with map rotation using host_workshop_collection
one quick look at the logs reveals exactly what the problem is
CHANGELEVEL: Not changing level, mp_match_end_restart is false, mp_match_end_changelevel is false and next is the same
Once mp_match_end_changelevel
is set, workshop collections work just fine for me
environment:
CS2_STARTMAP: "\\<empty\\>"
CS2_MAPGROUP: workshop
CS2_ADDITIONAL_ARGS: "+host_workshop_collection <id> +mp_match_end_changelevel true"
In case anyone is still having issues with map rotation using
host_workshop_collection
one quick look at the logs reveals exactly what the problem isCHANGELEVEL: Not changing level, mp_match_end_restart is false, mp_match_end_changelevel is false and next is the same
Once
mp_match_end_changelevel
is set, workshop collections work just fine for meenvironment: CS2_STARTMAP: "\\<empty\\>" CS2_MAPGROUP: workshop CS2_ADDITIONAL_ARGS: "+host_workshop_collection <id> +mp_match_end_changelevel true"
I've been experimenting with this and I don't get any options to vote on maps or automatic rotation to other maps in the collection, even with +mp_match_end_changelevel true
What behaviour do you see @domve? Can you vote on map changes etc?
Did you define the mapgroup workshop
yourself in config?
Keeping issue open. Support is experimental currently.
I'm getting theses errors when trying to use the new env options:
[S_API FAIL] Tried to access Steam interface SteamUtils010 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamUser023 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamUtils010 before SteamAPI_Init succeeded.
Has anyone been able to get the new CS2_HOST_WORKSHOP_COLLECTION
and CS2_HOST_WORKSHOP_MAP
env variables to work?
Did you test this yourself by chance @joedwards32 ?
I did test myself in my dev environment and I'm right now waiting for a test container to spin up on AWS Fargate. Will post here with the result.
Here's my docker compose file from dev environment
services:
cs2-server:
image: joedwards32/cs2
container_name: cs2
environment:
# Server configuration
- SRCDS_TOKEN=************** # Game Server Token from https://steamcommunity.com/dev/managegameservers
- STEAMAPPVALIDATE=0
- CS2_SERVERNAME=changeme # (Set the visible name for your private server)
- CS2_CHEATS=0 # (0 - disable cheats, 1 - enable cheats)
- CS2_PORT=27015 # (CS2 server listen port tcp_udp)
- CS2_SERVER_HIBERNATE=0 # (Put server in a low CPU state when there are no players. 0 - hibernation disabled, 1 - hibernation enabled)
- CS2_RCON_PORT # (Optional, use a simple TCP proxy to have RCON listen on an alternative port. Useful for services like AWS Fargate which do not support mixed protocol ports.)
- CS2_LAN=0 # (0 - LAN mode disabled, 1 - LAN Mode enabled)
- CS2_RCONPW=changeme # (RCON password)
- CS2_PW=changeme # (CS2 server password)
- CS2_MAXPLAYERS=11 # (Max players)
# Game mode
- CS2_GAMETYPE=0 # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers)
- CS2_GAMEMODE=1 # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers)
# Workshop Maps
- CS2_HOST_WORKSHOP_COLLECTION=3320315839 # The workshop collection to use
- CS2_HOST_WORKSHOP_MAP=3276886893 # The workshop map to use. If collection is also defined, this is the starting map.
# Bots
- CS2_BOT_DIFFICULTY=2 # (0 - easy, 1 - normal, 2 - hard, 3 - expert)
- CS2_BOT_QUOTA=11 # (Number of bots)
# TV
- TV_AUTORECORD=0 # Automatically records all games as CSTV demos: 0=off, 1=on.
- TV_ENABLE=0 # Activates CSTV on server: 0=off, 1=on.
- TV_PORT=27020 # Host SourceTV port
- TV_PW=changeme # CSTV password for clients
- TV_RELAY_PW=changeme # CSTV password for relay proxies
- TV_MAXRATE=0 # World snapshots to broadcast per second. Affects camera tickrate.
- TV_DELAY=0 # Max CSTV spectator bandwidth rate allowed, 0 == unlimited
# Logs
- CS2_LOG=on # 'on'/'off'
- CS2_LOG_MONEY=1 # Turns money logging on/off: (0=off, 1=on)
- CS2_LOG_DETAIL=1 # Combat damage logging: (0=disabled, 1=enemy, 2=friendly, 3=all)
- CS2_LOG_ITEMS=1 # Turns item logging on/off: (0=off, 1=on)
volumes:
- cs2:/home/steam/cs2-dedicated/ # Persistent data volume mount point inside container
ports:
- "27015:27015/tcp" # TCP
- "27015:27015/udp" # UDP
- "27020:27020/udp" # UDP
volumes:
cs2:
And some rcon output from that running server
$ ./csgo-rcon-v1.3.0-linux-amd64 -a 192.168.0.31:27015 -p changeme status
Server: Running [0.0.0.0:27015]
Client: Disconnected
----- Status -----
@ Current : game
source : console
hostname : changeme
spawn : 3
version : 1.40.3.0/14030 10072 secure public
steamid : [G:1:10988532] (85568392931027956)
udp/ip : 0.0.0.0:27015 (public 109.156.218.170:27015)
os/type : Linux dedicated
players : 0 humans, 0 bots (0 max) (not hibernating) (unreserved)
---------spawngroups----
loaded spawngroup( 1) : SV: [1: de_biome | main lump | mapload]
loaded spawngroup( 2) : SV: [2: maps/de_biome_skybox | main lump | mapload | point_prefab]
loaded spawngroup( 3) : SV: [3: prefabs/misc/counterterrorist_team_intro | main lump | mapload | point_prefab]
loaded spawngroup( 4) : SV: [4: prefabs/misc/terrorist_team_intro | main lump | mapload | point_prefab]
loaded spawngroup( 5) : SV: [5: prefabs/misc/end_of_match | main lump | mapload | point_prefab]
loaded spawngroup( 6) : SV: [6: prefabs/misc/team_select | main lump | mapload | point_prefab]
---------players--------
id time ping loss state rate adr name
#end
$ ./csgo-rcon-v1.3.0-linux-amd64 -a 192.168.0.31:27015 -p changeme ds_workshop_listmaps
de_biome
de_vertigo_45
And a working AWS ECS/Fargate example:
{
"taskDefinitionArn": "arn:aws:ecs:eu-west-1:**********:task-definition/cs2:72",
"containerDefinitions": [
{
"name": "cs2-container",
"image": "joedwards32/cs2:latest",
"cpu": 0,
"portMappings": [
{
"containerPort": 27015,
"hostPort": 27015,
"protocol": "udp"
},
{
"containerPort": 27016,
"hostPort": 27016,
"protocol": "tcp"
},
{
"containerPort": 27020,
"hostPort": 27020,
"protocol": "udp"
}
],
"essential": true,
"environment": [
{
"name": "CS2_RCONPW",
"value": "changeme"
},
{
"name": "CS2_RCON_PORT",
"value": "27016"
},
{
"name": "SRCDS_TOKEN",
"value": "**********"
},
{
"name": "CS2_HOST_WORKSHOP_COLLECTION",
"value": "3320315839"
},
{
"name": "CS2_GAMETYPE",
"value": "0"
},
{
"name": "TV_PW",
"value": "changeme"
},
{
"name": "CS2_GAMEMODE",
"value": "1"
},
{
"name": "TV_ENABLE",
"value": "1"
},
{
"name": "CS2_BOT_DIFFICULTY",
"value": "2"
},
{
"name": "CS2_BOT_QUOTA",
"value": "11"
},
{
"name": "CS2_HOST_WORKSHOP_MAP",
"value": "3276886893"
},
{
"name": "CS2_PW",
"value": "changeme"
},
{
"name": "CS2_MAXPLAYERS",
"value": "11"
}
],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/simple-gaming-service/cs2",
"awslogs-region": "eu-west-1",
"awslogs-stream-prefix": "streaming"
}
},
"systemControls": []
}
],
"family": "cs2",
"executionRoleArn": "arn:aws:iam::**********:role/ecs-sgs-2d6",
"networkMode": "awsvpc",
"revision": 72,
"volumes": [],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "ecs.capability.extensible-ephemeral-storage"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2",
"FARGATE"
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "2048",
"memory": "4096",
"ephemeralStorage": {
"sizeInGiB": 50
},
"registeredAt": "2024-09-05T19:23:25.426Z",
"registeredBy": "arn:aws:iam::**********:user/terraform",
"tags": []
}
Here's my docker compose file from dev environment
services: cs2-server: image: joedwards32/cs2 container_name: cs2 environment: # Server configuration - SRCDS_TOKEN=************** # Game Server Token from https://steamcommunity.com/dev/managegameservers - STEAMAPPVALIDATE=0 - CS2_SERVERNAME=changeme # (Set the visible name for your private server) - CS2_CHEATS=0 # (0 - disable cheats, 1 - enable cheats) - CS2_PORT=27015 # (CS2 server listen port tcp_udp) - CS2_SERVER_HIBERNATE=0 # (Put server in a low CPU state when there are no players. 0 - hibernation disabled, 1 - hibernation enabled) - CS2_RCON_PORT # (Optional, use a simple TCP proxy to have RCON listen on an alternative port. Useful for services like AWS Fargate which do not support mixed protocol ports.) - CS2_LAN=0 # (0 - LAN mode disabled, 1 - LAN Mode enabled) - CS2_RCONPW=changeme # (RCON password) - CS2_PW=changeme # (CS2 server password) - CS2_MAXPLAYERS=11 # (Max players) # Game mode - CS2_GAMETYPE=0 # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers) - CS2_GAMEMODE=1 # (Used if CS2_GAMEALIAS not defined. See https://developer.valvesoftware.com/wiki/Counter-Strike_2/Dedicated_Servers) # Workshop Maps - CS2_HOST_WORKSHOP_COLLECTION=3320315839 # The workshop collection to use - CS2_HOST_WORKSHOP_MAP=3276886893 # The workshop map to use. If collection is also defined, this is the starting map. # Bots - CS2_BOT_DIFFICULTY=2 # (0 - easy, 1 - normal, 2 - hard, 3 - expert) - CS2_BOT_QUOTA=11 # (Number of bots) # TV - TV_AUTORECORD=0 # Automatically records all games as CSTV demos: 0=off, 1=on. - TV_ENABLE=0 # Activates CSTV on server: 0=off, 1=on. - TV_PORT=27020 # Host SourceTV port - TV_PW=changeme # CSTV password for clients - TV_RELAY_PW=changeme # CSTV password for relay proxies - TV_MAXRATE=0 # World snapshots to broadcast per second. Affects camera tickrate. - TV_DELAY=0 # Max CSTV spectator bandwidth rate allowed, 0 == unlimited # Logs - CS2_LOG=on # 'on'/'off' - CS2_LOG_MONEY=1 # Turns money logging on/off: (0=off, 1=on) - CS2_LOG_DETAIL=1 # Combat damage logging: (0=disabled, 1=enemy, 2=friendly, 3=all) - CS2_LOG_ITEMS=1 # Turns item logging on/off: (0=off, 1=on) volumes: - cs2:/home/steam/cs2-dedicated/ # Persistent data volume mount point inside container ports: - "27015:27015/tcp" # TCP - "27015:27015/udp" # UDP - "27020:27020/udp" # UDP volumes: cs2:
Still needs the "authkey" to access the workshop collection, right?
environment:
- CS2_ADDITIONAL_ARGS=-authkey *********
or
environment:
CS2_ADDITIONAL_ARGS: "-authkey *********"
Doesn't seem to be required. My examples work without it.
Hi,
Would like to have workshop maps support functionality.
Thank you