mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
Compare commits
42
Commits
light-room
...
04805675dd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04805675dd | ||
|
|
4028df0886 | ||
|
|
126e91411a | ||
|
|
24ffd70394 | ||
|
|
8c8b36f0d5 | ||
|
|
38c595ebce | ||
|
|
66a6aece7c | ||
|
|
35ce79a421 | ||
|
|
8e8da15254 | ||
|
|
eea358c4e1 | ||
|
|
ecfd50f05b | ||
|
|
7458cf51dc | ||
|
|
3b0af110d2 | ||
|
|
91da72e8b4 | ||
|
|
6319d6fbd0 | ||
|
|
a5321ebde3 | ||
|
|
74ca01f978 | ||
|
|
b7ac038ace | ||
|
|
1a2caf120b | ||
|
|
377bbabb02 | ||
|
|
a4c6f0a1e2 | ||
|
|
802f04bbe6 | ||
|
|
f7db1280cf | ||
|
|
0477887d68 | ||
|
|
0941c23a3c | ||
|
|
d44c184025 | ||
|
|
73975a5d83 | ||
|
|
7f9ee1f907 | ||
|
|
9537349664 | ||
|
|
8793c9a9c9 | ||
|
|
4d57b43912 | ||
|
|
ee146b8ed9 | ||
|
|
763ecf22b0 | ||
|
|
281e4abec7 | ||
|
|
2beb084b67 | ||
|
|
f7ca622906 | ||
|
|
424d9944ad | ||
|
|
8af41b91b5 | ||
|
|
347efa75fe | ||
|
|
88643d366d | ||
|
|
84f950ade4 | ||
|
|
a0111d8b69 |
No files matched your search
@@ -0,0 +1,6 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "bun"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
||||||
@@ -139,7 +139,14 @@ jobs:
|
|||||||
|
|
||||||
- name: Trigger deployment
|
- name: Trigger deployment
|
||||||
|
|
||||||
if: ${{ github.ref == 'refs/heads/production' }}
|
# Deploy if:
|
||||||
|
# 1. Running cron from main using content from production to target production
|
||||||
|
# 2. Running manually and targeting non-production
|
||||||
|
if: >-
|
||||||
|
${{
|
||||||
|
github.ref == 'refs/heads/production' ||
|
||||||
|
(inputs.environment != '' && inputs.environment != 'production')
|
||||||
|
}}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
TOKEN: ${{ secrets.GH_NODE_DEPLOY_TOKEN }}
|
TOKEN: ${{ secrets.GH_NODE_DEPLOY_TOKEN }}
|
||||||
|
|||||||
@@ -5,37 +5,3 @@ Tools for everything and anything, World of Tanks Blitz.
|
|||||||
This GitHub repository contains the code for BlitzKit and all its services. If you are here, looking to use BlitzKit, go to https://blitzkit.app/.
|
This GitHub repository contains the code for BlitzKit and all its services. If you are here, looking to use BlitzKit, go to https://blitzkit.app/.
|
||||||
|
|
||||||
If you intend to contribute to the code, note that you may need to check out sensitive, closed-source submodules to locally develop certain aspects of BlitzKit. Communicate with `@tresabhi` on Discord to get started or discuss sensitive content, such as environment variables or submodules.
|
If you intend to contribute to the code, note that you may need to check out sensitive, closed-source submodules to locally develop certain aspects of BlitzKit. Communicate with `@tresabhi` on Discord to get started or discuss sensitive content, such as environment variables or submodules.
|
||||||
|
|
||||||
## Packages
|
|
||||||
|
|
||||||
| Package | Title | Source | Memo |
|
|
||||||
| ------------------------------------ | -------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| [packages/core](packages/core) | | | Mutual internal code shared between all other packages. |
|
|
||||||
| [packages/i18n](packages/i18n) | | [Crowdin](https://crowdin.com/project/blitzkrieg) | Translations served as JSON shared across all other packages, including some utility code. |
|
|
||||||
| [packages/scripts](packages/scripts) | | | CLI utilities for the development and deployment of BlitzKit services. |
|
|
||||||
| [packages/varuna](packages/varuna) | Varuna | [NPM](https://www.npmjs.com/package/varuna) | React and Astro-oriented state management library, awaiting separation from BlitzKit. Unavailable from NPM at this time. |
|
|
||||||
| [packages/website](packages/website) | BlitzKit | https://blitzkit.app | The BlitzKit website provides a wide range of tools, APIs, and interconnects all other services. |
|
|
||||||
|
|
||||||
## Submodules
|
|
||||||
|
|
||||||
| Submodule | Title | Source | Memo |
|
|
||||||
| ------------------------------------------------------ | --------- | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| [submodules/blitzkit-closed](packages/blitzkit-closed) | ClosedKit | [blitzkit/closed](https://github.com/blitzkit/closed) | Closed source, sensitive code hidden from the public to prevent bad actors from abusing the game. Discuss with `@tresabhi` on Discord for **special permission** to access. |
|
|
||||||
|
|
||||||
## Environment Variables
|
|
||||||
|
|
||||||
| Name | Source | BlitzKit Default | Memo |
|
|
||||||
| ------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| `PUBLIC_WARGAMING_APPLICATION_ID` | [Wargaming Developer's Room](https://developers.wargaming.net/) | | Application ID needed to communicate with Wargaming APIs. |
|
|
||||||
| `PUBLIC_PROMOTE_OPENTEST` | | `false` | Optional boolean dictating whether the website advertises [the opentest subdomain of BlitzKit](https://opentest.blitzkit.app/). |
|
|
||||||
| `WOTB_GLOSSARY`, `WOTB_GLOSSARY_DOMAIN`, `WOTB_GLOSSARY_PATH` | | | |
|
|
||||||
| `PUBLIC_GOOGLE_TAG_MANAGER_ID` | [Google Tag Manager](https://tagmanager.google.com/) | `G-GL2JVHCGPQ` | Google Tag Manager's unique identifier for analytical purposes. |
|
|
||||||
| `PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID` | [Google Analytics](https://analytics.google.com/) | `430711767` | Google Analytics' unique property ID for [BlitzKit's apex domain](https://blitzkit.app/) and subdomains. |
|
|
||||||
| `GOOGLE_APPLICATION_CREDENTIALS` | [Google Cloud](https://cloud.google.com/) | | Google Cloud's API key, primarily used for ranking popular tanks and finding relevant tank review videos in Tankopedia. |
|
|
||||||
| `PUBLIC_DISCORD_SERVER_ID` | [BlitzKit Discord Server](https://discord.gg/nDt7AjGJQH) | `734786591205359697` | BlitzKit Discord Server's id. |
|
|
||||||
| `PUBLIC_ASSET_BASE` | [blitzkit/assets](https://github.com/blitzkit/assets) | `https://blitzkit.github.io/assets` | The root domain and path that serves the external assets like tank models and icons. |
|
|
||||||
| `PUBLIC_GUIDE_WEBSITE` | [GuidesBlitz](https://guidesblitz.com/) | `https://guidesblitz.com` | The website that serves the encyclopedia-like content in BlitzKit. |
|
|
||||||
| `SERVICING` | | `false` | Wether the website is down for servicing. |
|
|
||||||
| `GH_TOKEN` | [GitHub Fine-Grained Tokens](https://github.com/settings/personal-access-tokens) | | The GitHub API key used for checking out private submodules and pushing content to the asset repository. |
|
|
||||||
| `DATABASE_URL` | [CockroachDB](https://www.cockroachlabs.com/) | | The CockroachDB-SQL database URL used to link Wargaming and Discord users. |
|
|
||||||
| `WOTB_DLC_CDN` | | | |
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# BlitzKit 1.31.2
|
||||||
|
|
||||||
|
This update fixes an issue that occurred with Wargaming chose to declare the class of a tank in the game code with a tag that isn't the first in the list.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# BlitzKit 1.31.3
|
||||||
|
|
||||||
|
This update updates BlitzKit to work with the game's new ID system for game modes.
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# BlitzKit 1.31.4
|
||||||
|
|
||||||
|
Thank you to [Mark Greene](https://github.com/Hitjack007) for your contributions this update.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- [Mark Greene] Added Peekaboo DPM
|
||||||
|
- Your Peekaboo DPM is lower than your normal DPM if your reload is faster than 10s as you'll have to wait for the remaining 10s for you to get unspotted before you can poke and shoot
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- [Mark Greene] BlitzKit Session now properly handles tanks removed from the game
|
||||||
|
- [Mark Greene] Removed the Beta badge from the Equalizer button
|
||||||
|
- Updated the background image for the Equalizer button to the actual banner of the new game mode
|
||||||
|
- [Mark Greene] The armor no longer disappears when you turn on Dynamic Armor System
|
||||||
|
- [Mark Greene] Camouflage values in Tankopedia are now more descriptive when shooting
|
||||||
|
- [Mark Greene] The contact shadows on the ground no longer grow & darken when switching between tabs
|
||||||
|
|
||||||
|
## Technical Fixes
|
||||||
|
|
||||||
|
- BlitzKit now handles the new ID system for game-modes in WoTB
|
||||||
|
- The directory which preview versions of the game are downloaded to are now created properly
|
||||||
|
- This was the last bug standing in the way of BlitzKit Previews
|
||||||
|
- Welcome back, BlitzKit Previews!
|
||||||
|
- Removed some dead code from the BlitzKit model mangler
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "blitzkit",
|
"name": "blitzkit",
|
||||||
"version": "1.31.1",
|
"version": "1.31.4",
|
||||||
"license": "BlitzKit License",
|
"license": "BlitzKit License",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -50,10 +50,11 @@ export abstract class ServerBlitzKitAPI1 extends ServerBlitzKitAPI0 {
|
|||||||
async tankDefinitions() {
|
async tankDefinitions() {
|
||||||
const tankDefinitions = TankDefinitions.create();
|
const tankDefinitions = TankDefinitions.create();
|
||||||
|
|
||||||
const gameModeNativeNames: Record<string, number> = {};
|
const gameModeNativeNames: Record<string, string> = {};
|
||||||
|
|
||||||
const squadBattleTypeGameModeNativeNameMatches =
|
const squadBattleTypeGameModeNativeNameMatches =
|
||||||
this.squadBattleTypeStyles!.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
this.squadBattleTypeStyles!.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
||||||
/"(\d+)" -> "(battleType\/([a-zA-Z]+))"/g,
|
/eGameMode\.(\w+) -> "(battleType\/([a-zA-Z]+))"/g,
|
||||||
);
|
);
|
||||||
const gameTypeGameModeNativeNameMatches =
|
const gameTypeGameModeNativeNameMatches =
|
||||||
this.gameTypeSelectorStyles!.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
this.gameTypeSelectorStyles!.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
||||||
@@ -61,8 +62,7 @@ export abstract class ServerBlitzKitAPI1 extends ServerBlitzKitAPI0 {
|
|||||||
);
|
);
|
||||||
|
|
||||||
for (const match of squadBattleTypeGameModeNativeNameMatches) {
|
for (const match of squadBattleTypeGameModeNativeNameMatches) {
|
||||||
const id = Number(match[1]);
|
gameModeNativeNames[match[3]] = match[1];
|
||||||
gameModeNativeNames[match[3]] = id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const match of gameTypeGameModeNativeNameMatches) {
|
for (const match of gameTypeGameModeNativeNameMatches) {
|
||||||
@@ -339,6 +339,17 @@ export abstract class ServerBlitzKitAPI1 extends ServerBlitzKitAPI0 {
|
|||||||
equalizer = { health, penetration, module_health, damage, armor };
|
equalizer = { health, penetration, module_health, damage, armor };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const blitzTankClass = tankTags.find(
|
||||||
|
(tag) => tag in this.blitzTankClassToBlitzkit,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (blitzTankClass === undefined) {
|
||||||
|
throw new Error(`Unknown tank class for ${nation}:${tankKey}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const tankClass =
|
||||||
|
this.blitzTankClassToBlitzkit[blitzTankClass as BlitzTankClass];
|
||||||
|
|
||||||
tankDefinitions.tanks[tankId] = {
|
tankDefinitions.tanks[tankId] = {
|
||||||
ancestors: [],
|
ancestors: [],
|
||||||
successors: [],
|
successors: [],
|
||||||
@@ -368,7 +379,7 @@ export abstract class ServerBlitzKitAPI1 extends ServerBlitzKitAPI0 {
|
|||||||
? TankType.TANK_TYPE_PREMIUM
|
? TankType.TANK_TYPE_PREMIUM
|
||||||
: TankType.TANK_TYPE_RESEARCHABLE,
|
: TankType.TANK_TYPE_RESEARCHABLE,
|
||||||
tier: tank.level,
|
tier: tank.level,
|
||||||
class: this.blitzTankClassToBlitzkit[tankTags[0] as BlitzTankClass],
|
class: tankClass,
|
||||||
testing: tankTags.includes("testTank"),
|
testing: tankTags.includes("testTank"),
|
||||||
deprecated: tankTags.includes("deprecated"),
|
deprecated: tankTags.includes("deprecated"),
|
||||||
price: tankPrice,
|
price: tankPrice,
|
||||||
|
|||||||
@@ -3,10 +3,8 @@ import {
|
|||||||
BlitzCrewType,
|
BlitzCrewType,
|
||||||
ChassisDefinitionsList,
|
ChassisDefinitionsList,
|
||||||
Crew,
|
Crew,
|
||||||
EngineDefinitionsList,
|
|
||||||
GunDefinitionsList,
|
GunDefinitionsList,
|
||||||
ModelDefinitions,
|
ModelDefinitions,
|
||||||
ResearchCost,
|
|
||||||
TankParameters,
|
TankParameters,
|
||||||
toUniqueId,
|
toUniqueId,
|
||||||
TurretDefinitionsList,
|
TurretDefinitionsList,
|
||||||
@@ -15,10 +13,10 @@ import {
|
|||||||
VehicleDefinitionList,
|
VehicleDefinitionList,
|
||||||
VehicleDefinitions,
|
VehicleDefinitions,
|
||||||
} from "@blitzkit/core";
|
} from "@blitzkit/core";
|
||||||
import { Cache } from "./0_base";
|
|
||||||
import { ServerBlitzKitAPI2 } from "./2_camouflageDefinitions";
|
|
||||||
import { parse as parsePath } from "path";
|
import { parse as parsePath } from "path";
|
||||||
import { Vector3Tuple } from "three";
|
import { Vector3Tuple } from "three";
|
||||||
|
import { Cache } from "./0_base";
|
||||||
|
import { ServerBlitzKitAPI2 } from "./2_camouflageDefinitions";
|
||||||
|
|
||||||
export abstract class ServerBlitzKitAPI3 extends ServerBlitzKitAPI2 {
|
export abstract class ServerBlitzKitAPI3 extends ServerBlitzKitAPI2 {
|
||||||
private vector3TupleToBlitzkit(tuple: Vector3Tuple) {
|
private vector3TupleToBlitzkit(tuple: Vector3Tuple) {
|
||||||
@@ -55,9 +53,6 @@ export abstract class ServerBlitzKitAPI3 extends ServerBlitzKitAPI2 {
|
|||||||
const gunList = await this.vfs.xml<{
|
const gunList = await this.vfs.xml<{
|
||||||
root: GunDefinitionsList;
|
root: GunDefinitionsList;
|
||||||
}>(`Data/XML/item_defs/vehicles/${nation}/components/guns.xml`);
|
}>(`Data/XML/item_defs/vehicles/${nation}/components/guns.xml`);
|
||||||
const enginesList = await this.vfs.xml<{
|
|
||||||
root: EngineDefinitionsList;
|
|
||||||
}>(`Data/XML/item_defs/vehicles/${nation}/components/engines.xml`);
|
|
||||||
const chassisList = await this.vfs.xml<{
|
const chassisList = await this.vfs.xml<{
|
||||||
root: ChassisDefinitionsList;
|
root: ChassisDefinitionsList;
|
||||||
}>(`Data/XML/item_defs/vehicles/${nation}/components/chassis.xml`);
|
}>(`Data/XML/item_defs/vehicles/${nation}/components/chassis.xml`);
|
||||||
@@ -65,10 +60,6 @@ export abstract class ServerBlitzKitAPI3 extends ServerBlitzKitAPI2 {
|
|||||||
for (const tankKey in tankList.root) {
|
for (const tankKey in tankList.root) {
|
||||||
if (this.botPattern.test(tankKey)) continue;
|
if (this.botPattern.test(tankKey)) continue;
|
||||||
|
|
||||||
const gunXps = new Map<number, ResearchCost>();
|
|
||||||
const turretXps = new Map<number, ResearchCost>();
|
|
||||||
const engineXps = new Map<number, ResearchCost>();
|
|
||||||
const trackXps = new Map<number, ResearchCost>();
|
|
||||||
const tank = tankList.root[tankKey];
|
const tank = tankList.root[tankKey];
|
||||||
const tankDefinition = await this.vfs.xml<{ root: VehicleDefinitions }>(
|
const tankDefinition = await this.vfs.xml<{ root: VehicleDefinitions }>(
|
||||||
`Data/XML/item_defs/vehicles/${nation}/${tankKey}.xml`,
|
`Data/XML/item_defs/vehicles/${nation}/${tankKey}.xml`,
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ export abstract class ServerBlitzKitAPI9 extends ServerBlitzKitAPI8 {
|
|||||||
).available_nations;
|
).available_nations;
|
||||||
|
|
||||||
for (const match of this.squadBattleTypeStyles!.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
for (const match of this.squadBattleTypeStyles!.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
||||||
/"(\d+)" -> "(battleType\/([a-zA-Z]+))"/g,
|
/eGameMode\.(\w+) -> "(battleType\/([a-zA-Z]+))"/g,
|
||||||
)) {
|
)) {
|
||||||
const id = Number(match[1]);
|
const id = match[1];
|
||||||
const name = this.getString(match[2]);
|
const name = this.getString(match[2]);
|
||||||
|
|
||||||
gameDefinitions.gameModes[id] = {
|
gameDefinitions.gameModes[id] = {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: average_definitions.proto
|
// source: average_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -64,7 +64,7 @@ function createBaseAverageDefinitions(): AverageDefinitions {
|
|||||||
|
|
||||||
export const AverageDefinitions: MessageFns<AverageDefinitions> = {
|
export const AverageDefinitions: MessageFns<AverageDefinitions> = {
|
||||||
encode(message: AverageDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: AverageDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.averages).forEach(([key, value]: [string, AverageDefinitionsEntry]) => {
|
Object.entries(message.averages).forEach(([key, value]) => {
|
||||||
AverageDefinitions_AveragesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
AverageDefinitions_AveragesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
if (message.samples !== undefined) {
|
if (message.samples !== undefined) {
|
||||||
@@ -122,13 +122,10 @@ export const AverageDefinitions: MessageFns<AverageDefinitions> = {
|
|||||||
fromJSON(object: any): AverageDefinitions {
|
fromJSON(object: any): AverageDefinitions {
|
||||||
return {
|
return {
|
||||||
averages: isObject(object.averages)
|
averages: isObject(object.averages)
|
||||||
? (globalThis.Object.entries(object.averages) as [string, any][]).reduce(
|
? Object.entries(object.averages).reduce<{ [key: number]: AverageDefinitionsEntry }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: AverageDefinitionsEntry }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = AverageDefinitionsEntry.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = AverageDefinitionsEntry.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
samples: isSet(object.samples) ? Samples.fromJSON(object.samples) : undefined,
|
samples: isSet(object.samples) ? Samples.fromJSON(object.samples) : undefined,
|
||||||
time: isSet(object.time) ? globalThis.Number(object.time) : 0,
|
time: isSet(object.time) ? globalThis.Number(object.time) : 0,
|
||||||
@@ -138,7 +135,7 @@ export const AverageDefinitions: MessageFns<AverageDefinitions> = {
|
|||||||
toJSON(message: AverageDefinitions): unknown {
|
toJSON(message: AverageDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.averages) {
|
if (message.averages) {
|
||||||
const entries = globalThis.Object.entries(message.averages) as [string, AverageDefinitionsEntry][];
|
const entries = Object.entries(message.averages);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.averages = {};
|
obj.averages = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -160,8 +157,8 @@ export const AverageDefinitions: MessageFns<AverageDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<AverageDefinitions>, I>>(object: I): AverageDefinitions {
|
fromPartial<I extends Exact<DeepPartial<AverageDefinitions>, I>>(object: I): AverageDefinitions {
|
||||||
const message = createBaseAverageDefinitions();
|
const message = createBaseAverageDefinitions();
|
||||||
message.averages = (globalThis.Object.entries(object.averages ?? {}) as [string, AverageDefinitionsEntry][]).reduce(
|
message.averages = Object.entries(object.averages ?? {}).reduce<{ [key: number]: AverageDefinitionsEntry }>(
|
||||||
(acc: { [key: number]: AverageDefinitionsEntry }, [key, value]: [string, AverageDefinitionsEntry]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = AverageDefinitionsEntry.fromPartial(value);
|
acc[globalThis.Number(key)] = AverageDefinitionsEntry.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -620,59 +617,25 @@ export const AverageDefinitionsAllStats: MessageFns<AverageDefinitionsAllStats>
|
|||||||
fromJSON(object: any): AverageDefinitionsAllStats {
|
fromJSON(object: any): AverageDefinitionsAllStats {
|
||||||
return {
|
return {
|
||||||
battles: isSet(object.battles) ? globalThis.Number(object.battles) : 0,
|
battles: isSet(object.battles) ? globalThis.Number(object.battles) : 0,
|
||||||
capture_points: isSet(object.capturePoints)
|
capture_points: isSet(object.capture_points) ? globalThis.Number(object.capture_points) : 0,
|
||||||
? globalThis.Number(object.capturePoints)
|
damage_dealt: isSet(object.damage_dealt) ? globalThis.Number(object.damage_dealt) : 0,
|
||||||
: isSet(object.capture_points)
|
damage_received: isSet(object.damage_received) ? globalThis.Number(object.damage_received) : 0,
|
||||||
? globalThis.Number(object.capture_points)
|
dropped_capture_points: isSet(object.dropped_capture_points)
|
||||||
: 0,
|
|
||||||
damage_dealt: isSet(object.damageDealt)
|
|
||||||
? globalThis.Number(object.damageDealt)
|
|
||||||
: isSet(object.damage_dealt)
|
|
||||||
? globalThis.Number(object.damage_dealt)
|
|
||||||
: 0,
|
|
||||||
damage_received: isSet(object.damageReceived)
|
|
||||||
? globalThis.Number(object.damageReceived)
|
|
||||||
: isSet(object.damage_received)
|
|
||||||
? globalThis.Number(object.damage_received)
|
|
||||||
: 0,
|
|
||||||
dropped_capture_points: isSet(object.droppedCapturePoints)
|
|
||||||
? globalThis.Number(object.droppedCapturePoints)
|
|
||||||
: isSet(object.dropped_capture_points)
|
|
||||||
? globalThis.Number(object.dropped_capture_points)
|
? globalThis.Number(object.dropped_capture_points)
|
||||||
: 0,
|
: 0,
|
||||||
frags: isSet(object.frags) ? globalThis.Number(object.frags) : 0,
|
frags: isSet(object.frags) ? globalThis.Number(object.frags) : 0,
|
||||||
frags8p: isSet(object.frags8p) ? globalThis.Number(object.frags8p) : 0,
|
frags8p: isSet(object.frags8p) ? globalThis.Number(object.frags8p) : 0,
|
||||||
hits: isSet(object.hits) ? globalThis.Number(object.hits) : 0,
|
hits: isSet(object.hits) ? globalThis.Number(object.hits) : 0,
|
||||||
losses: isSet(object.losses) ? globalThis.Number(object.losses) : 0,
|
losses: isSet(object.losses) ? globalThis.Number(object.losses) : 0,
|
||||||
max_frags: isSet(object.maxFrags)
|
max_frags: isSet(object.max_frags) ? globalThis.Number(object.max_frags) : 0,
|
||||||
? globalThis.Number(object.maxFrags)
|
max_xp: isSet(object.max_xp) ? globalThis.Number(object.max_xp) : 0,
|
||||||
: isSet(object.max_frags)
|
|
||||||
? globalThis.Number(object.max_frags)
|
|
||||||
: 0,
|
|
||||||
max_xp: isSet(object.maxXp)
|
|
||||||
? globalThis.Number(object.maxXp)
|
|
||||||
: isSet(object.max_xp)
|
|
||||||
? globalThis.Number(object.max_xp)
|
|
||||||
: 0,
|
|
||||||
shots: isSet(object.shots) ? globalThis.Number(object.shots) : 0,
|
shots: isSet(object.shots) ? globalThis.Number(object.shots) : 0,
|
||||||
spotted: isSet(object.spotted) ? globalThis.Number(object.spotted) : 0,
|
spotted: isSet(object.spotted) ? globalThis.Number(object.spotted) : 0,
|
||||||
survived_battles: isSet(object.survivedBattles)
|
survived_battles: isSet(object.survived_battles) ? globalThis.Number(object.survived_battles) : 0,
|
||||||
? globalThis.Number(object.survivedBattles)
|
win_and_survived: isSet(object.win_and_survived) ? globalThis.Number(object.win_and_survived) : 0,
|
||||||
: isSet(object.survived_battles)
|
|
||||||
? globalThis.Number(object.survived_battles)
|
|
||||||
: 0,
|
|
||||||
win_and_survived: isSet(object.winAndSurvived)
|
|
||||||
? globalThis.Number(object.winAndSurvived)
|
|
||||||
: isSet(object.win_and_survived)
|
|
||||||
? globalThis.Number(object.win_and_survived)
|
|
||||||
: 0,
|
|
||||||
wins: isSet(object.wins) ? globalThis.Number(object.wins) : 0,
|
wins: isSet(object.wins) ? globalThis.Number(object.wins) : 0,
|
||||||
xp: isSet(object.xp) ? globalThis.Number(object.xp) : 0,
|
xp: isSet(object.xp) ? globalThis.Number(object.xp) : 0,
|
||||||
battle_life_time: isSet(object.battleLifeTime)
|
battle_life_time: isSet(object.battle_life_time) ? globalThis.Number(object.battle_life_time) : 0,
|
||||||
? globalThis.Number(object.battleLifeTime)
|
|
||||||
: isSet(object.battle_life_time)
|
|
||||||
? globalThis.Number(object.battle_life_time)
|
|
||||||
: 0,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -682,16 +645,16 @@ export const AverageDefinitionsAllStats: MessageFns<AverageDefinitionsAllStats>
|
|||||||
obj.battles = message.battles;
|
obj.battles = message.battles;
|
||||||
}
|
}
|
||||||
if (message.capture_points !== 0) {
|
if (message.capture_points !== 0) {
|
||||||
obj.capturePoints = message.capture_points;
|
obj.capture_points = message.capture_points;
|
||||||
}
|
}
|
||||||
if (message.damage_dealt !== 0) {
|
if (message.damage_dealt !== 0) {
|
||||||
obj.damageDealt = message.damage_dealt;
|
obj.damage_dealt = message.damage_dealt;
|
||||||
}
|
}
|
||||||
if (message.damage_received !== 0) {
|
if (message.damage_received !== 0) {
|
||||||
obj.damageReceived = message.damage_received;
|
obj.damage_received = message.damage_received;
|
||||||
}
|
}
|
||||||
if (message.dropped_capture_points !== 0) {
|
if (message.dropped_capture_points !== 0) {
|
||||||
obj.droppedCapturePoints = message.dropped_capture_points;
|
obj.dropped_capture_points = message.dropped_capture_points;
|
||||||
}
|
}
|
||||||
if (message.frags !== 0) {
|
if (message.frags !== 0) {
|
||||||
obj.frags = message.frags;
|
obj.frags = message.frags;
|
||||||
@@ -706,10 +669,10 @@ export const AverageDefinitionsAllStats: MessageFns<AverageDefinitionsAllStats>
|
|||||||
obj.losses = message.losses;
|
obj.losses = message.losses;
|
||||||
}
|
}
|
||||||
if (message.max_frags !== 0) {
|
if (message.max_frags !== 0) {
|
||||||
obj.maxFrags = message.max_frags;
|
obj.max_frags = message.max_frags;
|
||||||
}
|
}
|
||||||
if (message.max_xp !== 0) {
|
if (message.max_xp !== 0) {
|
||||||
obj.maxXp = message.max_xp;
|
obj.max_xp = message.max_xp;
|
||||||
}
|
}
|
||||||
if (message.shots !== 0) {
|
if (message.shots !== 0) {
|
||||||
obj.shots = message.shots;
|
obj.shots = message.shots;
|
||||||
@@ -718,10 +681,10 @@ export const AverageDefinitionsAllStats: MessageFns<AverageDefinitionsAllStats>
|
|||||||
obj.spotted = message.spotted;
|
obj.spotted = message.spotted;
|
||||||
}
|
}
|
||||||
if (message.survived_battles !== 0) {
|
if (message.survived_battles !== 0) {
|
||||||
obj.survivedBattles = message.survived_battles;
|
obj.survived_battles = message.survived_battles;
|
||||||
}
|
}
|
||||||
if (message.win_and_survived !== 0) {
|
if (message.win_and_survived !== 0) {
|
||||||
obj.winAndSurvived = message.win_and_survived;
|
obj.win_and_survived = message.win_and_survived;
|
||||||
}
|
}
|
||||||
if (message.wins !== 0) {
|
if (message.wins !== 0) {
|
||||||
obj.wins = message.wins;
|
obj.wins = message.wins;
|
||||||
@@ -730,7 +693,7 @@ export const AverageDefinitionsAllStats: MessageFns<AverageDefinitionsAllStats>
|
|||||||
obj.xp = message.xp;
|
obj.xp = message.xp;
|
||||||
}
|
}
|
||||||
if (message.battle_life_time !== 0) {
|
if (message.battle_life_time !== 0) {
|
||||||
obj.battleLifeTime = message.battle_life_time;
|
obj.battle_life_time = message.battle_life_time;
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
@@ -866,16 +829,12 @@ export const Samples: MessageFns<Samples> = {
|
|||||||
|
|
||||||
fromJSON(object: any): Samples {
|
fromJSON(object: any): Samples {
|
||||||
return {
|
return {
|
||||||
d_1: isSet(object.d1) ? globalThis.Number(object.d1) : isSet(object.d_1) ? globalThis.Number(object.d_1) : 0,
|
d_1: isSet(object.d_1) ? globalThis.Number(object.d_1) : 0,
|
||||||
d_7: isSet(object.d7) ? globalThis.Number(object.d7) : isSet(object.d_7) ? globalThis.Number(object.d_7) : 0,
|
d_7: isSet(object.d_7) ? globalThis.Number(object.d_7) : 0,
|
||||||
d_30: isSet(object.d30) ? globalThis.Number(object.d30) : isSet(object.d_30) ? globalThis.Number(object.d_30) : 0,
|
d_30: isSet(object.d_30) ? globalThis.Number(object.d_30) : 0,
|
||||||
d_60: isSet(object.d60) ? globalThis.Number(object.d60) : isSet(object.d_60) ? globalThis.Number(object.d_60) : 0,
|
d_60: isSet(object.d_60) ? globalThis.Number(object.d_60) : 0,
|
||||||
d_90: isSet(object.d90) ? globalThis.Number(object.d90) : isSet(object.d_90) ? globalThis.Number(object.d_90) : 0,
|
d_90: isSet(object.d_90) ? globalThis.Number(object.d_90) : 0,
|
||||||
d_120: isSet(object.d120)
|
d_120: isSet(object.d_120) ? globalThis.Number(object.d_120) : 0,
|
||||||
? globalThis.Number(object.d120)
|
|
||||||
: isSet(object.d_120)
|
|
||||||
? globalThis.Number(object.d_120)
|
|
||||||
: 0,
|
|
||||||
total: isSet(object.total) ? globalThis.Number(object.total) : 0,
|
total: isSet(object.total) ? globalThis.Number(object.total) : 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -883,22 +842,22 @@ export const Samples: MessageFns<Samples> = {
|
|||||||
toJSON(message: Samples): unknown {
|
toJSON(message: Samples): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.d_1 !== 0) {
|
if (message.d_1 !== 0) {
|
||||||
obj.d1 = Math.round(message.d_1);
|
obj.d_1 = Math.round(message.d_1);
|
||||||
}
|
}
|
||||||
if (message.d_7 !== 0) {
|
if (message.d_7 !== 0) {
|
||||||
obj.d7 = Math.round(message.d_7);
|
obj.d_7 = Math.round(message.d_7);
|
||||||
}
|
}
|
||||||
if (message.d_30 !== 0) {
|
if (message.d_30 !== 0) {
|
||||||
obj.d30 = Math.round(message.d_30);
|
obj.d_30 = Math.round(message.d_30);
|
||||||
}
|
}
|
||||||
if (message.d_60 !== 0) {
|
if (message.d_60 !== 0) {
|
||||||
obj.d60 = Math.round(message.d_60);
|
obj.d_60 = Math.round(message.d_60);
|
||||||
}
|
}
|
||||||
if (message.d_90 !== 0) {
|
if (message.d_90 !== 0) {
|
||||||
obj.d90 = Math.round(message.d_90);
|
obj.d_90 = Math.round(message.d_90);
|
||||||
}
|
}
|
||||||
if (message.d_120 !== 0) {
|
if (message.d_120 !== 0) {
|
||||||
obj.d120 = Math.round(message.d_120);
|
obj.d_120 = Math.round(message.d_120);
|
||||||
}
|
}
|
||||||
if (message.total !== 0) {
|
if (message.total !== 0) {
|
||||||
obj.total = Math.round(message.total);
|
obj.total = Math.round(message.total);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: camouflage_definitions.proto
|
// source: camouflage_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -32,7 +32,7 @@ function createBaseCamouflageDefinitions(): CamouflageDefinitions {
|
|||||||
|
|
||||||
export const CamouflageDefinitions: MessageFns<CamouflageDefinitions> = {
|
export const CamouflageDefinitions: MessageFns<CamouflageDefinitions> = {
|
||||||
encode(message: CamouflageDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: CamouflageDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.camouflages).forEach(([key, value]: [string, Camouflage]) => {
|
Object.entries(message.camouflages).forEach(([key, value]) => {
|
||||||
CamouflageDefinitions_CamouflagesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
CamouflageDefinitions_CamouflagesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -68,13 +68,10 @@ export const CamouflageDefinitions: MessageFns<CamouflageDefinitions> = {
|
|||||||
fromJSON(object: any): CamouflageDefinitions {
|
fromJSON(object: any): CamouflageDefinitions {
|
||||||
return {
|
return {
|
||||||
camouflages: isObject(object.camouflages)
|
camouflages: isObject(object.camouflages)
|
||||||
? (globalThis.Object.entries(object.camouflages) as [string, any][]).reduce(
|
? Object.entries(object.camouflages).reduce<{ [key: number]: Camouflage }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Camouflage }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Camouflage.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = Camouflage.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -82,7 +79,7 @@ export const CamouflageDefinitions: MessageFns<CamouflageDefinitions> = {
|
|||||||
toJSON(message: CamouflageDefinitions): unknown {
|
toJSON(message: CamouflageDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.camouflages) {
|
if (message.camouflages) {
|
||||||
const entries = globalThis.Object.entries(message.camouflages) as [string, Camouflage][];
|
const entries = Object.entries(message.camouflages);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.camouflages = {};
|
obj.camouflages = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -98,8 +95,8 @@ export const CamouflageDefinitions: MessageFns<CamouflageDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<CamouflageDefinitions>, I>>(object: I): CamouflageDefinitions {
|
fromPartial<I extends Exact<DeepPartial<CamouflageDefinitions>, I>>(object: I): CamouflageDefinitions {
|
||||||
const message = createBaseCamouflageDefinitions();
|
const message = createBaseCamouflageDefinitions();
|
||||||
message.camouflages = (globalThis.Object.entries(object.camouflages ?? {}) as [string, Camouflage][]).reduce(
|
message.camouflages = Object.entries(object.camouflages ?? {}).reduce<{ [key: number]: Camouflage }>(
|
||||||
(acc: { [key: number]: Camouflage }, [key, value]: [string, Camouflage]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = Camouflage.fromPartial(value);
|
acc[globalThis.Number(key)] = Camouflage.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -266,16 +263,8 @@ export const Camouflage: MessageFns<Camouflage> = {
|
|||||||
return {
|
return {
|
||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
tank_name: isSet(object.tankName)
|
tank_name: isSet(object.tank_name) ? I18nString.fromJSON(object.tank_name) : undefined,
|
||||||
? I18nString.fromJSON(object.tankName)
|
tank_name_full: isSet(object.tank_name_full) ? I18nString.fromJSON(object.tank_name_full) : undefined,
|
||||||
: isSet(object.tank_name)
|
|
||||||
? I18nString.fromJSON(object.tank_name)
|
|
||||||
: undefined,
|
|
||||||
tank_name_full: isSet(object.tankNameFull)
|
|
||||||
? I18nString.fromJSON(object.tankNameFull)
|
|
||||||
: isSet(object.tank_name_full)
|
|
||||||
? I18nString.fromJSON(object.tank_name_full)
|
|
||||||
: undefined,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -288,10 +277,10 @@ export const Camouflage: MessageFns<Camouflage> = {
|
|||||||
obj.name = I18nString.toJSON(message.name);
|
obj.name = I18nString.toJSON(message.name);
|
||||||
}
|
}
|
||||||
if (message.tank_name !== undefined) {
|
if (message.tank_name !== undefined) {
|
||||||
obj.tankName = I18nString.toJSON(message.tank_name);
|
obj.tank_name = I18nString.toJSON(message.tank_name);
|
||||||
}
|
}
|
||||||
if (message.tank_name_full !== undefined) {
|
if (message.tank_name_full !== undefined) {
|
||||||
obj.tankNameFull = I18nString.toJSON(message.tank_name_full);
|
obj.tank_name_full = I18nString.toJSON(message.tank_name_full);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: consumable_definitions.proto
|
// source: consumable_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -88,7 +88,7 @@ function createBaseConsumableDefinitions(): ConsumableDefinitions {
|
|||||||
|
|
||||||
export const ConsumableDefinitions: MessageFns<ConsumableDefinitions> = {
|
export const ConsumableDefinitions: MessageFns<ConsumableDefinitions> = {
|
||||||
encode(message: ConsumableDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: ConsumableDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.consumables).forEach(([key, value]: [string, Consumable]) => {
|
Object.entries(message.consumables).forEach(([key, value]) => {
|
||||||
ConsumableDefinitions_ConsumablesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
ConsumableDefinitions_ConsumablesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -124,13 +124,10 @@ export const ConsumableDefinitions: MessageFns<ConsumableDefinitions> = {
|
|||||||
fromJSON(object: any): ConsumableDefinitions {
|
fromJSON(object: any): ConsumableDefinitions {
|
||||||
return {
|
return {
|
||||||
consumables: isObject(object.consumables)
|
consumables: isObject(object.consumables)
|
||||||
? (globalThis.Object.entries(object.consumables) as [string, any][]).reduce(
|
? Object.entries(object.consumables).reduce<{ [key: number]: Consumable }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Consumable }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Consumable.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = Consumable.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -138,7 +135,7 @@ export const ConsumableDefinitions: MessageFns<ConsumableDefinitions> = {
|
|||||||
toJSON(message: ConsumableDefinitions): unknown {
|
toJSON(message: ConsumableDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.consumables) {
|
if (message.consumables) {
|
||||||
const entries = globalThis.Object.entries(message.consumables) as [string, Consumable][];
|
const entries = Object.entries(message.consumables);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.consumables = {};
|
obj.consumables = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -154,8 +151,8 @@ export const ConsumableDefinitions: MessageFns<ConsumableDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<ConsumableDefinitions>, I>>(object: I): ConsumableDefinitions {
|
fromPartial<I extends Exact<DeepPartial<ConsumableDefinitions>, I>>(object: I): ConsumableDefinitions {
|
||||||
const message = createBaseConsumableDefinitions();
|
const message = createBaseConsumableDefinitions();
|
||||||
message.consumables = (globalThis.Object.entries(object.consumables ?? {}) as [string, Consumable][]).reduce(
|
message.consumables = Object.entries(object.consumables ?? {}).reduce<{ [key: number]: Consumable }>(
|
||||||
(acc: { [key: number]: Consumable }, [key, value]: [string, Consumable]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = Consumable.fromPartial(value);
|
acc[globalThis.Number(key)] = Consumable.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -357,11 +354,7 @@ export const Consumable: MessageFns<Consumable> = {
|
|||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
cooldown: isSet(object.cooldown) ? globalThis.Number(object.cooldown) : 0,
|
cooldown: isSet(object.cooldown) ? globalThis.Number(object.cooldown) : 0,
|
||||||
duration: isSet(object.duration) ? globalThis.Number(object.duration) : 0,
|
duration: isSet(object.duration) ? globalThis.Number(object.duration) : 0,
|
||||||
game_mode_exclusive: isSet(object.gameModeExclusive)
|
game_mode_exclusive: isSet(object.game_mode_exclusive) ? globalThis.Boolean(object.game_mode_exclusive) : false,
|
||||||
? globalThis.Boolean(object.gameModeExclusive)
|
|
||||||
: isSet(object.game_mode_exclusive)
|
|
||||||
? globalThis.Boolean(object.game_mode_exclusive)
|
|
||||||
: false,
|
|
||||||
include: globalThis.Array.isArray(object?.include)
|
include: globalThis.Array.isArray(object?.include)
|
||||||
? object.include.map((e: any) => ConsumableTankFilter.fromJSON(e))
|
? object.include.map((e: any) => ConsumableTankFilter.fromJSON(e))
|
||||||
: [],
|
: [],
|
||||||
@@ -386,7 +379,7 @@ export const Consumable: MessageFns<Consumable> = {
|
|||||||
obj.duration = message.duration;
|
obj.duration = message.duration;
|
||||||
}
|
}
|
||||||
if (message.game_mode_exclusive !== false) {
|
if (message.game_mode_exclusive !== false) {
|
||||||
obj.gameModeExclusive = message.game_mode_exclusive;
|
obj.game_mode_exclusive = message.game_mode_exclusive;
|
||||||
}
|
}
|
||||||
if (message.include?.length) {
|
if (message.include?.length) {
|
||||||
obj.include = message.include.map((e) => ConsumableTankFilter.toJSON(e));
|
obj.include = message.include.map((e) => ConsumableTankFilter.toJSON(e));
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: equipment_definitions.proto
|
// source: equipment_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -45,10 +45,10 @@ function createBaseEquipmentDefinitions(): EquipmentDefinitions {
|
|||||||
|
|
||||||
export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
||||||
encode(message: EquipmentDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: EquipmentDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.presets).forEach(([key, value]: [string, EquipmentPreset]) => {
|
Object.entries(message.presets).forEach(([key, value]) => {
|
||||||
EquipmentDefinitions_PresetsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
EquipmentDefinitions_PresetsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
globalThis.Object.entries(message.equipments).forEach(([key, value]: [string, Equipment]) => {
|
Object.entries(message.equipments).forEach(([key, value]) => {
|
||||||
EquipmentDefinitions_EquipmentsEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).join();
|
EquipmentDefinitions_EquipmentsEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -95,22 +95,16 @@ export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
|||||||
fromJSON(object: any): EquipmentDefinitions {
|
fromJSON(object: any): EquipmentDefinitions {
|
||||||
return {
|
return {
|
||||||
presets: isObject(object.presets)
|
presets: isObject(object.presets)
|
||||||
? (globalThis.Object.entries(object.presets) as [string, any][]).reduce(
|
? Object.entries(object.presets).reduce<{ [key: string]: EquipmentPreset }>((acc, [key, value]) => {
|
||||||
(acc: { [key: string]: EquipmentPreset }, [key, value]: [string, any]) => {
|
acc[key] = EquipmentPreset.fromJSON(value);
|
||||||
acc[key] = EquipmentPreset.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
equipments: isObject(object.equipments)
|
equipments: isObject(object.equipments)
|
||||||
? (globalThis.Object.entries(object.equipments) as [string, any][]).reduce(
|
? Object.entries(object.equipments).reduce<{ [key: number]: Equipment }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Equipment }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Equipment.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = Equipment.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -118,7 +112,7 @@ export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
|||||||
toJSON(message: EquipmentDefinitions): unknown {
|
toJSON(message: EquipmentDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.presets) {
|
if (message.presets) {
|
||||||
const entries = globalThis.Object.entries(message.presets) as [string, EquipmentPreset][];
|
const entries = Object.entries(message.presets);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.presets = {};
|
obj.presets = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -127,7 +121,7 @@ export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (message.equipments) {
|
if (message.equipments) {
|
||||||
const entries = globalThis.Object.entries(message.equipments) as [string, Equipment][];
|
const entries = Object.entries(message.equipments);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.equipments = {};
|
obj.equipments = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -143,8 +137,8 @@ export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<EquipmentDefinitions>, I>>(object: I): EquipmentDefinitions {
|
fromPartial<I extends Exact<DeepPartial<EquipmentDefinitions>, I>>(object: I): EquipmentDefinitions {
|
||||||
const message = createBaseEquipmentDefinitions();
|
const message = createBaseEquipmentDefinitions();
|
||||||
message.presets = (globalThis.Object.entries(object.presets ?? {}) as [string, EquipmentPreset][]).reduce(
|
message.presets = Object.entries(object.presets ?? {}).reduce<{ [key: string]: EquipmentPreset }>(
|
||||||
(acc: { [key: string]: EquipmentPreset }, [key, value]: [string, EquipmentPreset]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[key] = EquipmentPreset.fromPartial(value);
|
acc[key] = EquipmentPreset.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -152,8 +146,8 @@ export const EquipmentDefinitions: MessageFns<EquipmentDefinitions> = {
|
|||||||
},
|
},
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
message.equipments = (globalThis.Object.entries(object.equipments ?? {}) as [string, Equipment][]).reduce(
|
message.equipments = Object.entries(object.equipments ?? {}).reduce<{ [key: number]: Equipment }>(
|
||||||
(acc: { [key: number]: Equipment }, [key, value]: [string, Equipment]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = Equipment.fromPartial(value);
|
acc[globalThis.Number(key)] = Equipment.fromPartial(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: gallery.proto
|
// source: gallery.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import "i18n.proto";
|
|||||||
message GameDefinitions {
|
message GameDefinitions {
|
||||||
required string version = 1;
|
required string version = 1;
|
||||||
repeated string nations = 2;
|
repeated string nations = 2;
|
||||||
map<uint32, GameMode> gameModes = 3;
|
map<string, GameMode> gameModes = 3;
|
||||||
map<uint32, GameModeRole> roles = 4;
|
map<uint32, GameModeRole> roles = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: game_definitions.proto
|
// source: game_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -13,12 +13,12 @@ export const protobufPackage = "blitzkit";
|
|||||||
export interface GameDefinitions {
|
export interface GameDefinitions {
|
||||||
version: string;
|
version: string;
|
||||||
nations: string[];
|
nations: string[];
|
||||||
gameModes: { [key: number]: GameMode };
|
gameModes: { [key: string]: GameMode };
|
||||||
roles: { [key: number]: GameModeRole };
|
roles: { [key: number]: GameModeRole };
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GameDefinitions_GameModesEntry {
|
export interface GameDefinitions_GameModesEntry {
|
||||||
key: number;
|
key: string;
|
||||||
value: GameMode | undefined;
|
value: GameMode | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,10 +48,10 @@ export const GameDefinitions: MessageFns<GameDefinitions> = {
|
|||||||
for (const v of message.nations) {
|
for (const v of message.nations) {
|
||||||
writer.uint32(18).string(v!);
|
writer.uint32(18).string(v!);
|
||||||
}
|
}
|
||||||
globalThis.Object.entries(message.gameModes).forEach(([key, value]: [string, GameMode]) => {
|
Object.entries(message.gameModes).forEach(([key, value]) => {
|
||||||
GameDefinitions_GameModesEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).join();
|
GameDefinitions_GameModesEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).join();
|
||||||
});
|
});
|
||||||
globalThis.Object.entries(message.roles).forEach(([key, value]: [string, GameModeRole]) => {
|
Object.entries(message.roles).forEach(([key, value]) => {
|
||||||
GameDefinitions_RolesEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join();
|
GameDefinitions_RolesEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -116,22 +116,16 @@ export const GameDefinitions: MessageFns<GameDefinitions> = {
|
|||||||
version: isSet(object.version) ? globalThis.String(object.version) : "",
|
version: isSet(object.version) ? globalThis.String(object.version) : "",
|
||||||
nations: globalThis.Array.isArray(object?.nations) ? object.nations.map((e: any) => globalThis.String(e)) : [],
|
nations: globalThis.Array.isArray(object?.nations) ? object.nations.map((e: any) => globalThis.String(e)) : [],
|
||||||
gameModes: isObject(object.gameModes)
|
gameModes: isObject(object.gameModes)
|
||||||
? (globalThis.Object.entries(object.gameModes) as [string, any][]).reduce(
|
? Object.entries(object.gameModes).reduce<{ [key: string]: GameMode }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: GameMode }, [key, value]: [string, any]) => {
|
acc[key] = GameMode.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = GameMode.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
roles: isObject(object.roles)
|
roles: isObject(object.roles)
|
||||||
? (globalThis.Object.entries(object.roles) as [string, any][]).reduce(
|
? Object.entries(object.roles).reduce<{ [key: number]: GameModeRole }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: GameModeRole }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = GameModeRole.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = GameModeRole.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -145,7 +139,7 @@ export const GameDefinitions: MessageFns<GameDefinitions> = {
|
|||||||
obj.nations = message.nations;
|
obj.nations = message.nations;
|
||||||
}
|
}
|
||||||
if (message.gameModes) {
|
if (message.gameModes) {
|
||||||
const entries = globalThis.Object.entries(message.gameModes) as [string, GameMode][];
|
const entries = Object.entries(message.gameModes);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.gameModes = {};
|
obj.gameModes = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -154,7 +148,7 @@ export const GameDefinitions: MessageFns<GameDefinitions> = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (message.roles) {
|
if (message.roles) {
|
||||||
const entries = globalThis.Object.entries(message.roles) as [string, GameModeRole][];
|
const entries = Object.entries(message.roles);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.roles = {};
|
obj.roles = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -172,36 +166,33 @@ export const GameDefinitions: MessageFns<GameDefinitions> = {
|
|||||||
const message = createBaseGameDefinitions();
|
const message = createBaseGameDefinitions();
|
||||||
message.version = object.version ?? "";
|
message.version = object.version ?? "";
|
||||||
message.nations = object.nations?.map((e) => e) || [];
|
message.nations = object.nations?.map((e) => e) || [];
|
||||||
message.gameModes = (globalThis.Object.entries(object.gameModes ?? {}) as [string, GameMode][]).reduce(
|
message.gameModes = Object.entries(object.gameModes ?? {}).reduce<{ [key: string]: GameMode }>(
|
||||||
(acc: { [key: number]: GameMode }, [key, value]: [string, GameMode]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = GameMode.fromPartial(value);
|
acc[key] = GameMode.fromPartial(value);
|
||||||
}
|
|
||||||
return acc;
|
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
message.roles = (globalThis.Object.entries(object.roles ?? {}) as [string, GameModeRole][]).reduce(
|
|
||||||
(acc: { [key: number]: GameModeRole }, [key, value]: [string, GameModeRole]) => {
|
|
||||||
if (value !== undefined) {
|
|
||||||
acc[globalThis.Number(key)] = GameModeRole.fromPartial(value);
|
|
||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
},
|
},
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
|
message.roles = Object.entries(object.roles ?? {}).reduce<{ [key: number]: GameModeRole }>((acc, [key, value]) => {
|
||||||
|
if (value !== undefined) {
|
||||||
|
acc[globalThis.Number(key)] = GameModeRole.fromPartial(value);
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
function createBaseGameDefinitions_GameModesEntry(): GameDefinitions_GameModesEntry {
|
function createBaseGameDefinitions_GameModesEntry(): GameDefinitions_GameModesEntry {
|
||||||
return { key: 0, value: undefined };
|
return { key: "", value: undefined };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GameDefinitions_GameModesEntry: MessageFns<GameDefinitions_GameModesEntry> = {
|
export const GameDefinitions_GameModesEntry: MessageFns<GameDefinitions_GameModesEntry> = {
|
||||||
encode(message: GameDefinitions_GameModesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: GameDefinitions_GameModesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
if (message.key !== 0) {
|
if (message.key !== "") {
|
||||||
writer.uint32(8).uint32(message.key);
|
writer.uint32(10).string(message.key);
|
||||||
}
|
}
|
||||||
if (message.value !== undefined) {
|
if (message.value !== undefined) {
|
||||||
GameMode.encode(message.value, writer.uint32(18).fork()).join();
|
GameMode.encode(message.value, writer.uint32(18).fork()).join();
|
||||||
@@ -217,11 +208,11 @@ export const GameDefinitions_GameModesEntry: MessageFns<GameDefinitions_GameMode
|
|||||||
const tag = reader.uint32();
|
const tag = reader.uint32();
|
||||||
switch (tag >>> 3) {
|
switch (tag >>> 3) {
|
||||||
case 1: {
|
case 1: {
|
||||||
if (tag !== 8) {
|
if (tag !== 10) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
message.key = reader.uint32();
|
message.key = reader.string();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
@@ -243,15 +234,15 @@ export const GameDefinitions_GameModesEntry: MessageFns<GameDefinitions_GameMode
|
|||||||
|
|
||||||
fromJSON(object: any): GameDefinitions_GameModesEntry {
|
fromJSON(object: any): GameDefinitions_GameModesEntry {
|
||||||
return {
|
return {
|
||||||
key: isSet(object.key) ? globalThis.Number(object.key) : 0,
|
key: isSet(object.key) ? globalThis.String(object.key) : "",
|
||||||
value: isSet(object.value) ? GameMode.fromJSON(object.value) : undefined,
|
value: isSet(object.value) ? GameMode.fromJSON(object.value) : undefined,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
toJSON(message: GameDefinitions_GameModesEntry): unknown {
|
toJSON(message: GameDefinitions_GameModesEntry): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.key !== 0) {
|
if (message.key !== "") {
|
||||||
obj.key = Math.round(message.key);
|
obj.key = message.key;
|
||||||
}
|
}
|
||||||
if (message.value !== undefined) {
|
if (message.value !== undefined) {
|
||||||
obj.value = GameMode.toJSON(message.value);
|
obj.value = GameMode.toJSON(message.value);
|
||||||
@@ -266,7 +257,7 @@ export const GameDefinitions_GameModesEntry: MessageFns<GameDefinitions_GameMode
|
|||||||
object: I,
|
object: I,
|
||||||
): GameDefinitions_GameModesEntry {
|
): GameDefinitions_GameModesEntry {
|
||||||
const message = createBaseGameDefinitions_GameModesEntry();
|
const message = createBaseGameDefinitions_GameModesEntry();
|
||||||
message.key = object.key ?? 0;
|
message.key = object.key ?? "";
|
||||||
message.value = (object.value !== undefined && object.value !== null)
|
message.value = (object.value !== undefined && object.value !== null)
|
||||||
? GameMode.fromPartial(object.value)
|
? GameMode.fromPartial(object.value)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: i18n.proto
|
// source: i18n.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -24,7 +24,7 @@ function createBaseI18nString(): I18nString {
|
|||||||
|
|
||||||
export const I18nString: MessageFns<I18nString> = {
|
export const I18nString: MessageFns<I18nString> = {
|
||||||
encode(message: I18nString, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: I18nString, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.locales).forEach(([key, value]: [string, string]) => {
|
Object.entries(message.locales).forEach(([key, value]) => {
|
||||||
I18nString_LocalesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
I18nString_LocalesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -60,13 +60,10 @@ export const I18nString: MessageFns<I18nString> = {
|
|||||||
fromJSON(object: any): I18nString {
|
fromJSON(object: any): I18nString {
|
||||||
return {
|
return {
|
||||||
locales: isObject(object.locales)
|
locales: isObject(object.locales)
|
||||||
? (globalThis.Object.entries(object.locales) as [string, any][]).reduce(
|
? Object.entries(object.locales).reduce<{ [key: string]: string }>((acc, [key, value]) => {
|
||||||
(acc: { [key: string]: string }, [key, value]: [string, any]) => {
|
acc[key] = String(value);
|
||||||
acc[key] = globalThis.String(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -74,7 +71,7 @@ export const I18nString: MessageFns<I18nString> = {
|
|||||||
toJSON(message: I18nString): unknown {
|
toJSON(message: I18nString): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.locales) {
|
if (message.locales) {
|
||||||
const entries = globalThis.Object.entries(message.locales) as [string, string][];
|
const entries = Object.entries(message.locales);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.locales = {};
|
obj.locales = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -90,15 +87,12 @@ export const I18nString: MessageFns<I18nString> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<I18nString>, I>>(object: I): I18nString {
|
fromPartial<I extends Exact<DeepPartial<I18nString>, I>>(object: I): I18nString {
|
||||||
const message = createBaseI18nString();
|
const message = createBaseI18nString();
|
||||||
message.locales = (globalThis.Object.entries(object.locales ?? {}) as [string, string][]).reduce(
|
message.locales = Object.entries(object.locales ?? {}).reduce<{ [key: string]: string }>((acc, [key, value]) => {
|
||||||
(acc: { [key: string]: string }, [key, value]: [string, string]) => {
|
if (value !== undefined) {
|
||||||
if (value !== undefined) {
|
acc[key] = globalThis.String(value);
|
||||||
acc[key] = globalThis.String(value);
|
}
|
||||||
}
|
return acc;
|
||||||
return acc;
|
}, {});
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: map_definitions.proto
|
// source: map_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -30,7 +30,7 @@ function createBaseMapDefinitions(): MapDefinitions {
|
|||||||
|
|
||||||
export const MapDefinitions: MessageFns<MapDefinitions> = {
|
export const MapDefinitions: MessageFns<MapDefinitions> = {
|
||||||
encode(message: MapDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: MapDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.maps).forEach(([key, value]: [string, MapDefinition]) => {
|
Object.entries(message.maps).forEach(([key, value]) => {
|
||||||
MapDefinitions_MapsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
MapDefinitions_MapsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -66,13 +66,10 @@ export const MapDefinitions: MessageFns<MapDefinitions> = {
|
|||||||
fromJSON(object: any): MapDefinitions {
|
fromJSON(object: any): MapDefinitions {
|
||||||
return {
|
return {
|
||||||
maps: isObject(object.maps)
|
maps: isObject(object.maps)
|
||||||
? (globalThis.Object.entries(object.maps) as [string, any][]).reduce(
|
? Object.entries(object.maps).reduce<{ [key: number]: MapDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: MapDefinition }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = MapDefinition.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = MapDefinition.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -80,7 +77,7 @@ export const MapDefinitions: MessageFns<MapDefinitions> = {
|
|||||||
toJSON(message: MapDefinitions): unknown {
|
toJSON(message: MapDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.maps) {
|
if (message.maps) {
|
||||||
const entries = globalThis.Object.entries(message.maps) as [string, MapDefinition][];
|
const entries = Object.entries(message.maps);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.maps = {};
|
obj.maps = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -96,15 +93,12 @@ export const MapDefinitions: MessageFns<MapDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<MapDefinitions>, I>>(object: I): MapDefinitions {
|
fromPartial<I extends Exact<DeepPartial<MapDefinitions>, I>>(object: I): MapDefinitions {
|
||||||
const message = createBaseMapDefinitions();
|
const message = createBaseMapDefinitions();
|
||||||
message.maps = (globalThis.Object.entries(object.maps ?? {}) as [string, MapDefinition][]).reduce(
|
message.maps = Object.entries(object.maps ?? {}).reduce<{ [key: number]: MapDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: MapDefinition }, [key, value]: [string, MapDefinition]) => {
|
if (value !== undefined) {
|
||||||
if (value !== undefined) {
|
acc[globalThis.Number(key)] = MapDefinition.fromPartial(value);
|
||||||
acc[globalThis.Number(key)] = MapDefinition.fromPartial(value);
|
}
|
||||||
}
|
return acc;
|
||||||
return acc;
|
}, {});
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: model_definitions.proto
|
// source: model_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -116,7 +116,7 @@ function createBaseModelDefinitions(): ModelDefinitions {
|
|||||||
|
|
||||||
export const ModelDefinitions: MessageFns<ModelDefinitions> = {
|
export const ModelDefinitions: MessageFns<ModelDefinitions> = {
|
||||||
encode(message: ModelDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: ModelDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.models).forEach(([key, value]: [string, ModelDefinition]) => {
|
Object.entries(message.models).forEach(([key, value]) => {
|
||||||
ModelDefinitions_ModelsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
ModelDefinitions_ModelsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -152,13 +152,10 @@ export const ModelDefinitions: MessageFns<ModelDefinitions> = {
|
|||||||
fromJSON(object: any): ModelDefinitions {
|
fromJSON(object: any): ModelDefinitions {
|
||||||
return {
|
return {
|
||||||
models: isObject(object.models)
|
models: isObject(object.models)
|
||||||
? (globalThis.Object.entries(object.models) as [string, any][]).reduce(
|
? Object.entries(object.models).reduce<{ [key: number]: ModelDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: ModelDefinition }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = ModelDefinition.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = ModelDefinition.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -166,7 +163,7 @@ export const ModelDefinitions: MessageFns<ModelDefinitions> = {
|
|||||||
toJSON(message: ModelDefinitions): unknown {
|
toJSON(message: ModelDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.models) {
|
if (message.models) {
|
||||||
const entries = globalThis.Object.entries(message.models) as [string, ModelDefinition][];
|
const entries = Object.entries(message.models);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.models = {};
|
obj.models = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -182,8 +179,8 @@ export const ModelDefinitions: MessageFns<ModelDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<ModelDefinitions>, I>>(object: I): ModelDefinitions {
|
fromPartial<I extends Exact<DeepPartial<ModelDefinitions>, I>>(object: I): ModelDefinitions {
|
||||||
const message = createBaseModelDefinitions();
|
const message = createBaseModelDefinitions();
|
||||||
message.models = (globalThis.Object.entries(object.models ?? {}) as [string, ModelDefinition][]).reduce(
|
message.models = Object.entries(object.models ?? {}).reduce<{ [key: number]: ModelDefinition }>(
|
||||||
(acc: { [key: number]: ModelDefinition }, [key, value]: [string, ModelDefinition]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = ModelDefinition.fromPartial(value);
|
acc[globalThis.Number(key)] = ModelDefinition.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -295,10 +292,10 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
if (message.initial_turret_rotation !== undefined) {
|
if (message.initial_turret_rotation !== undefined) {
|
||||||
InitialTurretRotation.encode(message.initial_turret_rotation, writer.uint32(26).fork()).join();
|
InitialTurretRotation.encode(message.initial_turret_rotation, writer.uint32(26).fork()).join();
|
||||||
}
|
}
|
||||||
globalThis.Object.entries(message.turrets).forEach(([key, value]: [string, TurretModelDefinition]) => {
|
Object.entries(message.turrets).forEach(([key, value]) => {
|
||||||
ModelDefinition_TurretsEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join();
|
ModelDefinition_TurretsEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join();
|
||||||
});
|
});
|
||||||
globalThis.Object.entries(message.tracks).forEach(([key, value]: [string, TrackModelDefinition]) => {
|
Object.entries(message.tracks).forEach(([key, value]) => {
|
||||||
ModelDefinition_TracksEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join();
|
ModelDefinition_TracksEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join();
|
||||||
});
|
});
|
||||||
if (message.bounding_box !== undefined) {
|
if (message.bounding_box !== undefined) {
|
||||||
@@ -380,39 +377,23 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
fromJSON(object: any): ModelDefinition {
|
fromJSON(object: any): ModelDefinition {
|
||||||
return {
|
return {
|
||||||
armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined,
|
armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined,
|
||||||
turret_origin: isSet(object.turretOrigin)
|
turret_origin: isSet(object.turret_origin) ? Vector3.fromJSON(object.turret_origin) : undefined,
|
||||||
? Vector3.fromJSON(object.turretOrigin)
|
initial_turret_rotation: isSet(object.initial_turret_rotation)
|
||||||
: isSet(object.turret_origin)
|
|
||||||
? Vector3.fromJSON(object.turret_origin)
|
|
||||||
: undefined,
|
|
||||||
initial_turret_rotation: isSet(object.initialTurretRotation)
|
|
||||||
? InitialTurretRotation.fromJSON(object.initialTurretRotation)
|
|
||||||
: isSet(object.initial_turret_rotation)
|
|
||||||
? InitialTurretRotation.fromJSON(object.initial_turret_rotation)
|
? InitialTurretRotation.fromJSON(object.initial_turret_rotation)
|
||||||
: undefined,
|
: undefined,
|
||||||
turrets: isObject(object.turrets)
|
turrets: isObject(object.turrets)
|
||||||
? (globalThis.Object.entries(object.turrets) as [string, any][]).reduce(
|
? Object.entries(object.turrets).reduce<{ [key: number]: TurretModelDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: TurretModelDefinition }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = TurretModelDefinition.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = TurretModelDefinition.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
tracks: isObject(object.tracks)
|
tracks: isObject(object.tracks)
|
||||||
? (globalThis.Object.entries(object.tracks) as [string, any][]).reduce(
|
? Object.entries(object.tracks).reduce<{ [key: number]: TrackModelDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: TrackModelDefinition }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = TrackModelDefinition.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = TrackModelDefinition.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
bounding_box: isSet(object.boundingBox)
|
bounding_box: isSet(object.bounding_box) ? BoundingBox.fromJSON(object.bounding_box) : undefined,
|
||||||
? BoundingBox.fromJSON(object.boundingBox)
|
|
||||||
: isSet(object.bounding_box)
|
|
||||||
? BoundingBox.fromJSON(object.bounding_box)
|
|
||||||
: undefined,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -422,13 +403,13 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
obj.armor = Armor.toJSON(message.armor);
|
obj.armor = Armor.toJSON(message.armor);
|
||||||
}
|
}
|
||||||
if (message.turret_origin !== undefined) {
|
if (message.turret_origin !== undefined) {
|
||||||
obj.turretOrigin = Vector3.toJSON(message.turret_origin);
|
obj.turret_origin = Vector3.toJSON(message.turret_origin);
|
||||||
}
|
}
|
||||||
if (message.initial_turret_rotation !== undefined) {
|
if (message.initial_turret_rotation !== undefined) {
|
||||||
obj.initialTurretRotation = InitialTurretRotation.toJSON(message.initial_turret_rotation);
|
obj.initial_turret_rotation = InitialTurretRotation.toJSON(message.initial_turret_rotation);
|
||||||
}
|
}
|
||||||
if (message.turrets) {
|
if (message.turrets) {
|
||||||
const entries = globalThis.Object.entries(message.turrets) as [string, TurretModelDefinition][];
|
const entries = Object.entries(message.turrets);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.turrets = {};
|
obj.turrets = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -437,7 +418,7 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (message.tracks) {
|
if (message.tracks) {
|
||||||
const entries = globalThis.Object.entries(message.tracks) as [string, TrackModelDefinition][];
|
const entries = Object.entries(message.tracks);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.tracks = {};
|
obj.tracks = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -446,7 +427,7 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (message.bounding_box !== undefined) {
|
if (message.bounding_box !== undefined) {
|
||||||
obj.boundingBox = BoundingBox.toJSON(message.bounding_box);
|
obj.bounding_box = BoundingBox.toJSON(message.bounding_box);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
@@ -464,8 +445,8 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
(object.initial_turret_rotation !== undefined && object.initial_turret_rotation !== null)
|
(object.initial_turret_rotation !== undefined && object.initial_turret_rotation !== null)
|
||||||
? InitialTurretRotation.fromPartial(object.initial_turret_rotation)
|
? InitialTurretRotation.fromPartial(object.initial_turret_rotation)
|
||||||
: undefined;
|
: undefined;
|
||||||
message.turrets = (globalThis.Object.entries(object.turrets ?? {}) as [string, TurretModelDefinition][]).reduce(
|
message.turrets = Object.entries(object.turrets ?? {}).reduce<{ [key: number]: TurretModelDefinition }>(
|
||||||
(acc: { [key: number]: TurretModelDefinition }, [key, value]: [string, TurretModelDefinition]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = TurretModelDefinition.fromPartial(value);
|
acc[globalThis.Number(key)] = TurretModelDefinition.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -473,8 +454,8 @@ export const ModelDefinition: MessageFns<ModelDefinition> = {
|
|||||||
},
|
},
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
message.tracks = (globalThis.Object.entries(object.tracks ?? {}) as [string, TrackModelDefinition][]).reduce(
|
message.tracks = Object.entries(object.tracks ?? {}).reduce<{ [key: number]: TrackModelDefinition }>(
|
||||||
(acc: { [key: number]: TrackModelDefinition }, [key, value]: [string, TrackModelDefinition]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = TrackModelDefinition.fromPartial(value);
|
acc[globalThis.Number(key)] = TrackModelDefinition.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -651,7 +632,7 @@ function createBaseArmor(): Armor {
|
|||||||
|
|
||||||
export const Armor: MessageFns<Armor> = {
|
export const Armor: MessageFns<Armor> = {
|
||||||
encode(message: Armor, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: Armor, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.thickness).forEach(([key, value]: [string, number]) => {
|
Object.entries(message.thickness).forEach(([key, value]) => {
|
||||||
Armor_ThicknessEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
Armor_ThicknessEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
for (const v of message.spaced) {
|
for (const v of message.spaced) {
|
||||||
@@ -708,13 +689,10 @@ export const Armor: MessageFns<Armor> = {
|
|||||||
fromJSON(object: any): Armor {
|
fromJSON(object: any): Armor {
|
||||||
return {
|
return {
|
||||||
thickness: isObject(object.thickness)
|
thickness: isObject(object.thickness)
|
||||||
? (globalThis.Object.entries(object.thickness) as [string, any][]).reduce(
|
? Object.entries(object.thickness).reduce<{ [key: number]: number }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: number }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Number(value);
|
||||||
acc[globalThis.Number(key)] = globalThis.Number(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
spaced: globalThis.Array.isArray(object?.spaced) ? object.spaced.map((e: any) => globalThis.Number(e)) : [],
|
spaced: globalThis.Array.isArray(object?.spaced) ? object.spaced.map((e: any) => globalThis.Number(e)) : [],
|
||||||
};
|
};
|
||||||
@@ -723,7 +701,7 @@ export const Armor: MessageFns<Armor> = {
|
|||||||
toJSON(message: Armor): unknown {
|
toJSON(message: Armor): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.thickness) {
|
if (message.thickness) {
|
||||||
const entries = globalThis.Object.entries(message.thickness) as [string, number][];
|
const entries = Object.entries(message.thickness);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.thickness = {};
|
obj.thickness = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -742,8 +720,8 @@ export const Armor: MessageFns<Armor> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<Armor>, I>>(object: I): Armor {
|
fromPartial<I extends Exact<DeepPartial<Armor>, I>>(object: I): Armor {
|
||||||
const message = createBaseArmor();
|
const message = createBaseArmor();
|
||||||
message.thickness = (globalThis.Object.entries(object.thickness ?? {}) as [string, number][]).reduce(
|
message.thickness = Object.entries(object.thickness ?? {}).reduce<{ [key: number]: number }>(
|
||||||
(acc: { [key: number]: number }, [key, value]: [string, number]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = globalThis.Number(value);
|
acc[globalThis.Number(key)] = globalThis.Number(value);
|
||||||
}
|
}
|
||||||
@@ -1034,7 +1012,7 @@ export const TurretModelDefinition: MessageFns<TurretModelDefinition> = {
|
|||||||
if (message.gun_origin !== undefined) {
|
if (message.gun_origin !== undefined) {
|
||||||
Vector3.encode(message.gun_origin, writer.uint32(34).fork()).join();
|
Vector3.encode(message.gun_origin, writer.uint32(34).fork()).join();
|
||||||
}
|
}
|
||||||
globalThis.Object.entries(message.guns).forEach(([key, value]: [string, GunModelDefinition]) => {
|
Object.entries(message.guns).forEach(([key, value]) => {
|
||||||
TurretModelDefinition_GunsEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join();
|
TurretModelDefinition_GunsEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join();
|
||||||
});
|
});
|
||||||
if (message.yaw !== undefined) {
|
if (message.yaw !== undefined) {
|
||||||
@@ -1112,30 +1090,15 @@ export const TurretModelDefinition: MessageFns<TurretModelDefinition> = {
|
|||||||
|
|
||||||
fromJSON(object: any): TurretModelDefinition {
|
fromJSON(object: any): TurretModelDefinition {
|
||||||
return {
|
return {
|
||||||
bounding_box: isSet(object.boundingBox)
|
bounding_box: isSet(object.bounding_box) ? BoundingBox.fromJSON(object.bounding_box) : undefined,
|
||||||
? BoundingBox.fromJSON(object.boundingBox)
|
|
||||||
: isSet(object.bounding_box)
|
|
||||||
? BoundingBox.fromJSON(object.bounding_box)
|
|
||||||
: undefined,
|
|
||||||
armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined,
|
armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined,
|
||||||
model_id: isSet(object.modelId)
|
model_id: isSet(object.model_id) ? globalThis.Number(object.model_id) : 0,
|
||||||
? globalThis.Number(object.modelId)
|
gun_origin: isSet(object.gun_origin) ? Vector3.fromJSON(object.gun_origin) : undefined,
|
||||||
: isSet(object.model_id)
|
|
||||||
? globalThis.Number(object.model_id)
|
|
||||||
: 0,
|
|
||||||
gun_origin: isSet(object.gunOrigin)
|
|
||||||
? Vector3.fromJSON(object.gunOrigin)
|
|
||||||
: isSet(object.gun_origin)
|
|
||||||
? Vector3.fromJSON(object.gun_origin)
|
|
||||||
: undefined,
|
|
||||||
guns: isObject(object.guns)
|
guns: isObject(object.guns)
|
||||||
? (globalThis.Object.entries(object.guns) as [string, any][]).reduce(
|
? Object.entries(object.guns).reduce<{ [key: number]: GunModelDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: GunModelDefinition }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = GunModelDefinition.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = GunModelDefinition.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
yaw: isSet(object.yaw) ? YawLimits.fromJSON(object.yaw) : undefined,
|
yaw: isSet(object.yaw) ? YawLimits.fromJSON(object.yaw) : undefined,
|
||||||
};
|
};
|
||||||
@@ -1144,19 +1107,19 @@ export const TurretModelDefinition: MessageFns<TurretModelDefinition> = {
|
|||||||
toJSON(message: TurretModelDefinition): unknown {
|
toJSON(message: TurretModelDefinition): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.bounding_box !== undefined) {
|
if (message.bounding_box !== undefined) {
|
||||||
obj.boundingBox = BoundingBox.toJSON(message.bounding_box);
|
obj.bounding_box = BoundingBox.toJSON(message.bounding_box);
|
||||||
}
|
}
|
||||||
if (message.armor !== undefined) {
|
if (message.armor !== undefined) {
|
||||||
obj.armor = Armor.toJSON(message.armor);
|
obj.armor = Armor.toJSON(message.armor);
|
||||||
}
|
}
|
||||||
if (message.model_id !== 0) {
|
if (message.model_id !== 0) {
|
||||||
obj.modelId = Math.round(message.model_id);
|
obj.model_id = Math.round(message.model_id);
|
||||||
}
|
}
|
||||||
if (message.gun_origin !== undefined) {
|
if (message.gun_origin !== undefined) {
|
||||||
obj.gunOrigin = Vector3.toJSON(message.gun_origin);
|
obj.gun_origin = Vector3.toJSON(message.gun_origin);
|
||||||
}
|
}
|
||||||
if (message.guns) {
|
if (message.guns) {
|
||||||
const entries = globalThis.Object.entries(message.guns) as [string, GunModelDefinition][];
|
const entries = Object.entries(message.guns);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.guns = {};
|
obj.guns = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -1183,8 +1146,8 @@ export const TurretModelDefinition: MessageFns<TurretModelDefinition> = {
|
|||||||
message.gun_origin = (object.gun_origin !== undefined && object.gun_origin !== null)
|
message.gun_origin = (object.gun_origin !== undefined && object.gun_origin !== null)
|
||||||
? Vector3.fromPartial(object.gun_origin)
|
? Vector3.fromPartial(object.gun_origin)
|
||||||
: undefined;
|
: undefined;
|
||||||
message.guns = (globalThis.Object.entries(object.guns ?? {}) as [string, GunModelDefinition][]).reduce(
|
message.guns = Object.entries(object.guns ?? {}).reduce<{ [key: number]: GunModelDefinition }>(
|
||||||
(acc: { [key: number]: GunModelDefinition }, [key, value]: [string, GunModelDefinition]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = GunModelDefinition.fromPartial(value);
|
acc[globalThis.Number(key)] = GunModelDefinition.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -1591,11 +1554,7 @@ export const GunModelDefinition: MessageFns<GunModelDefinition> = {
|
|||||||
return {
|
return {
|
||||||
armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined,
|
armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined,
|
||||||
thickness: isSet(object.thickness) ? globalThis.Number(object.thickness) : 0,
|
thickness: isSet(object.thickness) ? globalThis.Number(object.thickness) : 0,
|
||||||
model_id: isSet(object.modelId)
|
model_id: isSet(object.model_id) ? globalThis.Number(object.model_id) : 0,
|
||||||
? globalThis.Number(object.modelId)
|
|
||||||
: isSet(object.model_id)
|
|
||||||
? globalThis.Number(object.model_id)
|
|
||||||
: 0,
|
|
||||||
pitch: isSet(object.pitch) ? PitchLimits.fromJSON(object.pitch) : undefined,
|
pitch: isSet(object.pitch) ? PitchLimits.fromJSON(object.pitch) : undefined,
|
||||||
mask: isSet(object.mask) ? globalThis.Number(object.mask) : 0,
|
mask: isSet(object.mask) ? globalThis.Number(object.mask) : 0,
|
||||||
};
|
};
|
||||||
@@ -1610,7 +1569,7 @@ export const GunModelDefinition: MessageFns<GunModelDefinition> = {
|
|||||||
obj.thickness = message.thickness;
|
obj.thickness = message.thickness;
|
||||||
}
|
}
|
||||||
if (message.model_id !== 0) {
|
if (message.model_id !== 0) {
|
||||||
obj.modelId = Math.round(message.model_id);
|
obj.model_id = Math.round(message.model_id);
|
||||||
}
|
}
|
||||||
if (message.pitch !== undefined) {
|
if (message.pitch !== undefined) {
|
||||||
obj.pitch = PitchLimits.toJSON(message.pitch);
|
obj.pitch = PitchLimits.toJSON(message.pitch);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: popular_tanks.proto
|
// source: popular_tanks.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: provision_definitions.proto
|
// source: provision_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -35,7 +35,7 @@ function createBaseProvisionDefinitions(): ProvisionDefinitions {
|
|||||||
|
|
||||||
export const ProvisionDefinitions: MessageFns<ProvisionDefinitions> = {
|
export const ProvisionDefinitions: MessageFns<ProvisionDefinitions> = {
|
||||||
encode(message: ProvisionDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: ProvisionDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.provisions).forEach(([key, value]: [string, Provision]) => {
|
Object.entries(message.provisions).forEach(([key, value]) => {
|
||||||
ProvisionDefinitions_ProvisionsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
ProvisionDefinitions_ProvisionsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -71,13 +71,10 @@ export const ProvisionDefinitions: MessageFns<ProvisionDefinitions> = {
|
|||||||
fromJSON(object: any): ProvisionDefinitions {
|
fromJSON(object: any): ProvisionDefinitions {
|
||||||
return {
|
return {
|
||||||
provisions: isObject(object.provisions)
|
provisions: isObject(object.provisions)
|
||||||
? (globalThis.Object.entries(object.provisions) as [string, any][]).reduce(
|
? Object.entries(object.provisions).reduce<{ [key: number]: Provision }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Provision }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Provision.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = Provision.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -85,7 +82,7 @@ export const ProvisionDefinitions: MessageFns<ProvisionDefinitions> = {
|
|||||||
toJSON(message: ProvisionDefinitions): unknown {
|
toJSON(message: ProvisionDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.provisions) {
|
if (message.provisions) {
|
||||||
const entries = globalThis.Object.entries(message.provisions) as [string, Provision][];
|
const entries = Object.entries(message.provisions);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.provisions = {};
|
obj.provisions = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -101,8 +98,8 @@ export const ProvisionDefinitions: MessageFns<ProvisionDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<ProvisionDefinitions>, I>>(object: I): ProvisionDefinitions {
|
fromPartial<I extends Exact<DeepPartial<ProvisionDefinitions>, I>>(object: I): ProvisionDefinitions {
|
||||||
const message = createBaseProvisionDefinitions();
|
const message = createBaseProvisionDefinitions();
|
||||||
message.provisions = (globalThis.Object.entries(object.provisions ?? {}) as [string, Provision][]).reduce(
|
message.provisions = Object.entries(object.provisions ?? {}).reduce<{ [key: number]: Provision }>(
|
||||||
(acc: { [key: number]: Provision }, [key, value]: [string, Provision]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = Provision.fromPartial(value);
|
acc[globalThis.Number(key)] = Provision.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -292,11 +289,7 @@ export const Provision: MessageFns<Provision> = {
|
|||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
crew: isSet(object.crew) ? globalThis.Number(object.crew) : 0,
|
crew: isSet(object.crew) ? globalThis.Number(object.crew) : 0,
|
||||||
game_mode_exclusive: isSet(object.gameModeExclusive)
|
game_mode_exclusive: isSet(object.game_mode_exclusive) ? globalThis.Boolean(object.game_mode_exclusive) : false,
|
||||||
? globalThis.Boolean(object.gameModeExclusive)
|
|
||||||
: isSet(object.game_mode_exclusive)
|
|
||||||
? globalThis.Boolean(object.game_mode_exclusive)
|
|
||||||
: false,
|
|
||||||
include: globalThis.Array.isArray(object?.include)
|
include: globalThis.Array.isArray(object?.include)
|
||||||
? object.include.map((e: any) => ConsumableTankFilter.fromJSON(e))
|
? object.include.map((e: any) => ConsumableTankFilter.fromJSON(e))
|
||||||
: [],
|
: [],
|
||||||
@@ -318,7 +311,7 @@ export const Provision: MessageFns<Provision> = {
|
|||||||
obj.crew = message.crew;
|
obj.crew = message.crew;
|
||||||
}
|
}
|
||||||
if (message.game_mode_exclusive !== false) {
|
if (message.game_mode_exclusive !== false) {
|
||||||
obj.gameModeExclusive = message.game_mode_exclusive;
|
obj.game_mode_exclusive = message.game_mode_exclusive;
|
||||||
}
|
}
|
||||||
if (message.include?.length) {
|
if (message.include?.length) {
|
||||||
obj.include = message.include.map((e) => ConsumableTankFilter.toJSON(e));
|
obj.include = message.include.map((e) => ConsumableTankFilter.toJSON(e));
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: rating_leaderboard.proto
|
// source: rating_leaderboard.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: reviews.proto
|
// source: reviews.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -34,7 +34,7 @@ function createBaseReviews(): Reviews {
|
|||||||
|
|
||||||
export const Reviews: MessageFns<Reviews> = {
|
export const Reviews: MessageFns<Reviews> = {
|
||||||
encode(message: Reviews, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: Reviews, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.reviews).forEach(([key, value]: [string, Review]) => {
|
Object.entries(message.reviews).forEach(([key, value]) => {
|
||||||
Reviews_ReviewsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
Reviews_ReviewsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -70,13 +70,10 @@ export const Reviews: MessageFns<Reviews> = {
|
|||||||
fromJSON(object: any): Reviews {
|
fromJSON(object: any): Reviews {
|
||||||
return {
|
return {
|
||||||
reviews: isObject(object.reviews)
|
reviews: isObject(object.reviews)
|
||||||
? (globalThis.Object.entries(object.reviews) as [string, any][]).reduce(
|
? Object.entries(object.reviews).reduce<{ [key: number]: Review }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Review }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Review.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = Review.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -84,7 +81,7 @@ export const Reviews: MessageFns<Reviews> = {
|
|||||||
toJSON(message: Reviews): unknown {
|
toJSON(message: Reviews): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.reviews) {
|
if (message.reviews) {
|
||||||
const entries = globalThis.Object.entries(message.reviews) as [string, Review][];
|
const entries = Object.entries(message.reviews);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.reviews = {};
|
obj.reviews = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -100,15 +97,12 @@ export const Reviews: MessageFns<Reviews> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<Reviews>, I>>(object: I): Reviews {
|
fromPartial<I extends Exact<DeepPartial<Reviews>, I>>(object: I): Reviews {
|
||||||
const message = createBaseReviews();
|
const message = createBaseReviews();
|
||||||
message.reviews = (globalThis.Object.entries(object.reviews ?? {}) as [string, Review][]).reduce(
|
message.reviews = Object.entries(object.reviews ?? {}).reduce<{ [key: number]: Review }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Review }, [key, value]: [string, Review]) => {
|
if (value !== undefined) {
|
||||||
if (value !== undefined) {
|
acc[globalThis.Number(key)] = Review.fromPartial(value);
|
||||||
acc[globalThis.Number(key)] = Review.fromPartial(value);
|
}
|
||||||
}
|
return acc;
|
||||||
return acc;
|
}, {});
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -240,11 +234,7 @@ export const Review: MessageFns<Review> = {
|
|||||||
|
|
||||||
fromJSON(object: any): Review {
|
fromJSON(object: any): Review {
|
||||||
return {
|
return {
|
||||||
last_updated: isSet(object.lastUpdated)
|
last_updated: isSet(object.last_updated) ? globalThis.Number(object.last_updated) : 0,
|
||||||
? globalThis.Number(object.lastUpdated)
|
|
||||||
: isSet(object.last_updated)
|
|
||||||
? globalThis.Number(object.last_updated)
|
|
||||||
: 0,
|
|
||||||
videos: globalThis.Array.isArray(object?.videos) ? object.videos.map((e: any) => Video.fromJSON(e)) : [],
|
videos: globalThis.Array.isArray(object?.videos) ? object.videos.map((e: any) => Video.fromJSON(e)) : [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -252,7 +242,7 @@ export const Review: MessageFns<Review> = {
|
|||||||
toJSON(message: Review): unknown {
|
toJSON(message: Review): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.last_updated !== 0) {
|
if (message.last_updated !== 0) {
|
||||||
obj.lastUpdated = message.last_updated;
|
obj.last_updated = message.last_updated;
|
||||||
}
|
}
|
||||||
if (message.videos?.length) {
|
if (message.videos?.length) {
|
||||||
obj.videos = message.videos.map((e) => Video.toJSON(e));
|
obj.videos = message.videos.map((e) => Video.toJSON(e));
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: skill_definitions.proto
|
// source: skill_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -29,7 +29,7 @@ function createBaseSkillDefinitions(): SkillDefinitions {
|
|||||||
|
|
||||||
export const SkillDefinitions: MessageFns<SkillDefinitions> = {
|
export const SkillDefinitions: MessageFns<SkillDefinitions> = {
|
||||||
encode(message: SkillDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: SkillDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.classes).forEach(([key, value]: [string, Skill]) => {
|
Object.entries(message.classes).forEach(([key, value]) => {
|
||||||
SkillDefinitions_ClassesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
SkillDefinitions_ClassesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -65,13 +65,10 @@ export const SkillDefinitions: MessageFns<SkillDefinitions> = {
|
|||||||
fromJSON(object: any): SkillDefinitions {
|
fromJSON(object: any): SkillDefinitions {
|
||||||
return {
|
return {
|
||||||
classes: isObject(object.classes)
|
classes: isObject(object.classes)
|
||||||
? (globalThis.Object.entries(object.classes) as [string, any][]).reduce(
|
? Object.entries(object.classes).reduce<{ [key: number]: Skill }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Skill }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = Skill.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = Skill.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -79,7 +76,7 @@ export const SkillDefinitions: MessageFns<SkillDefinitions> = {
|
|||||||
toJSON(message: SkillDefinitions): unknown {
|
toJSON(message: SkillDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.classes) {
|
if (message.classes) {
|
||||||
const entries = globalThis.Object.entries(message.classes) as [string, Skill][];
|
const entries = Object.entries(message.classes);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.classes = {};
|
obj.classes = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -95,15 +92,12 @@ export const SkillDefinitions: MessageFns<SkillDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<SkillDefinitions>, I>>(object: I): SkillDefinitions {
|
fromPartial<I extends Exact<DeepPartial<SkillDefinitions>, I>>(object: I): SkillDefinitions {
|
||||||
const message = createBaseSkillDefinitions();
|
const message = createBaseSkillDefinitions();
|
||||||
message.classes = (globalThis.Object.entries(object.classes ?? {}) as [string, Skill][]).reduce(
|
message.classes = Object.entries(object.classes ?? {}).reduce<{ [key: number]: Skill }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: Skill }, [key, value]: [string, Skill]) => {
|
if (value !== undefined) {
|
||||||
if (value !== undefined) {
|
acc[globalThis.Number(key)] = Skill.fromPartial(value);
|
||||||
acc[globalThis.Number(key)] = Skill.fromPartial(value);
|
}
|
||||||
}
|
return acc;
|
||||||
return acc;
|
}, {});
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ message TankDefinitions {
|
|||||||
message TankDefinition {
|
message TankDefinition {
|
||||||
required uint32 id = 1;
|
required uint32 id = 1;
|
||||||
required string slug = 2;
|
required string slug = 2;
|
||||||
map<uint32, uint32> roles = 3;
|
map<string, uint32> roles = 3;
|
||||||
required bool fixed_camouflage = 5;
|
required bool fixed_camouflage = 5;
|
||||||
repeated int32 camouflages = 6;
|
repeated int32 camouflages = 6;
|
||||||
repeated int32 ancestors = 7;
|
repeated int32 ancestors = 7;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-ts_proto v2.11.2
|
// protoc-gen-ts_proto v2.7.7
|
||||||
// protoc v5.28.2
|
// protoc v3.19.6
|
||||||
// source: tank_definitions.proto
|
// source: tank_definitions.proto
|
||||||
|
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
@@ -262,7 +262,7 @@ export interface TankDefinitions_TanksEntry {
|
|||||||
export interface TankDefinition {
|
export interface TankDefinition {
|
||||||
id: number;
|
id: number;
|
||||||
slug: string;
|
slug: string;
|
||||||
roles: { [key: number]: number };
|
roles: { [key: string]: number };
|
||||||
fixed_camouflage: boolean;
|
fixed_camouflage: boolean;
|
||||||
camouflages: number[];
|
camouflages: number[];
|
||||||
ancestors: number[];
|
ancestors: number[];
|
||||||
@@ -295,7 +295,7 @@ export interface TankDefinition {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface TankDefinition_RolesEntry {
|
export interface TankDefinition_RolesEntry {
|
||||||
key: number;
|
key: string;
|
||||||
value: number;
|
value: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,7 +463,7 @@ function createBaseTankDefinitions(): TankDefinitions {
|
|||||||
|
|
||||||
export const TankDefinitions: MessageFns<TankDefinitions> = {
|
export const TankDefinitions: MessageFns<TankDefinitions> = {
|
||||||
encode(message: TankDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: TankDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
globalThis.Object.entries(message.tanks).forEach(([key, value]: [string, TankDefinition]) => {
|
Object.entries(message.tanks).forEach(([key, value]) => {
|
||||||
TankDefinitions_TanksEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
TankDefinitions_TanksEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
|
||||||
});
|
});
|
||||||
return writer;
|
return writer;
|
||||||
@@ -499,13 +499,10 @@ export const TankDefinitions: MessageFns<TankDefinitions> = {
|
|||||||
fromJSON(object: any): TankDefinitions {
|
fromJSON(object: any): TankDefinitions {
|
||||||
return {
|
return {
|
||||||
tanks: isObject(object.tanks)
|
tanks: isObject(object.tanks)
|
||||||
? (globalThis.Object.entries(object.tanks) as [string, any][]).reduce(
|
? Object.entries(object.tanks).reduce<{ [key: number]: TankDefinition }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: TankDefinition }, [key, value]: [string, any]) => {
|
acc[globalThis.Number(key)] = TankDefinition.fromJSON(value);
|
||||||
acc[globalThis.Number(key)] = TankDefinition.fromJSON(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -513,7 +510,7 @@ export const TankDefinitions: MessageFns<TankDefinitions> = {
|
|||||||
toJSON(message: TankDefinitions): unknown {
|
toJSON(message: TankDefinitions): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.tanks) {
|
if (message.tanks) {
|
||||||
const entries = globalThis.Object.entries(message.tanks) as [string, TankDefinition][];
|
const entries = Object.entries(message.tanks);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.tanks = {};
|
obj.tanks = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -529,8 +526,8 @@ export const TankDefinitions: MessageFns<TankDefinitions> = {
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<TankDefinitions>, I>>(object: I): TankDefinitions {
|
fromPartial<I extends Exact<DeepPartial<TankDefinitions>, I>>(object: I): TankDefinitions {
|
||||||
const message = createBaseTankDefinitions();
|
const message = createBaseTankDefinitions();
|
||||||
message.tanks = (globalThis.Object.entries(object.tanks ?? {}) as [string, TankDefinition][]).reduce(
|
message.tanks = Object.entries(object.tanks ?? {}).reduce<{ [key: number]: TankDefinition }>(
|
||||||
(acc: { [key: number]: TankDefinition }, [key, value]: [string, TankDefinition]) => {
|
(acc, [key, value]) => {
|
||||||
if (value !== undefined) {
|
if (value !== undefined) {
|
||||||
acc[globalThis.Number(key)] = TankDefinition.fromPartial(value);
|
acc[globalThis.Number(key)] = TankDefinition.fromPartial(value);
|
||||||
}
|
}
|
||||||
@@ -665,7 +662,7 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
if (message.slug !== "") {
|
if (message.slug !== "") {
|
||||||
writer.uint32(18).string(message.slug);
|
writer.uint32(18).string(message.slug);
|
||||||
}
|
}
|
||||||
globalThis.Object.entries(message.roles).forEach(([key, value]: [string, number]) => {
|
Object.entries(message.roles).forEach(([key, value]) => {
|
||||||
TankDefinition_RolesEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).join();
|
TankDefinition_RolesEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).join();
|
||||||
});
|
});
|
||||||
if (message.fixed_camouflage !== false) {
|
if (message.fixed_camouflage !== false) {
|
||||||
@@ -1068,19 +1065,12 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
slug: isSet(object.slug) ? globalThis.String(object.slug) : "",
|
slug: isSet(object.slug) ? globalThis.String(object.slug) : "",
|
||||||
roles: isObject(object.roles)
|
roles: isObject(object.roles)
|
||||||
? (globalThis.Object.entries(object.roles) as [string, any][]).reduce(
|
? Object.entries(object.roles).reduce<{ [key: string]: number }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: number }, [key, value]: [string, any]) => {
|
acc[key] = Number(value);
|
||||||
acc[globalThis.Number(key)] = globalThis.Number(value);
|
return acc;
|
||||||
return acc;
|
}, {})
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
: {},
|
: {},
|
||||||
fixed_camouflage: isSet(object.fixedCamouflage)
|
fixed_camouflage: isSet(object.fixed_camouflage) ? globalThis.Boolean(object.fixed_camouflage) : false,
|
||||||
? globalThis.Boolean(object.fixedCamouflage)
|
|
||||||
: isSet(object.fixed_camouflage)
|
|
||||||
? globalThis.Boolean(object.fixed_camouflage)
|
|
||||||
: false,
|
|
||||||
camouflages: globalThis.Array.isArray(object?.camouflages)
|
camouflages: globalThis.Array.isArray(object?.camouflages)
|
||||||
? object.camouflages.map((e: any) => globalThis.Number(e))
|
? object.camouflages.map((e: any) => globalThis.Number(e))
|
||||||
: [],
|
: [],
|
||||||
@@ -1090,23 +1080,13 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
successors: globalThis.Array.isArray(object?.successors)
|
successors: globalThis.Array.isArray(object?.successors)
|
||||||
? object.successors.map((e: any) => globalThis.Number(e))
|
? object.successors.map((e: any) => globalThis.Number(e))
|
||||||
: [],
|
: [],
|
||||||
crew: globalThis.Array.isArray(object?.crew)
|
crew: globalThis.Array.isArray(object?.crew) ? object.crew.map((e: any) => Crew.fromJSON(e)) : [],
|
||||||
? object.crew.map((e: any) => Crew.fromJSON(e))
|
|
||||||
: [],
|
|
||||||
health: isSet(object.health) ? globalThis.Number(object.health) : 0,
|
health: isSet(object.health) ? globalThis.Number(object.health) : 0,
|
||||||
nation: isSet(object.nation) ? globalThis.String(object.nation) : "",
|
nation: isSet(object.nation) ? globalThis.String(object.nation) : "",
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
type: isSet(object.type) ? tankTypeFromJSON(object.type) : 0,
|
type: isSet(object.type) ? tankTypeFromJSON(object.type) : 0,
|
||||||
max_consumables: isSet(object.maxConsumables)
|
max_consumables: isSet(object.max_consumables) ? globalThis.Number(object.max_consumables) : 0,
|
||||||
? globalThis.Number(object.maxConsumables)
|
max_provisions: isSet(object.max_provisions) ? globalThis.Number(object.max_provisions) : 0,
|
||||||
: isSet(object.max_consumables)
|
|
||||||
? globalThis.Number(object.max_consumables)
|
|
||||||
: 0,
|
|
||||||
max_provisions: isSet(object.maxProvisions)
|
|
||||||
? globalThis.Number(object.maxProvisions)
|
|
||||||
: isSet(object.max_provisions)
|
|
||||||
? globalThis.Number(object.max_provisions)
|
|
||||||
: 0,
|
|
||||||
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
||||||
class: isSet(object.class) ? tankClassFromJSON(object.class) : 0,
|
class: isSet(object.class) ? tankClassFromJSON(object.class) : 0,
|
||||||
testing: isSet(object.testing) ? globalThis.Boolean(object.testing) : false,
|
testing: isSet(object.testing) ? globalThis.Boolean(object.testing) : false,
|
||||||
@@ -1121,47 +1101,15 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
? object.tracks.map((e: any) => TrackDefinition.fromJSON(e))
|
? object.tracks.map((e: any) => TrackDefinition.fromJSON(e))
|
||||||
: [],
|
: [],
|
||||||
price: isSet(object.price) ? TankPrice.fromJSON(object.price) : undefined,
|
price: isSet(object.price) ? TankPrice.fromJSON(object.price) : undefined,
|
||||||
research_cost: isSet(object.researchCost)
|
research_cost: isSet(object.research_cost) ? ResearchCost.fromJSON(object.research_cost) : undefined,
|
||||||
? ResearchCost.fromJSON(object.researchCost)
|
speed_forwards: isSet(object.speed_forwards) ? globalThis.Number(object.speed_forwards) : 0,
|
||||||
: isSet(object.research_cost)
|
speed_backwards: isSet(object.speed_backwards) ? globalThis.Number(object.speed_backwards) : 0,
|
||||||
? ResearchCost.fromJSON(object.research_cost)
|
camouflage_still: isSet(object.camouflage_still) ? globalThis.Number(object.camouflage_still) : 0,
|
||||||
: undefined,
|
camouflage_moving: isSet(object.camouflage_moving) ? globalThis.Number(object.camouflage_moving) : 0,
|
||||||
speed_forwards: isSet(object.speedForwards)
|
camouflage_on_fire: isSet(object.camouflage_on_fire) ? globalThis.Number(object.camouflage_on_fire) : 0,
|
||||||
? globalThis.Number(object.speedForwards)
|
equipment_preset: isSet(object.equipment_preset) ? globalThis.String(object.equipment_preset) : "",
|
||||||
: isSet(object.speed_forwards)
|
|
||||||
? globalThis.Number(object.speed_forwards)
|
|
||||||
: 0,
|
|
||||||
speed_backwards: isSet(object.speedBackwards)
|
|
||||||
? globalThis.Number(object.speedBackwards)
|
|
||||||
: isSet(object.speed_backwards)
|
|
||||||
? globalThis.Number(object.speed_backwards)
|
|
||||||
: 0,
|
|
||||||
camouflage_still: isSet(object.camouflageStill)
|
|
||||||
? globalThis.Number(object.camouflageStill)
|
|
||||||
: isSet(object.camouflage_still)
|
|
||||||
? globalThis.Number(object.camouflage_still)
|
|
||||||
: 0,
|
|
||||||
camouflage_moving: isSet(object.camouflageMoving)
|
|
||||||
? globalThis.Number(object.camouflageMoving)
|
|
||||||
: isSet(object.camouflage_moving)
|
|
||||||
? globalThis.Number(object.camouflage_moving)
|
|
||||||
: 0,
|
|
||||||
camouflage_on_fire: isSet(object.camouflageOnFire)
|
|
||||||
? globalThis.Number(object.camouflageOnFire)
|
|
||||||
: isSet(object.camouflage_on_fire)
|
|
||||||
? globalThis.Number(object.camouflage_on_fire)
|
|
||||||
: 0,
|
|
||||||
equipment_preset: isSet(object.equipmentPreset)
|
|
||||||
? globalThis.String(object.equipmentPreset)
|
|
||||||
: isSet(object.equipment_preset)
|
|
||||||
? globalThis.String(object.equipment_preset)
|
|
||||||
: "",
|
|
||||||
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
||||||
dev_name: isSet(object.devName)
|
dev_name: isSet(object.dev_name) ? globalThis.String(object.dev_name) : "",
|
||||||
? globalThis.String(object.devName)
|
|
||||||
: isSet(object.dev_name)
|
|
||||||
? globalThis.String(object.dev_name)
|
|
||||||
: "",
|
|
||||||
equalizer: isSet(object.equalizer) ? Equalizer.fromJSON(object.equalizer) : undefined,
|
equalizer: isSet(object.equalizer) ? Equalizer.fromJSON(object.equalizer) : undefined,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -1175,7 +1123,7 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
obj.slug = message.slug;
|
obj.slug = message.slug;
|
||||||
}
|
}
|
||||||
if (message.roles) {
|
if (message.roles) {
|
||||||
const entries = globalThis.Object.entries(message.roles) as [string, number][];
|
const entries = Object.entries(message.roles);
|
||||||
if (entries.length > 0) {
|
if (entries.length > 0) {
|
||||||
obj.roles = {};
|
obj.roles = {};
|
||||||
entries.forEach(([k, v]) => {
|
entries.forEach(([k, v]) => {
|
||||||
@@ -1184,7 +1132,7 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (message.fixed_camouflage !== false) {
|
if (message.fixed_camouflage !== false) {
|
||||||
obj.fixedCamouflage = message.fixed_camouflage;
|
obj.fixed_camouflage = message.fixed_camouflage;
|
||||||
}
|
}
|
||||||
if (message.camouflages?.length) {
|
if (message.camouflages?.length) {
|
||||||
obj.camouflages = message.camouflages.map((e) => Math.round(e));
|
obj.camouflages = message.camouflages.map((e) => Math.round(e));
|
||||||
@@ -1211,10 +1159,10 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
obj.type = tankTypeToJSON(message.type);
|
obj.type = tankTypeToJSON(message.type);
|
||||||
}
|
}
|
||||||
if (message.max_consumables !== 0) {
|
if (message.max_consumables !== 0) {
|
||||||
obj.maxConsumables = Math.round(message.max_consumables);
|
obj.max_consumables = Math.round(message.max_consumables);
|
||||||
}
|
}
|
||||||
if (message.max_provisions !== 0) {
|
if (message.max_provisions !== 0) {
|
||||||
obj.maxProvisions = Math.round(message.max_provisions);
|
obj.max_provisions = Math.round(message.max_provisions);
|
||||||
}
|
}
|
||||||
if (message.tier !== 0) {
|
if (message.tier !== 0) {
|
||||||
obj.tier = Math.round(message.tier);
|
obj.tier = Math.round(message.tier);
|
||||||
@@ -1241,31 +1189,31 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
obj.price = TankPrice.toJSON(message.price);
|
obj.price = TankPrice.toJSON(message.price);
|
||||||
}
|
}
|
||||||
if (message.research_cost !== undefined) {
|
if (message.research_cost !== undefined) {
|
||||||
obj.researchCost = ResearchCost.toJSON(message.research_cost);
|
obj.research_cost = ResearchCost.toJSON(message.research_cost);
|
||||||
}
|
}
|
||||||
if (message.speed_forwards !== 0) {
|
if (message.speed_forwards !== 0) {
|
||||||
obj.speedForwards = message.speed_forwards;
|
obj.speed_forwards = message.speed_forwards;
|
||||||
}
|
}
|
||||||
if (message.speed_backwards !== 0) {
|
if (message.speed_backwards !== 0) {
|
||||||
obj.speedBackwards = message.speed_backwards;
|
obj.speed_backwards = message.speed_backwards;
|
||||||
}
|
}
|
||||||
if (message.camouflage_still !== 0) {
|
if (message.camouflage_still !== 0) {
|
||||||
obj.camouflageStill = message.camouflage_still;
|
obj.camouflage_still = message.camouflage_still;
|
||||||
}
|
}
|
||||||
if (message.camouflage_moving !== 0) {
|
if (message.camouflage_moving !== 0) {
|
||||||
obj.camouflageMoving = message.camouflage_moving;
|
obj.camouflage_moving = message.camouflage_moving;
|
||||||
}
|
}
|
||||||
if (message.camouflage_on_fire !== 0) {
|
if (message.camouflage_on_fire !== 0) {
|
||||||
obj.camouflageOnFire = message.camouflage_on_fire;
|
obj.camouflage_on_fire = message.camouflage_on_fire;
|
||||||
}
|
}
|
||||||
if (message.equipment_preset !== "") {
|
if (message.equipment_preset !== "") {
|
||||||
obj.equipmentPreset = message.equipment_preset;
|
obj.equipment_preset = message.equipment_preset;
|
||||||
}
|
}
|
||||||
if (message.weight !== 0) {
|
if (message.weight !== 0) {
|
||||||
obj.weight = Math.round(message.weight);
|
obj.weight = Math.round(message.weight);
|
||||||
}
|
}
|
||||||
if (message.dev_name !== "") {
|
if (message.dev_name !== "") {
|
||||||
obj.devName = message.dev_name;
|
obj.dev_name = message.dev_name;
|
||||||
}
|
}
|
||||||
if (message.equalizer !== undefined) {
|
if (message.equalizer !== undefined) {
|
||||||
obj.equalizer = Equalizer.toJSON(message.equalizer);
|
obj.equalizer = Equalizer.toJSON(message.equalizer);
|
||||||
@@ -1280,15 +1228,12 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
const message = createBaseTankDefinition();
|
const message = createBaseTankDefinition();
|
||||||
message.id = object.id ?? 0;
|
message.id = object.id ?? 0;
|
||||||
message.slug = object.slug ?? "";
|
message.slug = object.slug ?? "";
|
||||||
message.roles = (globalThis.Object.entries(object.roles ?? {}) as [string, number][]).reduce(
|
message.roles = Object.entries(object.roles ?? {}).reduce<{ [key: string]: number }>((acc, [key, value]) => {
|
||||||
(acc: { [key: number]: number }, [key, value]: [string, number]) => {
|
if (value !== undefined) {
|
||||||
if (value !== undefined) {
|
acc[key] = globalThis.Number(value);
|
||||||
acc[globalThis.Number(key)] = globalThis.Number(value);
|
}
|
||||||
}
|
return acc;
|
||||||
return acc;
|
}, {});
|
||||||
},
|
|
||||||
{},
|
|
||||||
);
|
|
||||||
message.fixed_camouflage = object.fixed_camouflage ?? false;
|
message.fixed_camouflage = object.fixed_camouflage ?? false;
|
||||||
message.camouflages = object.camouflages?.map((e) => e) || [];
|
message.camouflages = object.camouflages?.map((e) => e) || [];
|
||||||
message.ancestors = object.ancestors?.map((e) => e) || [];
|
message.ancestors = object.ancestors?.map((e) => e) || [];
|
||||||
@@ -1331,13 +1276,13 @@ export const TankDefinition: MessageFns<TankDefinition> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function createBaseTankDefinition_RolesEntry(): TankDefinition_RolesEntry {
|
function createBaseTankDefinition_RolesEntry(): TankDefinition_RolesEntry {
|
||||||
return { key: 0, value: 0 };
|
return { key: "", value: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const TankDefinition_RolesEntry: MessageFns<TankDefinition_RolesEntry> = {
|
export const TankDefinition_RolesEntry: MessageFns<TankDefinition_RolesEntry> = {
|
||||||
encode(message: TankDefinition_RolesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
encode(message: TankDefinition_RolesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||||
if (message.key !== 0) {
|
if (message.key !== "") {
|
||||||
writer.uint32(8).uint32(message.key);
|
writer.uint32(10).string(message.key);
|
||||||
}
|
}
|
||||||
if (message.value !== 0) {
|
if (message.value !== 0) {
|
||||||
writer.uint32(16).uint32(message.value);
|
writer.uint32(16).uint32(message.value);
|
||||||
@@ -1353,11 +1298,11 @@ export const TankDefinition_RolesEntry: MessageFns<TankDefinition_RolesEntry> =
|
|||||||
const tag = reader.uint32();
|
const tag = reader.uint32();
|
||||||
switch (tag >>> 3) {
|
switch (tag >>> 3) {
|
||||||
case 1: {
|
case 1: {
|
||||||
if (tag !== 8) {
|
if (tag !== 10) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
message.key = reader.uint32();
|
message.key = reader.string();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
@@ -1379,15 +1324,15 @@ export const TankDefinition_RolesEntry: MessageFns<TankDefinition_RolesEntry> =
|
|||||||
|
|
||||||
fromJSON(object: any): TankDefinition_RolesEntry {
|
fromJSON(object: any): TankDefinition_RolesEntry {
|
||||||
return {
|
return {
|
||||||
key: isSet(object.key) ? globalThis.Number(object.key) : 0,
|
key: isSet(object.key) ? globalThis.String(object.key) : "",
|
||||||
value: isSet(object.value) ? globalThis.Number(object.value) : 0,
|
value: isSet(object.value) ? globalThis.Number(object.value) : 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
toJSON(message: TankDefinition_RolesEntry): unknown {
|
toJSON(message: TankDefinition_RolesEntry): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.key !== 0) {
|
if (message.key !== "") {
|
||||||
obj.key = Math.round(message.key);
|
obj.key = message.key;
|
||||||
}
|
}
|
||||||
if (message.value !== 0) {
|
if (message.value !== 0) {
|
||||||
obj.value = Math.round(message.value);
|
obj.value = Math.round(message.value);
|
||||||
@@ -1400,7 +1345,7 @@ export const TankDefinition_RolesEntry: MessageFns<TankDefinition_RolesEntry> =
|
|||||||
},
|
},
|
||||||
fromPartial<I extends Exact<DeepPartial<TankDefinition_RolesEntry>, I>>(object: I): TankDefinition_RolesEntry {
|
fromPartial<I extends Exact<DeepPartial<TankDefinition_RolesEntry>, I>>(object: I): TankDefinition_RolesEntry {
|
||||||
const message = createBaseTankDefinition_RolesEntry();
|
const message = createBaseTankDefinition_RolesEntry();
|
||||||
message.key = object.key ?? 0;
|
message.key = object.key ?? "";
|
||||||
message.value = object.value ?? 0;
|
message.value = object.value ?? 0;
|
||||||
return message;
|
return message;
|
||||||
},
|
},
|
||||||
@@ -1490,11 +1435,7 @@ export const Equalizer: MessageFns<Equalizer> = {
|
|||||||
return {
|
return {
|
||||||
health: isSet(object.health) ? globalThis.Number(object.health) : 0,
|
health: isSet(object.health) ? globalThis.Number(object.health) : 0,
|
||||||
penetration: isSet(object.penetration) ? globalThis.Number(object.penetration) : 0,
|
penetration: isSet(object.penetration) ? globalThis.Number(object.penetration) : 0,
|
||||||
module_health: isSet(object.moduleHealth)
|
module_health: isSet(object.module_health) ? globalThis.Number(object.module_health) : 0,
|
||||||
? globalThis.Number(object.moduleHealth)
|
|
||||||
: isSet(object.module_health)
|
|
||||||
? globalThis.Number(object.module_health)
|
|
||||||
: 0,
|
|
||||||
damage: isSet(object.damage) ? globalThis.Number(object.damage) : 0,
|
damage: isSet(object.damage) ? globalThis.Number(object.damage) : 0,
|
||||||
armor: isSet(object.armor) ? globalThis.Number(object.armor) : 0,
|
armor: isSet(object.armor) ? globalThis.Number(object.armor) : 0,
|
||||||
};
|
};
|
||||||
@@ -1509,7 +1450,7 @@ export const Equalizer: MessageFns<Equalizer> = {
|
|||||||
obj.penetration = message.penetration;
|
obj.penetration = message.penetration;
|
||||||
}
|
}
|
||||||
if (message.module_health !== 0) {
|
if (message.module_health !== 0) {
|
||||||
obj.moduleHealth = message.module_health;
|
obj.module_health = message.module_health;
|
||||||
}
|
}
|
||||||
if (message.damage !== 0) {
|
if (message.damage !== 0) {
|
||||||
obj.damage = message.damage;
|
obj.damage = message.damage;
|
||||||
@@ -1590,8 +1531,6 @@ export const ResearchCost: MessageFns<ResearchCost> = {
|
|||||||
return {
|
return {
|
||||||
research_cost_type: isSet(object.xp)
|
research_cost_type: isSet(object.xp)
|
||||||
? { $case: "xp", value: globalThis.Number(object.xp) }
|
? { $case: "xp", value: globalThis.Number(object.xp) }
|
||||||
: isSet(object.seasonalTokens)
|
|
||||||
? { $case: "seasonal_tokens", value: ResearchCostSeasonalTokens.fromJSON(object.seasonalTokens) }
|
|
||||||
: isSet(object.seasonal_tokens)
|
: isSet(object.seasonal_tokens)
|
||||||
? { $case: "seasonal_tokens", value: ResearchCostSeasonalTokens.fromJSON(object.seasonal_tokens) }
|
? { $case: "seasonal_tokens", value: ResearchCostSeasonalTokens.fromJSON(object.seasonal_tokens) }
|
||||||
: undefined,
|
: undefined,
|
||||||
@@ -1603,7 +1542,7 @@ export const ResearchCost: MessageFns<ResearchCost> = {
|
|||||||
if (message.research_cost_type?.$case === "xp") {
|
if (message.research_cost_type?.$case === "xp") {
|
||||||
obj.xp = Math.round(message.research_cost_type.value);
|
obj.xp = Math.round(message.research_cost_type.value);
|
||||||
} else if (message.research_cost_type?.$case === "seasonal_tokens") {
|
} else if (message.research_cost_type?.$case === "seasonal_tokens") {
|
||||||
obj.seasonalTokens = ResearchCostSeasonalTokens.toJSON(message.research_cost_type.value);
|
obj.seasonal_tokens = ResearchCostSeasonalTokens.toJSON(message.research_cost_type.value);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
@@ -1962,44 +1901,14 @@ export const TrackDefinition: MessageFns<TrackDefinition> = {
|
|||||||
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
||||||
traverse_speed: isSet(object.traverseSpeed)
|
traverse_speed: isSet(object.traverse_speed) ? globalThis.Number(object.traverse_speed) : 0,
|
||||||
? globalThis.Number(object.traverseSpeed)
|
research_cost: isSet(object.research_cost) ? ResearchCost.fromJSON(object.research_cost) : undefined,
|
||||||
: isSet(object.traverse_speed)
|
dispersion_move: isSet(object.dispersion_move) ? globalThis.Number(object.dispersion_move) : 0,
|
||||||
? globalThis.Number(object.traverse_speed)
|
dispersion_traverse: isSet(object.dispersion_traverse) ? globalThis.Number(object.dispersion_traverse) : 0,
|
||||||
: 0,
|
resistance_hard: isSet(object.resistance_hard) ? globalThis.Number(object.resistance_hard) : 0,
|
||||||
research_cost: isSet(object.researchCost)
|
resistance_medium: isSet(object.resistance_medium) ? globalThis.Number(object.resistance_medium) : 0,
|
||||||
? ResearchCost.fromJSON(object.researchCost)
|
resistance_soft: isSet(object.resistance_soft) ? globalThis.Number(object.resistance_soft) : 0,
|
||||||
: isSet(object.research_cost)
|
unlocks: globalThis.Array.isArray(object?.unlocks) ? object.unlocks.map((e: any) => Unlock.fromJSON(e)) : [],
|
||||||
? ResearchCost.fromJSON(object.research_cost)
|
|
||||||
: undefined,
|
|
||||||
dispersion_move: isSet(object.dispersionMove)
|
|
||||||
? globalThis.Number(object.dispersionMove)
|
|
||||||
: isSet(object.dispersion_move)
|
|
||||||
? globalThis.Number(object.dispersion_move)
|
|
||||||
: 0,
|
|
||||||
dispersion_traverse: isSet(object.dispersionTraverse)
|
|
||||||
? globalThis.Number(object.dispersionTraverse)
|
|
||||||
: isSet(object.dispersion_traverse)
|
|
||||||
? globalThis.Number(object.dispersion_traverse)
|
|
||||||
: 0,
|
|
||||||
resistance_hard: isSet(object.resistanceHard)
|
|
||||||
? globalThis.Number(object.resistanceHard)
|
|
||||||
: isSet(object.resistance_hard)
|
|
||||||
? globalThis.Number(object.resistance_hard)
|
|
||||||
: 0,
|
|
||||||
resistance_medium: isSet(object.resistanceMedium)
|
|
||||||
? globalThis.Number(object.resistanceMedium)
|
|
||||||
: isSet(object.resistance_medium)
|
|
||||||
? globalThis.Number(object.resistance_medium)
|
|
||||||
: 0,
|
|
||||||
resistance_soft: isSet(object.resistanceSoft)
|
|
||||||
? globalThis.Number(object.resistanceSoft)
|
|
||||||
: isSet(object.resistance_soft)
|
|
||||||
? globalThis.Number(object.resistance_soft)
|
|
||||||
: 0,
|
|
||||||
unlocks: globalThis.Array.isArray(object?.unlocks)
|
|
||||||
? object.unlocks.map((e: any) => Unlock.fromJSON(e))
|
|
||||||
: [],
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -2018,25 +1927,25 @@ export const TrackDefinition: MessageFns<TrackDefinition> = {
|
|||||||
obj.weight = Math.round(message.weight);
|
obj.weight = Math.round(message.weight);
|
||||||
}
|
}
|
||||||
if (message.traverse_speed !== 0) {
|
if (message.traverse_speed !== 0) {
|
||||||
obj.traverseSpeed = message.traverse_speed;
|
obj.traverse_speed = message.traverse_speed;
|
||||||
}
|
}
|
||||||
if (message.research_cost !== undefined) {
|
if (message.research_cost !== undefined) {
|
||||||
obj.researchCost = ResearchCost.toJSON(message.research_cost);
|
obj.research_cost = ResearchCost.toJSON(message.research_cost);
|
||||||
}
|
}
|
||||||
if (message.dispersion_move !== 0) {
|
if (message.dispersion_move !== 0) {
|
||||||
obj.dispersionMove = message.dispersion_move;
|
obj.dispersion_move = message.dispersion_move;
|
||||||
}
|
}
|
||||||
if (message.dispersion_traverse !== 0) {
|
if (message.dispersion_traverse !== 0) {
|
||||||
obj.dispersionTraverse = message.dispersion_traverse;
|
obj.dispersion_traverse = message.dispersion_traverse;
|
||||||
}
|
}
|
||||||
if (message.resistance_hard !== 0) {
|
if (message.resistance_hard !== 0) {
|
||||||
obj.resistanceHard = message.resistance_hard;
|
obj.resistance_hard = message.resistance_hard;
|
||||||
}
|
}
|
||||||
if (message.resistance_medium !== 0) {
|
if (message.resistance_medium !== 0) {
|
||||||
obj.resistanceMedium = message.resistance_medium;
|
obj.resistance_medium = message.resistance_medium;
|
||||||
}
|
}
|
||||||
if (message.resistance_soft !== 0) {
|
if (message.resistance_soft !== 0) {
|
||||||
obj.resistanceSoft = message.resistance_soft;
|
obj.resistance_soft = message.resistance_soft;
|
||||||
}
|
}
|
||||||
if (message.unlocks?.length) {
|
if (message.unlocks?.length) {
|
||||||
obj.unlocks = message.unlocks.map((e) => Unlock.toJSON(e));
|
obj.unlocks = message.unlocks.map((e) => Unlock.toJSON(e));
|
||||||
@@ -2195,17 +2104,9 @@ export const EngineDefinition: MessageFns<EngineDefinition> = {
|
|||||||
return {
|
return {
|
||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
research_cost: isSet(object.researchCost)
|
research_cost: isSet(object.research_cost) ? ResearchCost.fromJSON(object.research_cost) : undefined,
|
||||||
? ResearchCost.fromJSON(object.researchCost)
|
|
||||||
: isSet(object.research_cost)
|
|
||||||
? ResearchCost.fromJSON(object.research_cost)
|
|
||||||
: undefined,
|
|
||||||
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
||||||
fire_chance: isSet(object.fireChance)
|
fire_chance: isSet(object.fire_chance) ? globalThis.Number(object.fire_chance) : 0,
|
||||||
? globalThis.Number(object.fireChance)
|
|
||||||
: isSet(object.fire_chance)
|
|
||||||
? globalThis.Number(object.fire_chance)
|
|
||||||
: 0,
|
|
||||||
power: isSet(object.power) ? globalThis.Number(object.power) : 0,
|
power: isSet(object.power) ? globalThis.Number(object.power) : 0,
|
||||||
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
||||||
unlocks: globalThis.Array.isArray(object?.unlocks) ? object.unlocks.map((e: any) => Unlock.fromJSON(e)) : [],
|
unlocks: globalThis.Array.isArray(object?.unlocks) ? object.unlocks.map((e: any) => Unlock.fromJSON(e)) : [],
|
||||||
@@ -2221,13 +2122,13 @@ export const EngineDefinition: MessageFns<EngineDefinition> = {
|
|||||||
obj.name = I18nString.toJSON(message.name);
|
obj.name = I18nString.toJSON(message.name);
|
||||||
}
|
}
|
||||||
if (message.research_cost !== undefined) {
|
if (message.research_cost !== undefined) {
|
||||||
obj.researchCost = ResearchCost.toJSON(message.research_cost);
|
obj.research_cost = ResearchCost.toJSON(message.research_cost);
|
||||||
}
|
}
|
||||||
if (message.tier !== 0) {
|
if (message.tier !== 0) {
|
||||||
obj.tier = Math.round(message.tier);
|
obj.tier = Math.round(message.tier);
|
||||||
}
|
}
|
||||||
if (message.fire_chance !== 0) {
|
if (message.fire_chance !== 0) {
|
||||||
obj.fireChance = message.fire_chance;
|
obj.fire_chance = message.fire_chance;
|
||||||
}
|
}
|
||||||
if (message.power !== 0) {
|
if (message.power !== 0) {
|
||||||
obj.power = Math.round(message.power);
|
obj.power = Math.round(message.power);
|
||||||
@@ -2412,27 +2313,13 @@ export const TurretDefinition: MessageFns<TurretDefinition> = {
|
|||||||
return {
|
return {
|
||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
health: isSet(object.health) ? globalThis.Number(object.health) : 0,
|
health: isSet(object.health) ? globalThis.Number(object.health) : 0,
|
||||||
view_range: isSet(object.viewRange)
|
view_range: isSet(object.view_range) ? globalThis.Number(object.view_range) : 0,
|
||||||
? globalThis.Number(object.viewRange)
|
traverse_speed: isSet(object.traverse_speed) ? globalThis.Number(object.traverse_speed) : 0,
|
||||||
: isSet(object.view_range)
|
research_cost: isSet(object.research_cost) ? ResearchCost.fromJSON(object.research_cost) : undefined,
|
||||||
? globalThis.Number(object.view_range)
|
|
||||||
: 0,
|
|
||||||
traverse_speed: isSet(object.traverseSpeed)
|
|
||||||
? globalThis.Number(object.traverseSpeed)
|
|
||||||
: isSet(object.traverse_speed)
|
|
||||||
? globalThis.Number(object.traverse_speed)
|
|
||||||
: 0,
|
|
||||||
research_cost: isSet(object.researchCost)
|
|
||||||
? ResearchCost.fromJSON(object.researchCost)
|
|
||||||
: isSet(object.research_cost)
|
|
||||||
? ResearchCost.fromJSON(object.research_cost)
|
|
||||||
: undefined,
|
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
||||||
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
||||||
guns: globalThis.Array.isArray(object?.guns)
|
guns: globalThis.Array.isArray(object?.guns) ? object.guns.map((e: any) => GunDefinition.fromJSON(e)) : [],
|
||||||
? object.guns.map((e: any) => GunDefinition.fromJSON(e))
|
|
||||||
: [],
|
|
||||||
unlocks: globalThis.Array.isArray(object?.unlocks) ? object.unlocks.map((e: any) => Unlock.fromJSON(e)) : [],
|
unlocks: globalThis.Array.isArray(object?.unlocks) ? object.unlocks.map((e: any) => Unlock.fromJSON(e)) : [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -2446,13 +2333,13 @@ export const TurretDefinition: MessageFns<TurretDefinition> = {
|
|||||||
obj.health = Math.round(message.health);
|
obj.health = Math.round(message.health);
|
||||||
}
|
}
|
||||||
if (message.view_range !== 0) {
|
if (message.view_range !== 0) {
|
||||||
obj.viewRange = Math.round(message.view_range);
|
obj.view_range = Math.round(message.view_range);
|
||||||
}
|
}
|
||||||
if (message.traverse_speed !== 0) {
|
if (message.traverse_speed !== 0) {
|
||||||
obj.traverseSpeed = message.traverse_speed;
|
obj.traverse_speed = message.traverse_speed;
|
||||||
}
|
}
|
||||||
if (message.research_cost !== undefined) {
|
if (message.research_cost !== undefined) {
|
||||||
obj.researchCost = ResearchCost.toJSON(message.research_cost);
|
obj.research_cost = ResearchCost.toJSON(message.research_cost);
|
||||||
}
|
}
|
||||||
if (message.name !== undefined) {
|
if (message.name !== undefined) {
|
||||||
obj.name = I18nString.toJSON(message.name);
|
obj.name = I18nString.toJSON(message.name);
|
||||||
@@ -2768,75 +2655,29 @@ export const GunDefinition: MessageFns<GunDefinition> = {
|
|||||||
return {
|
return {
|
||||||
gun_type: isSet(object.regular)
|
gun_type: isSet(object.regular)
|
||||||
? { $case: "regular", value: GunDefinitionRegular.fromJSON(object.regular) }
|
? { $case: "regular", value: GunDefinitionRegular.fromJSON(object.regular) }
|
||||||
: isSet(object.autoLoader)
|
|
||||||
? { $case: "auto_loader", value: GunDefinitionAutoLoader.fromJSON(object.autoLoader) }
|
|
||||||
: isSet(object.auto_loader)
|
: isSet(object.auto_loader)
|
||||||
? { $case: "auto_loader", value: GunDefinitionAutoLoader.fromJSON(object.auto_loader) }
|
? { $case: "auto_loader", value: GunDefinitionAutoLoader.fromJSON(object.auto_loader) }
|
||||||
: isSet(object.autoReloader)
|
|
||||||
? { $case: "auto_reloader", value: GunDefinitionAutoReloader.fromJSON(object.autoReloader) }
|
|
||||||
: isSet(object.auto_reloader)
|
: isSet(object.auto_reloader)
|
||||||
? { $case: "auto_reloader", value: GunDefinitionAutoReloader.fromJSON(object.auto_reloader) }
|
? { $case: "auto_reloader", value: GunDefinitionAutoReloader.fromJSON(object.auto_reloader) }
|
||||||
: undefined,
|
: undefined,
|
||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
rotation_speed: isSet(object.rotationSpeed)
|
rotation_speed: isSet(object.rotation_speed) ? globalThis.Number(object.rotation_speed) : 0,
|
||||||
? globalThis.Number(object.rotationSpeed)
|
research_cost: isSet(object.research_cost) ? ResearchCost.fromJSON(object.research_cost) : undefined,
|
||||||
: isSet(object.rotation_speed)
|
|
||||||
? globalThis.Number(object.rotation_speed)
|
|
||||||
: 0,
|
|
||||||
research_cost: isSet(object.researchCost)
|
|
||||||
? ResearchCost.fromJSON(object.researchCost)
|
|
||||||
: isSet(object.research_cost)
|
|
||||||
? ResearchCost.fromJSON(object.research_cost)
|
|
||||||
: undefined,
|
|
||||||
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
weight: isSet(object.weight) ? globalThis.Number(object.weight) : 0,
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
tier: isSet(object.tier) ? globalThis.Number(object.tier) : 0,
|
||||||
shells: globalThis.Array.isArray(object?.shells)
|
shells: globalThis.Array.isArray(object?.shells)
|
||||||
? object.shells.map((e: any) => ShellDefinition.fromJSON(e))
|
? object.shells.map((e: any) => ShellDefinition.fromJSON(e))
|
||||||
: [],
|
: [],
|
||||||
camouflage_loss: isSet(object.camouflageLoss)
|
camouflage_loss: isSet(object.camouflage_loss) ? globalThis.Number(object.camouflage_loss) : 0,
|
||||||
? globalThis.Number(object.camouflageLoss)
|
aim_time: isSet(object.aim_time) ? globalThis.Number(object.aim_time) : 0,
|
||||||
: isSet(object.camouflage_loss)
|
dispersion_base: isSet(object.dispersion_base) ? globalThis.Number(object.dispersion_base) : 0,
|
||||||
? globalThis.Number(object.camouflage_loss)
|
dispersion_traverse: isSet(object.dispersion_traverse) ? globalThis.Number(object.dispersion_traverse) : 0,
|
||||||
: 0,
|
dispersion_shot: isSet(object.dispersion_shot) ? globalThis.Number(object.dispersion_shot) : 0,
|
||||||
aim_time: isSet(object.aimTime)
|
dispersion_damaged: isSet(object.dispersion_damaged) ? globalThis.Number(object.dispersion_damaged) : 0,
|
||||||
? globalThis.Number(object.aimTime)
|
unlocks: globalThis.Array.isArray(object?.unlocks) ? object.unlocks.map((e: any) => Unlock.fromJSON(e)) : [],
|
||||||
: isSet(object.aim_time)
|
shell_capacity: isSet(object.shell_capacity) ? globalThis.Number(object.shell_capacity) : 0,
|
||||||
? globalThis.Number(object.aim_time)
|
assault_ranges: isSet(object.assault_ranges) ? AssaultRanges.fromJSON(object.assault_ranges) : undefined,
|
||||||
: 0,
|
|
||||||
dispersion_base: isSet(object.dispersionBase)
|
|
||||||
? globalThis.Number(object.dispersionBase)
|
|
||||||
: isSet(object.dispersion_base)
|
|
||||||
? globalThis.Number(object.dispersion_base)
|
|
||||||
: 0,
|
|
||||||
dispersion_traverse: isSet(object.dispersionTraverse)
|
|
||||||
? globalThis.Number(object.dispersionTraverse)
|
|
||||||
: isSet(object.dispersion_traverse)
|
|
||||||
? globalThis.Number(object.dispersion_traverse)
|
|
||||||
: 0,
|
|
||||||
dispersion_shot: isSet(object.dispersionShot)
|
|
||||||
? globalThis.Number(object.dispersionShot)
|
|
||||||
: isSet(object.dispersion_shot)
|
|
||||||
? globalThis.Number(object.dispersion_shot)
|
|
||||||
: 0,
|
|
||||||
dispersion_damaged: isSet(object.dispersionDamaged)
|
|
||||||
? globalThis.Number(object.dispersionDamaged)
|
|
||||||
: isSet(object.dispersion_damaged)
|
|
||||||
? globalThis.Number(object.dispersion_damaged)
|
|
||||||
: 0,
|
|
||||||
unlocks: globalThis.Array.isArray(object?.unlocks)
|
|
||||||
? object.unlocks.map((e: any) => Unlock.fromJSON(e))
|
|
||||||
: [],
|
|
||||||
shell_capacity: isSet(object.shellCapacity)
|
|
||||||
? globalThis.Number(object.shellCapacity)
|
|
||||||
: isSet(object.shell_capacity)
|
|
||||||
? globalThis.Number(object.shell_capacity)
|
|
||||||
: 0,
|
|
||||||
assault_ranges: isSet(object.assaultRanges)
|
|
||||||
? AssaultRanges.fromJSON(object.assaultRanges)
|
|
||||||
: isSet(object.assault_ranges)
|
|
||||||
? AssaultRanges.fromJSON(object.assault_ranges)
|
|
||||||
: undefined,
|
|
||||||
burst: isSet(object.burst) ? Burst.fromJSON(object.burst) : undefined,
|
burst: isSet(object.burst) ? Burst.fromJSON(object.burst) : undefined,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -2846,18 +2687,18 @@ export const GunDefinition: MessageFns<GunDefinition> = {
|
|||||||
if (message.gun_type?.$case === "regular") {
|
if (message.gun_type?.$case === "regular") {
|
||||||
obj.regular = GunDefinitionRegular.toJSON(message.gun_type.value);
|
obj.regular = GunDefinitionRegular.toJSON(message.gun_type.value);
|
||||||
} else if (message.gun_type?.$case === "auto_loader") {
|
} else if (message.gun_type?.$case === "auto_loader") {
|
||||||
obj.autoLoader = GunDefinitionAutoLoader.toJSON(message.gun_type.value);
|
obj.auto_loader = GunDefinitionAutoLoader.toJSON(message.gun_type.value);
|
||||||
} else if (message.gun_type?.$case === "auto_reloader") {
|
} else if (message.gun_type?.$case === "auto_reloader") {
|
||||||
obj.autoReloader = GunDefinitionAutoReloader.toJSON(message.gun_type.value);
|
obj.auto_reloader = GunDefinitionAutoReloader.toJSON(message.gun_type.value);
|
||||||
}
|
}
|
||||||
if (message.id !== 0) {
|
if (message.id !== 0) {
|
||||||
obj.id = Math.round(message.id);
|
obj.id = Math.round(message.id);
|
||||||
}
|
}
|
||||||
if (message.rotation_speed !== 0) {
|
if (message.rotation_speed !== 0) {
|
||||||
obj.rotationSpeed = message.rotation_speed;
|
obj.rotation_speed = message.rotation_speed;
|
||||||
}
|
}
|
||||||
if (message.research_cost !== undefined) {
|
if (message.research_cost !== undefined) {
|
||||||
obj.researchCost = ResearchCost.toJSON(message.research_cost);
|
obj.research_cost = ResearchCost.toJSON(message.research_cost);
|
||||||
}
|
}
|
||||||
if (message.weight !== 0) {
|
if (message.weight !== 0) {
|
||||||
obj.weight = Math.round(message.weight);
|
obj.weight = Math.round(message.weight);
|
||||||
@@ -2872,31 +2713,31 @@ export const GunDefinition: MessageFns<GunDefinition> = {
|
|||||||
obj.shells = message.shells.map((e) => ShellDefinition.toJSON(e));
|
obj.shells = message.shells.map((e) => ShellDefinition.toJSON(e));
|
||||||
}
|
}
|
||||||
if (message.camouflage_loss !== 0) {
|
if (message.camouflage_loss !== 0) {
|
||||||
obj.camouflageLoss = message.camouflage_loss;
|
obj.camouflage_loss = message.camouflage_loss;
|
||||||
}
|
}
|
||||||
if (message.aim_time !== 0) {
|
if (message.aim_time !== 0) {
|
||||||
obj.aimTime = message.aim_time;
|
obj.aim_time = message.aim_time;
|
||||||
}
|
}
|
||||||
if (message.dispersion_base !== 0) {
|
if (message.dispersion_base !== 0) {
|
||||||
obj.dispersionBase = message.dispersion_base;
|
obj.dispersion_base = message.dispersion_base;
|
||||||
}
|
}
|
||||||
if (message.dispersion_traverse !== 0) {
|
if (message.dispersion_traverse !== 0) {
|
||||||
obj.dispersionTraverse = message.dispersion_traverse;
|
obj.dispersion_traverse = message.dispersion_traverse;
|
||||||
}
|
}
|
||||||
if (message.dispersion_shot !== 0) {
|
if (message.dispersion_shot !== 0) {
|
||||||
obj.dispersionShot = message.dispersion_shot;
|
obj.dispersion_shot = message.dispersion_shot;
|
||||||
}
|
}
|
||||||
if (message.dispersion_damaged !== 0) {
|
if (message.dispersion_damaged !== 0) {
|
||||||
obj.dispersionDamaged = message.dispersion_damaged;
|
obj.dispersion_damaged = message.dispersion_damaged;
|
||||||
}
|
}
|
||||||
if (message.unlocks?.length) {
|
if (message.unlocks?.length) {
|
||||||
obj.unlocks = message.unlocks.map((e) => Unlock.toJSON(e));
|
obj.unlocks = message.unlocks.map((e) => Unlock.toJSON(e));
|
||||||
}
|
}
|
||||||
if (message.shell_capacity !== 0) {
|
if (message.shell_capacity !== 0) {
|
||||||
obj.shellCapacity = Math.round(message.shell_capacity);
|
obj.shell_capacity = Math.round(message.shell_capacity);
|
||||||
}
|
}
|
||||||
if (message.assault_ranges !== undefined) {
|
if (message.assault_ranges !== undefined) {
|
||||||
obj.assaultRanges = AssaultRanges.toJSON(message.assault_ranges);
|
obj.assault_ranges = AssaultRanges.toJSON(message.assault_ranges);
|
||||||
}
|
}
|
||||||
if (message.burst !== undefined) {
|
if (message.burst !== undefined) {
|
||||||
obj.burst = Burst.toJSON(message.burst);
|
obj.burst = Burst.toJSON(message.burst);
|
||||||
@@ -3080,34 +2921,22 @@ export const GunDefinitionAutoLoader: MessageFns<GunDefinitionAutoLoader> = {
|
|||||||
|
|
||||||
fromJSON(object: any): GunDefinitionAutoLoader {
|
fromJSON(object: any): GunDefinitionAutoLoader {
|
||||||
return {
|
return {
|
||||||
clip_reload: isSet(object.clipReload)
|
clip_reload: isSet(object.clip_reload) ? globalThis.Number(object.clip_reload) : 0,
|
||||||
? globalThis.Number(object.clipReload)
|
intra_clip: isSet(object.intra_clip) ? globalThis.Number(object.intra_clip) : 0,
|
||||||
: isSet(object.clip_reload)
|
shell_count: isSet(object.shell_count) ? globalThis.Number(object.shell_count) : 0,
|
||||||
? globalThis.Number(object.clip_reload)
|
|
||||||
: 0,
|
|
||||||
intra_clip: isSet(object.intraClip)
|
|
||||||
? globalThis.Number(object.intraClip)
|
|
||||||
: isSet(object.intra_clip)
|
|
||||||
? globalThis.Number(object.intra_clip)
|
|
||||||
: 0,
|
|
||||||
shell_count: isSet(object.shellCount)
|
|
||||||
? globalThis.Number(object.shellCount)
|
|
||||||
: isSet(object.shell_count)
|
|
||||||
? globalThis.Number(object.shell_count)
|
|
||||||
: 0,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
toJSON(message: GunDefinitionAutoLoader): unknown {
|
toJSON(message: GunDefinitionAutoLoader): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.clip_reload !== 0) {
|
if (message.clip_reload !== 0) {
|
||||||
obj.clipReload = message.clip_reload;
|
obj.clip_reload = message.clip_reload;
|
||||||
}
|
}
|
||||||
if (message.intra_clip !== 0) {
|
if (message.intra_clip !== 0) {
|
||||||
obj.intraClip = message.intra_clip;
|
obj.intra_clip = message.intra_clip;
|
||||||
}
|
}
|
||||||
if (message.shell_count !== 0) {
|
if (message.shell_count !== 0) {
|
||||||
obj.shellCount = message.shell_count;
|
obj.shell_count = message.shell_count;
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
@@ -3270,34 +3099,24 @@ export const GunDefinitionAutoReloader: MessageFns<GunDefinitionAutoReloader> =
|
|||||||
|
|
||||||
fromJSON(object: any): GunDefinitionAutoReloader {
|
fromJSON(object: any): GunDefinitionAutoReloader {
|
||||||
return {
|
return {
|
||||||
shell_reloads: globalThis.Array.isArray(object?.shellReloads)
|
shell_reloads: globalThis.Array.isArray(object?.shell_reloads)
|
||||||
? object.shellReloads.map((e: any) => globalThis.Number(e))
|
|
||||||
: globalThis.Array.isArray(object?.shell_reloads)
|
|
||||||
? object.shell_reloads.map((e: any) => globalThis.Number(e))
|
? object.shell_reloads.map((e: any) => globalThis.Number(e))
|
||||||
: [],
|
: [],
|
||||||
intra_clip: isSet(object.intraClip)
|
intra_clip: isSet(object.intra_clip) ? globalThis.Number(object.intra_clip) : 0,
|
||||||
? globalThis.Number(object.intraClip)
|
shell_count: isSet(object.shell_count) ? globalThis.Number(object.shell_count) : 0,
|
||||||
: isSet(object.intra_clip)
|
|
||||||
? globalThis.Number(object.intra_clip)
|
|
||||||
: 0,
|
|
||||||
shell_count: isSet(object.shellCount)
|
|
||||||
? globalThis.Number(object.shellCount)
|
|
||||||
: isSet(object.shell_count)
|
|
||||||
? globalThis.Number(object.shell_count)
|
|
||||||
: 0,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
toJSON(message: GunDefinitionAutoReloader): unknown {
|
toJSON(message: GunDefinitionAutoReloader): unknown {
|
||||||
const obj: any = {};
|
const obj: any = {};
|
||||||
if (message.shell_reloads?.length) {
|
if (message.shell_reloads?.length) {
|
||||||
obj.shellReloads = message.shell_reloads;
|
obj.shell_reloads = message.shell_reloads;
|
||||||
}
|
}
|
||||||
if (message.intra_clip !== 0) {
|
if (message.intra_clip !== 0) {
|
||||||
obj.intraClip = message.intra_clip;
|
obj.intra_clip = message.intra_clip;
|
||||||
}
|
}
|
||||||
if (message.shell_count !== 0) {
|
if (message.shell_count !== 0) {
|
||||||
obj.shellCount = message.shell_count;
|
obj.shell_count = message.shell_count;
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
@@ -3663,27 +3482,15 @@ export const ShellDefinition: MessageFns<ShellDefinition> = {
|
|||||||
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
id: isSet(object.id) ? globalThis.Number(object.id) : 0,
|
||||||
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
name: isSet(object.name) ? I18nString.fromJSON(object.name) : undefined,
|
||||||
velocity: isSet(object.velocity) ? globalThis.Number(object.velocity) : 0,
|
velocity: isSet(object.velocity) ? globalThis.Number(object.velocity) : 0,
|
||||||
armor_damage: isSet(object.armorDamage)
|
armor_damage: isSet(object.armor_damage) ? globalThis.Number(object.armor_damage) : 0,
|
||||||
? globalThis.Number(object.armorDamage)
|
module_damage: isSet(object.module_damage) ? globalThis.Number(object.module_damage) : 0,
|
||||||
: isSet(object.armor_damage)
|
|
||||||
? globalThis.Number(object.armor_damage)
|
|
||||||
: 0,
|
|
||||||
module_damage: isSet(object.moduleDamage)
|
|
||||||
? globalThis.Number(object.moduleDamage)
|
|
||||||
: isSet(object.module_damage)
|
|
||||||
? globalThis.Number(object.module_damage)
|
|
||||||
: 0,
|
|
||||||
caliber: isSet(object.caliber) ? globalThis.Number(object.caliber) : 0,
|
caliber: isSet(object.caliber) ? globalThis.Number(object.caliber) : 0,
|
||||||
icon: isSet(object.icon) ? globalThis.String(object.icon) : "",
|
icon: isSet(object.icon) ? globalThis.String(object.icon) : "",
|
||||||
penetration: isSet(object.penetration) ? ShellPenetration.fromJSON(object.penetration) : undefined,
|
penetration: isSet(object.penetration) ? ShellPenetration.fromJSON(object.penetration) : undefined,
|
||||||
type: isSet(object.type) ? shellTypeFromJSON(object.type) : 0,
|
type: isSet(object.type) ? shellTypeFromJSON(object.type) : 0,
|
||||||
normalization: isSet(object.normalization) ? globalThis.Number(object.normalization) : 0,
|
normalization: isSet(object.normalization) ? globalThis.Number(object.normalization) : 0,
|
||||||
ricochet: isSet(object.ricochet) ? globalThis.Number(object.ricochet) : 0,
|
ricochet: isSet(object.ricochet) ? globalThis.Number(object.ricochet) : 0,
|
||||||
explosion_radius: isSet(object.explosionRadius)
|
explosion_radius: isSet(object.explosion_radius) ? globalThis.Number(object.explosion_radius) : 0,
|
||||||
? globalThis.Number(object.explosionRadius)
|
|
||||||
: isSet(object.explosion_radius)
|
|
||||||
? globalThis.Number(object.explosion_radius)
|
|
||||||
: 0,
|
|
||||||
range: isSet(object.range) ? globalThis.Number(object.range) : 0,
|
range: isSet(object.range) ? globalThis.Number(object.range) : 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -3700,10 +3507,10 @@ export const ShellDefinition: MessageFns<ShellDefinition> = {
|
|||||||
obj.velocity = Math.round(message.velocity);
|
obj.velocity = Math.round(message.velocity);
|
||||||
}
|
}
|
||||||
if (message.armor_damage !== 0) {
|
if (message.armor_damage !== 0) {
|
||||||
obj.armorDamage = Math.round(message.armor_damage);
|
obj.armor_damage = Math.round(message.armor_damage);
|
||||||
}
|
}
|
||||||
if (message.module_damage !== 0) {
|
if (message.module_damage !== 0) {
|
||||||
obj.moduleDamage = Math.round(message.module_damage);
|
obj.module_damage = Math.round(message.module_damage);
|
||||||
}
|
}
|
||||||
if (message.caliber !== 0) {
|
if (message.caliber !== 0) {
|
||||||
obj.caliber = message.caliber;
|
obj.caliber = message.caliber;
|
||||||
@@ -3724,7 +3531,7 @@ export const ShellDefinition: MessageFns<ShellDefinition> = {
|
|||||||
obj.ricochet = message.ricochet;
|
obj.ricochet = message.ricochet;
|
||||||
}
|
}
|
||||||
if (message.explosion_radius !== undefined && message.explosion_radius !== 0) {
|
if (message.explosion_radius !== undefined && message.explosion_radius !== 0) {
|
||||||
obj.explosionRadius = message.explosion_radius;
|
obj.explosion_radius = message.explosion_radius;
|
||||||
}
|
}
|
||||||
if (message.range !== 0) {
|
if (message.range !== 0) {
|
||||||
obj.range = Math.round(message.range);
|
obj.range = Math.round(message.range);
|
||||||
|
|||||||
@@ -573,8 +573,7 @@
|
|||||||
|
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Modules",
|
"title": "Modules",
|
||||||
@@ -631,6 +630,8 @@
|
|||||||
"shellRicochet": "Ricochet",
|
"shellRicochet": "Ricochet",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "Effective at 60s",
|
"dpmEffective": "Effective at 60s",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) \u2014 at least 10 seconds between shots.",
|
||||||
"shells": "Shells",
|
"shells": "Shells",
|
||||||
"mostOptimalShellIndex": "Most optimal shell",
|
"mostOptimalShellIndex": "Most optimal shell",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -682,8 +683,8 @@
|
|||||||
"viewRange": "View range",
|
"viewRange": "View range",
|
||||||
"camouflageStill": "Camouflage still",
|
"camouflageStill": "Camouflage still",
|
||||||
"camouflageMoving": "Moving",
|
"camouflageMoving": "Moving",
|
||||||
"camouflageShootingStill": "Still",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "Moving",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "Caught on fire",
|
"camouflageCaughtOnFire": "Caught on fire",
|
||||||
"width": "Width",
|
"width": "Width",
|
||||||
"height": "Height",
|
"height": "Height",
|
||||||
|
|||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Módulos",
|
"title": "Módulos",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "Rebote",
|
"shellRicochet": "Rebote",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "Effective at 60s",
|
"dpmEffective": "Effective at 60s",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "Proyectiles",
|
"shells": "Proyectiles",
|
||||||
"mostOptimalShellIndex": "Proyectil más óptimo",
|
"mostOptimalShellIndex": "Proyectil más óptimo",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -623,8 +624,8 @@
|
|||||||
"viewRange": "Rango de visión",
|
"viewRange": "Rango de visión",
|
||||||
"camouflageStill": "Quieto",
|
"camouflageStill": "Quieto",
|
||||||
"camouflageMoving": "En movimiento",
|
"camouflageMoving": "En movimiento",
|
||||||
"camouflageShootingStill": "Quieto",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "En movimiento",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "Atrapado en fuego",
|
"camouflageCaughtOnFire": "Atrapado en fuego",
|
||||||
"width": "Ancho",
|
"width": "Ancho",
|
||||||
"height": "Altura",
|
"height": "Altura",
|
||||||
|
|||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "Configuration",
|
"title": "Configuration",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Modules",
|
"title": "Modules",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "Ricochet",
|
"shellRicochet": "Ricochet",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "Effective at 60s",
|
"dpmEffective": "Effective at 60s",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "Shells",
|
"shells": "Shells",
|
||||||
"mostOptimalShellIndex": "Most optimal shell",
|
"mostOptimalShellIndex": "Most optimal shell",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -623,8 +624,8 @@
|
|||||||
"viewRange": "View range",
|
"viewRange": "View range",
|
||||||
"camouflageStill": "Still",
|
"camouflageStill": "Still",
|
||||||
"camouflageMoving": "Moving",
|
"camouflageMoving": "Moving",
|
||||||
"camouflageShootingStill": "Still",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "Moving",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "Caught on fire",
|
"camouflageCaughtOnFire": "Caught on fire",
|
||||||
"width": "Width",
|
"width": "Width",
|
||||||
"height": "Height",
|
"height": "Height",
|
||||||
|
|||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "構成",
|
"title": "構成",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "モジュール",
|
"title": "モジュール",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "跳弾角度",
|
"shellRicochet": "跳弾角度",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "60秒での有効値",
|
"dpmEffective": "60秒での有効値",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "砲弾",
|
"shells": "砲弾",
|
||||||
"mostOptimalShellIndex": "最適な弾数",
|
"mostOptimalShellIndex": "最適な弾数",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -623,8 +624,8 @@
|
|||||||
"viewRange": "視認範囲",
|
"viewRange": "視認範囲",
|
||||||
"camouflageStill": "静止時",
|
"camouflageStill": "静止時",
|
||||||
"camouflageMoving": "移動時",
|
"camouflageMoving": "移動時",
|
||||||
"camouflageShootingStill": "静止時",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "移動時",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "Caught on fire",
|
"camouflageCaughtOnFire": "Caught on fire",
|
||||||
"width": "全幅",
|
"width": "全幅",
|
||||||
"height": "全高",
|
"height": "全高",
|
||||||
|
|||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "Configuration",
|
"title": "Configuration",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Modules",
|
"title": "Modules",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "Ricochet",
|
"shellRicochet": "Ricochet",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "Effective at 60s",
|
"dpmEffective": "Effective at 60s",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "Shells",
|
"shells": "Shells",
|
||||||
"mostOptimalShellIndex": "Most optimal shell",
|
"mostOptimalShellIndex": "Most optimal shell",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -623,8 +624,8 @@
|
|||||||
"viewRange": "View range",
|
"viewRange": "View range",
|
||||||
"camouflageStill": "Still",
|
"camouflageStill": "Still",
|
||||||
"camouflageMoving": "Moving",
|
"camouflageMoving": "Moving",
|
||||||
"camouflageShootingStill": "Still",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "Moving",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "Caught on fire",
|
"camouflageCaughtOnFire": "Caught on fire",
|
||||||
"width": "Width",
|
"width": "Width",
|
||||||
"height": "Height",
|
"height": "Height",
|
||||||
|
|||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "Configuração",
|
"title": "Configuração",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Módulos",
|
"title": "Módulos",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "Ricochete",
|
"shellRicochet": "Ricochete",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "Efetivo aos 60s",
|
"dpmEffective": "Efetivo aos 60s",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "Projéteis",
|
"shells": "Projéteis",
|
||||||
"mostOptimalShellIndex": "Projétil mais ideal",
|
"mostOptimalShellIndex": "Projétil mais ideal",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -623,8 +624,8 @@
|
|||||||
"viewRange": "Alcance de visão",
|
"viewRange": "Alcance de visão",
|
||||||
"camouflageStill": "Parado",
|
"camouflageStill": "Parado",
|
||||||
"camouflageMoving": "Em movimento",
|
"camouflageMoving": "Em movimento",
|
||||||
"camouflageShootingStill": "Parado",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "Em movimento",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "Preso em chamas",
|
"camouflageCaughtOnFire": "Preso em chamas",
|
||||||
"width": "Largura",
|
"width": "Largura",
|
||||||
"height": "Altura",
|
"height": "Altura",
|
||||||
|
|||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "Конфигурация",
|
"title": "Конфигурация",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Уравнение",
|
"title": "Уравнение",
|
||||||
"equalize": "Уравнять",
|
"equalize": "Уравнять"
|
||||||
"beta": "Бета"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Модули",
|
"title": "Модули",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "Рикошет",
|
"shellRicochet": "Рикошет",
|
||||||
"dpm": "ДПМ",
|
"dpm": "ДПМ",
|
||||||
"dpmEffective": "Эффективность за 60с",
|
"dpmEffective": "Эффективность за 60с",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "Снарядов в барабане",
|
"shells": "Снарядов в барабане",
|
||||||
"mostOptimalShellIndex": "Самый эффективный снаряд",
|
"mostOptimalShellIndex": "Самый эффективный снаряд",
|
||||||
"shellReloads": "Перезарядка",
|
"shellReloads": "Перезарядка",
|
||||||
@@ -623,8 +624,8 @@
|
|||||||
"viewRange": "Радиус обзора",
|
"viewRange": "Радиус обзора",
|
||||||
"camouflageStill": "Когда неподвижен",
|
"camouflageStill": "Когда неподвижен",
|
||||||
"camouflageMoving": "В движении",
|
"camouflageMoving": "В движении",
|
||||||
"camouflageShootingStill": "После выстрела, если неподвижен",
|
"camouflageShootingStill": "Shooting while still",
|
||||||
"camouflageShootingMoving": "После выстрела в движении",
|
"camouflageShootingMoving": "Shooting while moving",
|
||||||
"camouflageCaughtOnFire": "При пожаре",
|
"camouflageCaughtOnFire": "При пожаре",
|
||||||
"width": "Ширина",
|
"width": "Ширина",
|
||||||
"height": "Высота",
|
"height": "Высота",
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
"hp": "{value}од",
|
"hp": "{value}од",
|
||||||
"x": "x{value}",
|
"x": "x{value}",
|
||||||
"percentage": "{value}%",
|
"percentage": "{value}%",
|
||||||
"deg_s": "{value}град/c",
|
"deg_s": "{value}°/c",
|
||||||
"plus": "+{value}"
|
"plus": "+{value}"
|
||||||
},
|
},
|
||||||
"gun_types": {
|
"gun_types": {
|
||||||
@@ -37,8 +37,8 @@
|
|||||||
"d_1": "Вчора"
|
"d_1": "Вчора"
|
||||||
},
|
},
|
||||||
"branches": {
|
"branches": {
|
||||||
"beta": "Beta",
|
"beta": "Бета",
|
||||||
"development": "Development",
|
"development": "Розробка",
|
||||||
"opentest": "Відкритий тест",
|
"opentest": "Відкритий тест",
|
||||||
"preview": "Preview",
|
"preview": "Preview",
|
||||||
"production": "Production"
|
"production": "Production"
|
||||||
@@ -340,8 +340,8 @@
|
|||||||
},
|
},
|
||||||
"mixer": {
|
"mixer": {
|
||||||
"name": "Mixer",
|
"name": "Mixer",
|
||||||
"button": "Mix and match",
|
"button": "Змішувати та поєднувати",
|
||||||
"description": "Mix tank modules",
|
"description": "Змішані танкові модулі",
|
||||||
"seo_description": "Mix and match hulls, turrets, and guns of tanks in World of Tanks Blitz",
|
"seo_description": "Mix and match hulls, turrets, and guns of tanks in World of Tanks Blitz",
|
||||||
"screenshot": "Знімок екрану",
|
"screenshot": "Знімок екрану",
|
||||||
"randomize": "Рандомізувати"
|
"randomize": "Рандомізувати"
|
||||||
@@ -501,11 +501,11 @@
|
|||||||
"tech_tree": {
|
"tech_tree": {
|
||||||
"title": "Звичайний",
|
"title": "Звичайний",
|
||||||
"battle": "1 бій",
|
"battle": "1 бій",
|
||||||
"battles": "{count} battles",
|
"battles": "{count} битви",
|
||||||
"route": "Route {index} of {count}"
|
"route": "Route {index} of {count}"
|
||||||
},
|
},
|
||||||
"game_modes": {
|
"game_modes": {
|
||||||
"title": "Game mode abilities"
|
"title": "Здібності ігрового режиму"
|
||||||
},
|
},
|
||||||
"review": {
|
"review": {
|
||||||
"title": "Review videos",
|
"title": "Review videos",
|
||||||
@@ -515,8 +515,7 @@
|
|||||||
"title": "Configuration",
|
"title": "Configuration",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "Equalizer",
|
||||||
"equalize": "Equalize",
|
"equalize": "Equalize"
|
||||||
"beta": "Beta"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "Модулі",
|
"title": "Модулі",
|
||||||
@@ -572,6 +571,8 @@
|
|||||||
"shellRicochet": "Рикошет",
|
"shellRicochet": "Рикошет",
|
||||||
"dpm": "DPM",
|
"dpm": "DPM",
|
||||||
"dpmEffective": "Effective at 60s",
|
"dpmEffective": "Effective at 60s",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "Снаряди",
|
"shells": "Снаряди",
|
||||||
"mostOptimalShellIndex": "Most optimal shell",
|
"mostOptimalShellIndex": "Most optimal shell",
|
||||||
"shellReloads": "Reloads",
|
"shellReloads": "Reloads",
|
||||||
@@ -626,7 +627,7 @@
|
|||||||
"camouflageShootingStill": "Нерухомо",
|
"camouflageShootingStill": "Нерухомо",
|
||||||
"camouflageShootingMoving": "У русі",
|
"camouflageShootingMoving": "У русі",
|
||||||
"camouflageCaughtOnFire": "Caught on fire",
|
"camouflageCaughtOnFire": "Caught on fire",
|
||||||
"width": "Width",
|
"width": "Ширина",
|
||||||
"height": "Height",
|
"height": "Height",
|
||||||
"length": "Length",
|
"length": "Length",
|
||||||
"volume": "Volume",
|
"volume": "Volume",
|
||||||
@@ -740,7 +741,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gallery": {
|
"gallery": {
|
||||||
"name": "Gallery",
|
"name": "Галерея",
|
||||||
"button": "Browse all",
|
"button": "Browse all",
|
||||||
"description": "Blitz player avatars",
|
"description": "Blitz player avatars",
|
||||||
"seo_description": "Усі World of Tanks Blitz аватари гравців",
|
"seo_description": "Усі World of Tanks Blitz аватари гравців",
|
||||||
@@ -843,7 +844,7 @@
|
|||||||
"breakdown": {
|
"breakdown": {
|
||||||
"name": "Breakdown",
|
"name": "Breakdown",
|
||||||
"options": {
|
"options": {
|
||||||
"width": "Width",
|
"width": "Ширина",
|
||||||
"height": "Height",
|
"height": "Height",
|
||||||
"showTotal": "Show total",
|
"showTotal": "Show total",
|
||||||
"listGap": "List gap",
|
"listGap": "List gap",
|
||||||
|
|||||||
+150
-149
@@ -7,13 +7,13 @@
|
|||||||
"common": {
|
"common": {
|
||||||
"name": "BlitzKit",
|
"name": "BlitzKit",
|
||||||
"units": {
|
"units": {
|
||||||
"m": "{value} 公尺",
|
"m": "{value}m",
|
||||||
"mm": "{value} 毫米",
|
"mm": "{value}mm",
|
||||||
"deg": "{value} 度°",
|
"deg": "{value} °",
|
||||||
"hp": "{value} 生命值",
|
"hp": "{value}血量",
|
||||||
"x": "x{value}",
|
"x": "x{value}",
|
||||||
"percentage": "{value}%",
|
"percentage": "{value}%",
|
||||||
"deg_s": "{value}度每秒",
|
"deg_s": "{value}°/s",
|
||||||
"plus": "+{value}"
|
"plus": "+{value}"
|
||||||
},
|
},
|
||||||
"gun_types": {
|
"gun_types": {
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"shells": {
|
"shells": {
|
||||||
"ap": "穿甲弹",
|
"ap": "穿甲弹",
|
||||||
"ap_cr": "硬式复合穿甲弹",
|
"ap_cr": "硬芯穿甲弹",
|
||||||
"hc": "破甲弹",
|
"hc": "破甲弹",
|
||||||
"he": "高爆弹"
|
"he": "高爆弹"
|
||||||
},
|
},
|
||||||
@@ -38,10 +38,10 @@
|
|||||||
},
|
},
|
||||||
"branches": {
|
"branches": {
|
||||||
"beta": "测试版",
|
"beta": "测试版",
|
||||||
"development": "Development",
|
"development": "开发分支",
|
||||||
"opentest": "开放测试",
|
"opentest": "公开测试",
|
||||||
"preview": "Preview",
|
"preview": "预览分支",
|
||||||
"production": "Production"
|
"production": "生产环境"
|
||||||
},
|
},
|
||||||
"locales": {
|
"locales": {
|
||||||
"en": "英语",
|
"en": "英语",
|
||||||
@@ -61,23 +61,23 @@
|
|||||||
"3": "平均",
|
"3": "平均",
|
||||||
"4": "高于平均",
|
"4": "高于平均",
|
||||||
"5": "好",
|
"5": "好",
|
||||||
"6": "好",
|
"6": "非常好",
|
||||||
"7": "很好",
|
"7": "很好",
|
||||||
"8": "非常好",
|
"8": "强势",
|
||||||
"9": "极品"
|
"9": "超强势"
|
||||||
},
|
},
|
||||||
"bkni_percentile": {
|
"bkni_percentile": {
|
||||||
"0": "垃圾",
|
"0": "垃圾",
|
||||||
"1": "非常差",
|
"1": "非常差",
|
||||||
"2": "很差",
|
"2": "很差",
|
||||||
"3": "差",
|
"3": "差",
|
||||||
"4": "低于平均",
|
"4": "较差",
|
||||||
"5": "平均",
|
"5": "平均",
|
||||||
"6": "较好",
|
"6": "较好",
|
||||||
"7": "好",
|
"7": "好",
|
||||||
"8": "很好",
|
"8": "很好",
|
||||||
"9": "非常好",
|
"9": "强势",
|
||||||
"10": "极品"
|
"10": "超强势"
|
||||||
},
|
},
|
||||||
"nations": {
|
"nations": {
|
||||||
"ussr": "苏联",
|
"ussr": "苏联",
|
||||||
@@ -87,8 +87,8 @@
|
|||||||
"uk": "英国",
|
"uk": "英国",
|
||||||
"france": "法国",
|
"france": "法国",
|
||||||
"japan": "日本",
|
"japan": "日本",
|
||||||
"european": "欧盟 (E系)",
|
"european": "泛欧",
|
||||||
"other": "X系"
|
"other": "混合系"
|
||||||
},
|
},
|
||||||
"nations_adjectives": {
|
"nations_adjectives": {
|
||||||
"ussr": "苏联",
|
"ussr": "苏联",
|
||||||
@@ -98,14 +98,14 @@
|
|||||||
"uk": "英国",
|
"uk": "英国",
|
||||||
"france": "法国",
|
"france": "法国",
|
||||||
"japan": "日本",
|
"japan": "日本",
|
||||||
"european": "欧盟 (E系)",
|
"european": "泛欧",
|
||||||
"other": "X系"
|
"other": "混合系"
|
||||||
},
|
},
|
||||||
"tank_class_short": {
|
"tank_class_short": {
|
||||||
"-1": "未知",
|
"-1": "未知",
|
||||||
"0": "轻型坦克",
|
"0": "轻型坦克",
|
||||||
"1": "中型坦克",
|
"1": "中型坦克",
|
||||||
"2": "重型战车",
|
"2": "重型坦克",
|
||||||
"3": "坦克歼击车"
|
"3": "坦克歼击车"
|
||||||
},
|
},
|
||||||
"tank_class_short_plural_lowercase": {
|
"tank_class_short_plural_lowercase": {
|
||||||
@@ -129,14 +129,14 @@
|
|||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"com": "北美",
|
"com": "北美服务器",
|
||||||
"eu": "欧洲",
|
"eu": "欧洲服务器",
|
||||||
"asia": "亚太地区"
|
"asia": "亚太服务器"
|
||||||
},
|
},
|
||||||
"short": {
|
"short": {
|
||||||
"com": "北美",
|
"com": "美服",
|
||||||
"eu": "欧洲",
|
"eu": "欧洲",
|
||||||
"asia": "亚太地区"
|
"asia": "亚服"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"leagues": {
|
"leagues": {
|
||||||
@@ -155,7 +155,7 @@
|
|||||||
"normalized_losses": "战败率",
|
"normalized_losses": "战败率",
|
||||||
"normalized_misses": "未命中数",
|
"normalized_misses": "未命中数",
|
||||||
"normalized_shots": "开火次数",
|
"normalized_shots": "开火次数",
|
||||||
"normalized_spotted": "侦查次数",
|
"normalized_spotted": "侦查数",
|
||||||
"normalized_survived_battles": "存活率",
|
"normalized_survived_battles": "存活率",
|
||||||
"normalized_win_and_survived": "胜利并幸存的概率",
|
"normalized_win_and_survived": "胜利并幸存的概率",
|
||||||
"normalized_wins": "胜率",
|
"normalized_wins": "胜率",
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
"cumulative_shots": "总射击数",
|
"cumulative_shots": "总射击数",
|
||||||
"cumulative_spotted": "总侦查敌人数",
|
"cumulative_spotted": "总侦查敌人数",
|
||||||
"cumulative_survived_battles": "存活场次",
|
"cumulative_survived_battles": "存活场次",
|
||||||
"cumulative_win_and_survived": "胜利与存活场次",
|
"cumulative_win_and_survived": "胜利并存活场次",
|
||||||
"cumulative_wins": "胜利",
|
"cumulative_wins": "胜利",
|
||||||
"cumulative_xp": "总经验",
|
"cumulative_xp": "总经验",
|
||||||
"cumulative_wn8": "WN8",
|
"cumulative_wn8": "WN8",
|
||||||
@@ -203,27 +203,27 @@
|
|||||||
"searching": "搜索中..."
|
"searching": "搜索中..."
|
||||||
},
|
},
|
||||||
"copy_button": {
|
"copy_button": {
|
||||||
"copied": "已拷贝!"
|
"copied": "已复制!"
|
||||||
},
|
},
|
||||||
"tank_search": {
|
"tank_search": {
|
||||||
"select_dialog_title": "搜索坦克",
|
"select_dialog_title": "查找坦克",
|
||||||
"swap_dialog_title": "交换坦克",
|
"swap_dialog_title": "交换坦克",
|
||||||
"clear_filters": "清除筛选",
|
"clear_filters": "清空筛选器",
|
||||||
"login": "登录以使用它",
|
"login": "请先登录",
|
||||||
"search_bar_hint": "搜寻战车……",
|
"search_bar_hint": "查找坦克……",
|
||||||
"recent": "最近查看的",
|
"recent": "最近查过",
|
||||||
"select_all": "全选",
|
"select_all": "全选",
|
||||||
"count_singular": "1 辆坦克",
|
"count_singular": "1 辆坦克",
|
||||||
"count_plural": "{count} 辆坦克",
|
"count_plural": "{count} 辆坦克",
|
||||||
"sorting_by": "按 {name} 排序",
|
"sorting_by": "按 {name} 排序",
|
||||||
"clear": "清除",
|
"clear": "清空",
|
||||||
"tier": "{tier} 阶",
|
"tier": "{tier} 级",
|
||||||
"passive": "{name} (被动)",
|
"passive": "{name} (被动)",
|
||||||
"active": "{name} (主动)",
|
"active": "{name} (主动)",
|
||||||
"no_tanks_found": {
|
"no_tanks_found": {
|
||||||
"body": "未找到坦克。",
|
"body": "未找到坦克。",
|
||||||
"search_again": "请尝试重新搜索。",
|
"search_again": "请尝试重新搜索。",
|
||||||
"clear_filters": "请尝试清除筛选。"
|
"clear_filters": "请尝试清空筛选器。"
|
||||||
},
|
},
|
||||||
"sort": {
|
"sort": {
|
||||||
"meta.none": "无",
|
"meta.none": "无",
|
||||||
@@ -231,30 +231,30 @@
|
|||||||
"survivability.viewRange": "侦察范围",
|
"survivability.viewRange": "侦察范围",
|
||||||
"survivability.camouflageStill": "静止中隐蔽值",
|
"survivability.camouflageStill": "静止中隐蔽值",
|
||||||
"survivability.camouflageMoving": "移动中隐蔽值",
|
"survivability.camouflageMoving": "移动中隐蔽值",
|
||||||
"survivability.camouflageShooting": "射击隐蔽值",
|
"survivability.camouflageShooting": "射击隐蔽",
|
||||||
"survivability.volume": "体积",
|
"survivability.volume": "体积",
|
||||||
"survivability.length": "长度",
|
"survivability.length": "长度",
|
||||||
"fire.dpm": "标准炮弹 每分钟伤害血量",
|
"fire.dpm": "银币弹 每分钟伤害",
|
||||||
"fire.dpmPremium": "金币炮弹 每分钟伤害值",
|
"fire.dpmPremium": "金币弹 每分钟伤害",
|
||||||
"fire.reload": "装填时间",
|
"fire.reload": "装填时间",
|
||||||
"fire.caliber": "口径",
|
"fire.caliber": "口径",
|
||||||
"fire.standardPenetration": "标准炮弹穿透力",
|
"fire.standardPenetration": "银币弹穿深",
|
||||||
"fire.premiumPenetration": "金币炮弹穿透力",
|
"fire.premiumPenetration": "金币弹穿深",
|
||||||
"fire.tertiaryPenetration": "第三种炮弹穿透力",
|
"fire.tertiaryPenetration": "高爆弹穿深",
|
||||||
"fire.damage": "炮弹伤害值",
|
"fire.damage": "均伤",
|
||||||
"fire.moduleDamage": "模组伤害值",
|
"fire.moduleDamage": "模组伤害值",
|
||||||
"fire.shellVelocity": "炮弹飞行速度",
|
"fire.shellVelocity": "弹速",
|
||||||
"fire.shellRange": "最大射程",
|
"fire.shellRange": "最大射程",
|
||||||
"fire.shellCapacity": "携弹量",
|
"fire.shellCapacity": "载弹量",
|
||||||
"fire.aimTime": "瞄准时间",
|
"fire.aimTime": "瞄准时间",
|
||||||
"fire.dispersionStill": "一百米处扩散度",
|
"fire.dispersionStill": "百米精度",
|
||||||
"fire.dispersionMoving": "移动时扩散度",
|
"fire.dispersionMoving": "移动扩圈",
|
||||||
"fire.gunDepression": "俯角",
|
"fire.gunDepression": "俯角",
|
||||||
"fire.gunElevation": "仰角",
|
"fire.gunElevation": "仰角",
|
||||||
"maneuverability.forwardsSpeed": "最高前进速度",
|
"maneuverability.forwardsSpeed": "前进极速",
|
||||||
"maneuverability.backwardsSpeed": "最高后退速度",
|
"maneuverability.backwardsSpeed": "后退极速",
|
||||||
"maneuverability.power": "引擎功率",
|
"maneuverability.power": "引擎功率",
|
||||||
"maneuverability.powerToWeight": "功重比",
|
"maneuverability.powerToWeight": "推重比",
|
||||||
"maneuverability.weight": "重量",
|
"maneuverability.weight": "重量",
|
||||||
"maneuverability.traverseSpeed": "转速"
|
"maneuverability.traverseSpeed": "转速"
|
||||||
},
|
},
|
||||||
@@ -266,10 +266,10 @@
|
|||||||
"label": "排序依据",
|
"label": "排序依据",
|
||||||
"fire": "开火",
|
"fire": "开火",
|
||||||
"maneuverability": "机动性",
|
"maneuverability": "机动性",
|
||||||
"survivability": "生存能力"
|
"survivability": "生存性"
|
||||||
},
|
},
|
||||||
"direction": {
|
"direction": {
|
||||||
"label": "排序算法",
|
"label": "排序方式",
|
||||||
"ascending": "升序",
|
"ascending": "升序",
|
||||||
"descending": "倒序"
|
"descending": "倒序"
|
||||||
}
|
}
|
||||||
@@ -301,8 +301,8 @@
|
|||||||
},
|
},
|
||||||
"docs": {
|
"docs": {
|
||||||
"patches": {
|
"patches": {
|
||||||
"name": "BlitzKit 变更日志",
|
"name": "BlitzKit 更新日志",
|
||||||
"seo_description": "BlitzKit Discord 机器人和网站的变更日志"
|
"seo_description": "BlitzKit Discord 机器人和网站的更新日志"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tools": {
|
"tools": {
|
||||||
@@ -339,44 +339,44 @@
|
|||||||
"pool_size": "{count} 辆可生成的坦克"
|
"pool_size": "{count} 辆可生成的坦克"
|
||||||
},
|
},
|
||||||
"mixer": {
|
"mixer": {
|
||||||
"name": "组装",
|
"name": "拼装器",
|
||||||
"button": "混合搭配",
|
"button": "混合搭配",
|
||||||
"description": "混搭不同坦克间的模块",
|
"description": "混搭不同坦克间的模块",
|
||||||
"seo_description": "《坦克世界:闪击战》的车体, 炮塔, 主炮混合搭配",
|
"seo_description": "混搭WoTB的坦克车体、炮塔与主炮",
|
||||||
"screenshot": "屏幕截图",
|
"screenshot": "屏幕截图",
|
||||||
"randomize": "随机搭配"
|
"randomize": "随机搭配"
|
||||||
},
|
},
|
||||||
"guess": {
|
"guess": {
|
||||||
"name": "猜测",
|
"name": "猜测",
|
||||||
"button": "这会是什么?",
|
"button": "这可能是什么?",
|
||||||
"description": "坦克剪影小游戏",
|
"description": "坦克剪影小游戏",
|
||||||
"seo_description": "看剪影猜坦克",
|
"seo_description": "看剪影猜坦克",
|
||||||
"search": {
|
"search": {
|
||||||
"placeholder": "输入你的猜想……",
|
"placeholder": "输入你的猜测……",
|
||||||
"skip": "跳过",
|
"skip": "跳过",
|
||||||
"guess": "猜测",
|
"guess": "猜测",
|
||||||
"next": "下一个",
|
"next": "下一个",
|
||||||
"no_results": "沒有結果"
|
"no_results": "无结果"
|
||||||
},
|
},
|
||||||
"stats": "猜对了 {correct} / {total}",
|
"stats": "猜对了 {correct} / {total},连对 {streak} 个",
|
||||||
"help": {
|
"help": {
|
||||||
"title": "显示坦克?",
|
"title": "部分揭示坦克?",
|
||||||
"description": "显示坦克而不显示名字。这轮会被视为不正确,并打破你的连续记录!",
|
"description": "揭示坦克但不显示答案。本轮会被视为答错,并中断连对!",
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
"reveal": "显示"
|
"reveal": "揭示"
|
||||||
},
|
},
|
||||||
"clear": "清除",
|
"clear": "清除",
|
||||||
"select_all": "全选",
|
"select_all": "全选",
|
||||||
"tier": "{tier} 阶"
|
"tier": "{tier} 级"
|
||||||
},
|
},
|
||||||
"tankopedia": {
|
"tankopedia": {
|
||||||
"search": "搜索属性……",
|
"search": "搜索属性……",
|
||||||
"name": "战车百科",
|
"name": "坦克百科",
|
||||||
"button": "搜索战车",
|
"button": "搜索坦克",
|
||||||
"description": "闪击战坦克百科全书",
|
"description": "WoTB坦克百科",
|
||||||
"seo_description": "《坦克世界:闪击战》的所有坦克参数, 装甲, 等等...",
|
"seo_description": "WoTB所有坦克的参数、 装甲等",
|
||||||
"tank_seo_title": "{name} - {tier} 阶 {nationality} {class} | {website} 坦克百科 | 坦克世界闪击战 (WoTB)",
|
"tank_seo_title": "{name} - {tier} 级 {nationality} {class} | {website} 坦克百科 | 坦克世界闪击战(坦闪/WoTB)",
|
||||||
"tank_seo_description": "{name} 装甲,统计资料,装备,规定配给等。 {dpm} 每分钟伤害, {alpha} 伤害值, {penetration}毫米 穿透, {speed}公里/小時 最高速度, {health} 生命值。",
|
"tank_seo_description": "{name} 装甲、参数、配件、补给等。 {dpm} 每分钟伤害, {alpha} 均伤, {penetration}mm 穿深, {speed}km/h 极速, {health} 血量。",
|
||||||
"visualizers": {
|
"visualizers": {
|
||||||
"reload": {
|
"reload": {
|
||||||
"skip": "跳过"
|
"skip": "跳过"
|
||||||
@@ -387,15 +387,15 @@
|
|||||||
"rotator": {
|
"rotator": {
|
||||||
"hull": "车体",
|
"hull": "车体",
|
||||||
"turret": "炮塔",
|
"turret": "炮塔",
|
||||||
"hard": "硬地质",
|
"hard": "公路",
|
||||||
"medium": "中性地質",
|
"medium": "平地",
|
||||||
"soft": "軟地質",
|
"soft": "水面",
|
||||||
"effective": "效率"
|
"effective": "等效"
|
||||||
},
|
},
|
||||||
"ricochet": {
|
"ricochet": {
|
||||||
"angle": "角度",
|
"angle": "角度",
|
||||||
"normalization": "转正",
|
"normalization": "转正",
|
||||||
"effective_angle": "有效角度",
|
"effective_angle": "有效倾角",
|
||||||
"armor": "装甲",
|
"armor": "装甲",
|
||||||
"no_ricochet": "高爆弹不会跳弹"
|
"no_ricochet": "高爆弹不会跳弹"
|
||||||
},
|
},
|
||||||
@@ -407,20 +407,20 @@
|
|||||||
"flexibility": {
|
"flexibility": {
|
||||||
"yaw": "水平角度",
|
"yaw": "水平角度",
|
||||||
"pitch": "俯仰角度",
|
"pitch": "俯仰角度",
|
||||||
"min": "最少俯角",
|
"min": "极限俯角",
|
||||||
"max": "最大仰角"
|
"max": "极限仰角"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sandbox": {
|
"sandbox": {
|
||||||
"poses": {
|
"poses": {
|
||||||
"hull_down": "俯角视角",
|
"hull_down": "俯角视角",
|
||||||
"face_hug": "抱脸视角",
|
"face_hug": "顶牛视角",
|
||||||
"default": "默认"
|
"default": "默认"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"armor": "装甲",
|
"armor": "装甲",
|
||||||
"green_penetration": "可击穿区域",
|
"green_penetration": "绿色可击穿",
|
||||||
"hide_model_under_armor": "隐藏装甲下的模型",
|
"hide_model_under_armor": "隐藏坦克模型",
|
||||||
"opaque": "不透明",
|
"opaque": "不透明",
|
||||||
"dev_wireframe": "开发选项:网格"
|
"dev_wireframe": "开发选项:网格"
|
||||||
},
|
},
|
||||||
@@ -454,14 +454,14 @@
|
|||||||
"track": "履带"
|
"track": "履带"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"penetration": "{damage}生命值 击穿",
|
"penetration": "击穿:{damage}血量",
|
||||||
"blocked": "抵挡伤害",
|
"blocked": "抵挡伤害",
|
||||||
"ricochet": "跳弹",
|
"ricochet": "跳弹",
|
||||||
"splash": "{damage}生命值 溅射"
|
"splash": "溅射:{damage}血量"
|
||||||
},
|
},
|
||||||
"stats": {
|
"stats": {
|
||||||
"thickness_and_angle": "{thickness}毫米 {angle}度°",
|
"thickness_and_angle": "{thickness}mm/倾角{angle}°",
|
||||||
"nominal": "{thickness}毫米 装甲厚度",
|
"nominal": "{thickness}mm 垂直厚度",
|
||||||
"ricochet_loss": "{loss}% 击穿"
|
"ricochet_loss": "{loss}% 击穿"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -490,9 +490,9 @@
|
|||||||
"nation": "国别",
|
"nation": "国别",
|
||||||
"class": "坦克车型",
|
"class": "坦克车型",
|
||||||
"tier": "阶级",
|
"tier": "阶级",
|
||||||
"type": "战车类型",
|
"type": "坦克类型",
|
||||||
"dev_id": "开发参数:ID",
|
"dev_id": "开发参数:ID",
|
||||||
"dev_name": "DEV: NAME",
|
"dev_name": "开发者名称",
|
||||||
"purchase": "购买价格",
|
"purchase": "购买价格",
|
||||||
"restoration": "恢复坦克价格",
|
"restoration": "恢复坦克价格",
|
||||||
"sale": "出售价格",
|
"sale": "出售价格",
|
||||||
@@ -500,9 +500,9 @@
|
|||||||
},
|
},
|
||||||
"tech_tree": {
|
"tech_tree": {
|
||||||
"title": "科技树",
|
"title": "科技树",
|
||||||
"battle": "一场比赛",
|
"battle": "1场比赛",
|
||||||
"battles": "{count} 战斗场次",
|
"battles": "{count} 场次",
|
||||||
"route": "路线 {index} / {count}"
|
"route": "第 {index} / {count} 种科技线"
|
||||||
},
|
},
|
||||||
"game_modes": {
|
"game_modes": {
|
||||||
"title": "游戏模式技能"
|
"title": "游戏模式技能"
|
||||||
@@ -514,33 +514,32 @@
|
|||||||
"configuration": {
|
"configuration": {
|
||||||
"title": "配置设定",
|
"title": "配置设定",
|
||||||
"equalizer": {
|
"equalizer": {
|
||||||
"title": "Equalizer",
|
"title": "平衡器",
|
||||||
"equalize": "Equalize",
|
"equalize": "平衡"
|
||||||
"beta": "测试版"
|
|
||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"title": "坦克模块",
|
"title": "坦克模块",
|
||||||
"stock": "白板",
|
"stock": "白板",
|
||||||
"upgrade": "顶级配置"
|
"upgrade": "满配"
|
||||||
},
|
},
|
||||||
"equipment": {
|
"equipment": {
|
||||||
"title": "装备",
|
"title": "装备",
|
||||||
"clear": "清除"
|
"clear": "清除"
|
||||||
},
|
},
|
||||||
"provisions": {
|
"provisions": {
|
||||||
"title": "规定配给",
|
"title": "补给",
|
||||||
"clear": "清除"
|
"clear": "清除"
|
||||||
},
|
},
|
||||||
"consumables": {
|
"consumables": {
|
||||||
"title": "消耗品",
|
"title": "消耗品",
|
||||||
"clear": "清除",
|
"clear": "清除",
|
||||||
"info": "黄色高亮消耗品不影响坦克参数。"
|
"info": "以黄色标识的消耗品不影响坦克参数。"
|
||||||
},
|
},
|
||||||
"skills": {
|
"skills": {
|
||||||
"title": "乘员技能",
|
"title": "乘员技能",
|
||||||
"clear": "清除",
|
"clear": "清除",
|
||||||
"maximize": "最大化",
|
"maximize": "最大化",
|
||||||
"info": "黄色高亮技能只适用于特殊情况。 按空格键可在0到7级之间快速切换。"
|
"info": "以黄色标识的技能只在特定情形起效。 按空格键可在0到7级之间快速切换。"
|
||||||
},
|
},
|
||||||
"miscellaneous": {
|
"miscellaneous": {
|
||||||
"title": "杂项"
|
"title": "杂项"
|
||||||
@@ -550,48 +549,50 @@
|
|||||||
"title": "属性",
|
"title": "属性",
|
||||||
"compare": {
|
"compare": {
|
||||||
"label": "比较",
|
"label": "比较",
|
||||||
"class": "{tier} 阶的 {class}",
|
"class": "{tier}级{class}",
|
||||||
"tier": "所有{tier} 阶的",
|
"tier": "所有{tier}级坦克",
|
||||||
"all": "所有坦克"
|
"all": "所有坦克"
|
||||||
},
|
},
|
||||||
"values": {
|
"values": {
|
||||||
"shell_index": "炮弹 {index}",
|
"shell_index": "炮弹 {index}",
|
||||||
"at_distance": "在 {distance} 公尺",
|
"at_distance": "距离{distance}m",
|
||||||
"at_distance_slider_label": "距离",
|
"at_distance_slider_label": "距离",
|
||||||
"dispersion_at_distance": "在 {distance} 公尺的扩散度",
|
"dispersion_at_distance": "在 {distance}m 的精度",
|
||||||
"gun_flexibility": "炮管转动界限",
|
"gun_flexibility": "主炮俯仰角",
|
||||||
"speed": "速度",
|
"speed": "速度",
|
||||||
"terrain_coefficients": "地形系数",
|
"terrain_coefficients": "地形适应性",
|
||||||
"raw_terrain_coefficients": "原始地形系数",
|
"raw_terrain_coefficients": "原始地形系数",
|
||||||
"power_to_weight_ratio": "功重比",
|
"power_to_weight_ratio": "推重比",
|
||||||
"hull_traverse_speed": "车体转向速率",
|
"hull_traverse_speed": "车体转向速率",
|
||||||
"camouflage": "迷彩",
|
"camouflage": "涂装",
|
||||||
"reload": "装填时间",
|
"reload": "装填时间",
|
||||||
"crewCount": "乘员人数",
|
"crewCount": "乘员人数",
|
||||||
"shellNormalization": "转正",
|
"shellNormalization": "转正",
|
||||||
"shellRicochet": "跳弹",
|
"shellRicochet": "跳弹",
|
||||||
"dpm": "每分钟伤害",
|
"dpm": "每分钟伤害",
|
||||||
"dpmEffective": "60秒内生效",
|
"dpmEffective": "60秒内实际输出",
|
||||||
|
"peekabooDpm": "Peekaboo DPM",
|
||||||
|
"peekabooDpmInfo": "Damage per minute assuming you only fire after resetting camouflage (or the reload finishes, if it's slower) — at least 10 seconds between shots.",
|
||||||
"shells": "炮弹 ",
|
"shells": "炮弹 ",
|
||||||
"mostOptimalShellIndex": "最优炮弹",
|
"mostOptimalShellIndex": "最优炮弹",
|
||||||
"shellReloads": "装填时间",
|
"shellReloads": "装填时间",
|
||||||
"shellReload": "装填时间",
|
"shellReload": "装填时间",
|
||||||
"intraClip": "炮弹装填",
|
"intraClip": "短装",
|
||||||
"caliber": "口径",
|
"caliber": "口径",
|
||||||
"penetration": "穿深",
|
"penetration": "穿深",
|
||||||
"damage": "伤害",
|
"damage": "伤害",
|
||||||
"damageWithoutAssault": "无突击弹的伤害",
|
"damageWithoutAssault": "无突击弹的伤害",
|
||||||
"clipDamage": "弹匣伤害期望值",
|
"clipDamage": "总爆发",
|
||||||
"moduleDamage": "模组伤害",
|
"moduleDamage": "模块伤害",
|
||||||
"explosionRadius": "溅射半径",
|
"explosionRadius": "溅射半径",
|
||||||
"shellVelocity": "炮弹飞行速度",
|
"shellVelocity": "炮弹飞行速度",
|
||||||
"aimTime": "瞄准时间",
|
"aimTime": "瞄准时间",
|
||||||
"dispersion": "静止時",
|
"dispersion": "静止時",
|
||||||
"dispersionMoving": "移动时",
|
"dispersionMoving": "移动时",
|
||||||
"dispersionHullTraversing": "车体转向时",
|
"dispersionHullTraversing": "车体转向时",
|
||||||
"dispersionTurretTraversing": "炮塔转向时",
|
"dispersionTurretTraversing": "炮转扩圈",
|
||||||
"dispersionShooting": "开火时",
|
"dispersionShooting": "开火时",
|
||||||
"dispersionGunDamaged": "主炮损坏时",
|
"dispersionGunDamaged": "主炮损坏扩圈",
|
||||||
"gunDepression": "俯角",
|
"gunDepression": "俯角",
|
||||||
"gunElevation": "仰角",
|
"gunElevation": "仰角",
|
||||||
"gunFrontalDepression": "车体前部俯角",
|
"gunFrontalDepression": "车体前部俯角",
|
||||||
@@ -600,42 +601,42 @@
|
|||||||
"gunRearElevation": "车体后部仰角",
|
"gunRearElevation": "车体后部仰角",
|
||||||
"azimuthLeft": "左射界",
|
"azimuthLeft": "左射界",
|
||||||
"azimuthRight": "右射界",
|
"azimuthRight": "右射界",
|
||||||
"speedForwards": "最高前进速度",
|
"speedForwards": "前进极速",
|
||||||
"speedBackwards": "最高后退速度",
|
"speedBackwards": "后退极速",
|
||||||
"hardTerrainCoefficient": "硬地质",
|
"hardTerrainCoefficient": "公路",
|
||||||
"hardTerrainCoefficientRaw": "硬地质",
|
"hardTerrainCoefficientRaw": "公路-原始",
|
||||||
"mediumTerrainCoefficient": "中性地质",
|
"mediumTerrainCoefficient": "平地",
|
||||||
"mediumTerrainCoefficientRaw": "中性地质",
|
"mediumTerrainCoefficientRaw": "平地-原始",
|
||||||
"softTerrainCoefficient": "软地质",
|
"softTerrainCoefficient": "水面",
|
||||||
"softTerrainCoefficientRaw": "软地质",
|
"softTerrainCoefficientRaw": "水面-原始",
|
||||||
"enginePower": "引擎功率",
|
"enginePower": "引擎功率",
|
||||||
"powerToWeightRatioHardTerrain": "硬地质",
|
"powerToWeightRatioHardTerrain": "公路实际推重",
|
||||||
"powerToWeightRatioMediumTerrain": "中性地质",
|
"powerToWeightRatioMediumTerrain": "平地实际推重",
|
||||||
"powerToWeightRatioSoftTerrain": "软地质",
|
"powerToWeightRatioSoftTerrain": "水面实际推重",
|
||||||
"weight": "重量",
|
"weight": "重量",
|
||||||
"turretTraverseSpeed": "炮塔转向速率",
|
"turretTraverseSpeed": "炮塔转向速率",
|
||||||
"gunTraverseSpeed": "炮管转向速率",
|
"gunTraverseSpeed": "炮管转向速率",
|
||||||
"hullTraverseHardTerrain": "硬地质",
|
"hullTraverseHardTerrain": "公路上车转速率",
|
||||||
"hullTraverseMediumTerrain": "中性地质",
|
"hullTraverseMediumTerrain": "平地上车转速率",
|
||||||
"hullTraverseSoftTerrain": "软地质",
|
"hullTraverseSoftTerrain": "水面上车转速率",
|
||||||
"health": "生命值",
|
"health": "血量",
|
||||||
"fireChance": "着火概率",
|
"fireChance": "发动机受击时着火概率",
|
||||||
"viewRange": "视野范围",
|
"viewRange": "视野范围",
|
||||||
"camouflageStill": "静止时",
|
"camouflageStill": "静止隐蔽",
|
||||||
"camouflageMoving": "移动时",
|
"camouflageMoving": "移动时",
|
||||||
"camouflageShootingStill": "静止时",
|
"camouflageShootingStill": "静止时",
|
||||||
"camouflageShootingMoving": "移动时",
|
"camouflageShootingMoving": "移动开火隐蔽",
|
||||||
"camouflageCaughtOnFire": "着火时",
|
"camouflageCaughtOnFire": "着火时隐蔽",
|
||||||
"width": "宽度",
|
"width": "宽度",
|
||||||
"height": "高度",
|
"height": "高度",
|
||||||
"length": "长度",
|
"length": "长度",
|
||||||
"volume": "体积",
|
"volume": "体积",
|
||||||
"shellRange": "射程",
|
"shellRange": "射程",
|
||||||
"shellCapacity": "携弹量",
|
"shellCapacity": "载弹量",
|
||||||
"gunType": "炮管类型",
|
"gunType": "主炮类型",
|
||||||
"penetrationAt250m": "两百五十米处的穿透力",
|
"penetrationAt250m": "250m处穿深",
|
||||||
"burstShells": "爆破计数",
|
"burstShells": "小弹夹发数",
|
||||||
"burstInterShell": "爆破弹"
|
"burstInterShell": "小弹夹短装"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"firepower": {
|
"firepower": {
|
||||||
@@ -662,7 +663,7 @@
|
|||||||
"name": "比较",
|
"name": "比较",
|
||||||
"button": "坦克比较",
|
"button": "坦克比较",
|
||||||
"description": "比较坦克参数",
|
"description": "比较坦克参数",
|
||||||
"seo_description": "比较《坦克世界:闪击战》中的坦克参数和装备配置",
|
"seo_description": "比较坦克世界闪击战中的坦克参数和装备配置",
|
||||||
"actions": {
|
"actions": {
|
||||||
"add": {
|
"add": {
|
||||||
"button": "添加",
|
"button": "添加",
|
||||||
@@ -692,15 +693,15 @@
|
|||||||
},
|
},
|
||||||
"modules": {
|
"modules": {
|
||||||
"stock": "白板",
|
"stock": "白板",
|
||||||
"upgrade": "顶级配置"
|
"upgrade": "满配"
|
||||||
},
|
},
|
||||||
"provisions": {
|
"provisions": {
|
||||||
"clear": "清除",
|
"clear": "清空此坦克",
|
||||||
"clear_all": "清除所有坦克"
|
"clear_all": "清空所有坦克"
|
||||||
},
|
},
|
||||||
"consumables": {
|
"consumables": {
|
||||||
"clear": "清除",
|
"clear": "清空此坦克",
|
||||||
"clear_all": "清除所有坦克"
|
"clear_all": "清空所有坦克"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -708,7 +709,7 @@
|
|||||||
"name": "性能表现",
|
"name": "性能表现",
|
||||||
"button": "查看坦克",
|
"button": "查看坦克",
|
||||||
"description": "坦克性能统计",
|
"description": "坦克性能统计",
|
||||||
"seo_description": "最好的坦克及其在《坦克世界:闪击战》中的表现",
|
"seo_description": "最好的坦克及其在坦克世界闪击战中的数据",
|
||||||
"estimation": {
|
"estimation": {
|
||||||
"body": "基于 {count} 个玩家的估计数据。更新于 {age} 之前。",
|
"body": "基于 {count} 个玩家的估计数据。更新于 {age} 之前。",
|
||||||
"hours": "{count} 小时",
|
"hours": "{count} 小时",
|
||||||
@@ -726,15 +727,15 @@
|
|||||||
"winrate": "胜率",
|
"winrate": "胜率",
|
||||||
"players": "玩家",
|
"players": "玩家",
|
||||||
"damage": "伤害",
|
"damage": "伤害",
|
||||||
"survival": "生存性",
|
"survival": "生存率",
|
||||||
"xp": "经验值",
|
"xp": "经验值",
|
||||||
"kills": "击杀数",
|
"kills": "击杀数",
|
||||||
"spots": "侦查次数",
|
"spots": "侦查数",
|
||||||
"accuracy": "命中率",
|
"accuracy": "命中率",
|
||||||
"shots": "开火次数",
|
"shots": "开火次数",
|
||||||
"hits": "命中数",
|
"hits": "命中数",
|
||||||
"damage_ratio": "伤害效率",
|
"damage_ratio": "伤害比率",
|
||||||
"damage_taken": "承受伤害值",
|
"damage_taken": "承受伤害",
|
||||||
"capture_points": "占领值"
|
"capture_points": "占领值"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -743,11 +744,11 @@
|
|||||||
"name": "图库",
|
"name": "图库",
|
||||||
"button": "浏览全部",
|
"button": "浏览全部",
|
||||||
"description": "Blitz玩家头像",
|
"description": "Blitz玩家头像",
|
||||||
"seo_description": "所有《坦克世界:闪击战》玩家头像",
|
"seo_description": "所有坦克世界闪击战玩家头像",
|
||||||
"last_updated": "最后更新于 {time}",
|
"last_updated": "最后更新于 {time}",
|
||||||
"search": {
|
"search": {
|
||||||
"hint": "搜索頭像……",
|
"hint": "搜索头像……",
|
||||||
"results": "{count} 头像"
|
"results": "{count}个头像"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"session": {
|
"session": {
|
||||||
|
|||||||
@@ -78,7 +78,8 @@ if (provider === "steam") {
|
|||||||
|
|
||||||
console.log(`Downloading ${urls.length} packages...`);
|
console.log(`Downloading ${urls.length} packages...`);
|
||||||
|
|
||||||
await rm(WGPKG_DIR, { recursive: true });
|
await rm(WGPKG_DIR, { recursive: true, force: true });
|
||||||
|
await mkdir(WGPKG_DIR, { recursive: true });
|
||||||
|
|
||||||
const inputContent = urls
|
const inputContent = urls
|
||||||
.map((url) => {
|
.map((url) => {
|
||||||
|
|||||||
+54
-50
@@ -5,7 +5,7 @@ import {
|
|||||||
} from "@blitzkit/core";
|
} from "@blitzkit/core";
|
||||||
import { invalidate, useFrame } from "@react-three/fiber";
|
import { invalidate, useFrame } from "@react-three/fiber";
|
||||||
import type { QuicklimeEvent } from "quicklime";
|
import type { QuicklimeEvent } from "quicklime";
|
||||||
import { useEffect } from "react";
|
import { useEffect, useRef } from "react";
|
||||||
import {
|
import {
|
||||||
MeshBasicMaterial,
|
MeshBasicMaterial,
|
||||||
NormalBlending,
|
NormalBlending,
|
||||||
@@ -43,42 +43,44 @@ export function PrimaryArmorSceneComponent({
|
|||||||
node,
|
node,
|
||||||
thickness,
|
thickness,
|
||||||
}: PrimaryArmorSceneComponentProps) {
|
}: PrimaryArmorSceneComponentProps) {
|
||||||
const material = new ShaderMaterial({
|
const material = useRef(
|
||||||
fragmentShader,
|
new ShaderMaterial({
|
||||||
vertexShader,
|
fragmentShader,
|
||||||
|
vertexShader,
|
||||||
|
|
||||||
fog: true,
|
fog: true,
|
||||||
transparent: true,
|
transparent: true,
|
||||||
|
|
||||||
blending: isHalloween ? SubtractiveBlending : NormalBlending,
|
blending: isHalloween ? SubtractiveBlending : NormalBlending,
|
||||||
|
|
||||||
uniforms: UniformsUtils.merge([
|
uniforms: UniformsUtils.merge([
|
||||||
UniformsLib.common,
|
UniformsLib.common,
|
||||||
UniformsLib.fog,
|
UniformsLib.fog,
|
||||||
|
|
||||||
{
|
{
|
||||||
thickness: { value: null },
|
thickness: { value: null },
|
||||||
penetration: { value: null },
|
penetration: { value: null },
|
||||||
caliber: { value: null },
|
caliber: { value: null },
|
||||||
ricochet: { value: null },
|
ricochet: { value: null },
|
||||||
normalization: { value: null },
|
normalization: { value: null },
|
||||||
isExplosive: { value: null },
|
isExplosive: { value: null },
|
||||||
canSplash: { value: null },
|
canSplash: { value: null },
|
||||||
damage: { value: null },
|
damage: { value: null },
|
||||||
explosionRadius: { value: null },
|
explosionRadius: { value: null },
|
||||||
greenPenetration: { value: null },
|
greenPenetration: { value: null },
|
||||||
advancedHighlighting: { value: null },
|
advancedHighlighting: { value: null },
|
||||||
opaque: { value: null },
|
opaque: { value: null },
|
||||||
|
|
||||||
inverseProjectionMatrix: { value: null },
|
inverseProjectionMatrix: { value: null },
|
||||||
resolution: { value: new Vector2() },
|
resolution: { value: new Vector2() },
|
||||||
spacedArmorBuffer: { value: null },
|
spacedArmorBuffer: { value: null },
|
||||||
spacedArmorDepth: { value: null },
|
spacedArmorDepth: { value: null },
|
||||||
|
|
||||||
opacity: { value: 0 },
|
opacity: { value: 0 },
|
||||||
},
|
},
|
||||||
]),
|
]),
|
||||||
});
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
function handleShellChange() {
|
function handleShellChange() {
|
||||||
@@ -86,17 +88,17 @@ export function PrimaryArmorSceneComponent({
|
|||||||
const shell =
|
const shell =
|
||||||
tankopediaEphemeral.customShell ?? Duel.state.antagonist.shell;
|
tankopediaEphemeral.customShell ?? Duel.state.antagonist.shell;
|
||||||
|
|
||||||
material.uniforms.caliber.value = shell.caliber;
|
material.current.uniforms.caliber.value = shell.caliber;
|
||||||
material.uniforms.ricochet.value = degToRad(
|
material.current.uniforms.ricochet.value = degToRad(
|
||||||
isExplosive(shell.type) ? 90 : shell.ricochet!,
|
isExplosive(shell.type) ? 90 : shell.ricochet!,
|
||||||
);
|
);
|
||||||
material.uniforms.normalization.value = degToRad(
|
material.current.uniforms.normalization.value = degToRad(
|
||||||
shell.normalization ?? 0,
|
shell.normalization ?? 0,
|
||||||
);
|
);
|
||||||
material.uniforms.isExplosive.value = isExplosive(shell.type);
|
material.current.uniforms.isExplosive.value = isExplosive(shell.type);
|
||||||
material.uniforms.canSplash.value = canSplash(shell.type);
|
material.current.uniforms.canSplash.value = canSplash(shell.type);
|
||||||
material.uniforms.damage.value = shell.armor_damage;
|
material.current.uniforms.damage.value = shell.armor_damage;
|
||||||
material.uniforms.explosionRadius.value = shell.explosion_radius;
|
material.current.uniforms.explosionRadius.value = shell.explosion_radius;
|
||||||
|
|
||||||
handleProtagonistEquipmentChange(true);
|
handleProtagonistEquipmentChange(true);
|
||||||
handleAntagonistEquipmentChange(true);
|
handleAntagonistEquipmentChange(true);
|
||||||
@@ -104,17 +106,18 @@ export function PrimaryArmorSceneComponent({
|
|||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
function handleGreenPenetrationChange(greenPenetration: boolean) {
|
function handleGreenPenetrationChange(greenPenetration: boolean) {
|
||||||
material.uniforms.greenPenetration.value = greenPenetration;
|
material.current.uniforms.greenPenetration.value = greenPenetration;
|
||||||
}
|
}
|
||||||
function handleAdvancedHighlightingChange(advancedHighlighting: boolean) {
|
function handleAdvancedHighlightingChange(advancedHighlighting: boolean) {
|
||||||
material.uniforms.advancedHighlighting.value = advancedHighlighting;
|
material.current.uniforms.advancedHighlighting.value =
|
||||||
|
advancedHighlighting;
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
function handleOpaqueChange(opaque: boolean) {
|
function handleOpaqueChange(opaque: boolean) {
|
||||||
material.uniforms.opaque.value = opaque;
|
material.current.uniforms.opaque.value = opaque;
|
||||||
}
|
}
|
||||||
function handleWireframeChange(wireframe: boolean) {
|
function handleWireframeChange(wireframe: boolean) {
|
||||||
material.wireframe = wireframe;
|
material.current.wireframe = wireframe;
|
||||||
}
|
}
|
||||||
function handleProtagonistEquipmentChange(noInvalidate = false) {
|
function handleProtagonistEquipmentChange(noInvalidate = false) {
|
||||||
const equipment = Duel.state.protagonist.equipmentMatrix;
|
const equipment = Duel.state.protagonist.equipmentMatrix;
|
||||||
@@ -128,7 +131,7 @@ export function PrimaryArmorSceneComponent({
|
|||||||
? Duel.state.protagonist.tank.equalizer?.armor
|
? Duel.state.protagonist.tank.equalizer?.armor
|
||||||
: undefined) ?? 1;
|
: undefined) ?? 1;
|
||||||
|
|
||||||
material.uniforms.thickness.value =
|
material.current.uniforms.thickness.value =
|
||||||
thickness * (hasEnhancedArmor ? 1.04 : 1) * equalizer;
|
thickness * (hasEnhancedArmor ? 1.04 : 1) * equalizer;
|
||||||
|
|
||||||
if (!noInvalidate) invalidate();
|
if (!noInvalidate) invalidate();
|
||||||
@@ -145,7 +148,7 @@ export function PrimaryArmorSceneComponent({
|
|||||||
equipment,
|
equipment,
|
||||||
);
|
);
|
||||||
|
|
||||||
material.uniforms.penetration.value =
|
material.current.uniforms.penetration.value =
|
||||||
penetration *
|
penetration *
|
||||||
resolvePenetrationCoefficient(
|
resolvePenetrationCoefficient(
|
||||||
hasCalibratedShells,
|
hasCalibratedShells,
|
||||||
@@ -158,7 +161,7 @@ export function PrimaryArmorSceneComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleTransitionEvent(event: QuicklimeEvent<number>) {
|
function handleTransitionEvent(event: QuicklimeEvent<number>) {
|
||||||
material.uniforms.opacity.value = event.data;
|
material.current.uniforms.opacity.value = event.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleShellChange();
|
handleShellChange();
|
||||||
@@ -209,13 +212,14 @@ export function PrimaryArmorSceneComponent({
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useFrame(({ gl, camera }) => {
|
useFrame(({ gl, camera }) => {
|
||||||
gl.getSize(material.uniforms.resolution.value).multiplyScalar(
|
gl.getSize(material.current.uniforms.resolution.value).multiplyScalar(
|
||||||
gl.getPixelRatio(),
|
gl.getPixelRatio(),
|
||||||
);
|
);
|
||||||
material.uniforms.spacedArmorBuffer.value = spacedArmorRenderTarget.texture;
|
material.current.uniforms.spacedArmorBuffer.value =
|
||||||
material.uniforms.spacedArmorDepth.value =
|
spacedArmorRenderTarget.texture;
|
||||||
|
material.current.uniforms.spacedArmorDepth.value =
|
||||||
spacedArmorRenderTarget.depthTexture;
|
spacedArmorRenderTarget.depthTexture;
|
||||||
material.uniforms.inverseProjectionMatrix.value =
|
material.current.uniforms.inverseProjectionMatrix.value =
|
||||||
camera.projectionMatrixInverse;
|
camera.projectionMatrixInverse;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -240,7 +244,7 @@ export function PrimaryArmorSceneComponent({
|
|||||||
{...props}
|
{...props}
|
||||||
key={`${key}-include`}
|
key={`${key}-include`}
|
||||||
renderOrder={1}
|
renderOrder={1}
|
||||||
material={material}
|
material={material.current}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ export const Armor = memo(() => {
|
|||||||
const newRenderSize = new Vector2();
|
const newRenderSize = new Vector2();
|
||||||
|
|
||||||
useFrame(({ gl, camera, scene }) => {
|
useFrame(({ gl, camera, scene }) => {
|
||||||
gl.autoClear = true;
|
|
||||||
|
|
||||||
gl.getSize(newRenderSize).multiplyScalar(gl.getPixelRatio());
|
gl.getSize(newRenderSize).multiplyScalar(gl.getPixelRatio());
|
||||||
|
|
||||||
if (!newRenderSize.equals(renderSize)) {
|
if (!newRenderSize.equals(renderSize)) {
|
||||||
@@ -50,6 +48,8 @@ export const Armor = memo(() => {
|
|||||||
|
|
||||||
gl.clearDepth();
|
gl.clearDepth();
|
||||||
gl.render(primaryArmorScene, camera);
|
gl.render(primaryArmorScene, camera);
|
||||||
|
|
||||||
|
gl.autoClear = true;
|
||||||
}, 1);
|
}, 1);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -45,14 +45,13 @@ const consumableDefinitions = await api.consumableDefinitions();
|
|||||||
const provisionDefinitions = await api.provisionDefinitions();
|
const provisionDefinitions = await api.provisionDefinitions();
|
||||||
const tankDefinitions = await api.tankDefinitions();
|
const tankDefinitions = await api.tankDefinitions();
|
||||||
|
|
||||||
const gameModeRoleSets: Record<number, Set<number>> = {};
|
const gameModeRoleSets: Record<string, Set<number>> = {};
|
||||||
|
|
||||||
for (const tankIdString in tankDefinitions.tanks) {
|
for (const tankIdString in tankDefinitions.tanks) {
|
||||||
const gameMode = tankDefinitions.tanks[tankIdString];
|
const gameMode = tankDefinitions.tanks[tankIdString];
|
||||||
|
|
||||||
for (const gameModeIdString in gameMode.roles) {
|
for (const gameModeId in gameMode.roles) {
|
||||||
const role = gameMode.roles[gameModeIdString];
|
const role = gameMode.roles[gameModeId];
|
||||||
const gameModeId = Number(gameModeIdString);
|
|
||||||
|
|
||||||
if (gameModeId in gameModeRoleSets) {
|
if (gameModeId in gameModeRoleSets) {
|
||||||
gameModeRoleSets[gameModeId].add(role);
|
gameModeRoleSets[gameModeId].add(role);
|
||||||
@@ -63,7 +62,7 @@ for (const tankIdString in tankDefinitions.tanks) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const gameModeRoles: {
|
const gameModeRoles: {
|
||||||
gameModeId: number;
|
gameModeId: string;
|
||||||
consumables: number[];
|
consumables: number[];
|
||||||
provisions: number[];
|
provisions: number[];
|
||||||
}[] = [];
|
}[] = [];
|
||||||
@@ -72,8 +71,7 @@ const allGameModeConsumables = new Set<number>();
|
|||||||
const allGameModeProvisions = new Set<number>();
|
const allGameModeProvisions = new Set<number>();
|
||||||
|
|
||||||
for (const gameModeIdString in gameModeRoleSets) {
|
for (const gameModeIdString in gameModeRoleSets) {
|
||||||
const gameModeId = Number(gameModeIdString);
|
const roles = gameModeRoleSets[gameModeIdString];
|
||||||
const roles = gameModeRoleSets[gameModeId];
|
|
||||||
const consumables = new Set<number>();
|
const consumables = new Set<number>();
|
||||||
const provisions = new Set<number>();
|
const provisions = new Set<number>();
|
||||||
|
|
||||||
@@ -116,7 +114,7 @@ for (const gameModeIdString in gameModeRoleSets) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gameModeRoles.push({
|
gameModeRoles.push({
|
||||||
gameModeId: gameModeId,
|
gameModeId: gameModeIdString,
|
||||||
consumables: Array.from(consumables.values()),
|
consumables: Array.from(consumables.values()),
|
||||||
provisions: Array.from(provisions.values()),
|
provisions: Array.from(provisions.values()),
|
||||||
});
|
});
|
||||||
|
|||||||
+43
-1
@@ -1,6 +1,14 @@
|
|||||||
import { alias, isExplosive } from "@blitzkit/core";
|
import { alias, isExplosive } from "@blitzkit/core";
|
||||||
import { literals } from "@blitzkit/i18n";
|
import { literals } from "@blitzkit/i18n";
|
||||||
import { Flex, Heading, IconButton, Tooltip } from "@radix-ui/themes";
|
import { InfoCircledIcon } from "@radix-ui/react-icons";
|
||||||
|
import {
|
||||||
|
Flex,
|
||||||
|
Heading,
|
||||||
|
IconButton,
|
||||||
|
Popover,
|
||||||
|
Text,
|
||||||
|
Tooltip,
|
||||||
|
} from "@radix-ui/themes";
|
||||||
import { useLocale } from "../../../../../../hooks/useLocale";
|
import { useLocale } from "../../../../../../hooks/useLocale";
|
||||||
import { useTankModelDefinition } from "../../../../../../hooks/useTankModelDefinition";
|
import { useTankModelDefinition } from "../../../../../../hooks/useTankModelDefinition";
|
||||||
import { Duel } from "../../../../../../stores/duel";
|
import { Duel } from "../../../../../../stores/duel";
|
||||||
@@ -77,6 +85,40 @@ export function Firepower({
|
|||||||
{strings.common.gun_types[gun.gun_type!.$case]}
|
{strings.common.gun_types[gun.gun_type!.$case]}
|
||||||
</Info>
|
</Info>
|
||||||
<InfoWithDelta stats={stats} decimals={0} value="dpm" />
|
<InfoWithDelta stats={stats} decimals={0} value="dpm" />
|
||||||
|
{gun.gun_type!.$case === "regular" && (
|
||||||
|
<InfoWithDelta
|
||||||
|
stats={stats}
|
||||||
|
indent
|
||||||
|
decimals={0}
|
||||||
|
noRanking
|
||||||
|
name={
|
||||||
|
<Flex align="center" gap="1" display="inline-flex">
|
||||||
|
{
|
||||||
|
strings.website.tools.tankopedia.characteristics.values
|
||||||
|
.peekabooDpm
|
||||||
|
}
|
||||||
|
|
||||||
|
<Popover.Root>
|
||||||
|
<Popover.Trigger>
|
||||||
|
<IconButton variant="ghost" size="1">
|
||||||
|
<InfoCircledIcon />
|
||||||
|
</IconButton>
|
||||||
|
</Popover.Trigger>
|
||||||
|
|
||||||
|
<Popover.Content style={{ maxWidth: 280 }}>
|
||||||
|
<Text size="2">
|
||||||
|
{
|
||||||
|
strings.website.tools.tankopedia.characteristics.values
|
||||||
|
.peekabooDpmInfo
|
||||||
|
}
|
||||||
|
</Text>
|
||||||
|
</Popover.Content>
|
||||||
|
</Popover.Root>
|
||||||
|
</Flex>
|
||||||
|
}
|
||||||
|
value={(tank) => tank.peekabooDpm}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<InfoWithDelta stats={stats} decimals={0} value="damage" />
|
<InfoWithDelta stats={stats} decimals={0} value="damage" />
|
||||||
{gun.gun_type!.$case !== "regular" && (
|
{gun.gun_type!.$case !== "regular" && (
|
||||||
<InfoWithDelta stats={stats} indent decimals={0} value="clipDamage" />
|
<InfoWithDelta stats={stats} indent decimals={0} value="clipDamage" />
|
||||||
|
|||||||
+4
-9
@@ -1,5 +1,5 @@
|
|||||||
import { alias } from "@blitzkit/core";
|
import { alias } from "@blitzkit/core";
|
||||||
import { Badge, Box, Flex, Heading, Switch, Text } from "@radix-ui/themes";
|
import { Box, Flex, Heading, Switch, Text } from "@radix-ui/themes";
|
||||||
import { useLocale } from "../../../../hooks/useLocale";
|
import { useLocale } from "../../../../hooks/useLocale";
|
||||||
import { Duel } from "../../../../stores/duel";
|
import { Duel } from "../../../../stores/duel";
|
||||||
import { Tankopedia } from "../../../../stores/tankopedia";
|
import { Tankopedia } from "../../../../stores/tankopedia";
|
||||||
@@ -12,12 +12,7 @@ export function Equalizer() {
|
|||||||
return (
|
return (
|
||||||
<ConfigurationChildWrapper>
|
<ConfigurationChildWrapper>
|
||||||
<Heading size="4">
|
<Heading size="4">
|
||||||
<Flex gap="2" align="center">
|
{strings.website.tools.tankopedia.configuration.equalizer.title}
|
||||||
{strings.website.tools.tankopedia.configuration.equalizer.title}{" "}
|
|
||||||
<Badge variant="outline">
|
|
||||||
{strings.website.tools.tankopedia.configuration.equalizer.beta}
|
|
||||||
</Badge>
|
|
||||||
</Flex>
|
|
||||||
</Heading>
|
</Heading>
|
||||||
|
|
||||||
<Box
|
<Box
|
||||||
@@ -34,9 +29,9 @@ export function Equalizer() {
|
|||||||
style={{
|
style={{
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
borderRadius: "var(--radius-3)",
|
borderRadius: "var(--radius-3)",
|
||||||
backgroundImage: `url(${alias("api", `/gamemodes/45/banner.webp`)})`,
|
backgroundImage: `url(${alias("api", `/gamemodes/Insanity/banner.webp`)})`,
|
||||||
backgroundSize: "cover",
|
backgroundSize: "cover",
|
||||||
backgroundPosition: "center",
|
backgroundPosition: "50% 25%",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -25,8 +25,7 @@ export function GameModeSection() {
|
|||||||
</Heading>
|
</Heading>
|
||||||
|
|
||||||
<Flex justify="center" gap="4" wrap="wrap" px="4">
|
<Flex justify="center" gap="4" wrap="wrap" px="4">
|
||||||
{roles.map(([key, value]) => {
|
{roles.map(([id, value]) => {
|
||||||
const id = Number(key);
|
|
||||||
const gameMode = gameDefinitions.gameModes[id];
|
const gameMode = gameDefinitions.gameModes[id];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
+5
-5
@@ -74,13 +74,13 @@ export function Lighting({ hasPbr }: Props) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ContactShadows
|
<ContactShadows
|
||||||
near={0}
|
|
||||||
far={2 ** 6}
|
|
||||||
width={1.5}
|
width={1.5}
|
||||||
height={1.5}
|
height={1.5}
|
||||||
blur={2 ** 0.5}
|
near={0}
|
||||||
opacity={2 ** -0.4}
|
far={1}
|
||||||
resolution={2 ** 7}
|
opacity={2 ** 1}
|
||||||
|
blur={2 ** 1}
|
||||||
|
resolution={2 ** 9}
|
||||||
depthWrite={false}
|
depthWrite={false}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
@@ -418,6 +418,10 @@ export function tankCharacteristics(
|
|||||||
: (gun.gun_type!.$case === "regular"
|
: (gun.gun_type!.$case === "regular"
|
||||||
? gun.gun_type!.value.reload
|
? gun.gun_type!.value.reload
|
||||||
: gun.gun_type!.value.clip_reload) * reloadCoefficient;
|
: gun.gun_type!.value.clip_reload) * reloadCoefficient;
|
||||||
|
const peekabooDpm =
|
||||||
|
gun.gun_type!.$case === "regular"
|
||||||
|
? Math.round(damage * (60 / Math.max(shellReload!, 10)))
|
||||||
|
: undefined;
|
||||||
const caliber = shell.caliber;
|
const caliber = shell.caliber;
|
||||||
const penetration = shell.penetration!.near * penetrationCoefficient;
|
const penetration = shell.penetration!.near * penetrationCoefficient;
|
||||||
const clipDamage =
|
const clipDamage =
|
||||||
@@ -545,6 +549,7 @@ export function tankCharacteristics(
|
|||||||
shellRicochet,
|
shellRicochet,
|
||||||
dpm,
|
dpm,
|
||||||
dpmEffective,
|
dpmEffective,
|
||||||
|
peekabooDpm,
|
||||||
shells,
|
shells,
|
||||||
mostOptimalShellIndex,
|
mostOptimalShellIndex,
|
||||||
shellReloads,
|
shellReloads,
|
||||||
|
|||||||
@@ -17,15 +17,15 @@ export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => {
|
|||||||
const bannerMatches: { name: string; path: string }[] = [];
|
const bannerMatches: { name: string; path: string }[] = [];
|
||||||
|
|
||||||
for (const match of gameTypeSelectorStyles.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
for (const match of gameTypeSelectorStyles.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
||||||
/eGameMode\.([a-zA-Z]+) -> "~res:([^"]+)"/g,
|
/eGameMode\.(\w+) -> "~res:([^"]+)"/g,
|
||||||
)) {
|
)) {
|
||||||
bannerMatches.push({ name: match[1], path: match[2] });
|
bannerMatches.push({ name: match[1], path: match[2] });
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const match of squadBattleTypeStyles.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
for (const match of squadBattleTypeStyles.Prototypes[0].components.UIDataLocalBindingsComponent.data[1][2].matchAll(
|
||||||
/"(\d+)" -> "battleType\/([a-zA-Z]+)"/g,
|
/eGameMode\.(\w+) -> "battleType\/([a-zA-Z]+)"/g,
|
||||||
)) {
|
)) {
|
||||||
const id = Number(match[1]);
|
const id = match[1];
|
||||||
const name = match[2];
|
const name = match[2];
|
||||||
let path = bannerMatches.find(
|
let path = bannerMatches.find(
|
||||||
(bannerMatch) => bannerMatch.name.toLowerCase() === name.toLowerCase(),
|
(bannerMatch) => bannerMatch.name.toLowerCase() === name.toLowerCase(),
|
||||||
|
|||||||
@@ -11,13 +11,6 @@ export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => {
|
|||||||
.dir(`Data/Gfx/Shared/tank-supply/ammunition/big`)
|
.dir(`Data/Gfx/Shared/tank-supply/ammunition/big`)
|
||||||
.then((files) => files.filter((file) => file.endsWith("_l.txt")));
|
.then((files) => files.filter((file) => file.endsWith("_l.txt")));
|
||||||
|
|
||||||
console.log(
|
|
||||||
"Shell files raw",
|
|
||||||
await vfs.dir(`Data/Gfx/Shared/tank-supply/ammunition/big`),
|
|
||||||
);
|
|
||||||
|
|
||||||
console.log("Shell file paths", files);
|
|
||||||
|
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const id = file.match(/(.+)_l\.txt/)![1];
|
const id = file.match(/(.+)_l\.txt/)![1];
|
||||||
const sizes = (
|
const sizes = (
|
||||||
@@ -33,8 +26,6 @@ export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Shell paths", paths);
|
|
||||||
|
|
||||||
return paths;
|
return paths;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -90,15 +90,21 @@ function Content() {
|
|||||||
session.tracking && tankStatsB
|
session.tracking && tankStatsB
|
||||||
? deltaTankStats(session.player.stats, tankStatsB)
|
? deltaTankStats(session.player.stats, tankStatsB)
|
||||||
.sort((a, b) => b.last_battle_time - a.last_battle_time)
|
.sort((a, b) => b.last_battle_time - a.last_battle_time)
|
||||||
.map((entry) => {
|
.flatMap((entry) => {
|
||||||
|
if (!(entry.tank_id in tankDefinitions.tanks)) return [];
|
||||||
|
|
||||||
const tank = tankDefinitions.tanks[entry.tank_id];
|
const tank = tankDefinitions.tanks[entry.tank_id];
|
||||||
|
|
||||||
|
if (!(tank.id in averageDefinitions.averages)) return [];
|
||||||
|
|
||||||
const average = averageDefinitions.averages[tank.id];
|
const average = averageDefinitions.averages[tank.id];
|
||||||
|
|
||||||
const composite = compositeStats(
|
const composite = compositeStats(
|
||||||
{ ...entry.all, battle_life_time: entry.battle_life_time },
|
{ ...entry.all, battle_life_time: entry.battle_life_time },
|
||||||
average?.mu!,
|
average.mu!,
|
||||||
);
|
);
|
||||||
|
|
||||||
return { tank, composite };
|
return [{ tank, composite }];
|
||||||
})
|
})
|
||||||
: undefined,
|
: undefined,
|
||||||
[session.tracking && session.player, tankStatsB],
|
[session.tracking && session.player, tankStatsB],
|
||||||
|
|||||||
Reference in new issue
Block a user