218 lines
23 KiB
Markdown
218 lines
23 KiB
Markdown
# 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 every `bin\` folder, which holds needed libraries). A new `.gitignore` is 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 in `src\io3DEngine\ioLocalManagerParent.cpp` (stored encoded, with the plain text in comments), repeated in the `PatchManager`, `PatchManagerOld`, `LSAutoUpgrade` and `ErrorDlg` copies of the local managers.
|
|
- `WEB_UDP_KEY_VALUE` in `src\ls_gamesvr\NodeInfo\UserNodeManager.h` and the check key `EDEW3940FVDP4950` in the launcher command-line notes.
|
|
- Packet and DB password encoding in `iocpSocketDLL` and `ls_dbagent` (`ls_dbagent.exe -x`).
|
|
- Copyright and author e-mail addresses in third-party code and `.rc` version 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]/path` became `http://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 `.invalid` names.
|
|
- Vendor documents `src\BillingRelayServer\OGPDocument\1. IOEntertainment.doc`, `4. installer package components.doc` (OGPlanet hosts) and `src\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. || `src\LSClient\GUI\CostumeCustomWnd.cpp` | The costume skin delete check compares the typed word with `CostumeSkinHapus` instead of the Korean literal | The window asks the player to type `CostumeSkinHapus` (text table), but the code compared a Korean word nobody can type on this client. |
|
|
| `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.cpp`
|
|
- `src\ls_billingsvr\Channeling\ioChannelingNodeHappyTuk.cpp`
|
|
- `src\ls_billingsvr\Channeling\ioChannelingNodeValofe.cpp`
|
|
- `src\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\`: creates `LosaGame`, `LosaGame_log`, `LosaLogData` and an empty `Backup` (game procedures create their own tables in it), the SQL logins `lstggame` / `lstglog` with a password you choose, the **2021 release schema** (owner decision 2026-11-07; the 2019 scripts lack 212 of 401 procedures) without its `CREATE DATABASE` block, `db_owner` users, the encode key, the 2019 procedures and first tournament from `DB\losadev\`, optional test accounts, `backup.sql` / `restore.sql` with `.bat` wrappers, and `setup-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`, ports `19xxx`, `PW=CHANGE_ME`). The previous content moved to `server-config\_original-release\`.
|