From 0d7b65c4868102f48252bad48d0424ab45f0df4f Mon Sep 17 00:00:00 2001 From: hanqin Date: Sat, 28 Mar 2026 17:20:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=94=BB=E5=87=BB=E5=8A=9B?= =?UTF-8?q?=E3=80=81=E9=98=B2=E5=BE=A1=E5=8A=9B=E3=80=81=E8=A1=80=E9=87=8F?= =?UTF-8?q?=E7=9A=84=E8=AE=A1=E7=AE=97=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build_God_Api/Build_God_Api/MarkDown.md | 11 +++++--- .../CharacterAttributeCalculateService.cs | 20 +++++++++++--- Build_God_Game/src/views/CharacterView.vue | 27 ++++++++++++++++--- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/Build_God_Api/Build_God_Api/MarkDown.md b/Build_God_Api/Build_God_Api/MarkDown.md index d7e3482..d0447a3 100644 --- a/Build_God_Api/Build_God_Api/MarkDown.md +++ b/Build_God_Api/Build_God_Api/MarkDown.md @@ -11,10 +11,13 @@ - 战士 : 攻击系数 * 1.0 防御系数 * 1.0 生命系数 * 1.5 暴击系数 * 0.95 ## 打坐 🧘 -结算公式:基础系数 × 等级 × 等级 × (1 + buff) × 秒数 ---基础系数:一个很小的数字,用于整体平衡,比如0.2、0.5或者1,我设定得1,后面再调整 ---buff:加成 +结算公式:0.02 * lv^1.5 * seconds; ## 等级 -每一级得最小经验门槛儿计算: 100 * level * level * level; +每一级得最小经验门槛儿计算: 5 * lv^4 +## 属性公式 +- 血量: 5 * lv^2 * ln(currentExp+1000) * healthRate(职业的血量系数) +- 攻击:1 * lv^2 * ln(currentExp+1000) * attackRate(职业的攻击力系数) +- 防御:0.5 * lv^2 * ln(currentExp + 1000) * defendRate(职业的防御力系数) +- 暴击:从装备获取,和等级没关联 diff --git a/Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs b/Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs index 3e1eb3e..373b25c 100644 --- a/Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs +++ b/Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs @@ -29,7 +29,19 @@ namespace Build_God_Api.Services.Game private decimal CalculateMaxHP(Character character, Profession? profession) { decimal healthRate = profession?.HealthRate ?? 1m; - return 100 + character.LevelId * character.CurrentExp * 5 * healthRate; + return 5 * character.LevelId * character.LevelId * (decimal)Math.Log((double)(character.CurrentExp + 1000)) * healthRate; + } + + private decimal CalculateAttack(Character character, Profession? profession) + { + decimal attackRate = profession?.AttackRate ?? 1m; + return 1 * character.LevelId * character.LevelId * (decimal)Math.Log((double)(character.CurrentExp + 1000)) * attackRate; + } + + private decimal CalculateDefend(Character character, Profession? profession) + { + decimal defendRate = profession?.DefendRate ?? 1m; + return 0.5m * character.LevelId * character.LevelId * (decimal)Math.Log((double)(character.CurrentExp + 1000)) * defendRate; } public async Task CalculateAttributesAsync(Character character) @@ -45,9 +57,9 @@ namespace Build_God_Api.Services.Game decimal criticalRate = profession?.CriticalRate ?? 1m; decimal maxHP = CalculateMaxHP(character, profession); - decimal attack = 10 + character.LevelId * character.CurrentExp * 2 * attackRate; - decimal defend = character.LevelId * defendRate * 0.5m; - decimal critRate = criticalRate * 0.1m; + decimal attack = CalculateAttack(character, profession); + decimal defend = CalculateDefend(character, profession); + decimal critRate = 0; return new CharacterAttributes { diff --git a/Build_God_Game/src/views/CharacterView.vue b/Build_God_Game/src/views/CharacterView.vue index 77e694d..8b66c88 100644 --- a/Build_God_Game/src/views/CharacterView.vue +++ b/Build_God_Game/src/views/CharacterView.vue @@ -9,6 +9,7 @@ import GlareHover from '@/components/GlareHover/GlareHover.vue' import ElectricBorder from '@/components/ElectricBorder/ElectricBorder.vue' import GlitchText from '@/components/GlitchText/GlitchText.vue' import TextType from '@/components/TextType/TextType.vue' +import StarBorder from '@/components/StarBorder/StarBorder.vue' const router = useRouter() const characterStore = useCharacterStore() @@ -187,10 +188,14 @@ const formatNumber = (num: number) => { @@ -427,6 +432,20 @@ const formatNumber = (num: number) => { font-size: 0.8rem; } +.btn-out { + display: flex; + justify-content: center; + align-items: center; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + padding: 12px 16px; + cursor: pointer; + transition: all 0.2s ease; + height: 100%; + width: 200px; +} + .character-meta { display: flex; justify-content: space-between;