Yardım Mob Max Hp ve İtem Efsun

  • Konuyu açan Konuyu açan DarkNight
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 6
  • Gösterim Gösterim 84
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

DarkNight

Üye
Üye
Mesaj
260
Çözümler
10
Beğeni
58
Puan
499
Ticaret Puanı
0
Mobun max hp değerini arttırmak istiyorum sadece mob Porto üzerinden bir düzenleme yeterli olur mu aynı zamanda da arttırma kapısı atıldığında eklenen efsunların tam oran gelmesini istemiyorum nereye bakmam lazım
 
Mobun max hp değerini arttırmak istiyorum sadece mob Porto üzerinden bir düzenleme yeterli olur mu aynı zamanda da arttırma kapısı atıldığında eklenen efsunların tam oran gelmesini istemiyorum nereye bakmam lazım
mob protodan mobların canını yükseltirsen geçerli olur aynı zamanda mob txtleri packda atarsan mob ile ilgili kısım biter . Efsun nesnesi attığında ise efsunların tam oran gelmesini istemiyorsan navicattan item_attr den düzenleme yaparsan oranlarda direk sabit gelmez . Eğer anlamazsan konusu vardı oradan örnek alarak yapabilirsin
 
mob protodan mobların canını yükseltirsen geçerli olur aynı zamanda mob txtleri packda atarsan mob ile ilgili kısım biter . Efsun nesnesi attığında ise efsunların tam oran gelmesini istemiyorsan navicattan item_attr den düzenleme yaparsan oranlarda direk sabit gelmez . Eğer anlamazsan konusu vardı oradan örnek alarak yapabilirsin
item attr efsun nesnesi ile efsun değiştirdiğimiz kısmı ilgilendirmiyor mu? arttırma kağıdı ile mesela kılıç 15 gelemesin istiyorum ben
 
item attr efsun nesnesi ile efsun değiştirdiğimiz kısmı ilgilendirmiyor mu? arttırma kağıdı ile mesela kılıç 15 gelemesin istiyorum ben
zaten efsunların oranları direk oradan cekıyor sen oraya oran olarak ve gelme sansı olarak ne yazarsan o gelir . Ama özellikle arttırma kağıdı ile x bir efsunun gelmemesi için case USE_ADD_ATTRIBUTE bunu char itemde araştırırsan ve kodlarını okursan bir düzenleme yapılabilir
 
zaten efsunların oranları direk oradan cekıyor sen oraya oran olarak ve gelme sansı olarak ne yazarsan o gelir . Ama özellikle arttırma kağıdı ile x bir efsunun gelmemesi için case USE_ADD_ATTRIBUTE bunu char itemde araştırırsan ve kodlarını okursan bir düzenleme yapılabilir
Arttırma kağıdı ile 15 kılıç gelemesin mesela 10 gelsin anlatabildim mi bunu demek istiyorum
 
Arttırma Kağıdı nesnesi olarak 71085 vnum'lı olanı kullandım. İstersen değiştirirsin.
Bu eşya ile efsun eklenmeye çalışıldığında gelen efsun max oranda ise kaldırılır ve yenisi eklenir, ta ki max oran dışında bir oran gelene kadar.

MaxHp ile ilgili konuya arkadaş yanıt vermiş zaten.

item_manager.h:
Genişlet Daralt Kopyala
// Bul
std::map<DWORD, DWORD>        m_map_ItemRefineFrom;
// Altina ekle
std::map<BYTE, DWORD>    m_map_ItemMaxAttrRates;

// Bul
DWORD    GetMaskVnum (DWORD dwVnum);
// Altina ekle
        void SetAttrMaxRates(std::map<BYTE, DWORD>& rates);
        DWORD GetMaxRateOfAttr(BYTE attrIdx);

item_manager.cpp:
Genişlet Daralt Kopyala
// Bul
DWORD ITEM_MANAGER::GetRefineFromVnum (DWORD dwVnum)

// Ustune ekle
void ITEM_MANAGER::SetAttrMaxRates(std::map<BYTE, DWORD>& rates)
{
    if (!rates.empty())
        m_map_ItemMaxAttrRates = rates;
}

DWORD ITEM_MANAGER::GetMaxRateOfAttr(BYTE attrIdx)
{
    auto rate = m_map_ItemMaxAttrRates.find(attrIdx);
    if (rate != m_map_ItemMaxAttrRates.end())
        return rate->second;

    return 0;
}

input_db.cpp:
Genişlet Daralt Kopyala
// Bunun altinda ara
    /*
     * ITEM ATTR
     */

TItemAttrTable* p = (TItemAttrTable*) data;

// Altina ekle
std::map<BYTE, DWORD>    mAttrMaxRates;

// Bul
g_map_itemAttr[p->dwApplyIndex] = *p;

// Altina ekle
            for (const auto& rate : p->lValues)
            {
                auto& currentMax = mAttrMaxRates[p->dwApplyIndex];
                if (rate > currentMax)
                    currentMax = rate;
            }

// Hemen altinda bul
            sys_log (0, "ITEM_ATTR[%d]: %s %u", p->dwApplyIndex, p->szApply, p->dwProb);
        }

// Ustune ekle
        ITEM_MANAGER* item_manager = &ITEM_MANAGER::instance();
        item_manager->SetAttrMaxRates(mAttrMaxRates);

// Ornek olarak boyle olmali
    if (size)
    {
        TItemAttrTable* p = (TItemAttrTable*) data;
        std::map<BYTE, DWORD>    mAttrMaxRates;

        for (int i = 0; i < size; ++i, ++p)
        {
            if (p->dwApplyIndex >= MAX_APPLY_NUM)
            {
                continue;
            }

            g_map_itemAttr[p->dwApplyIndex] = *p;
            for (const auto& rate : p->lValues)
            {
                auto& currentMax = mAttrMaxRates[p->dwApplyIndex];
                if (rate > currentMax)
                    currentMax = rate;
            }

            sys_log (0, "ITEM_ATTR[%d]: %s %u", p->dwApplyIndex, p->szApply, p->dwProb);
        }

        ITEM_MANAGER* item_manager = &ITEM_MANAGER::instance();
        item_manager->SetAttrMaxRates(mAttrMaxRates);
    }

char_item.cpp:
Genişlet Daralt Kopyala
// UseItemEx icerisinde bul
                                    int iAddedIdx = item2->GetAttributeCount() - 1;

// Altina ekle
                                    if (item->GetVnum() == 71085)
                                    {
                                        while (true)
                                        {
                                            DWORD maxRate = ITEM_MANAGER::instance().GetMaxRateOfAttr(item2->GetAttributeType(iAddedIdx));
                                            DWORD currRate = item2->GetAttributeValue(iAddedIdx);

                                            if (maxRate != currRate)
                                                break;

                                            item2->RemoveAttributeAt(iAddedIdx);
                                            item2->AddAttribute();
                                        }
                                    }
 
Son düzenleme:
Mobun max hp değerini arttırmak istiyorum sadece mob Porto üzerinden bir düzenleme yeterli olur mu aynı zamanda da arttırma kapısı atıldığında eklenen efsunların tam oran gelmesini istemiyorum nereye bakmam lazım
Ne kadar arttırmak istediğinize bağlı olarak veri tiplerinide değiştirmeniz gerekebilir
 
Geri
Üst