* A broadband (cable, DSL, T1) Internet connection. Upload bandwidth is what matters for servers. The more you have, the more players you can host.
* A Pentium III 700 MHz or faster computer, the faster the better.
* The game installed and patched to the latest version (1.04 for Jedi Outcast, 1.01 for Jedi Academy).
* The Dedicated Server program for your game (JK2 or JA) and operating system (Windows or Linux).
Jedi Knight II: Jedi Outcast
Windows dedicated server 1.04
Linux dedicated server 1.04b
Jedi Knight Jedi Academy
Windows dedicated server 1.011
Linux dedicated server 1.011
Mac OS X dedicated server 1.01
An exploit has been discovered that allows hackers to crash many Quake III engine-based games. An unofficial patch for the Windows and Linux Jedi Academy Dedicated Server has been posted by slider, the author of JA+ mod. It is unofficial, use at your own risk http://jediknight2.filefront.com/file/UNOFFICIAL_Patch_for_JA_101_Dedicated_Servers;41652
A patch for Jedi Outcast is available for Linux http://www.escapedturkey.com/files/fix/jk2/jkiided
A dedicated server can also be created using the Jedi Academy game itself. Start the multiplayer game, select Play, Create a Game, select the game type (g_gametype), server name (sv_hostname), minimum bots\players (bot_minplayers), maximum players (sv_maxclients), fraglimit, timelimit, map, then click Advanced and under Server Rules select Dedicated: Internet, Done, Begin.
You will need a config file to configure the server. The config file is where you set the server name, rcon password, time limit, frag limit, map rotation, number of players, etc. The config file is a simple text file that you can create with Wordpad, Notepad, or any other text editor. Here is a sample server config file:
seta sv_hostname "^1Your_server’s_name_goes_here"
seta g_motd "^3Your_greeting_goes_here!"
seta rconpassword "your_rconpassword_goes_here"
seta g_allowvote "0" // 0 to disable voting, 1 to enable voting
seta g_dismember "100" // the percentage (%) of time dismemberment will occur
seta g_filterBan "1" // 1 allows players to be banned from the server
seta g_forceRegenTime "200" // this default setting is recommended
seta g_forcepowerDisable "0" // disables Force powers based on a calculated bit-value
seta g_friendlyFire "0" // 1 means your weapons can damage teammates
seta g_gametype "0"
// For JK2: FFA 0, Holocron 1, Jedi Master 2, Duel 3, TFFA 5, CTF 7, CTY 8
// For JA: FFA 0, Duel 3, Power Duel 4, TFFA 6, Siege 7, CTF 8
seta g_inactivity "300" // kicks off idle players after 300 seconds
seta g_logClientInfo "1" // some player information will be recorded in the log
seta g_log "games.log" // the filename of the log file
seta g_locationBasedDamage "0"// damage depends upon what is hit (JA only)
seta g_maxForceRank "7" // sets the maximum Force rank available to players (1-7). 7 is Jedi Master Force points (100)
//seta g_password "yourpassword" // remove the leading // to activate, change password to "none" to deactivate
seta g_privateduel "0"// If 1 then one player can challenge another to duel in FFA
seta g_saberdamagescale "1" // controls the damage caused by lightsabers
seta g_teamAutoJoin "0" // If 1, new players are automatically placed on a team
seta g_teamForceBalance "0" // 0 allows numerically unbalanced teams
seta g_weaponDisable "0" // disables weapons based on a calculated bit-value
seta g_doWarmup "0"// If 1, there will be a warmup period set by g_warmup before the game begins (JK2 only)
seta g_warmup "30"// If g_doWarmup is 1, the length of the warmup period in seconds (JK2 only)
seta sv_maxclients 8 // the maximum number of players you will host. Related to your upload bandwidth and sv_maxrate
seta sv_maxRate 4000 // Related to your upload bandwidth and sv_maxclients. 4000 is the minimum for decent ping
seta sv_maxping "500" // only clients with pings lower than this can connect
seta sv_reconnectlimit "5" // number of times a client can attempt to connect
seta sv_zombietime "10" // seconds before a disconnected client is dropped
seta sv_pure "0" // 1 prevents some cheats but also use of skins and other files
seta sv_allowDownload "0" // 0 means the server won’t try to send files to the client
seta sv_allowAnonymous "0" // 0 prevents players joining anonymously
seta sv_timeout "200" // seconds before a client attempting to connect is dropped
seta sv_PrivateClients "0" // reserves and subtracts this # of slots from public slots
seta sv_PrivatePassword "" // the password to access reserved private slots
//These are the master servers to which your server will send “heartbeats”
seta sv_master1 "masterjk3.ravensoft.com" //change this to "masterjk2.ravensoft.com" for Jedi Knight II: Jedi Outcast
seta sv_master2 "qtracker.com"
seta sv_master3 "clanservers.net"
seta sv_master4 "master0.gamespy.com"
seta fraglimit "100" // a player wins if they score this before time runs out. For Duel, number of duels to win one round
seta duelFragLimit "10"// For Duel, the number of rounds to win the map\game
seta caplimit "10" // number of flag captures to win and end a CTF game before time runs out
seta timelimit "20" // minutes that each map runs
seta logfile "1" // generates the logfile named by g_log above
seta g_autoMapCycle "1" // set this to 0 if you will use a custom map rotation
map "your_starting_map" // you MUST state a starting map or the server won't start
// For a custom map rotation, use this design. You must remove the // in front of the lines to use them.
//seta g_autoMapCycle "0"
//set m1 "map NameOfFirstMap;set nextmap vstr m2"
//set m2 "map NameOfSecondMap;set nextmap vstr m3"
//set m3 "map NameOfThirdMap;set nextmap vstr m4"
// and so on and so on until you get to the last map in the cycle
//set m4 "map NameOfLastMap;set nextmap vstr m1"
//vstr m1 // this tells the server to start the first map in the custom rotation
Edit the file to make your settings, then save it as either autoexec.cfg or server.cfg. Place the file in the server's base folder.
Note: all of the lines have to be on one line each (no text wrap) and none of the settings can be more than 256 characters long.
In my opinion and in the opinion of others, Jedi Outcast and Jedi Academy are the most fun when played with all Force powers and weapons enabled. However, there might be situations where you want to disable one or more Force powers and\or weapons. Changing the value of g_forcepowerdisable and\or g_weapondisable disables Force powers or weapons respectively. g_duelWeaponDisable disables weapons in duels.
Each Force power and weapon has a bit-value (number) assigned to it. To disable a Force power, use its bit-value in g_forcepowerdisable. To disable several Force powers, add their bit-values together and use that number for g_forcepowerdisable.
For example, the bit-value for Force Pull is 16. To disable Force Pull, change the g_forcepowerdisable line in the server config file to read
seta g_forcepowerdisable 16
To disable Force Pull, Push, Grip, and Dark Rage, add up their bit-values: 16 + 8 + 64 + 256 = 344 and use that value for g_forcepowerdisable
seta g_forcepowerdisable 344
You can change the values in the server console as well using /set instead of seta, but the change won't take effect unless the map is restarted or the next map begins.
Weapons are disabled in a similar way with g_weapondisable, but Jedi Outcast and Jedi Academy have different bit-values for weapons, so make sure you use the right bit-values for a particular game.
Mind Trick 32
Dark Rage 256
Team Heal 2048
Team Energize 4096
Saber Attack 32768
Saber Defend 65536
Saber Throw 131072
Jedi Outcast Weapons
Bryar Pistol 8
E-11 Blaster Rifle 16
Tenloss Disruptor Rifle 32
Wookiee Bowcaster 64
Imperial Heavy Repeater 128
DEMP 2 256
Golan Arms Flechette 512
Rocket Launcher 1024
Thermal Detonators 2048
Trip Mines 4096
Detonation Packs 8192
Emplaced Sentry Guns 16384
Stationary Sentry Guns 32768
Jedi Academy Weapons
DL-44 Heavy Blaster Pistol 16
E-11 Blaster Rifle 32
Tenloss Disruptor Rifle 64
Wookiee Bowcaster 128
Imperial Heavy Repeater 256
DEMP 2 512
Golan Arms Flechette 1024
Rocket Launcher 2048
Thermal Detonators 4096
Trip Mines 8192
Detonation Packs 16384
Stouker Concussion Rifle 32768
In some cases you might want to disable some of the powerups (health, shields, etc.) that are on some maps. You can use these settings in your server.cfg
seta disable_item_medpak_instant 1
seta disable_item_medpak 1
seta disable_item_medpac 1
seta disable_item_shield_lrg_instant 1
seta disable_item_shield_sm_instant 1
seta disable_item_force_boon "1"
seta disable_item_force_enlighten_light "1"
seta disable_item_force_enlighten_dark "1"
Your upload bandwidth, sv_maxrate, and sv_maxclients are interelated. For a given upload bandwidth, if you increase sv_maxrate or sv_maxclients, you must decrease the other one, and vice versa. Think of upload bandwidth as the food supply at a party. For a given amount of food (upload bandwidth), if you feed each person a lot of food (higher sv_maxrate) they will be nice and full, but you will be able to feed only a few people (lower sv_maxclients). If you feed each person less food (lower sv_maxrate) you will be able to feed more people (higher sv_maxclients) but they might be a little hungry (higher ping). To feed lots of people lots of food (higher sv_maxclients and sv_maxrate) you will need more food (increased upload bandwidth).
You can measure your upload bandwidth by going to http://www.broadbandreports.com/stest and running a speed test. Remember, for servers upload bandwidth is most important.
Upload bandwidth (bps) = sv_maxclients x sv_maxrate x 8
sv_maxrate = upload bandwidth (bps) ÷ sv_maxclients ÷ 8
sv_maxclients = upload bandwidth (bps) ÷ sv_maxrate ÷ 8
If you wanted to host 8 players over the Internet with a 256kbps upload connection:
sv_maxrate = 256,000 ÷ 8 ÷ 8 = 4000. If you host 4 players (sv_maxclients 4) you can double sv_maxrate (256,000 ÷ 4 ÷ 8 = 8000).
sv_maxrate 4000 is the minimum rate for decent performance.
To simply cycle through all of the maps that support the gametype that you are running, use
seta g_gametype x //where x is the number of the gametype that you want (FFA is 0, Duel is 3, etc.)
seta g_autoMapCycle 1
If you want to use only some of the maps, or run them in a certain order, you will need a custom map rotation.
The basic design is to make several lines, one for each map in the custom rotation. Each line lists the map to be used and then "set nextmap vstr x" where x is the next line to be used. The last line points back to the first line to complete the cycle. g_autoMapCycle must be set to "0".
Here is a basic rotation:
seta g_autoMapCycle "0"
set m1 "map NameOfFirstMap;set nextmap vstr m2"
set m2 "map NameOfSecondMap;set nextmap vstr m3"
set m3 "map NameOfThirdMap;set nextmap vstr m4"
and so on and so on until you get to the last map in the cycle. If the cycle has 15 lines, the last line would be
set m15 "map NameOfLastMap;set nextmap vstr m1"
Notice that the last line ends with "set nextmap vstr m1" to return to the first line, completing the cycle so it can start over again.
It is very important to have a line telling the server a line to use first, or else the server won't start
vstr m1 // this tells the server to start the first map in the custom rotation
You can have several custom rotations, and switch between them with the /set nextmap vstr line_in_other_rotation command.
You can also change server settings in each line, so you can have maps with different g_motd, timelimits, fraglimits, gametypes, etc.
For example, this shows a group of custom map rotations I used on one of my servers:
set m111 "map ctf_imperial;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m112"
set m112 "map ctf_bespin;set g_motd "^3Aimbotters and cheaters will be BANNED^7";set nextmap vstr m113"
set m113 "map ctf_yavin;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m114"
set m114 "map ctf_ns_streets;set g_motd "^3Aimbotters and cheaters will be BANNED^7";set nextmap vstr m111"
set m122 "map ctf_bespin;set g_motd "^3Aimbotters and cheaters will be BANNED^7";set nextmap vstr m123"
set m123 "map ctf_yavin;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m124"
set m124 "map ctf_ns_streets;set g_motd "^3Aimbotters and cheaters will be BANNED^7";set nextmap vstr m122"
set m211 "map ctf_imperial;set bot_minplayers 2;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m212"
set m212 "map ctf_bespin;set g_motd "^3Aimbotters and cheaters will be BANNED^7";set nextmap vstr m213"
set m213 "map ctf_yavin;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m214"
set m214 "map ctf_ns_streets;set g_motd "^3Aimbotters and cheaters will be BANNED^7";set nextmap vstr m215"
set m215 "map ctf_ruins;set nextmap vstr m217"
set m216 "map ctf_forest;set bot_minplayers 0;kick allbots;set nextmap vstr m217"
set m217 "map ctf_bespinfort;set bot_minplayers 0;kick allbots;set nextmap vstr m212"
set m311 "map ctf_imperial;set g_motd "^1Turn off killtrackers ^3!ktoff ^1or be banned"^7;set g_doWarmup "1";set nextmap vstr m312"
set m312 "map ctf_bespin;set g_motd "^2Use Force Seeing level 3 to Matrix-dodge^7";set nextmap vstr m313"
set m313 "map ctf_yavin;set g_motd "^1Turn off killtrackers ^3!ktoff ^1or be banned"^7;set nextmap vstr m314"
set m314 "map ctf_ns_streets;set g_motd "^1Turn off killtrackers ^3!ktoff ^1or be banned"^7;set nextmap vstr m315"
set m315 "map ctf_ruins;set g_motd "^1Turn off killtrackers ^3!ktoff ^1or be banned"^7;set g_doWarmup "0";set nextmap vstr m316"
set m316 "map ctf_bespinfort;set g_motd "^2Use Force Seeing level 3 to Matrix-dodge^7";set g_doWarmup "0";set g_gametype "0";set nextmap vstr m317"
set m317 "map ffa_yavin;set g_motd "^2Type ^5/seta cg_dismember 2 ^2in console to see body parts fly^7";set g_doWarmup "1";set g_gametype "7";set nextmap vstr m311"
The rotation beginning with m111 was
the "standard" rotation with all 4 JK2 CTF maps. The rotation
beginning with m122 was the "peak hours" rotation used when the server
was crowded. It skipped the smallest map (ctf_imperial). The
rotation beginning with m211 added custom maps to the rotation. The
rotation beginning with m311 added custom maps and one map of FFA on ffa_yavin,
then went back to CTF. The line "vstr m111" told the
server to start with the first map of the "standard" rotation.
If you are behind a firewall and\or router, you will need to tell your firewall to let the jk2ded.exe or jampded.exe dedicated server program communicate with the Internet. Each firewall program is different, so you will have to find out how to do that for your firewall.
If you are using a router, you will need to open certain ports in the router so the server can connect to the Internet. Each router is different, so read the manual for your router to learn how to open the necessary ports.
For Jedi Knight II: Jedi Outcast, open ports 28060 through 28062 and 28070 through 28081(UDP)
For Jedi Knight Jedi Academy, open ports 29060 through 29062 and 29070 through 29081(UDP)
The most common cause of a server not being visible on the Internet is a router or firewall problem.
After you have created your config file (named autoexec.cfg or server.cfg) put it in the game's base (GameData\base) folder. Put the Dedicated Server program (jk2ded.exe or jampded.exe) in the GameData folder.
Right-click on the Dedicated Server program, drag to your Desktop, and choose Create Shortcut(s) Here.
Right-click on the shortcut that you just created, click Properties, then look in the box labeled Target
It should say "C:\Program Files\LucasArts\Star Wars JK II Jedi Outcast\GameData\jk2Ded.exe" for Jedi Outcast, or
"C:\Program Files\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\jampded.exe" for Jedi Academy.
If you named your config file autoexec.cfg you don't need to change the Target, the server will automatically execute the config file.
If you named your config file server.cfg you will need to edit the Target to tell the server to execute the server.cfg file. Edit the Target to read:
"C:\Program Files\LucasArts\Star Wars JK II Jedi Outcast\GameData\jk2Ded.exe" +exec server.cfg for Jedi Outcast, or
"C:\Program Files\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\jampded.exe" +exec server.cfg for Jedi Academy.
Notice that +exec server.cfg comes after the second quotation mark (").
Now simply double-click the shortcut you made and a window should appear. The window will display text as the server starts up. Enter the command /status into the server console window. It should list the starting map and any bots that are on the server.
Congratulations, your dedicated server is running!
You can't, unless someone happens to join your server over the Internet. That's pretty good proof that your server is visible. Other than that, the only way you can tell if your server is visible is for you or someone else to look for it from some other location.
If you start up your game and look for your server with Source set to Internet, you won't find it listed. That doesn't mean your server isn't visible on the Internet! Remember, you aren't using the Internet to connect to your server, you are connecting to your server locally over a Local Area Network (LAN), so you will see your server in your ingame server browser when you set Source to Local. Your server might or might not be visible over the Internet, but for you it will always be under Local.
It's helpful if you know what IP address your server is using. Go to http://www.whatismyip.com to find out what your IP address is. Ask a friend to look for your server with the All Seeing Eye or Qtracker, or with the ingame browser if they have the same game. Give them your IP address so they can enter it into the All Seeing Eye or Qtracker. If your friend has the same game, they can try to join your server by entering /connect yourIPaddress in their game console, where yourIPaddress is the IP address you got from http://www.whatismyip.com.
If your server isn't visible, it is most likely a firewall or router port problem. Make sure your firewall isn't blocking the server, and that you opened up the ports in your router if you are using one.
Playing the game (running a client) on the same computer that is running the server is possible but is not recommended. The client uses a lot of your computer's resources (CPU time and memory), and it can pull those resources away from the server, causing the server to lag. The ideal situation is to run the server on one computer and play (run the client) on another computer connected to the server over a LAN (Local Area Network). Run the server on the less-powerful computer, and play (run the client) on the more powerful computer.
Whether you choose to play on your own server, or on other servers while your server is running, you will need to use a non-default port for your client. Your server will be using the default port (28070 for JK2, 29070 for JA) so it isn't available for your client. If you try to run the client with the default port while your dedicated server is running, it will cause a conflict. You won't be able to join your Dedicated Server, and if you won't see any other servers using the ingame browser.
To run your client with a different port, right-click on the multiplayer program (jk2mp.exe or jamp.exe), drag to your Desktop, and choose Create Shortcut(s) Here.
Right-click on the shortcut that you just created, click Properties, then look in the box labeled Target. It should say
"C:\Program Files\LucasArts\Star Wars JK II Jedi Outcast\GameData\jk2mp.exe" for Jedi Outcast, or
"C:\Program Files\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\jamp.exe" for Jedi Academy.
Edit the Target to read:
"C:\Program Files\LucasArts\Star Wars JK II Jedi Outcast\GameData\jk2mp.exe" +set net_port 28072 for Jedi Outcast, or
"C:\Program Files\LucasArts\Star Wars Jedi Knight Jedi Academy\GameData\jamp.exe" +set net_port 29072 for Jedi Academy.
Use the shortcut to launch your game. If you want to play on your Dedicated server, you will find it when Source in the ingame browser is set to Local, not Internet. Why? Because you aren't connecting to your server over the Internet, you are connecting to your server over a Local Area Network. Other players using your server will see it listed under Source: Internet because they are using the Internet to connect to your server, even though you aren't.
The two most-used commands are /status and /set. /status is used to see the status of the server: what map is being used, who is on the server, and the ClientID (num), score, ping, IP address and port (address), and data rate (rate) of each player. /set is used to change various server settings, like the time limit, the next map to be played, or any other server setting. To see what a current setting is, enter the name of the cvar (console variable).
For example, to see what the current timelimit is, enter /timelimit. The server will answer
"timelimit" is:"20" default:"0".
To change the timelimit to 30 minutes, enter /set timelimit 30. The server will confirm by answering
broadcast: print "Server: timelimit changed to 30\n".
To see what the next map is, enter /nextmap. To change the next map that will played, enter /set nextmap mapname.
The /set nextmap vstr command can be used to switch from one custom map rotation to another. Look back at the sample map rotations I listed earlier. If I saw that the server was crowded and I wanted to switch to the 3-map "peak hours" rotation, first I sent the command /nextmap to see what the next map cycle line was coming up. Say the server responded with
5:40:18 PM:> nextmap
"nextmap" is:"vstr m113" default:""
then I would know that the next map would be m113 "map ctf_yavin;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m114". To switch over to the "peak hour" rotation, I would enter /set nextmap vstr m123. m123 is "map ctf_yavin;set g_motd "^1Killtrackers^3!silent ^2!silence ^3!ktoff ^1or ^2!power"^7;set nextmap vstr m124". So while the next map to start would still be ctf_yavin, it would be in the "peak hours" rotation instead of the "standard" rotation. The next map after ctf_yavin would be ctf_ns_streets, and then ctf_imperial would be skipped and the next map would be ctf_bespin. The transition from one rotation to the other is seamless and the map rotation isn't interrupted at all.
Most changes to server settings will take place immediately, but changes to g_motd, g_doWarmup, g_gametype, g_forcepowerdisable, and g_weapondisable won't take effect until the next map begins, or if the current map is restarted with /map_restart. You can delay restarting a map and start a countdown by entering /map_restart seconds. For example, to restart the current map in 30 seconds (and start a 30-second countdown) enter /map_restart 30.
To send a message to players, use /svsay message. The players will see a chat message from "Server".
To add a bot, first you must /set bot_minplayers 0 so the server won't kick the bot after you add it. Then enter /addbot NameOfBot (skill level 1-5) (team). NameOfBot is the name of a standard bot such as Kyle, Luke, Jan, Lando, etc. (skill level 1-5) is an optional parameter setting the skill level of the bot from lowest (1) to highest (5). (team) is another optional parameter to assign a bot to a team (RED or BLUE).
If the server has a config file to do something, use /exec filname.cfg. For example, if there is a file named "ffa.cfg" to change the server from CTF to FFA with a different map rotation, use /exec ffa.cfg.
To shut down the server immediately, enter /quit. To shutdown the server after the current map ends, enter /set nextmap quit.
To see a list of the .pk3 files (maps, vehicles, etc.) that the server has loaded, enter /path.
To see a list of all commands, enter /cmdlist.
To kick a bot or player, first use /status to get the bot or player's ClientID listed under num (the first column in the /status output). Then enter the command /clientkick ClientID and the bot or player will be kicked. You can kick all of the bots on the server with /kick allbots.
Banning of players is based on the player's IP address. Use /status to get the player's IP address listed under address in the /status output. Use the command /addip bannedPlayer'sIPaddress. To unban a player use /removeip IPaddress. To see a list of banned IP addresses use /listip.
To ban-kick a player, first use /status to get their IP address and ClientID, use /addip to ban them first, then use /clientkick to kick them.
To ban a range of IP addresses to cover someone with a dynamic IP address, replace the third or fourth group of numbers with 0. /addip 220.127.116.11 bans IP addresses 18.104.22.168 through 22.214.171.124 (255 addresses). /addip 126.96.36.199 bans IP addresses 188.8.131.52 through 184.108.40.206 (65,535 addresses). The more addresses you ban, the more likely you will keep someone with a dynamic IP address from sneaking back into your server, but you also increase the risk of banning innocent players who happen to have an IP addresses in the banned range.
The base games can ban only a limited number of players. If your ban list gets long and you add too many more IP addresses, the server will crash and won't run until you shorten the ban list. Most mods allow hundreds of IP addresses to be banned.
Mods can alter gameplay for better or worse, but all of them add complexity and make troubleshooting server problems more difficult. I strongly recommend that you run the base version of the game first and gain experience running a server without a mod before trying to run a mod on your server. If you start off running a server with a mod and the server won't start, or it crashes frequently or has other problems, you won't know if it's a problem with the mod or with the server itself. Get your server running with the base version first and make sure everything is working the way you want it to work.
If you decide to run a mod anyway, first download the mod from a file site and unzip the file. You will end up with a folder named after the mod, such as "academy", "disruption", "reload", "xmod", "ForceMod_III", etc. Put the entire mod folder in the server's GameData folder, not the "base" folder. The mod folder should be a "neighbor" to the "base" folder in the GameData folder (assuming a Windows installation). The mod might have its own config file, or its own "server.cfg" in the mod folder. Read the readme file(s) that came with the mod and edit the config file or the server.cfg file to set up the mod's features the way you want them.
Then edit the shortcut you made to launch the server (the server shortcut, not the client shortcut) and add +set fs_game nameofModFolder and +exec modConfigFileName.
For example, if you want to run Jedi Academy Mod 1.6 for Jedi Outcast, you would put the "academy" folder in the server's GameData folder. If there is an "academy.cfg" file in the "academy" folder, edit it to enable or disable the mod features that you want. Then edit the Target for the server's shorcut to read
"C:\Program Files\LucasArts\Star Wars JK II Jedi Outcast\GameData\jk2Ded.exe" +set fs_game academy +exec server.cfg +exec academy.cfg
You can check if the mod is running by entering /gamename. The server should respond with the name of the mod.
For Jedi Outcast, you can avoid some problems if you are running a pure server by "unpacking" the mod .pk3 file in the mod folder. For example, the disruption.pk3 mod file has a single folder in it called "vm" that contains a single file, "jk2mpgame.qvm". Unpack the disruption.pk3 file and put the "vm" folder containing the "jk2mpgame.qvm" file in the "disruption" folder, then delete the disruption.pk3 file. It will prevent clients from getting an "Invalid .pk3 file" error.
Most of the standard bots are not very good or "realistic". Adding customized bots to your server makes them more challenging and they can sometimes simulate real players well enough that some people can be fooled into thinking the bots are "real" players.
A quick and easy way to add custom bots is to download them. Try the I-Bots package or Cuko's l337 bots.
BotMaker is a useful program for customizing bots. A tutuorial that describes the bot personality characteristics is available here.
If your server won't start at all, check to see if your shortcut Target (command line) has +exec server.cfg if that is the name of your config file.
Check to see if you listed a starting map, either map mapname or vstr firstLineofCustomRotation.
Make sure none of your settings is more than 256 characters long, especially if you are using a mod with a multi-line MOTD (Message of the Day).
Check your custom map rotation carefully. Even one missing semi-colon or quotation mark can make the server hang or not start.
If your server runs but your friends can't see it over the Internet make sure your firewall isn't blocking the server and that you opened the correct ports on your router, if necessary.
If you have trouble running a mod, make sure your server runs fine without the mod first. Then add +set fs_game modFolder to the command line but don't add +exec modConfigFileName. The mod will run with default settings. If it runs, change only one mod setting at a time until you have the problem again. That will tell you which setting is causing the problem.
basejka and some mods are limited to 16 vehicle files in the base folder. If there are excess vehicles or maps with excess vehicles in the base folder, the server won't start.