Login To Vote
Sign in and rate this file in one click.
  • Full Sources LGD Season 16 Repack 5 0 5 1

Full Sources LGD Season 16 Repack

Started by dorin1, Apr 12, 2026, 11:04 PM

Hi everyone,

I shared my repack version with the community some time ago. Since it has been quite a while, this time I'm posting the full source code of the repack version, including:

  • Servers
  • DLL client
  • Launcher source code



1. Fix GM Wing for MU S16 
I recreated this fix.

Code (cpp) Select
SetCompleteHook(0xE9, 0x00A7B394, 0x00A7B3C1);
SetByte(0x00A7B9B7+6, 0xFFFFF); // Fix GM Wing on Blood Castle



2. disableEffects+15 for MU S16 
I recreated this fix as well.

Code (cpp) Select
MemorySet(0x00646D6D, 0x90, 0x6AB);  // disableEffects+15



3. 60 FPS for MU Online S16 
I made this for fun. These values cannot be modified.

Default value: 40

Code (cpp) Select
SetByte(0x0050E9CD + 2, 31);
SetByte(0x0050F031 + 3, 31);
SetByte(0x0050E7BE + 6, 31);
SetByte(0x0050F003 + 3, 31);
SetByte(0x0050F009 + 1, 31);



4. Fix Command Post 
I fixed the post command.

In GameServer source 
File: gameserver.cpp

Code (cpp) Select
//this->SetCommandPostEnabled(sMain->GetBool("Command.Post.Enabled", false));
//this->SetCommandPostMinLevel(sMain->GetInt32("Command.Post.MinLevel", 0));
//this->SetCommandPostCost(sMain->GetInt32("Command.Post.Cost", 100000));
//this->SetCommandPostDelay(sMain->GetInt32("Command.Post.Delay", 5));
this->SetCommandPostType(CHAT_COMMAND); // CHAT_COMMAND
//this->SetCommandPostType(sMain->GetInt32("Command.Post.Type", 0));
this->SetCommandPostHead("$name: [POST][Sub-$server]: $message");
//this->SetCommandPostHead(sMain->GetString("Command.Post.Head", "$name: [POST][$server]: $message"));

In gameserver.h

Code (cpp) Select
DECLARE_BOOL(CommandPostEnabled);
DECLARE_ENUM(int16, CommandPostMinLevel);
DECLARE_ENUM(uint32, CommandPostCost);
DECLARE_ENUM(uint32, CommandPostDelay);
DECLARE_ENUM(uint8, CommandPostType);
DECLARE_PROPERTY_STRING(CommandPostHead);

In Command.ini 
Add:

Code (ini) Select
[Post]
Command.Post.Enabled = 1
MinLevelPost=1
PostCost=10000
PostDelay=5



5. 65K Stats

Code (cpp) Select
SetByte(0x00B35273 + 1, 0xB7);//00B35273
SetByte(0x00B35288 + 1, 0xB7);//00B35288
SetByte(0x00B3529D + 1, 0xB7);//00B3529D
SetByte(0x00B35341 + 1, 0xB7);//00B35341
SetByte(0x00B35358 + 1, 0xB7);//00B35358
SetByte(0x00B3536D + 1, 0xB7);//00B3536D
SetByte(0x00B35382 + 1, 0xB7);//00B35382
SetByte(0x00B35426 + 1, 0xB7);//00B35426
SetByte(0x00B3543D + 1, 0xB7);//00B3543D
SetByte(0x00B35452 + 1, 0xB7);//00B35452
SetByte(0x00B35467 + 1, 0xB7);//00B35467
SetByte(0x00B3550B + 1, 0xB7);//00B3550B
SetByte(0x00B35522 + 1, 0xB7);//00B35522
SetByte(0x00B35537 + 1, 0xB7);//00B35537
SetByte(0x00B3554C + 1, 0xB7);//00B3554C
SetByte(0x00B355F0 + 1, 0xB7);//00B355F0
SetByte(0x00B35607 + 1, 0xB7);//00B35607
SetByte(0x00B3561C + 1, 0xB7);//00B3561C
SetByte(0x00B35631 + 1, 0xB7);//00B35631
//SetByte(0x00A97B3F + 1, 0xB7);
SetByte(0x00AF2041 + 1, 0xB7);//00AF2041

