using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using vnxbqy.UI; //用于主界面的BUFF数据接收 public class ObjBuff { public int ClearType; public int ObjID; public int BuffType; public int SkillID; public int LastTime; public DateTime _dattTime; public string ImagKey; public string BuffName; public string BuffConent; public int Layer; public int SkillTypeID; } public class BuffModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { public int PkType = 0;//PK对象选择 public delegate void OnObjAddBuff(); public static event OnObjAddBuff Even_ObjAddBuf;//关于Buff的增加 public delegate void OnObjDelBuff(); public static event OnObjDelBuff Even_ObjDelBuff;//关于Buff的减少 public static event Action BuffUpdateEvent;//buff状态改变 public Dictionary _BuffDic = new Dictionary();//buff字典 VipModel m_VipModel; VipModel vipModel { get { return m_VipModel ?? (m_VipModel = ModelCenter.Instance.GetModel()); } } public override void Init() { PlayerDatas.Instance.OnSwitchAttackMode += OnSwitchAttackMode; vipModel.OnVipTimeEvent += OnVipTimeEven; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; PlayerDatas.Instance.worldLevelUpdateEvent += WorldLVBuff; OperationTimeHepler.Instance.operationStartEvent += operationStartEvent; OperationTimeHepler.Instance.operationEndEvent += operationEndEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; } public override void UnInit() { PlayerDatas.Instance.OnSwitchAttackMode -= OnSwitchAttackMode; vipModel.OnVipTimeEvent -= OnVipTimeEven; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent; PlayerDatas.Instance.worldLevelUpdateEvent -= WorldLVBuff; OperationTimeHepler.Instance.operationStartEvent -= operationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= operationEndEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; } private void OnFuncStateChangeEvent(int onFuncID) { if (onFuncID == (int)FuncOpenEnum.WorldLv) { WorldLVBuff(); } } private void operationTimeUpdateEvent(Operation obj) { if (obj == Operation.MultipleExp) { AddoperationStartEvent(); if (Even_ObjAddBuf != null) { Even_ObjAddBuf(); } } } public void OnPlayerLoginOk() { OnVipTimeEven(); WorldLVBuff(); AddoperationStartEvent(); } private void operationStartEvent(Operation arg1, int arg2)//关于多倍经验 { if (arg1 == Operation.MultipleExp && arg2 == 0) { AddoperationStartEvent(); if (Even_ObjAddBuf != null) { Even_ObjAddBuf(); } } } private void AddoperationStartEvent() { bool IsBool = OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.MultipleExp); if (IsBool) { int seconds = OperationTimeHepler.Instance.GetOperationSurplusTime(Operation.MultipleExp); OperationBase operation = null; OperationTimeHepler.Instance.TryGetOperationTime(Operation.MultipleExp, out operation); int multipleF = 0; if (operation != null) { multipleF = (operation as OperationMultiExp).multiple / 10000; } var skillconfig = SkillConfig.Get(20048); if (_BuffDic.ContainsKey(20048)) { _BuffDic[20048].LastTime = seconds; _BuffDic[20048]._dattTime = DateTime.Now; _BuffDic[20048].BuffConent = string.Format(skillconfig.BuffDescription, (multipleF - 1) * 100); if (multipleF == 2) { _BuffDic[20048].BuffName = Language.Get("ExpActivity_Text2"); } else if (multipleF == 3) { _BuffDic[20048].BuffName = Language.Get("ExpActivity_Text3"); } else if (multipleF == 5) { _BuffDic[20048].BuffName = Language.Get("ExpActivity_Text4"); } else { _BuffDic[20048].BuffName = skillconfig.SkillName; } } else { ObjBuff _ObjBuff = new ObjBuff(); _ObjBuff.BuffType = skillconfig.SkillType; _ObjBuff.SkillID = 20048; _ObjBuff.LastTime = seconds; _ObjBuff._dattTime = DateTime.Now; if (multipleF == 2) { _ObjBuff.BuffName = Language.Get("ExpActivity_Text2"); } else if (multipleF == 3) { _ObjBuff.BuffName = Language.Get("ExpActivity_Text3"); } else if (multipleF == 5) { _ObjBuff.BuffName = Language.Get("ExpActivity_Text4"); } else { _ObjBuff.BuffName = skillconfig.SkillName; } _ObjBuff.ImagKey = skillconfig.IconName; _ObjBuff.BuffConent = string.Format(skillconfig.BuffDescription, (multipleF-1) * 100); _ObjBuff.SkillTypeID = skillconfig.SkillTypeID; _ObjBuff.Layer = 0; _BuffDic.Add(20048, _ObjBuff); } } } private void operationEndEvent(Operation arg1, int arg2) { if (arg1== Operation.MultipleExp && arg2==0) { if (_BuffDic.ContainsKey(20048)) { _BuffDic.Remove(20048); if (Even_ObjDelBuff != null) Even_ObjDelBuff(); } } } private void PlayerDataRefreshInfoEvent(PlayerDataType _type) { switch (_type) { case PlayerDataType.VIPLv: OnVipTimeEven(); break; case PlayerDataType.ExpPoint: WorldLVBuff(); break; case PlayerDataType.LV: AddoperationStartEvent(); break; } } private void OnVipTimeEven() { if (vipModel.GetVipPrivilegeCnt(VipPrivilegeType.KillMonsterExpUp) == 3000) { var skillconfig = SkillConfig.Get(20044); //var _timeSpan = vipModel.vipOverdue - TimeUtility.ServerNow; if (_BuffDic.ContainsKey(20044)) { _BuffDic[20044].LastTime = 0; _BuffDic[20044]._dattTime = DateTime.Now; } else { ObjBuff _ObjBuff = new ObjBuff(); _ObjBuff.BuffType = skillconfig.SkillType; _ObjBuff.SkillID = 20044; _ObjBuff.LastTime = 0; _ObjBuff._dattTime = DateTime.Now; _ObjBuff.ImagKey = skillconfig.IconName; _ObjBuff.BuffName = skillconfig.SkillName; _ObjBuff.BuffConent = skillconfig.BuffDescription; _ObjBuff.SkillTypeID = skillconfig.SkillTypeID; _ObjBuff.Layer = 0; _BuffDic.Add(20044, _ObjBuff); } if (Even_ObjAddBuf != null) Even_ObjAddBuf(); } else { if (_BuffDic.ContainsKey(20044)) { _BuffDic.Remove(20044); if (Even_ObjDelBuff != null) Even_ObjDelBuff(); } } } private void OnSwitchAttackMode(E_AttackMode obj) { PkType = (int)obj; } public void OnBeforePlayerDataInitialize() { _BuffDic.Clear(); PkType = 0; } public void ClearAllBuff() { _BuffDic.Clear(); Even_ObjDelBuff?.Invoke(); } public void ObjAddBuff(H0605_tagObjAddBuff info)//buff增加 { int _Type = SkillConfig.Get(info.SkillID).SkillType; if (TypeJudgment(_Type) && info.ObjID == PlayerDatas.Instance.baseData.PlayerID && SkillConfig.Get(info.SkillID).BuffDisplay == 0) { if (_BuffDic.ContainsKey((int)info.SkillID)) { var ObjBuff = _BuffDic[(int)info.SkillID]; ObjBuff.ClearType = (int)info.BuffType; ObjBuff.ObjID = (int)info.ObjID; ObjBuff.BuffType = _Type; ObjBuff.SkillID = (int)info.SkillID; ObjBuff.LastTime = ((int)info.LastTime / 1000); ObjBuff._dattTime = DateTime.Now; ObjBuff.ImagKey = SkillConfig.Get(info.SkillID).IconName; ObjBuff.BuffName = SkillConfig.Get(info.SkillID).SkillName; ObjBuff.BuffConent = SkillConfig.Get(info.SkillID).BuffDescription; ObjBuff.SkillTypeID = SkillConfig.Get(info.SkillID).SkillTypeID; ObjBuff.Layer = (int)info.Layer; } else { ObjBuff _ObjBuff = new ObjBuff(); _ObjBuff.ClearType = (int)info.BuffType; _ObjBuff.ObjID = (int)info.ObjID; _ObjBuff.BuffType = _Type; _ObjBuff.SkillID = (int)info.SkillID; _ObjBuff.LastTime = ((int)info.LastTime / 1000); _ObjBuff._dattTime = DateTime.Now; _ObjBuff.ImagKey = SkillConfig.Get(info.SkillID).IconName; _ObjBuff.BuffName = SkillConfig.Get(info.SkillID).SkillName; _ObjBuff.BuffConent = SkillConfig.Get(info.SkillID).BuffDescription; _ObjBuff.SkillTypeID = SkillConfig.Get(info.SkillID).SkillTypeID; _ObjBuff.Layer = (int)info.Layer; _BuffDic.Add((int)info.SkillID, _ObjBuff); } if (Even_ObjAddBuf != null) Even_ObjAddBuf(); } if (BuffUpdateEvent != null) { BuffUpdateEvent((int)info.ObjID); } } public void ObjDelBuff(int playerId, int _BuffID)//buff减少 { if (BuffUpdateEvent != null) { BuffUpdateEvent(playerId); } if (playerId != PlayerDatas.Instance.baseData.PlayerID) { return; } if (_BuffDic.ContainsKey(_BuffID)) { _BuffDic.Remove(_BuffID); if (Even_ObjDelBuff != null) Even_ObjDelBuff(); } } public void ClearBuff(int BuffType, int playerId)//按类型清除Buff { if (BuffType == 9) { return; } if (playerId != PlayerDatas.Instance.baseData.PlayerID) { return; } List _ClearBuffType = new List(); foreach (int key in _BuffDic.Keys) { if (_BuffDic[key].ClearType == BuffType) { _ClearBuffType.Add(key); } } for (int i = 0; i < _ClearBuffType.Count; i++) { _BuffDic.Remove(_ClearBuffType[i]); } if (Even_ObjDelBuff != null) { Even_ObjDelBuff(); } } bool TypeJudgment(int _buffType) { string[] _BuffList = FuncConfigConfig.Get("BuffType").Numerical1.Split('|'); for (int i = 0; i < _BuffList.Length; i++) { if (_buffType == int.Parse(_BuffList[i])) return true; } return false; } public bool BuffCover(int _itemId) { var configItem = ItemConfig.Get(_itemId); var skillconfig = SkillConfig.Get(configItem.AddSkill1); if (skillconfig != null && skillconfig.SkillType == 9) { if (_BuffDic.ContainsKey(configItem.AddSkill1)) { return false; } foreach (var key in _BuffDic.Keys) { if (_BuffDic[key].BuffType == 9 && _BuffDic[key].SkillTypeID == skillconfig.SkillTypeID) { return true; } } } return false; } private void WorldLVBuff()//关于世界等级的Buff { // return; int getWorldLV = 0; int worldExpRate = 0; getWorldLV = (int)PlayerDatas.Instance.worldLv; worldExpRate = Mathf.FloorToInt(UIHelper.ReplacePercentage((int)PlayerDatas.Instance.worldExpRate, 2)); if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.WorldLv)) { return; } if (getWorldLV != 0 && worldExpRate>0)//添加世界等级buff { var skillconfig = SkillConfig.Get(20047); if (_BuffDic.ContainsKey(20047)) { _BuffDic[20047].LastTime = 0; _BuffDic[20047]._dattTime = DateTime.Now; _BuffDic[20047].BuffConent = string.Format(skillconfig.BuffDescription, worldExpRate); } else { ObjBuff _ObjBuff = new ObjBuff(); _ObjBuff.BuffType = skillconfig.SkillType; _ObjBuff.SkillID = 20047; _ObjBuff.LastTime = 0; _ObjBuff._dattTime = DateTime.Now; _ObjBuff.ImagKey = skillconfig.IconName; _ObjBuff.BuffName = skillconfig.SkillName; _ObjBuff.BuffConent = string.Format(skillconfig.BuffDescription, worldExpRate); _ObjBuff.SkillTypeID = skillconfig.SkillTypeID; _ObjBuff.Layer = 0; _BuffDic.Add(20047, _ObjBuff); } if (Even_ObjAddBuf != null) { Even_ObjAddBuf(); } } if (worldExpRate<=0)//删除世界等级Buff { if (_BuffDic.ContainsKey(20047)) { _BuffDic.Remove(20047); if (Even_ObjDelBuff != null) { Even_ObjDelBuff(); } } return; } } public bool BastBuff(int Item)//判断身上是否有更好的经验BUff { var configItem = ItemConfig.Get(Item); var skillconfig = SkillConfig.Get(configItem.AddSkill1); int SkillTypeID = int.Parse(FuncConfigConfig.Get("IntroductionItem").Numerical2); DebugEx.Log("请德龙睁开眼睛说话........."); if (skillconfig.SkillTypeID == SkillTypeID) { int buffLv = 0; foreach (var key in _BuffDic.Keys) { var skillCon = SkillConfig.Get(key); if (skillCon.SkillTypeID == SkillTypeID && skillCon.SkillLV> buffLv) { buffLv = skillCon.SkillLV; } } if (buffLv > skillconfig.SkillLV) { return true; } else { return false; } } else { return false; } } }