[C++] Şaman Grup Kutsama [Kendinini Kutsayamama Bugu Çözüldü]

Sistemi eklerken eksik kod ekliyorsunuz. skill.h dosyasına SKILL_FLAG_PARTY ibaresini eklediniz mi?
Kod:
SKILL_FLAG_PARTY = (1 << 27),
 
C++:
#ifdef ENABLE_WOLFMAN_CHARACTER
    SKILL_FLAG_BLEEDING    = (1 << 27),
    SKILL_FLAG_PARTY    = (1 << 28),
#endif
28 olarak ekli
 
common/service.h dosyasında #define ENABLE_WOLFMAN_CHARACTER aktif mi?
Bu arada o değeri siz mi eklediniz yoksa filesinizde var mıydı?
 
O zaman sistem sizde ekli olmalı. common/service.h 'ye
C++:
#define ENABLE_WOLFMAN_CHARACTER
yazıp deneyebilir misiniz?
 
partyflag değeri skill_proto da gözükmüyor queryleri ekledim yine gözükmedi ek olarak queryleri tek tek query listesin de run yaptırdım umarım yanlış yapmamışımdır xd
 
O zaman sistem sizde ekli olmalı. common/service.h 'ye
C++:
#define ENABLE_WOLFMAN_CHARACTER
yazıp deneyebilir misiniz?
sadece src de ekliydi wolfman kaldırdım fakat sorun ondan değildi.
dostum ben'de de çalışmadı sorunu nasıl çözdün ?
eğer sorunsuz build oluduysa ve çalışmıyorsa tek sorun skil_protodan kaynaklı
navicat aç ->player->skill_proto->design table kısmına gir setflag değerini bul üstüne tıkla alta values çıkıcak o kısmı verdiğim şekilde değiştir.
Kod:
'ATTACK','USE_MELEE_DAMAGE','COMPUTE_ATTGRADE','SELFONLY','USE_MAGIC_DAMAGE','USE_HP_AS_COST','COMPUTE_MAGIC_DAMAGE','SPLASH','GIVE_PENALTY','USE_ARROW_DAMAGE','PENETRATE','IGNORE_TARGET_RATING','ATTACK_SLOW','ATTACK_STUN','HP_ABSORB','SP_ABSORB','ATTACK_FIRE_CONT','REMOVE_BAD_AFFECT','REMOVE_GOOD_AFFECT','CRUSH','ATTACK_POISON','TOGGLE','DISABLE_BY_POINT_UP','CRUSH_LONG','WIND','ELEC','FIRE','PARTY'
bunu dene büyük ihtimal olur.
 
Arkadaşlar srcden ekledikten sonra mysql kısmını unutmayın....
 
Herşeyi yaptım game falan build oldu onda sıkıntı yok ama oyunda grup kutsama çalışmıyor sadece kendini kutsuyor, syserr falan yok. Locale üzerinden skilltable.txt dosyasından da güncelleme yapmama gerek var galiba değil mi?
 
Herşeyi yaptım game falan build oldu onda sıkıntı yok ama oyunda grup kutsama çalışmıyor sadece kendini kutsuyor, syserr falan yok. Locale üzerinden skilltable.txt dosyasından da güncelleme yapmama gerek var galiba değil mi?
Grup olarak çalışmasını istediğiniz yeteneklerin flaglarına PARTY değerini eklemeniz gerekiyor.
 
Grup olarak çalışmasını istediğiniz yeteneklerin flaglarına PARTY değerini eklemeniz gerekiyor.

navicat üzerinden ekleme yaptım zaten, navicat harici locale deki skilltable.txt klasöründen setFlag'larıda bu şekilde mi yapmak gerekiyor?
Screenshot_3.jpg
 
Reboot attıktan sonra navicat skill_proto değişmiyorsa txt düzenlemenize gerek yok. Fakat siz gene de düzenleyin olmazsa eklediğiniz kodların doğru yerde olduğuna dikkat edin.
 
Screenshot_2.jpg
Screenshot_3.jpg


game ve client de her şey yapılı, sql bilgileri de yukarıda ancak grup kutsama yapmıyor neden olabilir?
 
Grup kutsaması sorunsuz çalışıyor.
Grup dışındakiler kutsanmıyor.
Birilerine kutsama verince debugta böyle syserr düşüyor.

Kod:
fectManager::CreateEffectInstance - NO DATA :1427859766
CEffectManager::CreateEffectInstance - NO DATA :-1827400434
CEffectManager::CreateEffectInstance - NO DATA :-1894888259
 
Biraz hortlatmış olacağım ama bu sistemin tamamımı yoksa sadece fix mi?
 
Grup dışındakini kutsama fix demişsinizde fixlenmiyor nedense. Sistemi direk anlatımdan yaptım test ettim grubu kutsadı grup dışını kutsamadı. Bu fixlemeyi yapınca sorun düzeldi.

char_skill:
    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
        ComputeSkill(dwVnum, this);
    else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim )
        ComputeSkill(dwVnum, this);
    else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
    {
        FPartyPIDCollector f;
        GetParty()->ForEachOnMapMember(f, GetMapIndex());
            for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
            {
                LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
                ComputeSkill(dwVnum, ch);
            }
    }
    else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_BYEURAK)
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
        ComputeSkill(dwVnum, pkVictim);

    m_dwLastSkillTime = get_dword_time();

    return true;
}


DEĞİŞTİR:

C++:
    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
        ComputeSkill(dwVnum, this);
    else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
    {
        FPartyPIDCollector f;
        GetParty()->ForEachOnMapMember(f, GetMapIndex());
        for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
        {
            LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
            ComputeSkill(dwVnum, ch);
        }
    }   

    if (dwVnum == SKILL_CHAIN)
    {
        ResetChainLightningIndex();
        AddChainLightningExcept(pkVictim);
    }
    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
        ComputeSkill(dwVnum, this);   
    else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_BYEURAK)
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
        ComputeSkill(dwVnum, pkVictim);

    m_dwLastSkillTime = get_dword_time();

    return true;
}
 
Grup dışındakini kutsama fix demişsinizde fixlenmiyor nedense. Sistemi direk anlatımdan yaptım test ettim grubu kutsadı grup dışını kutsamadı. Bu fixlemeyi yapınca sorun düzeldi.

char_skill:
    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
        ComputeSkill(dwVnum, this);
    else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim )
        ComputeSkill(dwVnum, this);
    else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
    {
        FPartyPIDCollector f;
        GetParty()->ForEachOnMapMember(f, GetMapIndex());
            for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
            {
                LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
                ComputeSkill(dwVnum, ch);
            }
    }
    else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_BYEURAK)
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
        ComputeSkill(dwVnum, pkVictim);

    m_dwLastSkillTime = get_dword_time();

    return true;
}


DEĞİŞTİR:

C++:
    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
        ComputeSkill(dwVnum, this);
    else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
    {
        FPartyPIDCollector f;
        GetParty()->ForEachOnMapMember(f, GetMapIndex());
        for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
        {
            LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
            ComputeSkill(dwVnum, ch);
        }
    }  

    if (dwVnum == SKILL_CHAIN)
    {
        ResetChainLightningIndex();
        AddChainLightningExcept(pkVictim);
    }
    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
        ComputeSkill(dwVnum, this);  
    else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_BYEURAK)
        ComputeSkill(dwVnum, pkVictim);
    else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
        ComputeSkill(dwVnum, pkVictim);

    m_dwLastSkillTime = get_dword_time();

    return true;
}
herhangi bir sorun yok ama sende olmuş olabilir veya bende fixli olabilir :d
 
Geri
Üst