JCoop4, an Unreal 1 Coop Game mod by Joss Liu
       j88oss@yahoo.com
       http://www.geocities.com/j88oss

Version history
01/29/2003 4th public release, more features, some overhaul of ugly code
           new sequence remapping, more default inventory control, better
           ending control and visibility
11/10/2002 3rd public release, major overhaul
           all of the admin functions from the AdminTool have now been
           moved into the game (in playerpawn). Many new functions and
           features.
10/15/2002 2nd release
09/11/2002 first public release
           version 1 fixed minor bug with spectator getting inventory
           removed AKey item from the gametype file
09/08/2002 version 0.2 fixed minor display bug with armor showing up
           in the wrong place.
           updated JCoop.int to only show Coop Game, so your game will
           be found in the browser properly.
09/03/2002 version 0.1 released for beta testing


0.
Contents
------------------------------------------------------------------------
1. Introduction
2. Install
3. Quick Start
4. Configuration Options
5. Recommendations
6. Commands Reference
7. Known Bugs
8. Notes
9. Thanks

------------------------------------------------------------------------
1.
Introduction

1.1
Package file contents:
JCoop4.u          - the class file
JCoop4.int        - menu configuration file
JCoop4-readme.txt - this doc file

Anyone wants source code can simply email me at j88oss@yahoo.com.

1.2
Description

1.2.1
Player notes

Any player can use the "selfsay" and "setautoactivate" commands. See summary below.

1.2.2
Server Admin notes

JCoop4 is an extension of the Unreal CoopGame type. It provides an Unreal server administrator with some needed features, especially for Unreal Gold servers. I began this primarily to protect Coop server from malicious players who misuse the UPak player class summon ability. It has grown now to include many new features and to fix some general problems with the game. Many issues with the original game have been addressed by now and the server admin has much more control over the game, with most features configurable, server is harder to molest, making for a much better player experience.

If you are upgrading from a previous version of JCoop, *make sure* you remove jcoop*.u and jcoop*.int from your system directory before installing this or running your server. 

Please note some commands have changed. Notably, 'tel' command is reduced, and replaced by 'end' command. This command no longer affects the map teleporters, but instead, the game's SendPlayer() function.

JCoopGame plays well with Asgard's AKcoop mutator :) although it helps to turn off the player's health setting feature of JCoop.

1.3
Current feature set

1.3.1
Disables UPak player class selection. This is the first major feature of JCoop. UPak comes delivered with Unreal Gold to provide the Return To Na Pali game play (items, weapons, monsters, etc.) It came with a new UPak player class (exact same skins), so I think this feature was intentional. There is a feature (bug?) in the UGold UPak player class that allows any UPak player to summon in any Gold server. Clearly this gives substantial opportunity to a malicious player. The UPak player class is disallowed without making any UPak.u calls, so this will work well, even if you have UPak disabled on your server, or if you have 224f/225f versions of Unreal. Now the admin can still allow players to summon if desired, still without using the UPak player class.

1.3.2
Can set up the server to automatically set players incoming health and inventory items. Can set all inventory to respawn (like the default behaviour for guns).

1.3.3
Allows privileged player or admin to log into a server that is already full using a new password (FullSvrPass). Be careful with this one!

1.3.4
Announces to all players the incoming player status (player, admin, spectator). Admin gets announcements for failed logins.

1.3.5
New ScoreBoard shows player score and deaths, and a cummulative Coop score (if enabled) for the level. Your own listing in the scoreboard is highlighted in yellow, and spectators are shown in white (spectator takes precedence over yourself, so if you log in as spectator you see your name in white, not yellow). For admins, the scoreboard also shows the player ID. Admin may be tagged in the scoreboard list if configured.

1.3.6
Persistent scores (if enabled). Player can have scores restored when re-entering the same level.

1.3.7
Individual player can now be muted.

1.3.8
Configurable timers for levels, consisting of a default timer and a custom map timer list. Some levels can have the ending locked up by malicious players (or maybe accident LOL) Locked levels can be set to time out and switch automatically, so no more server hung waiting for admin switch levels.

1.3.9
All commands from the AdminTool have been incorporated into the PlayerPawn, and additional commands provided (described below).

