Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Problem z bonusami w kamieniach duszy nie zawsze są przydzielane

Featured Replies

Opublikowano

Siemano.

Przerobiłem bonusy w kd wraz z ich id aby były równo ułożone o 100 od poprzednich

Po wszystkim w grze bonusy normalnie widze w itemach ale pod komendą /state jakby gubił bonusy..

Tak jak w tym przykładzie powinienem dostać 50 na woja, 50 na ninje. A dostaje 50 na woja i 50 na sure.

Nowe proto wrzucone do clienta, serwer po restarcie

Spoiler

wpis z item_proto

Spoiler

Co dziwniejsze drugi zestaw bronii również nie działa już wgl

Spoiler

EDIT!

Bonusy wszystkie działają ale pod komendą /state nie pokaże nam wartości!

Jeżeli chodzi o wyliczenie bonusu jaki posiadamy które poprawnie wylicza:

  • kd witalności
  • kd obony
  • kd uchylenia

Reszta jest źle liczona lub w ogółe /state nie bierze ich pod uwage.

 

Edytowane przez ExoCarossa

Rozwiązane przez ExoCarossa

Opublikowano

Musisz sprawdzić, czy po dodaniu kamienia duszy dodajesz poprawnie bonus oraz czy ten bonus jest aktywny po zmianie mapy. Na początek dodaj logi, aby sprawdzić, co się tam dzieje.

 

📂Lokalizacja pliku: 'game -> src -> item.cpp'

🔎Szukaj

CKod został skopiowany
void CItem::ModifyPoints(bool bAdd)

 

CKod został skopiowany
m_pOwner->ApplyPoint(p->aApplies[i].bType, bAdd ? p->aApplies[i].lValue : -p->aApplies[i].lValue);

 

Dodaj

CKod został skopiowany
m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Applying bonus type: %d, value: %d", p->aApplies[i].bType, applyValue);

 

Po dodaniu tego logu, powinieneś otrzymać informację o tym, jaki typ bonusu dodajesz i jego wartość oraz czy bonus jest aktywny po zmianie mapy.

Opublikowano
  • Autor
W dniu 22.05.2024 o 10:41, Sevence napisał(a):

Musisz sprawdzić, czy po dodaniu kamienia duszy dodajesz poprawnie bonus oraz czy ten bonus jest aktywny po zmianie mapy. Na początek dodaj logi, aby sprawdzić, co się tam dzieje.

 

📂Lokalizacja pliku: 'game -> src -> item.cpp'

🔎Szukaj

CKod został skopiowany
void CItem::ModifyPoints(bool bAdd)

 

CKod został skopiowany
m_pOwner->ApplyPoint(p->aApplies[i].bType, bAdd ? p->aApplies[i].lValue : -p->aApplies[i].lValue);

 

Dodaj

CKod został skopiowany
m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Applying bonus type: %d, value: %d", p->aApplies[i].bType, applyValue);

 

Po dodaniu tego logu, powinieneś otrzymać informację o tym, jaki typ bonusu dodajesz i jego wartość oraz czy bonus jest aktywny po zmianie mapy.

image.png.54f25db237c7f672449428e87585a79a.png

60 to bonus ninji a pod /state wyrzuca sury, po tp bonusy się utrzymują o czym informuje log z game

zakladajac bron z kd sury dostaje to;

image.png.9c5c512a486b73a90df838e5b57b17ff.png

czyli id prawidłowe ALE

/state

image.png.b77db2c5a23bbe5c933820f643649f72.png

Edytowane przez ExoCarossa

Opublikowano
  • Autor
  • Rozwiązanie
W dniu 22.05.2024 o 11:18, Sevence napisał(a):

Wrócę z pracy to zerknę, co powoduje ten problem, ale bonus masz aktywny w takim razie. Zrób test czy zadajesz większe obrażenia powinien działać. Pewnie tylko state jest jakiś problem. 

Tak, działa bonus po tp i jak i bezpośrednim założeniu przedmiotu po dodaniu kd

bez kd:

image.png.591e3cd091307423897cec62ab874bd3.png

z kd:

image.png.cc8fe1824885bb38a555d96d59e57630.png

