Kostüm Set Bonus Sistemi

  • Konuyu açan Konuyu açan TheAdmin33
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 20
  • Gösterim Gösterim 1K

TheAdmin33

Ah, bu şarkıların gözü kör olsun
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
1.044
Çözümler
59
Beğeni
2.651
Puan
1.849
Ticaret Puanı
0
Kostüm set bonus sistemi yazdım onu paylaşıyorum.



Seçilen 3 parça item oyuncu tarafından kuşanıldığında yani üzerine giydiğinde seçilmiş olan 3 adet bonusu oyuncuya verir.

Not 1: Ben videoda başka itemlerle yaptım ama size verdiğim dosyada silah, zırh, kafalık kostümü olarak ayarlı vnumları ona göre ayarlayın.

Not 2: Eklemeleri yapmadan önce
game source -> costume_set_bonus.cpp -> CostumeVnumData ve
pack -> root -> costume_set.py -> costume_sets
Matrislerinde ki vnum ları kendinize göre ayarlayın.


İndir;


Linkleri görebilmek için giriş yap veya kayıt ol.
 
En son bir moderatör tarafından düzenlenmiş:
ne zaman bize gelir güzel sistem :D
Ne zamandır yapmak istiyordum ama bir türlü fırsat bulup yapamamıştım, Bu hafta sonu boştum oturup yaptım ama ufak tefek rütüş yapılması gereken kısımları kaldı onlarıda halledeyim paylaşıp paylaşmıyacağıma karar vericem. Ama bir daha kine ne zaman musait olurum da sistemi istediğim hale getiririm bilemiyorum :).
 
elinize sağlık hocam, kontrolü x, y, z tipinde (atıyorum karakter silah kostümü, zırh kostümü, kafalık kostümü) takmış mı diyee mi yaptınız, sadece x, y, z itemleri takılı olunca bonuslar işlesin şeklinde mi
 
elinize sağlık hocam, kontrolü x, y, z tipinde (atıyorum karakter silah kostümü, zırh kostümü, kafalık kostümü) takmış mı diyee mi yaptınız, sadece x, y, z itemleri takılı olunca bonuslar işlesin şeklinde mi
önce itemin type ne bakıyor kostümmü diye sonra subtype na bakıyor silah kostümü, zırh kostümü, kafalık kostümümü diye ondan sonra da belirtilen vnum a sahipmi diye kontrolü yapıyor. İstediğin type,subtype ve vnuma göre ayarlanabiliyor.
 
konuya dosya dahil edildi indirip kullanabilirsiniz. yetkili birisi konuyu C++ / C# / Python bölümüne taşıyabilirmi
 
Güncelleme;

Küçük bir düzeltme;

costume_set_bonus.cpp:
Genişlet Daralt Kopyala
//Bul;

    if(!ch->FindAffect(AffectType))
    {
        if (bonus_set_id < sizeof(CostumeBonusData) / sizeof(CostumeBonusData[0]))
        {
            for (auto i = 0; i < sizeof(CostumeBonusData[0]) / sizeof(CostumeBonusData[0][0]); i++)
            {
                ch->AddAffect(AffectType, aApplyInfo[CostumeBonusData[bonus_set_id][i][0]].bPointType, CostumeBonusData[bonus_set_id][i][1], AFF_COSTUME_SET, INFINITE_AFFECT_DURATION, 0, false);
            }
        }
        else
        {
            ch->ChatPacket(CHAT_TYPE_INFO, "Geçersiz set dizini.");
        }

        ch->ChatPacket(CHAT_TYPE_INFO, "Kostüm Set Bonus Aktif");
        return;
    }


//Değiştir;

    if(!ch->FindAffect(AffectType))
    {
        if (bonus_set_id < sizeof(CostumeBonusData) / sizeof(CostumeBonusData[0]))
        {
            for (auto i = 0; i < sizeof(CostumeBonusData[0]) / sizeof(CostumeBonusData[0][0]); i++)
            {
                ch->AddAffect(AffectType, aApplyInfo[CostumeBonusData[bonus_set_id][i][0]].bPointType, CostumeBonusData[bonus_set_id][i][1], AFF_COSTUME_SET, INFINITE_AFFECT_DURATION, 0, false);
            }
            ch->ChatPacket(CHAT_TYPE_INFO, "Kostüm Set Bonus Aktif");
        }
        else
        {
            ch->ChatPacket(CHAT_TYPE_INFO, "Geçersiz set dizini.");
        }

        return;
    }
 
Bu sistem ile sadece bir set için mi yapabiliyoruz?
Örneğin:
Set1:
Genişlet Daralt Kopyala
Kostüm zırh, Kostüm başlık, Silah fişi

Set2:
Genişlet Daralt Kopyala
Yüzük 1, Yüzük 2, Yüzük 3, Yüzük 4, Yüzük 5

Bu şekilde de her setten ayrı ayrı bonus aldırabiliyor muyuz?
 
