ServerServiceConfiguration - festivaldev/Paradise GitHub Wiki
Each individual service included in the Paradise Web Services has its own configuration files with a specific purpose. These simple JSON files define which servers a player can connect to, which maps are available to play on, which items are available to buy in the shop and much more. Each file is located in <path to Paradise.WebServices>\ServiceData\<ServiceName>
(or <path to Paradise.WebServices>\ServiceData\Legacy\<ServiceName>
when using Paradise for legacy game versions).
If you change any of these files, both ApplicationWebService
and ShopWebService
will automatically reload them. Clients must restart the game to recognize those changes.
This file controls the amount of XP needed to reach a certain level, as well as the amount of points and XP rewarded at the end of each round.
Usually, the maximum level a player can reach in vanilla UberStrike is 80. For the sake of science, we took the level calculation from GTA Online and increased the maximum level to 100.
If you are playing on official Paradise server(s), levels are just cosmetic, as items in the shop are not restricted to a minimum level.
Key | Type | Default | Description |
---|---|---|---|
MaxLevel | int |
100 |
Defines the maximum level a player can reach. Vanilla UberStrike is capped at level 80. |
XpRequiredPerLevel | Dictionary<string, int> |
See table below | A dictionary of levels and the respective amount of XP to reach it. |
PointsBaseLoser | int |
16 |
Amount of received points when loosing a round. |
PointsPerMinuteLoser | int |
32 |
Amount of received points for every minute played when loosing a round. |
PointsBaseWinner | int |
50 |
Amount of received points when winning a round. |
PointsPerMinuteWinner | int |
100 |
Amount of received points for every minute played when winning a round. |
PointsHeadshot | int |
15 |
Points for every headshot. |
PointsNutshot | int |
25 |
Points for every nutshot. |
PointsSmackdown | int |
20 |
Points for every smackdown (melee kill). |
PointsKill | int |
50 |
Points for every regular kill. |
XpBaseLoser | int |
16 |
Amount of received XP when loosing a round. |
XpPerMinuteLoser | int |
32 |
Amount of received XP for every minute played when loosing a round. |
XpBaseWinner | int |
50 |
Amount of received XP when winning a round. |
XpPerMinuteWinner | int |
100 |
Amount of received XP for every minute played when winning a round. |
XpHeadshot | int |
15 |
XP for every headshot. |
XpNutshot | int |
25 |
XP for every nutshot. |
XpSmackdown | int |
20 |
XP for every smackdown (melee kill). |
XpKill | int |
50 |
XP for every regular kill. |
List of XP required to reach a certain level
Level | XP | Level | XP | Level | XP | Level | XP |
---|---|---|---|---|---|---|---|
1 | 0 | 26 | 136500 | 51 | 465200 | 76 | 961600 |
2 | 800 | 27 | 146200 | 52 | 482000 | 77 | 984700 |
3 | 2100 | 28 | 156200 | 53 | 499000 | 78 | 1008100 |
4 | 3800 | 29 | 166500 | 54 | 516300 | 79 | 1031800 |
5 | 6100 | 30 | 177100 | 55 | 533800 | 80 | 1055700 |
6 | 9500 | 31 | 188000 | 56 | 551600 | 81 | 1079800 |
7 | 12500 | 32 | 199200 | 57 | 569600 | 82 | 1104200 |
8 | 16000 | 33 | 210700 | 58 | 588000 | 83 | 1128800 |
9 | 19800 | 34 | 222400 | 59 | 606500 | 84 | 1153700 |
10 | 24000 | 35 | 234500 | 60 | 625400 | 85 | 1178800 |
11 | 28500 | 36 | 246800 | 61 | 644500 | 86 | 1204200 |
12 | 33400 | 37 | 259400 | 62 | 663800 | 87 | 1229800 |
13 | 38700 | 38 | 272300 | 63 | 683400 | 88 | 1255600 |
14 | 44200 | 39 | 285500 | 64 | 703300 | 89 | 1281700 |
15 | 50200 | 40 | 299000 | 65 | 723400 | 90 | 1308100 |
16 | 56400 | 41 | 312700 | 66 | 743800 | 91 | 1334600 |
17 | 63000 | 42 | 326800 | 67 | 764500 | 92 | 1361400 |
18 | 69900 | 43 | 341000 | 68 | 785400 | 93 | 1388500 |
19 | 77100 | 44 | 355600 | 69 | 806500 | 94 | 1415800 |
20 | 84700 | 45 | 370500 | 70 | 827900 | 95 | 1443300 |
21 | 92500 | 46 | 385600 | 71 | 849600 | 96 | 1471100 |
22 | 100700 | 47 | 401000 | 72 | 871500 | 97 | 1499100 |
23 | 109200 | 48 | 416600 | 73 | 893600 | 98 | 1527300 |
24 | 118000 | 49 | 432600 | 74 | 916000 | 99 | 1555800 |
25 | 127100 | 50 | 448800 | 75 | 938700 | 100 | 1584350 |
This file holds the definition for every map in the game, and the available options for each gamemode.
Also, huge thanks to @jonaszadach for completing the missing map descriptions!
Key | Type | Description |
---|---|---|
DisplayName | string |
The map's display name, shown in "Explore Maps" or when selecting a map for a new match. |
Description | string |
The map's description, shown when selecting a map for a new match. You can put some map lore in here or just describe the map layout in general, it's up to you. |
SceneName | string |
The name of the scene to load when selecting this map. The scene name is the file name - not the name of a scene's root node - of a scene created using Unity. |
MapId | int |
A unique internal identifier used by UberStrike to link maps to their respective definition. |
Settings | Dictionary<string, int> |
A dictionary containing the gamemode-specific settings for a map, per gamemode (see [#gamemode-settings]) |
Each gamemode has it's own settings for each map. If a map doesn't include settings for a specific gamemode, the game creation screen will not allow you to start a game with this gamemode.
Gamemode can either be 1
(Deathmatch), 2
(Team Deathmatch) or 3
(Team Elimination).
Key | Type | Default | Description |
---|---|---|---|
KillsMin | int |
1 |
The minimum number of kills for a player or team to win a round. |
KillsMax | int |
200 |
The maximum number of kills for a player or team to win a round. |
KillsCurrent | int |
100 |
The default amount of required kills to win a round. |
PlayersMin | int |
2 |
The minimum number of players allowed to join a game. |
PlayersMax | int |
32 |
The maximum number of player allowed to join a game. This value should not exceed the number of spawn points placed on a map. |
PlayersCurrent | int |
32 |
The default number of players allowed to join a game. |
TimeMin | int |
60 (1 minute) |
The minimum time (in seconds) a single round can last. |
TimeMax | int |
600 (10 minutes) |
The maximum time (in seconds) a single round can last. |
TimeCurrent | int |
300 (5 minutes) |
The default time (in seconds) a single round can last. |
[
{
"DisplayName": "Example Map",
"Description": "This is an example map. It has a floor, 4 walls and no ceiling so you can see the sky.",
"SceneName": "ParadiseExampleMap",
"MapId": 128,
"Settings": {
"1": {
"KillsMin": 1,
"KillsMax": 200,
"KillsCurrent": 100,
"PlayersMin": 2,
"PlayersMax": 16,
"PlayersCurrent": 16,
"TimeMin": 60,
"TimeMax": 600,
"TimeCurrent": 300
},
"2": {
"KillsMin": 1,
"KillsMax": 200,
"KillsCurrent": 100,
"PlayersMin": 2,
"PlayersMax": 16,
"PlayersCurrent": 16,
"TimeMin": 60,
"TimeMax": 600,
"TimeCurrent": 300
},
"3": {
"KillsMin": 1,
"KillsMax": 200,
"KillsCurrent": 100,
"PlayersMin": 2,
"PlayersMax": 16,
"PlayersCurrent": 16,
"TimeMin": 60,
"TimeMax": 600,
"TimeCurrent": 300
}
}
}
]
Because the Steam version of UberStrike is missing a few maps, we somehow need to make the game aware of the "custom" maps shipped with Paradise. One way would be to hardcode each map in Paradise itself, but in the future, we want to make it possible for everyone to create their own maps.
For now, because there is no map SDK available yet, we've settled on publishing custom map info via Web Services.
Key | Type | Description |
---|---|---|
Name | string |
The map's display name, shown when loading the map bundle (otherwise, the DisplayName defined in Maps.json is used). |
FileName | string |
The file name of the map bundle to load. |
MapId | int |
A unique internal identifier used by UberStrike to link maps to their respective definition. |
SupportedGameModes | int[] |
An array containing the ID of each supported gamemode for this map ((see [#gamemode-settings}). |
[
{
"Name": "Example Map",
"FileName": "ParadiseExampleMap.unity3d",
"MapId": 128,
"SupportedGameModes": [1, 2, 3]
}
]
With this file, you can control which servers a client can connect to.
Key | Type | Default | Description |
---|---|---|---|
CommServer | Dictionary<string, object> |
See CommServer | Defines the server for realtime communication (chat and notifications about new mails). |
GameServer | Dictionary<string, object>[] |
See GameServer | Defines a list of game servers players can create matches on. |
Key | Type | Default | Description |
---|---|---|---|
IP | string |
localhost |
The IP of a Paradise CommServer used for realtime chat. FQDNs and IP addresses are supported. |
Port | int |
5055 |
The port to connect to. |
UsageType | int |
6 |
A server's usage type. Always 6 for CommServers.None = 0, All = 1, Mobile = 2, CommServer = 6
|
Key | Type | Default | Description |
---|---|---|---|
IP | string |
localhost |
The IP of a Paradise Game Server used playing actual games. FQDNs and IP addresses are supported. |
Port | int |
5155 |
The port to connect to. |
Name | string |
Test |
The GameServer's name. Prepending a ISO-3166-1 alpha-2 two-letter country code in brackets (like [US] or [DE] ) allows you to set a server's country flag.Supported flags can be found in <path to Paradise.WebServices>\wwwroot\images\flags . |
PhotonId | int |
1 |
A unique identifier used to differentiate multiple Photon servers. If you serve multiple game servers, every server must have a unique PhotonId! |
MinLatency | int |
undefined |
The minimum latency a server has, used for sorting in the server browser. Allows only clients to connect with a latency less or equal than the specified value. |
Region | int |
1 |
The region of a Paradise Game Server. Probably unused by the game.UsEast = 0, EuWest = 1, AsiaPacific = 2, UsWest = 3, SouthKorea = 4, Japan = 5
|
UsageType | int |
6 |
A server's usage type. Always 1 for GameServers.None = 0, All = 1, Mobile = 2, CommServer = 6
|
{
"CommServer": {
"IP": "localhost",
"Port": 5055,
"Region": 1,
"UsageType": 6
},
"GameServers": [
{
"IP": "localhost",
"Port": 5155,
"Name": "Test",
"PhotonId": 1,
"Region": 1,
"UsageType": 1
}
]
}
This file let's you specify bundles containing credits, points or even items. Since every item is free on official Paradise server(s), there is no use for this file other than for demo purposes.
Keep in mind that when you set a price for a bundle, there will be no actual purchase made. The client however thinks that the purchase has been completed, and thus adds the bundle's contents to your account.
Key | Type | Description |
---|---|---|
Id | int |
A bundle's unique identifier. |
Name | string |
A bundle's display name that is shown in the shop. |
Description | string |
The bundle's description text. |
ImageUrl | string |
A URL pointing to an image used for "lottery popups" (probably nonexistent in 4.7.1). Recommended image size is 282x317. |
IconUrl | string |
A URL pointing to an image that is shown in the list of available bundles. Recommended image size is 75x75. |
USDPrice | decimal |
A decimal number representing the bundle's price. This is just visual and no actual money will be transferred to anyone For bundles to appear in the list of available bundles, you must set a price (even if it's just 0.00) |
Credits | int |
The amount of credits added to a player's wallet upon purchasing this bundle. |
Points | int |
The amount of points added to a player's wallet upon purchasing this bundle. |
BundleItemViews | Array | No documentation available, please check back later. |
Availability | int[] |
A list of channels where this bundle will be available. As UberStrike 4.7.1 can only be played via Steam, the list must include 12 for the bundle to be visible.WebPortal = 0, WebFacebook = 1, WindowsStandalone = 4, MacAppStore = 5, OSXStandalone = 7, IPhone = 8, IPad = 9, Android = 10, Steam = 12
|
[
{
"Id": 1,
"Name": "Example Bundle",
"Description": "This is an example bundle",
"ImageUrl": "https://via.placeholder.com/150",
"IconUrl": "https://via.placeholder.com/32",
"USDPrice": 0.00,
"Credits": 1,
"Points": 1,
"Availability": [ 12 ]
}
]
This file specifies not only the items available in the ingame shop, but also stats for each and every item used in the game.
There are four different item categories: FunctionalItems
(such as Name Changes and Clan Licenses), GearItems
, QuickItems
and WeaponItems
, each allowing you to set different properties for items in that category.
Every item is sorted into various item classes. The following table lists every item class used in UberStrike:
Item Class | Description |
---|---|
1 | Melee Weapons |
2 | Handguns (Legacy only) |
3 | Machine Guns |
4 | Shotguns |
5 | Sniper Rifles |
6 | Cannons |
7 | Splatterguns |
8 | Launchers |
12 | Boots |
13 | Head Gear (Helmets etc.) |
14 | Face Gear (Masks) |
15 | Upper Body Gear (Jackets, Suits, etc.) |
16 | Lower Body Gear (Pants) |
17 | Gloves |
18 | General QuickUse Items |
19 | Grenades |
21 | General Functional Items |
23 | Holo Items |
Each item is also required to have at least one price of any currency to be listed in the ingame shop, even if the price is 0
. Otherwise, an item will not be marked as "for sale".
Key | Type | Description |
---|---|---|
Price | int |
The price a user is charged in the selected ingame currency. |
Currency | int |
The ingame currency a user is charged in. Can be 1 for Credits (the ex-premium currency players used to be able to buy for real world money) or 2 for Points. |
Amount | int |
The amount of items to be added to a player's inventory. |
Duration | int |
The duration that this item will remain usable in a player's inventory.OneDay = 1, SevenDays = 2, ThirtyDays = 3, NinetyDays = 4, Permanent = 5
|
Every item, regardless of its category, needs to have at least the following information to be listed in the ingame shop.
Key | Type | Description |
---|---|---|
ItemClass | int |
The item class an item belongs to. See the table Item Class above for more details. |
ID | int |
An item's unique identifier. |
Name | string |
The display name of an item. |
Description | string |
A fancy description of this item. |
Prices | ItemPrice[] |
A list of prices to purchase this item. |
ItemProperties | Dictionary<ItemPropertyType, int> |
A list of extra item properties and their respective multipliers. Currently unused by Paradise.XpBoost = 1, PointsBoost = 2, CritDamageBonus = 4
|
{
"ItemClass": 21,
"ID": 1294,
"Name": "Name Change",
"Description": "Use this item to change your name once. Item is consumed after use.",
"Prices": [
{
"Price": 0,
"Currency": 1,
"Amount": 1,
"Duration": 5
},
{
"Price": 0,
"Currency": 2,
"Amount": 1,
"Duration": 5
}
],
"ItemProperties": {}
}
In addition to the basic item structure, Gear Items have the following properties:
Key | Type | Description |
---|---|---|
PrefabName | string |
The name of the prefab to use (includes models, materials, animations, etc-.) |
ArmorPoints | int |
The amount of armor points to add to a players armor capacity (limited to 200 AP total) |
In addition to the basic item structure, Quick Items have the following properties:
Key | Type | Description |
---|---|---|
PrefabName | string |
The name of the prefab to use (includes models, materials, animations, etc-.) |
CustomProperties | Dictionary>CustomProperty, int> |
Custom properties to add to this item. Used for total available amount of Spring Grenades (Amount ) and time required to recharge (RechargeTime ) |
In addition to the basic item structure, Weapon Items have the following properties:
Key | Type | Description |
---|---|---|
AccuracySpread | int |
Bullet/projectile spread per shot. |
CombatRange | int |
Maximum range per shot. (?) |
CriticalStrikeBonus | int |
Bonus damage per critical hit (Headshot/Nutshot). |
DamageKnockback | int |
Knockback applied to players hit by an explosive projectile. |
DamagePerProjectile | int |
Damage applied to players per hit. |
DamagePerSecond | float? |
|
DefaultZoomMultiplier | int |
Default zoom when switching to a weapons scope or ironsight. |
HasAutomaticFire | bool |
Specifies if a weapon continues to shoot if a player is holding the primary fire key. |
MaxAmmo | int |
Maximum amount of ammo a weapon can hold. |
MaxZoomMultiplier | int |
Amount of zoom when fully zoomed in. |
MinZoomMultiplier | int |
Amount of zoom when fully zoomed out. |
MissileBounciness | int |
Bounciness of projectiles emitted by the weapon (eg. launchers). |
MissileForceImpulse | int |
|
MissileTimeToDetonate | int |
Time required for emitted projectiles to detonate. |
ProjectileSpeed | int |
Initial speed of projectiles emitted by the weapon. |
ProjectilesPerShot | int |
Projectiles emitted per shot (eg. shotguns). |
RateOfFire | int |
Rate of fire in milliseconds per shot. |
RecoilKickback | int |
Amount of kickback added to a player's camera when shot. (?) |
RecoilMovement | int |
Amount of kickback added to a player's camera when shot. (?) |
SecondaryActionReticle | int |
If 1 , shows a reticle when holding the secondary fire key (and WeaponSecondaryAction is 0 ). |
SplashRadius | int |
Radius in which players experience an explosion (unknown units) |
StartAmmo | int |
Initial amount of ammo when a player (re-)spawns. |
Tier | int |
Unknown use, probably related to weapon stats. |
WeaponSecondaryAction | int |
Action to perform when a player uses secondary fireSniperRifle = 1, IronSight = 2, ExplosionTrigger = 3, Minigun = 4
|