You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
676 lines
26 KiB
676 lines
26 KiB
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Org.BouncyCastle.Bcpg;
|
|
using Sog;
|
|
using ProtoCSStruct;
|
|
using Google.Protobuf.WellKnownTypes;
|
|
|
|
|
|
namespace Game
|
|
{
|
|
public class EquipmentSvc
|
|
{
|
|
public static void OnPlayerOnline(PlayerOnGame player)
|
|
{
|
|
UpdateEquipEnchant(player, GameServerUtils.GetTimeSecond(), false);
|
|
}
|
|
public static void OnPlayerBorn(PlayerOnGame player)
|
|
{
|
|
//15 仓库 仓库解锁消耗道具数量(0为默认解锁) 0;10000;10000;10000
|
|
//16 仓库 仓库解锁消耗道具id Gold
|
|
var list = CommParamDescMgr.Instance.WareRoomCostNum.int_list;
|
|
for(int i = 0; i < list.Length;i++)
|
|
{
|
|
var g = list[i];
|
|
if(g == 0)
|
|
{
|
|
player.RoleData.PandoraBag.EuqipDepotCount++;
|
|
}
|
|
}
|
|
if(CommParamDescMgr.Instance.DefaultWeapon.str_list.Length > 0)
|
|
{
|
|
var eidx = AddEquip(player, CommParamDescMgr.Instance.DefaultWeapon.str_list[0] + "");
|
|
if (eidx >= 0)
|
|
{
|
|
WearEquip(player, eidx, (int)EquipmentPos.LeftGun, false);
|
|
}
|
|
if(CommParamDescMgr.Instance.DefaultWeapon.str_list.Length > 1)
|
|
{
|
|
eidx = AddEquip(player, CommParamDescMgr.Instance.DefaultWeapon.str_list[1] + "");
|
|
if (eidx >= 0)
|
|
{
|
|
WearEquip(player, eidx, (int)EquipmentPos.RightGun, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
//string str = "Helm_1001;Helm_1003;Armo_1003;Armo_1004;Glov_1002;Glov_1003;Trou_1002;Trou_1004;Shoe_1001;Shoe_1003;Atta_1001;Atta_1003;Acce_1003;Acce_1004;Chip_1002;Chip_1004;Chip_1006;Chip_1007;Chip_1008;Chip_1010;Chip_1012;721001;723001;725001;725002;731001;733001;735001;735002;761001;763001;765001;765002;741001;743001;745001;745002;711001;713001;715001;715002;751001;753001;755001;755002";
|
|
//var arr = str.Split(";");
|
|
//foreach(var s in arr)
|
|
//{
|
|
// AddEquip(player, s);
|
|
//}
|
|
|
|
}
|
|
|
|
public static bool IsValidEquip(ref DBEquipment equip)
|
|
{
|
|
if (equip.DescId == 0 || equip.Level <= 0 || equip.AddProp.Count == 0)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//if (! IsValidQuality(equip.Quality))
|
|
//{
|
|
// return false;
|
|
//}
|
|
|
|
//if (! IsValidPos(equip.Pos))
|
|
//{
|
|
// return false;
|
|
//}
|
|
|
|
return true;
|
|
}
|
|
|
|
// public static bool IsValidPos(int pos)
|
|
// {
|
|
// return (int) EquipmentPos.None < pos && pos < (int) EquipmentPos.Max;
|
|
// }
|
|
|
|
public static CSErrCode WearEquip(PlayerOnGame player, int equipId, int pos = -1, bool isNotify = true, bool calcProp = true)
|
|
{
|
|
if (pos <= (int)EquipmentPos.None && pos != -1 || pos >= (int)EquipmentPos.Max)
|
|
{
|
|
return CSErrCode.Fail;
|
|
}
|
|
|
|
//穿戴
|
|
var equip = new DBEquipment() { SerialNum = -1 };
|
|
int idx = -1;
|
|
for (int i = 0; i < player.RoleData.PandoraBag.EquipList.Count; i++)
|
|
{
|
|
ref var eq = ref player.RoleData.PandoraBag.EquipList[i];
|
|
if (eq.SerialNum == equipId)
|
|
{
|
|
equip.CopyFrom(ref eq);
|
|
idx = i;
|
|
break;
|
|
}
|
|
}
|
|
if (idx != -1)
|
|
{
|
|
var desc = EquipDescMgr.Instance.GetConfigByInternal(equip.DescId);
|
|
if (pos == (int)EquipmentPos.RightGun)
|
|
{
|
|
if (desc.type != EquipType.Support)
|
|
{
|
|
return CSErrCode.Fail;
|
|
}
|
|
}
|
|
if(pos == -1)
|
|
{
|
|
pos = (int)desc.type;
|
|
}
|
|
int existIndex = -1;
|
|
//var del = new CSEquipDelSync();
|
|
for (int i = 0; i < player.RoleData.Knight.DbHero.WearEquip.Count; i++)
|
|
{
|
|
ref var eq = ref player.RoleData.Knight.DbHero.WearEquip[i];
|
|
if (eq.Pos == pos)
|
|
{
|
|
existIndex = i;
|
|
//del.DelIds.Add(eq.SerialNum);
|
|
break;
|
|
}
|
|
}
|
|
//先删除背包
|
|
player.RoleData.PandoraBag.EquipList.RemoveAt(idx);
|
|
var add = new CSEquipSync();
|
|
if (existIndex != -1)
|
|
{
|
|
ref var eeq = ref player.RoleData.Knight.DbHero.WearEquip[existIndex];
|
|
eeq.Pos = 0;
|
|
eeq.NewGet = false;
|
|
player.RoleData.PandoraBag.EquipList.Add(ref eeq);
|
|
add.Add.CopyFrom(ref eeq);
|
|
player.RoleData.Knight.DbHero.WearEquip.RemoveAt(existIndex);
|
|
|
|
|
|
}
|
|
|
|
equip.Pos = pos;
|
|
player.RoleData.Knight.DbHero.WearEquip.Add(ref equip);
|
|
if(pos == (int)EquipmentPos.LeftGun )
|
|
{
|
|
player.RoleData.Knight.DbHero.Weapon1 = equip.DescId;
|
|
}
|
|
CheckEquipSuit(ref player.RoleData.Knight.DbHero);
|
|
if (calcProp)
|
|
{
|
|
RolePropUtil.RecalRoleProp(player);
|
|
}
|
|
if (isNotify)
|
|
{
|
|
PlayerDataSvc.SendHeroInfoSync(player);
|
|
//PlayerDataSvc.SendEquipListSync(player);
|
|
|
|
//player.SendToClient((int)CSGameMsgID.EquipDelSync, ref del);
|
|
if (existIndex != -1)
|
|
{
|
|
player.SendToClient((int)CSGameMsgID.EquipSync, ref add);
|
|
}
|
|
|
|
}
|
|
return CSErrCode.None;
|
|
}
|
|
return CSErrCode.Fail;
|
|
}
|
|
|
|
|
|
public static CSErrCode UnWearEquip(PlayerOnGame player, int pos, bool notify = false, bool calcProp = false)
|
|
{
|
|
int existIndex = -1;
|
|
for (int i = 0; i < player.RoleData.Knight.DbHero.WearEquip.Count; i++)
|
|
{
|
|
ref var eq = ref player.RoleData.Knight.DbHero.WearEquip[i];
|
|
if (eq.Pos == pos)
|
|
{
|
|
existIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
if (existIndex != -1)
|
|
{
|
|
ref var eeq = ref player.RoleData.Knight.DbHero.WearEquip[existIndex];
|
|
eeq.Pos = 0;
|
|
eeq.NewGet = false;
|
|
player.RoleData.PandoraBag.EquipList.Add(ref eeq);
|
|
if (notify)
|
|
{
|
|
var add = new CSEquipSync();
|
|
add.Add.CopyFrom(ref eeq);
|
|
player.SendToClient((int)CSGameMsgID.EquipSync, ref add);
|
|
}
|
|
player.RoleData.Knight.DbHero.WearEquip.RemoveAt(existIndex);
|
|
|
|
EquipmentSvc.CheckEquipSuit(ref player.RoleData.Knight.DbHero);
|
|
if (calcProp)
|
|
{
|
|
RolePropUtil.RecalRoleProp(player);
|
|
}
|
|
|
|
if (notify)
|
|
{
|
|
PlayerDataSvc.SendHeroInfoSync(player);
|
|
}
|
|
|
|
|
|
return CSErrCode.None;
|
|
|
|
|
|
}
|
|
return CSErrCode.Fail;
|
|
}
|
|
|
|
private static long CalcEquipPropScore(ref ID32Value64 iD)
|
|
{
|
|
var config = CSPropIDTypeDescMgr.Instance.GetById(iD.Id);
|
|
if(config != null)
|
|
{
|
|
return (long)(config.scoreNum / 10_000F * iD.Value/10_000);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static int CreateEquipProp(PlayerOnGame player, int level, CommonQuality quality, ref DBEquipment equip, long lucky = 0)
|
|
{
|
|
equip.AddProp.Clear();
|
|
equip.BaseProp.Clear();
|
|
var rand = GameServerUtils.GetApp().Rand;
|
|
EquipDesc equipDesc = EquipDescMgr.Instance.GetConfigByInternal(equip.DescId);
|
|
equip.Level = equipDesc.level;
|
|
equip.Pos = 0;
|
|
equip.Quality = (int)equipDesc.quality;
|
|
equip.NewGet = true;
|
|
equip.Lock = false;
|
|
long atk = 0;
|
|
long propscore = 0;
|
|
{
|
|
Dictionary<string, bool> excludeS = new Dictionary<string, bool>();
|
|
//{
|
|
// equipDesc.GetSkillAttr11(rand, out var propId, out var propValue, excludeS, lucky);
|
|
// if (!string.IsNullOrEmpty(propId))
|
|
// {
|
|
// ID32Value64 iD = new ID32Value64();
|
|
// iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
// iD.Value = propValue;
|
|
// equip.SkillProp.Add(ref iD);
|
|
// excludeS.Add(propId, true);
|
|
// propscore += CalcEquipPropScore(ref iD);
|
|
// }
|
|
//}
|
|
//{
|
|
// equipDesc.GetSkillAttr12(rand, out var propId, out var propValue, excludeS, lucky);
|
|
// if (!string.IsNullOrEmpty(propId))
|
|
// {
|
|
// ID32Value64 iD = new ID32Value64();
|
|
// iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
// iD.Value = propValue;
|
|
// equip.SkillProp.Add(ref iD);
|
|
// excludeS.Add(propId, true);
|
|
// propscore += CalcEquipPropScore(ref iD);
|
|
// }
|
|
//}
|
|
//{
|
|
// equipDesc.GetSkillAttr13(rand, out var propId, out var propValue, excludeS, lucky);
|
|
// if (!string.IsNullOrEmpty(propId))
|
|
// {
|
|
// ID32Value64 iD = new ID32Value64();
|
|
// iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
// iD.Value = propValue;
|
|
// equip.SkillProp.Add(ref iD);
|
|
// excludeS.Add(propId, true);
|
|
// propscore += CalcEquipPropScore(ref iD);
|
|
// }
|
|
//}
|
|
}
|
|
var es = equipDesc.GetRandomElement(rand);
|
|
switch (es)
|
|
{
|
|
case "Fire":
|
|
equip.Element = (int)ElementType.Fire;
|
|
break;
|
|
case "Thunder":
|
|
equip.Element = (int)ElementType.Thunder;
|
|
break;
|
|
case "Toxic":
|
|
equip.Element = (int)ElementType.Toxic;
|
|
break;
|
|
default:
|
|
equip.Element = (int)ElementType.None;
|
|
break;
|
|
}
|
|
equip.DepotId = 0;
|
|
equip.Score = 0;
|
|
|
|
{
|
|
var propValue = 0L;
|
|
var propId = "";
|
|
var max = false;
|
|
int c = 0;
|
|
do
|
|
{
|
|
List<RewardItemRW> rlist = RewardSvc.Reward(player, equipDesc.baseAttr, false, false);
|
|
if (rlist.Count > 0)
|
|
{
|
|
var r = rlist[0];
|
|
EquipAttrDesc equipAttrDesc = EquipAttrDescMgr.Instance.GetConfig(r.code);
|
|
propValue = equipAttrDesc.GetPropValue(rand, lucky, out var max_);
|
|
propId = equipAttrDesc.mainAttr;
|
|
if (!string.IsNullOrEmpty(propId))
|
|
{
|
|
max = max_;
|
|
break;
|
|
}
|
|
}
|
|
} while (c++ < 50);
|
|
PropValue iD = new PropValue();
|
|
iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
iD.Value = propValue;
|
|
iD.Max = max;
|
|
equip.BaseProp.Add(ref iD);
|
|
//propscore += CalcEquipPropScore(ref iD);
|
|
if (propId.Equals("AtkFix"))
|
|
{
|
|
atk = propValue;
|
|
}
|
|
}
|
|
Dictionary<string, bool> exclude = new Dictionary<string, bool>();
|
|
{
|
|
var propValue = 0L;
|
|
var propId = "";
|
|
var max = false;
|
|
int c = 0;
|
|
do
|
|
{
|
|
List<RewardItemRW> rlist = RewardSvc.Reward(player, equipDesc.randomAttr1, false, false);
|
|
if (rlist.Count > 0)
|
|
{
|
|
var r = rlist[0];
|
|
EquipAttrDesc equipAttrDesc = EquipAttrDescMgr.Instance.GetConfig(r.code);
|
|
propValue = equipAttrDesc.GetPropValue(rand, lucky, out var max_);
|
|
if (exclude != null && exclude.ContainsKey(equipAttrDesc.mainAttr))
|
|
{
|
|
continue;
|
|
}
|
|
propId = equipAttrDesc.mainAttr;
|
|
max = max_;
|
|
exclude.Add(propId, true);
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
} while(c++ < 20);
|
|
if (!string.IsNullOrEmpty(propId))
|
|
{
|
|
{
|
|
PropValue iD = new PropValue();
|
|
iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
iD.Value = propValue;
|
|
iD.Max = max;
|
|
equip.AddProp.Add(ref iD);
|
|
//propscore += CalcEquipPropScore(ref iD);
|
|
if (propId.Equals("AtkFix"))
|
|
{
|
|
atk += propValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
var propValue = 0L;
|
|
var propId = "";
|
|
var max = false;
|
|
int c = 0;
|
|
do
|
|
{
|
|
List<RewardItemRW> rlist = RewardSvc.Reward(player, equipDesc.randomAttr2, false, false);
|
|
if (rlist.Count > 0)
|
|
{
|
|
var r = rlist[0];
|
|
EquipAttrDesc equipAttrDesc = EquipAttrDescMgr.Instance.GetConfig(r.code);
|
|
propValue = equipAttrDesc.GetPropValue(rand, lucky, out var max_);
|
|
if (exclude != null && exclude.ContainsKey(equipAttrDesc.mainAttr))
|
|
{
|
|
continue;
|
|
}
|
|
propId = equipAttrDesc.mainAttr;
|
|
exclude.Add(propId, true);
|
|
max = max_;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
} while (c++ < 20);
|
|
if (!string.IsNullOrEmpty(propId))
|
|
{
|
|
{
|
|
PropValue iD = new PropValue();
|
|
iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
iD.Value = propValue;
|
|
iD.Max = max;
|
|
equip.AddProp.Add(ref iD);
|
|
//propscore += CalcEquipPropScore(ref iD);
|
|
if (propId.Equals("AtkFix"))
|
|
{
|
|
atk += propValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
var propValue = 0L;
|
|
var propId = "";
|
|
var max = false;
|
|
int c = 0;
|
|
do
|
|
{
|
|
List<RewardItemRW> rlist = RewardSvc.Reward(player, equipDesc.randomAttr3, false, false);
|
|
if (rlist.Count > 0)
|
|
{
|
|
var r = rlist[0];
|
|
EquipAttrDesc equipAttrDesc = EquipAttrDescMgr.Instance.GetConfig(r.code);
|
|
propValue = equipAttrDesc.GetPropValue(rand, lucky, out var max_);
|
|
if (exclude != null && exclude.ContainsKey(equipAttrDesc.mainAttr))
|
|
{
|
|
continue;
|
|
}
|
|
propId = equipAttrDesc.mainAttr;
|
|
exclude.Add(propId, true);
|
|
max = max_;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
} while (c++ < 20);
|
|
if (!string.IsNullOrEmpty(propId))
|
|
{
|
|
{
|
|
PropValue iD = new PropValue();
|
|
iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
iD.Value = propValue;
|
|
iD.Max = max;
|
|
equip.AddProp.Add(ref iD);
|
|
//propscore += CalcEquipPropScore(ref iD);
|
|
if (propId.Equals("AtkFix"))
|
|
{
|
|
atk += propValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{
|
|
var propValue = 0L;
|
|
var propId = "";
|
|
var max = false;
|
|
int c = 0;
|
|
do
|
|
{
|
|
List<RewardItemRW> rlist = RewardSvc.Reward(player, equipDesc.randomAttr4, false, false);
|
|
if (rlist.Count > 0)
|
|
{
|
|
var r = rlist[0];
|
|
EquipAttrDesc equipAttrDesc = EquipAttrDescMgr.Instance.GetConfig(r.code);
|
|
propValue = equipAttrDesc.GetPropValue(rand, lucky, out var max_);
|
|
if (exclude != null && exclude.ContainsKey(equipAttrDesc.mainAttr))
|
|
{
|
|
continue;
|
|
}
|
|
propId = equipAttrDesc.mainAttr;
|
|
exclude.Add(propId, true);
|
|
max = max_;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
} while (c++ < 20);
|
|
if (!string.IsNullOrEmpty(propId))
|
|
{
|
|
{
|
|
PropValue iD = new PropValue();
|
|
iD.Id = (int)CSPropIDTypeDescMgr.Instance.GetConfig(propId).id;
|
|
iD.Value = propValue;
|
|
iD.Max = max;
|
|
equip.AddProp.Add(ref iD);
|
|
//propscore += CalcEquipPropScore(ref iD);
|
|
if (propId.Equals("AtkFix"))
|
|
{
|
|
atk += propValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//if(equipDesc.type == EquipType.Gun)
|
|
//{
|
|
// var w = WeaponDescMgr.Instance.GetConfig(equipDesc.weaponId);
|
|
// propscore += atk/10_000 * RolePropUtil.GetWeaponK(w.Type)/10_000;
|
|
//}
|
|
//equip.Score = (int)(propscore);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新附魔状态, 减去附魔属性, 返回有效期内的附魔数量
|
|
public static int UpdateEquipEnchant(PlayerOnGame player, long nowSec, bool notifyClt)
|
|
{
|
|
int count = 0;
|
|
//bool isBegin = false;
|
|
//if (isBegin)
|
|
//{
|
|
// var chgList = player.knight.prop.EndChange();
|
|
// PlayerNotify.NotifyHeroChgProp(player, chgList, (int)GoodsType.Equipment,0,notifyClt);
|
|
//}
|
|
|
|
return count;
|
|
}
|
|
private static int AddEquip(PlayerOnGame player, string equipId)
|
|
{
|
|
var equipDesc = EquipDescMgr.Instance.GetConfig(equipId);
|
|
if (equipDesc == null)
|
|
{
|
|
TraceLog.Error("EquipmentSvc.AddEquip equipId {0} no conf", equipId);
|
|
return -1;
|
|
}
|
|
|
|
|
|
var equip = new DBEquipment
|
|
{
|
|
Quality = (int)equipDesc.quality,
|
|
};
|
|
equip.DescId = equipDesc.InternalId;
|
|
equip.SerialNum = ++player.RoleData.PandoraBag.EquipIdSeq;
|
|
|
|
CreateEquipProp(player, player.RoleData.Knight.DbHero.Level, equipDesc.quality, ref equip, player.knight.props.GetPropFinal(PropertyDef.Luck)/10_000);
|
|
if (player.RoleData.PandoraBag.EquipList.Count < player.RoleData.PandoraBag.EquipList.GetMaxCount())
|
|
{
|
|
player.RoleData.PandoraBag.EquipList.Add(ref equip);
|
|
|
|
}
|
|
TaskEXEvent.GetQualityEquipN(player,equipDesc.quality);
|
|
player.MakeDirty();
|
|
return equip.SerialNum;
|
|
}
|
|
|
|
public static int AddEquip(PlayerOnGame player, string equipId, bool sendMsg = true)
|
|
{
|
|
var equipDesc = EquipDescMgr.Instance.GetConfig(equipId);
|
|
if (equipDesc == null)
|
|
{
|
|
TraceLog.Error("EquipmentSvc.AddPayEquip equipId {0} no conf", equipId);
|
|
return -1 ;
|
|
}
|
|
|
|
var equip = new DBEquipment
|
|
{
|
|
Quality = (int)equipDesc.quality,
|
|
};
|
|
equip.DescId = equipDesc.InternalId;
|
|
equip.SerialNum = ++player.RoleData.PandoraBag.EquipIdSeq;
|
|
|
|
CreateEquipProp(player, player.RoleData.Knight.DbHero.Level, equipDesc.quality, ref equip, player.knight.props.GetPropFinal(PropertyDef.Luck) / 10_000);
|
|
if (player.RoleData.PandoraBag.EquipList.Count < player.RoleData.PandoraBag.EquipList.GetMaxCount())
|
|
{
|
|
player.RoleData.PandoraBag.EquipList.Add(ref equip);
|
|
if (sendMsg)
|
|
{
|
|
var res = new CSEquipSync();
|
|
res.Add.CopyFrom(ref equip);
|
|
player.SendToClient((int)CSGameMsgID.EquipSync, ref res);
|
|
}
|
|
}
|
|
TaskEXEvent.GetQualityEquipN(player,equipDesc.quality);
|
|
player.MakeDirty();
|
|
return equip.SerialNum;
|
|
}
|
|
|
|
public static void CollectEquipProp(ref DBRoleData roleDat, RoleProp roleProp)
|
|
{
|
|
for(int i = 0; i < roleDat.Knight.DbHero.WearEquip.Count; i++)
|
|
{
|
|
ref var equip = ref roleDat.Knight.DbHero.WearEquip[i];
|
|
////不考虑枪的属性 2024.12.19 去除
|
|
//if(equip.Pos == (int)EquipmentPos.RightGun || equip.Pos == (int)EquipmentPos.LeftGun)
|
|
//{
|
|
// continue;
|
|
//}
|
|
for(int j = 0; j < equip.BaseProp.Count; j++)
|
|
{
|
|
roleProp.AddProp(equip.BaseProp[j].Id, equip.BaseProp[j].Value);
|
|
}
|
|
for (int j = 0; j < equip.AddProp.Count; j++)
|
|
{
|
|
roleProp.AddProp(equip.AddProp[j].Id, equip.AddProp[j].Value);
|
|
}
|
|
//for (int j = 0; j < equip.SkillProp.Count; j++)
|
|
//{
|
|
// roleProp.AddProp(equip.SkillProp[j].Id, equip.SkillProp[j].Value);
|
|
//}
|
|
}
|
|
if(roleDat.Knight.DbHero.Suits.Count > 0)
|
|
{
|
|
for(int i = 0; i < roleDat.Knight.DbHero.Suits.Count; i++)
|
|
{
|
|
var suit = roleDat.Knight.DbHero.Suits[i];
|
|
var suitDesc = EquipSuitDescMgr.Instance.GetConfigByInternal(suit.Id);
|
|
var lv = suit.Value;
|
|
for (int j = 0; j < suitDesc.suit.Length; j++)
|
|
{
|
|
var pk = suitDesc.suit[j].CSProp;
|
|
var pv = suitDesc.suit[j].CSPropValue;
|
|
for( int k = 0; k < lv; k++)
|
|
{
|
|
if (pk[k] != "")
|
|
{
|
|
roleProp.AddProp(pk[k], pv[k]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**计算套装数据*/
|
|
public static void CheckEquipSuit(ref DBHero hero)
|
|
{
|
|
hero.Suits.Clear();
|
|
Dictionary<int, int> suitCount = new Dictionary<int, int>();
|
|
for (int j = 0; j < hero.WearEquip.Count; j++)
|
|
{
|
|
var equipDesc = EquipDescMgr.Instance.GetConfigByInternal(hero.WearEquip[j].DescId);
|
|
if(suitCount.ContainsKey(equipDesc.equipSuit))
|
|
{
|
|
suitCount[equipDesc.equipSuit]++;
|
|
}
|
|
else
|
|
{
|
|
suitCount[equipDesc.equipSuit] = 1;
|
|
}
|
|
}
|
|
var suitList = EquipSuitDescMgr.Instance.ItemTable.Values;
|
|
foreach (var item in suitList)
|
|
{
|
|
if (suitCount.ContainsKey(item.id))
|
|
{
|
|
int c = suitCount[item.id];
|
|
int level = 0;
|
|
for(int j = item.suitEffectNum.Length - 1; j >= 0; j--)
|
|
{
|
|
if(c >= item.suitEffectNum[j])
|
|
{
|
|
level = j + 1;
|
|
break;
|
|
}
|
|
}
|
|
if(level > 0)
|
|
{
|
|
var tidv = new TypeIDValue32();
|
|
tidv.Id = item.InternalId;
|
|
tidv.Value = level;
|
|
hero.Suits.Add(ref tidv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|