JJBB/Assets/Project/Script/Player/CombatValue.cs
2024-08-23 15:49:34 +08:00

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;
}
}