Skocz do zawartości
Opublikowano

Cześć, prosto tłumacząc mam błąd przy bonusach za punkty rangi mianowicie:

Przykład: mam rangę Legenda nadaje mi ona powiedzmy 30k HP moja postać ma 100k HP gdy ktoś mnie zabije moja wartość HP podczas smierci spada o 30K HP i po wstaniu już nie wraca do 100k HP 

niżej daję kod w którym próbuję się pozbyć tego:

#ifdef __ENABLE_ALIGN_RENEWAL__
void CHARACTER::OnAlignUpdate(int lOldAlignment)
{
    if (GetRealAlignment() >= 11000000)
    {
        if (lOldAlignment < 11000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 35000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 24, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 24, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 24, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 10, 0, 60*60*60*365, 0, true);
    }
    else if (GetRealAlignment() >= 9000000)
    {
        if (lOldAlignment < 9000000 && lOldAlignment >= 11000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 30000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 21, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 21, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 21, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 8, 0, 60*60*60*365, 0, true);
    }
    else if (GetRealAlignment() >= 8000000)
    {
        if (lOldAlignment < 8000000 && lOldAlignment >= 9000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 25000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 18, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 18, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 18, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 7, 0, 60*60*60*365, 0, true);
    }
    else if (GetRealAlignment() >= 6000000)
    {
        if (lOldAlignment < 6000000 && lOldAlignment >= 8000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 20000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 15, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 15, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 15, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 6, 0, 60*60*60*365, 0, true);
    }
    else if (GetRealAlignment() >= 4000000)
    {
        if (lOldAlignment < 4000000 && lOldAlignment >= 6000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 15000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 12, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 12, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 12, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 5, 0, 60*60*60*365, 0, true);
    }
    else if (GetRealAlignment() >= 2000000)
    {
        if (lOldAlignment < 2000000 && lOldAlignment >= 4000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 10000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 8, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 8, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 8, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 4, 0, 60 * 60 * 60 * 365, 0, true);
    }
    else if (GetRealAlignment() >= 1000000)
    {
        if (lOldAlignment < 1000000 && lOldAlignment >= 2000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 5000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 5, 0, 60*60*60*365, 0, true);        
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 5, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 5, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 3, 0, 60 * 60 * 60 * 365, 0, true);
    }
    else if (GetRealAlignment() >= 500000)
    {
        if (lOldAlignment < 500000 && lOldAlignment >= 1000000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 3000, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 3, 0, 60*60*60*365, 0, true);        
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 3, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 3, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 2, 0, 60 * 60 * 60 * 365, 0, true);
    }
    else if (GetRealAlignment() >= 100000)
    {
        if (lOldAlignment < 100000 && lOldAlignment >= 500000)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        AddAffect(AFFECT_ALIGN_BONUS1, POINT_MAX_HP, 1500, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS2, POINT_ATTBONUS_MONSTER, 1, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS3, POINT_ATTBONUS_STONE, 1, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS4, POINT_ATTBONUS_BOSS, 1, 0, 60*60*60*365, 0, true);
        AddAffect(AFFECT_ALIGN_BONUS5, POINT_ATTBONUS_HUMAN, 1, 0, 60 * 60 * 60 * 365, 0, true);
        
    }
    else
    {
        if (lOldAlignment >= 100000 && GetRealAlignment() >= 0)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
        else if (lOldAlignment >= 0 && GetRealAlignment() < 0)
        {
            RemoveAffect(AFFECT_ALIGN_BONUS1);
            RemoveAffect(AFFECT_ALIGN_BONUS2);
            RemoveAffect(AFFECT_ALIGN_BONUS3);
            RemoveAffect(AFFECT_ALIGN_BONUS4);
            RemoveAffect(AFFECT_ALIGN_BONUS5);
        }
    }
}
#endif

 Dodawałem tutaj już dodać już warunek Ale bez rekacji

#ifdef __ENABLE_ALIGN_RENEWAL__ void CHARACTER::OnAlignUpdate(int lOldAlignment) 
{
// Sprawdzenie, czy postać jest martwa 
if (IsDead()) return;

 

Rozwiązane przez Denis

Przejdź do rozwiązania

Featured Replies

Opublikowano

Wydaje się że już mieliśmy podobny temat z tym systemem i raczej nie działa on dobrze. 

 

Wydaje mi się że problemem jest z przydzielaniem bonusu hp przez affecty, czy inne bonusy dla tej rangi też znikają czy problem dotyczy tylko hp?

Opublikowano
  • Autor
20 minut temu, Sevence napisał(a):

Wydaje się że już mieliśmy podobny temat z tym systemem i raczej nie działa on dobrze. 

 

Wydaje mi się że problemem jest z przydzielaniem bonusu hp przez affecty, czy inne bonusy dla tej rangi też znikają czy problem dotyczy tylko hp?

niestety każdy bonus który nadaje aktualna ranga

Opublikowano
  • Autor
  • Rozwiązanie

Rozwiązanie 🙂

char_affect.cpp

szukaj:

 

 

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

dodaj nad

#ifdef __ENABLE_ALIGN_RENEWAL__
            int derece_bonus[] = {AFFECT_ALIGN_BONUS1, AFFECT_ALIGN_BONUS2, AFFECT_ALIGN_BONUS3};
          
            if ((pkAff->dwType == derece_bonus[0]) || (pkAff->dwType == derece_bonus[1]) || (pkAff->dwType == derece_bonus[2]))
            {
                ++it;
                continue;
            }
#endif

 

  • Sevence zmienił(a) tytuł na Rozwiązanie błędu w systemie ALIGN_RENEWAL reset bonusów po śmierci
  • Sevence zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.