Çözüldü Loncayi direkt 20 lvl açtırma

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ı.

alemji21

Üye
Üye
Mesaj
97
Çözümler
9
Beğeni
35
Puan
469
Ticaret Puanı
0
Merhaba arkadaslar. Loncayi wslik filesim için direkt açarken 20 level açılmasını istiyorum. Navicat'tan direkt 20 lvl açılacak şekilde ayarlama yaptım 20 lvlde açılıyor fakat savaş yaptıramıyorum. Savaş için level düşük hatası alıyorum. Bu konuda bana yardımcı olacak birisi var mı? konuda Teşekkurler.
 
En son bir moderatör tarafından düzenlenmiş:
Çözüm
Yukarıdakileri yaptıktan sonra burayı bu şekilde düzenle öyle dene
guild_war.cpp:
bool CGuild::CanStartWar(BYTE bGuildWarType)
{
    if (bGuildWarType >= GUILD_WAR_TYPE_MAX_NUM)
        return false;


    if (test_server || quest::CQuestManager::instance().GetEventFlag("guild_war_test") != 0)
        return GetLadderPoint() >= 0;

    return GetLadderPoint() >= 0 && GetMemberCount() >= GUILD_WAR_MIN_MEMBER_COUNT;
}
cmd_genaral_.cpp gir

C++:
if (g->GetLadderPoint() == 0)
{
    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ·¹´õ Á¡¼ö°¡ ¸ğÀÚ¶ó¼ ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
    sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
}

arat

C++:
/*if (g->GetLadderPoint() == 0)
{
    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ·¹´õ Á¡¼ö°¡ ¸ğÀÚ¶ó¼ ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
    sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
}*/

böyle yap dene bakalım bi olucakmı

*Alıntı*

Lonca savaşı level sınırını kaldırarak bunun önüne geçebilirsin.
 
En son bir moderatör tarafından düzenlenmiş:
cmd_genaral_.cpp gir

C++:
if (g->GetLadderPoint() == 0)
{
    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ·¹´õ Á¡¼ö°¡ ¸ğÀÚ¶ó¼ ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
    sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
}

arat

C++:
/*if (g->GetLadderPoint() == 0)
{
    ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±æµå> ·¹´õ Á¡¼ö°¡ ¸ğÀÚ¶ó¼ ±æµåÀüÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù."));
    sys_log(0, "GuildWar.StartError.NEED_LADDER_POINT");
}*/

böyle yap dene bakalım bi olucakmı

*Alıntı*

Lonca savaşı level sınırını kaldırarak bunun önüne geçebilirsin.
Malesef Olmadı hocam bu işe yaramadı yine hata alıyorum
 
bunları denedim olmadı hocam
Bu dizin -----> /usr/game/share/locale/turkey/quest/object kısmından guild_manage ile alakalı bütün objectle bağlantılı olan dosyaları silin ve quest dosyasını açınız ardından level limit yazan yeri bulun leveli ayarladıktan sonra questi tekrar okutup reboot atın ardından serverinize girip tekrar deneyin.
 
Bu dizin -----> /usr/game/share/locale/turkey/quest/object kısmından guild_manage ile alakalı bütün objectle bağlantılı olan dosyaları silin ve quest dosyasını açınız ardından level limit yazan yeri bulun leveli ayarladıktan sonra questi tekrar okutup reboot atın ardından serverinize girip tekrar deneyin.
guest dosyasıyla alakalı bir şey olduğunu düşünmüyorum çümkü savaş ilan sistemi src tabanlı olduğunu için ordan çektiğini düşünüyorum ve dediğiniz quest dosyasını açınız ardından level limit yazan yeri bulun leveli ayarladıktan sonra questi tekrar okutup reboot burda kastettiğiniz guest hangi guest
 
guest dosyasıyla alakalı bir şey olduğunu düşünmüyorum çümkü savaş ilan sistemi src tabanlı olduğunu için ordan çektiğini düşünüyorum ve dediğiniz quest dosyasını açınız ardından level limit yazan yeri bulun leveli ayarladıktan sonra questi tekrar okutup reboot burda kastettiğiniz guest hangi guest
loncayla ilgili olan quest dosyası farklı bir alternatif çözüm üretmeye çalıştım fakat pek istediğiniz gibi değil lonca oluşturma levelini değiştirip (orn: 1 yapıp) direk o seviyede loncayı açabilme düzenlemesi bu. Tabi source tabanlı değil ve direk 20 level olunca vermiyor yani yukarıda bahsettiğim gibi tam olarak istediğiniz gibi birşey değil sanırım kusura bakmayın hocam o anlık çözüm üretmeye çalıştım
 
loncayla ilgili olan quest dosyası farklı bir alternatif çözüm üretmeye çalıştım fakat pek istediğiniz gibi değil lonca oluşturma levelini değiştirip (orn: 1 yapıp) direk o seviyede loncayı açabilme düzenlemesi bu. Tabi source tabanlı değil ve direk 20 level olunca vermiyor yani yukarıda bahsettiğim gibi tam olarak istediğiniz gibi birşey değil sanırım kusura bakmayın hocam o anlık çözüm üretmeye çalıştım
sorun değil teşekkür ederim yinede
 
@Trashy 'nin attığı örnekte tekrardan yeni eleman oluşturulup start level diye ona verilip tekrar computeguildpoints çağırılmış, aslında buna hiç gerek yok. Başta initialize fonksiyonu çağırılıyor ve o fonksiyonda level 1 olarak tanımlanıyor.
Aşağıda da bir kere power'ı setlememiz yeterli oluyor ComputeGuildPoints ile m_data.power'ı setlemeden önce.
guild.cpp
C++:
CGuild::CGuild(TGuildCreateParameter& cp)
{
    Initialize();

    m_general_count = 0;

    m_iMemberCountBonus = 0;

    strlcpy(m_data.name, cp.name, sizeof(m_data.name));
    m_data.master_pid = cp.master->GetPlayerID();
    strlcpy(m_data.grade_array[0].grade_name, LC_TEXT("길드장"), sizeof(m_data.grade_array[0].grade_name));
    m_data.grade_array[0].auth_flag = GUILD_AUTH_ADD_MEMBER | GUILD_AUTH_REMOVE_MEMBER | GUILD_AUTH_NOTICE | GUILD_AUTH_USE_SKILL;

    for (int i = 1; i < GUILD_GRADE_COUNT; ++i)
    {
        strlcpy(m_data.grade_array[i].grade_name, LC_TEXT("길드원"), sizeof(m_data.grade_array[i].grade_name));
        m_data.grade_array[i].auth_flag = 0;
    }

    std::unique_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery(
        "INSERT INTO guild%s(name, master, sp, level, exp, skill_point, skill) "
        "VALUES('%s', %u, 1000, 20, 0, 0, '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0')", // değişen 1->20
        get_table_postfix(), m_data.name, m_data.master_pid));

    // TODO if error occur?
    m_data.guild_id = pmsg->Get()->uiInsertID;

    for (int i = 0; i < GUILD_GRADE_COUNT; ++i)
    {
        DBManager::instance().Query("INSERT INTO guild_grade%s VALUES(%u, %d, '%s', %d)",
            get_table_postfix(),
            m_data.guild_id,
            i + 1,
            m_data.grade_array[i].grade_name,
            m_data.grade_array[i].auth_flag);
    }

    ComputeGuildPoints();
    m_data.power = m_data.max_power;
    m_data.ladder_point = 0;
    db_clientdesc->DBPacket(HEADER_GD_GUILD_CREATE, 0, &m_data.guild_id, sizeof(DWORD));

    TPacketGuildSkillUpdate guild_skill;
    guild_skill.guild_id = m_data.guild_id;
    guild_skill.amount = 0;
    guild_skill.skill_point = 19; // 0->19
    memset(guild_skill.skill_levels, 0, GUILD_SKILL_COUNT);

    db_clientdesc->DBPacket(HEADER_GD_GUILD_SKILL_UPDATE, 0, &guild_skill, sizeof(guild_skill));

    // TODO GUILD_NAME
    CHARACTER_MANAGER::instance().for_each_pc(FGuildNameSender(GetID(), GetName()));
    /*
       TPacketDGGuildMember p;
       memset(&p, 0, sizeof(p));
       p.dwPID = cp.master->GetPlayerID();
       p.bGrade = 15;
       AddMember(&p);
     */
    RequestAddMember(cp.master, GUILD_LEADER_GRADE);
}

void CGuild::Initialize()
{
    memset(&m_data, 0, sizeof(m_data));
    m_data.level = 20; // 1->20

    for (int i = 0; i < GUILD_SKILL_COUNT; ++i)
        abSkillUsable[i] = true;

    m_iMemberCountBonus = 0;
}

Bu şekilde build alıp denersen sevinirim bu şekilde çalışması gerek.
 
