Çözüldü tılsım sistemi hk

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 11
  • Gösterim Gösterim 142
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

enes turan

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
559
Çözümler
35
Beğeni
281
Puan
909
Ticaret Puanı
0
merhabalar official tılsım sistemini kurdum offcial bonuslarıda ekledim sorun yok

tılsıma efsun atınca başarı ile eklendi diyor ama herhangi bir efsun eklenmiyor

ch1 düşen syser

Kod:
Genişlet Daralt Kopyala
SYSERR: Aug 29 00:01:40 :: number_ex: number(): first argument is bigger than second argument 1 -> 0, D:\mainline_updated-u10\ServerSource\game\src\item_attribute.cpp 196
SYSERR: Aug 29 00:01:40 :: CItem::PutAttributeWithLevel: Cannot put item attribute 9 2

neyden kaynaklanıyor bilgisi olan varmı ?
 
Çözüm
sorunun çözümü

item_attr tablosunda pendant ve glove için açtığım slotlara değer atamamışım 0 döndüğü için bu syseri veriyormuş
Adsız.webp

test için 5 verince sorun çözüldü :D


Adsız.webp


konu kapatılabilir teşekkürler.
Örneğin; sen mob protodaki mingoldu maxgolddan büyük yaparsan aynı şekilde hata alırsın. Parametreye yanlış değerler giriliyor. Tılsım için konuşursak CItem:: sınıfındaki o fonksiyon içindeki bu Syserr da 2 adet format var bunlar neyi alıyor bakmak lazım ama tahminen

9 = min
2 = max

Min maxdan büyük olamaz. İşte olduğum için kodları görmeden bunları söyleyebilirim ancak.

Örnek
NumberEx(int dwMinGold, int dwMaxGold)

if (dwMinGold > dwMaxGold) {
syserr(“Hata!! Mingold maxGold dan büyük min: %d max: %d”, dwMinGold, dwMaxGold); return; }
 
Son düzenleme:
Örneğin; sen mob protodaki mingoldu maxgolddan büyük yaparsan aynı şekilde hata alırsın. Parametreye yanlış değerler giriliyor. Tılsım için konuşursak CItem:: sınıfındaki o fonksiyon içindeki bu Syserr da 2 adet format var bunlar neyi alıyor bakmak lazım ama tahminen

9 = min
2 = max

Min maxdan büyük olamaz. İşte olduğum için kodları görmeden bunları söyleyebilirim ancak.

Örnek
NumberEx(int dwMinGold, int dwMaxGold)

if (dwMinGold > dwMaxGold) {
syserr(“Hata!! Mingold maxGold dan büyük min: %d max: %d”, dwMinGold, dwMaxGold); return; }
item_attribute.cpp:
Genişlet Daralt Kopyala
void CItem::PutAttributeWithLevel(BYTE bLevel)
{
    int iAttributeSet = GetAttributeSetIndex();

    if (iAttributeSet < 0)
        return;

    if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL)
        return;

    std::vector<int> avail;

    int total = 0;

    // 붙일 수 있는 속성 배열을 구축
    for (int i = 0; i < MAX_APPLY_NUM; ++i)
    {
        const TItemAttrTable& r = g_map_itemAttr[i];

        if (r.bMaxLevelBySet[iAttributeSet] && !HasAttr(i))
        {
            avail.push_back(i);
            total += r.dwProb;
        }
    }

    // 구축된 배열로 확률 계산을 통해 붙일 속성 선정
    unsigned int prob = number(1, total);
    int attr_idx = APPLY_NONE;

    for (DWORD i = 0; i < avail.size(); ++i)
    {
        const TItemAttrTable& r = g_map_itemAttr[avail[i]];

        if (prob <= r.dwProb)
        {
            attr_idx = avail[i];
            break;
        }

        prob -= r.dwProb;
    }

    if (!attr_idx)
    {
        sys_err("Cannot put item attribute %d %d", iAttributeSet, bLevel);
        return;
    }

    const TItemAttrTable& r = g_map_itemAttr[attr_idx];

    // 종류별 속성 레벨 최대값 제한
    if (bLevel > r.bMaxLevelBySet[iAttributeSet])
        bLevel = r.bMaxLevelBySet[iAttributeSet];

    AddAttr(attr_idx, bLevel);
}

syseri veren kod bloğu bu şekilde
 
item_attribute.cpp:
Genişlet Daralt Kopyala
void CItem::PutAttributeWithLevel(BYTE bLevel)
{
    int iAttributeSet = GetAttributeSetIndex();

    if (iAttributeSet < 0)
        return;

    if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL)
        return;

    std::vector<int> avail;

    int total = 0;

    // 붙일 수 있는 속성 배열을 구축
    for (int i = 0; i < MAX_APPLY_NUM; ++i)
    {
        const TItemAttrTable& r = g_map_itemAttr[i];

        if (r.bMaxLevelBySet[iAttributeSet] && !HasAttr(i))
        {
            avail.push_back(i);
            total += r.dwProb;
        }
    }

    // 구축된 배열로 확률 계산을 통해 붙일 속성 선정
    unsigned int prob = number(1, total);
    int attr_idx = APPLY_NONE;

    for (DWORD i = 0; i < avail.size(); ++i)
    {
        const TItemAttrTable& r = g_map_itemAttr[avail[i]];

        if (prob <= r.dwProb)
        {
            attr_idx = avail[i];
            break;
        }

        prob -= r.dwProb;
    }

    if (!attr_idx)
    {
        sys_err("Cannot put item attribute %d %d", iAttributeSet, bLevel);
        return;
    }

    const TItemAttrTable& r = g_map_itemAttr[attr_idx];

    // 종류별 속성 레벨 최대값 제한
    if (bLevel > r.bMaxLevelBySet[iAttributeSet])
        bLevel = r.bMaxLevelBySet[iAttributeSet];

    AddAttr(attr_idx, bLevel);
}