SetByte(0x00B9BD1A + 1, 0xB7);//00B9BD1A ?
SetByte(0x00B35293 + 1, 0xB7);//00B35293
SetByte(0x00B35363 + 1, 0xB7);//00B35363
SetByte(0x00B35378 + 1, 0xB7);//00B35378
SetByte(0x00B35448 + 1, 0xB7);//00B35448
SetByte(0x00B3545D + 1, 0xB7);//00B3545D
SetByte(0x00B3552D + 1, 0xB7);//00B3552D
SetByte(0x00B35542 + 1, 0xB7);//00B35542
SetByte(0x00B35612 + 1, 0xB7);//00B35612
SetByte(0x00B35627 + 1, 0xB7);//00B35627
SetByte(0x00B35888 + 1, 0xB7);//00B35888
SetByte(0x00B358A0 + 1, 0xB7);//00B358A0
SetByte(0x00B358E1 + 1, 0xB7);//00B358E1
SetByte(0x00B358F9 + 1, 0xB7);//00B358F9
SetByte(0x00B3593A + 1, 0xB7);//00B3593A
SetByte(0x00B35952 + 1, 0xB7);//00B35952
SetByte(0x00B35993 + 1, 0xB7);//00B35993
SetByte(0x00B359AB + 1, 0xB7);//00B359AB
SetByte(0x00B359EC + 1, 0xB7);//00B359EC
SetByte(0x00B35A04 + 1, 0xB7);//00B35A04
SetByte(0x00B35A1C + 1, 0xB7);//00B35A1C
SetByte(0x00B35A35 + 1, 0xB7);//00B35A35
SetByte(0x00B35A7A + 1, 0xB7);//00B35A7A
SetByte(0x00B35A92 + 1, 0xB7);//00B35A92
SetByte(0x00B35AAA + 1, 0xB7);//00B35AAA
SetByte(0x00B35AC3 + 1, 0xB7);//00B35AC3
SetByte(0x00B35B0E + 1, 0xB7);//00B35B0E
SetByte(0x00B35B26 + 1, 0xB7);//00B35B26
SetByte(0x00B35B3E + 1, 0xB7);//00B35B3E
SetByte(0x00B35B57 + 1, 0xB7);//00B35B57
SetByte(0x00B35BA2 + 1, 0xB7);//00B35BA2
SetByte(0x00B35BBA + 1, 0xB7);//00B35BBA
SetByte(0x00B35BD2 + 1, 0xB7);//00B35BD2
SetByte(0x00B35BEB + 1, 0xB7);//00B35BEB
SetByte(0x00B35C36 + 1, 0xB7);//00B35C36
SetByte(0x00B35C4E + 1, 0xB7);//00B35C4E
SetByte(0x00B35C66 + 1, 0xB7);//00B35C66
SetByte(0x00B35C7F + 1, 0xB7);//00B35C7F
SetByte(0x00B35CCA + 1, 0xB7);//00B35CCA
SetByte(0x00B35CE2 + 1, 0xB7);//00B35CE2
SetByte(0x00B35D2D + 1, 0xB7);//00B35D2D
SetByte(0x00B35D45 + 1, 0xB7);//00B35D45
SetByte(0x00B35D8C + 1, 0xB7);//00B35D8C
SetByte(0x00B35DA4 + 1, 0xB7);//00B35DA4
SetByte(0x00B35DEB + 1, 0xB7);//00B35DEB
SetByte(0x00B35E03 + 1, 0xB7);//00B35E03
SetByte(0x00B367AB + 1, 0xB7);//00B367AB
SetByte(0x00B367C3 + 1, 0xB7);//00B367C3
SetByte(0x00B352AC + 1, 0xB7);
SetByte(0x00B352C2 + 1, 0xB7);

//
// speed limit
//
SetWord(0x00556C25 + 2, 0xFFFF);



6. Fix visual bug for Box of Heaven

Code (cpp) Select
MemSet(0x005F2ACE + 6, 0x07, 1);



7. Fix saving Master Skill Tree points and level when using Reset System

