shaoxiadiablo/Assets/AGame/Scripts/Game/CombatAttribute.cs

371 lines
7.1 KiB
C#
Raw Normal View History

2025-05-18 01:04:31 +08:00
// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-12-17
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "CombatAttribute" company="Kunpo"></copyright>
// <summary></summary>
// ***********************************************************************
using System.Collections.Generic;
using CodeStage.AntiCheat.ObscuredTypes;
namespace G
{
/// <summary>
/// 战斗属性类型
/// </summary>
public enum CombatAttributeId : byte
{
None = 0,
/// <summary>
/// 生命上限
/// </summary>
HpPercent = 1,
AttackPercent = 2,
DefencePercent = 3,
/// <summary>
/// 生命上限
/// </summary>
Hp = 4,
//Mp = 2,
/// <summary>
/// 攻击
/// </summary>
Attack = 5,
/// <summary>
/// 防御
/// </summary>
Defence = 6,
/// <summary>
/// 每秒回复
/// </summary>
HpRecoverPercent = 7,
/// <summary>
/// 每秒回复
/// </summary>
HpRecover = 8,
/// <summary>
///
/// </summary>
= 9,
/// <summary>
/// 命中率%
/// </summary>
HitRate = 10,
/// <summary>
/// 命中率%
/// </summary>
Hit = 11,
/// <summary>
/// 闪躲%
/// </summary>
EvasionRate = 12,
/// <summary>
/// 闪避
/// </summary>
Evasion = 24,
//HitResistRate = 102,//命中减免率
/// <summary>
/// 击杀恢复生命值%
/// </summary>
KillHpRecoverPercent = 13,
/// <summary>
/// 击杀恢复生命值
/// </summary>
KillHpRecover = 14,
/// <summary>
/// 免伤固定值
/// </summary>
BlockF = 20,
/// <summary>
/// 格挡率免伤 %
/// </summary>
BlockRate = 21,
/// <summary>
///
/// </summary>
= 22,
/// <summary>
///
/// </summary>
= 23,
/// <summary>
/// 格挡减免率
/// </summary>
BlockResistRate = 25,
//BlockReduceRate = 109,//格挡减伤比例
//Crit = 4,//暴击
//CritResist = 2,//暴击减免
//CritHurt = 26,//暴伤
//CritHurtResist = 26,//暴伤减免
/// <summary>
/// 暴击率
/// </summary>
CritRate = 15,
/// <summary>
/// 暴击
/// </summary>
Crit = 29,
//CritResistRate = 106,//暴击减免率
/// <summary>
/// 暴伤率
/// </summary>
CritDamageRate = 16,
/// <summary>
/// 冷却减少
/// </summary>
Cooldown = 17,
/// <summary>
/// 击杀减少冷却
/// </summary>
KillCooldown = 18,
//CritHurtResistRate = 25,//暴伤减免比例
/// <summary>
/// 攻速
/// </summary>
AttackSpeed = 19,
/// <summary>
/// 金钱掉落增加
/// </summary>
CoinDropAdd = 26,
//金币强化消耗减少
CoinUpgradeCostReduce = 27,
/// <summary>
///
/// </summary>
= 28,
ElementNone = 30,
/// <summary>
/// 火元素伤害
/// </summary>
ElementFire = 31,
/// <summary>
/// 冰元素伤害
/// </summary>
ElementIce = 32,
/// <summary>
/// 雷元素伤害
/// </summary>
ElementLightning = 33,
/// <summary>
/// 毒元素伤害
/// </summary>
ElementCurse = 34,
//ElementMu = 35,//金元素伤害
VampiricPercent = 36,// 吸血%
Vampiric = 37,//吸血固定值
StageHpRecoverPercent = 38,//过关血量恢复%
StageHpRecover = 39,////过关血量恢复
= 40,
kMin = 1, //最小属性
kMax = 64//最大属性
}
/// <summary>
/// 战斗属性
/// </summary>
public struct CombatAttribute
{
/// <summary>
///
/// </summary>
public CombatAttributeId id;
/// <summary>
///
/// </summary>
private ObscuredInt _value;
/// <summary>
/// 数值
/// </summary>
public int value
{
get { return _value; }
set { _value = value; }
}
/// <summary>
/// 战斗值
/// </summary>
public int combatValue
{
get { return value > 0 ? this.CalcCombatValue() : 0; }
}
/// <summary>
///
/// </summary>
public int maxValue => item.maxValue;
/// <summary>
///
/// </summary>
/// <param name="v"></param>
public void AddValue(int v)
{
this.value += v;
}
/// <summary>
///
/// </summary>
/// <param name="v"></param>
public void SubValue(int v)
{
this.value -= v;
}
/// <summary>
///
/// </summary>
public void ResetValue()
{
this.value = 0;
}
/// <summary>
///
/// </summary>
public string name
{
get { return item.name; }
}
/// <summary>
///
/// </summary>
public ItemAttribute item
{
get { return ItemProxy.Instance.GetStaticItem<ItemAttribute>((int)id); }
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public int CalcCombatValue()
{
var item = this.item;
if (item != null)
{
return value * item.combat[1];
}
return 0;
}
public int CalcCombatValue(int factor)
{
var item = this.item;
if (item != null)
{
if (factor > 0 && item.combat.Length == 3)
{
return value * (item.combat[1] + factor * item.combat[2]);
}
return value * item.combat[1];
}
return 0;
}
static string _Format;
public override string ToString()
{
var item = this.item;
if (item != null)
{
if (_Format == null)
_Format = KLocalization.GetLocalString(80);
var vs = item.type == 1 ? value + "%" : value.ToString();
var result = string.Format(_Format, name, vs);
#if UNITY_EDITOR
if (string.IsNullOrEmpty(result))
result = $"description error id:{item.id}";
#endif
return result;
}
return $"{this.id} not exist item.";
}
static string _Format2;
public string ToString2()
{
var item = this.item;
if (item != null)
{
if (_Format2 == null)
_Format2 = KLocalization.GetLocalString(81);
var vs = item.type == 1 ? value + "%" : value.ToString();
var result = string.Format(_Format2, name, vs);
return result;
}
return $"{this.id} not exist item.";
}
static string _Format3;
/// <summary>
/// 境界
/// </summary>
/// <returns></returns>
public string ToString3()
{
var item = this.item;
if (item != null)
{
if (_Format3 == null)
_Format3 = KLocalization.GetLocalString(82);
var vs = item.type == 1 ? value + "%" : value.ToString();
var result = string.Format(_Format3, name, vs);
return result;
}
return $"{this.id} not exist item.";
}
public static CombatAttribute Convert(int[] sources)
{
if (sources != null && sources.Length > 1)
return new CombatAttribute
{
id = (CombatAttributeId)sources[0],
value = sources[1],
};
return default;
}
public static void Convert(int[][] sources, List<CombatAttribute> results)
{
if (sources != null)
for (int i = 0; i < sources.Length; i++)
{
results.Add(new CombatAttribute
{
id = (CombatAttributeId)sources[i][0],
value = sources[i][1],
});
}
}
public static void AddTo(int[] source, List<CombatAttribute> results)
{
if (source != null && source.Length >= 2)
results.Add(new CombatAttribute
{
id = (CombatAttributeId)source[0],
value = source[1],
});
}
}
}