Browse Source

调整攻击力、防御力、血量的计算公式

master
hanqin 2 days ago
parent
commit
0d7b65c486
  1. 11
      Build_God_Api/Build_God_Api/MarkDown.md
  2. 20
      Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs
  3. 27
      Build_God_Game/src/views/CharacterView.vue

11
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(职业的防御力系数)
- 暴击:从装备获取,和等级没关联

20
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<CharacterAttributes> 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
{

27
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) => {
</div>
<div class="page-footer">
<GlareHover width="120px" height="36px" background="transparent" border-radius="18px"
border-color="rgba(255,255,255,0.1)" glare-color="#ffffff" :glare-opacity="0.1" @click="handleLogout">
<span class="logout-text">退出登录</span>
</GlareHover>
<StarBorder
as="div"
color="#e63d3d"
speed="3s"
:thickness="3"
><div class="btn-out">
退出登录
</div></StarBorder>
</div>
</div>
@ -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;

Loading…
Cancel
Save