280 lines
8.2 KiB
C#
280 lines
8.2 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Games.Item;
|
|
using GCGame.Table;
|
|
|
|
public class CombatValue
|
|
{
|
|
|
|
public static int CalculateXilian(List<EquipXilianAttr> exAttr, int equipIdx = -1)
|
|
{
|
|
float combatValue = 0;
|
|
|
|
var equipScores = TableManager.GetEquipScore();
|
|
var equipAttr = TableManager.GetEquipAttrByID(equipIdx, 0);
|
|
int battleRate = 10000;
|
|
if (equipAttr != null)
|
|
{
|
|
battleRate = equipAttr.BattleRate;
|
|
}
|
|
foreach (var xilianAttr in exAttr)
|
|
{
|
|
if (xilianAttr == null)
|
|
continue;
|
|
foreach (var equipScore in equipScores.Values)
|
|
{
|
|
if (xilianAttr.mPropID == equipScore.PropID)
|
|
{
|
|
if (equipScore.PropSubID == xilianAttr.PropSubID)
|
|
{
|
|
var xilianCombatVar = Mathf.RoundToInt(equipScore.BattleScore * xilianAttr.XilianValue);
|
|
combatValue += xilianCombatVar;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var combatOther = TableManager.GetCombatOtherByID(0, 0);
|
|
if (exAttr.Count > 0)
|
|
{
|
|
combatValue += combatOther.GetCiTiaoCombatbyIndex(exAttr.Count - 1);
|
|
}
|
|
|
|
combatValue = (combatValue * battleRate * 0.0001f);
|
|
|
|
return Mathf.RoundToInt(combatValue);
|
|
}
|
|
|
|
|
|
public static int CalculateEquipTotal()
|
|
{
|
|
int combatValue = 0;
|
|
|
|
GameItemContainer EquipPack = GameManager.gameManager.PlayerDataPool.EquipPack;
|
|
for (int index = 0; index < EquipPack.ContainerSize; ++index)
|
|
{
|
|
var equipItem = EquipPack.GetItem(index);
|
|
if (equipItem != null && equipItem.IsValid())
|
|
{
|
|
combatValue += CalculateEquipSingle(EquipPack.GetItem(index));
|
|
}
|
|
}
|
|
|
|
combatValue += CalculateStrengthSuit();
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateMagicXilian(List<EquipXilianAttr> exAttr, int equipIdx = -1)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
var equipScores = TableManager.GetEquipScore().Values;
|
|
var equipAttr = TableManager.GetEquipAttrByID(equipIdx, 0);
|
|
int battleRate = 10000;
|
|
if (equipAttr != null)
|
|
{
|
|
battleRate = equipAttr.BattleRate;
|
|
}
|
|
foreach (var xilianAttr in exAttr)
|
|
{
|
|
foreach (var equipScore in equipScores)
|
|
{
|
|
if (xilianAttr.mPropID == equipScore.PropID)
|
|
{
|
|
if (equipScore.PropSubID == xilianAttr.PropSubID)
|
|
{
|
|
var xilianCombatVar = Mathf.RoundToInt(equipScore.MagicCombat * xilianAttr.XilianValue);
|
|
combatValue += xilianCombatVar;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateMagicSingle(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
combatValue += CalculateMagicBaseAttr(equipItem);
|
|
combatValue += CalculateMagicXilian(equipItem.ExAttrs, equipItem.DataID);
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateMagicBaseAttr(GameItem equipItem)
|
|
{
|
|
var equipTab = TableManager.GetMagicWeaponBaseAttrByID(equipItem.DataID, 0);
|
|
if (equipTab == null)
|
|
return 0;
|
|
|
|
return equipTab.CombatValue;
|
|
}
|
|
|
|
public static int CalculateEquipSingle(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
combatValue += CalculateBaseAttr(equipItem);
|
|
combatValue += CalculateXilian(equipItem.ExAttrs, equipItem.DataID);
|
|
combatValue += CalculateGemOpen(equipItem);
|
|
combatValue += CalculateFrenzy(equipItem);
|
|
combatValue += CalculateStrength(equipItem);
|
|
combatValue += CalculateGemTotal(equipItem);
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateEquipXilianNew(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
combatValue += CalculateBaseAttr(equipItem);
|
|
combatValue += CalculateXilian(equipItem.ExAttrsNew, equipItem.DataID);
|
|
combatValue += CalculateGemOpen(equipItem);
|
|
combatValue += CalculateFrenzy(equipItem);
|
|
combatValue += CalculateStrength(equipItem);
|
|
combatValue += CalculateGemTotal(equipItem);
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateBaseAttr(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
var equipTab = TableManager.GetEquipAttrByID(equipItem.DataID, 0);
|
|
int maxValue = 0;
|
|
float nowValue = 0;
|
|
float kTotal = 0;
|
|
for (int i = 0; i < equipItem.BaseAttrs.Count; ++i)
|
|
{
|
|
nowValue = equipItem.BaseAttrs[i]._OrgValue;
|
|
maxValue = equipTab.GetPropValuebyIndex(i);
|
|
kTotal += nowValue / maxValue;
|
|
}
|
|
float k = kTotal / equipItem.BaseAttrs.Count;
|
|
combatValue = Mathf.RoundToInt(equipTab.CombatValue + k * equipTab.CombatMax);
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
// 计算狂化对装备战力的影响
|
|
public static int CalculateFrenzy(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
if (equipItem.IsFrenzy)
|
|
{
|
|
Tab_CommonItem itemTab = TableManager.GetCommonItemByID(equipItem.DataID, 0);
|
|
var tab = TableManager.GetEquipFrenzy().Values;
|
|
foreach (var kv in tab)
|
|
{
|
|
if ((int)equipItem.GetQuality() == kv.Quality
|
|
&& itemTab.MinLevelRequire >= kv.EquipLevelMin
|
|
&& itemTab.MinLevelRequire <= kv.EquipLevelMax)
|
|
{
|
|
combatValue = kv.FrenzyCombat;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateGemOpen(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
int gemOpen = 0;
|
|
foreach (var gemInfo in equipItem.GemItems)
|
|
{
|
|
if (gemInfo.IsOpen)
|
|
{
|
|
++gemOpen;
|
|
}
|
|
}
|
|
|
|
if (gemOpen > 0)
|
|
{
|
|
var combatOther = TableManager.GetCombatOtherByID(0, 0);
|
|
combatValue = combatOther.GetEquipHoleCombatbyIndex(gemOpen - 1);
|
|
}
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateStrength(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
int strengthPerfect = 0;
|
|
for (int i = 0; i < equipItem.StrengPerfect.Count; ++i)
|
|
{
|
|
strengthPerfect += equipItem.StrengPerfect[i];
|
|
}
|
|
|
|
var EquipEnchanceRandRate = TableManager.GetEquipEnchanceRandRateByID(equipItem.EnchanceLevel, 0);
|
|
if (EquipEnchanceRandRate != null)
|
|
{
|
|
combatValue = (int)(strengthPerfect * EquipEnchanceRandRate.EquipEnchanceGrade);
|
|
}
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateStrengthSuit()
|
|
{
|
|
int combatValue = 0;
|
|
|
|
var suitID = GameManager.gameManager.PlayerDataPool.EquipSuitID;
|
|
if (suitID > 0)
|
|
{
|
|
var equipEnhanceSuit = TableManager.GetEquipEnchanceSuitByID(suitID, 0);
|
|
combatValue = equipEnhanceSuit.CombatValue;
|
|
}
|
|
|
|
return combatValue;
|
|
}
|
|
|
|
public static int CalculateGemTotal(GameItem equipItem)
|
|
{
|
|
int combatValue = 0;
|
|
|
|
int equipPos = equipItem.GetEquipSlotIndex();
|
|
for (int i = 0; i < equipItem.GemItems.Count; ++i)
|
|
{
|
|
var propTab = equipItem.GemItems[i].GetGemPropTab(equipPos);
|
|
if (propTab != null)
|
|
{
|
|
combatValue += propTab.CombatValue;
|
|
}
|
|
|
|
}
|
|
|
|
int combat = 0;
|
|
if (equipItem._GemSuit1 > 0)
|
|
{
|
|
|
|
var normalSuitTab = TableManager.GetGemSuitByID(equipItem._GemSuit1);
|
|
combat += normalSuitTab.CombatValue;
|
|
}
|
|
|
|
if (equipItem._GemSuit2 > 0)
|
|
{
|
|
var eliteSuitTab = TableManager.GetGemSuitByID(equipItem._GemSuit2);
|
|
combat += eliteSuitTab.CombatValue;
|
|
}
|
|
|
|
if (equipItem._GemSuit3 > 0)
|
|
{
|
|
var eliteSuitTab = TableManager.GetGemSuitByID(equipItem._GemSuit3);
|
|
combat += eliteSuitTab.CombatValue;
|
|
}
|
|
combatValue += combat;
|
|
|
|
return combatValue;
|
|
}
|
|
}
|