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); } } }
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(); }