Yardım Server Source Warning Gizleme

Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

MsCharles

Üye
Üye
Mesaj
41
Çözümler
1
Beğeni
3
Puan
49
Ticaret Puanı
0
Serverdeki tüm warningleri çözdüm ama sadece bu iki .cpp dosyası kaldı bunları çözemedim sizlerden yardım istiyorum gizlemek istemedim warningleri

1-)dosya

Ekran Alıasdntısı.PNG


2-)dosya

Ekran Alıntısı.PNG



@Whistle
 
Makefile dosyasına -Wno-adress değerini ekleyin gizlenir
 
Videolu rehberimde bunlardan bahsetmiştim. Videoya bakarak çözebilirsiniz.



GCC derleyicisinin hatalarla ilgili açıklamalarının bulunduğu bir sayfa var.
Linkleri görebilmek için giriş yap veya kayıt ol.
da bakabilirsiniz.
 
olur, pointerın null olup olmadığını kontrol etmesi gerek.

Kod bloğunu buraya ekleyebilir misin
C++:
bool DSManager::DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE])
{
    if (NULL == ch)
        return false;

    if (NULL == aItemPoses)
    {
        return false;
    }

    if (!ch->DragonSoul_RefineWindow_CanRefine())
    {
        sys_err ("%s do not activate DragonSoulRefineWindow. But how can he come here?", ch->GetName());
        ch->ChatPacket(CHAT_TYPE_INFO, "[SYSTEM ERROR]You cannot upgrade dragon soul without refine window.");
        return false;
    }

    // 혹시나 모를 중복되는 item pointer 없애기 위해서 set 사용
    // 이상한 패킷을 보낼 경우, 중복된 TItemPos가 있을 수도 있고, 잘못된 TItemPos가 있을 수도 있다.
    std::set <LPITEM> set_items;
    for (int i = 0; i < DRAGON_SOUL_REFINE_GRID_SIZE; i++)
    {
        if (aItemPoses[i].IsEquipPosition())
            return false;
        LPITEM pItem = ch->GetItem(aItemPoses[i]);
        if (NULL != pItem)
        {
            // 용혼석이 아닌 아이템이 개량창에 있을 수 없다.
            if (!pItem->IsDragonSoul())
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 필요한 재료가 아닙니다."));
                SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));

                return false;
            }

            set_items.insert(pItem);
        }
    }

    if (set_items.size() == 0)
    {
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL, NPOS);
        return false;
    }

    int count = set_items.size();
    int need_count = 0;
    int fee = 0;
    std::vector <float> vec_probs;
    //float prob_sum;

    BYTE ds_type, grade_idx, step_idx, strength_idx;
    int result_grade;

    // 가장 처음 것을 강화의 기준으로 삼는다.
    std::set <LPITEM>::iterator it = set_items.begin();
    {
        LPITEM pItem = *it;

        GetDragonSoulInfo(pItem->GetVnum(), ds_type, grade_idx, step_idx, strength_idx);

        if (!m_pTable->GetRefineGradeValues(ds_type, grade_idx, need_count, fee, vec_probs))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량할 수 없는 용혼석입니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));

            return false;
        }
    }
    while (++it != set_items.end())
    {
        LPITEM pItem = *it;

        // 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
        // 별도의 알림 처리는 안함.
        if (pItem->IsEquipped())
        {
            return false;
        }

        if (ds_type != GetType(pItem->GetVnum()) || grade_idx != GetGradeIdx(pItem->GetVnum()))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 필요한 재료가 아닙니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));

            return false;
        }
    }

    // 클라에서 한번 갯수 체크를 하기 때문에 count != need_count라면 invalid 클라일 가능성이 크다.
    if (count != need_count)
    {
        sys_err ("Possiblity of invalid client. Name %s", ch->GetName());
        BYTE bSubHeader = count < need_count? DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL : DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL;
        SendRefineResultPacket(ch, bSubHeader, NPOS);
        return false;
    }

    if (ch->GetGold() < fee)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
        return false;
    }

    if (-1 == (result_grade = Gamble(vec_probs)))
    {
        sys_err ("Gamble failed. See RefineGardeTables' probabilities");
        return false;
    }

    LPITEM pResultItem = ITEM_MANAGER::instance().CreateItem(MakeDragonSoulVnum(ds_type, (BYTE)result_grade, 0, 0));

    if (NULL == pResultItem)
    {
        sys_err ("INVALID DRAGON SOUL(%d)", MakeDragonSoulVnum(ds_type, (BYTE)result_grade, 0, 0));
        return false;
    }

    ch->PointChange(POINT_GOLD, -fee);
    int left_count = need_count;

    for (std::set <LPITEM>::iterator it = set_items.begin(); it != set_items.end(); it++)
    {
        LPITEM pItem = *it;
        int n = pItem->GetCount();
        if (left_count > n)
        {
            pItem->RemoveFromCharacter();
            M2_DESTROY_ITEM(pItem);
            left_count -= n;
        }
        else
        {
            pItem->SetCount(n - left_count);
        }
    }

    ch->AutoGiveItem(pResultItem, true);

    if (result_grade > grade_idx)
    {
        char buf[128];
        sprintf(buf, "GRADE : %d -> %d", grade_idx, result_grade);
        LogManager::instance().ItemLog(ch, pResultItem, "DS_GRADE_REFINE_SUCCESS", buf);
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 성공했습니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_SUCCEED, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
        return true;
    }
    else
    {
        char buf[128];
        sprintf(buf, "GRADE : %d -> %d", grade_idx, result_grade);
        LogManager::instance().ItemLog(ch, pResultItem, "DS_GRADE_REFINE_FAIL", buf);
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("등급 개량에 실패했습니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
        return false;
    }
}

bool DSManager::DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE])
{
    if (NULL == ch)
        return false;
    if (NULL == aItemPoses)
    {
        return false;
    }

    if (!ch->DragonSoul_RefineWindow_CanRefine())
    {
        sys_err ("%s do not activate DragonSoulRefineWindow. But how can he come here?", ch->GetName());
        ch->ChatPacket(CHAT_TYPE_INFO, "[SYSTEM ERROR]You cannot use dragon soul refine window.");
        return false;
    }

    // 혹시나 모를 중복되는 item pointer 없애기 위해서 set 사용
    // 이상한 패킷을 보낼 경우, 중복된 TItemPos가 있을 수도 있고, 잘못된 TItemPos가 있을 수도 있다.
    std::set <LPITEM> set_items;
    for (int i = 0; i < DRAGON_SOUL_REFINE_GRID_SIZE; i++)
    {
        LPITEM pItem = ch->GetItem(aItemPoses[i]);
        if (NULL != pItem)
        {
            // 용혼석이 아닌 아이템이 개량창에 있을 수 없다.
            if (!pItem->IsDragonSoul())
            {
                ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 필요한 재료가 아닙니다."));
                SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
                return false;
            }
            set_items.insert(pItem);
        }
    }

    if (set_items.size() == 0)
    {
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL, NPOS);
        return false;
    }

    std::string stGroupName;
    int count = set_items.size();
    int need_count = 0;
    int fee = 0;
    std::vector <float> vec_probs;

    BYTE ds_type, grade_idx, step_idx, strength_idx;
    int result_step;

    // 가장 처음 것을 강화의 기준으로 삼는다.
    std::set <LPITEM>::iterator it = set_items.begin();
    {
        LPITEM pItem = *it;
        GetDragonSoulInfo(pItem->GetVnum(), ds_type, grade_idx, step_idx, strength_idx);

        if (!m_pTable->GetRefineStepValues(ds_type, step_idx, need_count, fee, vec_probs))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량할 수 없는 용혼석입니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
            return false;
        }
    }

    while(++it != set_items.end())
    {
        LPITEM pItem = *it;
        // 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
        // 별도의 알림 처리는 안함.
        if (pItem->IsEquipped())
        {
            return false;
        }
        if (ds_type != GetType(pItem->GetVnum()) || grade_idx != GetGradeIdx(pItem->GetVnum()) || step_idx != GetStepIdx(pItem->GetVnum()))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 필요한 재료가 아닙니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
            return false;
        }
    }

    // 클라에서 한번 갯수 체크를 하기 때문에 count != need_count라면 invalid 클라일 가능성이 크다.
    if (count != need_count)
    {
        sys_err ("Possiblity of invalid client. Name %s", ch->GetName());
        BYTE bSubHeader = count < need_count? DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL : DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL;
        SendRefineResultPacket(ch, bSubHeader, NPOS);
        return false;
    }

    if (ch->GetGold() < fee)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
        return false;
    }

    //float sum = 0.f;

    if (-1 == (result_step = Gamble(vec_probs)))
    {
        sys_err ("Gamble failed. See RefineStepTables' probabilities");
        return false;
    }

    LPITEM pResultItem = ITEM_MANAGER::instance().CreateItem(MakeDragonSoulVnum(ds_type, grade_idx, (BYTE)result_step, 0));

    if (NULL == pResultItem)
    {
        sys_err ("INVALID DRAGON SOUL(%d)", MakeDragonSoulVnum(ds_type, grade_idx, (BYTE)result_step, 0));
        return false;
    }

    ch->PointChange(POINT_GOLD, -fee);
    int left_count = need_count;
    for (std::set <LPITEM>::iterator it = set_items.begin(); it != set_items.end(); it++)
    {
        LPITEM pItem = *it;
        int n = pItem->GetCount();
        if (left_count > n)
        {
            pItem->RemoveFromCharacter();
            M2_DESTROY_ITEM(pItem);
            left_count -= n;
        }
        else
        {
            pItem->SetCount(n - left_count);
        }
    }

    ch->AutoGiveItem(pResultItem, true);
    if (result_step > step_idx)
    {
        char buf[128];
        sprintf(buf, "STEP : %d -> %d", step_idx, result_step);
        LogManager::instance().ItemLog(ch, pResultItem, "DS_STEP_REFINE_SUCCESS", buf);
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 성공했습니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_SUCCEED, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
        return true;
    }
    else
    {
        char buf[128];
        sprintf(buf, "STEP : %d -> %d", step_idx, result_step);
        LogManager::instance().ItemLog(ch, pResultItem, "DS_STEP_REFINE_FAIL", buf);
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("단계 개량에 실패했습니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL, TItemPos (pResultItem->GetWindow(), pResultItem->GetCell()));
        return false;
    }
}

