Пример #1
0
 public void VerifyDead(CharacterEntity character, bool isPlayer)
 {
     if (character && character.isDead)
     {
         #region 超时强制从锁定列表移除
         if (_deadDic.ContainsKey(character.characterInfo.instanceID))
         {
             float deadTime = _deadDic[character.characterInfo.instanceID];
             if (Time.time - deadTime > FORCE_CLEAR_TIME)
             {
                 VirtualServerControllerUtil.RemoveFromDic(character.characterInfo.instanceID, beLcokedDic);
                 _deadDic.Remove(character.characterInfo.instanceID);
             }
         }
         else
         {
             _deadDic.Add(character.characterInfo.instanceID, Time.time);
         }
         #endregion
         ClearSkiller(character.characterInfo.instanceID, isPlayer);
         if (!VirtualServerControllerUtil.ExistInDic(character.characterInfo.instanceID, beLcokedDic))
         {
             DataMessageHandler.DataMessage_Dead(character.characterInfo.instanceID, isPlayer);
         }
     }
 }
Пример #2
0
        public void FinishSkill(uint skillId, uint characterId, bool isPlayer)
        {
            //Debugger.LogError("finish skillID:" + skillId.ToString());
#if UNITY_EDITOR
            finishSkills.Add(skillId);
#endif
            if (aeonSkillingDic.ContainsKey(skillId))//超级技能
            {
                aeonSkillingDic.Remove(skillId);
                TickCD(true);
            }
            string key = StringUtil.ConcatNumber(characterId, skillId);
            beLcokedDic.TryDelete(key);
            skillWaitFinishDic.TryDelete(key);
            skillingDic.TryDelete(key);


            CharacterEntity character = null;
            //检测自己是否死亡
            if (isPlayer)
            {
                character = PlayerController.instance[characterId];
            }
            else
            {
                character = EnemyController.instance[characterId];
            }
            if (character && character.isDead)
            {
                VerifyDead(character, isPlayer);
            }

            bool needTick = true;
            if (aeonSkillingDic.Count > 0)
            {
                needTick = false;
            }
            else
            {
                string[] keys = skillingDic.GetKeyArray();
                for (int i = 0, count = keys.Length; i < count; i++)
                {
                    KeyValuePair <uint, uint> kvp = keys[i].SplitToKeyValuePair <uint, uint>();
                    SkillData skillData           = SkillData.GetSkillDataById(kvp.Value);
                    if (skillData.skillType == SkillType.Skill)
                    {
                        needTick &= false;
                    }
                }
            }
            if (needTick && !_hanguped)
            {
                TickCD(true);
            }
            switch (FightController.instance.fightType)
            {
            case FightType.PVE:
            case FightType.Arena:
            case FightType.DailyPVE:
            case FightType.Expedition:
            case FightType.WorldTree:
            case FightType.WorldBoss:
            case FightType.FirstFight:
            case FightType.SkillDisplay:
            case FightType.PVP:
            case FightType.FriendFight:
            case FightType.MineFight:
                break;

            case FightType.ConsortiaFight:
                List <int> deadHeroList = Fight.Model.FightProxy.instance.GetConsortiaDeadHeroList((int)characterId, (int)skillId);
                if (deadHeroList != null && deadHeroList.Count > 0)
                {
                    for (int i = 0, count = deadHeroList.Count; i < count; i++)
                    {
                        CharacterEntity c = CharacterUtil.FindTarget((uint)deadHeroList[i]);
                        if (c != null && !c.isDead)
                        {
                            DataMessageHandler.DataMessage_Dead(c.characterInfo.instanceID, c.isPlayer);
                        }
                    }
                }
                OrderConsortiaSkill();
                Fight.Model.FightProxy.instance.RemoveConsortiaFightData((int)characterId, (int)skillId);
                break;
            }
            //VirtualServerController.instance.PlaySkillCalc();
        }