Browse Source

增加一个暴击伤害的属性

master
hanqin 1 week ago
parent
commit
5567ef2d41
  1. 2
      Build_God_Api/Build_God_Api/DB/Equipment.cs
  2. 21
      Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs

2
Build_God_Api/Build_God_Api/DB/Equipment.cs

@ -116,7 +116,7 @@ namespace Build_God_Api.DB
/// </summary> /// </summary>
public int RequirdLevelId { get; set; } public int RequirdLevelId { get; set; }
/// <summary> /// <summary>
/// 套装ID /// 套装ID
/// </summary> /// </summary>
[SugarColumn(IsNullable = true)] [SugarColumn(IsNullable = true)]

21
Build_God_Api/Build_God_Api/Services/Game/CharacterAttributeCalculateService.cs

@ -29,6 +29,8 @@ namespace Build_God_Api.Services.Game
public decimal CriticalRate { get; set; } public decimal CriticalRate { get; set; }
public decimal BaseCriticalRate { get; set; } public decimal BaseCriticalRate { get; set; }
public decimal BonusCriticalRate { get; set; } public decimal BonusCriticalRate { get; set; }
public decimal BaseCriticalDamage { get; set; }
public decimal BonusCriticalDamage { get; set; }
} }
public class CharacterAttributeCalculateService(ISqlSugarClient context): ICharacterAttributeCalculateService public class CharacterAttributeCalculateService(ISqlSugarClient context): ICharacterAttributeCalculateService
@ -77,7 +79,7 @@ namespace Build_God_Api.Services.Game
return (attackBonus, defendBonus, hpBonus); return (attackBonus, defendBonus, hpBonus);
} }
private async Task<(decimal AttackBonus, decimal DefendBonus, decimal HPBonus, decimal CriticalBonus)> CalculateEquipmentBonusAsync(int characterBagId) private async Task<(decimal AttackBonus, decimal DefendBonus, decimal HPBonus, decimal CriticalBonus, decimal CriticalDamageBonus)> CalculateEquipmentBonusAsync(int characterBagId)
{ {
var equipmentInstances = await _context.Queryable<EquipmentInstance>() var equipmentInstances = await _context.Queryable<EquipmentInstance>()
.Where(x => x.CharacterBagId == characterBagId) .Where(x => x.CharacterBagId == characterBagId)
@ -87,6 +89,7 @@ namespace Build_God_Api.Services.Game
decimal defendBonus = 0; decimal defendBonus = 0;
decimal hpBonus = 0; decimal hpBonus = 0;
decimal criticalBonus = 0; decimal criticalBonus = 0;
decimal criticalDamage = 0;
foreach (var instance in equipmentInstances) foreach (var instance in equipmentInstances)
{ {
@ -117,9 +120,12 @@ namespace Build_God_Api.Services.Game
break; break;
case EquipmentAttributeType.HealthBonusPercent: case EquipmentAttributeType.HealthBonusPercent:
break; break;
case EquipmentAttributeType.CriticalPercent: case EquipmentAttributeType.CriticalRate:
criticalBonus += attr.Value; criticalBonus += attr.Value;
break; break;
case EquipmentAttributeType.CriticalDamage:
criticalDamage += attr.Value;
break;
} }
} }
} }
@ -129,7 +135,7 @@ namespace Build_God_Api.Services.Game
} }
} }
return (attackBonus, defendBonus, hpBonus, criticalBonus); return (attackBonus, defendBonus, hpBonus, criticalBonus, criticalDamage);
} }
public async Task<CharacterAttributes> CalculateAttributesAsync(Character character) public async Task<CharacterAttributes> CalculateAttributesAsync(Character character)
@ -144,22 +150,25 @@ namespace Build_God_Api.Services.Game
decimal baseAttack = CalculateAttack(character, profession); decimal baseAttack = CalculateAttack(character, profession);
decimal baseDefend = CalculateDefend(character, profession); decimal baseDefend = CalculateDefend(character, profession);
decimal baseCritical = 0; decimal baseCritical = 0;
decimal baseCriticalDamage = 0;
decimal bonusAttack = 0; decimal bonusAttack = 0;
decimal bonusDefend = 0; decimal bonusDefend = 0;
decimal bonusHP = 0; decimal bonusHP = 0;
decimal bonusCritical = 0; decimal bonusCritical = 0;
decimal bonusCriticalDamage = 0;
var characterBag = await _context.Queryable<CharacterBag>().FirstAsync(x => x.CharacterId == character.Id); var characterBag = await _context.Queryable<CharacterBag>().FirstAsync(x => x.CharacterId == character.Id);
if (characterBag != null) if (characterBag != null)
{ {
var (scrapAttack, scrapDefend, scrapHP) = await CalculateScrapBonusAsync(characterBag.Id); var (scrapAttack, scrapDefend, scrapHP) = await CalculateScrapBonusAsync(characterBag.Id);
var (equipAttack, equipDefend, equipHP, equipCritical) = await CalculateEquipmentBonusAsync(characterBag.Id); var (equipAttack, equipDefend, equipHP, equipCritical,equipmentCriticalDamage) = await CalculateEquipmentBonusAsync(characterBag.Id);
bonusAttack = scrapAttack + equipAttack; bonusAttack = scrapAttack + equipAttack;
bonusDefend = scrapDefend + equipDefend; bonusDefend = scrapDefend + equipDefend;
bonusHP = scrapHP + equipHP; bonusHP = scrapHP + equipHP;
bonusCritical = equipCritical; bonusCritical = equipCritical;
bonusCriticalDamage = equipmentCriticalDamage;
} }
return new CharacterAttributes return new CharacterAttributes
@ -176,7 +185,9 @@ namespace Build_God_Api.Services.Game
BonusDefend = bonusDefend, BonusDefend = bonusDefend,
CriticalRate = baseCritical + bonusCritical, CriticalRate = baseCritical + bonusCritical,
BaseCriticalRate = baseCritical, BaseCriticalRate = baseCritical,
BonusCriticalRate = bonusCritical BonusCriticalRate = bonusCritical,
BaseCriticalDamage = baseCriticalDamage,
BonusCriticalDamage = bonusCriticalDamage
}; };
} }

Loading…
Cancel
Save