Пример #1
0
        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);
        }
Пример #2
0
 public void AddBuff(BuffModel buff)
 {
     if (_buffAry.ContainsKey(buff.id))
     {
         _buffAry.Remove(buff.id);
     }
     _buffAry.Add(buff.id, buff.AdditionalAttribute);
     UpdateBuffAttribute();
 }
Пример #3
0
 public void BuffManager(bool add, BuffModel model)
 {
     if (add)
     {
         DataModel.AddBuff(model);
     }
     else
     {
         DataModel.RemoveBuff(model.id);
     }
 }
Пример #4
0
    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()));
    }
Пример #5
0
        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);
        }
Пример #6
0
        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();
        }
Пример #7
0
    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);
            }
        }
    }
Пример #8
0
 public void OnUpdate(BuffModel model, BaseAttribute attributeModel)
 {
     this.attributeModel = attributeModel;
     this.model          = model;
     OnUpdate();
 }
Пример #9
0
    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("");
        }
    }