BlackFullMoon 1
BlackFullMoon
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Bvural41 1
Bvural41
Hikaye Ekle
Kaynak ikonu

Altın Konu Şebnem Etkisi Sistemi -Tunga 2020-02-14

indirmek için izniniz yok
  • Konuyu başlatan Konuyu başlatan Tunga
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 14
  • Görüntüleme Görüntüleme 5K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

1723110254281.png

Sorunsuz çalışıyor teşekkürler.
 
Bu tarz bir sistem hali hazırda var ancak çalışma stilini beğenmediğim için tekrar yazmak istedim. O sistem eşyaların vnuma göre biraz daha düzensiz şekilde çalışmaktaydı.
Ben daha temiz bir kodlama ile eşyaların etkisine göre çalışacak şekilde revize ettim. Kodları okuduğunuzda belirgin şekilde anlayabilirsiniz.
Her şebnem kullanıldığında 2 değil sadece 1 etki çalışmaktadır. Bonuslar, yeni sunulan etkiler üzerinden sağlanmaktadır.

eVIK61IuOv.gif

[CODE lang="cpp" title="Fix"]

void CHARACTER::ClearAffect(bool bSave)
{
TAffectFlag afOld = m_afAffectFlag;
WORD wMovSpd = GetPoint(POINT_MOV_SPEED);
WORD wAttSpd = GetPoint(POINT_ATT_SPEED);

itertype(m_list_pkAffect) it = m_list_pkAffect.begin();

while (it != m_list_pkAffect.end())
{
CAffect * pkAff = *it;

if (bSave)
{
if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) )
{
++it;
continue;
}

#ifdef ENABLE_TUNGA_BLEND_AFFECT
int pkAff_blend[] = {RED_BLEND_POTION, ORANGE_BLEND_POTION, YELLOW_BLEND_POTION, GREEN_BLEND_POTION, BLUE_BLEND_POTION, WHITE_BLEND_POTION};

if ((pkAff->dwType == pkAff_blend[0]) || (pkAff->dwType == pkAff_blend[1]) || (pkAff->dwType == pkAff_blend[2]) ||
(pkAff->dwType == pkAff_blend[3]) || (pkAff->dwType == pkAff_blend[4]) || (pkAff->dwType == pkAff_blend[5]))
{
++it;
continue;
}
#endif

if (IsPC())
{
SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn);
}
}

ComputeAffect(pkAff, false);

it = m_list_pkAffect.erase(it);
CAffect::Release(pkAff);
}

if (afOld != m_afAffectFlag ||
wMovSpd != GetPoint(POINT_MOV_SPEED) ||
wAttSpd != GetPoint(POINT_ATT_SPEED))
UpdatePacket();

CheckMaximumPoints();

if (m_list_pkAffect.empty())
event_cancel(&m_pkAffectEvent);
}


[/CODE]
 
Acest gen de sistem deja există, dar am vrut să-l scriu din nou pentru că nu mi-a plăcut stilul de lucru. Acest sistem a funcționat puțin mai neregulat, în funcție de dimensiunea articolelor.
L-am revizuit pentru a funcționa în funcție de efectele articolelor cu o codare mai curată. Puteți înțelege clar codurile când le citiți.
De fiecare dată când se folosește roua, funcționează doar 1 efect, nu 2. Bonusurile sunt oferite prin efecte nou introduse.

eVIK61IuOv.gif
thnx
 
Bu tarz bir sistem hali hazırda var ancak çalışma stilini beğenmediğim için tekrar yazmak istedim. O sistem eşyaların vnuma göre biraz daha düzensiz şekilde çalışmaktaydı.
Ben daha temiz bir kodlama ile eşyaların etkisine göre çalışacak şekilde revize ettim. Kodları okuduğunuzda belirgin şekilde anlayabilirsiniz.
Her şebnem kullanıldığında 2 değil sadece 1 etki çalışmaktadır. Bonuslar, yeni sunulan etkiler üzerinden sağlanmaktadır.

eVIK61IuOv.gif
Teşekkürler
 
ne
[CODE lang="cpp" title="Fix"]

void CHARACTER::ClearAffect(bool bSave)
{
TAffectFlag afOld = m_afAffectFlag;
WORD wMovSpd = GetPoint(POINT_MOV_SPEED);
WORD wAttSpd = GetPoint(POINT_ATT_SPEED);

itertype(m_list_pkAffect) it = m_list_pkAffect.begin();

while (it != m_list_pkAffect.end())
{
CAffect * pkAff = *it;

if (bSave)
{
if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) )
{
++it;
continue;
}

#ifdef ENABLE_TUNGA_BLEND_AFFECT
int pkAff_blend[] = {RED_BLEND_POTION, ORANGE_BLEND_POTION, YELLOW_BLEND_POTION, GREEN_BLEND_POTION, BLUE_BLEND_POTION, WHITE_BLEND_POTION};

if ((pkAff->dwType == pkAff_blend[0]) || (pkAff->dwType == pkAff_blend[1]) || (pkAff->dwType == pkAff_blend[2]) ||
(pkAff->dwType == pkAff_blend[3]) || (pkAff->dwType == pkAff_blend[4]) || (pkAff->dwType == pkAff_blend[5]))
{
++it;
continue;
}
#endif

if (IsPC())
{
SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn);
}
}

ComputeAffect(pkAff, false);

it = m_list_pkAffect.erase(it);
CAffect::Release(pkAff);
}

if (afOld != m_afAffectFlag ||
wMovSpd != GetPoint(POINT_MOV_SPEED) ||
wAttSpd != GetPoint(POINT_ATT_SPEED))
UpdatePacket();

CheckMaximumPoints();

if (m_list_pkAffect.empty())
event_cancel(&m_pkAffectEvent);
}


[/CODE]
nereye ekliyoruz
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst