Source Tales of Pirate 2026 x64 DX9 by alexxst.st

@alexxst great work man. Ill fork this repo aswell and see if I can help you on something.
 
This repo is 64 bits for free?
 
1.webp
someone know how to solve this?
 
nice release, ill check this later and gonna try to help with issues
 
Oi

Estou apresentando minha versão do Pirate King Online (PKO), que será desenvolvida ativamente com correções de bugs contínuas.
Please, Log in or Register to view URLs content!



Minha versão do PKO agora é muito diferente de https://pkodev.com/threads/tales-of-pirate-2022-dx9.126/, embora tenha sido originalmente baseado nele.
  • A camada de rede foi completamente reescrita e agora está no projeto CorsairsNet.
  • O protocolo foi alterado de binário para msgpack, então agora você pode imprimir todos os dados do pacote para depuração.
  • Nada mais é lido ou gravado diretamente nos pacotes — em vez disso, é usada serialização/desserialização, o que garante que não haverá erros de rede no lado do cliente ou servidor.
  • Todos os pacotes são cobertos por testes.
  • GateServer, GroupServer e AccountServer foram reescritos em .LÍQUIDO (F#).
  • O GateServer será capaz de lidar com tantos clientes quanto sua máquina puder suportar.
  • As vulnerabilidades de injeção de SQL foram completamente eliminadas no .Servidores NET.
  • Um sistema de registro unificado baseado em C++20 foi adicionado aos projetos C++, substituindo a abordagem insegura baseada em sprintf.
  • O Lua foi atualizado para a versão mais recente do LuaJIT e LuaBridge, então agora você pode adicionar e chamar funções de forma limpa.
  • LuaBridge agora mostrará e relatará claramente todos os erros que anteriormente passaram despercebidos porque CaLua os ignorou silenciosamente.
  • Não será mais possível passar acidentalmente um Character* para uma função esperando um Npc* em Lua.
  • O sistema de chamada Lua foi completamente reescrito e a verificação manual de atributos foi removida.

Em breve:
  • Todas as tabelas txt/bin serão descartadas em favor de um sistema unificado de carregamento de dados de string baseado em SQLite incorporado.
  • O servidor e o cliente serão migrados para x64.
  • O DirectX será atualizado da versão 9 para a 10.
  • Um sistema de armazenamento de pacotes de ativos será adicionado.
  • Ferramentas para trabalhar com recursos do jogo serão adicionadas diretamente à solução.

PS Sinta-se à vontade para criar relatórios de bugs — Vou corrigi-los de tempos em tempos. Solicitações de pull são bem-vindas!)
Bro @alexxst thank you for this job, i started with them a short time ago, and dont have the full picture yet. But the post script of the project its amazing. ONLY THANKS. If u online now, please, i have a register btn working on dx9 project, i ll put on ur job right now. Its on cpp and use the gate-account and group & client projets xD i go have a badnews when compile right? i will need to convert on f#? u know?
 
Bro @alexxst thank you for this job, i started with them a short time ago, and dont have the full picture yet. But the post script of the project its amazing. ONLY THANKS. If u online now, please, i have a register btn working on dx9 project, i ll put on ur job right now. Its on cpp and use the gate-account and group & client projets xD i go have a badnews when compile right? i will need to convert on f#? u know?

  1. Install Visual Studio 2026.
  2. Build.
  3. Launch servers
  4. Launch client
  5. Success.

I think the participants of this form can help you with the registration button.
 
  • Like
Reactions: ximboliex
Can I use my old server files using the game.exe and gameserver.exe?
 
  1. Install Visual Studio 2026.
  2. Build.
  3. Launch servers
  4. Launch client
  5. Success.

I think the participants of this form can help you with the registration button.


I'm honestly stressed out about these files. I've tried compiling them in x86 and x64, and it just won't work. The game server crashes constantly. I've tried compiling them in every imaginable way, with AI and without AI, and it still doesn't work...
Even using Claude, I can't get it to work!

