private BuffModel SerializeToBuffModel(BaseGraph graph, BuffGraphAsset asset) { List <Buff_Node> rootNodes = NodeHelper.GetNodes <Buff_Node>(graph); if (rootNodes.Count <= 0) { Debug.LogError($"试图序列化出错,没有根节点"); } Buff_Node node = rootNodes[0]; BuffModel buffModel = new BuffModel(); buffModel.id = asset.buffId; buffModel.name = asset.name; buffModel.priority = node.priority; buffModel.maxStack = node.maxStack; buffModel.tickTime = node.tickTime; buffModel.onFreedFunc = node.GetOnFreedFuncs(); buffModel.onOccurFunc = node.GetOnOccurFuncs(); buffModel.onTickFunc = node.GetOnTickFuncs(); buffModel.onRemovedFunc = node.GetOnRemovedFuncs(); buffModel.onHurtFunc = node.GetOnHurtFuncs(); buffModel.onBeHurtFunc = node.GetOnBeHurtFuncs(); buffModel.onKilledFunc = node.GetOnKilledFuncs(); buffModel.onBeKilledFunc = node.GetOnBeKilledFuncs(); return(buffModel); }
public void AddBuff(BuffModel buff) { if (_buffAry.ContainsKey(buff.id)) { _buffAry.Remove(buff.id); } _buffAry.Add(buff.id, buff.AdditionalAttribute); UpdateBuffAttribute(); }
public void BuffManager(bool add, BuffModel model) { if (add) { DataModel.AddBuff(model); } else { DataModel.RemoveBuff(model.id); } }
public string GetEffect(BaseAttribute _attribute) { List <string> obj = new List <string>(); if (startValue.Length > 0) { //造成{0}伤害 int[] damage = GetDamage(_attribute); obj.Add(damage[0].ToString()); obj.Add(damage[1].ToString()); } for (int i = 0; i < buff.Count; i++) { //{0}%几率添加{1},持续{2}回合 obj.Add(buff[i].data[0].ToString() + "%"); BuffModel _buff = Manage.Instance.Data.GetObj <BuffModel>(buff[i].data[1]); obj.Add(_buff.name); obj.Add(_buff.GetEffect(_attribute)); obj.Add(buff[i].data[2].ToString()); } return(string.Format(effect.Replace("~", ","), obj.ToArray())); }
private static List <BuffModel> CombineBoons(IReadOnlyCollection <PlayerModel> players) { var boonList = new List <BuffModel>(); var groupedBoons = players.SelectMany(i => i.Buffs).GroupBy(b => b.Id); foreach (var boon in groupedBoons) { var model = new BuffModel(); var boonInfo = boon.First(); model.Id = boonInfo.Id; model.Name = boonInfo.Name; model.Icon = boonInfo.Icon; model.Stacking = boonInfo.Stacking; model.Value = boon.Sum(i => i.Value) / players.Count; model.Stacks = boon.Sum(i => i.Stacks) / players.Count; boonList.Add(model); } return(boonList); }
public override void ExportGraph(List <InternalBaseGraphAsset> assets) { for (int i = 0; i < assets.Count; i++) { if (assets[i] is BuffGraphAsset) { BuffGraphAsset asset = assets[i] as BuffGraphAsset; BaseGraph graphData = asset.DeserializeGraph(); //运行时数据结构 BuffModel model = SerializeToBuffModel(graphData, asset); string filePath = SkillDef.GetBuffCnfPath(asset.buffId); IOHelper.WriteText(JsonMapper.ToJson(model), filePath); Debug.Log($"Buff配置生成成功>>>>{filePath}"); } } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); }
protected virtual void OnAtk() { BuffModel _buff = null; List <BuffModel> damagebuff = new List <BuffModel>(); List <bool> buffadd = new List <bool>(); for (int i = 0; i < attribute.buff.Count; i++) { _buff = Manage.Instance.Data.GetObj <BuffModel>(attribute.buff[i].data[1]); if (_buff == null) { continue; } if (attribute.buff[i].data[4] == 1) { buffadd.Add(attribute.buff[i].data[3] == 1); damagebuff.Add(_buff); } else { unit.BuffManager(attribute.buff[i].data[3] == 1, _buff); } } var targets = GetEnemy(); if (targets.Count != 0) { int[] hit = attribute.GetDamage(unit.DataModel.finalAttribute); DamageMessage damage = new DamageMessage(unit, hit, attribute.damageType, damagebuff, buffadd); int value = 0; for (int i = 0; i < targets.Count; i++) { value += targets[i].Damage(damage); } } }
public void OnUpdate(BuffModel model, BaseAttribute attributeModel) { this.attributeModel = attributeModel; this.model = model; OnUpdate(); }
public string GetEffect(BaseAttribute _attribute) { List <string> obj = new List <string>(); for (int i = 0; i < effectType.Length; i++) { BuffModel _buff = null; if (buff.Count > 0) { //TODO 先只有一个buff _buff = Manage.Instance.Data.GetObj <BuffModel>(buff[0].data[1]); } switch (effectType[i]) { case 1: int[] damage = GetDamage(_attribute); obj.Add(damage[0].ToString()); obj.Add(damage[1].ToString()); break; case 2: obj.Add(DataName.GetColor(_buff.name, _buff.name)); break; case 3: obj.Add(DataName.GetColor(_buff.name, buff[0].data[2].ToString())); break; case 4: obj.Add(_buff.GetEffect(_attribute)); break; case 5: for (int j = 0; j < startValue.Length; j++) { obj.Add(startValue[j].ToString()); } break; case 6: for (int j = 0; j < additionalAttribute.data.Count; j++) { string str = additionalAttribute.data[j].GetValue().ToString(); if (additionalAttribute.data[j].ratio) { str += "%"; } obj.Add(str); } for (int j = 0; j < additionalAttribute.attribute.Count; j++) { string str = additionalAttribute.data[j].GetValue().ToString(); if (additionalAttribute.data[j].ratio) { str += "%"; } obj.Add(str); } for (int j = 0; j < additionalAttribute.resistance.Count; j++) { string str = additionalAttribute.data[j].GetValue().ToString(); if (additionalAttribute.data[j].ratio) { str += "%"; } obj.Add(str); } for (int j = 0; j < additionalAttribute.skill.Count; j++) { string str = additionalAttribute.data[j].GetValue().ToString(); if (additionalAttribute.data[j].ratio) { str += "%"; } obj.Add(str); } break; } } try { string[] str = obj.ToArray(); effect = effect.Replace("~", ","); return(string.Format(effect, str)); } catch { string s = effect; return(""); } }