ServerServiceConfiguration - festivaldev/Paradise GitHub Wiki

Service Configuration

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.

ApplicationWebService

ApplicationConfiguration.json

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

Maps.json

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])

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.

Example

[
	{
		"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
			}
		}
	}
]

CustomMaps.json

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}).

Example

[
	{
		"Name": "Example Map",
		"FileName": "ParadiseExampleMap.unity3d",
		"MapId": 128,
		"SupportedGameModes": [1, 2, 3]
	}
]

PhotonServers.json

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.

CommServer

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

GameServer

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

Example

{
	"CommServer": {
		"IP": "localhost",
		"Port": 5055,
		"Region": 1,
		"UsageType": 6
	},
	"GameServers": [
		{
            "IP": "localhost",
            "Port": 5155,
            "Name": "Test",
			"PhotonId": 1,
			"Region": 1,
			"UsageType": 1
		}
	]
}

ShopWebService

Bundles.json

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

Example

[
	{
		"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 ]
	}
]

Shop.json

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

Basic item structure

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": {}
}

Gear Items

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)

Quick Items

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)

List of Prefabs

Weapons

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 fire
SniperRifle = 1, IronSight = 2, ExplosionTrigger = 3, Minigun = 4
⚠️ **GitHub.com Fallback** ⚠️