I'm furious.
 
I'm honestly stressed out about these files. I've tried compiling them in x86 and x64, and it just won't work. The game server crashes constantly. I've tried compiling them in every imaginable way, with AI and without AI, and it still doesn't work...
Even using Claude, I can't get it to work!

I'm furious.
 
I'm honestly stressed out about these files. I've tried compiling them in x86 and x64, and it just won't work. The game server crashes constantly. I've tried compiling them in every imaginable way, with AI and without AI, and it still doesn't work...
Even using Claude, I can't get it to work!

I'm furious.
what kind of errors are you getting?
 
Only the client is giving me problems compiling; everything else works perfectly (x86 and x64). Has anyone else experienced something similar?, i send trouble line in GitHub
 
Works great for me. I'll work on contributing as well.

Been awhile since I worked on these. Alex I feel like I had you back on MSN Live messenger like 15+ years ago,

I went by a different name then. I could be wrong. Anyways thanks for the share.
 
work fine now, I was compiling the draft version and hadn't noticed that I had already moved everything to the main branch.
Works great for me. I'll work on contributing as well.

Been awhile since I worked on these. Alex I feel like I had you back on MSN Live messenger like 15+ years ago,

I went by a different name then. I could be wrong. Anyways thanks for the share.
 
work fine now, I was compiling the draft version and hadn't noticed that I had already moved everything to the main branch.

Yea I couldn't work off his main branch, I had to work from an older commit.

Btw dreamisland is bugged, you'll need to make some changes.
Fixing DreamIsland: stuck players, kicks, and the auto-ban cascade

If you've added Dream Island to your server and found that players can teleport in but get stuck and kicked (sometimes spiraling into an auto-ban), the root cause is that DreamIsland ships configured as a copy/instance map (MapCopyNum(map,1) + map_copy_* handlers) but with its copy-entry plumbing stubbed out — config_entry/begin_enter are empty and get_map_entry_pos just returns 0,0. Every working copy-map (PKmap, darkswamp, puzzleworld) fully implements those entry functions, but DreamIsland doesn't, because it's actually meant to be a town reached through the Argent teleporter NPC via a plain MoveCity "Dream Island". So players enter without ever being registered as a copy instance, and then there's no clean way back out → stuck → kicked.

