コード例 #1
0
        public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId)
        {
            if (obj == null)
            {
                return(hpDamage);
            }
            if (impactOwnerId != senderId)
            {
                return(hpDamage);
            }
            UserInfo sender = obj.SceneContext.GetCharacterInfoById(senderId) as UserInfo;

            if (sender == null)
            {
                return(hpDamage);
            }
            CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo();

            if (combat_info == null)
            {
                return(hpDamage);
            }
            ImpactInfo impactinfo = sender.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (impactinfo == null || impactinfo.ConfigData.ExtraParams.Count < 1)
            {
                return(hpDamage);
            }
            int    triggerCount = 0;
            string effect       = "";
            string mountPoint   = "";

            try
            {
                if (impactinfo.ConfigData.ExtraParams.Count > 4)
                {
                    triggerCount = int.Parse(impactinfo.ConfigData.ExtraParams[0]);
                    effect       = impactinfo.ConfigData.ExtraParams[2];
                    mountPoint   = impactinfo.ConfigData.ExtraParams[3];
                    if (combat_info.MultiHitCount != 0 && combat_info.MultiHitCount % triggerCount == 0)
                    {
                        AppendDamage(sender, obj, impactinfo, hpDamage);
                        AppendImpact(sender, obj, impactinfo);
                    }
                    if (!String.IsNullOrEmpty(effect) && !String.IsNullOrEmpty(mountPoint))
                    {
                        EventImpactLogicEffect(obj, effect, mountPoint, 2.0f);
                    }
                }
            }
            catch (Exception ex)
            {
                LogSystem.Error("parse append damage param error:\n" + ex.Message + "\n" + ex.StackTrace);
            }
            return(hpDamage);
        }
コード例 #2
0
        public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOwnerId)
        {
            if (obj == null)
            {
                return(hpDamage);
            }
            if (senderId != impactOwnerId)
            {
                return(hpDamage);
            }
            UserInfo sender = obj.SceneContext.GetCharacterInfoById(senderId) as UserInfo;

            if (sender == null)
            {
                return(hpDamage);
            }
            CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo();

            if (combat_info == null)
            {
                return(hpDamage);
            }
            ImpactInfo impactinfo = sender.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (impactinfo == null || impactinfo.ConfigData.ExtraParams.Count < 1)
            {
                return(hpDamage);
            }
            int criticalCount = 0;

            try
            {
                criticalCount = int.Parse(impactinfo.ConfigData.ExtraParams[0]);
                if (combat_info.MultiHitCount != 0 && combat_info.MultiHitCount % criticalCount == 0)
                {
                    if (!isCritical)
                    {
                        hpDamage   = (int)(hpDamage * sender.GetActualProperty().CriticalPow);
                        isCritical = true;
                    }
                }
            }
            catch (Exception ex)
            {
                LogSystem.Error("parse HitCriticalTrigger param error:\n" + ex.Message);
            }
            return(hpDamage);
        }
コード例 #3
0
        public void OnCharacterDamage(CharacterInfo sender, CharacterInfo obj, int curDamage, bool isCritical, bool isOrdinary)
        {
            bool isKiller = false;

            // 计算出的伤害小于1时, 不处理
            if (curDamage < 1)
            {
                return;
            }
            UserInfo user = obj as UserInfo;

            if (null != user)
            {
                user.GetCombatStatisticInfo().AddTotalDamageToMyself(curDamage);
            }
            UserInfo senderUser = sender as UserInfo;

            if (null != senderUser)
            {
                senderUser.GetCombatStatisticInfo().AddTotalDamageFromMyself(curDamage);
            }
            sender.MakeDamage += curDamage;
            curDamage          = curDamage * -1;
            int realDamage = curDamage;

            if (obj.Hp + curDamage < 0)
            {
                realDamage = 0 - obj.Hp;
            }
            obj.SetHp(Operate_Type.OT_Relative, realDamage);
            if (obj.IsDead())
            {
                isKiller = true;
            }
            if (isKiller)
            {
                UpdateKillTalent(sender);
                UpdateKillAddDamage(sender);
                UpdateKillAddCritical(sender);
            }
            if (null != EventImpactLogicDamage)
            {
                EventImpactLogicDamage(obj, sender.GetId(), curDamage, isKiller, isCritical, isOrdinary);
            }
        }
