| Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/Actor/Skill/AttackHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/Actor/Status/StatusMgr.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Utility/EnumHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs
@@ -3,12 +3,14 @@ using System; using Snxxz.UI; //01 09 服务器准备就绪#tagServerPrepareOK //01 09 ������������#tagServerPrepareOK public class DTC0109_tagServerPrepareOK : DtcBasic { // 在登陆, 切图后, 服务端准备完成后触发 public static UnityEngine.Events.UnityAction OnServerPrepareOk; LoginModel loginModel { get { return ModelCenter.Instance.GetModel<LoginModel>(); } } @@ -24,9 +26,14 @@ } StageLoadTimeOutCatcher.RecordProtocol(vNetData.socketType, "0109", DateTime.Now); //修改技能快捷设置发包顺序 //�ļ��ܿ�����÷���˳�� PlayerDatas.Instance.skill.CheckQuickSet(); StageLoad.Instance.UpdateServerFlag(vNetData.socketType, true); if (OnServerPrepareOk != null) { OnServerPrepareOk(); } } } Fight/Actor/Skill/AttackHandler.cs
@@ -337,6 +337,7 @@ bool _isMiss = false; bool _isCrit = false; bool _isZhongJi = false; bool _isLucky = false; bool _isZhuxianHit = false; @@ -488,6 +489,12 @@ _aFinalHurtPer = PlayerDatas.Instance.extersion.FunalHurtPer; _aDamagePVE = PlayerDatas.Instance.extersion.DamagePVE; _aRealmLv = PlayerDatas.Instance.baseData.realmLevel; if (attacker.ServerInstID == PlayerDatas.Instance.PlayerId) { _isZhongJi = IsZhongji(target); } } else if (attacker.ActorType == GameObjType.gotNPC) { @@ -535,13 +542,14 @@ } } _isMiss = IsMiss(_hitRate, _missRate); _isCrit = IsCrit(_aSuperHitRate); _isLucky = IsLucky(_aLuckyHitRate); _isZhuxianHit = IsZhuXianHit(_aZhuXianHitRate); if (_isZhongJi) { _isCrit = true; } // 4014 必定触发 按位配置 1为必命中,2为必暴击,4为必会心一击 if (skill.skillInfo.effectValue.TryGetValue(4014, out _effectValue)) { @@ -589,7 +597,13 @@ _aLuckyHit = _isLucky ? _luckyHit : 0; _aSuperHit = _isCrit ? _superHit : 0; if (_isZhongJi) { _aSuperHit *= 2; #if UNITY_EDITOR Debug.LogFormat("技能: {0} 计算伤害的时候发生重击, 暴击伤害翻倍: {1}", skill.id, _aSuperHit); #endif } // 4051 当发生会心伤害时, 增加会心一击伤害 if (_isLucky @@ -678,13 +692,9 @@ { attackType = (byte)HurtAttackType.ZhuXianAtk; } else if (_isLucky #if UNITY_EDITOR || RuntimeLogUtility.s_ForceLuckHit #endif ) else if (_isZhongJi) { attackType = (byte)HurtAttackType.LuckyHit; attackType = (byte)HurtAttackType.ThumpHit; } else if (_isCrit #if UNITY_EDITOR @@ -693,6 +703,14 @@ ) { attackType = (byte)HurtAttackType.SuperHit; } else if (_isLucky #if UNITY_EDITOR || RuntimeLogUtility.s_ForceLuckHit #endif ) { attackType = (byte)HurtAttackType.LuckyHit; } else { @@ -705,6 +723,42 @@ return hit * 1f / (hit + miss) - Random.Range(0f, 1f) < 0; } private static bool IsZhongji(GActorFight target) { var _hero = PlayerDatas.Instance.hero; if (_hero == null || target == null) { return false; } int _rate = 0; var _dict = StatusMgr.Instance.ZhongJiDict; foreach (var _info in _dict.Values) { if (_info.onlyFirstTarget) { if (_hero.SelectTarget.ServerInstID == target.ServerInstID) { _rate += _info.rate; } } else { _rate += _info.rate; } } #if UNITY_EDITOR var _random = Random.Range(0, 10000); var _result = _random < _rate; // Debug.LogFormat("攻击目标: {3}, 重击概率为: {0}, 随机为: {1}, 是否可以重击: {2}", _rate, _random, _result, target.ServerInstID); return _result; #else return Random.Range(0, 10000) < _rate; #endif } private static bool IsCrit(int superHitRate) { return Random.Range(0, 10000) < superHitRate; Fight/Actor/Status/StatusMgr.cs
@@ -1,4 +1,5 @@ using System.Collections.Generic; using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; @@ -6,10 +7,18 @@ [XLua.LuaCallCSharp] public class StatusMgr : SingletonMonobehaviour<StatusMgr> { public struct ZhongJiInfo { public int rate; public bool onlyFirstTarget; } public static event UnityAction<int> OnGainStatus; public static event UnityAction<float> OnGainCantCastSkillStatus; public static event UnityAction OnReleaseCantCastSkillStatus; public static event UnityAction<int> onReceiveStatus; public Dictionary<int, ZhongJiInfo> ZhongJiDict = new Dictionary<int, ZhongJiInfo>(); private Dictionary<uint, List<Status_Base>> m_StatusDict = null; private List<Status_Base> m_AllStatus = null; @@ -21,9 +30,12 @@ public int redNameBuffID; [HideInInspector] public int yellowNameBuffID; public int ZhongJiRate; public void Init() { DTC0109_tagServerPrepareOK.OnServerPrepareOk += OnServerPrepareOk; if (m_StatusDict == null) { m_StatusDict = new Dictionary<uint, List<Status_Base>>(); @@ -68,6 +80,12 @@ } } private void OnServerPrepareOk() { ReleaseActor(PlayerDatas.Instance.baseData.PlayerID); ZhongJiDict.Clear(); } public void Request(H0605_tagObjAddBuff h0605) { // 修改目标状态 @@ -86,6 +104,8 @@ _actor.ActorInfo.status4012[(byte)_effectValue.value1] = _count; } } AddZjInfoIfExist(h0605.SkillID); Status_Base _status = Get(h0605.ObjID, h0605.SkillID); @@ -253,6 +273,11 @@ } _actor.ActorInfo.status4012[(byte)_effectValue.value1] = _count; } } if (ZhongJiDict.ContainsKey(h0606.SkillID)) { ZhongJiDict.Remove(h0606.SkillID); } Status_Base _status = Get(h0606.ObjID, h0606.SkillID); @@ -553,7 +578,7 @@ private bool IsMockingBuff(int id) { SkillConfig _config = SkillConfig.Get(id); var _config = SkillConfig.Get(id); if (_config != null && ((_config.Effect1 == 4012 && _config.EffectValue11 == 6) @@ -569,6 +594,30 @@ return false; } private void AddZjInfoIfExist(int id) { var _info = SkillHelper.Instance.Get(id); if (_info == null) { return; } if (_info.effectValue.ContainsKey(4526)) { var _zjInfo = new ZhongJiInfo { rate = _info.effectValue[4526].value1, onlyFirstTarget = _info.effectValue[4526].value2 == 1 }; ZhongJiDict[id] = _zjInfo; // #if UNITY_EDITOR // Debug.LogFormat("收到一个增加重击概率的BUFF: {0}, 增加: {1}的概率", id, _zjInfo.rate); // #endif } } private bool IsPolymorch(int id) { SkillConfig _config = SkillConfig.Get(id); Utility/EnumHelper.cs
@@ -1196,7 +1196,8 @@ /** 终极斩杀 */ FinalKill, /*致命一击*/ DeadlyHit DeadlyHit, ThumpHit,// 重击 } public enum DungeonTargetType