The fix is to stop treating it as an instance and convert it to a persistent map (like garner or magicsea): in resource/DreamIsland/ctrl.lua, comment out MapCopyNum(map,1) and SingleMapCopyPlyNum(map,300) in config(), then move the boss-invasion timer out of map_copy_run_DreamIsland (which only fires for copies) into map_run_DreamIsland (which fires for persistent maps), changing the CreateChaEx(..., map_copy) argument to map and leaving map_copy_run empty. Finally add map = DreamIsland to your GameServer cfg (and give that GameServer a unique BaseID if you're running multiple worlds). This works because persistent maps use plain MoveCity for both entry and exit — exactly what the Argent teleporter and the Dream Island teleporter NPC already do — so there's no copy-registration step left to mismatch. After the change: enter via the teleporter, walk Dream City, exit via the teleporter NPC, and death/respawn all behave correctly, while the timed boss invasions (06:10 / 14:10 / 22:10) are preserved.



Before:

Code:
Before (resource/DreamIsland/ctrl.lua):

function config(map)
    MapCanSavePos(map, 1)
    MapCanPK(map, 1)
    MapCopyNum(map, 1)              -- makes it a copy/instance map
    SingleMapCopyPlyNum(map, 300)   -- copy-only setting
    MapCanTeam(map, 1)
    MapType(map, 4)
    MapCanStall(map, 0)
end

function map_copy_run_DreamIsland(map_copy)
    -- Boss invasion timer lived here (only fires for copy maps)
    local Hour,Minute,Second = tonumber(os.date("%H")),tonumber(os.date("%M")),tonumber(os.date("%S"))
    local rand = math.random(1, randomNum)
    if Hour == 6 and Minute == 10 and Second == 0 then
        if thiefRound[1] == 0 then
            local CreateMob1 = CreateChaEx(1281, randomPos[rand].X, randomPos[rand].Y, 145, 60, map_copy)
            SetChaLifeTime(CreateMob1, 7200000)
            thiefRound[1] = 1
            GMNotice("<Dream Island Invasion>: Beware! "..GetChaDefaultName(CreateMob1).." at ["..math.floor(randomPos[rand].X/100)..","..math.floor(randomPos[rand].Y/100).."] Dream Island")
        end
    end
    -- ...14:10 and 22:10 blocks identical, also using map_copy...
end

function map_run_DreamIsland(map)
end


After:
Code:
function config(map)
    MapCanSavePos(map, 1)
    MapCanPK(map, 1)
    -- MapCopyNum(map, 1)            -- REMOVED: was making DreamIsland a copy/instance map with stubbed
                                     --          entry plumbing -> players entering via plain MoveCity
                                     --          couldn't cleanly exit -> stuck -> kicked. Now persistent (like garner).
    -- SingleMapCopyPlyNum(map, 300) -- REMOVED: copy-only setting.
    MapCanTeam(map, 1)
    MapType(map, 4)
    MapCanStall(map, 0)
end

function map_copy_run_DreamIsland(map_copy)
    -- Boss invasion logic moved to map_run_DreamIsland (DreamIsland is now persistent, not a copy map).
end

function map_run_DreamIsland(map)
    -- Boss invasion timer (moved here from map_copy_run; persistent maps use map_run).
    local Hour,Minute,Second = tonumber(os.date("%H")),tonumber(os.date("%M")),tonumber(os.date("%S"))
    local rand = math.random(1, randomNum)
    if Hour == 6 and Minute == 10 and Second == 0 then
        if thiefRound[1] == 0 then
            local CreateMob1 = CreateChaEx(1281, randomPos[rand].X, randomPos[rand].Y, 145, 60, map)
            SetChaLifeTime(CreateMob1, 7200000)
            thiefRound[1] = 1
            GMNotice("<Dream Island Invasion>: Beware! "..GetChaDefaultName(CreateMob1).." at ["..math.floor(randomPos[rand].X/100)..","..math.floor(randomPos[rand].Y/100).."] Dream Island")
        end
    end
    if Hour == 14 and Minute == 10 and Second == 0 then
        if thiefRound[2] == 0 then
            local CreateMob2 = CreateChaEx(1281, randomPos[rand].X, randomPos[rand].Y, 145, 60, map)
            SetChaLifeTime(CreateMob2, 7200000)
            thiefRound[2] = 1
            GMNotice("<Dream Island Invasion>: Beware! "..GetChaDefaultName(CreateMob2).." at ["..math.floor(randomPos[rand].X/100)..","..math.floor(randomPos[rand].Y/100).."] Dream Island")
        end
    end
    if Hour == 22 and Minute == 10 and Second == 0 then
        if thiefRound[3] == 0 then
            local CreateMob3 = CreateChaEx(1281, randomPos[rand].X, randomPos[rand].Y, 145, 60, map)
            SetChaLifeTime(CreateMob3, 7200000)
            thiefRound[3] = 1
            GMNotice("<Dream Island Invasion>: Beware! "..GetChaDefaultName(CreateMob3).." at ["..math.floor(randomPos[rand].X/100)..","..math.floor(randomPos[rand].Y/100).."] Dream Island")
        end
    end
    if Hour == 0 and Minute == 0 and Second == 0 then
        dream_init()
    end
end

And the cfg change (add to your GameServer's [Map] section):
Code:
[Map]
map = DreamIsland


Two things worth pointing out
- The boss CreateChaEx calls change their last argument from map_copy to map when you move them — easy to miss.
- If you run multiple GameServers, the one hosting DreamIsland still needs a unique [BaseID] or it'll get rejected by anti-link.