Opublikowano
  • Autor

Funkcja state na prośbe @Sevence

CKod został skopiowany
ACMD(do_state){    char arg1[256];    LPCHARACTER tch;     one_argument(argument, arg1, sizeof(arg1));     if (*arg1)    {        if (arg1[0] == '#')        {            tch = CHARACTER_MANAGER::instance().Find(strtoul(arg1+1, NULL, 10));        }        else        {            LPDESC d = DESC_MANAGER::instance().FindByCharacterName(arg1);             if (!d)                tch = NULL;            else                tch = d->GetCharacter();        }    }    else        tch = ch;     if (!tch)        return;     char buf[256];     snprintf(buf, sizeof(buf), "%s's State: ", tch->GetName());     if (tch->IsPosition(POS_FIGHTING))        strlcat(buf, "Battle", sizeof(buf));    else if (tch->IsPosition(POS_DEAD))        strlcat(buf, "Dead", sizeof(buf));    else        strlcat(buf, "Standing", sizeof(buf));     if (ch->GetShop())        strlcat(buf, ", Shop", sizeof(buf));     if (ch->GetExchange())        strlcat(buf, ", Exchange", sizeof(buf));     ch->ChatPacket(CHAT_TYPE_INFO, "%s", buf);     int len;    len = snprintf(buf, sizeof(buf), "Coordinate %ldx%ld (%ldx%ld)",             tch->GetX(), tch->GetY(), tch->GetX() / 100, tch->GetY() / 100);     if (len < 0 || len >= (int) sizeof(buf))        len = sizeof(buf) - 1;     LPSECTREE pSec = SECTREE_MANAGER::instance().Get(tch->GetMapIndex(), tch->GetX(), tch->GetY());     if (pSec)    {        TMapSetting& map_setting = SECTREE_MANAGER::instance().GetMap(tch->GetMapIndex())->m_setting;        snprintf(buf + len, sizeof(buf) - len, " MapIndex %ld Attribute %08X Local Position (%ld x %ld)",             tch->GetMapIndex(), pSec->GetAttribute(tch->GetX(), tch->GetY()), (tch->GetX() - map_setting.iBaseX)/100, (tch->GetY() - map_setting.iBaseY)/100);    }     ch->ChatPacket(CHAT_TYPE_INFO, "%s", buf);     ch->ChatPacket(CHAT_TYPE_INFO, "LEV %d", tch->GetLevel());    ch->ChatPacket(CHAT_TYPE_INFO, "HP %d/%d", tch->GetHP(), tch->GetMaxHP());    ch->ChatPacket(CHAT_TYPE_INFO, "SP %d/%d", tch->GetSP(), tch->GetMaxSP());    ch->ChatPacket(CHAT_TYPE_INFO, "ATT %d MAGIC_ATT %d SPD %d CRIT %d%% PENE %d%% ATT_BONUS %d%%",            tch->GetPoint(POINT_ATT_GRADE),            tch->GetPoint(POINT_MAGIC_ATT_GRADE),            tch->GetPoint(POINT_ATT_SPEED),            tch->GetPoint(POINT_CRITICAL_PCT),            tch->GetPoint(POINT_PENETRATE_PCT),            tch->GetPoint(POINT_ATT_BONUS));    ch->ChatPacket(CHAT_TYPE_INFO, "DEF %d MAGIC_DEF %d BLOCK %d%% DODGE %d%% DEF_BONUS %d%%",             tch->GetPoint(POINT_DEF_GRADE),            tch->GetPoint(POINT_MAGIC_DEF_GRADE),            tch->GetPoint(POINT_BLOCK),            tch->GetPoint(POINT_DODGE),            tch->GetPoint(POINT_DEF_BONUS));    ch->ChatPacket(CHAT_TYPE_INFO, "RESISTANCES:");    ch->ChatPacket(CHAT_TYPE_INFO, "   WARR:%3d%% ASAS:%3d%% SURA:%3d%% SHAM:%3d%%",            tch->GetPoint(POINT_RESIST_WARRIOR),            tch->GetPoint(POINT_RESIST_ASSASSIN),            tch->GetPoint(POINT_RESIST_SURA),            tch->GetPoint(POINT_RESIST_SHAMAN));    ch->ChatPacket(CHAT_TYPE_INFO, "   SWORD:%3d%% THSWORD:%3d%% DAGGER:%3d%% BELL:%3d%% FAN:%3d%% BOW:%3d%%",            tch->GetPoint(POINT_RESIST_SWORD),            tch->GetPoint(POINT_RESIST_TWOHAND),            tch->GetPoint(POINT_RESIST_DAGGER),            tch->GetPoint(POINT_RESIST_BELL),            tch->GetPoint(POINT_RESIST_FAN),            tch->GetPoint(POINT_RESIST_BOW));    ch->ChatPacket(CHAT_TYPE_INFO, "   FIRE:%3d%% ELEC:%3d%% MAGIC:%3d%% WIND:%3d%% CRIT:%3d%% PENE:%3d%%",            tch->GetPoint(POINT_RESIST_FIRE),            tch->GetPoint(POINT_RESIST_ELEC),            tch->GetPoint(POINT_RESIST_MAGIC),            tch->GetPoint(POINT_RESIST_WIND),            tch->GetPoint(POINT_RESIST_CRITICAL),            tch->GetPoint(POINT_RESIST_PENETRATE));    ch->ChatPacket(CHAT_TYPE_INFO, "   ICE:%3d%% EARTH:%3d%% DARK:%3d%%",            tch->GetPoint(POINT_RESIST_ICE),            tch->GetPoint(POINT_RESIST_EARTH),            tch->GetPoint(POINT_RESIST_DARK));     ch->ChatPacket(CHAT_TYPE_INFO, "MALL:");    ch->ChatPacket(CHAT_TYPE_INFO, "   ATT:%3d%% DEF:%3d%% EXP:%3d%% ITEMx%d GOLDx%d",            tch->GetPoint(POINT_MALL_ATTBONUS),            tch->GetPoint(POINT_MALL_DEFBONUS),            tch->GetPoint(POINT_MALL_EXPBONUS),            tch->GetPoint(POINT_MALL_ITEMBONUS) / 10,            tch->GetPoint(POINT_MALL_GOLDBONUS) / 10);     ch->ChatPacket(CHAT_TYPE_INFO, "BONUS:");    ch->ChatPacket(CHAT_TYPE_INFO, "   SKILL:%3d%% NORMAL:%3d%% SKILL_DEF:%3d%% NORMAL_DEF:%3d%%",            tch->GetPoint(POINT_SKILL_DAMAGE_BONUS),            tch->GetPoint(POINT_NORMAL_HIT_DAMAGE_BONUS),            tch->GetPoint(POINT_SKILL_DEFEND_BONUS),            tch->GetPoint(POINT_NORMAL_HIT_DEFEND_BONUS));     ch->ChatPacket(CHAT_TYPE_INFO, "   HUMAN:%3d%% ANIMAL:%3d%% ORC:%3d%% MILGYO:%3d%% UNDEAD:%3d%%",            tch->GetPoint(POINT_ATTBONUS_HUMAN),            tch->GetPoint(POINT_ATTBONUS_ANIMAL),            tch->GetPoint(POINT_ATTBONUS_ORC),            tch->GetPoint(POINT_ATTBONUS_MILGYO),            tch->GetPoint(POINT_ATTBONUS_UNDEAD));     ch->ChatPacket(CHAT_TYPE_INFO, "   DEVIL:%3d%% INSECT:%3d%% FIRE:%3d%% ICE:%3d%% DESERT:%3d%%",            tch->GetPoint(POINT_ATTBONUS_DEVIL),            tch->GetPoint(POINT_ATTBONUS_INSECT),            tch->GetPoint(POINT_ATTBONUS_FIRE),            tch->GetPoint(POINT_ATTBONUS_ICE),            tch->GetPoint(POINT_ATTBONUS_DESERT));     ch->ChatPacket(CHAT_TYPE_INFO, "   TREE:%3d%% MONSTER:%3d%%",            tch->GetPoint(POINT_ATTBONUS_TREE),            tch->GetPoint(POINT_ATTBONUS_MONSTER));     ch->ChatPacket(CHAT_TYPE_INFO, "   WARR:%3d%% ASAS:%3d%% SURA:%3d%% SHAM:%3d%%",            tch->GetPoint(POINT_ATTBONUS_WARRIOR),            tch->GetPoint(POINT_ATTBONUS_ASSASSIN),            tch->GetPoint(POINT_ATTBONUS_SURA),            tch->GetPoint(POINT_ATTBONUS_SHAMAN)); #ifdef ENABLE_NEW_TYPE_BONUSES    ch->ChatPacket(CHAT_TYPE_INFO, "NOWE BONUSY:");    ch->ChatPacket(CHAT_TYPE_INFO, "   ATT_STONE:%3d%%", tch->GetPoint(POINT_ATTBONUS_STONE));    ch->ChatPacket(CHAT_TYPE_INFO, "   ATT_BOSS:%3d%%", tch->GetPoint(POINT_ATTBONUS_BOSS));    ch->ChatPacket(CHAT_TYPE_INFO, "   ATT_WLADCY:%3d%%", tch->GetPoint(POINT_ATTBONUS_WLADCY));    ch->ChatPacket(CHAT_TYPE_INFO, "   DEF_HUMAN:%3d%%", tch->GetPoint(POINT_RESIST_HUMAN));    ch->ChatPacket(CHAT_TYPE_INFO, "   DEF_MONSTER:%3d%%", tch->GetPoint(POINT_RESIST_MONSTER));    ch->ChatPacket(CHAT_TYPE_INFO, "   DEF_BOSS:%3d%%", tch->GetPoint(POINT_RESIST_BOSS));    ch->ChatPacket(CHAT_TYPE_INFO, "   DEF_WLADCY:%3d%%", tch->GetPoint(POINT_RESIST_WLADCY));#endif     for (int i = 0; i < MAX_PRIV_NUM; ++i)        if (CPrivManager::instance().GetPriv(tch, i))        {            int iByEmpire = CPrivManager::instance().GetPrivByEmpire(tch->GetEmpire(), i);            int iByGuild = 0;             if (tch->GetGuild())                iByGuild = CPrivManager::instance().GetPrivByGuild(tch->GetGuild()->GetID(), i);             int iByPlayer = CPrivManager::instance().GetPrivByCharacter(tch->GetPlayerID(), i);             if (iByEmpire)                ch->ChatPacket(CHAT_TYPE_INFO, "%s for empire : %d", LC_TEXT(c_apszPrivNames[i]), iByEmpire);             if (iByGuild)                ch->ChatPacket(CHAT_TYPE_INFO, "%s for guild : %d", LC_TEXT(c_apszPrivNames[i]), iByGuild);             if (iByPlayer)                ch->ChatPacket(CHAT_TYPE_INFO, "%s for player : %d", LC_TEXT(c_apszPrivNames[i]), iByPlayer);        }}
Opublikowano
  • Autor
W dniu 23.05.2024 o 09:55, Sevence napisał(a):

Wrzuć jeszcze funkcję CHARACTER::ApplyPoint i z contants.cpp const TApplyInfo aApplyInfo[MAX_APPLY_NUM]  i TValueName c_aApplyTypeNames[] =

CHARACTER::ApplyPoint:

Spoiler

const TApplyInfo aApplyInfo[MAX_APPLY_NUM]

Spoiler

TValueName c_aApplyTypeNames[] =

Spoiler
Opublikowano

Trzeba zobaczyć czy problem jest z pobieraniem czy ustawianiem dodaj w getpoint i setpoint logi: 

 

CKod został skopiowany
 sys_log(0, "GetPoint: %s type %d, value %d", GetName(), type, val); 

 

 

W set point warunek zmień tak

CKod został skopiowany
    if (type < POINT_MAX_NUM)    {        sys_log(0, "SetPoint: %s type %d, value %d", GetName(), type, value);        m_pointsInstant.points[type] = value;        sys_log(0, "SetPoint: %s type %d, new value %d", GetName(), type, m_pointsInstant.points[type]);    }
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.