Code (cpp) Select
void Player::LoadDBInfoNew(uint32 charID)
{
    QueryResult result = MuDatabase.PQuery(
        "SELECT c.guid, c.slot, c.authority, c.race, c.name, "
        "c.level, c.level_master, "
        "c.experience, c.experience_master, "
        "c.points, c.points_master, "
        "c.strength, c.agility, c.vitality, c.energy, c.leadership, "
        "c.world, c.world_x, c.world_y, c.direction, c.money, "
        "c.life, c.mana, c.shield, c.stamina, "
        "c.add_fruit_points, c.dec_fruit_points, c.expanded_inventory, "
        "c.mute_time, c.admin_flags, c.pk_level, c.pk_count, c.pk_points, c.first_time, "
        "c.santa_claus_gift, c.personal_store_name, "
        "c.goblin_points, c.kick_time, c.account_id, "
        "c.post_count, c.post_day, c.post_month, c.ruud_money, "
        "c.level_majestic, c.experience_majestic, c.points_majestic, "
        "UNIX_TIMESTAMP(c.create_date), c.hunting_log_visible, c.reset, c.monster_soul_purchase "
        "FROM character_info c WHERE c.account_id = %d AND c.guid = %d",
        this->GetAccountData()->GetGUID(), charID);

    if (!result)
    {
        this->CloseSocket();
        return;
    }

    FieldReader reader(result->Fetch());

    // ===== BASIC =====
    this->SetGUID(reader.GetUInt32());
    this->SetSlot(reader.GetUInt8());
    this->SetAuthority(reader.GetUInt8());
    this->SetDBClass(reader.GetUInt8());
    this->SetName(reader.GetCString());

    // ===== LEVEL =====
    this->GetLevelData(LEVEL_DATA_NORMAL)->SetLevel(reader.GetInt16());
    this->GetLevelData(LEVEL_DATA_MASTER)->SetLevel(reader.GetInt16());

    // ===== EXP =====
    this->GetLevelData(LEVEL_DATA_NORMAL)->SetExperience(reader.GetInt64());
    this->GetLevelData(LEVEL_DATA_MASTER)->SetExperience(reader.GetInt64());

    // ===== POINT =====
    this->GetLevelData(LEVEL_DATA_NORMAL)->SetPoints(reader.GetInt32());
    this->GetLevelData(LEVEL_DATA_MASTER)->SetPoints(reader.GetInt32());

    // ===== STATS =====
    for (uint64 i = 0; i < MAX_STAT_TYPE; ++i)
        this->SetStat(i, reader.GetInt32());

    this->SetWorldId(reader.GetUInt16());
    this->SetX(reader.GetInt16());
    this->SetY(reader.GetInt16());
    this->SetDirection(reader.GetUInt8());
    this->MoneySet(reader.GetUInt32());

    POWER_LOOP(i)
        this->PowerSet(i, reader.GetInt32());

    this->SetFruitPointsAdd(reader.GetInt32());
    this->SetFruitPointsDec(reader.GetInt32());
    this->GetInventory()->SetExpanded(reader.GetUInt8());
    this->SetMuteTime(reader.GetInt64());
    this->SetAdministratorFlag(reader.GetUInt32());

    this->SetPKLevel(reader.GetUInt8());
    this->SetPKCount(reader.GetInt32());
    this->SetPKPoints(reader.GetInt32());
    this->SetFirstTime(reader.GetBool());
    this->SetSantaClausGiftDate(reader.GetInt64());

    this->GetPersonalStore()->SetName(reader.GetBase64String().c_str());
    this->GetPersonalStore()->SetOff(false);

    this->SetGoblinPoints(reader.GetUInt32());
    this->SetKickTime(reader.GetInt64());

    uint32 account_id = reader.GetUInt32();

    this->SetPostCount(reader.GetInt32());
    this->SetPostDay(reader.GetUInt8());
    this->SetPostMonth(reader.GetUInt8());
    this->SetRuudMoney(reader.GetUInt32());

    // ===== MAJESTIC =====
    this->GetLevelData(LEVEL_DATA_MAJESTIC)->SetLevel(reader.GetInt16());
    this->GetLevelData(LEVEL_DATA_MAJESTIC)->SetExperience(reader.GetInt64());
    this->GetLevelData(LEVEL_DATA_MAJESTIC)->SetPoints(reader.GetInt32());

    // ===== CREATE DATE =====
    this->SetCreateDate(reader.GetInt64());
    this->SetHuntingRecordVisible(reader.GetUInt8() == 1);

    // ===== RESET =====
    this->GetResetSystem(RESET_TOTAL)->SetReset(reader.GetInt32());
    this->SetMonsterSoulPurchase(reader.GetInt8());

    // =========================
    // FIX LOGIC MASTER ()
    // =========================
    if (this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel() <= 0)
    {
        this->GetLevelData(LEVEL_DATA_MASTER_BAK)->SetLevel(0);
        this->GetLevelData(LEVEL_DATA_MASTER_BAK)->SetPoints(0);
    }
    else
    {
        this->GetLevelData(LEVEL_DATA_MASTER_BAK)->SetLevel(
            this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel()
        );

        this->GetLevelData(LEVEL_DATA_MASTER_BAK)->SetPoints(
            this->GetLevelData(LEVEL_DATA_MASTER)->GetPoints()
        );
    }

    // =========================
    // FIX LOGIC MAJESTIC
    // =========================
    if (this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel() < 400)
    {
        this->GetLevelData(LEVEL_DATA_MAJESTIC_BAK)->SetLevel(
            this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetLevel()
        );

        this->GetLevelData(LEVEL_DATA_MAJESTIC_BAK)->SetPoints(
            this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetPoints()
        );

        // unlock → reset majestic
        this->GetLevelData(LEVEL_DATA_MAJESTIC)->SetLevel(0);
        this->GetLevelData(LEVEL_DATA_MAJESTIC)->SetExperience(0);
        this->GetLevelData(LEVEL_DATA_MAJESTIC)->SetPoints(0);
    }

    // ===== VALIDATE ACCOUNT =====
    if (account_id != this->GetAccountData()->GetGUID())
    {
        this->CloseSocket();
        return;
    }

    if (this->GetKickTime() <= 0)
    {
        this->SetKickTime(time(nullptr));
    }
}
//

