Correct response building addons

- add addons response
- add max repair param to units
This commit is contained in:
Anibus 2025-05-27 02:56:10 +03:00
parent 8f14dd9e62
commit 07ce631871
17 changed files with 116 additions and 25 deletions

View File

@ -1,14 +1,9 @@
package com.dowstats.controllers
import com.dowstats.data.dto.controllers.BuildingFullDto
import com.dowstats.data.dto.controllers.RaceBuildings
import com.dowstats.data.dto.controllers.RaceUnits
import com.dowstats.data.entities.Building
import com.dowstats.data.entities.DowUnit
import com.dowstats.data.dto.controllers.building.BuildingFullDto
import com.dowstats.data.dto.controllers.building.RaceBuildings
import com.dowstats.data.repositories.BuildingRepository
import com.dowstats.data.repositories.UnitRepository
import com.dowstats.service.datamaps.DowBuildingMappingService
import com.dowstats.service.datamaps.DowUnitMappingService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping

View File

@ -37,6 +37,7 @@ data class UnitFullDto(
val reinforceCostFaith: Int?,
val reinforceCostSouls: Int?,
val reinforceTime: Int?,
val repairMax: Int?,
val maxSergeants: Int?,
val icon: String?,
val modId: Long,

View File

@ -0,0 +1,8 @@
package com.dowstats.data.dto.controllers.building
data class AddonModifierDto (
val id: Long,
val reference: String?,
val usageType: String?,
val value: Double?,
)

View File

@ -0,0 +1,8 @@
package com.dowstats.data.dto.controllers.building
data class AddonRequirementDto (
val id: Long,
val reference: String?,
val replaceWhenDone: Boolean,
val value: Double?,
)

View File

@ -1,4 +1,4 @@
package com.dowstats.data.dto.controllers
package com.dowstats.data.dto.controllers.building
data class BuildingAddonDto(
val id: Long?,
@ -11,5 +11,7 @@ data class BuildingAddonDto(
val addonCostFaith: Double?,
val addonCostSouls: Double?,
val addonCostTime: Int?,
val addonModifiers: Set<AddonModifierDto>,
val addonRequirements: Set<AddonRequirementDto>,
val icon: String?,
)

View File

@ -1,4 +1,8 @@
package com.dowstats.data.dto.controllers
package com.dowstats.data.dto.controllers.building
import com.dowstats.data.dto.controllers.ArmorTypeDto
import com.dowstats.data.dto.controllers.RaceDto
import com.dowstats.data.dto.controllers.WeaponSlotDto
data class BuildingFullDto(
var id: Long?,
@ -21,6 +25,6 @@ data class BuildingFullDto(
var repairMax: Int?,
var icon: String?,
var modId: Long?,
var addons: MutableSet<BuildingAddonDto>?,
var addons: Set<BuildingAddonDto>?,
val weapons: Set<WeaponSlotDto>?,
)

View File

@ -1,4 +1,6 @@
package com.dowstats.data.dto.controllers
package com.dowstats.data.dto.controllers.building
import com.dowstats.data.dto.controllers.RaceDto
data class RaceBuildings(
val race: RaceDto,

View File

@ -1,5 +1,6 @@
package com.dowstats.data.entities
import com.dowstats.data.dto.controllers.building.AddonModifierDto
import com.fasterxml.jackson.annotation.JsonIgnore
import jakarta.persistence.*
@ -20,4 +21,13 @@ class AddonModifiers {
var reference: String? = null
var usageType: String? = null
var value: Double? = null
fun toDto(): AddonModifierDto {
return AddonModifierDto(
id = id!!,
reference = reference,
usageType = usageType,
value = value
)
}
}

View File

@ -1,5 +1,6 @@
package com.dowstats.data.entities
import com.dowstats.data.dto.controllers.building.AddonRequirementDto
import com.fasterxml.jackson.annotation.JsonIgnore
import jakarta.persistence.*
@ -19,4 +20,13 @@ class AddonRequirements {
var reference: String? = null
var replaceWhenDone: Boolean = false
var value: Double? = null
fun toDto(): AddonRequirementDto {
return AddonRequirementDto(
id = id!!,
reference = reference,
replaceWhenDone = replaceWhenDone,
value = value
)
}
}

View File

@ -1,6 +1,6 @@
package com.dowstats.data.entities
import com.dowstats.data.dto.controllers.BuildingFullDto
import com.dowstats.data.dto.controllers.building.BuildingFullDto
import jakarta.persistence.*
@ -69,7 +69,7 @@ class Building {
repairMax,
icon,
modId!!,
mutableSetOf(),
addons?.map { it.toDto() }?.toSet(),
weapons?.map { it.toWeaponSlotDto() }?.toSet(),
)

View File

@ -1,5 +1,6 @@
package com.dowstats.data.entities
import com.dowstats.data.dto.controllers.building.BuildingAddonDto
import com.fasterxml.jackson.annotation.JsonIgnore
import jakarta.persistence.*
@ -35,4 +36,20 @@ class BuildingAddon {
var icon: String? = null
fun toDto(): BuildingAddonDto = BuildingAddonDto(
id = id,
name = name,
description = description,
filename = filename,
addonCostRequisition = addonCostRequisition,
addonCostPower = addonCostPower,
addonCostPopulation = addonCostPopulation,
addonCostFaith = addonCostFaith,
addonCostSouls = addonCostSouls,
addonCostTime = addonCostTime,
addonModifiers = addonModifiers?.map { it.toDto() }?.toSet() ?: emptySet(),
addonRequirements = addonRequirements?.map { it.toDto() }?.toSet() ?: emptySet(),
icon = icon
)
}

View File

@ -41,6 +41,7 @@ class DowUnit {
var health: Int? = null
var healthRegeneration: Double? = null
var moraleDeathPenalty: Int? = null
var repairMax: Int? = null
var moraleMax: Int? = null
var moraleBroken: Int? = null
var moraleRegeneration: Int? = null
@ -103,6 +104,7 @@ class DowUnit {
reinforceCostFaith,
reinforceCostSouls,
reinforceTime,
repairMax,
maxSergeants,
icon,
modId!!,

View File

@ -1,7 +1,7 @@
package com.dowstats.service.datamaps
import com.dowstats.data.dto.controllers.BuildingShortDto
import com.dowstats.data.dto.controllers.RaceBuildings
import com.dowstats.data.dto.controllers.building.BuildingShortDto
import com.dowstats.data.dto.controllers.building.RaceBuildings
import com.dowstats.data.entities.Building
import com.dowstats.data.repositories.BuildingRepository
import com.dowstats.data.repositories.RaceRepository

View File

@ -87,6 +87,7 @@ class BuildingAddonRgdExtractService @Autowired constructor(
it.addon = addon
it.reference = rTable.getStringByName("\$REF")
it.replaceWhenDone = rTable.getBooleanByName("replace_when_done") == true
// TODO - что-то придумать с этим
it.value =
if (it.reference == "requirements\\required_total_pop.lua") rTable.getDoubleByName("population_required") else null
}

View File

@ -5,6 +5,7 @@ import com.dowstats.data.dto.UnitDataToSave
import com.dowstats.data.dto.WeaponsData
import com.dowstats.data.entities.*
import com.dowstats.data.rgd.RgdData
import com.dowstats.data.rgd.RgdDataUtil.getBooleanByName
import com.dowstats.data.rgd.RgdDataUtil.getDoubleByName
import com.dowstats.data.rgd.RgdDataUtil.getIntByName
import com.dowstats.data.rgd.RgdDataUtil.getRgdTableByName
@ -29,6 +30,7 @@ class UnitRgdExtractService @Autowired constructor(
val hitpoints: Double?,
val regeneration: Double?,
val moraleDeathPenalty: Double?,
val maxRepairers: Int?,
)
data class MoraleData(
@ -99,6 +101,7 @@ class UnitRgdExtractService @Autowired constructor(
unit.health = healthData.hitpoints?.toInt()
unit.healthRegeneration = healthData.regeneration
unit.moraleDeathPenalty = healthData.moraleDeathPenalty?.toInt()
unit.repairMax = healthData.maxRepairers
val moraleData = getMoraleData(squadData)
unit.moraleMax = moraleData.max?.toInt()
@ -122,6 +125,8 @@ class UnitRgdExtractService @Autowired constructor(
unit.reinforceCostSouls = getReinforceSouls(reinforceCostData)
unit.reinforceTime = getReinforceTime(reinforceData)
val sergeantsData = getSergeantsData(squadData)
val sergeantsEntities: List<Pair<Sergeant, Set<Weapon>>>? = sergeantsData.first?.mapNotNull { sergeantData ->
@ -215,17 +220,12 @@ class UnitRgdExtractService @Autowired constructor(
val descriptionRefs = uiInfo?.getRgdTableByName("help_text_list")
?.map { (it.value as String).replace("$", "") }
?.filter { it != "0" && it != "tables\\text_table.lua" && it != "" }
?.sortedBy {
try {
it.toInt()
} catch (e: Exception) {
0
}
}
?.filter { it != "0" && it != "tables\\text_table.lua" && it != "" && it.toIntOrNull() != null }
?.sortedBy { it.toInt() }
val description = try {
descriptionRefs?.map { modDictionary[it.toInt()] }?.joinToString("\n")
descriptionRefs?.map {
modDictionary[it.toInt()] }?.joinToString("\n")
} catch (e: Exception) {
log.warn("Error parsing ui description", e)
null
@ -270,10 +270,12 @@ class UnitRgdExtractService @Autowired constructor(
private fun getHealthAndMoraleDeathPenaltyData(unitData: List<RgdData>): HealthAndMoraleDeathData {
val healthExt = unitData.getRgdTableByName("health_ext")
val canRepair = healthExt?.getBooleanByName("can_be_repaired")
return HealthAndMoraleDeathData(
healthExt?.getDoubleByName("hitpoints"),
healthExt?.getDoubleByName("regeneration_rate"),
healthExt?.getDoubleByName("morale_death")
healthExt?.getDoubleByName("morale_death"),
canRepair?.let { if (it) healthExt.getIntByName("max_repairers") else null }
)
}

View File

@ -0,0 +1,25 @@
{
"databaseChangeLog": [
{
"changeSet": {
"id": "Add repair_max column to units",
"author": "anibus",
"changes": [
{
"addColumn": {
"columns": [
{
"column": {
"name": "repair_max",
"type": "int"
}
}
],
"tableName": "units"
}
}
]
}
}
]
}

View File

@ -77,6 +77,10 @@
"include": {
"file": "db/0.0.2/schema/addon.json"
}
},{
"include": {
"file": "db/0.0.2/schema/units.json"
}
}
]
}