Scarlet 1
Scarlet
Best Studio 1
Best Studio
mannaxxx 1
mannaxxx
Agora Metin2 1
Agora Metin2
[DEV]AB 1
[DEV]AB
Sevdamsın 1
Sevdamsın
Hikaye Ekle

[C++] Yeni Eğitim Bonusu

  • Konuyu başlatan Konuyu başlatan Okan Çakın
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 10
  • Görüntüleme Görüntüleme 3K

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

Öğretmene Gittiğinizde Yeni Eğitim Aldığınızda Eğitim Bonusu Olarak 1 Saatliğine +25 Hareket Hızı Kazanırsınız.

Bonusu, Bonus Değerini ve Verilen Süreyi Dilediğiniz Gibi Değiştirebilirsiniz.

İşte Kodlarımız:


Char_Skill.cpp Aç ve Arat:


Kod:
void CHARACTER::SetSkillGroup(BYTE bSkillGroup)
{
    if (bSkillGroup > 2)
        return;

    if (GetLevel() < 5)
        return;

Altına Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
    SetTrainingBonus(bSkillGroup);
#endif

Tekrar Arat:

Kod:
void CHARACTER::SetSkillGroup(BYTE bSkillGroup)

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
    /* v0 = AFFECT_TRAINING_BONUS = Affect Type */
    /* v1 = POINT_MOV_SPEED = Bonus Type */
    /* v2 = SPEED_BONUS_VALUE = Bonus Value */
    /* v3 = AFFECT_TIME = Affect Time */

    DWORD v0 = AFFECT_TRAINING_BONUS;
    BYTE v1 = POINT_MOV_SPEED;
    const long v2 = 25;
    const long v3 = 3600;

    if (bSkillGroup)
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

    CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
    if (!pAffect)
    {
        AddAffect(v0, v1, v2, AFF_NONE, v3, 0, true, false);
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain 25 movement speed for 1 hour."));
    }
}
#endif

Char.h Aç ve Arat:

Kod:
};

ESex GET_SEX(LPCHARACTER ch);

#endif

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
    public:
        void SetTrainingBonus(BYTE bSkillGroup);
#endif

Affect.h Aç ve Arat:

Kod:
    AFFECT_QUEST_START_IDX                    = 1000

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
    AFFECT_TRAINING_BONUS                     = 724,
#endif

Makroyu Dahil Etmeyi Unutmayın.

Kanıt:


quest.png


Bonusu Almadan Önceki Hareket Hızım

move_speed.png


Bonusu Aldıktan Sonraki Hareket Hızım

bonus_speed.png


Affect Tablosu

affect_tablo.png


Sistemi Dilediğiniz Gibi Değiştirip Kullanabilirsiniz. Herhangi Bir Hata veya Eksik Kodlama İle Karşılaşırsanız Lütfen Konuya Dahil Ediniz.


Teşekkür Ederim.




 

En Çok Reaksiyon Alan Mesajlar

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
/* v0 = AFFECT_TRAINING_BONUS = Affect Type */
/* v1 = POINT_MOV_SPEED = Bonus Type */
/* v2 = SPEED_BONUS_VALUE = Bonus Value */
/* v3 = AFFECT_TIME = Affect Time */

DWORD v0 = AFFECT_TRAINING_BONUS;
BYTE v1 = POINT_MOV_SPEED;
const long v2 = 25;
const long v3 = 3600;

if (bSkillGroup)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
if (!pAffect)
{
AddAffect(v0, v1, v2, AFF_NONE, v3, 0, true, false);
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain 25 movement speed for 1 hour."));
}
}
#endif
bunun yerine bu nasıl fikir? 2 karakter sınırı olmadığı için değişkenlere istediğimiz ismi verebiliyoruz. 😅

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
    if (bSkillGroup)
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

    CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
    if (!pAffect)
    {
        constexpr long lValue = 25;
        constexpr long lDuration = 3600;
        AddAffect(AFFECT_TRAINING_BONUS, POINT_MOV_SPEED, lValue, AFF_NONE, lDuration, 0, true, false);
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain %d movement speed for %d seconds."), lValue, lDuration);
    }
}
#endif
Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
/* v0 = AFFECT_TRAINING_BONUS = Affect Type */
/* v1 = POINT_MOV_SPEED = Bonus Type */
/* v2 = SPEED_BONUS_VALUE = Bonus Value */
/* v3 = AFFECT_TIME = Affect Time */

DWORD v0 = AFFECT_TRAINING_BONUS;
BYTE v1 = POINT_MOV_SPEED;
const long v2 = 25;
const long v3 = 3600;