@Trashy 'nin attığı örnekte tekrardan yeni eleman oluşturulup start level diye ona verilip tekrar computeguildpoints çağırılmış, aslında buna hiç gerek yok. Başta initialize fonksiyonu çağırılıyor ve o fonksiyonda level 1 olarak tanımlanıyor.
Aşağıda da bir kere power'ı setlememiz yeterli oluyor ComputeGuildPoints ile m_data.power'ı setlemeden önce.
guild.cpp
C++:
CGuild::CGuild(TGuildCreateParameter& cp)
{
    Initialize();

    m_general_count = 0;

    m_iMemberCountBonus = 0;

    strlcpy(m_data.name, cp.name, sizeof(m_data.name));
    m_data.master_pid = cp.master->GetPlayerID();
    strlcpy(m_data.grade_array[0].grade_name, LC_TEXT("길드장"), sizeof(m_data.grade_array[0].grade_name));
    m_data.grade_array[0].auth_flag = GUILD_AUTH_ADD_MEMBER | GUILD_AUTH_REMOVE_MEMBER | GUILD_AUTH_NOTICE | GUILD_AUTH_USE_SKILL;

    for (int i = 1; i < GUILD_GRADE_COUNT; ++i)
    {
        strlcpy(m_data.grade_array[i].grade_name, LC_TEXT("길드원"), sizeof(m_data.grade_array[i].grade_name));
        m_data.grade_array[i].auth_flag = 0;
    }

    std::unique_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery(
        "INSERT INTO guild%s(name, master, sp, level, exp, skill_point, skill) "
        "VALUES('%s', %u, 1000, 20, 0, 0, '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0')", // değişen 1->20
        get_table_postfix(), m_data.name, m_data.master_pid));

    // TODO if error occur?
    m_data.guild_id = pmsg->Get()->uiInsertID;

    for (int i = 0; i < GUILD_GRADE_COUNT; ++i)
    {
        DBManager::instance().Query("INSERT INTO guild_grade%s VALUES(%u, %d, '%s', %d)",
            get_table_postfix(),
            m_data.guild_id,
            i + 1,
            m_data.grade_array[i].grade_name,
            m_data.grade_array[i].auth_flag);
    }

    ComputeGuildPoints();
    m_data.power = m_data.max_power;
    m_data.ladder_point = 0;
    db_clientdesc->DBPacket(HEADER_GD_GUILD_CREATE, 0, &m_data.guild_id, sizeof(DWORD));

    TPacketGuildSkillUpdate guild_skill;
    guild_skill.guild_id = m_data.guild_id;
    guild_skill.amount = 0;
    guild_skill.skill_point = 19; // 0->19
    memset(guild_skill.skill_levels, 0, GUILD_SKILL_COUNT);

    db_clientdesc->DBPacket(HEADER_GD_GUILD_SKILL_UPDATE, 0, &guild_skill, sizeof(guild_skill));

    // TODO GUILD_NAME
    CHARACTER_MANAGER::instance().for_each_pc(FGuildNameSender(GetID(), GetName()));
    /*
       TPacketDGGuildMember p;
       memset(&p, 0, sizeof(p));
       p.dwPID = cp.master->GetPlayerID();
       p.bGrade = 15;
       AddMember(&p);
     */
    RequestAddMember(cp.master, GUILD_LEADER_GRADE);
}

void CGuild::Initialize()
{
    memset(&m_data, 0, sizeof(m_data));
    m_data.level = 20; // 1->20

    for (int i = 0; i < GUILD_SKILL_COUNT; ++i)
        abSkillUsable[i] = true;

    m_iMemberCountBonus = 0;
}

Bu şekilde build alıp denersen sevinirim bu şekilde çalışması gerek.
malesef hocam buda çözmedi halen boyle hata alıyorum

Ekran görüntüsü 2022-07-31 021409.png
 
Yukarıdakileri yaptıktan sonra burayı bu şekilde düzenle öyle dene
guild_war.cpp:
bool CGuild::CanStartWar(BYTE bGuildWarType)
{
    if (bGuildWarType >= GUILD_WAR_TYPE_MAX_NUM)
        return false;


    if (test_server || quest::CQuestManager::instance().GetEventFlag("guild_war_test") != 0)
        return GetLadderPoint() >= 0;

    return GetLadderPoint() >= 0 && GetMemberCount() >= GUILD_WAR_MIN_MEMBER_COUNT;
}
 
Çözüm
Yukarıdakileri yaptıktan sonra burayı bu şekilde düzenle öyle dene
guild_war.cpp:
bool CGuild::CanStartWar(BYTE bGuildWarType)
{
    if (bGuildWarType >= GUILD_WAR_TYPE_MAX_NUM)
        return false;


    if (test_server || quest::CQuestManager::instance().GetEventFlag("guild_war_test") != 0)
        return GetLadderPoint() >= 0;

    return GetLadderPoint() >= 0 && GetMemberCount() >= GUILD_WAR_MIN_MEMBER_COUNT;
}
Sadece bir düşünce ama bence burayla alakası yok gibi
 
