Çözüldü Kostüm Parlatma 2

  • Konuyu açan Konuyu açan MCB
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 7
  • Gösterim Gösterim 62
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ı.

MCB

Yardımsever Üye
Premium Üye
Yardımsever Üye
MT Üye
Mesaj
420
Çözümler
30
Beğeni
222
Puan
515
Ticaret Puanı
1
Öncelikle herkese merhaba;
Geçenlerde kostüm parlatma taşı sistemine özellik eklemiştik.

Kod:
Genişlet Daralt Kopyala
    if (item->GetAttributeCount() < 1)
    {
        item->SetForceAttribute(item->GetAttributeCount(), APPLY_MAX_HP, 3000); // %3000k HP
    }

Bu kod kostüme 3 k hp verir ancak " if (item->GetAttributeCount() < 1) " 1 olan kısım slot sayısı eğer slotta zaten efsun varsa tekrar özellik eklemez şeklinde.
benim isteğimi aşağıda belirtiyorum.
* HP kostümde zaten varsa 1 kere eklenir ve o olan hp`nin üzerine yazılır. Bu özellik o kostüm için sadece 1 kez verilebilir aynı kostüme tekrar efekt vermek istedimizde özellik kendini yenilemez. aynı kalır sadece efekt değişir.

yani örnek veriyorum oyunda marketten hpli bir kostüm çektik 4k hp var kostümde bu taşı attığımız zaman 7k olucak ama ayrı bir slota değil 4k olan 7k olarak değişecek şeklinde ve bir sonraki basımda tekrar etmeyecek özellik.

nasıl bir yol izlenebilir chat gpt ile baya bi tartıştık bu konuyu bişeyler denedik hp güncellemesi yapıyordu fakat her basmada tekrar ediyordu özellik 4k - 7k - 10 k- 13k ... vs.
 
Çözüm
şöyle bir güncelleme getirdim.
Kostümde zaten hp varsa güncelliyor. 4 k ise 7k yapıyor.
Kostümde başka bir efsun varsa 2. bir socket oluşturur ve 3k hp verir.
Özellik tekrarını önlemek için ise taş bir kostümde sadece 1 kez kullanılabilir şeklinde düzenledim.


Kod:
Genişlet Daralt Kopyala
    if (item->GetSocket(2) == 1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu kostume zaten ozellik eklenmis!"));
        return;
    }

    bool hpUpdated = false;

    for (int i = 0; i < item->GetAttributeCount(); ++i)
    {
        const TPlayerItemAttribute& attr = item->GetAttribute(i);
    
        if (attr.bType == APPLY_MAX_HP) 
        {
            int currentHP = attr.sValue;
            item->SetForceAttribute(i, APPLY_MAX_HP, currentHP + 3000)...
C++:
Genişlet Daralt Kopyala
    if (item->GetAttributeCount() < 1)
    {
        item->SetForceAttribute(item->GetAttributeCount(), APPLY_MAX_HP, 3000); // %3000k HP
    }
    else if(item2->GetAttributeType(0)==1)
    {
        DWORD costumenewhp = item2->GetAttributeValue(0)+3000;
        item->SetForceAttribute(0, APPLY_MAX_HP, costumenewhp); // 7000k HP
    }

şu tarz bir şey heralde olması lazım ilk efsunu hp ise değişir eğer başka efsunlara geliyorsa ona ayar çekeriz kodda yazım yanlışım yoksa çalışır ehralde bu kafadan yazdım

7k nın üstüne tekrar efsun atılmasın isterseniz:
C++:
Genişlet Daralt Kopyala
   if (item->GetAttributeCount() < 1)

    {

        item->SetForceAttribute(item->GetAttributeCount(), APPLY_MAX_HP, 3000); // %3000k HP

    }

    else if(item2->GetAttributeType(0)==1)

    {
        if(item2->GetAttributeValue(0)==7000)
            return
        
        DWORD costumenewhp = item2->GetAttributeValue(0)+3000;
        item->SetForceAttribute(0, APPLY_MAX_HP, costumenewhp); // 7000k HP

    }

bu sadece ilk efsunda hp varsa kontrol eder hocam
 
C++:
Genişlet Daralt Kopyala
    if (item->GetAttributeCount() < 1)
    {
        item->SetForceAttribute(item->GetAttributeCount(), APPLY_MAX_HP, 3000); // %3000k HP
    }
    else if(item2->GetAttributeType(0)==1)
    {
        DWORD costumenewhp = item2->GetAttributeValue(0)+3000;
        item->SetForceAttribute(0, APPLY_MAX_HP, costumenewhp); // 7000k HP
    }

şu tarz bir şey heralde olması lazım ilk efsunu hp ise değişir eğer başka efsunlara geliyorsa ona ayar çekeriz kodda yazım yanlışım yoksa çalışır ehralde bu kafadan yazdım

7k nın üstüne tekrar efsun atılmasın isterseniz:
C++:
Genişlet Daralt Kopyala
   if (item->GetAttributeCount() < 1)

    {

        item->SetForceAttribute(item->GetAttributeCount(), APPLY_MAX_HP, 3000); // %3000k HP

    }

    else if(item2->GetAttributeType(0)==1)

    {
        if(item2->GetAttributeValue(0)==7000)
            return
       
        DWORD costumenewhp = item2->GetAttributeValue(0)+3000;
        item->SetForceAttribute(0, APPLY_MAX_HP, costumenewhp); // 7000k HP

    }

bu sadece ilk efsunda hp varsa kontrol eder hocam
işe yaramadı maalesef hayır 7k nın üstüne hp atmasına gerek yok sadece 1 kez kostümde hp varsa hp atsın ve aynı kostüme tekrar efekt verildiğinde yeniden bir hp atmasın.
 
işe yaramadı maalesef hayır 7k nın üstüne hp atmasına gerek yok sadece 1 kez kostümde hp varsa hp atsın ve aynı kostüme tekrar efekt verildiğinde yeniden bir hp atmasın.
ilk efsunun dışında hp geliyor mu kostüme?
siz kendi efsunu olan 4k nın üzerine 3k mı eklensin sitiyorsunuz hocam
sabit efsunu game src'den değiştirmeyi ben de bulamadım malesef. bu sonradan eklenen efsunları kontrol eder daha önceden adam efsun eklemeyle 4k eklediyse üzerine 3k ekler 7kdan sonra eklemez ilk efsununda
 
şöyle bir güncelleme getirdim.
Kostümde zaten hp varsa güncelliyor. 4 k ise 7k yapıyor.
Kostümde başka bir efsun varsa 2. bir socket oluşturur ve 3k hp verir.
Özellik tekrarını önlemek için ise taş bir kostümde sadece 1 kez kullanılabilir şeklinde düzenledim.


Kod:
Genişlet Daralt Kopyala
    if (item->GetSocket(2) == 1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu kostume zaten ozellik eklenmis!"));
        return;
    }

    bool hpUpdated = false;

    for (int i = 0; i < item->GetAttributeCount(); ++i)
    {
        const TPlayerItemAttribute& attr = item->GetAttribute(i);
    
        if (attr.bType == APPLY_MAX_HP) 
        {
            int currentHP = attr.sValue;
            item->SetForceAttribute(i, APPLY_MAX_HP, currentHP + 3000);
            hpUpdated = true;
            break;
        }
    }

    if (!hpUpdated)
    {
        item->AddAttribute(APPLY_MAX_HP, 3000);
    }

    item->SetSocket(1, BStat);
    item->SetSocket(2, 1);
    item2->SetCount(item2->GetCount() - 1);
    
    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostum basariyla parlatildi!"));
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst