少年修仙传客户端代码仓库
client_Hale
2019-05-06 5a85807b604d3fab4a1728db32f84cdb72696db7
497 前端战斗增加重击相关逻辑
4个文件已修改
141 ■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0109_tagServerPrepareOK.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/AttackHandler.cs 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Status/StatusMgr.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 3 ●●●● 补丁 | 查看 | 原始文档 | 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