Yardımlarınız için hepinize teşekkür edirim sorunum çözülmüştür.
çözüm
@Trashy 'nin attığı örnekte tekrardan yeni eleman oluşturulup start level diye ona verilip tekrar computeguildpoints çağırılmış, aslında buna hiç gerek yok. Başta initialize fonksiyonu çağırılıyor ve o fonksiyonda level 1 olarak tanımlanıyor.
Aşağıda da bir kere power'ı setlememiz yeterli oluyor ComputeGuildPoints ile m_data.power'ı setlemeden önce.
guild.cpp
C++:
CGuild::CGuild(TGuildCreateParameter& cp)
{
    Initialize();

    m_general_count = 0;

    m_iMemberCountBonus = 0;

    strlcpy(m_data.name, cp.name, sizeof(m_data.name));
    m_data.master_pid = cp.master->GetPlayerID();
    strlcpy(m_data.grade_array[0].grade_name, LC_TEXT("길드장"), sizeof(m_data.grade_array[0].grade_name));
    m_data.grade_array[0].auth_flag = GUILD_AUTH_ADD_MEMBER | GUILD_AUTH_REMOVE_MEMBER | GUILD_AUTH_NOTICE | GUILD_AUTH_USE_SKILL;

    for (int i = 1; i < GUILD_GRADE_COUNT; ++i)
    {
        strlcpy(m_data.grade_array[i].grade_name, LC_TEXT("길드원"), sizeof(m_data.grade_array[i].grade_name));
        m_data.grade_array[i].auth_flag = 0;
    }

    std::unique_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery(
        "INSERT INTO guild%s(name, master, sp, level, exp, skill_point, skill) "
        "VALUES('%s', %u, 1000, 20, 0, 0, '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0')", // değişen 1->20
        get_table_postfix(), m_data.name, m_data.master_pid));

    // TODO if error occur?
    m_data.guild_id = pmsg->Get()->uiInsertID;

    for (int i = 0; i < GUILD_GRADE_COUNT; ++i)
    {
        DBManager::instance().Query("INSERT INTO guild_grade%s VALUES(%u, %d, '%s', %d)",
            get_table_postfix(),
            m_data.guild_id,
            i + 1,
            m_data.grade_array[i].grade_name,
            m_data.grade_array[i].auth_flag);
    }

    ComputeGuildPoints();
    m_data.power = m_data.max_power;
    m_data.ladder_point = 0;
    db_clientdesc->DBPacket(HEADER_GD_GUILD_CREATE, 0, &m_data.guild_id, sizeof(DWORD));

    TPacketGuildSkillUpdate guild_skill;
    guild_skill.guild_id = m_data.guild_id;
    guild_skill.amount = 0;
    guild_skill.skill_point = 19; // 0->19
    memset(guild_skill.skill_levels, 0, GUILD_SKILL_COUNT);

    db_clientdesc->DBPacket(HEADER_GD_GUILD_SKILL_UPDATE, 0, &guild_skill, sizeof(guild_skill));

    // TODO GUILD_NAME
    CHARACTER_MANAGER::instance().for_each_pc(FGuildNameSender(GetID(), GetName()));
    /*
       TPacketDGGuildMember p;
       memset(&p, 0, sizeof(p));
       p.dwPID = cp.master->GetPlayerID();
       p.bGrade = 15;
       AddMember(&p);
     */
    RequestAddMember(cp.master, GUILD_LEADER_GRADE);
}

void CGuild::Initialize()
{
    memset(&m_data, 0, sizeof(m_data));
    m_data.level = 20; // 1->20

    for (int i = 0; i < GUILD_SKILL_COUNT; ++i)
        abSkillUsable[i] = true;

    m_iMemberCountBonus = 0;
}

Bu şekilde build alıp denersen sevinirim bu şekilde çalışması gerek.
Yukarıdakileri yaptıktan sonra burayı bu şekilde düzenle öyle dene
guild_war.cpp:
bool CGuild::CanStartWar(BYTE bGuildWarType)
{
    if (bGuildWarType >= GUILD_WAR_TYPE_MAX_NUM)
        return false;


    if (test_server || quest::CQuestManager::instance().GetEventFlag("guild_war_test") != 0)
        return GetLadderPoint() >= 0;

    return GetLadderPoint() >= 0 && GetMemberCount() >= GUILD_WAR_MIN_MEMBER_COUNT;
}
bu iki blogu tek ekleyerek sorunum çözülmüştür.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst