public bool AddObj(IStatus pStatus) { var pInfo = new StatusInfoStruct(); pStatus.GetInfo(ref pInfo); if (Status.ContainsKey(pInfo.Status)) { return(false); // status already exists } if (pInfo.Status < 64) { ulong flag = 1UL << (pInfo.Status - 1); Status.TryAdd(pInfo.Status, pStatus); Status0 |= flag; } else if (pInfo.Status < 128) { ulong flag = 1UL << (pInfo.Status - 1); Status.TryAdd(pInfo.Status, pStatus); Status1 |= flag; } switch (pStatus.Identity) { case FlagInt.TYRANT_AURA: case FlagInt.FEND_AURA: case FlagInt.WATER_AURA: case FlagInt.FIRE_AURA: case FlagInt.METAL_AURA: case FlagInt.WOOD_AURA: case FlagInt.EARTH_AURA: { if (m_pOwner is Character && (m_pOwner as Character).Team != null && pStatus.CasterId == m_pOwner.Identity) { (m_pOwner as Character).Team.AddAura(pStatus); } break; } } if (pStatus.Identity == FlagInt.SHACKLED && m_pOwner is Character) { (m_pOwner as Character).UpdateSoulShackle(pInfo.Seconds); } else if (pStatus.Identity == FlagInt.AZURE_SHIELD && m_pOwner is Character) { (m_pOwner as Character).UpdateAzureShield(pInfo.Seconds, pInfo.Power, pStatus.Level); } var pUser = m_pOwner as Character; if (pUser != null) { pUser.RecalculateAttributes(); } return(true); }
public bool GetInfo(ref StatusInfoStruct pInfo) { pInfo.Power = m_nData; pInfo.Seconds = m_tKeep.GetRemain(); pInfo.Status = m_nStatus; pInfo.Times = m_nTimes; return(IsValid); }