23 KiB
LosaDev changes to the 2019 source
This snapshot is a copy of the 2019 source (213 heroes, 213LSK). Every change against the original tree is listed here. All edits were made byte-safe (the sources are CP949): only the listed text was replaced, line endings were kept, and every other file is byte-identical to the original (checked by SHA-256 on 2026-11-07: 20 269 identical, 327 changed (including the new .gitignore and the host-name pass below), 0 added apart from the LosaDev files at the root).
1. What was left out of the copy
- Build output:
Debug\,Release\,x64\,Shipping*\,ipch\, and*.obj,*.pch,*.ipch,*.sdf,*.opensdf,*.suo,*.user,*.ncb,*.aps,*.tlog,*.pdb,*.ilk,*.idb,*.sbr,*.bsc,*.cod,*.lastbuildstate,*.unsuccessfulbuild. - IDE and VCS folders:
.vs\,.git\(the old repository history, 450 MB), and the previous owner's.gitignore(it ignored everybin\folder, which holds needed libraries). A new.gitignoreis at the root.
Third-party libraries (lib\, extra\lib\, extra\include\, etc\Library\, wxWidgets, Bullet, gperftools, ziparchive, the anti-cheat SDKs) are kept as they were. Exception: the vendor SDK binaries listed under "Vendor SDK binaries removed" below.
2. Build fixes
| File | Change | Why |
|---|---|---|
src\ls_relaysvr\Manager.cpp |
g_UDPNode()->InitMemory(3000,16384*2,6000,6000,1000); became InitMemory(3000,16384*2,6000/*,6000,1000*/); |
C2661: UDPNode (source in src\iocpSocketDLL and the prebuilt lib\iocpSocketDLL.lib) only has 3- and 7-argument overloads; no 5-argument version exists anywhere in the tree. The 2014 relay server has exactly this line, so the 3-argument call (packetCount = 6000) is the original developers' own fix. |
win\projects\LogDLL.vcxproj, win\projects\FrameTimerDLL.vcxproj |
Each post-build copy ... ..\..\build\zone_office\<server>\ line now starts with if exist "<that folder>\" |
The copy failed when the zone_office folders did not exist, which failed the build. The DLL itself was always fine. |
src\ioFreeType\StdAfx.h |
#pragma comment(lib, "../LSLog/bin/LSLog.lib") (and LSLogd.lib) now point at ../../lib/ |
LNK1104: LSLog builds into lib\; src\LSLog\bin\ does not exist in this release. |
3. Secrets and personal data replaced
Placeholders: 127.0.0.1 for addresses the code connects to, 192.0.2.1 (a reserved documentation address that never matches a real host) where the code compares the server's own IP against a fixed list, and CHANGE_ME for keys, passwords, tokens and account names. Private network addresses (10.x, 172.16-31.x, 192.168.x) were left as they are.
| File | Replaced |
|---|---|
extra/LS_Monitor/LS_Monitor/config.ini |
10 public IP(s) |
extra/LS_MonitorClient/Bin/config.ini |
4 public IP(s) |
extra/LS_MonitorClient/LS_MonitorClient/config.ini |
10 public IP(s) |
extra/LS_Service/bin/server.txt |
1 public IP(s) |
extra/testNXShop/testCode/cTestThread.cpp |
1 public IP(s) |
extra/testNXShop/testCode/testCode.cpp |
1 public IP(s) |
sql/20120504/lostsaga_sp.sql |
1 public IP(s) |
src/BillingRelayServer/billingrelayserverinfo.ini |
1 public IP(s) |
src/BillingRelayServer/Channeling/ioChannelingNodeDaum.cpp |
1 public IP(s) |
src/BillingRelayServer/Channeling/ioChannelingNodeWemadeBuy.cpp |
1 public IP(s), billing session value |
src/BillingRelayServer/ipg/sample/asp/ipg_cli_input.asp |
e-mail address |
src/BillingRelayServer/Local/ioLocalIndonesia.cpp |
2 public IP(s) |
src/BillingRelayServer/Local/ioLocalTaiwan.cpp |
player account id |
src/BillingRelayServer/Local/ioLocalThailand.cpp |
10 public IP(s) |
src/ErrorDlg/ErrorDlg/ErrorDlg.vcxproj |
developer user folder (post-build now copies $(TargetPath)) |
src/ErrorDlg/ErrorDlg/HackShield/ioHackShield.cpp |
1 public IP(s) |
src/ls_billingsvr/Channeling/ioChannelingNodeDaum.cpp |
1 public IP(s) |
src/ls_billingsvr/Channeling/ioChannelingNodeWemadeBuy.cpp |
1 public IP(s), billing session value |
src/ls_billingsvr/Channeling/ioChannelingNodeWemadeCashLink.cpp |
1 public IP(s), billing session value |
src/ls_billingsvr/Local/ioLocalBrazil.cpp |
publisher hash key |
src/ls_billingsvr/Local/ioLocalEU.cpp |
1 public IP(s) |
src/ls_billingsvr/Local/ioLocalIndonesia.cpp |
2 public IP(s) |
src/ls_billingsvr/Local/ioLocalLatin.cpp |
2 public IP(s) |
src/ls_billingsvr/Local/ioLocalSA.cpp |
6 public IP(s) |
src/ls_billingsvr/Local/ioLocalThailand.cpp |
10 public IP(s) |
src/ls_billingsvr/Local/ioLocalUS.cpp |
publisher app id, test account + password, publisher hash key |
src/ls_gamesvr/MainProcess.cpp |
2 public IP(s) (2 in address comparisons -> 192.0.2.1) |
src/ls_gamesvr/NodeInfo/LicenseManager.h |
1 public IP(s) |
src/ls_gamesvr/Xtrap/XTrap4Server.cpp |
3 public IP(s) (1 in address comparisons -> 192.0.2.1) |
src/ls_mainsvr/MainProcess.cpp |
2 public IP(s) (2 in address comparisons -> 192.0.2.1) |
src/LSAutoUpgrade/_참고/ls.asp |
SQL connection string (host, login, password) |
src/LSAutoUpgrade/AutoUpgradeDlg.cpp |
login token |
src/LSAutoUpgrade/ioLoginDlg.cpp |
1 public IP(s) |
src/LSAutoUpgrade/Xtrap/ioXtrap.cpp |
XTrap license id(s) |
src/LSClient/config/debug_connect.ini |
login token |
src/LSClient/Login.cpp |
login token |
src/LSClient/XignCode/ioXignCode.cpp |
XignCode license key |
src/LSClient/Xtrap/ioXtrap.cpp |
XTrap license id(s) |
src/LSClientMT/config/debug_connect.ini |
login token |
src/LSClientMT/Login.cpp |
login token |
src/LSClientMT/XignCode/ioXignCode.cpp |
XignCode license key |
src/LSClientMT/Xtrap/ioXtrap.cpp |
XTrap license id(s) |
src/LSMonitor/LSMonitorDlg.cpp |
LSMonitor login password |
src/LSWebBroker/_CMD.txt |
login token |
src/LSWebBroker/Local/ioLocalBrazil.cpp |
login token |
src/LSWebBroker/Local/ioLocalEU.cpp |
login token |
src/LSWebBroker/Local/ioLocalLatin.cpp |
login token |
src/LSWebBroker/Local/ioLocalUS.cpp |
login token |
src/MainServer/Window.cpp |
2 public IP(s) (2 in address comparisons -> 192.0.2.1) |
src/PatchManager/PatchManager.cpp |
1 public IP(s) |
src/SP2LostSagaGameServer/NodeInfo/LicenseManager.h |
1 public IP(s) |
src/SP2LostSagaGameServer/Window.cpp |
1 public IP(s) (1 in address comparisons -> 192.0.2.1) |
The anti-cheat license strings (XTrap, XignCode) are only used by the Shipping configurations with those SDKs; Debug and Release do not use them.
4. Left in place on purpose
These are part of the game itself and are needed to read its data or talk to the client:
- Pack (
.iop) passwords per country insrc\io3DEngine\ioLocalManagerParent.cpp(stored encoded, with the plain text in comments), repeated in thePatchManager,PatchManagerOld,LSAutoUpgradeandErrorDlgcopies of the local managers. WEB_UDP_KEY_VALUEinsrc\ls_gamesvr\NodeInfo\UserNodeManager.hand the check keyEDEW3940FVDP4950in the launcher command-line notes.- Packet and DB password encoding in
iocpSocketDLLandls_dbagent(ls_dbagent.exe -x). - Copyright and author e-mail addresses in third-party code and
.rcversion blocks.
5. Build test
Copied to a scratch folder and built on 2026-11-07 in Release|Win32 with the v100 toolset (VS2010, via VS2022 MSBuild), Version.h created next to every TSvnVersion.tmpl, the TortoiseSVN pre-build step disabled and static-runtime Boost:
| Solution | Result |
|---|---|
ioINILoader, Log, LogDLL, FrameTimerDLL, iocpSocketDLL, LSLog, SharedContainer, PerfMon, TownPortal, ioFreeType |
Build |
io3DEngine |
Builds |
ls_dbagent, ls_mainsvr, ls_billingsvr, ls_gamesvr, ls_relaysvr, ls_loginsvr, ls_filewritesvr |
Build |
LSClient |
Builds LostSaga.exe |
ioPac |
Builds (Release, 0 errors) after the BigPac fix in "ioPac BigPac fix" below. Before the fix BigPac.cpp used members that BigPac.h did not declare. |
Publisher and operator host names (added 2026-11-07)
Owner decision: no real publisher, operator or game-service host names in the repository. Every such host was replaced in text files (same byte-safe method as above, CP949 as Latin-1, UTF-16 .sql only when lossless, line endings kept):
- a URL
scheme://host[:port]/pathbecamehttp://127.0.0.1/path(the path is kept, the port dropped); - a bare host name became
example.invalid; - e-mail addresses at the developer's and publisher's own domains (
@ioenter.com,@nexon.co.kr) became@example.invalid(the part before@is kept). Files:src/BillingRelayServer/Local/ioLocalTaiwan.cpp(10),src/BillingRelayServer/Local/ioLocalUS.cpp(10),src/ls_billingsvr/Local/ioLocalEU.cpp(9),src/ls_billingsvr/Local/ioLocalUS.cpp(9),src/ls_gamesvr/Channeling/ioChannelingNodeNexonBuy.cpp(1).
2313 replacements in 279 files, 74 hosts. Hosts (number of replacements): nxsoap.nexon.com (1421), testsoap.nexon.com (703), www.lostsaga.com (13), lostsaga.com (12), billingws.gamon.net (12), forum.gemscool.com (7), lostsaga.ogplanet.com (7), nxpay.nexon.com (7), billlosatest.wemade.com (6), secure3.asiasoft.co.th (5), www.lostsaga.jp (5), www.gemscool.com (4), cdn.lostsaga.z8games.com (4), www.playone.asia (4), www.lostsaga.in.th (4), www.gamon.net (4), images.z8games.com (4), ls.garena.in.th (4), lostsaga.gamon.net (4), profile.playcybergames.com (4), www.z8games.com (3), lostsaga.z8games.com (3), games.playpark.com (3), www.gameclub.ph (3), platform.garena.tw (2), cabinet.ogplanet.com (2), patch.lostsaga.com.tw (2), lostsaga.gemscool.com (2), na-qa.launcher.z8games.com (2), en.lostsaga.nexoneu.com (2), passport.nexoneu.com (2), test.bill.daum.net (2), losa.nexon.com (2), www.daum.net (2), authen.playpark.net (2), cdn.lostsaga.com (2), www.nxcreative.co.kr (2), support.z8games.com (2), download.lostsaga.com (2), search.daum.net (2), qa-happycode.mangot5.com (2), ripay.nexon.com (1), ripay-test.nexon.com (1), api.z8games.com (1), doc.valofe.com (1), app.z8games.com (1), alpha.lostsaga-tw.valofe.com (1), beta.lostsaga-tw.valofe.com (1), lostsaga.nefficient.co.kr (1), lostsaga-tw.valofe.com (1), network.adsmarket.com (1), aspdll.xonda.net (1), www.lostsaga.ph (1), beta.www.lostsaga.com (1), start.tiara.daum.net (1), citystat.playone.asia (1), game.playpark.com (1), my.playpark.com (1), www.playpark.com (1), billing.ogplanet.com (1), apis-test.nexon.com (1), api.ogplanet.com (1), lostsaga.wemadeusa.com (1), alpha.api.bill.naver.com (1), www.softnyx.com (1), tr.lostsaga.nexoneu.com (1), ls.gameclub.ph (1), lostsaga.garena.tw (1), vfun.valofe.com (1), de.lostsaga.nexoneu.com (1), support.lostsaga.nexoneu.com (1), fr.lostsaga.nexoneu.com (1), pl.lostsaga.nexoneu.com (1), it.lostsaga.nexoneu.com (1).
| Folder | Files | Replacements | Hosts |
|---|---|---|---|
extra/LS_NXSoap/LS_NXSoap/ |
66 | 657 | nxsoap.nexon.com |
extra/LS_NXSoap/NEXON_live/ |
72 | 764 | nxsoap.nexon.com |
extra/LS_NXSoap/NEXON_testnx/ |
66 | 703 | testsoap.nexon.com |
extra/testHTTP/testCode/ |
1 | 1 | apis-test.nexon.com |
src/BillingRelayServer/ |
1 | 3 | alpha.api.bill.naver.com, api.ogplanet.com, billing.ogplanet.com |
src/BillingRelayServer/Channeling/ |
2 | 3 | billlosatest.wemade.com, test.bill.daum.net |
src/BillingRelayServer/Local/ |
1 | 16 | billingws.gamon.net, www.gamon.net |
src/ErrorDlg/ErrorDlg/ |
7 | 8 | forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.wemadeusa.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp |
src/ls_billingsvr/Channeling/ |
4 | 7 | billlosatest.wemade.com, qa-happycode.mangot5.com, test.bill.daum.net |
src/ls_billingsvr/Local/ |
2 | 3 | api.z8games.com, app.z8games.com, network.adsmarket.com |
src/ls_gamesvr/Channeling/ |
3 | 8 | doc.valofe.com, losa.nexon.com, nxpay.nexon.com, ripay.nexon.com, ripay-test.nexon.com |
src/LSAutoUpgrade/ |
4 | 25 | authen.playpark.net, cdn.lostsaga.com, cdn.lostsaga.z8games.com, citystat.playone.asia, game.playpark.com, my.playpark.com, profile.playcybergames.com, search.daum.net, secure3.asiasoft.co.th, start.tiara.daum.net, www.daum.net, www.nxcreative.co.kr, www.playpark.com |
src/LSAutoUpgrade/_참고/ |
2 | 4 | cabinet.ogplanet.com, patch.lostsaga.com.tw |
src/LSAutoUpgrade/Local/ |
12 | 50 | cdn.lostsaga.z8games.com, de.lostsaga.nexoneu.com, en.lostsaga.nexoneu.com, forum.gemscool.com, fr.lostsaga.nexoneu.com, images.z8games.com, it.lostsaga.nexoneu.com, lostsaga.garena.tw, lostsaga.gemscool.com, lostsaga.z8games.com, ls.gameclub.ph, ls.garena.in.th, passport.nexoneu.com, pl.lostsaga.nexoneu.com, platform.garena.tw, support.lostsaga.nexoneu.com, support.z8games.com, tr.lostsaga.nexoneu.com, vfun.valofe.com, www.gameclub.ph, www.gemscool.com, www.lostsaga.com, www.lostsaga.jp, www.playone.asia, www.softnyx.com, www.z8games.com |
src/LSClient/ |
3 | 13 | lostsaga.com, nxpay.nexon.com |
src/LSClient/Local/ |
7 | 8 | forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.ogplanet.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp |
src/LSClientMT/ |
2 | 2 | nxpay.nexon.com |
src/LSClientMT/Local/ |
7 | 8 | forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.ogplanet.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp |
src/LSMonitor/Sms/ |
2 | 2 | aspdll.xonda.net, lostsaga.com |
src/LSWebBroker/ |
3 | 7 | download.lostsaga.com, lostsaga.nefficient.co.kr, www.lostsaga.com |
src/LSWebBroker/Local/ |
12 | 21 | alpha.lostsaga-tw.valofe.com, beta.lostsaga-tw.valofe.com, beta.www.lostsaga.com, cdn.lostsaga.z8games.com, forum.gemscool.com, lostsaga.gamon.net, lostsaga.ogplanet.com, lostsaga-tw.valofe.com, na-qa.launcher.z8games.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp, www.lostsaga.ph |
Binary files, patched only with same-length replacements (nxsoap.nexon.com -> xexample.invalid, testsoap.nexon.com -> xxxexample.invalid, and so on, so sizes and offsets do not change):
extra\lib\:LS_NXSoap.lib,LS_NXSoapD.lib,LS_NXSoapTEST.lib,LS_NXSoapTESTD.lib. The SOAP namespace and endpoint strings inside the libraries now use the padded.invalidnames.- Vendor documents
src\BillingRelayServer\OGPDocument\1. IOEntertainment.doc,4. installer package components.doc(OGPlanet hosts) andsrc\LSMonitor\Sms\Xonda_net_SMSWS_v1.0.doc(SMS service host).
Left on purpose (not publisher or game-service hosts): standards and XML namespaces (www.w3.org, schemas.microsoft.com, schemas.xmlsoap.org), homepages and documentation links of third-party libraries and their authors (Bullet, ZipArchive, OPCODE, Lua, TinyXML, Ogg Vorbis, wxWidgets, gperftools, OpenSSL, libcurl and others), copyright lines that name a company without a host (Wellbia, INCA, Bandisoft), api.ipify.org (public IP lookup used by the launcher), www.google-analytics.com (the analytics collector; the tracking id comes from config), the Steam SDK headers (store.steampowered.com, www.steamgames.com), and the vendor addresses inside third-party binaries listed above in section "Left in place on purpose".
Local run fixes (added 2026-11-07)
Found while running this source on one local PC. Byte patches, line endings kept.
| File | Change | Why |
|---|---|---|
src\ls_gamesvr\Local\ioLocalParent.cpp, src\LSClient\Local\ioLocalParent.cpp |
IsRightLicense() no longer compares the date (if( iDate >= GetLicenseDate() ) return false; replaced by (void)iDate;) |
The Indonesia license dates (server 2013-12-31, client 2012-11-30) have passed: the game server exited with "This program has expired", the client showed "Your license has com up for renewal.". |
src\ls_billingsvr\LoginManager\LoginManager.cpp |
In CheckLogin(), the Indonesia TestMode success branch moved before the pInfo == NULL check |
Without the launcher nobody fills the login list, so every TestMode login failed. |
src\ls_gamesvr\NodeInfo\UserNodeManager.cpp |
The two __OHTG_LOGIN_IP_CHECK__ comparisons in OnResultSelectUserLoginInfo() are skipped when szTestIP is empty |
The Indonesia locale never decrypts an IP key, so the check always failed (USER IP NOT2). |
src\ls_mainsvr\MainProcess.cpp |
The MessageBox "Local IP Error." became a log line |
A server started without a window would wait on the dialog for ever. |
Client text (added 2026-11-07)
SafeSprintf and the printers built on it have two paths. Korea uses printf (%s %d), every other locale uses FormatMessage (%1 %2). This repository is set up for the Indonesia client:
| Files | Change | Why |
|---|---|---|
193 .cpp files in src\LSClient |
841 literal formats of AddTextPiece, PrintText, PrintTextWidthCut, SetMsgBox, SafeSprintf and related calls changed from %s %d %u %I64d to %1 %2 |
They printed as raw text outside Korea. |
| The same files | 2 556 Korean literals inside functions became STR(n) |
Text belongs in the text tables. The rows are added to resource/text/text_id.txt in the client download, in Korean until translated. Left as they are: string comparisons, _e macros and literals outside functions. |
src\io3DEngine\Safesprintf.cpp |
New FormatPrintfStyle() |
%02d and %.2f cannot be written as %1; they are formatted from the argument strings. |
src\io3DEngine\ioXMLElement.cpp |
Child elements inherit the text table setting | STR(n) in nested XML, such as TextBlock, printed as raw text. |
src\LSClient\GUI\EtcItemSlotWnd.cpp, GrowthDownSelectWnd.cpp |
Array initializers changed for STR(n) |
STR returns a pointer. |
Side effect: in the Korea locale these literals now print %1. To run Korea, use the original format strings or add a table for that locale.
Bug fixes (added 2026-11-07)
| File | Change | Why |
|---|---|---|
src\LSClient\Setting.cpp |
LOW_SPEC and MINIMUM_SPEC presets set m_bUse16bitFrameBuffer = false |
These presets asked for a 16-bit full screen device, which current Windows refuses; the client exited without a window. |
db\losadev\losadev-2019-procs.sql |
Procedures the 2019 server calls (ls_query.ini ids 1, 136, 137, 139) that no released DB script contains |
Login and the DB agent keep-alive failed. |
db\losadev\losadev-first-tournament.sql |
First userLeagueListDB row |
Faction War / LS Cup showed no dates. |
server-config\ls_gamesvr\config\ (10 files) |
The client's sp2_deco_*, sp2_extraitem_info, sp2_gashapon_present, sp2_item_price, sp2_item_recharge, sp2_leader_item, sp2_medalitem_info, sp2_new_alchemic_info, sp2_setitem_info copied over the server's (same keys) |
Shop and gacha lists did not match the client. Copy them over the release's server config. |
Client download: xml/myinventoryinfownd.xml in rs.iop |
Window IDs changed to the ones in MyInventoryInfoWnd.h |
My Item buttons were on top of each other. |
server-config\ls_gamesvr\config\sp2_mode_select.ini |
Shuffle Bonus subs 30-32 and Factory subs 2-3 set to active = 0, map_cnt = 0 |
The client has no maps for them (black screen). |
Vendor SDK binaries removed (added 2026-11-07)
No vendor SDK binaries are shared in any LosaDev tier. The source code that uses them stays.
Deleted XTrap libraries/DLLs (13): src\LSAutoUpgrade\Xtrap\XTrap4Launcher_mt.lib, src\LSClient\Xtrap\XTrap4ClientExt1_mtdll.lib, src\LSClient\Xtrap\XTrap4Client_ClientPart_mtDll.lib, src\LSClient\Xtrap\XTrap4Client_ServerPart_mtDll.lib, src\LSClient\Xtrap\XTrap4Client_mtDll.lib, src\LSClient\Xtrap\XTrap_Unipher_mtDll.lib, src\LSClientMT\Xtrap\XTrap4ClientExt1_mtdll.lib, src\LSClientMT\Xtrap\XTrap4Client_ClientPart_mtDll.lib, src\LSClientMT\Xtrap\XTrap4Client_ServerPart_mtDll.lib, src\LSClientMT\Xtrap\XTrap4Client_mtDll.lib, src\LSClientMT\Xtrap\XTrap_Unipher_mtDll.lib, src\SP2LostSagaGameServer\Xtrap\XTrap4Server.dll, src\ls_gamesvr\Xtrap\XTrap4Server.dll.
Deleted bxIPGClient.dll copies (7): lib\bxIPGClient.dll, src\BillingRelayServer\JapanDLL\bxIPGClient.dll, src\BillingRelayServer\bxIPGClient.dll, src\BillingRelayServer\ipg\bin\bxIPGClient.dll, src\ls_billingsvr\Adbill\bxIPGClient.dll, src\ls_billingsvr\JapanDLL\bxIPGClient.dll, src\ls_billingsvr\ipg\bin\bxIPGClient.dll.
#import "...bxIPGClient.dll" no_namespace needs the DLL at compile time, so it was replaced by #include "...bxIPGClient_stub.h" in:
src\BillingRelayServer\Local\ioLocalJapan.cppsrc\ls_billingsvr\Channeling\ioChannelingNodeHappyTuk.cppsrc\ls_billingsvr\Channeling\ioChannelingNodeValofe.cppsrc\ls_billingsvr\Local\ioLocalJapan.cpp
New stand-in headers: src\BillingRelayServer\JapanDLL\bxIPGClient_stub.h, src\ls_billingsvr\Adbill\bxIPGClient_stub.h, src\ls_billingsvr\JapanDLL\bxIPGClient_stub.h. They declare only what the code calls (IIPGClient with GetCash, Output, OutputCancel, OutputIPG, and the IIPGClientPtr smart pointer). The COM class is never registered, so CreateInstance fails, the pointer stays empty and the existing catch( _com_error ) paths run: the Japan IPG and Adbill billing calls report an error, nothing else changes.
Verified 2026-11-07: ls_billingsvr Release|Win32 builds with 0 errors with no bxIPGClient.dll present. BillingRelayServer gets the same header but was not build-tested.
The XTrap code is only compiled in Shipping configurations with XTRAP defined. Those configurations no longer link without the vendor SDK; build Debug or Release.
Script: vendor-strip.js (latin1 byte-safe, CRLF kept).
ioPac BigPac fix (added 2026-11-07)
src\ioPac\BigPac.cpp is newer than BigPac.h (the header is the 2014 one, byte-identical), so ioPac did not build and the release only worked with the prebuilt lib\iopac.dll.
| File | Change |
|---|---|
src\ioPac\BigPac.h |
Added vFileInfo m_vecFileInfo; next to m_setFileInfo, and declarations for the functions the .cpp defines: OpenBigPacAll, GetFileIndexVec, AddFile, DeleteFiles (public), BuildFileInfo, ClearFileInfo (private). Each addition is marked LosaDev. |
src\ioPac\BigPac.cpp |
CBigPac::OpenBigPacAll (IOP Manager only) wrapped in #ifdef STATIC_PAC_API, because it calls BuildFileInfo(), which is only defined in that block. Without it the DLL build fails to link. |
Verified 2026-11-07: Release|Win32 builds with 0 errors. The new iopac.dll (279 040 bytes) exports 71 functions, a superset of the 66 in the prebuilt DLL (none missing). The LosaDev client package ships this rebuilt DLL.
Scripts: bigpac-header.js, bigpac-cpp.js (latin1 byte-safe, CRLF kept).
Database setup and one-PC server config (added 2026-11-07)
- New
database\: createsLosaGame,LosaGame_log,LosaLogDataand an emptyBackup(game procedures create their own tables in it), the SQL loginslstggame/lstglogwith a password you choose, the 2021 release schema (owner decision 2026-11-07; the 2019 scripts lack 212 of 401 procedures) without itsCREATE DATABASEblock,db_ownerusers, the encode key, the 2019 procedures and first tournament fromDB\losadev\, optional test accounts,backup.sql/restore.sqlwith.batwrappers, andsetup-db.bat. Tested on SQL Server 2022 Express: 0 errors, backup + restore OK. server-config\is now the tested one-PC set (nine server folders,127.0.0.1, ports19xxx,PW=CHANGE_ME). The previous content moved toserver-config\_original-release\.