bool DSManager::DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE])
{
    if (NULL == ch)
        return false;
    if (NULL == aItemPoses)
    {
        return false;
    }

    if (!ch->DragonSoul_RefineWindow_CanRefine())
    {
        sys_err ("%s do not activate DragonSoulRefineWindow. But how can he come here?", ch->GetName());
        ch->ChatPacket(CHAT_TYPE_INFO, "[SYSTEM ERROR]You cannot use dragon soul refine window.");
        return false;
    }

    // 혹시나 모를 중복되는 item pointer 없애기 위해서 set 사용
    // 이상한 패킷을 보낼 경우, 중복된 TItemPos가 있을 수도 있고, 잘못된 TItemPos가 있을 수도 있다.
    std::set <LPITEM> set_items;
    for (int i = 0; i < DRAGON_SOUL_REFINE_GRID_SIZE; i++)
    {
        LPITEM pItem = ch->GetItem(aItemPoses[i]);
        if (pItem)
        {
            set_items.insert(pItem);
        }
    }
    if (set_items.size() == 0)
    {
        return false;
    }

    int fee;

    LPITEM pRefineStone = NULL;
    LPITEM pDragonSoul = NULL;
    for (std::set <LPITEM>::iterator it = set_items.begin(); it != set_items.end(); it++)
    {
        LPITEM pItem = *it;
        // 클라 ui에서 장착한 아이템은 개량창에 올릴 수 없도록 막았기 때문에,
        // 별도의 알림 처리는 안함.
        if (pItem->IsEquipped())
        {
            return false;
        }

        // 용혼석과 강화석만이 개량창에 있을 수 있다.
        // 그리고 하나씩만 있어야한다.
        if (pItem->IsDragonSoul())
        {
            if (pDragonSoul != NULL)
            {
                SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
                return false;
            }
            pDragonSoul = pItem;
        }
        else if(IsDragonSoulRefineMaterial(pItem))
        {
            if (pRefineStone != NULL)
            {
                SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
                return false;
            }
            pRefineStone = pItem;
        }
        else
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화에 필요한 재료가 아닙니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pItem->GetWindow(), pItem->GetCell()));
            return false;
        }
    }

    BYTE bType, bGrade, bStep, bStrength;

    if (!pDragonSoul || !pRefineStone)
    {
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL, NPOS);

        return false;
    }

    if (NULL != pDragonSoul)
    {
        GetDragonSoulInfo(pDragonSoul->GetVnum(), bType, bGrade, bStep, bStrength);

        float fWeight = 0.f;
        // 가중치 값이 없다면 강화할 수 없는 용혼석
        if (!m_pTable->GetWeight(bType, bGrade, bStep, bStrength + 1, fWeight))
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화할 수 없는 용혼석입니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
            return false;
        }
        // 강화했을 때 가중치가 0이라면 더 이상 강화되서는 안된다.
        if (fWeight < FLT_EPSILON)
        {
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화할 수 없는 용혼석입니다."));
            SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));
            return false;
        }
    }

    float fProb;
    if (!m_pTable->GetRefineStrengthValues(bType, pRefineStone->GetSubType(), bStrength, fee, fProb))
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화할 수 없는 용혼석입니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL, TItemPos(pDragonSoul->GetWindow(), pDragonSoul->GetCell()));

        return false;
    }

    if (ch->GetGold() < fee)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("개량을 하기 위한 돈이 부족합니다."));
        SendRefineResultPacket(ch, DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY, NPOS);
        return false;
    }

    ch->PointChange(POINT_GOLD, -fee);
    LPITEM pResult = NULL;
    BYTE bSubHeader;

    if (fnumber(0.f, 100.f) <= fProb)
    {
        pResult = ITEM_MANAGER::instance().CreateItem(MakeDragonSoulVnum(bType, bGrade, bStep, bStrength + 1));
        if (NULL == pResult)
        {
            sys_err ("INVALID DRAGON SOUL(%d)", MakeDragonSoulVnum(bType, bGrade, bStep, bStrength + 1));
            return false;
        }
        pDragonSoul->RemoveFromCharacter();

        pDragonSoul->CopyAttributeTo(pResult);
        RefreshItemAttributes(pResult);

        pDragonSoul->SetCount(pDragonSoul->GetCount() - 1);
        pRefineStone->SetCount(pRefineStone->GetCount() - 1);

        char buf[128];
        sprintf(buf, "STRENGTH : %d -> %d", bStrength, bStrength + 1);
        LogManager::instance().ItemLog(ch, pDragonSoul, "DS_STRENGTH_REFINE_SUCCESS", buf);
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화에 성공했습니다."));
        ch->AutoGiveItem(pResult, true);
        bSubHeader = DS_SUB_HEADER_REFINE_SUCCEED;
    }
    else
    {
        if (bStrength != 0)
        {
            pResult = ITEM_MANAGER::instance().CreateItem(MakeDragonSoulVnum(bType, bGrade, bStep, bStrength - 1));
            if (NULL == pResult)
            {
                sys_err ("INVALID DRAGON SOUL(%d)", MakeDragonSoulVnum(bType, bGrade, bStep, bStrength - 1));
                return false;
            }
            pDragonSoul->CopyAttributeTo(pResult);
            RefreshItemAttributes(pResult);
        }
        bSubHeader = DS_SUB_HEADER_REFINE_FAIL;

        char buf[128];
        sprintf(buf, "STRENGTH : %d -> %d", bStrength, bStrength - 1);
        // strength강화는 실패시 깨질 수도 있어, 원본 아이템을 바탕으로 로그를 남김.
        LogManager::instance().ItemLog(ch, pDragonSoul, "DS_STRENGTH_REFINE_FAIL", buf);

        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("강화에 실패했습니다."));
        pDragonSoul->SetCount(pDragonSoul->GetCount() - 1);
        pRefineStone->SetCount(pRefineStone->GetCount() - 1);
        if (NULL != pResult)
            ch->AutoGiveItem(pResult, true);

    }

    SendRefineResultPacket(ch, bSubHeader, NULL == pResult? NPOS : TItemPos (pResult->GetWindow(), pResult->GetCell()));

    return true;
}
 
En son bir moderatör tarafından düzenlenmiş:
C++:
//Fonksiyon argümanını şu şekilde değiştir. 
TItemPos *aItemPoses

//null kontrolünü de şöyle değiştir
if (!aItemPoses) 
    return false;
 
if (NULL == aItemPoses)
{
return false;
}


kaldır bunları, aItemPoses NULL olamıyormuş yani kontrolcü eklemeye gerek yok diyor.
 
itempos null olamıcak bir değer değil bildiğim kadarıyla, üsttekini dene olmadı alttakini dene
 
Bence direkt Makefile’den gizleyebilirsiniz. Bu kadar da incelemeye gerek yok :)
 
Geri
Üst