1.3.10
There are now 4 admin passwords that the server admin can set. Password 0 is unrestricted, and passwords 1-3 are reduced privilege admin; with these passwords the temp Admin is restricted from some commands as well as a restricted keyword list (for the 'admin' and 'summon' commands). What this means is you can give out an admin password and then change or revoke it if necessary, without bothering admins that use another password.

The commands described in section 6 note the restrictions.

1.3.11
Spam protection provided. What a player says cannot be repeated within a timeout period. The players comments have a history of 4 messages, and a configurable timeout.

1.3.12
Login protections now include:
Cannot login with empty name.
Cannot repeat login rapidly.
PreLogin now manages the keepout list, so players that are temporarily prohibited from logging in will no longer even spawn a playerpawn that gets kicked.
Rejection messages are provided to the player that attempts login in these cases.

1.3.13
Admin can put a player into a keepout list (managed by PreLogin), and that player cannot login again for the duration of the current level. Less extreme than putting player into a firewall, and useful as an intermediate step.

1.3.14
All inventory items now handed out in the same way, from the same list. No more separate (and limited) arrays for weapons and pickups, just one list for all items.

1.3.15
SkaarjPlayer and NaliPlayer now have the same collisionradius as human player, although the collisionheight is unchanged. This should allow the Skaarj and Nali players ability to get in places they previously had problem going.

1.3.16
New playerstart (jPlayerStart) that can be summoned by admin anywhere in a map. The game will give preference to jPlayerStart and the original playerstarts will not be used. Simply "killall jPlayerStart" and the original playerstarts will be used again.

1.3.17
Player shot announcement - Player can be notified who shot the friendly fire.

1.3.18
Idle Player kicking - Admin can configure a time limit, and if a player doesn't move for this amount of time, they will be automatically kicked. A one minute warning will be given to the player.

1.3.19
Suicide Limits
Admin can configure the maximum number of suicides allowed, and once a player has reached that limit, no more suicides can be made.

1.3.20
Extra Effects
You may have noticed that the ringexplosion and other effects are missing or reduced on the dedicated server. Now you can configure dedicated server to show these extra effects in online play (uses some bandwidth, though).

1.3.21
New ending effects: visible ending teleporters, view ending player.

The end teleporter can be made visible. Appears as a small yellow stick man next to an arrow.

When a player ends, an announcement is made to all players, and all players get a view of the ending, as well as the scoreboard displayed for a few (configurable) seconds before loading the next map.

1.3.22
Map resequencing - map sequence can now be controlled. Useful examples provided.

1.4
Game problems addressed:

Game menu now shows "Joss' Coop Game" for starting server, and server shows in the browsers "Coop Games" tab.

Even more Accessed Nones fixed.

Player with space in name will not longer bother Gold Server, but player will likely receive the default player class (FemaleTwo in jCoop).

Empty "say" will no long beep the console of all players.

bClassicDeathMessages is honored in this gametype.

Gold Listen server has problems with any player can switchlevel/switchcooplevel/slomo. This has been corrected since JCoop3 for listenserver.

Constant rapid login (like Klingon likes to do) will badly bog down the server. There is now a delay in the login process for consecutive identical logins to prevent this.

------------------------------------------------------------------------
2.
Install
Installation is quite simple and straightforward.

