O mica imbunatatire pentru
sistemul de pastrare a buff-urilor dupa moarte. Pe langa faptul ca poti alege exact ce affect-uri raman active, sunt gestionate si
efectele vizuale pentru a evita problemele care pot aparea pe unele surse dupa revive.
Locale_inc.h
Adauga:
InstanceBase.h
Cauta:
Adauga:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
void __HideAffectEffects();
void __RestoreAffectEffects();
#endif
InstanceBaseBattle.cpp
Cauta:
Cod: Selectaţi tot
void CInstanceBase::Revive()
{
m_isGoing=FALSE;
m_GraphicThingInstance.Revive();
__AttachHorseSaddle();
Adauga:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
__RestoreAffectEffects();
#endif
Cauta in functia: void CInstanceBase::Die()
Cod: Selectaţi tot
////////////////////////////////////////
__ClearAffects();
////////////////////////////////////////
Modifica:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
__HideAffectEffects();
#else
////////////////////////////////////////
__ClearAffects();
////////////////////////////////////////
#endif
Instance BaseEffect.cpp
Cauta functia:
Cod: Selectaţi tot
void CInstanceBase::__SetNormalAffectFlagContainer(const CAffectFlagContainer& c_rkAffectFlagContainer)
Adauga: INAINTE
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
void CInstanceBase::__HideAffectEffects()
{
if (IsStone())
return;
for (int i = 0; i < CAffectFlagContainer::BIT_SIZE; ++i)
{
if (m_kAffectFlagContainer.IsSet(i))
__SetAffect(i, false);
}
}
void CInstanceBase::__RestoreAffectEffects()
{
if (IsStone())
return;
for (int i = 0; i < CAffectFlagContainer::BIT_SIZE; ++i)
{
if (m_kAffectFlagContainer.IsSet(i))
__SetAffect(i, true);
}
}
#endif
service.h sau commondefines.h
Adauga:
char.h
Cauta:
Modifica:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
void ClearAffect(bool bSave = false, bool letBuffs = false);
#else
void ClearAffect(bool bSave = false);
#endif
Cauta:
Adauga:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
bool IsKeepBuffAfterDieAffect(BYTE bAffectType) const;
#endif
char_affect.cpp
Cauta:
Modifica:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
void CHARACTER::ClearAffect(bool bSave, bool letBuffs)
#else
void CHARACTER::ClearAffect(bool bSave)
#endif
In aceasi functie, cauta:
Cod: Selectaţi tot
if (bSave)
{
if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) )
{
++it;
continue;
}
Adauga:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
if (letBuffs && IsKeepBuffAfterDieAffect(pkAff->dwType))
{
++it;
continue;
}
#endif
Dupa functia:
Aici poti pune ce affect sa ramana
Adauga:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
bool CHARACTER::IsKeepBuffAfterDieAffect(BYTE bAffectType) const
{
switch (bAffectType)
{
case SKILL_HOSIN:
case SKILL_REFLECT:
case SKILL_GICHEON:
case SKILL_KWAESOK:
case SKILL_JEUNGRYEOK:
return true;
}
return false;
}
#endif
char_battle.cpp
Cauta:
Modifica:
Cod: Selectaţi tot
SetPosition(POS_DEAD);
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
if (IsPC())
ClearAffect(true, true);
else
ClearAffect(true);
#else
ClearAffect(true);
#endif
Cauta:
Cod: Selectaţi tot
if (GetDesc() != NULL) {
itertype(m_list_pkAffect) it = m_list_pkAffect.begin();
while (it != m_list_pkAffect.end()) {
CAffect* pkAff = *it++;
Adauga:
Cod: Selectaţi tot
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
if (IsKeepBuffAfterDieAffect(pkAff->dwType))
continue;
#endif
Functia devine asa:
Cod: Selectaţi tot
if (GetDesc() != NULL) {
itertype(m_list_pkAffect) it = m_list_pkAffect.begin();
while (it != m_list_pkAffect.end()) {
CAffect* pkAff = *it++;
#ifdef KEEP_BUFFS_PVM_AFTER_DIE
if (IsKeepBuffAfterDieAffect(pkAff->dwType))
continue;
#endif
SendAffectAddPacket(GetDesc(), pkAff);
}
}