public void UpdateLogicEvent() { if (m_listLogicEvent.Count == 0) { return; } _LOGIC_EVENT pLogicEvent; uint uTimeNow = GameProcedure.s_pTimeSystem.GetTimeNow(); int iterator = 0; while (iterator < m_listLogicEvent.Count && m_listLogicEvent.Count != 0) { pLogicEvent = m_listLogicEvent[iterator]; bool bMustRemove = false; bool bMustDo = false; if (pLogicEvent.m_nSenderID != MacroDefine.UINT_MAX) { CObject pObject = CObjectManager.Instance.FindServerObject((int)pLogicEvent.m_nSenderID); if (pObject != null) { uint elapseTime = pLogicEvent.m_uBeginTime + pLogicEvent.m_uRemoveTime; if (pObject.IsLogicReady(pLogicEvent.m_nSenderLogicCount)) { LogManager.Log("UpdateLogicEvent IsLogicReady" + this.m_Character.ServerID); bMustDo = true; } else if (elapseTime < uTimeNow) { LogManager.Log("UpdateLogicEvent elapseTime" + this.m_Character.ServerID); bMustRemove = true; } } else { LogManager.Log("UpdateLogicEvent pObject== null" + this.m_Character.ServerID); bMustDo = true; } } else { LogManager.Log("UpdateLogicEvent pLogicEvent.m_nSenderID == MacroDefine.UINT_MAX" + this.m_Character.ServerID); bMustDo = true; } if (bMustDo || bMustRemove) { if (pLogicEvent.m_nEventType == ENUM_LOGIC_EVENT_TYPE.LOGIC_EVENT_TYPE_DAMAGE && pLogicEvent.m_damage.m_nBulletID != MacroDefine.INVALID_ID) { bMustDo = false; if (!bMustRemove)// 超时删除 [6/30/2011 Sun] { break; } } //AxTrace(0, 0, "%s", "Show Damage in Update_LogicEvent!"); if (bMustDo) { LogManager.Log("UpdateLogicEvent DoLogicEvent" + this.m_Character.ServerID); DoLogicEvent(pLogicEvent); } else { LogManager.Log("Enter not must do"); } if (!m_listLogicEvent.Remove(pLogicEvent)) { LogManager.LogWarning("m_listLogicEvent remove failed"); } LogManager.Log("m_Character.IsDie()" + m_Character.IsDie() + " ServerID " + this.m_Character.ServerID + "m_listLogicEvent.Count " + m_listLogicEvent.Count + "m_Character.CharacterLogic_Get() " + m_Character.CharacterLogic_Get()); if (m_listLogicEvent.Count == 0 && m_Character.IsDie() && m_Character.CharacterLogic_Get() != ENUM_CHARACTER_LOGIC.CHARACTER_LOGIC_DEAD) { m_Character.OnDead(true); } } else { iterator++; } } }