void Player::SaveDBInfo(SQLTransaction& trans)
{
    PreparedStatement* stmt = MuDatabase.GetPreparedStatement(CHARACTER_UPDATE_INFO);

    stmt->setUInt8(this->GetAuthority());
    stmt->setUInt8(this->GetDBClass());
    stmt->setString(this->GetName());

    stmt->setInt16(this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel());
    if (this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel() < 400) {
        stmt->setInt16(this->GetLevelData(LEVEL_DATA_MASTER_BAK)->GetLevel());
    }
    else if (this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel() == 400) {
        if (this->GetLevelData(LEVEL_DATA_MASTER_BAK)->GetLevel() == 0) {
            stmt->setInt16(this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel());
        }
        else {
            this->GetLevelData(LEVEL_DATA_MASTER)->SetLevel(this->GetLevelData(LEVEL_DATA_MASTER_BAK)->GetLevel());
            stmt->setInt16(this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel());
        }
    }

    stmt->setInt64(this->GetLevelData(LEVEL_DATA_NORMAL)->GetExperience());
    stmt->setInt64(this->GetLevelData(LEVEL_DATA_MASTER)->GetExperience());
    stmt->setInt32(this->GetLevelData(LEVEL_DATA_NORMAL)->GetPoints());

    if (this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel() < 400) {
        stmt->setInt16(this->GetLevelData(LEVEL_DATA_MASTER_BAK)->GetPoints());
    }
    else if (this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel() == 400) {
        if (this->GetLevelData(LEVEL_DATA_MASTER_BAK)->GetLevel() == 0) {
            stmt->setInt16(this->GetLevelData(LEVEL_DATA_MASTER)->GetPoints());
        }
        else {
            this->GetLevelData(LEVEL_DATA_MASTER)->SetPoints(this->GetLevelData(LEVEL_DATA_MASTER_BAK)->GetPoints());
            stmt->setInt16(this->GetLevelData(LEVEL_DATA_MASTER)->GetPoints());
        }
    }

    for (uint64 i = 0; i < MAX_STAT_TYPE; ++i)
    {
        stmt->setUInt32(this->GetStat(i));
    }

    stmt->setUInt16(this->GetWorldId());
    stmt->setInt16(this->GetX());
    stmt->setInt16(this->GetY());
    stmt->setUInt8(this->GetDirection());
    stmt->setUInt32(this->MoneyGet());

    for (uint8 i = 0; i < POWER_MAX; ++i)
    {
        stmt->setInt32(this->PowerGet(i));
    }

    stmt->setInt32(this->GetFruitPointsAdd());
    stmt->setInt32(this->GetFruitPointsDec());
    stmt->setUInt8(this->GetInventory()->GetExpanded());
    stmt->setInt64(this->GetMuteTime());
    stmt->setUInt32(this->GetAdministratorFlag());
    stmt->setUInt8(this->GetPKLevel());
    stmt->setInt32(this->GetPKCount());
    stmt->setInt32(this->GetPKPoints());
    stmt->setUInt8(this->IsFirstTime());
    stmt->setInt64(this->GetSantaClausGiftDate());
    stmt->setString(base64::encode((uint8*)this->GetPersonalStore()->GetName(), PERSONAL_STORE_NAME_LENGTH));
    stmt->setBool(this->GetPersonalStore()->IsOpen() && this->GetPersonalStore()->IsOff());
    stmt->setUInt32(this->GetGoblinPoints());
    stmt->setInt64(time(nullptr));
    stmt->setInt64(this->GetKickTime());
    stmt->setInt32(this->GetPostCount());
    stmt->setUInt8(this->GetPostDay());
    stmt->setUInt8(this->GetPostMonth());
    stmt->setUInt32(this->GetRuudMoney());
    if (this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel() < 400 || this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel() < 400) {
        stmt->setInt16(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetLevel());
        stmt->setInt64(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetExperience());
        stmt->setInt32(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetPoints());
    }
    else if (this->GetLevelData(LEVEL_DATA_NORMAL)->GetLevel() == 400 && this->GetLevelData(LEVEL_DATA_MASTER)->GetLevel() == 400) {
        if (this->GetLevelData(LEVEL_DATA_MAJESTIC_BAK)->GetLevel() == 0) {
            stmt->setInt16(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetLevel());
            stmt->setInt64(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetExperience());
            stmt->setInt32(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetPoints());
        }
        else if (this->GetLevelData(LEVEL_DATA_MAJESTIC_BAK)->GetLevel() > 0) {
            stmt->setInt16(this->GetLevelData(LEVEL_DATA_MAJESTIC_BAK)->GetLevel());
            stmt->setInt64(this->GetLevelData(LEVEL_DATA_MAJESTIC)->GetExperience());
            stmt->setInt32(this->GetLevelData(LEVEL_DATA_MAJESTIC_BAK)->GetPoints());
        }
    }

    stmt->setUInt8(this->IsHuntingRecordVisible() ? 1 : 0);
    stmt->setUInt32(this->GetResetSystem(RESET_TOTAL)->GetReset());
    stmt->setUInt8(this->GetMonsterSoulPurchase());
    stmt->setUInt32(this->GetGUID());

    trans->Append(stmt);

    this->GetWarehouse()->SaveDBData(trans);
}