2.1
Download and unzip this package. (well, you already did that, didn't you?)

2.2
If you have any previous versions, please remove them *now*. Remove any jcoop?.u and jcoop?.int files. Put JCoop4.u and JCoop4.int into your system directory (usually c:\unreal\system or c:\unrealgold\system). Put the JCoop4-readme.txt anywhere you want to save it.

This is all the installation necessary for players and server admins. Players that don't pre-install this may receive this file from the server into thier cache directory.

2.3
JCoop4.int
This file contains the configuration for the game start menues and the Advanced Options panel. You now will see "Joss' Coop Game" in the game menu, and the game will be listed in the browser "Coop Games" tab. Additionally, categories have been added to the Advanced Options->Game Types->Joss' Coop Play for configuration.

2.4
Game configuration is saved in Unreal.ini [JCoop4.JCoopGame] section. After running JCoopGame once and making some configuration changes, this new section will be saved in your Unreal.ini file. Description below.

------------------------------------------------------------------------
3.
Starting Game

3.1
Quick Start
You can start the game server either through the menues, or from the DOS command line (recommended).

3.1.1
Starting from Menu: start the game, select multiplayer, start new multiplayer game. Make your game type selection "Joss' Coop Game". Other selections as you normally would. Your log will have a banner from the JCoopGame indicating your startup.

3.1.2
Starting from command line simply add ?game=JCoop4.JCoopGame to your normal startup options.

3.1.2.1
Example dedicated server:

unreal nyleve?game=JCoop4.JCoopGame?difficulty=4 -server

(there are many options you can specify not described here; find details on Epic's web site)

3.1.2.2
Example listen server:
(a listen server is where the host game is also the server, such as you get from clicking "start" rather than "dedicated" in the server start menues)

unreal nyleve?game=JCoop4.JCoopGame?difficulty=3?name=yourname?password=youradminpass?listen

(youradminpass must be the same as defined in the JCoop4 section of your Unreal.ini file)

3.1.2.3
Here is a sample batch file that will restart your server in case of a crash. (sorry, no help for a hung server here). It starts a dedicated server using a separate .ini file initialization and giving unique log file names for each instance, set to high task priority. This batch file works with Windows 2000/XP with command extensions enabled (cmd /x; this is the default for Win2K/XP), but is not likely to work with Win98/Me without some changes. For details on how logname is set, type "help set" at an NT/2000/XP command prompt.

ServerRestart.bat ------------------------------------------------------
echo off
rem start Unreal game on 2nd map, hardest setting

title Unreal restart script
:start

date /t
time /t

copy UnrealSvr-def.ini UnrealSvr.ini
set logname=%date:~4%-%time::=%
set logname=%logname: =0%
set logname=%logname:~0,17%.log

start /wait /high Unreal.exe nyleve.unr?difficulty=4?game=JCoop4.JCoopGame INI=UnrealSvr.ini LOG=%logname% -server

goto start
end of script----------------------------------------------------------

3.2
Login to full server

3.2.1
This feature was implemented to allow a remote admin to log into a full server when needed. It is the case that a local admin can always increase Maxplayers at the game console, and always log in. It may be the case that you would like to give a remote admin (or a special player) this facility. WARNING: Be careful when giving out this extra password, as it will override the normal game behaviour of rejection when the server is full. With too many players, the game quickly becomes unplayable.

3.2.2
This feature allows one to log into a full server with the proper password. See 4. below for setting up this feature. Once set up, to force a login to a full server, you should add the new option "?FullSvrPass=mypwd" to your login line. Example:

(> open 192.168.0.45?password=lotus?FullSvrPass=mypwd

3.3
Map timer settings

3.3.1
Map timer works similar to the one found in Death Match. When DefaultTimeLimit is set to something other than zero, or when a time value other than zero exists for a map in the custom map timer list, then a timer is set to that value for the current map. The timer will start countdown when the first player logs into a level. When the timer expires, the game will switch level to the next Coop map. The next map is found from an ending teleporter, and may be translated by the sequence control (below). If you are in a non-coop map, then maybe there is no end teleporter set. In that case, the game will switch to "Vortex2" map. This timer is useful for the case where a level end is blocked out (Example: at end of Ruins, a player can go to the end area, he is locked in. Player can then die, suicide or disconnect, and no other player can reach the end teleporter.)

3.5.4
DefaultTimeLimit is the default map time limit in minutes. Suggested setting this to zero (disabled) or 90 minutes or so. CustomMapTimer contains entries for the CustomMapTimer list. The format is <mapname>:<timelimit>. The colon is required.

DefaultTimeLimit=0
CustomMapTimer=passage:15
CustomMapTimer=noork:20
CustomMapTimer=ruins:30
CustomMapTimer=naliboat:15
CustomMapTimer=nalic:45
CustomMapTimer=extremedgen:5
CustomMapTimer=extremedark:45
CustomMapTimer=endgame:30
CustomMapTimer=gatewaycoop:15

The example list above will have no timer for any maps except those listed in the CustomMapTimer list. These are the typical Unreal1 maps that a player could lock up to block the game. (Gatewaycoop is from the new end map set you can find at http://ammo.at/napali). Having timers set for these maps allows the server to automatically change the map with out needing an admin present. Pick time values that give players plenty of time to complete the level without having to wait too long in case the level is blocked.

3.5.5
Map Sequence Control
You can now control the sequence of maps by specifying entries in the Sequence array. When an entry matching OriginalNext is found in the ending teleporter, the NewNext map is used instead. Example below: Sequence[0] is useful for original maps and will cause the vortex2 map to be loaded rather than the endgame map (where the server will be hung); Sequence[1] is useful for an error found in the RTNPcoopbeta maps that would send you to the original velora map rather than the coopbeta version.

Sequence[0]=(OriginalNext="endgame",NewNext="vortex2")
Sequence[1]=(OriginalNext="velora",NewNext="veloracoopbeta")
Sequence[2]=(OriginalNext="",NewNext="")
   ...
Sequence[30]=(OriginalNext="",NewNext="")
Sequence[31]=(OriginalNext="",NewNext="")

------------------------------------------------------------------------
4.
Configuration Options
Here is a description of all the available .ini file options, as well as the major description of features.

4.1
Accessing the JCoop4 Coop Game Options
Access the JCoop options from the Advanced Options of the game server menu.
For Dedicated server, you find the Unreal icon in the system tray of your Windows console. Clicking on it will reveal three choices. Choose 'Advanced Options' to bring up the panel for setting game options. In a listen server, you can type 'preferences' at the tab prompt (at least in Unreal Gold). Click on 'Game Types' then on "Joss' Coop Play" to find the options described in section 4.2 below.

Under "Joss' Coop Play" you will find four categories:
Effects
GameControl
PlayerControl
SequenceControl

Please note a minor problem with the games ability to edit lists (dynamic arrays): it seems that items cannot be deleted from the lists, though they can be added and edited with no problem. If you find you need to delete items, you must do this directly by editing the Unreal.ini file. This problem does not affect arrays, only lists.

4.2
[JCoop4.JCoopGame] section
This is the new section that will be used in your Unreal.ini. You may edit these options in the Unreal.ini (or other .ini file, if you use the 'INI=' option on the command line) rather than using the GUI panel described in 4.1.

Please note that there are changes for this section from previous versions of JCoop. This reflects the many new features available.

Options are grouped according to the categories seen in the Advanced Options tab.

Please *NOTE* that these options:

     bNoFriendlyFire=True
     bNoMonsters=False
     bHumansOnly=False
     bCoopWeaponMode=False
     bClassicDeathmessages=False

will originally be copied from the [UnrealShare.CoopGame] section and are not visible in the "Joss' Coop Play" tab. Also, after they are copied, changing the [UnrealShare.CoopGame] values will not affect the JCoopGame settings. This is unfortunate, but is how the game operates. To change these values, use "admin" commands in the game (admin set jcoopgame bnofriendlyfire false, for example) or directly edit your unreal.ini file.

4.2.1
Effects

     bShowEnds=True

This will make the ending teleporter visible to all players in the server. Set to False for the normal, invisible ending teleporter.

     bShowExtraEffects=True

Will make the server show all the special effects you see in the single player game (such as ring explosion from the asmd).

     ServerTravelPause=3

Number of seconds that the server will pause when the ending is triggered before actually switching maps. Gives players a few seconds to say "GG" or look at scoreboard.

4.2.2
GameControl

     AdminPassword[0]=
     AdminPassword[1]=
     AdminPassword[2]=
     AdminPassword[3]=
These elements control admin logging into the server. AdminPassword[0] is the unrestricted admin; the other three will have some restrictions noted in the Command Reference section below. At least one AdminPassword must be defined in order for a player to log in as admin. Passwords in the [Engine.GameInfo] section will be ignored by JCoop, but will still be used by the other game types.

     bCastFailedLogin=True
Causes a message to admins when a player fails login.

     bChatLog=True
This will cause all the player "say" commands to log to the game console (and log), prefaced with "ChatLog:". Now you can review all the conversation from the game. BTW, you also can use the "say" command at the game console. This text will appear on client consoles in white at the top of the screen, with no name to identify the sender.

     bCoopScore=True
Shows a new header on the scoreboard with the cumulative player score (Players, number of monsters killed), and the cumulative monster score (Enemy, number of players killed).

     bFullSvrLogin=False
With bFullSvrLogin=false the server behaves as expected; when MaxPlayers is reached, players are rejected for full server. If bFullSvrLogin=true *and* FullSvrPass is defined, then a player can force login to a full server by adding "?FullSvrPass=somepassword" to the login request. This is especially useful for an admin who might not otherwise be able to enter the full server (remote admin). Prudence suggests that not many should have this password, otherwise the server could suffer as it becomes too full.

     bRespawnAll=False
False and inventory item respawning behaves normally. True, and all inventories (ammo, health, etc.) will respawn in one seconds, just like the weapons do.

     bShowAdmins=True
When true, an announcement is sent to all players when an admin logs in.

     FullSvrPass=somepassword
The password used by the bFullSvrLogin option.

     GamePassword=
Set this to some password if you wish to restrict access to your server.

4.2.3
PlayerControl

     bAllowSummons=False
When this is true, any player logged in can summon items (restricted by the RestrictedKeyword list). This is similar to the UPak summon ability in a Gold server. Caution advised when using this option, as a mal player can foul up your server pretty quickly.

     bIdleKick=True
bIdleKick=True will kick idle players (player that doesn't move for IdleAllowTime minutes).
False will not autokick idle players.

     bKeepScores=True
If True and player leaves or loses connection, his score will be restored on reconnect (during same level only). If False, then player score acts as in normal coop game, that is, it is reset to 0 when player leaves (or kicked) or loses connection.

     bNoSpam=True
True will prevent repetition of the last few comments within some small period of time (15 seconds). False and the game will not prohibit repitition (normal behaviour).

     bSetHealth=True
bRefreshHealth=True, and players healths will be set to the newHealthRef value at every login, including level changes.

      bShowPlayerShots=True
True and player will be notified who make the friendly fire.
False and no shot announcements will be made.

     GiveItem=akimbomm.akimbomm
     GiveItem=Amplifier
     GiveItem=armor
This is a list of inventory items that will be given to each player at spawn time (login, respawning after death, new level). Give each item a separate line beginning with "GiveItem=".

You can put any inventory items in this list: pickups or weapons. The list can be as long or short as you like (even non-existent). For items that can be found in UnrealShare or UnrealI you can put just the itemname. For items from other packages you will need to specify the package name (example: GiveItem=akimbomm.akimbomm).

     IdleAllowTime=10
IdleAllowTime is the number of minutes to allow a player to idle before auto-kicking.

     LoginDenyPeriod=10.000000
This is the time (in seconds) that a repeat login will be denied. That is, if an identical login occurs within this timespan, the attempt will be denied. Set to 0 to disable this feature.

     MaxSuicides=10
After this number of suicides, Player will not be able to use the 'suicide' command until reconnect or level change.

     newHealthRef=137
Default health is defined with newHealthRef. newHealthRef can be blank, and the game default is used (100 human, 80 Nali, 130 Skaarj) or a new value can be put here. Game scaling will be maintained, so human player will get this value, while Nali player will get 80% of this value, and Skaarj player will get 130% of the value.

     restrictedKeyword[0]=AdminPassword
     restrictedKeyword[1]=AdminKey
     restrictedKeyword[2]=
          ...
     restrictedKeyword[30]=
     restrictedKeyword[31]=

Words in this list will be disallowed by the "admin" and "summon" commands, except for the unrestricted admin (AdminPassword[0]).

4.2.4
SequenceControl

     CustomMapTimer=passage:15
     CustomMapTimer=noork:20
     CustomMapTimer=ruins:30
     CustomMapTimer=naliboat:15
     CustomMapTimer=nalic:45
     CustomMapTimer=extremedgen:5
     CustomMapTimer=extremedark:45
     CustomMapTimer=endgame:30
These elements control the MapTimers available to JCoop. When a timer expires, the server will automatically switch the map to the next map in sequence (defined in the ending teleporter, and translated by the Sequence rules below).

Format for the custome timer is: "CustomMapTimer=mapname:timelimit"; for the mapname, the .unr extension is assumed; timelimit is expressed in minutes; the colon is required. If you have an error in this list a message will be sent to the game log. At the beginning of each level, if there is an entry for that level, that timelimit value is used. Otherwise, the DefaultTimeLimit is used. A timer value of zero disables the timer. This list is the maps that could have the ending blocked, which would otherwise have the game stuck on a map that players could not end.

When a timer is set for a map, the timer will not begin counting until at least one player has logged into the server on that map.

     Sequence[0]=(OriginalNext="endgame",NewNext="vortex2")
     Sequence[1]=(OriginalNext="velora",NewNext="veloracoopbeta")
     Sequence[2]=(OriginalNext="",NewNext="")
        ...
     Sequence[30]=(OriginalNext="",NewNext="")
     Sequence[31]=(OriginalNext="",NewNext="")
You can now control the sequence of maps by specifying entries in the Sequence array. When an entry matching OriginalNext is found in the ending teleporter, the NewNext map is used instead. Example below: Sequence[0] is useful for original maps and will cause the vortex2 map to be loaded rather than the endgame map (where the server will be hung); Sequence[1] is useful for an error found in the RTNPcoopbeta maps that would send you to the original velora map rather than the coopbeta version.

     DefaultTimeLimit=0
Timer value used for a map when no CustomMapTimer entry exists for this map. A timer value of zero disables the timer.

------------------------------------------------------------------------
5.
Recommendations

If you run a server and a client on the same machine, it is recommended that you keep the .ini and .log files separate. You can do this by launching the server with the option "INI=server.ini" and "LOG=server.log". (Of course, you can name your server.ini and server.log file what you want; this is just an example).

Here is a command line example:

> unreal nyleve.unr?difficulty=3?game=JCoop4.JCoopGame -server INI=server.ini LOG=server.log -log

This example starts the game at Nyleve on hardest setting as a dedicated server using server.ini as the initialization file, server.log as the log file, and starts the game with the game console already opened (-log).

You may only use one gametype in any game, so JCoop4 may not be combined with any other gametype.

Recommended reading
Other server configuration and admin documents can be found on the internet. You can find some links that I think are useful at http://www.geocities.com/j88oss.

------------------------------------------------------------------------
6.
Command Reference
Some of the PlayerPawn commands available in the default game are not quite right, or cause some problems in the game. These have been addressed and are detailed in 6.1 below. Commands from Joss' AdminTool have been incorporated into the new PlayerPawn, and more new commands made available. These are detailed in 6.2 below.

Parameters are listed with the commands. Parameter in <> are required; parameters in [] are optional; <parm1|parm2|parm3> is a list of parameters; one of which is required.

6.1
Changed commands

Admin <command>
Admin passes commands to the server for execution. For admins not using AdminPassword[0] the command string is checked agains the restricted keyword list.

ghost
Ghost now makes you invisible and not a projectile target.

say <msg>
Say now maintains a short history of the player's recent messages, and will prohibit repetition for a brief period of time. This is to help cut down on the amount of spam in the game.
As well, say will no longer send on an empty string, which some players will use to constantly beep the consoles of other players.
As well, say can also log all chat comments to the game log, if configured.

setname <newname>
Setname will not work if player is prohibited from changing name.

slomo
switchlevel
switchcooplevel
For some reason, these commands were allowed for any player in a (Gold/UPak) listen server. This is no longer the case. You must be admin in the listen server to execute these commands.

suicide
The number of suicides a player is allowed is now limited, and can be configured by the server administrator. When a Player is within 5 counts of his suicide limit, he will get a message for each suicide warning of the limit. When the suicide limit has been reached, no more suicides will be allowed.

summon
For admins not using AdminPassword[0], the summon string is now checked against the restricted keyword list.

teamsay
Just calls say, so there will be no opportunity for annonymous say by players using teamsay in a non-team game.

walk
In the single player game, after ghosting or flying, you use walk to return to normal play mode. However, if you do this in a server, you are then stuck in an abnormal state, swimming animation, and strange jumping, and cannot properly go back to ghost mode. You are stuck like this until you either reconnect or the level changes. Walk will now return you to normal play mode.

6.2
New Commands

advance
Will advance to the next map in sequence, with sequence translation if defined.

announce
KillID and KickID will provide announcements to all players or not. This command will toggle whether these messages are delivered to other players. The Player killed or kicked will always get a message, as will any admins in the server.

end [on|off]
Controls level endings. 'end' will show current ending status; 'end on' turns on the players ability to end; 'end off' turns off the players ability to end the level. With no option, lists the ending status. When the level ending is off, admins will be notified if a player hits the ending. All players will be notified when a player successfully ends the level.

freeze <ID>
You provide the ID of the player you wish to freeze. When you do this to a player, he is stripped of all weapons, made so he cannot move, made invisible, and not collide with other players. This player is basically cut off from the ability to interact with the game. You can use this to really shut down an offensive player short of kicking. Use restart <ID> to restore this player to the game. Restricted for jrAdmin.

GetID
Will return the current list of players, along with their game ID number. The ID is also displayed in the scoreboard (for admin only). This ID number is required for many of the new commands. It is much too cumbersome to try to use the playername, since many players will use untypable characters (most call these ASCII characters). Restricted for jrAdmin.

giveAdmin <ID>
Player is given temp admin privilege (with restrictions) and lasts only during the current "life". This means it goes away for reconnect, or when the level changes, or the player dies. Temp Admin cannot use this command.

GotoP <ID>
This will attempt to move your PlayerPawn to a position just behind the selected player. Good for rapidly moving to a players position.

help [command]
This will display some useful reminder text. 'help' alone will show a list of the new commands with their parameters. 'help [command]' will show more detail for the specified command.

jsay
This will send a message to all admins in the game privately, that is, regular players will not see the text. All jsay activity is logged to the game log.

keepout <ID|list|clear>
'Keepout ID' will add the selected player to the keepout list, and kick the player. Future attempts to login again by this named player will fail in PreLogin, and a notice will be shown to the admins in the game. 'Keepout list' will list the current keepout list. 'Keepout clear' will clear the current keepout list. The keepout list is reset at each level change.

kickid [ID]
This will immediately kick the selected player. Useful for those players with names you cannot type easily in the game. A notice will be sent to all admins, and logged in the game log. If announce is set to tell players, then all players will be alerted to the kick. When used without [ID] will attempt to repeat the last kickid command.

killid [ID]
This will kill the selected player, with no score loss for the admin that issues the command. A notice will be sent to all admins, and logged in the game log. If announce is set to tell players, then all players will be alerted to the kill. When used without [ID] will attempt to repeat the last kickid command.

kni
This will kill nearby inventory items (radius 100, normal summon distance is 72). Useful if you hit a summon bind accidentally, or put too many weapons in the same spot and you are suffering from that annoying respawn problem (constant respawning if more than three weapons in/near same spot).

knp
This will kill nearby pawns (not PlayerPawns!) (radius 100, normal summon distance is 72). Useful when you inadvertently summon a monster.

MapTimer <on|off|show|set N>
'MapTimer on' will turn on the maptimer. 'Maptimer off' turns off the maptimer. 'Maptimer show' will show the current maptimer status. 'Maptimer set <N>' will set the current maptimer for N minutes and activate the timer, unless N is zero, in which case the timer is disabled. This makes no changes in the unreal.ini file; custom maptimer values must be set through the Advanced Options, or by editing the Unreal.ini file directly.

Mute <ID>
This will mute the selected player. That is, that player can no longer use the say/teamsay functions. This function is a toggle, so to unmute a player, repeat the 'mute ID' command.

protect
Some commands are restricted from affecting admins by default. 'protect' is a toggle to turn off this protection (or turn it back on). It is rare that you should have to kickid an admin, but if you ever do, you will need to use the protect command first. Restricted for temp Admin.

psay <ID> <msg>
This will post a message to the selected player. Other admins are alerted, and this is logged in the game console.

rename <ID> <newname>
This will rename the selected player to 'newname'. Once renamed, player will be prohibited from changing his own name until an admin changes his name a second time (player rename prohibition is a toggle).

restart <ID>
This will restart the selected player at the games playerstarts (or jPlayerStart, if any have been summoned). Can be used to 'rescue' players that fall in lava, and to release a player that has been restricted with 'freeze'.

revokeAdmin <ID>
This will remove the admin privilige for the selected player. If it is used on a player who logged in as admin, their admin privilege will be restored the next time they reconnect or the level changes, whichever comes first. Restricted for temp Admin.

SelfSay <msg>
Any player may use this command. It will simply put the text onto the console for the current player only (not broadcast) and is useful to get some output from your scripts.

SendEvent <eventname>
Will send the named event to all actors in a level (use 'showtags' to find the name you're interested in). This can cause a named triggered event to occur. Use to open doors when the nali is dead or unfriendly, for example.

SetAutoActivate True/False
Any player may use this command. This will set the bAutoActivate for your playerpawn. When TRUE, then inventory items you pick up will be automatically activated (those that support this feature), similar to the DeathMatchGame behaviour. When FALSE then normal coop game behaviour. This value is saved in the client's user.ini file.

shield
Will summon a shield for the player similar to the SkaarjTroopers shield (not shieldbelt) that last for 5 seconds.

showtags [radius [actor class]]
'ShowTags' will show all actors that have tags. 'showtags 500' will show all actors with tags in a 500 radius. 'showtags 500 mover' will show all mover tags within 500 radius. 'showtags 0 mover' will show all mover tags in the level. To use the 'actor class' parameter you must have a radius; use radius=0 to show all actors in the level. Use this command to find a name needed by 'sendevent'.

SummonP <ID>
The selected player will be teleported to a position directly in front with an orientation facing the summoner. Restricted for jrAdmin.

Tel
Tel now only list the teleporters and their URLs (same as 'tel list' in JCoop3).

Who
(use at game console) who will put into the game log the current list of players along with some other info. Can be used at the game console, so no need to start up a game to see who is in the server.

------------------------------------------------------------------------
7.
Bugs/Feedback

7.1
Known Issues

There can be a little confusion because there is new AdminPassword and GamePassword definitions. This was necessary because of restrictions from the regular game login script (GameInfo). When Playing with JCoop4, the [Engine.GameInfo] definitions for AdminPassword and GamePassword are ignored, rather the [JCoop4.JCoopGame] version is used instead.

Conflict between JCoop4 playerpawn health setting and the AKcoop mutator health settings. If you use both, then turn off the health settings in JCoop4.

Login to full server at level change sometimes fails with "Invalid FullSvrPass" message. I have not yet identified this problem. Simply try your login again.

SetAutoActivate True sets the bAutoActivate in your playerpawn. This causes inventory items that you pick up to activate immediately. Also, some items will not deactivate (amplifier, for one). This is normal behaviour and similar to the DeathMatchGame behaviour.

List handling in the GUI
As mentioned above, there is a problem with the way the Unreal1 engine handles the lists (dynamic array). Items in the lists can be added and edited, but it seems they cannot be deleted, nor are values recognized until the engine is restarted. You will need to directly edit your Unreal.ini to delete items from the various lists that JCoop4 uses. You will need to restart your server for any changes made to take effect. :(

7.2
Feedback
I've done quite a bit of testing of this on my LAN and on my internet server, but it is quite possible I've overlooked some error or bug. Please, if you find other bugs, problems, or have suggestions or comments for new features (including for this readme file), email me at j88oss@yahoo.com.

------------------------------------------------------------------------
8.
Notes

Be sure to visit http://wiki.beyondunreal.com/wiki if you're interested in Unreal scripting and map making.

8.1
Future ideas:
Move as much stuff into server side mutator as possible (reduces download, and is more flexible).

Full override of UnrealShare.CoopGame options so they can be set in Joss' Coop Play in Advanced Options.

In-game menues for JCoopGame configuration (?)

------------------------------------------------------------------------
9.
Thanks

Thanks to Zora for help with game/map problems I introduced.
Thanks to Maniac, Cherokee, Teela, DarkSW-Wolf for admin help, endless patience and constant stream of ideas.
Thanks to all my server players for their patience with all the downloads, play testing, ideas and feedback. Special thanks to Grateful_Friend for his enthusiasm and ideas.
Thanks to Zombie for feedback and great suggestions.
Thanks to digital zynthetic, }TCP{Wolf, and Koopa for ideas used here.
Original coding by Joss, July 2002 - January 2003

------------------------------------------------------------------------
end
