Browse Source

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

master
hanqin 3 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.0 防御系数 * 1.0 生命系数 * 1.5 暴击系数 * 0.95
## 打坐 🧘 ## 打坐 🧘
结算公式:基础系数 × 等级 × 等级 × (1 + buff) × 秒数 结算公式:0.02 * lv^1.5 * seconds;
--基础系数:一个很小的数字,用于整体平衡,比如0.2、0.5或者1,我设定得1,后面再调整
--buff:加成
## 等级 ## 等级
每一级得最小经验门槛儿计算: 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) private decimal CalculateMaxHP(Character character, Profession? profession)
{ {
decimal healthRate = profession?.HealthRate ?? 1m; 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) public async Task<CharacterAttributes> CalculateAttributesAsync(Character character)
@ -45,9 +57,9 @@ namespace Build_God_Api.Services.Game
decimal criticalRate = profession?.CriticalRate ?? 1m; decimal criticalRate = profession?.CriticalRate ?? 1m;
decimal maxHP = CalculateMaxHP(character, profession); decimal maxHP = CalculateMaxHP(character, profession);
decimal attack = 10 + character.LevelId * character.CurrentExp * 2 * attackRate; decimal attack = CalculateAttack(character, profession);
decimal defend = character.LevelId * defendRate * 0.5m; decimal defend = CalculateDefend(character, profession);
decimal critRate = criticalRate * 0.1m; decimal critRate = 0;
return new CharacterAttributes 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 ElectricBorder from '@/components/ElectricBorder/ElectricBorder.vue'
import GlitchText from '@/components/GlitchText/GlitchText.vue' import GlitchText from '@/components/GlitchText/GlitchText.vue'
import TextType from '@/components/TextType/TextType.vue' import TextType from '@/components/TextType/TextType.vue'
import StarBorder from '@/components/StarBorder/StarBorder.vue'
const router = useRouter() const router = useRouter()
const characterStore = useCharacterStore() const characterStore = useCharacterStore()
@ -187,10 +188,14 @@ const formatNumber = (num: number) => {
</div> </div>
<div class="page-footer"> <div class="page-footer">
<GlareHover width="120px" height="36px" background="transparent" border-radius="18px" <StarBorder
border-color="rgba(255,255,255,0.1)" glare-color="#ffffff" :glare-opacity="0.1" @click="handleLogout"> as="div"
<span class="logout-text">退出登录</span> color="#e63d3d"
</GlareHover> speed="3s"
:thickness="3"
><div class="btn-out">
退出登录
</div></StarBorder>
</div> </div>
</div> </div>
@ -427,6 +432,20 @@ const formatNumber = (num: number) => {
font-size: 0.8rem; 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 { .character-meta {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;

Loading…
Cancel
Save