if (bSkillGroup)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
if (!pAffect)
{
AddAffect(v0, v1, v2, AFF_NONE, v3, 0, true, false);
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain 25 movement speed for 1 hour."));
}
}
#endif
bunun yerine bu nasıl fikir? 2 karakter sınırı olmadığı için değişkenlere istediğimiz ismi verebiliyoruz. 😅

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
    if (bSkillGroup)
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

    CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
    if (!pAffect)
    {
        constexpr long lValue = 25;
        constexpr long lDuration = 3600;
        AddAffect(AFFECT_TRAINING_BONUS, POINT_MOV_SPEED, lValue, AFF_NONE, lDuration, 0, true, false);
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain %d movement speed for %d seconds."), lValue, lDuration);
    }
}
#endif
 
Öğretmene Gittiğinizde Yeni Eğitim Aldığınızda Eğitim Bonusu Olarak 1 Saatliğine +25 Hareket Hızı Kazanırsınız.

Bonusu, Bonus Değerini ve Verilen Süreyi Dilediğiniz Gibi Değiştirebilirsiniz.

İşte Kodlarımız:


Char_Skill.cpp Aç ve Arat:


Kod:
void CHARACTER::SetSkillGroup(BYTE bSkillGroup)
{
    if (bSkillGroup > 2)
        return;

    if (GetLevel() < 5)
        return;

Altına Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
    SetTrainingBonus(bSkillGroup);
#endif

Tekrar Arat:

Kod:
void CHARACTER::SetSkillGroup(BYTE bSkillGroup)

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
    /* v0 = AFFECT_TRAINING_BONUS = Affect Type */
    /* v1 = POINT_MOV_SPEED = Bonus Type */
    /* v2 = SPEED_BONUS_VALUE = Bonus Value */
    /* v3 = AFFECT_TIME = Affect Time */

    DWORD v0 = AFFECT_TRAINING_BONUS;
    BYTE v1 = POINT_MOV_SPEED;
    const long v2 = 25;
    const long v3 = 3600;

    if (bSkillGroup)
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

    CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
    if (!pAffect)
    {
        AddAffect(v0, v1, v2, AFF_NONE, v3, 0, true, false);
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain 25 movement speed for 1 hour."));
    }
}
#endif

Char.h Aç ve Arat:

Kod:
};

ESex GET_SEX(LPCHARACTER ch);

#endif

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
    public:
        void SetTrainingBonus(BYTE bSkillGroup);
#endif

Affect.h Aç ve Arat:

Kod:
    AFFECT_QUEST_START_IDX                    = 1000

Üstüne Ekle:

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
    AFFECT_TRAINING_BONUS                     = 724,
#endif

Makroyu Dahil Etmeyi Unutmayın.

Kanıt:


Ekli dosyayı görüntüle 103487

Bonusu Almadan Önceki Hareket Hızım

Ekli dosyayı görüntüle 103488

Bonusu Aldıktan Sonraki Hareket Hızım

Ekli dosyayı görüntüle 103489


Affect Tablosu

Ekli dosyayı görüntüle 103490

Sistemi Dilediğiniz Gibi Değiştirip Kullanabilirsiniz. Herhangi Bir Hata veya Eksik Kodlama İle Karşılaşırsanız Lütfen Konuya Dahil Ediniz.


Teşekkür Ederim.



Paylaşım için teşekkürler.
 
bunun yerine bu nasıl fikir? 2 karakter sınırı olmadığı için değişkenlere istediğimiz ismi verebiliyoruz. 😅

Kod:
#ifdef ENABLE_NEW_TRAINING_BONUS
void CHARACTER::SetTrainingBonus(BYTE bSkillGroup)
{
    if (bSkillGroup)
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have selected %d skill sets."), bSkillGroup);

    CAffect* pAffect = FindAffect(AFFECT_TRAINING_BONUS);
    if (!pAffect)
    {
        constexpr long lValue = 25;
        constexpr long lDuration = 3600;
        AddAffect(AFFECT_TRAINING_BONUS, POINT_MOV_SPEED, lValue, AFF_NONE, lDuration, 0, true, false);
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You have successfully completed the training. You gain %d movement speed for %d seconds."), lValue, lDuration);
    }
}
#endif
Bunun karakter sınırıyla alakası yok. Oyunda 2 den fazla skill grup yok. Oyuncu herhangi bi skill grubunu aldığında zaten yeni beceri almış demektir. Bende bu verilen skill grup fonksiyonun içine Fonksiyon ismini verip yeni fonksiyon içine tüm çalışacak kodları ekledim. Anlamayanlar için ise değişken yapıp ekledim. Yorum satırı olarakta ne işe yaradıklarını ekledim. Değişkenlerin boyutlarını ise AddAffectin argümanlarının aldığı boyut kadar verdim. Sorun yaratacak birşey yok dileyen dilediği gibi kullanır.
 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst