diff --git a/.gitignore b/.gitignore index 9e56d797..e31c7977 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ 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 4d46c224..7583082a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -45,6 +45,7 @@ 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 f01e5f5d..58cbfaf3 100644 --- a/decomp/Agent_Release_x64/evidence.md +++ b/decomp/Agent_Release_x64/evidence.md @@ -16,8 +16,6 @@ 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 deleted file mode 100644 index f3f96b03..00000000 --- a/decomp/Agent_Release_x64/porting.md +++ /dev/null @@ -1,55 +0,0 @@ -# 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 9257f9b7..6132f8e7 100644 --- a/decomp/DBCServer_Release_x64/evidence.md +++ b/decomp/DBCServer_Release_x64/evidence.md @@ -13,8 +13,6 @@ 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) | @@ -33,7 +31,7 @@ Porting spec (Win32 → Linux substitutions, behaviour to reproduce, original bu | 3 | The worker dispatches commands 1001–1317 through a jump table to `DBReq*` methods | O (disassembly) | `0x1400a8190`, `cmd_dispatch.tsv` | | 4 | Each `DBReq*` runs one stored procedure through `ADODB.Command` with named parameters, and maps recordset fields by name | O | `0x1400acbb0` (`up_create_character`) | | 5 | Four connection types: 1 WEB(`db_web`), 2 AUTH(`db_account`), 3 GAME(`db_game`), 4 GAME LOG(`db_game_log`). AUTH uses the WEB timeout (bug). Timeout 0 → 500. String length ≤255 | O | `0x1400a7aa0` (REA `ev_00545a3e…`) | -| 6 | Startup opens AUTH and GAME connections, allocates 1000-slot write-queue arrays (125 iterations × 8 pointers), and logs connect failures to `Error_ADO DB Connect.Log` | O | `0x140042cf0`, `0x1400a80c0` | +| 6 | Startup opens AUTH and GAME connections, allocates 125-slot write-queue arrays, and logs connect failures to `Error_ADO DB Connect.Log` | O | `0x140042cf0`, `0x1400a80c0` | | 7 | 210 of 262 RMIs map to a procedure. 7 of those procedures are missing from the shipped schema | O + D | `rmi_to_proc.tsv` | | 8 | Original source layout: `DBLobbyWriteQuery.cpp` ×28 plus `DBWriteQueryServerOption.cpp` | O (`__FILE__` strings) | `dbreq_methods.tsv` | | 9 | The option-loader layout equals MessageServer's (same offsets for every element) | O | `0x140156650`, `0x140155420` | diff --git a/decomp/DBCServer_Release_x64/porting.md b/decomp/DBCServer_Release_x64/porting.md deleted file mode 100644 index 0f6eb562..00000000 --- a/decomp/DBCServer_Release_x64/porting.md +++ /dev/null @@ -1,91 +0,0 @@ -# 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 deleted file mode 100644 index 443732a5..00000000 --- a/decomp/DBCServer_Release_x64/procs_used.tsv +++ /dev/null @@ -1,1215 +0,0 @@ -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/scripts/gen_dbc_tables.py b/decomp/scripts/gen_dbc_tables.py deleted file mode 100644 index f52c5406..00000000 --- a/decomp/scripts/gen_dbc_tables.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python3 -"""Join the DBCServer RMI -> procedure map with procedure parameters. - -Inputs (derived, regenerable): - decomp/DBCServer_Release_x64/rmi_to_proc.tsv RMI -> cmd -> procedures - decomp/schema//routines.tsv procedure parameters -Output: - 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, '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 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], r[4], r[5], r[6])) - -rmi = rows(f'{ROOT}/decomp/DBCServer_Release_x64/rmi_to_proc.tsv') -hdr = rmi[0] -callers = {} -for r in (dict(zip(hdr, x)) for x in rmi[1:]): - for p in filter(None, r['procs'].split(',')): - callers.setdefault(p.lower(), (p, []))[1].append(r['rmi_name']) - -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/DATABASE.md b/docs/DATABASE.md index 2b84d122..4d3a001e 100644 --- a/docs/DATABASE.md +++ b/docs/DATABASE.md @@ -114,7 +114,7 @@ Further details: `Error_ADO DB Connect.Log` (`DBC:0x1400a80c0`). - Startup (`DBC:0x140042cf0`) opens a type-2 (AUTH) and a type-3 (GAME) connection for the server itself. It also allocates write-queue arrays of - 1000 slots (a 0x1f48-byte block: 125 loop iterations × 8 pointers). + 125 slots. **Which connection each procedure uses?** The connection object passed to each `DBReq` method hasn't been traced yet. The **I** answer is: the database that diff --git a/docs/WORKFLOW.md b/docs/WORKFLOW.md index 108af8fa..1e9816b1 100644 --- a/docs/WORKFLOW.md +++ b/docs/WORKFLOW.md @@ -169,15 +169,19 @@ In `decomp//`: - Mark every name as inferred. - Record the original bugs you notice (leaks, races). -## 7. Porting spec +## 7. Port to Linux -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. +`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. ## 8. Close @@ -195,5 +199,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 -- [ ] `cpp/` lift and `porting.md` updated, if in scope +- [ ] Lift and Linux port updated, if in scope - [ ] Evidence bundle exported; REA session closed diff --git a/src/README.md b/src/README.md new file mode 100644 index 00000000..19fd4c27 --- /dev/null +++ b/src/README.md @@ -0,0 +1,52 @@ +# 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 new file mode 100644 index 00000000..8b1b2e30 --- /dev/null +++ b/src/agent_release/README.md @@ -0,0 +1,65 @@ +# 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 new file mode 100644 index 00000000..8a394863 --- /dev/null +++ b/src/agent_release/agent.cpp @@ -0,0 +1,125 @@ +// 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 new file mode 100644 index 00000000..d359b7b5 --- /dev/null +++ b/src/agent_release/agent.hpp @@ -0,0 +1,82 @@ +// 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 new file mode 100644 index 00000000..b7797d89 --- /dev/null +++ b/src/agent_release/main.cpp @@ -0,0 +1,70 @@ +// 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 new file mode 100644 index 00000000..11ec7d75 --- /dev/null +++ b/src/agent_release/meson.build @@ -0,0 +1,6 @@ +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 new file mode 100644 index 00000000..f34e71b3 --- /dev/null +++ b/src/agent_release/platform.cpp @@ -0,0 +1,126 @@ +// 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 new file mode 100644 index 00000000..891a8718 --- /dev/null +++ b/src/agent_release/platform.hpp @@ -0,0 +1,39 @@ +// 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 new file mode 100644 index 00000000..bced57da --- /dev/null +++ b/src/meson.build @@ -0,0 +1,7 @@ +# 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') diff --git a/third-party/README.md b/third-party/README.md index 466e234a..ca89f396 100644 --- a/third-party/README.md +++ b/third-party/README.md @@ -95,37 +95,6 @@ ProudNet is not a separate DLL; it is linked into the server EXEs. - To re-fetch: `git archive ProudNetLibSetup-1.8.00001 ProudNet/include ProudNet-License-En.txt` from that repo into `_local/proudnet-1.8.00001/`. -- **`github.com/Nettention/ProudChatSDK` (checked 2026-10-15, `main` = tag - `1.1.0001`, commit `e0d9d6b8`).** - - **Contents:** bundles ProudNet **1.8.58849**: 185 headers, plus prebuilt - libraries for Windows (v110/v120/v140, dll), Android, iOS and - **x86_64 Linux** (`libProudNetServer.so/.a`, `libProudNetClient.so/.a`; - `__xstat` → old glibc). - - **Licence:** the repo's `LICENSE` (MIT) covers the chat SDK only; - `ProudNet/` keeps the same proprietary EULA (§1.2b). Nothing from it is - stored in this repo. - - **Headers:** identical to 1.8.00001 apart from the version banner and - translated doc comments in `ErrorType.h`. They add one error code and give - no new information beyond `_local/proudnet-1.8.00001`. - - **Compatibility with the 2013 ProudNet linked into DBCServer:** - - | Aspect | Result | Type | - |---|---|---| - | PIDL proxy ABI | Matches: `IRmiProxy` keeps `m_signature` at +0x14, which the generated constructor checks against 1 (`MS:0x140008e20`). `RmiID` is still `uint16_t`. The `PIDL compiler is incompatible` and `CStartServerParameter::m_(fast)encryptedMessageKeyLength` strings appear in both | O | - | Internal implementation | 29 of DBCServer's 63 `Proud::` RTTI classes are absent from the 1.8.58849 Linux libraries' symbols, e.g. `CTcpLayer_C`, `CUdpSocket_S`, `CUpnp`, `ICompletionPortEventSink` | O | - | Internal net version | **2013 build: 196978 (0x30172)**, the global at `DBC:0x140344d40`. It is copied into the server object at +0x220 (`DBC:0x14018fa70`, instruction at `0x14019018d`) and into the client objects (`0x1401dd3e0`, `0x1401df000`). In the connect handshake (`DBC:0x1401a8110`, `NotifyServerConnectionRequestData`) the server reads a credential byte array, a 16-byte protocol GUID and a 4-byte int, and accepts only if the GUID **and** the int equal its own. The same value appears exactly once in `.data` of all 16 EXEs (O). **1.8.58849: 197144 (0x30218)** (`CNetConfig::InternalNetVersion`, rejected via `NotifyProtocolVersionMismatch`). The values differ by 166 | O | - | Licensing | 1.8 also contains license and activation checks (`CPNLic`, `NotifyLicenseMismatch`) | S | - - - **Conclusion (I):** - - **Source-level:** usable as a header/ABI reference for PIDL-generated - stubs and proxies. - - **Wire-level:** **not** compatible with the original 2013 peers. The - internal net versions differ (196978 vs 197144), and the 2013 handshake - requires an exact match. This is O for the 2013 server side; I for the - 1.8 side, which was not traced beyond the symbol name. - - **Linking:** linking `libProudNetServer.so` into `src/dbc_server` - would require accepting the EULA and a licence, and would give a - ProudNet 1.8 server that the original binaries likely cannot talk to. Vendor attributions for XTrap (WiseLogic) and Apex are inferred from DLL names, not corroborated by decompilation.