If anyone needs it formatted differently for SMF, with colors, bigger titles, or spoiler sections, I can rewrite it that way too.


1.jpg
2.jpg
3.jpg 



Protected content
  • Click the orange - Unlock Content - button on the bottom-right of this post to reveal the hidden links.

I'm working on the LGD sources; I recently migrated them to run on Linux, and they're working perfectly.

Now I'm migrating the database game to XML files, taking advantage of some things from the DATKOOL project.

Once I get this S16 running well with XML, the next step will be to try to upgrade to S18.
  •  
    The following users thanked this post: Popa

[PT]
Alguém sabe como alterar o MaxAttackSpeed desse servidor?
Por exemplo, o BK não passa de 288...
[VN]
Có ai biết cách thay đổi MaxAttackSpeed ��trên máy chủ này không?
Ví dụ, BK không thể vượt quá 288...
[EN]
Does anyone know how to change the MaxAttackSpeed ��on this server?
For example, BK doesn't go above 288...
  •  
    The following users thanked this post: Popa

can you add what version of boost needed and how i can implement it properly so that i will not having a bad time on compiling thank you so much!
  •  

  •  

Thanks for this, can anyone point me to the original Repack of this server files

thank you!
  •  

#6
Quote from: burikat on Sep 19, 2026, 02:30 AMThanks for this, can anyone point me to the original Repack of this server files

thank you!

There's a full guide made back in the days, on github, explaining every step of the server, every single file.

MU Online Developer focused on custom systems, unique features and serious projects. Available for selected collaborations and private development. Serious inquiries only — no time-wasters.

60 fps READY (any busy scene) DM Me.
  •  

Quote from: Phantasm on Sep 19, 2026, 12:55 PMThere's a full guide made back in the days, on github, explaining every step of the server, every single file.

I just downloaded this but there is no Server/ repack so I wonder if there is a repack somewhere for this source
  •  

#8
Quote from: burikat on Sep 20, 2026, 01:24 PMI just downloaded this but there is no Server/ repack so I wonder if there is a repack somewhere for this source

Have a look, I found something, maybe it is helping you in a way or another:


Github: https://github.com/CParaschivDev/mu_online_lgnd

Github: https://github.com/samik3k/mu_online_lgnd/wiki
MU Online Developer focused on custom systems, unique features and serious projects. Available for selected collaborations and private development. Serious inquiries only — no time-wasters.

60 fps READY (any busy scene) DM Me.
  •  
    The following users thanked this post: burikat