Map Downloading Bug


(Mael) #1

Is there any way to force people to download all the maps when they connect to the server? I seem to remember that it used to work this way. When players connect to the server, they automatically download the custom map rotation file and the custom map that is currently running. It doesn’t seem to download ALL the custom maps that are in the current rotation. Then once a custom map comes up in the rotation, all players who haven’t downloaded the map are booted. I would prefer that they players be forced to download all custom maps in the current rotation before joining the game.

My current server download settings are as follows:

set sv_dl_maxRate “42000”
set sv_allowDownload “1”
set sv_wwwDownload “1”
set sv_wwwBaseURL “http://bugs.preferredvendor.net
set sv_wwwDlDisconnected “1”
set sv_wwwFallbackURL “http://bugs.preferredvendor.net


(Lekdevil.NL) #2

Something fishy is going on here. I connected to TL, after which my client downloaded TLmapcycle-v10.pk3, temple3.pk3 (which wasn’t running whilst I connected, BTW) and etmapcycle.pk3. After that, the client entered an eternal “Awaiting gamestate…” mode. I’ll try again tomorrow, but it might be a nasty bug or a problem with the pk3 files…


(Mael) #3

Thanks for checking it out. It sounds like a problem localized to our server. I’m posting copies of my configs in the hopes that someone can spot the problem.

server.cfg

set dedicated “2” // 1: dedicated server for lan 2: dedicated server for internet
// set net_ip “209.15.177.186” // set to override the default IP ET uses
set net_port “27961” // set to override the default port ET uses

// PASSWORDS & CLIENTS

set sv_maxclients “26” // number of players including private slots
set g_password “” // set to password protect the server
set sv_privateclients “4” // if set > 0, then this number of client slots will be reserved for connections
set sv_privatepassword “" // that have “password” set to the value of “sv_privatePassword”
set rconpassword "
” // remote console access password
set refereePassword “****” // referee status password

// DL, RATE

set sv_maxRate “15000” // 10000 standard but poor for ET
set sv_dl_maxRate “42000” // increase/decerease if you have plenty/little spare bandwidth
set sv_allowDownload “1” // global toggle for both legacy download and web download
set sv_wwwDownload “1” // toggle to enable web download
set sv_wwwBaseURL “http://bugs.preferredvendor.net” // base URL for redirection
set sv_wwwDlDisconnected “1” // tell clients to perform their downloads while disconnected from the server
set sv_wwwFallbackURL “http://bugs.preferredvendor.net” // URL to send to if an http/ftp fails or is refused client side

// MOTD ETC

set sv_hostname “^3Time^4lord - 6 Map Campaigns” // name of server here
set server_motd0 “^3Cheaters will be banned!”
set server_motd1 “^4PB Logs & Screenshots Chkd”
set server_motd2 “^3Visit our forums @”
set server_motd3 “^4www.teamtimelord.net
set server_motd4 “^3The Tardis Awaits”
// MISC SETTINGS

set g_disableComplaints “1” //disable complaints add 1 mines, 2 airstrike/arty, 4 morter
set g_heavyWeaponRestriction “18”
set team_maxPanzers “3”
set g_antilag “1”
set g_altStopwatchMode “0”
set g_autofireteams “1”
set g_complaintlimit “9”
set g_ipcomplaintlimit “3”
set g_fastres “0”
set g_friendlyFire “1”
//set g_gametype “4” // Game type should be set from map rotation script
//set g_minGameClients “0”
set g_maxlives “0”
set g_alliedmaxlives “0”
set g_axismaxlives “0”
set g_teamforcebalance “1”
set g_noTeamSwitching “0”
set g_voiceChatsAllowed “4”
set g_doWarmup “0”
set g_warmup “40”
set sv_floodProtect “1”
set sv_pure “1”
set sv_minping “0”
set sv_maxping “301”
set sv_fps “20”
set snaps “20”
//set match_latejoin “1”
//set match_minplayers “4”
//set match_mutespecs “0”
//set match_readypercent “100”
//set match_timeoutcount “0”
//set match_warmupDamage “1”
set team_maxplayers “0”
set team_nocontrols “1”
set pmove_fixed “0”
set pmove_msec “8”

// LMS ONLY SETTINGS

//set g_lms_teamForceBalance “1”
//set g_lms_roundlimit “3”
//set g_lms_matchlimit “2”
//set g_lms_currentMatch “0”
//set g_lms_lockTeams “0”
//set g_lms_followTeamOnly “1”

// VOTING

set g_allowVote “1”
set vote_limit “5”
set vote_percent “50”
set vote_allow_comp “0”
set vote_allow_gametype “0”
set vote_allow_kick “1”
set vote_allow_map “0”
set vote_allow_matchreset “0”
set vote_allow_mutespecs “0”
set vote_allow_nextmap “0”
set vote_allow_pub “0”
set vote_allow_referee “0”
set vote_allow_shuffleteams “1”
set vote_allow_swapteams “1”
set vote_allow_friendlyfire “0”
set vote_allow_timelimit “0”
set vote_allow_warmupdamage “0”
set vote_allow_antilag “0”
set vote_allow_balancedteams “0”
set vote_allow_muting “1”

//Added inactivity

seta sv_zombietime “10”
seta sv_timeout “240”
seta g_inactivity “240”
seta g_spectatorInactivity “0”

// PUNKBUSTER

// sv_punkbuster is a readonly variable. Use +set sv_punkbuster on command line or use the command pb_sv_enable in the console
pb_sv_enable

// LOGGING

set g_log “etserver.log” // Game logging
set g_logsync 0
set logfile 2 // Console logging ( 1: enable 2: enable and sync )

// MAP ROTATION

exec campaigncycle.cfg // Campaign mode
//exec objectivecycle.cfg // Objective mode
//exec lmscycle.cfg // Last Man Standing mode

exec shrub.cfg

// WATCHDOG

// in case the game dies with an ERR_DROP
// or any situation leading to server running with no map
set com_watchdog 60 // defaults 60
set com_watchdog_cmd “exec campaigncycle.cfg” // defaults to quit

campaigncycle.cfg

set d1 “campaign cmpgn_northafrica_mod ; set nextcampaign vstr d2”
set d2 “campaign cmpgn_centraleurope_mod ; set nextcampaign vstr d1”

// server doesn’t recognise the campaign command when the gamecode isn’t running yet.
set d_initial “set g_gametype 4 ; map battery ; set nextcampaign vstr d2”
vstr d_initial

The contents of my pk3 rotation file
cmpgn_northafrica_mod

{
name “North Africa”
shortname “cmpgn_northafrica_mod”
description “This modified campaign includes battery, oasis, northpole, goldrush, radar, frostbite, Temple3, and fueldump”
maps “battery;oasis;northpole;goldrush;radar;frostbite;temple3;fueldump”
mapTC 374 374
type “wolfmp”
}

cmpgn_centraleurope_mod

{
name “Central Europe”
shortname “cmpgn_centraleurope_mod”
description “This modified campaign includes battery, oasis, northpole, goldrush, radar, frostbite, Temple3, and fueldump”
maps “battery;oasis;northpole;goldrush;radar;frostbite;temple3;fueldump”
mapTC 374 374
type “wolfmp”
}

Any ideas?


(M.I.L.F.Hunter) #4

bump, having same problem with ours too.

:banghead:


(Rippin Kitten) #5

Heh, and most people are trying to keep their server from sending clients maps that are not being played. =)

You can do this by “abusing” the sv_pure check. In pure mode, any pk3 file in use on the server must be on all clients. However, a pk3 that just holds a map and its assets won’t be “in use” unless its currently being played. Therefore, we just have to trick the pure check into thinking that the pk3 is actually being used.

The easiest way to do this is to take the map pk3s and merge them with the pk3 that holds your custom campaign script. This makes one “uber” pk3 that holds everything. Since the .campaign files are considered “in use” while the server is in campaign mode (server needs to know what campaigns are available), the whole pk3 is considered in use and therefore manditory on all clients.

Here’s a step-by-step on how to do it:

You probably know how to do all this stuff. But if I make this newbie-friendly hopefully we can just link to it when someone else asks how to set this up.

Make a new pk3 file
Pk3 files are just zip files with a different extension. You can open them by changing their file entension from .pk3 to .zip, then using an application like WinZip or WinXP’s native zip management feature.

To begin, open up your custom campaign’s pk3 file. Then, open up every custom map’s pk3 and move their entire contents to your custom campaign’s pk3. Make sure you copy everything, as a missing shader or script will cause all sorts of funkiness on your server. Once you have every map that you are using in your campaigns in that archive, zip it back up and change the extension back to .pk3.

Do not simply move the pk3 file into the new archive. You have to open it up, extract the contents, and add those into your archive.

Install the pk3 on the server (and your redirect)
Copy your newly crafted pk3 file to the etmain folder of your server (or if you are using a server mod with its own folder, install it there). If you are using the http redirect feature (which you should if you have the resources), make sure you send a copy to that location as well.

Restart the server
Using the server’s console or rcon, exec the server.cfg (/rcon exec server.cfg) to restart the server. The server will read your new pk3 file and add it to the pure list.

Connect to your server and test it out
Assuming you haven’t copied the pk3 to your local etmain folder, when you connect to the server it will start to send you your custom pk3 with all the maps.

A few notes about this:

First off, it isn’t very “polite.” If I have a copy of northpole, frostbite, and temple3 in their respective pk3s, I’ll still have to download your custom pk3 in order to play on your server. In essense, I’ll have two copies of these maps on my computer. If the six servers I play on each decide to do this, I could potentially end up having to download six copies of a particular map. Most maps are only 4 to 5 megs in size, so its not that big of a deal. But there are a few that come in at 30 to 50 megs each. Having to store ten copies of these maps to play on ten server’s custom setups means you’re eating up half a gig of drivespace. That’s pretty silly.

Its also inefficent from a server standpoint. Keep in mind that every client that connects to your server will need to download this pk3 file. If it starts to get over 30 megs or so (which isn’t totally out of the question), you’re talking about a pretty signifigant bandwidth allotment for even an occasionally busy server.

Since we’re talking about large files, its super important that you set up a redirect if you have the resources. Not only is it much faster than the q3 file transfer system, you also keep downloaders from choking server bandwidth.

Finally, if you decide to switch up your map rotation by swapping some maps for others, you’ll have to make a new pk3 file. Your clients will have to download this new copy as well. Think hard about what maps you want to include, since changing them around is a serious pain.

Savvy server admins will notice that all a pk3 file needs to be considered “in use” is a .campaign script file. That means you could edit all your custom map pk3s and add simple .campaign scripts to them. This makes it easier should you decide to move maps around, but you still run into all of the other problems listed above. The new pk3 file will have a different checksum than the original, so clients will have to download your unique version.

RK


(Mael) #6

Thanks for the comprehensive reply. I actually thought about doing what you suggest, but as you pointed out, it would be a huge pain in the ass since everyone would have to download maps they already have.

It doesn’t sound like there is an easy solution to this problem. The bottom line is that the server won’t force the download unless the pk3 file is in use… oh well :frowning:


(Grimmy_EFG) #7

edit: Ignore me. I need to learn to read.

Are you still having the connection problem with clients… We had a similar problem on the BoD server, i think i can remember how we fixed it.