Bu sistem ile sadece bir set için mi yapabiliyoruz?
Örneğin:
Set1:
Genişlet Daralt Kopyala
Kostüm zırh, Kostüm başlık, Silah fişi

Set2:
Genişlet Daralt Kopyala
Yüzük 1, Yüzük 2, Yüzük 3, Yüzük 4, Yüzük 5

Bu şekilde de her setten ayrı ayrı bonus aldırabiliyor muyuz?
Kostüm zırh, Kostüm başlık, Silah fişi ile birden fazla set oluşturabilirsin. 5 ayrı yüzüğü takıp set yapmak için kodu düzenlemek gerek, bu haliyle olmaz.
 
Aklında bulunsun hiç bir zaman FindAffect kullanma.

AddAffect RemoveAffect ve LoadAffect içine değişkinlere 1 veya 0 true veya false olarak değerler ver ve koşulda kullanmak istediğin zaman

Öncesi:

Kod:
Genişlet Daralt Kopyala
    if(ch->FindAffect(AffectType))
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostüm Set Bonus Deaktif"));
        ch->RemoveAffect(AffectType);
        return;
    }

Sonrası:

Kod:
Genişlet Daralt Kopyala
    if (ch->CostumeSetBonusAffect())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostüm Set Bonus Deaktif"));
        ch->RemoveAffect(AffectType);
        return;
    }

LoadAffect senin SQL'daki Affect bilgilerini ID'lere göre dağıtır tekrardan. Böylelikle eğer SQL'daki affect numaran eşit işe Affect.h'deki Affect numarana Bu değişkene true vereceksin. RemoveAffect'de false vereceksin. AddAffect'de true vereceksin. char.cpp ve h 'ye gerekli eklentileri yap.

Ayrıca burada return kullanmana gerek yok

void sadece işlemi yapıp bitirir.


Kod:
Genişlet Daralt Kopyala
    if (ch->GetCostumeAffect())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostüm Set Bonus Deaktif"));
        ch->RemoveAffect(AffectType);
        return; // SİL
    }
 
Aklında bulunsun hiç bir zaman FindAffect kullanma.

AddAffect RemoveAffect ve LoadAffect içine değişkinlere 1 veya 0 true veya false olarak değerler ver ve koşulda kullanmak istediğin zaman

Öncesi:

Kod:
Genişlet Daralt Kopyala
    if(ch->FindAffect(AffectType))
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostüm Set Bonus Deaktif"));
        ch->RemoveAffect(AffectType);
        return;
    }

Sonrası:

Kod:
Genişlet Daralt Kopyala
    if (ch->CostumeSetBonusAffect())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostüm Set Bonus Deaktif"));
        ch->RemoveAffect(AffectType);
        return;
    }

LoadAffect senin SQL'daki Affect bilgilerini ID'lere göre dağıtır tekrardan. Böylelikle eğer SQL'daki affect numaran eşit işe Affect.h'deki Affect numarana Bu değişkene true vereceksin. RemoveAffect'de false vereceksin. AddAffect'de true vereceksin. char.cpp ve h 'ye gerekli eklentileri yap.

Ayrıca burada return kullanmana gerek yok

void sadece işlemi yapıp bitirir.


Kod:
Genişlet Daralt Kopyala
    if (ch->GetCostumeAffect())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Kostüm Set Bonus Deaktif"));
        ch->RemoveAffect(AffectType);
        return; // SİL
    }
tavsiye için teşekkürler. Dediklerinle alakalı örnek dosya paylaşma imkanın varmı?
 
Son düzenleme:
char_affect.cpp Aç ve Arat (LoadAffect İçinde):

Kod:
Genişlet Daralt Kopyala
        if (pElements->bApplyOn >= POINT_MAX_NUM)
        {

Üstüne Ekle:

Kod:
Genişlet Daralt Kopyala
        if (AFFECT_COSTUME_SET == pElements->dwType)
        {
            CostumeSetBonusAffect(true);
        }

AddAffect İçinde Arat:

Kod:
Genişlet Daralt Kopyala
    if (lDuration == 0)
    {
        sys_err("Character::AddAffect lDuration == 0 type %d", lDuration, dwType);
        lDuration = 1;
    }

Üstüne Ekle:

Kod:
Genişlet Daralt Kopyala
    if (dwType == AFFECT_COSTUME_SET)
    {
        CostumeSetBonusAffect(true);
    }

RemoveAffect içinde Arat:

Kod:
Genişlet Daralt Kopyala
    CheckMaximumPoints();

Üstüne Ekle:

Kod:
Genişlet Daralt Kopyala
    if (pkAff->dwType == AFFECT_COSTUME_SET)
    {
        CostumeSetBonusAffect(false);
    }

char.cpp'de değişken tanımla örneğin m_IsCostumeSetBonusAffect = false;
sonra bu değişkene değer veren ve bir de bu değişkenin değerini alan fonksiyonları yap bu kadar.

Öncesi:

if (ch->FindAffect(TEST))

Sonrası:

if (ch->CostumeGetBonusAffect())
 
Son düzenleme:
Üst