private void OnObjectDead(GameEvent ge, EventParameter parameter) { MsgData_sObjDeadInfo msg = parameter.msgParameter as MsgData_sObjDeadInfo; if (null == msg) return; // for (int i = 0; i < mSceneCache.Count; i++) // { // if (mSceneCache[i].ObjGuid == msg.ID) // { // mSceneCache.RemoveAt(i); // Debug.LogError("---------------------------------killid ___ 2:" + msg.KillerID + " bkill:" + msg.ID); // return; // } // } if (mObjRecord.ContainsKey(msg.ID)) { mObjRecord.Remove(msg.ID); } ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID); if (null == behitActor) { if (!mDeathCache.Contains(msg)) { mDeathCache.Add(msg); } //Debug.LogError("---------------------------------怪物死亡 1:" + msg.ID + " monst count:" + mObjRecord.Count); return; } //Debug.LogError("---------------------------------怪物死亡 2 :" + msg.ID + " monst count:" + mObjRecord.Count); ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID); BehitParam behitParam = new BehitParam(); DamageParam damageParam = new DamageParam(); damageParam.attackActor = attackActor; damageParam.behitActor = behitActor; damageParam.skillID = msg.KillerSkillID; behitParam.damgageInfo = damageParam; behitActor.OnDead(msg.KillerSkillID, attackActor, behitParam, EventParameter.Get()); }
private void OnObjectDead(GameEvent ge, EventParameter parameter) { MsgData_sObjDeadInfo msg = parameter.msgParameter as MsgData_sObjDeadInfo; if (null == msg) { return; } ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID); ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID); if (behitActor == CoreEntry.gActorMgr.MainPlayer) { StopHurtAnimation(); mainplayerDead = true; LogMgr.UnityLog("HPBarBoss StopHurtAnimation"); } }
IEnumerator DoDead(MsgData_sObjDeadInfo msg) { yield return new WaitForSeconds(0.3f); ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID); if (null == behitActor) yield break; ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID); BehitParam behitParam = new BehitParam(); DamageParam damageParam = new DamageParam(); damageParam.attackActor = attackActor; damageParam.behitActor = behitActor; damageParam.skillID = msg.KillerSkillID; behitParam.damgageInfo = damageParam; behitActor.OnDead(msg.KillerSkillID, attackActor, behitParam, EventParameter.Get()); }
void Update() { if (!bSceneLoaded) { return; } float time = 0.0f; float lastTime = Time.realtimeSinceStartup; while (mSceneCache.Count > 0) { if (time > mMaxPrcessingTime) { return; } SceneObj sceneObj = mSceneCache[0]; switch (sceneObj.ObjType) { case EnEntType.EnEntType_Player: MsgData_sSceneObjectEnterHuman humanStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterHuman; CoreEntry.gSceneLoader.LoadOtherPlayer(humanStruct); if (sceneObj.PlayerData != null) { sceneObj.PlayerData = null; } break; case EnEntType.EnEntType_Monster: MsgData_sSceneObjectEnterMonster monsterStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterMonster; //Debug.LogError("创建怪物:" + monsterStruct.Guid); if (!mObjRecord.ContainsKey(monsterStruct.Guid)) { CoreEntry.gSceneLoader.LoadMonster(monsterStruct); mObjRecord.Add(monsterStruct.Guid, CoreEntry.gActorMgr.GetActorByServerID(monsterStruct.Guid)); } else { //Debug.LogError("重复怪物:" + monsterStruct.Guid); } break; case EnEntType.EnEntType_NPC: MsgData_sSceneObjectEnterNPC npcStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterNPC; CoreEntry.gSceneLoader.LoadNPC(npcStruct); break; case EnEntType.EnEntType_StaticObj: MsgData_sSceneObjectEnterStaticObj sstaticStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterStaticObj; CoreEntry.gSceneLoader.LoadStaticObj(sstaticStruct); break; case EnEntType.EnEntType_Item: MsgData_sSceneObjectEnterItem itemStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterItem; EventParameter param = EventParameter.Get(); param.objParameter = itemStruct; CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_OBJ_ITEM_ENTER, param); break; case EnEntType.EnEntType_GatherObj: MsgData_sSceneObjectEnterCollection collectionStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterCollection; CoreEntry.gSceneLoader.LoadCollection(collectionStruct); break; case EnEntType.EnEntType_Pet: MsgData_sSceneObjectEnterPet petStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterPet; CoreEntry.gSceneLoader.LoadPet(petStruct); break; case EnEntType.EnEntType_BiaoChe: MsgData_sSceneObjectEnterBiaoChe cheStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterBiaoChe; CoreEntry.gSceneLoader.LoadBiaoChe(cheStruct); break; case EnEntType.EnEntType_Trap: MsgData_sSceneObjectEnterTrap trapStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterTrap; CoreEntry.gSceneLoader.LoadTrap(trapStruct); break; case EnEntType.EntType_VirtualPlayer: MsgData_sSceneObjectEnterVirtualPlayer vpStruct = sceneObj.ObjData as MsgData_sSceneObjectEnterVirtualPlayer; CoreEntry.gSceneLoader.LoadVirtualPlayer(vpStruct); break; default: break; } mSceneCache.RemoveAt(0); time += Time.realtimeSinceStartup - lastTime; } for (int i = 0; i < mDeathCache.Count; i++) { MsgData_sObjDeadInfo msg = mDeathCache[i]; ActorObj behitActor = CoreEntry.gActorMgr.GetActorByServerID(msg.ID); if (null == behitActor) { continue; } ActorObj attackActor = CoreEntry.gActorMgr.GetActorByServerID(msg.KillerID); BehitParam behitParam = new BehitParam(); DamageParam damageParam = new DamageParam(); damageParam.attackActor = attackActor; damageParam.behitActor = behitActor; damageParam.skillID = msg.KillerSkillID; behitParam.damgageInfo = damageParam; behitActor.OnDead(msg.KillerSkillID, attackActor, behitParam, EventParameter.Get()); mDeathCache.RemoveAt(i); i--; } for (int i = 0; i < mLeaveCache.Count; i++) { ActorObj actor = mLeaveCache[i]; if (null != actor) { if (actor.mActorState.IsDeathEnd()) { CoreEntry.gActorMgr.RemoveActorByServerID(actor.ServerID); actor.RecycleObj(); EventParameter param = EventParameter.Get(); param.longParameter = actor.ServerID; CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_ACTOR_REMOVE, param); if (actor is OtherPlayer) { param = EventParameter.Get(); param.longParameter = actor.ServerID; CoreEntry.gEventMgr.TriggerEvent(GameEvent.GE_OTHERPLAYER_LEAVE, param); } } else { continue; } } mLeaveCache.RemoveAt(i); i--; } }