Çözüldü skilin başarıyla geçmesi

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

TheAdmin33

Ah, bu şarkıların gözü kör olsun
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
1.323
Çözümler
75
Beğeni
5.008
Puan
2.859
Ticaret Puanı
0
yaşlı kadından yada skill sıfırlama kağıdıyla(71100) skilimi sıfırladıktan sonra yeni yetenk öğreniyorum ve skili g yapıp ruh taşlarını okumaya başlıyorum ama bütün ruh taşları başarıyla skili geliştiriyor hiç başarısız olmuyor, belirli bir süre sonra(ne kadar bir süre bilmiyorum) normale dönüyor. Oyunda böyle bir şey varmı yoksa benim filesdamı bir sorun var? LearnGrandMasterSkill fonksiyonunu falanda kurcalamadım orjinal haliyle duruyor.
 
Çözüm
şu şekilde hallettim konu kapatılabilir.

char_skill.cpp:
Genişlet Daralt Kopyala
void CHARACTER::ClearSkill()
{
    PointChange(POINT_SKILL, 4 + (GetLevel() - 5) - GetPoint(POINT_SKILL));

    RemoveAffect(SKILL_JEONGWI);
    RemoveAffect(SKILL_GEOMKYUNG);
    RemoveAffect(SKILL_CHUNKEON);
    RemoveAffect(SKILL_EUNHYUNG);
    RemoveAffect(SKILL_GYEONGGONG);
    RemoveAffect(SKILL_GWIGEOM);
    RemoveAffect(SKILL_TERROR);
    RemoveAffect(SKILL_JUMAGAP);
    RemoveAffect(SKILL_MANASHILED);
    RemoveAffect(SKILL_HOSIN);
    RemoveAffect(SKILL_REFLECT);
    RemoveAffect(SKILL_KWAESOK);
    RemoveAffect(SKILL_JEUNGRYEOK);
    RemoveAffect(SKILL_GICHEON);

    for (int vnum = 1; vnum < SKILL_MAX_NUM; ++vnum)
    {
        std::string strTrainSkill;
        {...
Merhaba, bu problem genellikle novaline ve mainline altyapılarda bulunuyor. Ben daha çok mainline tarafında görmüştüm. LearnGrandMasterSkill fonskiyonunda birkaç ufak düzeltme yaparak sorunu çözebilirsiniz. Veyahut lua veya quest yazarak brute edebilirsiniz ancak tavsiyem fonksiyon tarafında değişiklik yapmanızdır.
 
dosyaları yapay zekaya verip sordum cevabı bu oldu;

ClearSkill ya da ResetSkill sadece m_pSkillLevels (C++ tarafındaki skill seviyeleri) sıfırlıyor ama bu quest flag’leri hiç temizlenmiyor.
Bundan dolayı skille reset attıktan sonra LearnGrandMasterSkill çağrıldığında, flag hâlâ büyük bir değerde oluyor.
C++:
Genişlet Daralt Kopyala
    if (iTotalReadCount > iMaxReadCount)
        bSuccess = true;
Dolayısıyla fonksiyon hep true döndürüyor.

Bu quest flag’lerını nasıl temizleyebilirim bir fikri olan varmı?
 
Hocam ClearSkill() fonksiyonunu bulun. Bende char_skill.cpp dosyasında. Fonskiyonun sonuna;

Kod:
Genişlet Daralt Kopyala
char buf[32];
for (int i = 1; i <= 6; ++i) {
    snprintf(buf, sizeof(buf), "skill_%d_read", i);
    SetQuestFlag(buf, 0);
}

Ekleyiniz. Derledikten sonra çözüldü olarak işaretleyebilirsiniz.


İşiniz kolaylaşsın.

Kod:
Genişlet Daralt Kopyala
void CHARACTER::ResetSkill()
{
    for (int i = 0; i < SKILL_MAX_NUM; ++i)
        SetSkillLevel(i, 0);

    // Ruh taşı flag temizliği
    char buf[32];
    for (int i = 1; i <= 6; ++i) {
        snprintf(buf, sizeof(buf), "skill_%d_read", i);
        SetQuestFlag(buf, 0);
    }
}

Fonksiyonu bununla değiştirin
 
Hocam ClearSkill() fonksiyonunu bulun. Bende char_skill.cpp dosyasında. Fonskiyonun sonuna;

Kod:
Genişlet Daralt Kopyala
char buf[32];
for (int i = 1; i <= 6; ++i) {
    snprintf(buf, sizeof(buf), "skill_%d_read", i);
    SetQuestFlag(buf, 0);
}

Ekleyiniz. Derledikten sonra çözüldü olarak işaretleyebilirsiniz.


İşiniz kolaylaşsın.

Kod:
Genişlet Daralt Kopyala
void CHARACTER::ResetSkill()
{
    for (int i = 0; i < SKILL_MAX_NUM; ++i)
        SetSkillLevel(i, 0);

    // Ruh taşı flag temizliği
    char buf[32];
    for (int i = 1; i <= 6; ++i) {
        snprintf(buf, sizeof(buf), "skill_%d_read", i);
        SetQuestFlag(buf, 0);
    }
}

Fonksiyonu bununla değiştirin
skill_%d_read ne oluyor açıklarmısın lütfen.
 
şu şekilde hallettim konu kapatılabilir.

char_skill.cpp:
Genişlet Daralt Kopyala
void CHARACTER::ClearSkill()
{
    PointChange(POINT_SKILL, 4 + (GetLevel() - 5) - GetPoint(POINT_SKILL));

    RemoveAffect(SKILL_JEONGWI);
    RemoveAffect(SKILL_GEOMKYUNG);
    RemoveAffect(SKILL_CHUNKEON);
    RemoveAffect(SKILL_EUNHYUNG);
    RemoveAffect(SKILL_GYEONGGONG);
    RemoveAffect(SKILL_GWIGEOM);
    RemoveAffect(SKILL_TERROR);
    RemoveAffect(SKILL_JUMAGAP);
    RemoveAffect(SKILL_MANASHILED);
    RemoveAffect(SKILL_HOSIN);
    RemoveAffect(SKILL_REFLECT);
    RemoveAffect(SKILL_KWAESOK);
    RemoveAffect(SKILL_JEUNGRYEOK);
    RemoveAffect(SKILL_GICHEON);

    for (int vnum = 1; vnum < SKILL_MAX_NUM; ++vnum)
    {
        std::string strTrainSkill;
        {
            std::ostringstream os;
            os << "training_grandmaster_skill.skill" << vnum;
            strTrainSkill = os.str();
        }

        if (GetQuestFlag(strTrainSkill) > 0) // sadece gerçekten var olanları sıfırla
            SetQuestFlag(strTrainSkill, 0);
    }

    ResetSkill();
}
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst