371 lines
7.1 KiB
C#
371 lines
7.1 KiB
C#
![]() |
// ***********************************************************************
|
|||
|
// 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],
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|