diff --git a/.gitignore b/.gitignore index e31c7977..9e56d797 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,3 @@ ghidra # Licence-restricted vendor material, local reference only (see third-party/README.md) third-party/_local/ -# Meson build output -src/build/ diff --git a/AGENTS.md b/AGENTS.md index 7583082a..4d46c224 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -45,7 +45,6 @@ code. | `schema/` | SQL Server database schema/log files (`.mdf` / `.ldf`) for `RustyHearts`, `RustyHearts_Account`, `RustyHearts_Auth`, `RustyHearts_Log`, `GMRustyHearts` | **Read-only.** Never modify. Gitignored. | | `decomp/` | Raw decompilation objects exported from Ghidra/REA (pseudocode, listings, function metadata) | Derived output. Regenerable; created on demand. | | `.agents/skills/` | Installed agent skills, notably `reverse-engineer-anything` (REA) | Agent configuration. | -| `src/` | Linux C++ reconstructions of analysed binaries (Meson; one sub-folder per binary, e.g. `agent_release/`). Build: `cd src && meson setup build && ninja -C build` | Hand-written; cite decomp addresses; `src/build/` is gitignored. | | `docs/` | Project documentation, e.g. `ARCHITECTURE.md` (language/toolchain, libraries, code conventions) | Hand-maintained; update as findings are confirmed. | | `third-party/` | Upstream sources/headers matched to the shipped support DLLs (OpenSSL 1.0.0d, curl 7.21.4, BugTrap ~1.3, mingw-w64 `dbghelp.h`, TinyXML 2.5.x) | Reference only, not build inputs. Do not edit upstream files; record provenance changes in the doc below. | diff --git a/decomp/Agent_Release_x64/evidence.md b/decomp/Agent_Release_x64/evidence.md index 58cbfaf3..f01e5f5d 100644 --- a/decomp/Agent_Release_x64/evidence.md +++ b/decomp/Agent_Release_x64/evidence.md @@ -16,6 +16,8 @@ per class (e.g. `MagiAgentNetwork`, `MGAgentManagerSession`) indicate multiple inheritance. Statically linked C++ libraries: ProudNet, TinyXML (`TiXml*`), ATL. ## Outputs + +Porting spec (Win32 → Linux substitutions, behaviour to reproduce, original bugs): `porting.md`. | Path | Content | |---|---| | `full/functions/.c` | Ghidra pseudocode for all 6,423 non-thunk functions (1 failed; see `full/index.tsv`). Includes library code (ProudNet, TinyXML, CRT) — not yet labelled. | diff --git a/decomp/Agent_Release_x64/porting.md b/decomp/Agent_Release_x64/porting.md new file mode 100644 index 00000000..f3f96b03 --- /dev/null +++ b/decomp/Agent_Release_x64/porting.md @@ -0,0 +1,55 @@ +# Agent_Release_x64.exe — porting spec (Win32 → Linux) + +This was kept from the removed Linux reconstruction `src/agent_release/` +(removed 2026-10-15). It records the facts about the original binary that a +re-implementation needs, and the nearest Linux equivalent for each Win32 call. + +Sources: `evidence.md`, `cpp/AgentProcessControl.cpp`. Names are inferred; +the behaviour is static-analysis evidence only. + +## Behaviour to reproduce + +The servers being managed are read from config (`option\*.xml`, mapping not +yet recovered). + +| Item | Behaviour | +|---|---| +| Single instance (`0x1400100b0`) | Named mutex `Global\RustyHearts_Agent` | +| Launch (`0x1400094e0`) | `CreateProcessW(NULL, " ", …, CREATE_NEW_CONSOLE, …, workDir)`, console 700×110, fill attribute 0x17. Command line is limited to 260 characters (`MAX_PATH`). Returns the pid, or 0 on failure (logs `=======Server Fail=======`) | +| After each launch attempt | `Sleep(1000)` | +| Command line (`0x140008ea0`) | ` `. An alternative argument builder `FUN_140027540` exists, but its output is unknown | +| Watcher (`0x140008c90`) | Polls `GetExitCodeProcess` every 10 ms. On exit it sends two RMIs to AgentManager, then relaunches if the per-server revive flag (+0xd5) or the global flag (+0x171) is set | +| Kill (`0x140009780`) | Toolhelp32 snapshot, case-insensitive image-name match, terminates the **first** match only (`TerminateProcess(h,0)`) | +| Main loop (`0x1400037a0`) | 100 ms tick, 1 s FPS counter. Optionally auto-starts servers after a configured delay (+0x178). At startup it kills a stale process of type 0x18 (identity unknown) | + +## Win32 → Linux substitutions + +| Original (address) | Win32 | Linux replacement | Behaviour difference | +|---|---|---|---| +| Single instance (`0x1400100b0`) | `CreateMutexW("Global\\RustyHearts_Agent")` | `flock(LOCK_EX\|LOCK_NB)` on `/tmp/RustyHearts_Agent.lock` | Lock file instead of a kernel object; still released on exit or crash | +| Launch (`0x1400094e0`) | `CreateProcessW(…, CREATE_NEW_CONSOLE, …, workDir)` + `STARTUPINFOW` console geometry | `posix_spawnp` + `POSIX_SPAWN_SETSID` + `posix_spawn_file_actions_addchdir_np` (glibc ≥ 2.29) | No console window; the command line is split on whitespace (no Windows quoting rules) | +| Watcher (`0x140008c90`) | `GetExitCodeProcess` polled every 10 ms | blocking `waitpid` on a detached thread | No polling. Reaping fixes the original handle leak; passing the pid by value fixes the original stack-pointer race | +| Kill (`0x140009780`) | Toolhelp32 + `OpenProcess` + `TerminateProcess(h,0)` | scan `/proc/*/cmdline` for the argv[0] basename with `strcasecmp`, then `kill(SIGKILL)` | Same rule: first match only, case-insensitive | +| Main-loop timer | `QueryPerformanceCounter` (`TimeSourceHRWin32`) | `std::chrono::steady_clock` | — | +| Thread start | `_beginthreadex` | `std::thread` | — | +| `Sleep` | `Sleep` | `std::this_thread::sleep_for` | — | +| Shutdown | console menu (`FUN_140001dc0`, not analysed) | `SIGINT` / `SIGTERM` | Different trigger | + +## Original bugs (O) + +- **Process handle leak:** the watcher never closes the process handle. +- **Stack-pointer race:** `LaunchProcess` hands the watcher a pointer to a + stack `PROCESS_INFORMATION`. It is only safe because of the + `Sleep(1000)` that follows. +- **Snapshot handle leak:** `KillProcessByName` leaks the snapshot handle on + the success path. + +## Unknown / not recovered + +- **ProudNet RMI to AgentManager and the game servers:** proprietary + transport. Wire-incompatible with ProudNet 1.8 (see the ProudNet section of + `third-party/README.md`). The proxy vtable slots used are `+0x40` and `+0x50`. +- **XML config field mapping** for the Agent. +- **`FUN_140027540` argument builder; the `type == 1` exit follow-up + (`FUN_140009f20`); the type 0x18 process killed at startup.** +- **Locking around the server table:** not visible in the analysed code. diff --git a/decomp/DBCServer_Release_x64/evidence.md b/decomp/DBCServer_Release_x64/evidence.md index 97cd723c..9257f9b7 100644 --- a/decomp/DBCServer_Release_x64/evidence.md +++ b/decomp/DBCServer_Release_x64/evidence.md @@ -13,6 +13,8 @@ Shared conclusions are in `docs/DATABASE.md` and `docs/CONFIG.md`. This ledger holds the binary-specific evidence. ## Outputs + +Porting spec (Win32 → Linux substitutions, behaviour to reproduce, original bugs): `porting.md`. | Path | Content | |---|---| | `full/functions/*.c`, `full/index.tsv` | 20,334 functions. 2 failed: `0x14000e4d0` (SERVERS2DBC stub dispatcher, timeout) and `0x1400a8190` (worker command dispatcher, flow limit) | diff --git a/decomp/DBCServer_Release_x64/porting.md b/decomp/DBCServer_Release_x64/porting.md new file mode 100644 index 00000000..0f6eb562 --- /dev/null +++ b/decomp/DBCServer_Release_x64/porting.md @@ -0,0 +1,91 @@ +# DBCServer_Release_x64.exe — porting spec (Win32 → Linux) + +This was kept from the removed Linux reconstruction `src/dbc_server/` +(removed 2026-10-15). It records the facts about the original binary that a +re-implementation needs, and the nearest Linux equivalent for each Win32 call. + +Sources: `evidence.md`, `docs/DATABASE.md`, `docs/CONFIG.md`. Static analysis +only. + +## Structure to reproduce + +``` +peer ──SERVERS2DBC RMI {rmi_id, …}──▶ stub handler (e.g. 0x140050d20: ++per-RMI counter) + │ push {size, cmd 1001–1317, args} + ▼ + write queue [idx < 1000] (0x140144730; else "Invalid Queue Index") + │ critical section + semaphore, 1 worker per queue + ▼ + worker switch (cmd - 1001) (0x1400a8190, jump table 0x1400a9dd4) + ▼ + CDBLobbyWriteQuery::DBReq* (e.g. 0x1400acbb0) — ADODB.Command "dbo.up_xxx" + ▼ + reply via DBC2SERVERS proxy (76 RMIs, 0x2af9–0x2b46) +``` + +- **Data tables:** + - The RMI → command → procedure mapping is in `rmi_to_proc.tsv`, and the + command dispatch in `cmd_dispatch.tsv`. + - Procedure parameters (names, SQL types, OUTPUT flags) are in + `decomp/schema//routines.tsv`. + - `decomp/scripts/gen_dbc_tables.py` joins them into `procs_used.tsv`. +- **Queue array:** a 0x1f48-byte block holding 1000 pointers. How queue slots + are created has not been decoded. +- **Connections (`0x1400a7aa0`):** + - Type 1 WEB = `db_web`, 2 AUTH = `db_account`, 3 GAME = `db_game`, + 4 GAME LOG = `db_game_log`. + - A timeout of 0 becomes 500. + - A string longer than 255 characters gives `Error … String Max.!`. + - **AUTH uses the WEB timeout** (+0x134); this is an original bug. +- **Startup (`0x140042cf0`):** opens AUTH and GAME connections, then + `up_read_world_server` reads the world list. +- **Connect failure (`0x1400a80c0`):** + `DB Connect failed\n Connection String = %s` is appended to + `Error_ADO DB Connect.Log`. The original writes the password verbatim. +- **Procedure error:** `ADO_ON_ERROR : [ %s ] Proc [ %s ]` with source file + and line (catch funclets, `dbreq_methods.tsv`). +- **Single instance:** mutex `Global\RustyHearts_DBC`. +- **Startup modes:** a numeric `argv[1]` selects agent mode (`total_option.xml` + ``); otherwise `argv[1]` is the path of the per-server XML + (`docs/CONFIG.md`). + +## Win32 → Linux substitutions + +| Original (address) | Win32 / library | Nearest Linux equivalent | Notes | +|---|---|---|---| +| Single instance | `CreateMutexW("Global\\RustyHearts_DBC")` | `flock(LOCK_EX\|LOCK_NB)` on `$TMPDIR/RustyHearts_DBC.lock` | Lock file instead of a kernel object | +| DB access (`0x1400a7aa0`, `0x1400a80c0`, `DBReq*`) | ADO `_Connection` / `ADODB.Command` over `SQLOLEDB`, `CoInitialize`, `_com_issue_errorex` | ODBC: unixODBC + Microsoft ODBC Driver 18, or FreeTDS `libtdsodbc` | Call as `{? = call dbo.proc(?,…)}` with positional parameters (ADO uses named ones); GUIDs in SQL Server byte order. ODBC 18 needs `TrustServerCertificate=yes`, because SQLOLEDB never validated TLS. FreeTDS needs `Port=` (not `host,port`) and `TDS_Version=7.4` | +| ADO connection string | `Provider=SQLOLEDB;Data Source;Initial Catalog;User ID;Password` | `Driver={…};Server;Database;UID;PWD` | Keys map 1:1. Treating the XML `timeout` as milliseconds (rounded to seconds) is an inference | +| Transport | ProudNet `CNetServer` over Winsock2/MSWSOCK/IOCP | BSD sockets / epoll | ProudNet internal net version is **196978**; 1.8 is 197144, so the protocols are incompatible. Interop would need a reimplementation of the 2013 protocol (`third-party/README.md`) | +| Write queue (`0x140144730`) | `CRITICAL_SECTION` + semaphore (`ReleaseSemaphore`) | `std::mutex` + `std::condition_variable` | — | +| Threads | `_beginthreadex` | `std::thread` | — | +| XML (`MagiServerOption`, `MagiCustomOption`) | TinyXML 2.5.x | pugixml with `parse_fragment` (the files have several top-level elements) | — | +| Console / stop | `wprintf`, console menu | stdout, `SIGINT`/`SIGTERM`; ignore `SIGPIPE` | — | +| `timeGetTime` | WINMM | `std::chrono::steady_clock` | — | +| Crash reporting | BugTrap, `MiniDumpWriteDump` | core dumps | — | + +## Prior validation of the DB mapping (2026-10-14) + +Run with the removed port against copies of the shipped `.mdf` files, on +SQL Server 2022 through FreeTDS 1.5.19: +- `up_read_world_server` returned 1 row. +- `REQ_READ_ALL_GUILD(10101)` returned the guild row. +- `REQ_UPDATE_CHARACTER_HEARTS(guid, n)` updated + `CharacterTable.Hearts` (then reverted). +- `REQ_INVEN_SLOT` failed with "Could not find stored procedure", confirming + that procedure is missing from the shipped schema. + +This validates the mapping and the parameter types against the schema. It +says nothing about the original binary's runtime behaviour. + +## Unknown / not recovered + +- **RMI argument marshalling** (ProudNet) and the per-`DBReq` post-processing + of recordsets (e.g. `FIRST_CHARACTER` in `0x1400acbb0`). +- **52 RMIs without a procedure mapping**, mostly log, logout and auth. +- **Some mappings may be wrong:** those found two call levels deep, e.g. + `REQ_CHARACTER_READ_ALL_DATA` → `up_read_Inquiry_character`. +- **Which connection each queue/`DBReq` uses:** inferred from the database + that holds the procedure. +- **Queue-slot creation; agent-mode address/port** (pushed by the Agent over + RMI); the `guildlobby`, `channel` and `Option` elements. diff --git a/decomp/DBCServer_Release_x64/procs_used.tsv b/decomp/DBCServer_Release_x64/procs_used.tsv new file mode 100644 index 00000000..443732a5 --- /dev/null +++ b/decomp/DBCServer_Release_x64/procs_used.tsv @@ -0,0 +1,1215 @@ +proc db rmis param_no param sql_type max_length is_output +up_add_ban RustyHearts REQ_ADD_BAN 1 @character_id uniqueidentifier 16 0 +up_add_ban RustyHearts REQ_ADD_BAN 2 @ban_name nvarchar 32 0 +up_add_ban RustyHearts REQ_ADD_BAN 3 @ban_memo nvarchar 64 0 +up_add_character_title RustyHearts REQ_ADD_CHARACTER_TITLE 1 @character_id uniqueidentifier 16 0 +up_add_character_title RustyHearts REQ_ADD_CHARACTER_TITLE 2 @new_id uniqueidentifier 16 0 +up_add_character_title RustyHearts REQ_ADD_CHARACTER_TITLE 3 @title_code int 4 0 +up_add_character_title RustyHearts REQ_ADD_CHARACTER_TITLE 4 @remain_time int 4 0 +up_add_character_title RustyHearts REQ_ADD_CHARACTER_TITLE 5 @expire_time int 4 0 +up_add_friend RustyHearts REQ_ADD_FRIEND 1 @character_id uniqueidentifier 16 0 +up_add_friend RustyHearts REQ_ADD_FRIEND 2 @friend_name nvarchar 32 0 +up_add_inquiry_count RustyHearts_Auth REQ_ADD_INQUIRY_COUNT 1 @auth_id uniqueidentifier 16 0 +up_add_inquiry_count RustyHearts_Auth REQ_ADD_INQUIRY_COUNT 2 @auth_id uniqueidentifier 16 0 +up_all_delete_quest RustyHearts REQ_ALL_DELETE_QUEST 1 @character_id uniqueidentifier 16 0 +up_auth_agentaccount RustyHearts_Auth REQ_GM_AUTH 1 @Account nvarchar 32 0 +up_auth_agentaccount RustyHearts_Auth REQ_GM_AUTH 2 @Password nvarchar 64 0 +up_character_rob RustyHearts REQ_CHARACTER_ROB 1 @bcust_id nvarchar 100 0 +up_character_rob RustyHearts REQ_CHARACTER_ROB 2 @auth_id uniqueidentifier 16 0 +up_character_rob RustyHearts REQ_CHARACTER_ROB 3 @name nvarchar 32 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 1 @auth_id uniqueidentifier 16 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 2 @page_index int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 3 @slot_index int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 4 @item_id uniqueidentifier 16 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 5 @code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 6 @use_cnt int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 7 @remain_time int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 8 @gcode int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 9 @durability int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 10 @enhance_level int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 11 @option_1_code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 12 @option_1_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 13 @option_2_code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 14 @option_2_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 15 @option_3_code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 16 @option_3_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 17 @OptionGroup int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 18 @ReconNum int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 19 @ReconState int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 20 @Socket_count int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 21 @Socket_1_code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 22 @Socket_1_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 23 @Socket_2_code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 24 @Socket_2_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 25 @Socket_3_code int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 26 @Socket_3_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 27 @expire_time int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 28 @activity_value int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 29 @socket_1_color tinyint 1 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 30 @socket_2_color tinyint 1 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 31 @socket_3_color tinyint 1 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 32 @rank tinyint 1 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 33 @acquireroute tinyint 1 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 34 @physical int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 35 @magical int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 36 @durabilitymax int 4 0 +up_create_account_storage_item RustyHearts REQ_CREATE_ACCOUNT_STORAGE_ITEM 37 @weight int 4 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 1 @bcust_id nvarchar 100 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 2 @auth_id uniqueidentifier 16 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 3 @char_id uniqueidentifier 16 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 4 @name nvarchar 32 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 5 @class int 4 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 6 @server smallint 2 0 +up_create_character RustyHearts REQ_CHARACTER_CREATE 7 @lobby_id int 4 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 1 @guild_name nvarchar 40 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 2 @character_id uniqueidentifier 16 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 3 @guild_id uniqueidentifier 16 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 4 @master_name nvarchar 32 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 5 @cost_money int 4 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 6 @server smallint 2 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 7 @max_member int 4 0 +up_create_guild RustyHearts REQ_CREATE_GUILD 8 @group_id smallint 2 0 +up_create_guild_storage RustyHearts REQ_CREATE_GUILD_STORAGE 1 @guild_id uniqueidentifier 16 0 +up_create_guild_storage RustyHearts REQ_CREATE_GUILD_STORAGE 2 @character_id uniqueidentifier 16 0 +up_create_guild_storage RustyHearts REQ_CREATE_GUILD_STORAGE 3 @slot_count int 4 0 +up_create_guild_storage RustyHearts REQ_CREATE_GUILD_STORAGE 4 @cost_money int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 1 @character_id uniqueidentifier 16 0 +up_create_item RustyHearts REQ_INSERT_ITEM 2 @auth_id uniqueidentifier 16 0 +up_create_item RustyHearts REQ_INSERT_ITEM 3 @page_index int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 4 @slot_index int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 5 @item_id uniqueidentifier 16 0 +up_create_item RustyHearts REQ_INSERT_ITEM 6 @code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 7 @use_cnt int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 8 @remain_time int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 9 @gcode int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 10 @durability int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 11 @enhance_level int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 12 @option_1_code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 13 @option_1_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 14 @option_2_code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 15 @option_2_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 16 @option_3_code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 17 @option_3_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 18 @OptionGroup int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 19 @ReconNum int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 20 @ReconState int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 21 @Socket_count int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 22 @Socket_1_code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 23 @Socket_1_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 24 @Socket_2_code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 25 @Socket_2_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 26 @Socket_3_code int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 27 @Socket_3_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 28 @expire_time int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 29 @activity_value int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 30 @link_id uniqueidentifier 16 0 +up_create_item RustyHearts REQ_INSERT_ITEM 31 @socket_1_color tinyint 1 0 +up_create_item RustyHearts REQ_INSERT_ITEM 32 @socket_2_color tinyint 1 0 +up_create_item RustyHearts REQ_INSERT_ITEM 33 @socket_3_color tinyint 1 0 +up_create_item RustyHearts REQ_INSERT_ITEM 34 @deferment_time int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 35 @rank tinyint 1 0 +up_create_item RustyHearts REQ_INSERT_ITEM 36 @acquireroute tinyint 1 0 +up_create_item RustyHearts REQ_INSERT_ITEM 37 @physical int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 38 @magical int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 39 @durabilitymax int 4 0 +up_create_item RustyHearts REQ_INSERT_ITEM 40 @weight int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 1 @pet_id uniqueidentifier 16 0 +up_create_pet RustyHearts REQ_PET_CREATE 2 @character_id uniqueidentifier 16 0 +up_create_pet RustyHearts REQ_PET_CREATE 3 @AuthID uniqueidentifier 16 0 +up_create_pet RustyHearts REQ_PET_CREATE 4 @server smallint 2 0 +up_create_pet RustyHearts REQ_PET_CREATE 5 @Name nvarchar 32 0 +up_create_pet RustyHearts REQ_PET_CREATE 6 @Job int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 7 @inventory_count tinyint 1 0 +up_create_pet RustyHearts REQ_PET_CREATE 8 @Expire_Time int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 9 @Vital int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 10 @Intelligence int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 11 @Strength int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 12 @Resilient int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 13 @Eloquence int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 14 @Charm int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 15 @Temper int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 16 @fHeight float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 17 @fWeight float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 18 @hp int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 19 @mp int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 20 @physical_attack float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 21 @physical_defence float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 22 @magical_attack float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 23 @magical_defence float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 24 @loyalty float 8 0 +up_create_pet RustyHearts REQ_PET_CREATE 25 @Level int 4 0 +up_create_pet RustyHearts REQ_PET_CREATE 26 @exp int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 1 @pet_id uniqueidentifier 16 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 2 @auth_id uniqueidentifier 16 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 3 @page_index int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 4 @slot_index int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 5 @item_id uniqueidentifier 16 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 6 @code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 7 @use_cnt int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 8 @remain_time int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 9 @gcode int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 10 @durability int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 11 @enhance_level int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 12 @option_1_code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 13 @option_1_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 14 @option_2_code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 15 @option_2_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 16 @option_3_code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 17 @option_3_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 18 @OptionGroup int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 19 @ReconNum int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 20 @ReconState int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 21 @Socket_count int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 22 @Socket_1_code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 23 @Socket_1_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 24 @Socket_2_code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 25 @Socket_2_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 26 @Socket_3_code int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 27 @Socket_3_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 28 @expire_time int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 29 @activity_value int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 30 @socket_1_color tinyint 1 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 31 @socket_2_color tinyint 1 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 32 @socket_3_color tinyint 1 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 33 @rank tinyint 1 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 34 @acquireroute tinyint 1 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 35 @physical int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 36 @magical int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 37 @durabilitymax int 4 0 +up_create_pet_inventory_item RustyHearts REQ_ADD_PET_INVENTORY_ITEM 38 @weight int 4 0 +up_del_ban RustyHearts REQ_DEL_BAN 1 @character_id uniqueidentifier 16 0 +up_del_ban RustyHearts REQ_DEL_BAN 2 @ban_id uniqueidentifier 16 0 +up_del_friend RustyHearts REQ_DEL_FRIEND 1 @character_id uniqueidentifier 16 0 +up_del_friend RustyHearts REQ_DEL_FRIEND 2 @friend_id uniqueidentifier 16 0 +up_delet_guild_storage RustyHearts REQ_GUILD_STORAGE_POP_ITEM 1 @guild_id uniqueidentifier 16 0 +up_delet_guild_storage RustyHearts REQ_GUILD_STORAGE_POP_ITEM 2 @item_id uniqueidentifier 16 0 +up_delete_account_storage_item RustyHearts REQ_DELETE_ACCOUNT_STORAGE_ITEM 1 @auth_id uniqueidentifier 16 0 +up_delete_account_storage_item RustyHearts REQ_DELETE_ACCOUNT_STORAGE_ITEM 2 @item_id uniqueidentifier 16 0 +up_delete_auctionarticle RustyHearts REQ_DELETE_AUCTIONITEM 1 @item_uid uniqueidentifier 16 0 +up_delete_buff RustyHearts REQ_DELETE_BUFF 1 @character_id uniqueidentifier 16 0 +up_delete_buff RustyHearts REQ_DELETE_BUFF 2 @buff_type int 4 0 +up_delete_buff RustyHearts REQ_DELETE_BUFF 3 @buff_id int 4 0 +up_delete_cash_effectinfo RustyHearts REQ_DELETE_CASH_EFFECTINFO 1 @item_uid uniqueidentifier 16 0 +up_delete_character RustyHearts REQ_CHARACTER_DELETE 1 @auth_id uniqueidentifier 16 0 +up_delete_character RustyHearts REQ_CHARACTER_DELETE 2 @character_id uniqueidentifier 16 0 +up_delete_character_title RustyHearts REQ_DEL_CHARACTER_TITLE 1 @character_id uniqueidentifier 16 0 +up_delete_character_title RustyHearts REQ_DEL_CHARACTER_TITLE 2 @del_title_id uniqueidentifier 16 0 +up_delete_inquiry RustyHearts_Auth REQ_DELETE_INQUIRY 1 @character_id uniqueidentifier 16 0 +up_delete_inquiry RustyHearts_Auth REQ_DELETE_INQUIRY 2 @character_id uniqueidentifier 16 0 +up_delete_mail RustyHearts REQ_MAIL_DEL 1 @mail_id uniqueidentifier 16 0 +up_delete_pet RustyHearts REQ_PET_DELETE 1 @pet_id uniqueidentifier 16 0 +up_delete_pet_inventory RustyHearts REQ_DELETE_PET_INVENTORY_ITEM 1 @pet_id uniqueidentifier 16 0 +up_delete_pet_inventory RustyHearts REQ_DELETE_PET_INVENTORY_ITEM 2 @item_id uniqueidentifier 16 0 +up_delete_quest RustyHearts REQ_DELETE_QUEST 1 @quest_uid uniqueidentifier 16 0 +up_delete_quest RustyHearts REQ_DELETE_QUEST 2 @character_id uniqueidentifier 16 0 +up_delete_rearing_info RustyHearts REQ_DELETE_REARING_INFO 1 @rearing_id uniqueidentifier 16 0 +up_equip_character_title RustyHearts REQ_EQUIP_CHARACTER_TITLE 1 @title_id uniqueidentifier 16 0 +up_equip_character_title RustyHearts REQ_EQUIP_CHARACTER_TITLE 2 @character_id uniqueidentifier 16 0 +up_get_auth_id RustyHearts_Auth REQ_AUTH 1 @bcust_id nvarchar 100 0 +up_get_auth_id RustyHearts_Auth REQ_AUTH 2 @UUID uniqueidentifier 16 0 +up_get_auth_id RustyHearts_Auth REQ_AUTH 3 @channelling int 4 0 +up_get_auth_id RustyHearts_Auth REQ_AUTH 4 @mac_addr char 17 0 +up_get_auth_id RustyHearts_Auth REQ_AUTH 5 @mac_addr02 char 17 0 +up_get_auth_id RustyHearts_Auth REQ_AUTH 6 @mac_addr03 char 17 0 +up_get_character RustyHearts REQ_CHARACTER_GET 1 @character_id uniqueidentifier 16 0 +up_get_character RustyHearts REQ_CHARACTER_GET 2 @server smallint 2 0 +up_get_character_by_name RustyHearts REQ_CHARACTER_GET_BY_NAME 1 @name nvarchar 32 0 +up_get_character_by_name RustyHearts REQ_CHARACTER_GET_BY_NAME 2 @server smallint 2 0 +up_get_character_simpleinfo RustyHearts REQ_CHARACTER_GET_SIMPLE 1 @name nvarchar 32 0 +up_get_character_simpleinfo RustyHearts REQ_CHARACTER_GET_SIMPLE 2 @server smallint 2 0 +up_get_guild_increase_exp RustyHearts REQ_GUILD_INCREASE_EXP_LOG 1 @guild_id uniqueidentifier 16 0 +up_get_guild_load_info RustyHearts REQ_GUILD_LOAD_INFO 1 @server smallint 2 0 +up_get_guild_skill RustyHearts REQ_GUILD_SKILL_LIST 1 @guild_id uniqueidentifier 16 0 +up_get_guild_storage_info RustyHearts REQ_GUILD_STORAGE_INFO 1 @guild_id uniqueidentifier 16 0 +up_get_guild_storage_item_list RustyHearts REQ_GUILD_STORAGE_ITEM_LIST 1 @guild_id uniqueidentifier 16 0 +up_get_guild_storage_use_list RustyHearts REQ_GUILD_USE_LOG 1 @guild_id uniqueidentifier 16 0 +up_get_guild_total_count RustyHearts REQ_GUILD_TOTAL_CNT 1 @server smallint 2 0 +up_get_other_character RustyHearts REQ_OTHER_CHARACTER_INFO 1 @character_id uniqueidentifier 16 0 +up_get_other_character RustyHearts REQ_OTHER_CHARACTER_INFO 2 @server smallint 2 0 +up_get_pcroominfo RustyHearts_Auth REQ_AUTH 1 @szIP nvarchar 48 0 +up_get_second_pass RustyHearts_Auth REQ_SECOND_PASS 1 @bcust_id nvarchar 100 0 +up_guild_disband RustyHearts REQ_DISBAND_GUILD 1 @guild_id uniqueidentifier 16 0 +up_guild_disband RustyHearts REQ_DISBAND_GUILD 2 @character_id uniqueidentifier 16 0 +up_guild_leader_change RustyHearts REQ_UPDATE_GUILD_LEADER 1 @guild_id uniqueidentifier 16 0 +up_guild_leader_change RustyHearts REQ_UPDATE_GUILD_LEADER 2 @character_id uniqueidentifier 16 0 +up_guild_member_remove RustyHearts REQ_GUILD_MEMBER_REMOVE 1 @guild_id uniqueidentifier 16 0 +up_guild_member_remove RustyHearts REQ_GUILD_MEMBER_REMOVE 2 @character_id uniqueidentifier 16 0 +up_guild_storage_extension RustyHearts REQ_GUILD_STORAGE_EXTENSION 1 @guild_id uniqueidentifier 16 0 +up_guild_storage_extension RustyHearts REQ_GUILD_STORAGE_EXTENSION 2 @character_id uniqueidentifier 16 0 +up_guild_storage_extension RustyHearts REQ_GUILD_STORAGE_EXTENSION 3 @slot_count int 4 0 +up_guild_storage_extension RustyHearts REQ_GUILD_STORAGE_EXTENSION 4 @cost_money int 4 0 +up_guild_storage_extension RustyHearts REQ_GUILD_STORAGE_EXTENSION 5 @page_count tinyint 1 0 +up_guild_storage_extension RustyHearts REQ_GUILD_STORAGE_EXTENSION 6 @level int 4 0 +up_insert_blacklist RustyHearts_Auth REQ_INSERT_BLACKIP 1 @IP nvarchar 30 0 +up_insert_blacklist RustyHearts_Auth REQ_INSERT_BLACKIP 2 @State int 4 0 +up_insert_blacklist RustyHearts_Auth REQ_INSERT_BLACKIP 3 @Cause nvarchar 100 0 +up_insert_blacklist RustyHearts_Auth REQ_INSERT_BLACKIP 4 @GmID nvarchar 30 0 +up_insert_buff RustyHearts REQ_INSERT_BUFF 1 @character_id uniqueidentifier 16 0 +up_insert_buff RustyHearts REQ_INSERT_BUFF 2 @type int 4 0 +up_insert_buff RustyHearts REQ_INSERT_BUFF 3 @id int 4 0 +up_insert_buff RustyHearts REQ_INSERT_BUFF 4 @time int 4 0 +up_insert_cash_effectinfo RustyHearts REQ_INSERT_CASH_EFFECTINFO 1 @item_id uniqueidentifier 16 0 +up_insert_cash_effectinfo RustyHearts REQ_INSERT_CASH_EFFECTINFO 2 @character_id uniqueidentifier 16 0 +up_insert_cash_effectinfo RustyHearts REQ_INSERT_CASH_EFFECTINFO 3 @package_code int 4 0 +up_insert_cash_effectinfo RustyHearts REQ_INSERT_CASH_EFFECTINFO 4 @expire_time int 4 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 1 @GiveCharName varchar 19 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 2 @ProductID uniqueidentifier 16 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 3 @AuthID uniqueidentifier 16 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 4 @CashCode int 4 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 5 @GiftRecvName nvarchar 32 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 6 @AddOpt1 int 4 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 7 @AddOpt2 int 4 0 +up_insert_cash_product_list RustyHearts REQ_INSERT_CASH_PRODUCT 8 @AddOpt3 int 4 0 +up_insert_guild_increase_exp RustyHearts REQ_GUILD_INCREASE_EXP 1 @guild_id uniqueidentifier 16 0 +up_insert_guild_increase_exp RustyHearts REQ_GUILD_INCREASE_EXP 2 @character_id uniqueidentifier 16 0 +up_insert_guild_increase_exp RustyHearts REQ_GUILD_INCREASE_EXP 3 @exp int 4 0 +up_insert_guild_increase_exp RustyHearts REQ_GUILD_INCREASE_EXP 4 @time nvarchar 40 0 +up_insert_guild_increase_exp RustyHearts REQ_GUILD_INCREASE_EXP 5 @character_name nvarchar 32 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 1 @guild_id uniqueidentifier 16 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 2 @character_id uniqueidentifier 16 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 3 @name nvarchar 32 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 4 @alias_name nvarchar 32 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 5 @grade int 4 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 6 @class int 4 0 +up_insert_guild_member RustyHearts REQ_INSERT_GUILD_MEMBER 7 @level int 4 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 1 @guild_id uniqueidentifier 16 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 2 @learn_user_id uniqueidentifier 16 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 3 @skill_table_id int 4 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 4 @skill_id int 4 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 5 @skill_level tinyint 1 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 6 @learn_cost int 4 0 +up_insert_guild_skill RustyHearts REQ_GUILD_SKILL_LEARN 7 @is_update tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 1 @item_uid uniqueidentifier 16 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 2 @character_id uniqueidentifier 16 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 3 @auth_id uniqueidentifier 16 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 4 @page_index int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 5 @slot_index int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 6 @code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 7 @use_cnt int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 8 @remain_time int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 9 @gcode int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 10 @durability int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 11 @enhance_level int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 12 @option_1_code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 13 @option_1_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 14 @option_2_code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 15 @option_2_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 16 @option_3_code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 17 @option_3_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 18 @option_group int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 19 @ReconNum int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 20 @ReconState tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 21 @socket_count int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 22 @socket_1_code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 23 @socket_1_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 24 @socket_2_code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 25 @socket_2_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 26 @socket_3_code int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 27 @socket_3_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 28 @expire_time int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 29 @guild_id uniqueidentifier 16 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 30 @activity_value int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 31 @link_id uniqueidentifier 16 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 32 @socket_1_color tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 33 @socket_2_color tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 34 @socket_3_color tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 35 @rank tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 36 @acquireroute tinyint 1 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 37 @physical int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 38 @magical int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 39 @durabilitymax int 4 0 +up_insert_guild_storage RustyHearts REQ_GUILD_STORAGE_PUSH_ITEM 40 @weight int 4 0 +up_insert_guild_storage_use_log RustyHearts REQ_GUILD_STORAGE_USE_LOG 1 @guild_id uniqueidentifier 16 0 +up_insert_guild_storage_use_log RustyHearts REQ_GUILD_STORAGE_USE_LOG 2 @use_type tinyint 1 0 +up_insert_guild_storage_use_log RustyHearts REQ_GUILD_STORAGE_USE_LOG 3 @use_time nvarchar 40 0 +up_insert_guild_storage_use_log RustyHearts REQ_GUILD_STORAGE_USE_LOG 4 @character_name nvarchar 32 0 +up_insert_guild_storage_use_log RustyHearts REQ_GUILD_STORAGE_USE_LOG 5 @description nvarchar 60 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 1 @auth_id uniqueidentifier 16 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 2 @character_id uniqueidentifier 16 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 3 @type tinyint 1 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 4 @character_name nvarchar 32 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 5 @bcust_id nvarchar 100 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 6 @count tinyint 1 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 7 @memo nvarchar 510 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 8 @compulsion tinyint 1 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 9 @registertime datetime 8 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 10 @auth_id uniqueidentifier 16 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 11 @character_id uniqueidentifier 16 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 12 @type tinyint 1 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 13 @character_name nvarchar 32 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 14 @bcust_id nvarchar 100 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 15 @count tinyint 1 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 16 @memo nvarchar 510 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 17 @compulsion tinyint 1 0 +up_insert_inquiry RustyHearts_Auth REQ_INSERT_INQUIRY 18 @registertime datetime 8 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 1 @type tinyint 1 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 2 @character_name nvarchar 32 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 3 @memo nvarchar 510 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 4 @compulsion tinyint 1 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 5 @type tinyint 1 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 6 @character_name nvarchar 32 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 7 @memo nvarchar 510 0 +up_insert_inquiry_by_gm RustyHearts_Auth REQ_INSERT_INQUIRY_BY_GM 8 @compulsion tinyint 1 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 1 @C1 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 2 @C2 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 3 @C3 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 4 @AuthID uniqueidentifier 16 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 5 @nam1 nvarchar 32 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 6 @CharID uniqueidentifier 16 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 7 @name nvarchar 32 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 8 @S1 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 9 @S2 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 10 @S3 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 11 @S4 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 12 @S5 int 4 0 +up_insert_log_Account RustyHearts_Log REQ_LOG_ACCOUNT 13 @S6 int 4 0 +up_insert_log_auth_login NOT_IN_SCHEMA REQ_LOG_AUTH_LOGIN +up_insert_log_cash_info NOT_IN_SCHEMA REQ_LOG_CASH +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 1 @log_type int 4 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 2 @auth_id uniqueidentifier 16 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 3 @product_id uniqueidentifier 16 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 4 @productcode int 4 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 5 @productcount int 4 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 6 @bcust_id nvarchar 48 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 7 @character_name nvarchar 32 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 8 @gift_recvname nvarchar 32 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 9 @addopt1 int 4 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 10 @addopt2 int 4 0 +up_insert_log_cashbuy RustyHearts_Log REQ_CASHBUY_LOG 11 @addopt3 int 4 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 1 @log_type int 4 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 2 @intance_id uniqueidentifier 16 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 3 @world_id int 4 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 4 @dungeonid int 4 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 5 @difficulty tinyint 1 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 6 @membercountstart tinyint 1 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 7 @death tinyint 1 0 +up_insert_log_dungeon RustyHearts_Log REQ_LOG_DUNGEON 8 @rebirth tinyint 1 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 1 @log_id int 4 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 2 @log_type int 4 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 3 @world_id int 4 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 4 @end_status tinyint 1 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 5 @start_status tinyint 1 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 6 @target_bcustno nvarchar 32 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 7 @target_character nvarchar 32 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 8 @GM nvarchar 32 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 9 @former_GM nvarchar 32 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 10 @remain_number tinyint 1 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 11 @inquery_use nvarchar 2 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 12 @group_processing nvarchar 2 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 13 @post_time datetime 8 0 +up_insert_log_inquiry_complete RustyHearts_Log REQ_LOG_INQUIRY_COMPLETE 14 @start_time datetime 8 0 +up_insert_log_learnguildskill NOT_IN_SCHEMA REQ_GUILD_SKILL_LOG +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 1 @log_type int 4 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 2 @character_id uniqueidentifier 16 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 3 @skill_table_id int 4 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 4 @skill_level tinyint 1 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 5 @character_class int 4 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 6 @character_level tinyint 1 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 7 @skillpoint_use int 4 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 8 @bcustid nvarchar 32 0 +up_insert_log_learnskill RustyHearts_Log REQ_LEARNSKILL_LOG 9 @character_name nvarchar 32 0 +up_insert_log_mcu RustyHearts_Log REQ_SERVER_MCU 1 @world_id int 4 0 +up_insert_log_mcu RustyHearts_Log REQ_SERVER_MCU 2 @MCU int 4 0 +up_insert_log_monitor_command RustyHearts_Log REQ_LOG_MONITOR_COMMAND 1 @log_type int 4 0 +up_insert_log_monitor_command RustyHearts_Log REQ_LOG_MONITOR_COMMAND 2 @world_id int 4 0 +up_insert_log_monitor_command RustyHearts_Log REQ_LOG_MONITOR_COMMAND 3 @server_type int 4 0 +up_insert_log_monitor_command RustyHearts_Log REQ_LOG_MONITOR_COMMAND 4 @gm_id nvarchar 32 0 +up_insert_log_monitor_command RustyHearts_Log REQ_LOG_MONITOR_COMMAND 5 @command int 4 0 +up_insert_log_monitor_command RustyHearts_Log REQ_LOG_MONITOR_COMMAND 6 @server_code int 4 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 1 @log_type int 4 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 2 @world_id int 4 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 3 @target int 4 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 4 @notice_type tinyint 1 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 5 @notice_cycle tinyint 1 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 6 @notice nvarchar 510 0 +up_insert_log_monitor_notice RustyHearts_Log REQ_LOG_MONITOR_NOTICE 7 @gm_ID nvarchar 32 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 1 @log_type int 4 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 2 @world_id int 4 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 3 @gate int 4 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 4 @lobby int 4 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 5 @dungeon int 4 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 6 @pvp int 4 0 +up_insert_log_monitor_user RustyHearts_Log REQ_LOG_MONITOR_USER 7 @total int 4 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 1 @aa int 4 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 2 @server int 4 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 3 @bb int 4 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 4 @AuthID uniqueidentifier 16 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 5 @nam1 nvarchar 32 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 6 @CharID uniqueidentifier 16 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 7 @nam nvarchar 32 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 8 @class int 4 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 9 @level smallint 2 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 10 @StartTime datetime 8 0 +up_insert_log_play_time RustyHearts_Log REQ_LOG_PLAY_TIME 11 @EndTime datetime 8 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 1 @log_type smallint 2 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 2 @room_id uniqueidentifier 16 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 3 @character_id uniqueidentifier 16 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 4 @character_name nvarchar 32 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 5 @character_class int 4 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 6 @character_job tinyint 1 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 7 @character_level int 4 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 8 @kill_id uniqueidentifier 16 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 9 @kill_name nvarchar 32 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 10 @kill_class int 4 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 11 @kill_job tinyint 1 0 +up_insert_log_pvp_death RustyHearts_Log REQ_LOG_PVP_DEATH 12 @kill_level int 4 0 +up_insert_log_pvp_ladder RustyHearts_Log REQ_LOG_PVP_LADDER +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 1 @log_type smallint 2 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 2 @auth_id uniqueidentifier 16 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 3 @character_id uniqueidentifier 16 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 4 @character_name nvarchar 32 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 5 @channel_type int 4 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 6 @room_id uniqueidentifier 16 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 7 @room_world int 4 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 8 @room_number int 4 0 +up_insert_log_pvp_room RustyHearts_Log REQ_LOG_PVP_ROOM 9 @room_name nvarchar 100 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 1 @log_type int 4 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 2 @world_id int 4 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 3 @auth_id uniqueidentifier 16 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 4 @channel_id smallint 2 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 5 @bcust_id nvarchar 48 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 6 @character_id uniqueidentifier 16 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 7 @character_name nvarchar 32 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 8 @character_class int 4 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 9 @character_job tinyint 1 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 10 @character_level tinyint 1 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 11 @quest_id int 4 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 12 @quest_type int 4 0 +up_insert_log_quest RustyHearts_Log REQ_QUEST_LOG 13 @quest_exp int 4 0 +up_insert_quest RustyHearts REQ_INSERT_QUEST 1 @quest_uid uniqueidentifier 16 0 +up_insert_quest RustyHearts REQ_INSERT_QUEST 2 @character_id uniqueidentifier 16 0 +up_insert_quest RustyHearts REQ_INSERT_QUEST 3 @instance_npc_id int 4 0 +up_insert_quest RustyHearts REQ_INSERT_QUEST 4 @quest_code int 4 0 +up_insert_quest RustyHearts REQ_INSERT_QUEST 5 @quest_state int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 1 @table_id tinyint 1 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 2 @group_id tinyint 1 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 3 @reating_id uniqueidentifier 16 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 4 @char_id uniqueidentifier 16 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 5 @type tinyint 1 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 6 @name nvarchar 32 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 7 @job tinyint 1 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 8 @level int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 9 @index tinyint 1 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 10 @actionpoint int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 11 @usedturn int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 12 @endingid int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 13 @rewarditem int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 14 @createtime bigint 8 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 15 @vital int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 16 @intelligence int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 17 @strength int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 18 @temper int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 19 @charm int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 20 @exhaust int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 21 @angry int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 22 @normal int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 23 @good int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 24 @sadness int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 25 @height int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 26 @weight int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 27 @resilent int 4 0 +up_insert_rearing_info RustyHearts REQ_INSERT_REARING_INFO 28 @eloquence int 4 0 +up_insert_skill RustyHearts REQ_INSERT_SKILL 1 @NewSkillID uniqueidentifier 16 0 +up_insert_skill RustyHearts REQ_INSERT_SKILL 2 @character_id uniqueidentifier 16 0 +up_insert_skill RustyHearts REQ_INSERT_SKILL 3 @group int 4 0 +up_insert_skill RustyHearts REQ_INSERT_SKILL 4 @slot_index int 4 0 +up_insert_skill RustyHearts REQ_INSERT_SKILL 5 @skill_table_id int 4 0 +up_insert_skill RustyHearts REQ_INSERT_SKILL 6 @skill_level int 4 0 +up_item_durability_update RustyHearts REQ_ITEM_DURABILITY_UPDATE 1 @item_id uniqueidentifier 16 0 +up_item_durability_update RustyHearts REQ_ITEM_DURABILITY_UPDATE 2 @durability int 4 0 +up_item_move_cash_to_equip RustyHearts REQ_MOVE_CASH_TO_EQUIP 1 @character_id uniqueidentifier 16 0 +up_item_move_cash_to_equip RustyHearts REQ_MOVE_CASH_TO_EQUIP 2 @auth_id uniqueidentifier 16 0 +up_item_move_cash_to_equip RustyHearts REQ_MOVE_CASH_TO_EQUIP 3 @item_id uniqueidentifier 16 0 +up_item_move_cash_to_equip RustyHearts REQ_MOVE_CASH_TO_EQUIP 4 @page_index int 4 0 +up_item_move_cash_to_equip RustyHearts REQ_MOVE_CASH_TO_EQUIP 5 @slot_index int 4 0 +up_item_move_cash_to_equip_costumepack RustyHearts REQ_MOVE_CASH_TO_EQUIP_COSTUMEPACK 1 @character_id uniqueidentifier 16 0 +up_item_move_cash_to_equip_costumepack RustyHearts REQ_MOVE_CASH_TO_EQUIP_COSTUMEPACK 2 @auth_id uniqueidentifier 16 0 +up_item_move_cash_to_equip_costumepack RustyHearts REQ_MOVE_CASH_TO_EQUIP_COSTUMEPACK 3 @item_id uniqueidentifier 16 0 +up_item_move_cash_to_equip_costumepack RustyHearts REQ_MOVE_CASH_TO_EQUIP_COSTUMEPACK 4 @page_index int 4 0 +up_item_move_cash_to_equip_costumepack RustyHearts REQ_MOVE_CASH_TO_EQUIP_COSTUMEPACK 5 @slot_index int 4 0 +up_item_move_cash_to_equip_costumepack RustyHearts REQ_MOVE_CASH_TO_EQUIP_COSTUMEPACK 6 @itemCode int 4 0 +up_item_move_equip_to_cash RustyHearts REQ_MOVE_EQUIP_TO_CASH 1 @character_id uniqueidentifier 16 0 +up_item_move_equip_to_cash RustyHearts REQ_MOVE_EQUIP_TO_CASH 2 @auth_id uniqueidentifier 16 0 +up_item_move_equip_to_cash RustyHearts REQ_MOVE_EQUIP_TO_CASH 3 @item_id uniqueidentifier 16 0 +up_item_move_equip_to_cash RustyHearts REQ_MOVE_EQUIP_TO_CASH 4 @page_index int 4 0 +up_item_move_equip_to_cash RustyHearts REQ_MOVE_EQUIP_TO_CASH 5 @slot_index int 4 0 +up_item_move_equip_to_inventory RustyHearts REQ_MOVE_EQUIP_TO_INVENTORY 1 @character_id uniqueidentifier 16 0 +up_item_move_equip_to_inventory RustyHearts REQ_MOVE_EQUIP_TO_INVENTORY 2 @auth_id uniqueidentifier 16 0 +up_item_move_equip_to_inventory RustyHearts REQ_MOVE_EQUIP_TO_INVENTORY 3 @item_id uniqueidentifier 16 0 +up_item_move_equip_to_inventory RustyHearts REQ_MOVE_EQUIP_TO_INVENTORY 4 @page_index int 4 0 +up_item_move_equip_to_inventory RustyHearts REQ_MOVE_EQUIP_TO_INVENTORY 5 @slot_index int 4 0 +up_item_move_inventory_to_equip RustyHearts REQ_MOVE_INVENTORY_TO_EQUIP 1 @character_id uniqueidentifier 16 0 +up_item_move_inventory_to_equip RustyHearts REQ_MOVE_INVENTORY_TO_EQUIP 2 @auth_id uniqueidentifier 16 0 +up_item_move_inventory_to_equip RustyHearts REQ_MOVE_INVENTORY_TO_EQUIP 3 @item_id uniqueidentifier 16 0 +up_item_move_inventory_to_equip RustyHearts REQ_MOVE_INVENTORY_TO_EQUIP 4 @page_index int 4 0 +up_item_move_inventory_to_equip RustyHearts REQ_MOVE_INVENTORY_TO_EQUIP 5 @slot_index int 4 0 +up_item_move_pet_inventory_to_inventory NOT_IN_SCHEMA REQ_MOVE_PET_INVEN_TO_INVEN +up_item_owner_update RustyHearts REQ_ITEM_OWNER_UPDATE 1 @character_id uniqueidentifier 16 0 +up_item_owner_update RustyHearts REQ_ITEM_OWNER_UPDATE 2 @auth_id uniqueidentifier 16 0 +up_item_owner_update RustyHearts REQ_ITEM_OWNER_UPDATE 3 @item_id uniqueidentifier 16 0 +up_item_page_owner_update RustyHearts REQ_ITEM_PAGE_OWNER_UPDATE 1 @character_id uniqueidentifier 16 0 +up_item_page_owner_update RustyHearts REQ_ITEM_PAGE_OWNER_UPDATE 2 @auth_id uniqueidentifier 16 0 +up_item_page_owner_update RustyHearts REQ_ITEM_PAGE_OWNER_UPDATE 3 @item_id uniqueidentifier 16 0 +up_item_page_owner_update RustyHearts REQ_ITEM_PAGE_OWNER_UPDATE 4 @page_index int 4 0 +up_item_page_owner_update RustyHearts REQ_ITEM_PAGE_OWNER_UPDATE 5 @slot_index int 4 0 +up_item_page_slot_update RustyHearts REQ_ITEM_PAGE_SLOT_UPDATE 1 @character_id uniqueidentifier 16 0 +up_item_page_slot_update RustyHearts REQ_ITEM_PAGE_SLOT_UPDATE 2 @auth_id uniqueidentifier 16 0 +up_item_page_slot_update RustyHearts REQ_ITEM_PAGE_SLOT_UPDATE 3 @item_id uniqueidentifier 16 0 +up_item_page_slot_update RustyHearts REQ_ITEM_PAGE_SLOT_UPDATE 4 @page_index int 4 0 +up_item_page_slot_update RustyHearts REQ_ITEM_PAGE_SLOT_UPDATE 5 @slot_index int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 1 @character_id uniqueidentifier 16 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 2 @auth_id uniqueidentifier 16 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 3 @item_id uniqueidentifier 16 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 4 @use_cnt int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 5 @remain_time int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 6 @enhance_level int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 7 @durability int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 8 @sock_optcode01 int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 9 @sock_value01 int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 10 @sock_optcode02 int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 11 @sock_value02 int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 12 @sock_optcode03 int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 13 @sock_value03 int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 14 @expiretime int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 15 @activity_value int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 16 @socket_1_color tinyint 1 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 17 @socket_2_color tinyint 1 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 18 @socket_3_color tinyint 1 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 19 @deferment_time int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 20 @rank tinyint 1 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 21 @acquireroute tinyint 1 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 22 @physical int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 23 @magical int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 24 @durabilitymax int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 25 @weight int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 26 @socket_count int 4 0 +up_item_update RustyHearts REQ_ITEM_UPDATE 27 @option_group int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 1 @item_id uniqueidentifier 16 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 2 @item_code int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 3 @opt_code01 int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 4 @opt_code02 int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 5 @opt_code03 int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 6 @opt_value01 int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 7 @opt_value02 int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 8 @opt_value03 int 4 0 +up_item_update_itemcode_option RustyHearts REQ_ITEM_UPDATE_CODE_OPTION 9 @unknonw_param int 4 0 +up_mail_gold_payment RustyHearts REQ_MAIL_GOLD_PAYMAENT 1 @mail_id uniqueidentifier 16 0 +up_mail_gold_payment RustyHearts REQ_MAIL_GOLD_PAYMAENT 2 @msg nvarchar 700 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 1 @mail_id uniqueidentifier 16 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 2 @item_id01 uniqueidentifier 16 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 3 @page_01 int 4 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 4 @slot_01 int 4 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 5 @over_item_id01 uniqueidentifier 16 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 6 @item_id02 uniqueidentifier 16 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 7 @page_02 int 4 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 8 @slot_02 int 4 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 9 @over_item_id02 uniqueidentifier 16 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 10 @item_id03 uniqueidentifier 16 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 11 @page_03 int 4 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 12 @slot_03 int 4 0 +up_mail_item_move RustyHearts REQ_MAIL_ITEM_MOVE 13 @over_item_id03 uniqueidentifier 16 0 +up_mail_return RustyHearts REQ_MAIL_RETURN 1 @mail_id uniqueidentifier 16 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 1 @pet_id uniqueidentifier 16 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 2 @auth_id uniqueidentifier 16 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 3 @item_id uniqueidentifier 16 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 4 @use_cnt int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 5 @remain_time int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 6 @enhance_level int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 7 @durability int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 8 @sock_optcode01 int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 9 @sock_value01 int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 10 @sock_optcode02 int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 11 @sock_value02 int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 12 @sock_optcode03 int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 13 @sock_value03 int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 14 @expiretime int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 15 @activity_value int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 16 @socket_1_color tinyint 1 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 17 @socket_2_color tinyint 1 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 18 @socket_3_color tinyint 1 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 19 @rank tinyint 1 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 20 @acquireroute tinyint 1 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 21 @physical int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 22 @magical int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 23 @durabilitymax int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 24 @weight int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 25 @page_index int 4 0 +up_pet_item_update RustyHearts REQ_PET_ITEM_UPDATE 26 @slot_index int 4 0 +up_read_account_storage RustyHearts REQ_READ_ACCOUNT_STORAGE_ITEM 1 @auth_id uniqueidentifier 16 0 +up_read_all_auctionlist RustyHearts REQ_READ_ALL_AUCTIONLIST +up_read_all_guild RustyHearts REQ_READ_ALL_GUILD 1 @server int 4 0 +up_read_all_item_dropgroup RustyHearts REQ_READ_ALL_ITEM_DROPGROUP +up_read_auth_blacklist RustyHearts_Auth REQ_READ_AUTH_BLACKLISTIP +up_read_auth_pcroom RustyHearts_Auth REQ_READ_AUTH_PCROOMIP +up_read_buff RustyHearts REQ_READ_BUFF 1 @character_id uniqueidentifier 16 0 +up_read_cash_product_list RustyHearts REQ_READ_CASH_PRODUCT_LIST 1 @auth_id uniqueidentifier 16 0 +up_read_extern_cash NOT_IN_SCHEMA REQ_EXTERN_CASH_BALANCE +up_read_friend_list RustyHearts REQ_FRIEND_LIST 1 @character_id uniqueidentifier 16 0 +up_read_guild RustyHearts REQ_READ_GUILD 1 @guild_id uniqueidentifier 16 0 +up_read_guild_member RustyHearts REQ_READ_GUILD_MEMBER 1 @guild_id uniqueidentifier 16 0 +up_read_guild_server RustyHearts REQ_READ_GUILD_SERVER 1 @group_id smallint 2 0 +up_read_guild_server RustyHearts REQ_READ_GUILD_SERVER 2 @server smallint 2 0 +up_read_inquiry RustyHearts_Auth REQ_READ_INQUIRY +up_read_inquiry_character RustyHearts_Auth REQ_CHARACTER_READ_ALL_DATA 1 @character_id uniqueidentifier 16 0 +up_read_inquiry_character RustyHearts_Auth REQ_CHARACTER_READ_ALL_DATA 2 @character_id uniqueidentifier 16 0 +up_read_item_equip_simple RustyHearts REQ_CHARACTER_EQUIP_ITEM 1 @character_id uniqueidentifier 16 0 +up_read_item_inventory_slot NOT_IN_SCHEMA REQ_INVEN_SLOT +up_read_mail RustyHearts REQ_MAIL_LIST 1 @character_id uniqueidentifier 16 0 +up_read_new_mail RustyHearts REQ_MAIL_NEW_LIST 1 @character_id uniqueidentifier 16 0 +up_read_new_mail_exist RustyHearts REQ_MAIL_NEW_EXIST 1 @character_id uniqueidentifier 16 0 +up_read_pc_room_point RustyHearts_Auth REQ_PC_ROOM_POINT 1 @AuthID uniqueidentifier 16 0 +up_read_pet RustyHearts REQ_PET_READLIST 1 @character_id uniqueidentifier 16 0 +up_read_pet_inventory RustyHearts REQ_READ_PET_INVENTORY_ITEM 1 @pet_id uniqueidentifier 16 0 +up_read_realtimeevent RustyHearts_Auth REQ_REAL_TIME_EVENT +up_read_rearing_listinfo RustyHearts REQ_READ_REARING_LISTINFO 1 @cha_uid uniqueidentifier 16 0 +up_read_reward RustyHearts REQ_READ_REWARD 1 @type tinyint 1 0 +up_read_reward RustyHearts REQ_READ_REWARD 2 @grade int 4 0 +up_read_skill RustyHearts REQ_READ_SKILL 1 @character_id uniqueidentifier 16 0 +up_read_uni_account_info RustyHearts REQ_CHARACTER_LIST 1 @auth_id uniqueidentifier 16 0 +up_read_world_server RustyHearts_Auth REQ_READ_WORLD_SERVER +up_save_inventory_storage_money RustyHearts REQ_SAVE_INVENTORY_STORAGE_MONEY 1 @character_id uniqueidentifier 16 0 +up_save_inventory_storage_money RustyHearts REQ_SAVE_INVENTORY_STORAGE_MONEY 2 @inven_gold int 4 0 +up_save_inventory_storage_money RustyHearts REQ_SAVE_INVENTORY_STORAGE_MONEY 3 @storage_gold int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 1 @character_id uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 2 @type_01 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 3 @item_id_01 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 4 @type_02 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 5 @item_id_02 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 6 @type_03 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 7 @item_id_03 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 8 @type_04 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 9 @item_id_04 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 10 @type_05 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 11 @item_id_05 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 12 @type_06 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 13 @item_id_06 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 14 @type_07 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 15 @item_id_07 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 16 @type_08 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 17 @item_id_08 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 18 @type_09 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 19 @item_id_09 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 20 @type_10 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 21 @item_id_10 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 22 @type_11 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 23 @item_id_11 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 24 @type_12 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 25 @item_id_12 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 26 @type_13 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 27 @item_id_13 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 28 @type_14 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 29 @item_id_14 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 30 @type_15 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 31 @item_id_15 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 32 @type_16 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 33 @item_id_16 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 34 @type_17 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 35 @item_id_17 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 36 @type_18 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 37 @item_id_18 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 38 @type_19 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 39 @item_id_19 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 40 @type_20 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 41 @item_id_20 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 42 @type_21 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 43 @item_id_21 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 44 @type_22 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 45 @item_id_22 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 46 @type_23 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 47 @item_id_23 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 48 @type_24 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 49 @item_id_24 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 50 @type_25 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 51 @item_id_25 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 52 @type_26 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 53 @item_id_26 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 54 @type_27 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 55 @item_id_27 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 56 @type_28 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 57 @item_id_28 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 58 @type_29 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 59 @item_id_29 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 60 @type_30 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 61 @item_id_30 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 62 @type_31 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 63 @item_id_31 uniqueidentifier 16 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 64 @type_32 int 4 0 +up_save_item_quickslot RustyHearts REQ_SAVE_ITEM_QUICKSLOT 65 @item_id_32 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 1 @character_id uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 2 @type_01 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 3 @item_id_01 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 4 @type_02 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 5 @item_id_02 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 6 @type_03 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 7 @item_id_03 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 8 @type_04 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 9 @item_id_04 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 10 @type_05 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 11 @item_id_05 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 12 @type_06 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 13 @item_id_06 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 14 @type_07 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 15 @item_id_07 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 16 @type_08 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 17 @item_id_08 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 18 @type_09 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 19 @item_id_09 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 20 @type_10 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 21 @item_id_10 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 22 @type_11 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 23 @item_id_11 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 24 @type_12 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 25 @item_id_12 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 26 @type_13 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 27 @item_id_13 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 28 @type_14 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 29 @item_id_14 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 30 @type_15 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 31 @item_id_15 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 32 @type_16 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 33 @item_id_16 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 34 @type_17 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 35 @item_id_17 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 36 @type_18 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 37 @item_id_18 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 38 @type_19 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 39 @item_id_19 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 40 @type_20 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 41 @item_id_20 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 42 @type_21 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 43 @item_id_21 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 44 @type_22 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 45 @item_id_22 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 46 @type_23 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 47 @item_id_23 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 48 @type_24 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 49 @item_id_24 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 50 @type_25 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 51 @item_id_25 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 52 @type_26 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 53 @item_id_26 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 54 @type_27 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 55 @item_id_27 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 56 @type_28 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 57 @item_id_28 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 58 @type_29 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 59 @item_id_29 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 60 @type_30 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 61 @item_id_30 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 62 @type_31 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 63 @item_id_31 uniqueidentifier 16 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 64 @type_32 int 4 0 +up_save_item_quickslot_02 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 65 @item_id_32 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 1 @character_id uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 2 @type_01 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 3 @item_id_01 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 4 @type_02 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 5 @item_id_02 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 6 @type_03 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 7 @item_id_03 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 8 @type_04 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 9 @item_id_04 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 10 @type_05 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 11 @item_id_05 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 12 @type_06 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 13 @item_id_06 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 14 @type_07 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 15 @item_id_07 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 16 @type_08 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 17 @item_id_08 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 18 @type_09 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 19 @item_id_09 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 20 @type_10 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 21 @item_id_10 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 22 @type_11 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 23 @item_id_11 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 24 @type_12 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 25 @item_id_12 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 26 @type_13 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 27 @item_id_13 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 28 @type_14 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 29 @item_id_14 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 30 @type_15 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 31 @item_id_15 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 32 @type_16 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 33 @item_id_16 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 34 @type_17 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 35 @item_id_17 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 36 @type_18 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 37 @item_id_18 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 38 @type_19 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 39 @item_id_19 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 40 @type_20 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 41 @item_id_20 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 42 @type_21 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 43 @item_id_21 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 44 @type_22 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 45 @item_id_22 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 46 @type_23 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 47 @item_id_23 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 48 @type_24 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 49 @item_id_24 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 50 @type_25 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 51 @item_id_25 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 52 @type_26 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 53 @item_id_26 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 54 @type_27 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 55 @item_id_27 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 56 @type_28 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 57 @item_id_28 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 58 @type_29 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 59 @item_id_29 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 60 @type_30 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 61 @item_id_30 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 62 @type_31 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 63 @item_id_31 uniqueidentifier 16 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 64 @type_32 int 4 0 +up_save_item_quickslot_03 RustyHearts REQ_SAVE_ITEM_QUICKSLOT 65 @item_id_32 uniqueidentifier 16 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 1 @auth_id uniqueidentifier 16 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 2 @auth_id uniqueidentifier 16 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 3 @CharID uniqueidentifier 16 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 4 @server int 4 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 5 @channelID int 4 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 6 @name nvarchar 32 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 7 @real_ip varchar 16 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 8 @inven_gold int 4 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 9 @storage_gold int 4 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 10 @character_level int 4 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 11 @character_exp bigint 8 0 +up_save_logout RustyHearts_Auth REQ_LOGINOUT_LOG 12 @log_type smallint 2 0 +up_save_money RustyHearts REQ_SAVE_MONEY 1 @character_id uniqueidentifier 16 0 +up_save_money RustyHearts REQ_SAVE_MONEY 2 @gold int 4 0 +up_save_server_info RustyHearts_Auth REQ_SAVE_SERVER_INFO 1 @auth_id uniqueidentifier 16 0 +up_save_server_info RustyHearts_Auth REQ_SAVE_SERVER_INFO 2 @real_ip varchar 16 0 +up_save_server_info RustyHearts_Auth REQ_SAVE_SERVER_INFO 3 @server_ip varchar 16 0 +up_save_server_info RustyHearts_Auth REQ_SAVE_SERVER_INFO 4 @host_id int 4 0 +up_save_server_info RustyHearts_Auth REQ_SAVE_SERVER_INFO 5 @ServerType char 2 0 +up_save_server_info RustyHearts_Auth REQ_SAVE_SERVER_INFO 6 @ServerID int 4 0 +up_select_battle_rank RustyHearts REQ_SELECT_BATTLE_RANK_LIST 1 @rank_type int 4 0 +up_select_cash_effectinfo RustyHearts REQ_READ_CASH_EFFECTINFO 1 @cha_uid uniqueidentifier 16 0 +up_set_timeskillreset RustyHearts REQ_SET_TIME_SKILLRESET 1 @char_id uniqueidentifier 16 0 +up_set_timeskillreset RustyHearts REQ_SET_TIME_SKILLRESET 2 @flag int 4 0 +up_skill_delete_all NOT_IN_SCHEMA REQ_DELETE_SKILL_ALL +up_skill_reset RustyHearts REQ_SAVE_SKILL_RESET 1 @character_id uniqueidentifier 16 0 +up_unequip_character_title RustyHearts REQ_UNEQUIP_CHARACTER_TITLE 1 @title_id uniqueidentifier 16 0 +up_upate_item_binds RustyHearts REQ_UPDATE_ITEM_BINDS 1 @character_id uniqueidentifier 16 0 +up_upate_item_binds RustyHearts REQ_UPDATE_ITEM_BINDS 2 @item_id uniqueidentifier 16 0 +up_upate_item_binds RustyHearts REQ_UPDATE_ITEM_BINDS 3 @binds int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 1 @auth_id uniqueidentifier 16 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 2 @item_id uniqueidentifier 16 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 3 @use_cnt int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 4 @remain_time int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 5 @enhance_level int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 6 @durability int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 7 @sock_optcode01 int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 8 @sock_value01 int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 9 @sock_optcode02 int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 10 @sock_value02 int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 11 @sock_optcode03 int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 12 @sock_value03 int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 13 @expiretime int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 14 @activity_value int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 15 @socket_1_color tinyint 1 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 16 @socket_2_color tinyint 1 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 17 @socket_3_color tinyint 1 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 18 @rank tinyint 1 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 19 @acquireroute tinyint 1 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 20 @physical int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 21 @magical int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 22 @durabilitymax int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 23 @weight int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 24 @page_index int 4 0 +up_update_account_storage_item RustyHearts REQ_UPDATE_ACCOUNT_STORAGE_ITEM 25 @slot_index int 4 0 +up_update_auctionarticle RustyHearts REQ_UPDATE_AUCTIONITEM 1 @item_uid uniqueidentifier 16 0 +up_update_auctionarticle RustyHearts REQ_UPDATE_AUCTIONITEM 2 @bid_auth_uid uniqueidentifier 16 0 +up_update_auctionarticle RustyHearts REQ_UPDATE_AUCTIONITEM 3 @bid_uid uniqueidentifier 16 0 +up_update_auctionarticle RustyHearts REQ_UPDATE_AUCTIONITEM 4 @bidder nvarchar 30 0 +up_update_auctionarticle RustyHearts REQ_UPDATE_AUCTIONITEM 5 @bid_price int 4 0 +up_update_ban_memo RustyHearts REQ_UPDATE_MEMO_BAN 1 @character_id uniqueidentifier 16 0 +up_update_ban_memo RustyHearts REQ_UPDATE_MEMO_BAN 2 @ban_id uniqueidentifier 16 0 +up_update_ban_memo RustyHearts REQ_UPDATE_MEMO_BAN 3 @ban_memo nvarchar 64 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 1 @character_id uniqueidentifier 16 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 2 @total_win int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 3 @total_lose int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 4 @team_win int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 5 @team_lose int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 6 @leader_win int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 7 @leader_lose int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 8 @tag_win int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 9 @tag_lose int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 10 @death_win int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 11 @death_lose int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 12 @individual_win int 4 0 +up_update_battleinfo RustyHearts REQ_RESET_BATTLE_INFO 13 @individual_lose int 4 0 +up_update_buff RustyHearts REQ_UPDATE_BUFF 1 @character_id uniqueidentifier 16 0 +up_update_buff RustyHearts REQ_UPDATE_BUFF 2 @type int 4 0 +up_update_buff RustyHearts REQ_UPDATE_BUFF 3 @id int 4 0 +up_update_buff RustyHearts REQ_UPDATE_BUFF 4 @time int 4 0 +up_update_cash_effectinfo RustyHearts REQ_UPDATE_CASH_EFFECTINFO 1 @item_uid uniqueidentifier 16 0 +up_update_cash_effectinfo RustyHearts REQ_UPDATE_CASH_EFFECTINFO 2 @expire_time int 4 0 +up_update_cash_mileage RustyHearts_Auth REQ_UPDATE_CASH_MILEAGE 1 @auth_id uniqueidentifier 16 0 +up_update_cash_mileage RustyHearts_Auth REQ_UPDATE_CASH_MILEAGE 2 @mileage int 4 0 +up_update_cash_mileage RustyHearts_Auth REQ_UPDATE_CASH_MILEAGE 3 @auth_id uniqueidentifier 16 0 +up_update_cash_mileage RustyHearts_Auth REQ_UPDATE_CASH_MILEAGE 4 @mileage int 4 0 +up_update_cash_product_list RustyHearts REQ_UPDATE_CASH_PRODUCT 1 @ProductID uniqueidentifier 16 0 +up_update_character_addition_status_hp RustyHearts REQ_STATUS_ADDITION_HP 1 @character_id uniqueidentifier 16 0 +up_update_character_addition_status_hp RustyHearts REQ_STATUS_ADDITION_HP 2 @addition_hp int 4 0 +up_update_character_addition_status_magicattack RustyHearts REQ_STATUS_ADDITION_MAGICATTACK 1 @character_id uniqueidentifier 16 0 +up_update_character_addition_status_magicattack RustyHearts REQ_STATUS_ADDITION_MAGICATTACK 2 @addition_magicattack int 4 0 +up_update_character_addition_status_magicdefense RustyHearts REQ_STATUS_ADDITION_MAGICDEFENSE 1 @character_id uniqueidentifier 16 0 +up_update_character_addition_status_magicdefense RustyHearts REQ_STATUS_ADDITION_MAGICDEFENSE 2 @addition_magicdefense int 4 0 +up_update_character_addition_status_mp RustyHearts REQ_STATUS_ADDITION_MP 1 @character_id uniqueidentifier 16 0 +up_update_character_addition_status_mp RustyHearts REQ_STATUS_ADDITION_MP 2 @addition_mp int 4 0 +up_update_character_addition_status_physicattack RustyHearts REQ_STATUS_ADDITION_PHYSICATTACK 1 @character_id uniqueidentifier 16 0 +up_update_character_addition_status_physicattack RustyHearts REQ_STATUS_ADDITION_PHYSICATTACK 2 @addition_physicattack int 4 0 +up_update_character_addition_status_physicdefense RustyHearts REQ_STATUS_ADDITION_PHYSICDEFENSE 1 @character_id uniqueidentifier 16 0 +up_update_character_addition_status_physicdefense RustyHearts REQ_STATUS_ADDITION_PHYSICDEFENSE 2 @addition_physicdefense int 4 0 +up_update_character_block RustyHearts REQ_UPDATE_CHARACTER_BLOCK 1 @character_id uniqueidentifier 16 0 +up_update_character_block_by_name RustyHearts REQ_UPDATE_CHARACTER_BLOCK_BY_NAME 1 @character_name nvarchar 32 0 +up_update_character_dice_point RustyHearts REQ_UPDATE_CHARACTER_DICE_POINT 1 @character_id uniqueidentifier 16 0 +up_update_character_dice_point RustyHearts REQ_UPDATE_CHARACTER_DICE_POINT 2 @dice_point int 4 0 +up_update_character_duel_Experience RustyHearts REQ_UPDATE_CHARACTER_BATTLE_EXP 1 @character_id uniqueidentifier 16 0 +up_update_character_duel_Experience RustyHearts REQ_UPDATE_CHARACTER_BATTLE_EXP 2 @duel_experience bigint 8 0 +up_update_character_duel_ladder RustyHearts REQ_UPDATE_CHARACTER_BATTLE_LADDER 1 @character_id uniqueidentifier 16 0 +up_update_character_duel_ladder RustyHearts REQ_UPDATE_CHARACTER_BATTLE_LADDER 2 @duel_ladder_exp int 4 0 +up_update_character_duel_ladder RustyHearts REQ_UPDATE_CHARACTER_BATTLE_LADDER 3 @duel_ladder_point int 4 0 +up_update_character_duel_point RustyHearts REQ_UPDATE_CHARACTER_BATTLE_POINT 1 @character_id uniqueidentifier 16 0 +up_update_character_duel_point RustyHearts REQ_UPDATE_CHARACTER_BATTLE_POINT 2 @duel_point int 4 0 +up_update_character_experience RustyHearts REQ_UPDATE_CHARACTER_EXP 1 @character_id uniqueidentifier 16 0 +up_update_character_experience RustyHearts REQ_UPDATE_CHARACTER_EXP 2 @experience bigint 8 0 +up_update_character_fatigue RustyHearts REQ_UPDATE_CHARACTER_FATIGUE 1 @character_id uniqueidentifier 16 0 +up_update_character_fatigue RustyHearts REQ_UPDATE_CHARACTER_FATIGUE 2 @fatigue int 4 0 +up_update_character_fatigue RustyHearts REQ_UPDATE_CHARACTER_FATIGUE 3 @cash tinyint 1 0 +up_update_character_fatiguestorage RustyHearts REQ_UPDATE_CHARACTER_FATIGUE_STORAGE 1 @character_id uniqueidentifier 16 0 +up_update_character_fatiguestorage RustyHearts REQ_UPDATE_CHARACTER_FATIGUE_STORAGE 2 @fatigue int 4 0 +up_update_character_first_login RustyHearts REQ_UPDATE_CHARACTER_FIRST_LOGIN 1 @character_id uniqueidentifier 16 0 +up_update_character_first_login RustyHearts REQ_UPDATE_CHARACTER_FIRST_LOGIN 2 @class int 4 0 +up_update_character_first_login RustyHearts REQ_UPDATE_CHARACTER_FIRST_LOGIN 3 @lobby_id int 4 0 +up_update_character_give_up RustyHearts REQ_UPDATE_CHARACTER_GIVE_UP 1 @character_id uniqueidentifier 16 0 +up_update_character_give_up RustyHearts REQ_UPDATE_CHARACTER_GIVE_UP 2 @give_up int 4 0 +up_update_character_guild_point RustyHearts REQ_UPDATE_CHARACTER_GUILD_POINT 1 @character_id uniqueidentifier 16 0 +up_update_character_guild_point RustyHearts REQ_UPDATE_CHARACTER_GUILD_POINT 2 @guildpoint int 4 0 +up_update_character_hearts RustyHearts REQ_UPDATE_CHARACTER_HEARTS 1 @character_id uniqueidentifier 16 0 +up_update_character_hearts RustyHearts REQ_UPDATE_CHARACTER_HEARTS 2 @hearts int 4 0 +up_update_character_job RustyHearts REQ_UPDATE_CHARACTER_JOB 1 @character_id uniqueidentifier 16 0 +up_update_character_job RustyHearts REQ_UPDATE_CHARACTER_JOB 2 @job int 4 0 +up_update_character_level RustyHearts REQ_UPDATE_CHARACTER_LEVEL_AND_SP 1 @character_id uniqueidentifier 16 0 +up_update_character_level RustyHearts REQ_UPDATE_CHARACTER_LEVEL_AND_SP 2 @level int 4 0 +up_update_character_level RustyHearts REQ_UPDATE_CHARACTER_LEVEL_AND_SP 3 @experience bigint 8 0 +up_update_character_lobby RustyHearts REQ_UPDATE_CHARACTER_LOBBY 1 @character_id uniqueidentifier 16 0 +up_update_character_lobby RustyHearts REQ_UPDATE_CHARACTER_LOBBY 2 @lobby int 4 0 +up_update_character_name RustyHearts REQ_UPDATE_CHARACTER_NAME 1 @character_id uniqueidentifier 16 0 +up_update_character_name RustyHearts REQ_UPDATE_CHARACTER_NAME 2 @character_name nvarchar 32 0 +up_update_character_sp RustyHearts REQ_UPDATE_CHARACTER_SP 1 @character_id uniqueidentifier 16 0 +up_update_character_sp RustyHearts REQ_UPDATE_CHARACTER_SP 2 @sp int 4 0 +up_update_character_sp RustyHearts REQ_UPDATE_CHARACTER_SP 3 @total_sp int 4 0 +up_update_character_tutorial RustyHearts REQ_UPDATE_CHARACTER_TUTORIAL 1 @character_id uniqueidentifier 16 0 +up_update_character_tutorial_step RustyHearts REQ_UPDATE_CHARACTER_TUTORIAL_STEP 1 @character_id uniqueidentifier 16 0 +up_update_character_tutorial_step RustyHearts REQ_UPDATE_CHARACTER_TUTORIAL_STEP 2 @tutorial_step int 4 0 +up_update_dayattach RustyHearts REQ_UPDATE_DAY_ATTACH 1 @character_id uniqueidentifier 16 0 +up_update_dayattach RustyHearts REQ_UPDATE_DAY_ATTACH 2 @attach_item int 4 0 +up_update_dayattach RustyHearts REQ_UPDATE_DAY_ATTACH 3 @attach_gold int 4 0 +up_update_daypartymission RustyHearts REQ_UPDATE_DAY_PARTY_MISSION 1 @character_id uniqueidentifier 16 0 +up_update_daypartymission RustyHearts REQ_UPDATE_DAY_PARTY_MISSION 2 @daymissionstate int 4 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 1 @character_id uniqueidentifier 16 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 2 @game_type int 4 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 3 @add_point int 4 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 4 @add_exp bigint 8 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 5 @add_disconnect int 4 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 6 @add_win int 4 0 +up_update_duel_info RustyHearts REQ_UPDATE_DUEL_INFO 7 @add_lose int 4 0 +up_update_dungeon_rank RustyHearts REQ_UPDATE_DUNGEON_RANK 1 @character_id uniqueidentifier 16 0 +up_update_dungeon_rank RustyHearts REQ_UPDATE_DUNGEON_RANK 2 @world_id int 4 0 +up_update_dungeon_rank RustyHearts REQ_UPDATE_DUNGEON_RANK 3 @difficulty tinyint 1 0 +up_update_dungeon_rank RustyHearts REQ_UPDATE_DUNGEON_RANK 4 @rank_normal tinyint 1 0 +up_update_dungeon_rank RustyHearts REQ_UPDATE_DUNGEON_RANK 5 @rank_hard tinyint 1 0 +up_update_dungeon_rank RustyHearts REQ_UPDATE_DUNGEON_RANK 6 @rank_veryhard tinyint 1 0 +up_update_event_fatigue RustyHearts REQ_UPDATE_EVENT_FATIGUE 1 @character_id uniqueidentifier 16 0 +up_update_event_fatigue RustyHearts REQ_UPDATE_EVENT_FATIGUE 2 @fatigue tinyint 1 0 +up_update_event_fortune RustyHearts REQ_UPDATE_EVENT_FORTUNE,REQ_UPDATE_EVENT_DAY_PARTY_MISSION 1 @character_id uniqueidentifier 16 0 +up_update_event_fortune RustyHearts REQ_UPDATE_EVENT_FORTUNE,REQ_UPDATE_EVENT_DAY_PARTY_MISSION 2 @fortune tinyint 1 0 +up_update_event_hearts RustyHearts REQ_UPDATE_EVENT_HEARTS 1 @character_id uniqueidentifier 16 0 +up_update_event_hearts RustyHearts REQ_UPDATE_EVENT_HEARTS 2 @hearts tinyint 1 0 +up_update_event_inquiry RustyHearts_Auth REQ_UPDATE_EVENT_INQUIRY 1 @auth_id uniqueidentifier 16 0 +up_update_event_inquiry RustyHearts_Auth REQ_UPDATE_EVENT_INQUIRY 2 @inquiry tinyint 1 0 +up_update_event_inquiry RustyHearts_Auth REQ_UPDATE_EVENT_INQUIRY 3 @auth_id uniqueidentifier 16 0 +up_update_event_inquiry RustyHearts_Auth REQ_UPDATE_EVENT_INQUIRY 4 @inquiry tinyint 1 0 +up_update_event_mailattach RustyHearts REQ_UPDATE_EVENT_MAILATTACH 1 @character_id uniqueidentifier 16 0 +up_update_event_mailattach RustyHearts REQ_UPDATE_EVENT_MAILATTACH 2 @mailattach tinyint 1 0 +up_update_event_pvpladder RustyHearts REQ_UPDATE_PVP_LADDER 1 @character_id uniqueidentifier 16 0 +up_update_event_pvpladder RustyHearts REQ_UPDATE_PVP_LADDER 2 @pvpladder tinyint 1 0 +up_update_fortune RustyHearts REQ_UPDATE_FORTUNE 1 @character_id uniqueidentifier 16 0 +up_update_fortune RustyHearts REQ_UPDATE_FORTUNE 2 @fortune int 4 0 +up_update_fortune RustyHearts REQ_UPDATE_FORTUNE 3 @type_1 int 4 0 +up_update_fortune RustyHearts REQ_UPDATE_FORTUNE 4 @type_2 int 4 0 +up_update_fortune RustyHearts REQ_UPDATE_FORTUNE 5 @type_3 int 4 0 +up_update_fortune RustyHearts REQ_UPDATE_FORTUNE 6 @count int 4 0 +up_update_friend_name RustyHearts REQ_UPDATE_CHARACTER_NAME 1 @character_id uniqueidentifier 16 0 +up_update_friend_name RustyHearts REQ_UPDATE_CHARACTER_NAME 2 @character_name nvarchar 32 0 +up_update_guild_level RustyHearts REQ_GUILD_LEVEL_UP 1 @guild_id uniqueidentifier 16 0 +up_update_guild_level RustyHearts REQ_GUILD_LEVEL_UP 2 @character_id uniqueidentifier 16 0 +up_update_guild_level RustyHearts REQ_GUILD_LEVEL_UP 3 @need_exp bigint 8 0 +up_update_guild_level RustyHearts REQ_GUILD_LEVEL_UP 4 @need_gold int 4 0 +up_update_guild_level RustyHearts REQ_GUILD_LEVEL_UP 5 @max_member int 4 0 +up_update_guild_member_aliase RustyHearts REQ_UPDATE_GUILD_MEMBER_ALIASE 1 @guild_id uniqueidentifier 16 0 +up_update_guild_member_aliase RustyHearts REQ_UPDATE_GUILD_MEMBER_ALIASE 2 @character_id uniqueidentifier 16 0 +up_update_guild_member_aliase RustyHearts REQ_UPDATE_GUILD_MEMBER_ALIASE 3 @alias_name nvarchar 32 0 +up_update_guild_member_logout_time RustyHearts REQ_GUILD_MEMBER_LOGOUT_TIME 1 @guild_id uniqueidentifier 16 0 +up_update_guild_member_logout_time RustyHearts REQ_GUILD_MEMBER_LOGOUT_TIME 2 @character_id uniqueidentifier 16 0 +up_update_guild_member_name RustyHearts REQ_UPDATE_CHARACTER_NAME 1 @character_id uniqueidentifier 16 0 +up_update_guild_member_name RustyHearts REQ_UPDATE_CHARACTER_NAME 2 @character_name nvarchar 32 0 +up_update_guild_member_permission RustyHearts REQ_UPDATE_GUILD_MEMBER_GRADE 1 @guild_id uniqueidentifier 16 0 +up_update_guild_member_permission RustyHearts REQ_UPDATE_GUILD_MEMBER_GRADE 2 @character_id uniqueidentifier 16 0 +up_update_guild_member_permission RustyHearts REQ_UPDATE_GUILD_MEMBER_GRADE 3 @permission int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 1 @guild_id uniqueidentifier 16 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 2 @permission00 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 3 @permission01 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 4 @permission02 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 5 @permission03 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 6 @permission04 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 7 @permission05 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 8 @permission06 int 4 0 +up_update_guild_permission RustyHearts REQ_UPDATE_GUILD_PERMISSION 9 @permission07 int 4 0 +up_update_guild_storage_deposit RustyHearts REQ_GUILD_DEPOSIT 1 @guild_id uniqueidentifier 16 0 +up_update_guild_storage_deposit RustyHearts REQ_GUILD_DEPOSIT 2 @character_id uniqueidentifier 16 0 +up_update_guild_storage_deposit RustyHearts REQ_GUILD_DEPOSIT 3 @deposit_gold int 4 0 +up_update_guild_storage_info RustyHearts REQ_GUILD_STORAGE_INFO_CHANGE 1 @guild_id uniqueidentifier 16 0 +up_update_guild_storage_info RustyHearts REQ_GUILD_STORAGE_INFO_CHANGE 2 @page_count tinyint 1 0 +up_update_guild_storage_info RustyHearts REQ_GUILD_STORAGE_INFO_CHANGE 3 @gold bigint 8 0 +up_update_guild_storage_info RustyHearts REQ_GUILD_STORAGE_INFO_CHANGE 4 @slot_count int 4 0 +up_update_guild_storage_info RustyHearts REQ_GUILD_STORAGE_INFO_CHANGE 5 @level tinyint 1 0 +up_update_guild_storage_item RustyHearts REQ_GUILD_STORAGE_ITEM_UPDATE 1 @guild_id uniqueidentifier 16 0 +up_update_guild_storage_item RustyHearts REQ_GUILD_STORAGE_ITEM_UPDATE 2 @item_id uniqueidentifier 16 0 +up_update_guild_storage_item RustyHearts REQ_GUILD_STORAGE_ITEM_UPDATE 3 @page_index int 4 0 +up_update_guild_storage_item RustyHearts REQ_GUILD_STORAGE_ITEM_UPDATE 4 @slot_index int 4 0 +up_update_guild_storage_item RustyHearts REQ_GUILD_STORAGE_ITEM_UPDATE 5 @Count int 4 0 +up_update_guild_storage_item_change_count RustyHearts REQ_GUILD_STORAGE_ITEM_CHANGE_COUNT 1 @guild_id uniqueidentifier 16 0 +up_update_guild_storage_item_change_count RustyHearts REQ_GUILD_STORAGE_ITEM_CHANGE_COUNT 2 @character_id uniqueidentifier 16 0 +up_update_guild_storage_item_change_count RustyHearts REQ_GUILD_STORAGE_ITEM_CHANGE_COUNT 3 @item_id uniqueidentifier 16 0 +up_update_guild_storage_item_change_count RustyHearts REQ_GUILD_STORAGE_ITEM_CHANGE_COUNT 4 @count int 4 0 +up_update_guild_storage_payment RustyHearts REQ_GUILD_PAYMENT 1 @guild_id uniqueidentifier 16 0 +up_update_guild_storage_payment RustyHearts REQ_GUILD_PAYMENT 2 @character_id uniqueidentifier 16 0 +up_update_guild_storage_payment RustyHearts REQ_GUILD_PAYMENT 3 @payment_gold int 4 0 +up_update_inquiry RustyHearts_Auth REQ_UPDATE_INQUIRY 1 @character_id uniqueidentifier 16 0 +up_update_inquiry RustyHearts_Auth REQ_UPDATE_INQUIRY 2 @type tinyint 1 0 +up_update_inquiry RustyHearts_Auth REQ_UPDATE_INQUIRY 3 @memo nvarchar 510 0 +up_update_inquiry RustyHearts_Auth REQ_UPDATE_INQUIRY 4 @character_id uniqueidentifier 16 0 +up_update_inquiry RustyHearts_Auth REQ_UPDATE_INQUIRY 5 @type tinyint 1 0 +up_update_inquiry RustyHearts_Auth REQ_UPDATE_INQUIRY 6 @memo nvarchar 510 0 +up_update_inquiry_count RustyHearts_Auth REQ_UPDATE_INQUIRY_COUNT 1 @auth_id uniqueidentifier 16 0 +up_update_inquiry_count RustyHearts_Auth REQ_UPDATE_INQUIRY_COUNT 2 @count tinyint 1 0 +up_update_inquiry_count RustyHearts_Auth REQ_UPDATE_INQUIRY_COUNT 3 @auth_id uniqueidentifier 16 0 +up_update_inquiry_count RustyHearts_Auth REQ_UPDATE_INQUIRY_COUNT 4 @count tinyint 1 0 +up_update_inquiry_type RustyHearts_Auth REQ_UPDATE_INQUIRY_TYPE 1 @character_id uniqueidentifier 16 0 +up_update_inquiry_type RustyHearts_Auth REQ_UPDATE_INQUIRY_TYPE 2 @type tinyint 1 0 +up_update_inquiry_type RustyHearts_Auth REQ_UPDATE_INQUIRY_TYPE 3 @character_id uniqueidentifier 16 0 +up_update_inquiry_type RustyHearts_Auth REQ_UPDATE_INQUIRY_TYPE 4 @type tinyint 1 0 +up_update_mail_open RustyHearts REQ_MAIL_OPEN 1 @mail_id uniqueidentifier 16 0 +up_update_mail_open RustyHearts REQ_MAIL_OPEN 2 @is_open tinyint 1 0 +up_update_pet RustyHearts REQ_PET_UPDATE 1 @pet_id uniqueidentifier 16 0 +up_update_pet RustyHearts REQ_PET_UPDATE 2 @character_id uniqueidentifier 16 0 +up_update_pet RustyHearts REQ_PET_UPDATE 3 @Level int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 4 @Experience bigint 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 5 @inventory_count tinyint 1 0 +up_update_pet RustyHearts REQ_PET_UPDATE 6 @CreateTime datetime 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 7 @Expire_Time int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 8 @Class int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 9 @Vital int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 10 @Intelligence int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 11 @Strength int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 12 @Resilient int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 13 @Eloquence int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 14 @Charm int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 15 @Temper int 4 0 +up_update_pet RustyHearts REQ_PET_UPDATE 16 @fHeight float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 17 @fWeight float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 18 @pet_type tinyint 1 0 +up_update_pet RustyHearts REQ_PET_UPDATE 19 @hp float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 20 @mp float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 21 @physical_attack float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 22 @physical_defence float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 23 @magical_attack float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 24 @magical_defence float 8 0 +up_update_pet RustyHearts REQ_PET_UPDATE 25 @loyalty float 8 0 +up_update_pet_exp RustyHearts REQ_PET_EXP_UPDATE 1 @pet_id uniqueidentifier 16 0 +up_update_pet_exp RustyHearts REQ_PET_EXP_UPDATE 2 @character_id uniqueidentifier 16 0 +up_update_pet_exp RustyHearts REQ_PET_EXP_UPDATE 3 @Experience bigint 8 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 1 @pet_id uniqueidentifier 16 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 2 @character_id uniqueidentifier 16 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 3 @Level int 4 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 4 @Experience bigint 8 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 5 @inventory_count tinyint 1 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 6 @chat uniqueidentifier 16 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 7 @auid uniqueidentifier 16 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 8 @aa int 4 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 9 @nn int 4 0 +up_update_pet_level RustyHearts REQ_PET_LEVEL_UPDATE 10 @cc int 4 0 +up_update_pet_name RustyHearts REQ_PET_NAME_UPDATE 1 @pet_id uniqueidentifier 16 0 +up_update_pet_name RustyHearts REQ_PET_NAME_UPDATE 2 @character_id uniqueidentifier 16 0 +up_update_pet_name RustyHearts REQ_PET_NAME_UPDATE 3 @Name nvarchar 32 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 1 @pet_id uniqueidentifier 16 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 2 @character_id uniqueidentifier 16 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 3 @hp int 4 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 4 @mp int 4 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 5 @physical_attack float 8 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 6 @physical_defence float 8 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 7 @magical_attack float 8 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 8 @magical_defence float 8 0 +up_update_pet_status RustyHearts REQ_PET_EAT_STATUS 9 @loyalty float 8 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 1 @pet_id uniqueidentifier 16 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 2 @Vital int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 3 @Intelligence int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 4 @Strength int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 5 @Resilient int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 6 @Eloquence int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 7 @Charm int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 8 @Temper int 4 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 9 @fHeight float 8 0 +up_update_pet_stet RustyHearts REQ_UPDATE_PET_STET 10 @fWeight float 8 0 +up_update_pet_type RustyHearts REQ_UPDATE_PET_TYPE 1 @pet_id uniqueidentifier 16 0 +up_update_pet_type RustyHearts REQ_UPDATE_PET_TYPE 2 @pet_type tinyint 1 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 1 @quest_uid uniqueidentifier 16 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 2 @character_id uniqueidentifier 16 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 3 @quest_state tinyint 1 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 4 @quest_status1 smallint 2 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 5 @quest_status2 smallint 2 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 6 @quest_status3 smallint 2 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 7 @quest_status4 smallint 2 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 8 @quest_status5 smallint 2 0 +up_update_quest RustyHearts REQ_UPDATE_QUEST 9 @finsh_date nvarchar 40 0 +up_update_quest_show RustyHearts REQ_UPDATE_QUEST_SHOW 1 @quest_uid uniqueidentifier 16 0 +up_update_quest_show RustyHearts REQ_UPDATE_QUEST_SHOW 2 @quest_show int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 1 @rearing_id uniqueidentifier 16 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 2 @table_id int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 3 @job tinyint 1 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 4 @level int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 5 @actionpoint int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 6 @usedturn int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 7 @endingid int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 8 @rewarditem int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 9 @vital int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 10 @intelligence int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 11 @strength int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 12 @temper int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 13 @charm int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 14 @resilent int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 15 @eloquence int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 16 @exhaust int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 17 @angry int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 18 @normal int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 19 @good int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 20 @sadness int 4 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 21 @height float 8 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 22 @weight float 8 0 +up_update_rearing_info RustyHearts REQ_UPDATE_REARING_INFO 23 @index int 4 0 +up_update_rearing_turn RustyHearts REQ_UPDATE_REARING_TURN 1 @rearing_id uniqueidentifier 16 0 +up_update_rearing_turn RustyHearts REQ_UPDATE_REARING_TURN 2 @usedturn int 4 0 +up_update_remaintime_item RustyHearts REQ_UPDATE_REMAINTIME_ITEM 1 @character_id uniqueidentifier 16 0 +up_update_skill_level RustyHearts REQ_UPDATE_SKILL_LEVEL 1 @skill_id uniqueidentifier 16 0 +up_update_skill_level RustyHearts REQ_UPDATE_SKILL_LEVEL 2 @skill_level int 4 0 +up_update_storage_useable_count RustyHearts REQ_UPDATE_STORAGE_USEABLE_COUNT 1 @character_id uniqueidentifier 16 0 +up_update_storage_useable_count RustyHearts REQ_UPDATE_STORAGE_USEABLE_COUNT 2 @useable_count int 4 0 +up_update_uni_account_info RustyHearts REQ_UPDATE_UNI_ACCOUNT_INFO 1 @auth_id uniqueidentifier 16 0 +up_update_uni_account_info RustyHearts REQ_UPDATE_UNI_ACCOUNT_INFO 2 @AccountStorage_Count int 4 0 +up_update_uni_account_info RustyHearts REQ_UPDATE_UNI_ACCOUNT_INFO 3 @AccountStorage_Gold int 4 0 +up_update_uni_account_info RustyHearts REQ_UPDATE_UNI_ACCOUNT_INFO 4 @Use_CharacterSlot int 4 0 diff --git a/decomp/INVENTORY.md b/decomp/INVENTORY.md index 68f0dc4c..90e307c6 100644 --- a/decomp/INVENTORY.md +++ b/decomp/INVENTORY.md @@ -26,7 +26,7 @@ hypotheses to confirm or revise during analysis. | `ManagerServer_Release_USA_x64.exe` | 6666752 | 6510.5 | c239477294c199f8df4ef70138cc1583c87838dd5e8cebed2ff0fae2bc6c5be2 | management/admin | pending | | `AuctionServer_Release_USA_x64.exe` | 6477824 | 6326.0 | ebca9cc047aeca125ac0621e3652339096c74862746157adc6c72057422f6dcf | auction house | pending | | `MatchServer_Release_USA_x64.exe` | 6134784 | 5991.0 | 341dd4a38c9e1abb590f60325ef52bf24b60a48a70e36e2f1651bbf00591fcf2 | matchmaking | pending | -| `DBCServer_Release_x64.exe` | 3542016 | 3459.0 | d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c | DB access server (observed: SERVERS2DBC RMI → write queues → ADO stored procs; 4 connection types; Linux port `src/dbc_server/`) | open | +| `DBCServer_Release_x64.exe` | 3542016 | 3459.0 | d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c | DB access server (observed: SERVERS2DBC RMI → write queues → ADO stored procs; 4 connection types) | open | | `DBCServer_LOG_Release_x64.exe` | 3394560 | 3315.0 | 2636d51679abb7703a6386a398f2afb985704aa0ce00d53e75d0ff3b093f5836 | logging DB variant | pending | | `GameGatewayServer_Release_x64.exe` | 3330560 | 3252.5 | 4cbec55dc3dfe5a0eeba3170722e6f1d33e55d6a0d007774266fe9db96f25d1a | gateway/proxy | pending | | `GMServer_Release_x64.exe` | 2004480 | 1957.5 | 8fba9dbb8809419d6e2edaee31d9ad60501341d97dca0fc82a1c1e7cc32199d1 | game-master tools | pending | diff --git a/decomp/scripts/gen_dbc_tables.py b/decomp/scripts/gen_dbc_tables.py index b97e92e2..f52c5406 100644 --- a/decomp/scripts/gen_dbc_tables.py +++ b/decomp/scripts/gen_dbc_tables.py @@ -1,81 +1,49 @@ #!/usr/bin/env python3 -"""Generate the DBCServer port's static tables from decomp evidence. +"""Join the DBCServer RMI -> procedure map with procedure parameters. -Inputs (all derived, regenerable): +Inputs (derived, regenerable): decomp/DBCServer_Release_x64/rmi_to_proc.tsv RMI -> cmd -> procedures decomp/schema//routines.tsv procedure parameters Output: - src/dbc_server/generated/tables.inc + decomp/DBCServer_Release_x64/procs_used.tsv + one row per (procedure, parameter) for every procedure reachable from an RMI; + db = database that holds it (NOT_IN_SCHEMA if called but absent). Run from the repo root: python3 decomp/scripts/gen_dbc_tables.py """ import csv, os ROOT = os.getcwd() -OUT = os.path.join(ROOT, 'src/dbc_server/generated/tables.inc') -# Database -> DBC connection type (DBC:0x1400a7aa0). The DB for a procedure is -# where it lives in the schema dump (inference, see docs/DATABASE.md). -DBTYPE = {'RustyHearts_Account': 'Web', 'RustyHearts_Auth': 'Auth', - 'RustyHearts': 'Game', 'RustyHearts_Log': 'GameLog'} -SQLTYPE = {'int': 'Int', 'smallint': 'SmallInt', 'tinyint': 'TinyInt', 'bigint': 'BigInt', - 'bit': 'Bit', 'float': 'Float', 'uniqueidentifier': 'Guid', 'nvarchar': 'NVarChar', - 'nchar': 'NVarChar', 'varchar': 'VarChar', 'char': 'VarChar', 'datetime': 'DateTime'} +OUT = os.path.join(ROOT, 'decomp/DBCServer_Release_x64/procs_used.tsv') +DBS = ['RustyHearts_Account', 'RustyHearts_Auth', 'RustyHearts', 'RustyHearts_Log'] def rows(path): with open(path, newline='') as f: return list(csv.reader(f, delimiter='\t')) procs = {} # lower name -> (name, db, [(param, type, maxlen, out)]) -for db in DBTYPE: +for db in DBS: for r in rows(f'{ROOT}/decomp/schema/{db}/routines.tsv')[1:]: if len(r) < 7 or r[0] != 'SQL_STORED_PROCEDURE': continue p = procs.setdefault(r[1].lower(), (r[1], db, [])) if r[2] != 'NULL': - p[2].append((r[3], SQLTYPE.get(r[4], 'VarChar'), int(r[5]), r[6] == '1')) + p[2].append((r[3], r[4], r[5], r[6])) rmi = rows(f'{ROOT}/decomp/DBCServer_Release_x64/rmi_to_proc.tsv') -hdr = rmi[0]; rmi = [dict(zip(hdr, r)) for r in rmi[1:]] - -used = [] -for r in rmi: +hdr = rmi[0] +callers = {} +for r in (dict(zip(hdr, x)) for x in rmi[1:]): for p in filter(None, r['procs'].split(',')): - if p.lower() not in procs: - # Called by DBCServer but absent from the shipped schema: keep it so - # the port fails like the original would (ADO error). DB guessed from name. - procs[p.lower()] = (p, 'RustyHearts_Log' if '_log_' in p else 'RustyHearts', None) - if p.lower() not in used: - used.append(p.lower()) + callers.setdefault(p.lower(), (p, []))[1].append(r['rmi_name']) -def cstr(s): - return '"' + s.replace('\\', '\\\\').replace('"', '\\"') + '"' - -out = ['// GENERATED by decomp/scripts/gen_dbc_tables.py - do not edit.', - '// Sources: decomp/DBCServer_Release_x64/rmi_to_proc.tsv, decomp/schema/*/routines.tsv', ''] -for i, key in enumerate(used): - name, db, ps = procs[key] - ps = ps or [] - out.append(f'static const ProcParam kParams{i}[] = {{' + - ''.join(f'{{{cstr(n)}, SqlType::{t}, {m}, {str(o).lower()}}},' for n, t, m, o in ps) + - ('{nullptr, SqlType::Int, 0, false}' if not ps else '') + '};') -out.append('') -out.append('static const ProcDef kProcs[] = {') -for i, key in enumerate(used): - name, db, ps = procs[key] - known = ps is not None - out.append(f' {{{cstr(name)}, DbType::{DBTYPE[db]}, kParams{i}, {len(ps or [])}, {str(known).lower()}}},') -out.append('};') -out.append('') -out.append('// rmi_id, name, cmd_id (0 = not queued / unknown), proc indexes (-1 = none)') -out.append('static const RmiDef kRmis[] = {') -for r in rmi: - idx = [used.index(p.lower()) for p in filter(None, r['procs'].split(',')) if p.lower() in used] - idx = (idx + [-1, -1, -1])[:3] - missing = [p for p in filter(None, r['procs'].split(',')) if procs[p.lower()][2] is None] - note = f' // missing in schema: {",".join(missing)}' if missing else '' - out.append(f' {{{r["rmi_id"]}, {cstr(r["rmi_name"])}, {r["cmd_id"] or 0}, ' - f'{{{idx[0]}, {idx[1]}, {idx[2]}}}}},{note}') -out.append('};') -os.makedirs(os.path.dirname(OUT), exist_ok=True) -open(OUT, 'w').write('\n'.join(out) + '\n') -print(f'{len(used)} procedures, {len(rmi)} RMIs -> {OUT}') +out = [['proc', 'db', 'rmis', 'param_no', 'param', 'sql_type', 'max_length', 'is_output']] +for key, (name, rmis) in sorted(callers.items()): + pname, db, params = procs.get(key, (name, 'NOT_IN_SCHEMA', [])) + if not params: + out.append([pname, db, ','.join(rmis), '', '', '', '', '']) + for i, (n, t, m, o) in enumerate(params, 1): + out.append([pname, db, ','.join(rmis), str(i), n, t, m, o]) +with open(OUT, 'w', newline='') as f: + csv.writer(f, delimiter='\t', lineterminator='\n').writerows(out) +print(f'{len(callers)} procedures -> {OUT}') diff --git a/docs/WORKFLOW.md b/docs/WORKFLOW.md index 1e9816b1..108af8fa 100644 --- a/docs/WORKFLOW.md +++ b/docs/WORKFLOW.md @@ -169,19 +169,15 @@ In `decomp//`: - Mark every name as inferred. - Record the original bugs you notice (leaks, races). -## 7. Port to Linux +## 7. Porting spec -`src//` builds the lifted code with Meson (see `src/README.md`). Keep a -`platform.{hpp,cpp}` layer that maps each Win32 call to its nearest POSIX -equivalent. - -The per-binary `README.md` must contain: -- a substitution table: original address → Win32 API → Linux replacement → - behaviour difference; -- what is stubbed or not ported, and why. - -Build with `ninja -C build` and smoke-test it. A passing test proves only that -the port works, not how the original behaves. +There is no source tree in this repo. The earlier `src/` reconstructions were +removed on 2026-10-15. Instead, record the facts a re-implementation needs in +`decomp//porting.md`: +- the behaviour to reproduce, with decomp addresses; +- a substitution table: original address → Win32 API → nearest Linux + equivalent → behaviour difference; +- the original bugs, and what is unknown or unrecovered. ## 8. Close @@ -199,5 +195,5 @@ the Evidence bundle, because session annotations are temporary. `third-party/README.md`** - [ ] Key functions decompiled; `full/` export done - [ ] `evidence.md`, `INVENTORY.md`, `docs/ARCHITECTURE.md` updated -- [ ] Lift and Linux port updated, if in scope +- [ ] `cpp/` lift and `porting.md` updated, if in scope - [ ] Evidence bundle exported; REA session closed diff --git a/src/README.md b/src/README.md deleted file mode 100644 index 19fd4c27..00000000 --- a/src/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# src — Linux reconstructions - -Buildable Linux C++ ports of analysed Rusty Hearts server binaries. Each -sub-folder ports one binary and has its own README. That README covers -provenance, the Win32 → Linux substitutions, and what is not yet ported. - -| Folder | Original binary | Output | -|---|---|---| -| `agent_release/` | `Agent_Release_x64.exe` | `build/agent_release/agent_release` | - -These are reconstructions from decompiled code, not original source. - -## Requirements - -- Linux with glibc ≥ 2.29 (for `posix_spawn_file_actions_addchdir_np`) -- A C++17 compiler (tested with GCC 16.2) -- Meson ≥ 1.0 and Ninja. Run both from this repo's `mise` environment or the - system packages. - -## Build - -From this directory: - -```sh -meson setup build # first time only -ninja -C build -``` - -## Common tasks - -- **Rebuild after changes:** `ninja -C build`. -- **Release build:** `meson setup build-release --buildtype=release && ninja -C build-release`. -- **Clean rebuild:** `rm -rf build && meson setup build && ninja -C build`. - -## Run - -```sh -./build/agent_release/agent_release --help -./build/agent_release/agent_release --auto-on 1 \ - --type 1:/path/to/server:/path/to/workdir --server 1:1:1 -``` - -Stop it with Ctrl-C or SIGTERM. See `agent_release/README.md` for every -option. - -`build/` is gitignored. - -## Adding another binary - -1. Create `/` with its sources, a `meson.build` and a `README.md`. The - README must cite decomp addresses and list substitutions and gaps. -2. Add `subdir('')` to `meson.build` in this directory. diff --git a/src/agent_release/README.md b/src/agent_release/README.md deleted file mode 100644 index 8b1b2e30..00000000 --- a/src/agent_release/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# agent_release — Linux port of `Agent_Release_x64.exe` (process-supervisor core) - -A buildable Linux reconstruction of the parts of the Agent that have been -decompiled. It is **not** the original program: names are inferred (there is no -PDB), and only the analysed functions are ported. - -Source analysis: -- `decomp/Agent_Release_x64/evidence.md` -- `decomp/Agent_Release_x64/cpp/AgentProcessControl.cpp` - -## Build and run - -```sh -cd src -meson setup build -ninja -C build -./build/agent_release/agent_release --auto-on 1 \ - --type 1:/path/to/server:/path/to/workdir --server 1:1:1 -``` - -`--type TYPE:EXE[:WORKDIR]` maps a server type to its executable. -`--server CODE:TYPE:REVIVE` registers one managed server. By default the -server's code is passed as its argument, so the command line is `EXE CODE`. - -## Win32 → Linux substitutions - -| Original (address) | Win32 | Linux replacement | Behaviour difference | -|---|---|---|---| -| Single instance (`0x1400100b0`) | `CreateMutexW("Global\\RustyHearts_Agent")` | `flock(LOCK_EX\|LOCK_NB)` on `/tmp/RustyHearts_Agent.lock` | Lock file instead of a kernel object; still released on exit/crash | -| Launch (`0x1400094e0`) | `CreateProcessW(…, CREATE_NEW_CONSOLE, …, workDir)` + `STARTUPINFOW` console geometry | `posix_spawnp` + `POSIX_SPAWN_SETSID` + `addchdir_np` | No console window; command line split on whitespace (no Windows quoting rules) | -| Watcher (`0x140008c90`) | `GetExitCodeProcess` polled every 10 ms | blocking `waitpid` on a detached `std::thread` | No polling; child reaped (fixes original handle leak); PID passed by value (fixes original stack-pointer race) | -| Kill (`0x140009780`) | Toolhelp32 snapshot + `OpenProcess` + `TerminateProcess(h,0)` | `/proc/*/cmdline` argv[0] basename, `strcasecmp`, `kill(SIGKILL)` | Same: first match only, case-insensitive; no snapshot leak | -| Main loop timer (`0x1400037a0`) | `QueryPerformanceCounter` (`TimeSourceHRWin32`) | `std::chrono::steady_clock` | — | -| Thread start | `_beginthreadex` | `std::thread` | — | -| `Sleep` | `Sleep` | `std::this_thread::sleep_for` | — | -| Shutdown flag | console menu (`FUN_140001dc0`, not analysed) | `SIGINT` / `SIGTERM` | Different trigger | - -Kept from the original: -- the 1-second sleep after each launch attempt; -- the 260-character (`MAX_PATH`) command-line limit; -- the log strings. - -## Not ported (unknown or proprietary) - -- **ProudNet networking / RMI to AgentManager and game servers.** ProudNet is - proprietary and the protocol is undecoded. `IManagerSession` is a logging - stub at the points where the original sends RMI messages (proxy vtable - slots `+0x40` and `+0x50`). -- **XML config (`option\*.xml`, TinyXML).** Field mapping is not yet recovered, - so command-line flags stand in for it. -- **Launch-argument builder `FUN_140027540`.** Its output is unknown, so only - the "server code as argument" mode is implemented. -- **Exit follow-ups.** - - The `type == 1` exit follow-up (`FUN_140009f20`) is not ported. - - The identity of the type `0x18` process killed at startup is unknown. - `--kill-on-start` stands in for it. -- **Locking.** The original's locking around the server table is not visible - in the analysed code. This port uses a recursive mutex. - -## Verified (2026-10-14, Linux) - -Smoke test, using `sleep` as the managed server: auto-start after the delay, -revive on exit, second-instance refusal, case-insensitive kill by name, -clean SIGTERM shutdown. This tests the port only. It says nothing about the -original binary's runtime behaviour. diff --git a/src/agent_release/agent.cpp b/src/agent_release/agent.cpp deleted file mode 100644 index 8a394863..00000000 --- a/src/agent_release/agent.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// agent.cpp — logic follows the Ghidra pseudocode cited per function. -#include "agent.hpp" -#include "platform.hpp" - -#include -#include - -namespace agent { - -void LoggingManagerSession::NotifyServerState(const ServerEntry& e) -{ - std::printf("[RMI->AgentManager] ServerState code=%d pid=%d running=%d\n", - e.code, static_cast(e.pid), e.running ? 1 : 0); -} - -void LoggingManagerSession::NotifyServerStopped(const ServerEntry& e) -{ - std::printf("[RMI->AgentManager] ServerStopped code=%d\n", e.code); -} - -void LoggingManagerSession::SendLog(const std::string& text) -{ - std::printf("[RMI->AgentManager] Log: %s\n", text.c_str()); -} - -Agent::Agent(Options opts, std::map types, - std::unique_ptr session) - : opts_(std::move(opts)), types_(std::move(types)), session_(std::move(session)) {} - -void Agent::AddServer(const ServerEntry& e) -{ - std::lock_guard g(mu_); - servers_[e.code] = e; -} - -std::string Agent::BuildCommandLine(const ServerEntry& e) const -{ - auto t = types_.find(e.type); - std::string cmd = (t == types_.end() ? std::string() : t->second.exePath) + " "; - if (opts_.useCodeAsArgument) - cmd += std::to_string(e.code); - // else: original appends FUN_140027540's output — contents UNKNOWN, not ported. - return cmd; -} - -// 0x140008ea0 -void Agent::ServerOn(int32_t code) -{ - std::lock_guard g(mu_); - auto it = servers_.find(code); - if (it == servers_.end()) { - std::printf("Error - NOT EXIST SERVER : %d \n", code); - return; - } - ServerEntry& e = it->second; - if (e.running) return; - e.running = true; - - std::string cmd = BuildCommandLine(e); - auto t = types_.find(e.type); - std::string workDir = t == types_.end() ? std::string() : t->second.workDir; - - pid_t pid = 0; - if (cmd.size() < 260 && (pid = platform::LaunchProcess(cmd, workDir)) > 0) { // MAX_PATH check kept - e.pid = pid; - e.running = true; - session_->NotifyServerState(e); - platform::WatchProcess(pid, [this](pid_t p) { OnProcessExit(p); }); - } else { - e.running = false; - session_->SendLog("FAILED SERVER ON " + opts_.agentName + " "); - } -} - -void Agent::AllServerOn() -{ - std::lock_guard g(mu_); - std::printf("All Server On. \n"); - for (auto& kv : servers_) ServerOn(kv.first); -} - -// 0x140008c90 (after the wait loop) -void Agent::OnProcessExit(pid_t pid) -{ - std::lock_guard g(mu_); - ServerEntry* e = nullptr; - for (auto& kv : servers_) - if (kv.second.pid == pid) { e = &kv.second; break; } - if (!e) { std::printf("NOT FIND PROCESS ID \n"); return; } - - e->running = false; - session_->NotifyServerState(*e); - session_->NotifyServerStopped(*e); - if (running_ && (e->revive || opts_.reviveAll)) - ServerOn(e->code); - // type==1 follow-up (FUN_140009f20) — purpose UNKNOWN, not ported. -} - -// 0x1400037a0 MagiAgentServer::Run — network setup omitted (ProudNet). -int Agent::Run() -{ - using clock = std::chrono::steady_clock; - std::printf("# Agent Startup #\n\n+ Prepare Startup\n"); - std::printf("\n # Agent Running... #\n"); - if (!opts_.killOnStart.empty()) platform::KillProcessByName(opts_.killOnStart); - - const auto t0 = clock::now(); - auto seconds = [&] { return std::chrono::duration(clock::now() - t0).count(); }; - bool autoOnPending = true; - double lastTick = 0; - while (running_) { - double now = seconds(); - if (opts_.autoServerOnDelay > 0 && now > opts_.autoServerOnDelay && autoOnPending) { - autoOnPending = false; - std::printf("Start Auto Server On. \n"); - AllServerOn(); - } - if (now - lastTick >= 0.1) lastTick = now; // 10 Hz tick: network update (not ported) - platform::SleepMs(1); - } - std::printf("+ Prepare Stop\n# Agent Stoped... #\n"); - return 0; -} - -} // namespace agent diff --git a/src/agent_release/agent.hpp b/src/agent_release/agent.hpp deleted file mode 100644 index d359b7b5..00000000 --- a/src/agent_release/agent.hpp +++ /dev/null @@ -1,82 +0,0 @@ -// agent.hpp — Linux port of the process-supervisor core of Agent_Release_x64.exe. -// Reconstructed from decomp/Agent_Release_x64/cpp/AgentProcessControl.cpp. -// Names are inferred (no PDB). See README.md for what is and is not ported. -#pragma once -#include -#include -#include -#include -#include -#include -#include - -namespace agent { - -// Per-server record (original: hash map at 0x140162d60, ServerEntry offsets -// +0x04 code, +0x0c type, +0xa4 pid, +0xc4 running, +0xd5 revive). -struct ServerEntry { - int32_t code = 0; - uint8_t type = 0; - pid_t pid = 0; - bool running = false; - bool revive = false; -}; - -// Server-type table (original: vector at 0x140162d58, type -> exe path). -struct ServerTypeInfo { - std::string exePath; // may include fixed arguments - std::string workDir; // original derives it from the exe path (FUN_14002fe90) -}; - -// Agent options (original: singleton at 0x140162d68). -struct Options { - std::string agentName = "AGENT"; // +0x030 - bool useCodeAsArgument = true; // +0x152 - bool reviveAll = false; // +0x171 - double autoServerOnDelay = 0.0; // +0x178, seconds; <= 0 disables - std::string killOnStart; // exe of server type 0x18 (identity UNKNOWN) -}; - -// Stand-in for the ProudNet RMI proxy to AgentManager -// (AGENT2AGENTMANAGER_PROTOCOL::Proxy, vtable slots +0x40 / +0x50). -// ProudNet is proprietary and the wire protocol is not yet decoded, so this -// interface only logs. Replace with a real transport once the protocol is known. -class IManagerSession { -public: - virtual ~IManagerSession() = default; - virtual void NotifyServerState(const ServerEntry& e) = 0; // slot +0x40 - virtual void NotifyServerStopped(const ServerEntry& e) = 0; // slot +0x50 - virtual void SendLog(const std::string& text) = 0; -}; - -class LoggingManagerSession : public IManagerSession { -public: - void NotifyServerState(const ServerEntry& e) override; - void NotifyServerStopped(const ServerEntry& e) override; - void SendLog(const std::string& text) override; -}; - -class Agent { -public: - Agent(Options opts, std::map types, - std::unique_ptr session); - - void AddServer(const ServerEntry& e); - void ServerOn(int32_t code); // 0x140008ea0 - void AllServerOn(); // 0x140009bd0 (inferred: ServerOn for every entry) - int Run(); // 0x1400037a0 MagiAgentServer::Run - void Stop() { running_ = false; } - -private: - void OnProcessExit(pid_t pid); // body of watcher thread 0x140008c90 - std::string BuildCommandLine(const ServerEntry& e) const; - - Options opts_; - std::map types_; - std::unique_ptr session_; - std::map servers_; - std::recursive_mutex mu_; // original has no visible lock here (UNKNOWN) - std::atomic running_{true}; -}; - -} // namespace agent diff --git a/src/agent_release/main.cpp b/src/agent_release/main.cpp deleted file mode 100644 index b7797d89..00000000 --- a/src/agent_release/main.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// main.cpp — entry point. The original reads option\*.xml (format not yet -// recovered); this port takes the equivalent settings on the command line. -#include "agent.hpp" -#include "platform.hpp" - -#include -#include -#include -#include - -static agent::Agent* g_agent = nullptr; -static void OnSignal(int) { if (g_agent) g_agent->Stop(); } - -static void Usage() -{ - std::printf( - "usage: agent_release [options] --server CODE:TYPE:REVIVE --type TYPE:EXE[:WORKDIR] ...\n" - " --auto-on SEC start all servers SEC seconds after startup\n" - " --revive-all relaunch any server that exits\n" - " --no-code-arg do not pass the server code as argv[1]\n" - " --kill-on-start EXE kill the first process named EXE before running\n" - " --name NAME agent name used in log messages\n"); -} - -int main(int argc, char** argv) -{ - agent::Options opts; - std::map types; - std::vector servers; - - for (int i = 1; i < argc; ++i) { - std::string a = argv[i]; - auto next = [&]() -> std::string { - if (i + 1 >= argc) { Usage(); std::exit(2); } - return argv[++i]; - }; - if (a == "--auto-on") opts.autoServerOnDelay = std::stod(next()); - else if (a == "--revive-all") opts.reviveAll = true; - else if (a == "--no-code-arg") opts.useCodeAsArgument = false; - else if (a == "--kill-on-start") opts.killOnStart = next(); - else if (a == "--name") opts.agentName = next(); - else if (a == "--type") { - std::string v = next(); - auto p1 = v.find(':'); - if (p1 == std::string::npos) { Usage(); return 2; } - auto p2 = v.find(':', p1 + 1); - agent::ServerTypeInfo t; - t.exePath = v.substr(p1 + 1, p2 == std::string::npos ? std::string::npos : p2 - p1 - 1); - if (p2 != std::string::npos) t.workDir = v.substr(p2 + 1); - types[static_cast(std::stoi(v.substr(0, p1)))] = t; - } else if (a == "--server") { - std::string v = next(); - agent::ServerEntry e; - int code = 0, type = 0, revive = 0; - if (std::sscanf(v.c_str(), "%d:%d:%d", &code, &type, &revive) < 2) { Usage(); return 2; } - e.code = code; e.type = static_cast(type); e.revive = revive != 0; - servers.push_back(e); - } else { Usage(); return a == "-h" || a == "--help" ? 0 : 2; } - } - - platform::SingleInstanceLock lock("RustyHearts_Agent"); // Global\RustyHearts_Agent - if (!lock.acquired()) return 1; - - agent::Agent ag(opts, types, std::make_unique()); - for (auto& e : servers) ag.AddServer(e); - g_agent = &ag; - std::signal(SIGINT, OnSignal); - std::signal(SIGTERM, OnSignal); - return ag.Run(); -} diff --git a/src/agent_release/meson.build b/src/agent_release/meson.build deleted file mode 100644 index 11ec7d75..00000000 --- a/src/agent_release/meson.build +++ /dev/null @@ -1,6 +0,0 @@ -threads = dependency('threads') - -executable('agent_release', - ['main.cpp', 'agent.cpp', 'platform.cpp'], - dependencies : threads, - install : false) diff --git a/src/agent_release/platform.cpp b/src/agent_release/platform.cpp deleted file mode 100644 index f34e71b3..00000000 --- a/src/agent_release/platform.cpp +++ /dev/null @@ -1,126 +0,0 @@ -// platform.cpp — Linux implementations; Win32 originals cited per function. -#include "platform.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -extern char** environ; - -namespace platform { - -SingleInstanceLock::SingleInstanceLock(const std::string& name) -{ - // "Global\\" kernel-object namespace -> machine-wide lock file in /tmp. - std::string path = "/tmp/" + name + ".lock"; - fd_ = ::open(path.c_str(), O_RDWR | O_CREAT | O_CLOEXEC, 0644); - if (fd_ < 0) { - std::printf("ERROR_ACCESS_DENIED!!! %s \n", path.c_str()); - } else if (::flock(fd_, LOCK_EX | LOCK_NB) != 0) { - std::printf("ERROR_ALREADY_EXISTS!!! %s \n", path.c_str()); - ::close(fd_); - fd_ = -1; - } - if (fd_ < 0) SleepMs(3000); // original sleeps 3 s before failing -} - -SingleInstanceLock::~SingleInstanceLock() -{ - if (fd_ >= 0) ::close(fd_); -} - -pid_t LaunchProcess(const std::string& commandLine, const std::string& workDir) -{ - std::istringstream in(commandLine); - std::vector args; - for (std::string a; in >> a;) args.push_back(a); - if (args.empty()) return 0; - std::vector argv; - for (auto& a : args) argv.push_back(a.data()); - argv.push_back(nullptr); - - posix_spawn_file_actions_t fa; - posix_spawn_file_actions_init(&fa); - if (!workDir.empty()) posix_spawn_file_actions_addchdir_np(&fa, workDir.c_str()); - posix_spawnattr_t attr; - posix_spawnattr_init(&attr); - posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSID); // ~ CREATE_NEW_CONSOLE - - pid_t pid = 0; - int rc = posix_spawnp(&pid, argv[0], &fa, &attr, argv.data(), environ); - posix_spawnattr_destroy(&attr); - posix_spawn_file_actions_destroy(&fa); - - if (rc != 0) { - std::printf("=======Server Fail=======\n"); - std::printf("Path\t: [%s] \n", workDir.c_str()); - std::printf("File\t: [%s] (%s)\n", commandLine.c_str(), std::strerror(rc)); - pid = 0; - } else { - std::printf("=======ServerOn=======\n"); - } - std::printf("//////////////////////////////////////////////////////////////////////////\n"); - SleepMs(1000); // kept: original sleeps 1 s after every launch attempt - return pid; -} - -void WatchProcess(pid_t pid, std::function onExit) -{ - // pid passed by value: avoids the original's stack-pointer race. - std::thread([pid, onExit = std::move(onExit)] { - int status = 0; - while (::waitpid(pid, &status, 0) < 0 && errno == EINTR) {} - onExit(pid); // waitpid reaps the child: no handle/zombie leak - }).detach(); -} - -static std::string ProcArgv0Basename(const char* pidDir) -{ - std::ifstream f(std::string("/proc/") + pidDir + "/cmdline", std::ios::binary); - std::string argv0; - std::getline(f, argv0, '\0'); - auto slash = argv0.find_last_of('/'); - return slash == std::string::npos ? argv0 : argv0.substr(slash + 1); -} - -bool KillProcessByName(const std::string& exeName) -{ - if (exeName.empty()) return false; - DIR* d = ::opendir("/proc"); - if (!d) return false; - bool killed = false; - while (dirent* e = ::readdir(d)) { - char* end = nullptr; - long pid = std::strtol(e->d_name, &end, 10); - if (*end != '\0' || pid <= 0 || pid == ::getpid()) continue; - if (::strcasecmp(ProcArgv0Basename(e->d_name).c_str(), exeName.c_str()) != 0) continue; - if (::kill(static_cast(pid), SIGKILL) == 0) { - std::printf("Process Kill.!!! [%s] \n", exeName.c_str()); - killed = true; - break; // original stops at the first match - } - } - ::closedir(d); - return killed; -} - -void SleepMs(unsigned ms) -{ - std::this_thread::sleep_for(std::chrono::milliseconds(ms)); -} - -} // namespace platform diff --git a/src/agent_release/platform.hpp b/src/agent_release/platform.hpp deleted file mode 100644 index 891a8718..00000000 --- a/src/agent_release/platform.hpp +++ /dev/null @@ -1,39 +0,0 @@ -// platform.hpp — Linux substitutes for the Win32 calls used by -// Agent_Release_x64.exe (see decomp/Agent_Release_x64/cpp/AgentProcessControl.cpp). -#pragma once -#include -#include -#include - -namespace platform { - -// Replaces CreateMutexW(L"Global\\RustyHearts_Agent") (0x1400100b0). -// Uses an exclusive flock() on a lock file; released automatically on exit. -class SingleInstanceLock { -public: - explicit SingleInstanceLock(const std::string& name); - ~SingleInstanceLock(); - bool acquired() const { return fd_ >= 0; } -private: - int fd_ = -1; -}; - -// Replaces CreateProcessW(..., CREATE_NEW_CONSOLE, ..., workDir) (0x1400094e0). -// commandLine is split on whitespace (the original passes one string to Windows). -// The child gets its own session (setsid) as the nearest analogue of a new console. -// Returns pid > 0, or 0 on failure (same contract as the original). -pid_t LaunchProcess(const std::string& commandLine, const std::string& workDir); - -// Replaces the watcher's GetExitCodeProcess polling loop (0x140008c90) with a -// blocking waitpid(). Calls onExit(pid) on a detached thread once the child exits. -void WatchProcess(pid_t pid, std::function onExit); - -// Replaces Toolhelp32 + OpenProcess + TerminateProcess (0x140009780). -// Scans /proc, matches basename of argv[0] case-insensitively, kills the FIRST -// match with SIGKILL (TerminateProcess is unconditional), returns true if killed. -bool KillProcessByName(const std::string& exeName); - -// Replaces Sleep(ms). -void SleepMs(unsigned ms); - -} // namespace platform diff --git a/src/meson.build b/src/meson.build deleted file mode 100644 index bced57da..00000000 --- a/src/meson.build +++ /dev/null @@ -1,7 +0,0 @@ -# Linux reconstructions of the Rusty Hearts server binaries. -# Each sub-folder ports one binary; see its README.md for provenance and gaps. -project('rusty-hearts-recon', 'cpp', - version : '0.1.0', - default_options : ['cpp_std=c++17', 'warning_level=3', 'buildtype=debugoptimized']) - -subdir('agent_release')