コード例 #4
0
        public override int RefixHpDamage(CharacterInfo obj, int impactId, int hpDamage, int senderId, ref bool isCritical, int impactOnwerId)
        {
            //LogSystem.Debug("---in hit recover");
            if (obj == null)
            {
                return(hpDamage);
            }
            if (senderId != impactOnwerId)
            {
                return(hpDamage);
            }
            UserInfo sender = obj.SceneContext.GetCharacterInfoById(senderId) as UserInfo;

            if (sender == null)
            {
                return(hpDamage);
            }
            CombatStatisticInfo combat_info = sender.GetCombatStatisticInfo();

            if (combat_info == null)
            {
                return(hpDamage);
            }
            ImpactInfo impactinfo = sender.GetSkillStateInfo().GetImpactInfoById(impactId);

            if (impactinfo == null || impactinfo.ConfigData.ExtraParams.Count < 1)
            {
                return(hpDamage);
            }
            int triggerCount = 0;

            try
            {
                triggerCount = int.Parse(impactinfo.ConfigData.ExtraParams[0]);
                if (combat_info.MultiHitCount != 0 && combat_info.MultiHitCount % triggerCount == 0)
                {
                    Recover(sender, impactinfo, combat_info.MultiHitCount, combat_info.LastHitTime);
                }
            }
            catch (Exception ex)
            {
                LogSystem.Error("parse HitRcover count param error:\n" + ex.Message);
            }
            return(hpDamage);
        }
コード例 #5
0
        public void OnGfxHitTarget(int id, int impactId, int targetId, int hitCount,
                                   int skillId, int duration, float x,
                                   float y, float z, float dir, long hit_count_id)
        {
            CharacterInfo sender               = WorldSystem.Instance.GetCharacterById(id);
            CharacterInfo target               = WorldSystem.Instance.GetCharacterById(targetId);
            UserInfo      playerSelf           = WorldSystem.Instance.GetPlayerSelf();
            bool          hitCountChanged      = false;
            bool          playerHitCountChange = false;
            long          curTime              = TimeUtility.GetLocalMilliseconds();

            UpdateHitTalent(sender, hit_count_id);
            // 攻击
            if (hitCount > 0)
            {
                CombatStatisticInfo senderCombatInfo = sender.GetCombatStatisticInfo();
                int last_count = senderCombatInfo.MultiHitCount;
                if (IsImpactHaveDamage(impactId))
                {
                    hitCountChanged = senderCombatInfo.UpdateMultiHitCount(hit_count_id, hitCount, curTime);
                }
                if (id == WorldSystem.Instance.PlayerSelfId && null != playerSelf)
                {
                    if (senderCombatInfo.MultiHitCount >= 1 && last_count != senderCombatInfo.MultiHitCount)
                    {
                        GfxSystem.PublishGfxEvent("ge_hitcount", "ui", senderCombatInfo.MultiHitCount);
                        playerHitCountChange = hitCountChanged;
                    }
                }
                CombatStatisticInfo targetCombatInfo = target.GetCombatStatisticInfo();
                targetCombatInfo.HitCount += hitCount;
                if (targetId == WorldSystem.Instance.PlayerSelfId && null != playerSelf)
                {
                    if (WorldSystem.Instance.IsELiteScene())
                    {
                        RoleInfo      roleInfo = LobbyClient.Instance.CurrentRole;
                        SceneResource curScene = WorldSystem.Instance.GetCurScene();
                        if (null != roleInfo && null != curScene && roleInfo.GetSceneInfo(WorldSystem.Instance.GetCurSceneId()) == 2)
                        { //当前在挑战3星通关
                            GfxSystem.PublishGfxEvent("ge_pve_fightinfo", "ui", 0, targetCombatInfo.HitCount, curScene.SceneConfig.m_CompletedHitCount, 0);
                        }
                        playerHitCountChange = true;
                    }
                }
            }
            if (playerHitCountChange && null != playerSelf && (WorldSystem.Instance.IsPvpScene() || WorldSystem.Instance.IsMultiPveScene()))
            {
                CombatStatisticInfo combatInfo = playerSelf.GetCombatStatisticInfo();
                ArkCrossEngineMessage.Msg_CR_HitCountChanged msg = new ArkCrossEngineMessage.Msg_CR_HitCountChanged();
                msg.max_multi_hit_count = combatInfo.MaxMultiHitCount;
                msg.hit_count           = combatInfo.HitCount;
                Network.NetworkSystem.Instance.SendMessage(msg);
            }
            if (null != sender && null != target)
            {
                int hit_count = 0;
                hit_count = sender.GetCombatStatisticInfo().MultiHitCount;
                OnGfxStartImpact(sender.GetId(), impactId, target.GetId(), skillId, duration, new Vector3(x, y, z), dir,
                                 hit_count);
            }
        }