syseri veren kod bloğu bu şekilde
Eğer attr_idx 0 veya APPLY_NONE ise yani bir bonus almıyorsa bu Syserr düşüyor. AttributeIndexi var mı? Yani hangi kümeden bonus alacak. Tılsımlara AttributeIndex tanımlı mı?
 
Eğer attr_idx 0 veya APPLY_NONE ise yani bir bonus almıyorsa bu Syserr düşüyor. AttributeIndexi var mı? Yani hangi kümeden bonus alacak. Tılsımlara AttributeIndex tanımlı mı?
Kod:
Genişlet Daralt Kopyala
9600    E¡©¢¯¡ÆAC ©øe¢¬¢ç¡Æ©ø +0    ITEM_ARMOR    ARMOR_PENDANT    1    NONE    ITEM_TUNABLE    WEAR_PENDANT    NONE    0    0    9601    440    0    LEVEL    20    LIMIT_NONE    0    APPLY_ENCHANT_FIRE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0

tılsımlar bu şekilde

EAttributeSet içerisinde

ATTRIBUTE_SET_PENDANT, tanımlı
 
Kod:
Genişlet Daralt Kopyala
9600    E¡©¢¯¡ÆAC ©øe¢¬¢ç¡Æ©ø +0    ITEM_ARMOR    ARMOR_PENDANT    1    NONE    ITEM_TUNABLE    WEAR_PENDANT    NONE    0    0    9601    440    0    LEVEL    20    LIMIT_NONE    0    APPLY_ENCHANT_FIRE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0

tılsımlar bu şekilde

EAttributeSet içerisinde

ATTRIBUTE_SET_PENDANT, tanımlı
Onu oraya eklemek ile bitmiyor.
item_attribute.cpp de tanımlaman lazım sonra db/src CMBoot’a veya CManager.cpp ye ekleyeceksin attr tablosu için hangi cpp ydi hatırlamıyorum şu an.
 
Onu oraya eklemek ile bitmiyor.
item_attribute.cpp de tanımlaman lazım sonra db/src CMBoot’a veya CManager.cpp ye ekleyeceksin attr tablosu için hangi cpp ydi hatırlamıyorum şu an.
boot:
Genişlet Daralt Kopyala
bool CClientManager::InitializeItemAttrTable()
{
    char query[4096];
        snprintf(query, sizeof(query),
            "SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear, pendant FROM item_attr%s ORDER BY apply",
            GetTablePostfix());

    std::unique_ptr<SQLMsg> pkMsg (CDBManager::instance().DirectQuery (query));
    SQLResult* pRes = pkMsg->Get();

    if (!pRes->uiNumRows)
    {
        sys_err ("no result from item_attr");
        return false;
    }

    if (!m_vec_itemAttrTable.empty())
    {
        sys_log (0, "RELOAD: item_attr");
        m_vec_itemAttrTable.clear();
    }

    m_vec_itemAttrTable.reserve (pRes->uiNumRows);

    MYSQL_ROW    data;

    while ((data = mysql_fetch_row (pRes->pSQLResult)))
    {
        TItemAttrTable t;

        memset (&t, 0, sizeof (TItemAttrTable));

        int col = 0;

        strlcpy (t.szApply, data[col++], sizeof (t.szApply));
        str_to_number (t.dwApplyIndex, data[col++]);
        str_to_number (t.dwProb, data[col++]);
        str_to_number (t.lValues[0], data[col++]);
        str_to_number (t.lValues[1], data[col++]);
        str_to_number (t.lValues[2], data[col++]);
        str_to_number (t.lValues[3], data[col++]);
        str_to_number (t.lValues[4], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
        str_to_number (t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
#ifdef ITEM_TALISMAN_EQUIPMENT
        str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_PENDANT], data[col++]);
#endif
        sys_log (0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d %d }",
                 t.szApply,
                 t.dwProb,
                 t.lValues[0],
                 t.lValues[1],
                 t.lValues[2],
                 t.lValues[3],
                 t.lValues[4],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
                 t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]
#ifdef ITEM_TALISMAN_EQUIPMENT
                ,t.bMaxLevelBySet[ATTRIBUTE_SET_PENDANT]
#endif
                );
        m_vec_itemAttrTable.push_back (t);
    }

    return true;
}

item_attiribute.cpp
Kod:
Genişlet Daralt Kopyala
#ifdef ITEM_TALISMAN_EQUIPMENT
            case ARMOR_PENDANT:
                return ATTRIBUTE_SET_PENDANT;
#endif

protoreader de ekli efsunları manul farklı bir iteme ekledim sorun yok efsunlar geliyor
ama tılsıma efsun atamıyorum bonus ekledi diyor ama eklenmiyor
 
sorunun çözümü

item_attr tablosunda pendant ve glove için açtığım slotlara değer atamamışım 0 döndüğü için bu syseri veriyormuş
Adsız.webp

test için 5 verince sorun çözüldü :D


Adsız.webp


konu kapatılabilir teşekkürler.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst