void CStatusEffectContainer::AddStatusEffect(CStatusEffect* PStatusEffect) { if(PStatusEffect != NULL) { SetEffectName(PStatusEffect); PStatusEffect->SetOwner(m_POwner); PStatusEffect->SetStartTime(gettick()); luautils::OnEffectGain(m_POwner, PStatusEffect); m_POwner->addModifiers(&PStatusEffect->modList); m_POwner->UpdateHealth(); m_StatusEffectList.push_back(PStatusEffect); if (m_POwner->objtype == TYPE_PC) { CCharEntity* PChar = (CCharEntity*)m_POwner; if (PStatusEffect->GetIcon() != 0) { UpdateStatusIcons(); PChar->pushPacket(new CMessageBasicPacket(PChar, PChar, PStatusEffect->GetIcon(), 0, 205)); } if (PChar->status == STATUS_NORMAL) PChar->status = STATUS_UPDATE; PChar->pushPacket(new CCharHealthPacket(PChar)); PChar->pushPacket(new CCharSyncPacket(PChar)); } } }
gd::Effect& Layer::InsertNewEffect(const gd::String& name, std::size_t position) { auto newEffect = std::make_shared<Effect>(); newEffect->SetName(name); newEffect->SetEffectName(name); if (position < effects.size()) effects.insert(effects.begin() + position, newEffect); else effects.push_back(newEffect); return *newEffect; }