chore: Removes docs (#2397)

This commit is contained in:
Kamron Batman 2026-03-29 20:45:51 -07:00 committed by GitHub
parent 4698299ea7
commit 7c8d02e63a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
90 changed files with 0 additions and 25845 deletions

View file

@ -1,40 +0,0 @@
name: Updates Docs
on:
repository_dispatch:
types: [docs]
workflow_dispatch:
jobs:
update-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Install mkdocs-material
run: pip install mkdocs-material
- name: Build mkdocs site
run: mkdocs build --strict
- name: Build packets documentation
shell: pwsh
run: ./docs/tools/build-packets.ps1
- name: Copy commands and packets to site
run: |
cp ./docs/commands/commands.html ./site/
cp ./docs/packets/packets.html ./site/
- name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: ./site
branch: gh-pages
clean: true
clean-exclude: |
.nojekyll

View file

@ -1 +0,0 @@
modernuo.com

View file

@ -1,112 +0,0 @@
:root {
--muo-gold: #d5bf74;
--muo-gold-compl: #748ad5;
--muo-gold-analog: #bf74d5;
--muo-green: #77d574;
--muo-gold-a-link: #947a40;
/* default */
--md-default-fg-color: #212121;
--md-default-bg-color: #ffffff;
/* primary */
--md-primary-fg-color: #212121;
--md-primary-bg-color: #ffffff;
--md-primary-fg-color--dark: #212121;
/* accent */
--md-accent-fg-color: var(--muo-gold);
}
:root > * {
--md-code-bg-color: #212121;
--md-code-fg-color: rgba(255, 255, 255, 0.7);
--md-typeset-a-color: var(--muo-gold-a-link);
--md-footer-fg-color: #ffffff;
--md-footer-bg-color: #212121;
--md-footer-bg-color--dark: #212121;
--md-code-hl-color: var(--muo-gold);
--md-code-hl-number-color: var(--muo-gold-analog);
--md-code-hl-special-color: var(--md-default-bg-color--lighter);
--md-code-hl-function-color: var(--muo-gold-compl);
--md-code-hl-constant-color: rgba(255, 255, 255, 0.7);
--md-code-hl-keyword-color: var(--muo-gold);
--md-code-hl-string-color: var(--muo-green);
--md-code-hl-name-color: rgba(255, 255, 255, 0.7);
--md-code-hl-operator-color: var(--muo-gold-a-link);
--md-code-hl-punctuation-color: var(--muo-gold-a-link);
--md-code-hl-comment-color: var(--md-default-bg-color--lighter);
--md-code-hl-generic-color: var(--muo-gold-compl);
--md-code-hl-variable-color: var(--muo-gold-compl);
}
.md-tabs__link--active,
.md-tabs__link:focus,
.md-tabs__link:hover,
.md-footer-nav__link:focus,
.md-footer-nav__link:hover,
.md-header-nav__button:focus,
.md-header-nav__button:hover,
.md-source:hover,
html .md-footer-meta.md-typeset a:focus,
html .md-footer-meta.md-typeset a:hover {
color: var(--muo-gold);
opacity: 1;
}
@media screen and (max-width: 76.1875em) {
.md-nav--primary .md-nav__title[for=__drawer] .md-nav__button {
left: 3.75rem;
}
.md-nav--primary .md-nav__title {
padding: 3rem 3.75rem 0.2rem
}
}
.windows {
color: #00adef;
}
.apple {
color: #000000;
}
.ubuntu {
color: #e95420;
}
.linuxmint {
color: #87cF3e;
}
.debian {
color: #d70a53;
}
.fedora {
color: #3c6eb4;
}
.centos {
color: #212078;
}
.redhat {
color: #be0000;
}
.codehilitetable .linenodiv pre, .highlighttable .linenodiv pre {
color: var(--md-default-bg-color);
}
.codehilitetable .linenodiv, .highlighttable .linenodiv {
box-shadow: -0.05rem 0 var(--md-default-bg-color) inset;
opacity: 0.7;
}

View file

@ -1,101 +0,0 @@
/* Remove spacing, as we cannot hide it completely */
.md-main__inner {
margin: 0;
}
/* Hide main content for now */
.md-content {
display: none;
}
/* Hide table of contents */
@media screen and (min-width: 60em) {
.md-sidebar--secondary {
display: none;
}
}
/* Hide navigation */
@media screen and (min-width: 76.25em) {
.md-sidebar--primary {
display: none;
}
}
.md-main {
background: var(--md-default-fg-color);
}
.md-typeset h1 {
color: var(--md-default-bg-color--light);
}
.tx-container {
background: var(--md-default-fg-color);
padding-top: 1rem;
}
.tx-hero {
display: flex;
align-content: center;
justify-content: center;
flex-direction: column;
min-height: 400px;
margin: 0 0.8rem;
}
.tx-hero div {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
.tx-hero__image {
text-align: center;
}
.tx-hero__content {
text-align: center;
}
.tx-hero__content .md-button {
background-color: transparent;
color: var(--md-primary-bg-color--light);
border-color: var(--md-primary-bg-color--light);
}
.tx-hero__content .md-button--primary {
background-color: var(--muo-gold);
color: var(--md-primary-fg-color);
border-color: transparent;
}
.tx-hero__content .md-button:hover {
border-color: transparent;
color: var(--md-primary-fg-color);
background-color: var(--md-primary-bg-color);
}
.tx-hero__content .md-button--primary:hover {
border-color: var(--md-primary-bg-color--light);
}
/*@media screen and (max-width: 60em)*/
/*{*/
/* .tx-hero__image img {*/
/* max-width: 64px;*/
/* }*/
/*}*/
@media screen and (max-width: 60em)
{
.tx-hero__image img {
max-width: 128px;
}
}
@media screen and (min-width: 60em)
{
.tx-hero__image img {
max-width: 200px;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -1 +0,0 @@
<svg height="529.15997" viewBox="0 0 529.15997 529.15997" width="529.15997" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m2512.85 434.602c664.19 226.828 1108.92 846.878 1108.92 1549.778 0 506.38-229.59 976.52-629.89 1289.87l-48.49 37.96v-1419.24c0-285.63-16.44-484.51-48.85-591.12-31.25-102.71-92.53-204.08-182.15-301.28-59.65-64.691-126.61-118.961-199.54-161.781v2695.511l-20.68 6.77c-163.79 53.55-334.64 80.71-507.81 80.71-116.47 0-232.75-12.43-346.2-36.98v323.08c114.09 20.48 230.43 30.86 346.2 30.86 1077.66 0 1954.37-876.72 1954.37-1954.36 0-877.2-584.34-1645.45-1425.88-1881.771z"/></clipPath><linearGradient id="b" gradientTransform="matrix(0 -3981.4 -3981.4 0 2788.45 3927.9)" gradientUnits="userSpaceOnUse" spreadMethod="pad" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#bfbdbb"/><stop offset=".248485" stop-color="#fbfcfc"/><stop offset=".484848" stop-color="#959696"/><stop offset=".70303" stop-color="#f0f0f0"/><stop offset="1" stop-color="#8d8d8d"/></linearGradient><clipPath id="c"><path d="m1984.36 30.0117c-1077.637 0-1954.36 876.7073-1954.36 1954.3683 0 877.19 584.355 1645.42 1425.89 1881.75v-2120.73c0-174.88 16.68-297.63 50.98-375.3 36.14-81.88 96.23-147.98 178.61-196.45 80.54-47.37 177.6-71.39 288.48-71.39 116.83 0 219.8 26.54 306.04 78.89 12.05 7.32 23.7 15.02 34.9 23.06v-449.19c-98.23-27.68-208.6-41.7-328.46-41.7-206.52 0-387.97 45.481-539.3 135.2-150.47 89.179-259.14 201.46-323.02 333.71-65.54 135.72-98.77 374.85-98.77 710.74v1419.24l-48.491-37.96c-400.308-313.35-629.89-783.49-629.89-1289.87 0-902.87 734.531-1637.411 1637.391-1637.411 111.23 0 222.24 11.269 330.54 33.543v-322.4534c-108.89-18.6289-219.96-28.0469-330.54-28.0469z"/></clipPath><linearGradient id="d" gradientTransform="matrix(0 -3981.4 -3981.4 0 1172.45 3927.91)" gradientUnits="userSpaceOnUse" spreadMethod="pad" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#ae9964"/><stop offset=".248485" stop-color="#fbe383"/><stop offset=".484848" stop-color="#8d7036"/><stop offset=".714286" stop-color="#c9b14e"/><stop offset="1" stop-color="#7f6740"/></linearGradient><g transform="matrix(.13333333 0 0 -.13333333 0 529.16)"><path d="m1984.36 3968.74c-128.6 0-254.34-12.45-376.2-35.93v-385.64c120.72 29.1 246.68 44.61 376.2 44.61 173.94 0 341.47-27.89 498.49-79.23v-2724.37c92.71 47.199 177.2 111.371 251.6 192.058 92.7 100.542 156.23 205.822 188.8 312.892 33.27 109.43 50.14 311.26 50.14 599.84v1357.66c376.17-294.47 618.38-752.6 618.38-1266.25 0-712.39-465.88-1317.919-1108.92-1528.189v-392.7613c853.7 221.6793 1485.88 998.8603 1485.88 1920.9503 0 1094.17-890.17 1984.36-1984.37 1984.36" fill="#dfdfdd"/><g clip-path="url(#a)"><path d="m2512.85 434.602c664.19 226.828 1108.92 846.878 1108.92 1549.778 0 506.38-229.59 976.52-629.89 1289.87l-48.49 37.96v-1419.24c0-285.63-16.44-484.51-48.85-591.12-31.25-102.71-92.53-204.08-182.15-301.28-59.65-64.691-126.61-118.961-199.54-161.781v2695.511l-20.68 6.77c-163.79 53.55-334.64 80.71-507.81 80.71-116.47 0-232.75-12.43-346.2-36.98v323.08c114.09 20.48 230.43 30.86 346.2 30.86 1077.66 0 1954.37-876.72 1954.37-1954.36 0-877.2-584.34-1645.45-1425.88-1881.771v331.993" fill="url(#b)"/></g><path d="m1973.96 1132.26c-105.46 0-197.39 22.62-273.26 67.24-76.85 45.22-132.83 106.7-166.38 182.71-32.59 73.78-48.43 192.58-48.43 363.19v1226.51 540.64 392.76c-853.699-221.68-1485.89-998.85-1485.89-1920.93 0-1094.2 890.184-1984.3682812 1984.36-1984.3682812 123.1 0 243.58 11.3476812 360.54 32.9179812v384.8203c-115.94-26.668-236.61-40.781-360.54-40.781-886.32 0-1607.391 721.081-1607.391 1607.411 0 513.65 242.207 971.78 618.383 1266.25v-1357.66c0-340.44 34.228-583.96 101.758-723.78 66.48-137.66 179.09-254.221 334.73-346.471 156.02-92.489 342.61-139.387 554.6-139.387 132.62 0 252.67 16.719 358.46 49.25v535.068c-23.54-22.21-50.33-42.57-80.46-60.85-81.5-49.46-179.23-74.54-290.48-74.54" fill="#e9cf72"/><g clip-path="url(#c)"><path d="m1984.36 30.0117c-1077.637 0-1954.36 876.7073-1954.36 1954.3683 0 877.19 584.355 1645.42 1425.89 1881.75v-2120.73c0-174.88 16.68-297.63 50.98-375.3 36.14-81.88 96.23-147.98 178.61-196.45 80.54-47.37 177.6-71.39 288.48-71.39 116.83 0 219.8 26.54 306.04 78.89 12.05 7.32 23.7 15.02 34.9 23.06v-449.19c-98.23-27.68-208.6-41.7-328.46-41.7-206.52 0-387.97 45.481-539.3 135.2-150.47 89.179-259.14 201.46-323.02 333.71-65.54 135.72-98.77 374.85-98.77 710.74v1419.24l-48.491-37.96c-400.308-313.35-629.89-783.49-629.89-1289.87 0-902.87 734.531-1637.411 1637.391-1637.411 111.23 0 222.24 11.269 330.54 33.543v-322.4534c-108.89-18.6289-219.96-28.0469-330.54-28.0469" fill="url(#d)"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -1 +0,0 @@
<svg height="700pt" preserveAspectRatio="xMidYMid meet" viewBox="0 0 700 700" width="700pt" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.1 0 0 -.1 0 700)"><path d="m3278 6996c-1-2-41-6-88-10-98-8-120-11-252-33-87-14-98-18-99-37-7-128-2-656 6-656 6 0 28 5 50 10 55 12 89 18 170 31 39 5 84 12 100 15 51 8 245 18 350 18 249 0 499-35 752-105l113-31 2-2404 3-2403 85 52c133 81 196 131 315 251 170 173 298 369 360 557 28 84 27 77 48 209 46 276 50 435 51 1937 1 727 4 1324 6 1327 13 12 304-264 415-394 161-189 328-458 442-715 28-64 118-318 128-362 2-10 15-67 29-128 14-60 27-128 31-150 3-22 7-53 10-70 12-75 15-106 22-190 12-155 6-443-11-545-3-14-7-47-11-75-3-27-8-59-10-70-3-11-7-31-9-45-66-371-224-753-446-1076-250-365-578-664-977-888-123-69-360-174-444-196l-39-11v-348-349l113 33c454 136 815 328 1231 655 56 43 241 218 313 293 479 507 792 1130 912 1817 11 63 23 142 26 175 4 33 9 71 11 85 9 48 11 525 4 605-17 176-22 220-25 225-2 3-6 30-10 60-7 55-58 298-75 355-98 332-208 594-352 839-391 663-964 1169-1666 1469-297 127-647 220-957 253-27 3-63 8-80 10-34 6-541 14-547 10z"/><path d="m2585 6879c-96-22-409-132-429-150-6-5-16-9-23-9-20 0-297-139-404-203-260-155-464-313-675-522-184-183-222-226-344-386-288-382-491-802-603-1254-77-309-102-518-102-860 1-194 7-327 20-406 2-13 6-46 10-74 9-76 16-116 25-160 5-22 11-53 14-70 29-160 113-433 193-625 142-346 374-711 633-1000 92-102 273-277 359-346 13-10 28-24 35-29 51-48 406-295 422-295 2 0 23-12 45-26 59-37 278-145 389-192 269-114 649-215 920-246 292-34 694-28 948 13 37 6 78 13 92 15l25 3v338l1 337-36-5c-19-3-89-15-155-26-230-39-591-46-795-15-315 47-550 113-799 223-186 83-415 217-556 328-16 13-35 27-40 31-90 64-340 307-431 417-303 367-504 781-597 1230-22 106-29 144-43 255-22 166-22 556 0 666 2 12 7 45 11 75 7 58 44 236 69 334 33 132 126 375 197 517 61 121 221 385 248 408 3 3 26 32 50 65 25 33 47 62 50 65s40 43 81 89c62 70 127 136 234 237 16 14 126 104 129 104 1 0 2-593 3-1318 1-1162 5-1521 19-1612 2-14 6-56 10-95 3-38 8-81 10-95s7-45 10-70c48-362 168-617 395-839 261-255 616-426 989-475 281-37 603-21 860 43 46 12 84 21 85 21s2 211 1 469c0 311-3 467-10 463-5-3-28-20-50-37-49-39-161-105-179-105-6 0-16-4-22-9-13-14-147-50-229-62-121-18-307-12-400 13-22 5-47 12-55 13-36 8-103 36-166 70-220 119-344 305-379 565-3 25-8 61-12 80-3 19-8 901-10 1960s-4 1981-6 2050l-2 126z"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -1,33 +0,0 @@
---
title: Creating a build
---
# Creating a build
The server software must be built before it can be run.
=== "Windows"
Using _windows terminal_, _git bash_, or _powershell_, run:
```bash
./publish.cmd <release|debug> <os> <arch>
```
=== "OSX/Linux"
Using _terminal_, run:
```bash
./publish.sh <release|debug> <os> <arch>
```
<br><br>
`os` (_Optional_)<br>
The operating system to build the server against. If not specified then the server will be built for the same operating system.
:fontawesome-brands-windows:{: .windows } `win`<br>
:fontawesome-brands-apple:{: .apple } `osx`<br>
:fontawesome-brands-linux:{: .linux } `linux`<br>
<br><br>
`arch` (_Optional_)<br>
The architecture to build the server against. If not specified then the server will be built for x64.
`x64`<br>
`arm64`<br>

File diff suppressed because it is too large Load diff

View file

@ -1,4 +0,0 @@
---
title: Home
template: home.html
---

View file

@ -1,54 +0,0 @@
---
title: Installation
---
# Installation
=== "Windows"
### Prerequisites
1. Download and install the latest [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)
1. Download and install from [here](https://git-scm.com/download/win)
!!! Tip
Use [Windows Terminal](https://learn.microsoft.com/en-us/windows/terminal/install) as your command prompt.
### Install ModernUO
1. Navigate to the folder where you want to install ModernUO.
1. Using _Windows Terminal_ run:
```bash
git clone https://github.com/modernuo/modernuo
cd modernuo
```
=== "OSX"
### Prerequisites
1. Download and install the latest [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0).
1. Using _terminal_, install [homebrew](https://brew.sh) and git:
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install git
```
### Install ModernUO
1. Using _terminal_, navigate to the folder where you want to install ModernUO and run:
```bash
git clone https://github.com/modernuo/modernuo
cd modernuo
```
=== "Linux"
### Prerequisites
1. Download and install the latest [.NET 10 SDK](https://docs.microsoft.com/en-us/dotnet/core/install/linux).
1. Using _bash_, install git:
```bash
sudo apt update && sudo apt install git
```
!!! Note
The command to install git might be different for your flavor of linux. Consult your local Google search for answers.
### Install ModernUO
1. Using _bash_, navigate to the folder where you want to install ModernUO and run:
```bash
git clone https://github.com/modernuo/modernuo
cd modernuo
```

View file

@ -1 +0,0 @@
<svg height="529.15997" viewBox="0 0 529.15997 529.15997" width="529.15997" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m2512.85 434.602c664.19 226.828 1108.92 846.878 1108.92 1549.778 0 506.38-229.59 976.52-629.89 1289.87l-48.49 37.96v-1419.24c0-285.63-16.44-484.51-48.85-591.12-31.25-102.71-92.53-204.08-182.15-301.28-59.65-64.691-126.61-118.961-199.54-161.781v2695.511l-20.68 6.77c-163.79 53.55-334.64 80.71-507.81 80.71-116.47 0-232.75-12.43-346.2-36.98v323.08c114.09 20.48 230.43 30.86 346.2 30.86 1077.66 0 1954.37-876.72 1954.37-1954.36 0-877.2-584.34-1645.45-1425.88-1881.771z"/></clipPath><linearGradient id="b" gradientTransform="matrix(0 -3981.4 -3981.4 0 2788.45 3927.9)" gradientUnits="userSpaceOnUse" spreadMethod="pad" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#bfbdbb"/><stop offset=".248485" stop-color="#fbfcfc"/><stop offset=".484848" stop-color="#959696"/><stop offset=".70303" stop-color="#f0f0f0"/><stop offset="1" stop-color="#8d8d8d"/></linearGradient><clipPath id="c"><path d="m1984.36 30.0117c-1077.637 0-1954.36 876.7073-1954.36 1954.3683 0 877.19 584.355 1645.42 1425.89 1881.75v-2120.73c0-174.88 16.68-297.63 50.98-375.3 36.14-81.88 96.23-147.98 178.61-196.45 80.54-47.37 177.6-71.39 288.48-71.39 116.83 0 219.8 26.54 306.04 78.89 12.05 7.32 23.7 15.02 34.9 23.06v-449.19c-98.23-27.68-208.6-41.7-328.46-41.7-206.52 0-387.97 45.481-539.3 135.2-150.47 89.179-259.14 201.46-323.02 333.71-65.54 135.72-98.77 374.85-98.77 710.74v1419.24l-48.491-37.96c-400.308-313.35-629.89-783.49-629.89-1289.87 0-902.87 734.531-1637.411 1637.391-1637.411 111.23 0 222.24 11.269 330.54 33.543v-322.4534c-108.89-18.6289-219.96-28.0469-330.54-28.0469z"/></clipPath><linearGradient id="d" gradientTransform="matrix(0 -3981.4 -3981.4 0 1172.45 3927.91)" gradientUnits="userSpaceOnUse" spreadMethod="pad" x1="0" x2="1" y1="0" y2="0"><stop offset="0" stop-color="#ae9964"/><stop offset=".248485" stop-color="#fbe383"/><stop offset=".484848" stop-color="#8d7036"/><stop offset=".714286" stop-color="#c9b14e"/><stop offset="1" stop-color="#7f6740"/></linearGradient><g transform="matrix(.13333333 0 0 -.13333333 0 529.16)"><path d="m1984.36 3968.74c-128.6 0-254.34-12.45-376.2-35.93v-385.64c120.72 29.1 246.68 44.61 376.2 44.61 173.94 0 341.47-27.89 498.49-79.23v-2724.37c92.71 47.199 177.2 111.371 251.6 192.058 92.7 100.542 156.23 205.822 188.8 312.892 33.27 109.43 50.14 311.26 50.14 599.84v1357.66c376.17-294.47 618.38-752.6 618.38-1266.25 0-712.39-465.88-1317.919-1108.92-1528.189v-392.7613c853.7 221.6793 1485.88 998.8603 1485.88 1920.9503 0 1094.17-890.17 1984.36-1984.37 1984.36" fill="#dfdfdd"/><g clip-path="url(#a)"><path d="m2512.85 434.602c664.19 226.828 1108.92 846.878 1108.92 1549.778 0 506.38-229.59 976.52-629.89 1289.87l-48.49 37.96v-1419.24c0-285.63-16.44-484.51-48.85-591.12-31.25-102.71-92.53-204.08-182.15-301.28-59.65-64.691-126.61-118.961-199.54-161.781v2695.511l-20.68 6.77c-163.79 53.55-334.64 80.71-507.81 80.71-116.47 0-232.75-12.43-346.2-36.98v323.08c114.09 20.48 230.43 30.86 346.2 30.86 1077.66 0 1954.37-876.72 1954.37-1954.36 0-877.2-584.34-1645.45-1425.88-1881.771v331.993" fill="url(#b)"/></g><path d="m1973.96 1132.26c-105.46 0-197.39 22.62-273.26 67.24-76.85 45.22-132.83 106.7-166.38 182.71-32.59 73.78-48.43 192.58-48.43 363.19v1226.51 540.64 392.76c-853.699-221.68-1485.89-998.85-1485.89-1920.93 0-1094.2 890.184-1984.3682812 1984.36-1984.3682812 123.1 0 243.58 11.3476812 360.54 32.9179812v384.8203c-115.94-26.668-236.61-40.781-360.54-40.781-886.32 0-1607.391 721.081-1607.391 1607.411 0 513.65 242.207 971.78 618.383 1266.25v-1357.66c0-340.44 34.228-583.96 101.758-723.78 66.48-137.66 179.09-254.221 334.73-346.471 156.02-92.489 342.61-139.387 554.6-139.387 132.62 0 252.67 16.719 358.46 49.25v535.068c-23.54-22.21-50.33-42.57-80.46-60.85-81.5-49.46-179.23-74.54-290.48-74.54" fill="#e9cf72"/><g clip-path="url(#c)"><path d="m1984.36 30.0117c-1077.637 0-1954.36 876.7073-1954.36 1954.3683 0 877.19 584.355 1645.42 1425.89 1881.75v-2120.73c0-174.88 16.68-297.63 50.98-375.3 36.14-81.88 96.23-147.98 178.61-196.45 80.54-47.37 177.6-71.39 288.48-71.39 116.83 0 219.8 26.54 306.04 78.89 12.05 7.32 23.7 15.02 34.9 23.06v-449.19c-98.23-27.68-208.6-41.7-328.46-41.7-206.52 0-387.97 45.481-539.3 135.2-150.47 89.179-259.14 201.46-323.02 333.71-65.54 135.72-98.77 374.85-98.77 710.74v1419.24l-48.491-37.96c-400.308-313.35-629.89-783.49-629.89-1289.87 0-902.87 734.531-1637.411 1637.391-1637.411 111.23 0 222.24 11.269 330.54 33.543v-322.4534c-108.89-18.6289-219.96-28.0469-330.54-28.0469" fill="url(#d)"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1,55 +0,0 @@
{% extends "main.html" %}
{% block extrahead %}
<!-- Extra stylesheets -->
<link
rel="stylesheet"
href="{{ 'assets/stylesheets/home_overrides.css' | url }}"
/>
{% endblock %}
<!-- Render hero under tabs -->
{% block tabs %}
{{ super() }}
<!-- Hero for landing page -->
<section class="tx-container">
<div class="md-grid md-typeset">
<div class="tx-hero">
<div class="tx-hero__image">
<img
src="/branding/logo.svg"
alt=""
draggable="false"
>
</div>
<!-- Hero content -->
<div class="tx-hero__content">
<h1>Ultima Online Server Emulator for the modern era!</h1>
<a
href="{{ page.next_page.url | url }}"
title="{{ page.next_page.title | striptags }}"
class="md-button md-button--primary"
>
Get started
</a>
<a
href="{{ config.repo_url }}"
title="{{ lang.t('source.link.title') }}"
class="md-button"
>
Go to GitHub
</a>
</div>
</div>
</div>
</section>
{% endblock %}
<!-- Content -->
{% block content %}{% endblock %}
<!-- Application footer -->
{% block footer %}
{% include "partials/footer.html" %}
{% endblock %}

View file

@ -1,43 +0,0 @@
{% extends "base.html" %}
<!-- Custom front matter -->
{% block extrahead %}
<!-- Determine title -->
{% set title = config.site_name %}
{% if page and page.title and not page.is_homepage %}
{% set title = config.site_name ~ " - " ~ page.title | striptags %}
{% endif %}
<!-- The image needs to have an absolute URL -->
{% set image = config.site_url ~ '/branding/android-chrome-512x512.png' %}
<!-- Open graph meta tags -->
<meta property="og:type" content="website" />
<meta property="og:title" content="{{ title }}" />
<meta property="og:description" content="{{ config.site_description }}" />
<meta property="og:url" content="{{ page.canonical_url }}" />
<meta property="og:image" content="{{ image }}" />
<meta property="og:image:type" content="image/png" />
<meta property="og:image:width" content="512" />
<meta property="og:image:height" content="512" />
<!-- Twitter meta tags -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@modernuo" />
<meta name="twitter:creator" content="@modernuo" />
<meta name="twitter:title" content="{{ title }}" />
<meta name="twitter:description" content="{{ config.site_description }}" />
<meta name="twitter:image" content="{{ image }}" />
{% endblock %}
<!-- Content -->
{% block content %}
{{ super() }}
<!-- Content footer -->
<footer class="tx-content__footer md-typeset">
</footer>
{% endblock %}

View file

@ -1,52 +0,0 @@
{#-
This file was automatically generated - do not edit
-#}
{% import "partials/language.html" as lang with context %}
<footer class="md-footer">
{% if page.previous_page or page.next_page %}
<nav class="md-footer__inner md-grid" aria-label="{{ lang.t('footer.title') }}">
{% if page.previous_page %}
<a href="{{ page.previous_page.url | url }}" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
{% include ".icons/material/arrow-left.svg" %}
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
{{ lang.t("footer.previous") }}
</span>
{{ page.previous_page.title }}
</div>
</div>
</a>
{% endif %}
{% if page.next_page %}
<a href="{{ page.next_page.url | url }}" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
{{ lang.t("footer.next") }}
</span>
{{ page.next_page.title }}
</div>
</div>
<div class="md-footer__button md-icon">
{% include ".icons/material/arrow-right.svg" %}
</div>
</a>
{% endif %}
</nav>
{% endif %}
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
{% if config.copyright %}
<div class="md-footer-copyright__highlight">
{{ config.copyright }}
</div>
{% endif %}
</div>
{% include "partials/social.html" %}
</div>
</div>
</footer>

View file

@ -1,69 +0,0 @@
<!--
Copyright (c) 2016-2020 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Main navigation -->
<nav
class="md-nav md-nav--primary"
aria-label="{{ lang.t('nav.title') }}"
data-md-level="0"
>
<!-- Site title -->
<label class="md-nav__title" for="__drawer">
<a
href="{{ config.site_url | default(nav.homepage.url, true) | url }}"
title="{{ config.site_name }}"
class="md-nav__button md-logo"
aria-label="{{ config.site_name }}"
>
{% include "partials/logo.html" %}
</a>
{{ config.site_name }}
</label>
<!-- Repository containing source -->
{% if config.repo_url %}
<div class="md-nav__source">
{% include "partials/source.html" %}
</div>
{% endif %}
<!-- Render item list -->
<ul class="md-nav__list" data-md-scrollfix>
{% for nav_item in nav %}
{% set path = "nav-" + loop.index | string %}
{% set level = 1 %}
{% include "partials/nav-item.html" %}
{% endfor %}
<li class="md-nav__item">
<a class="md-nav__link" href="https://muo.gg/discord" target="_blank">
<img src="https://img.shields.io/discord/751317910504603701?logo=discord&style=social" alt="Discord" />
</a>
<a class="md-nav__link" href="https://www.reddit.com/r/modernuo" target="_blank">
<img src="https://img.shields.io/reddit/subreddit-subscribers/modernuo?style=social&label=/r/modernuo" alt="/r/modernuo" />
</a>
<a class="md-nav__link" href="https://www.twitter.com/modernuo" target="_blank">
<img src="https://img.shields.io/twitter/follow/modernuo?label=@modernuo&style=social" alt="@modernuo" />
</a>
<a class="md-nav__link" href="https://gitter.im/modernuo/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge" target="_blank">
<img src="https://img.shields.io/gitter/room/modernuo/modernuo?logo=gitter&logoColor=46BC99&style=social" alt="Gitter" />
</a>
</li>
</ul>
</nav>

File diff suppressed because it is too large Load diff

View file

@ -1,39 +0,0 @@
{
"category": "Assistant",
"packets": [
{
"id": "0xBE",
"name": "Assistant Version",
"description": "Client sends assistant version information. Razor CE sends version as ASCII string.",
"direction": "incoming",
"isDynamic": true,
"size": "3+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBE",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Version String",
"type": "ascii",
"size": "var",
"description": "Assistant version string (Razor CE sends \u0027version\u0027 or \u0027ProductName version\u0027)"
}
],
"notes": "Razor Community Edition sends version as ASCII. Legacy UOAssist would send int32 + ASCII client version.",
"source": {
"file": "Projects/UOContent/Assistants/AssistantHandler.cs",
"line": 69
}
}
]
}

View file

@ -1,216 +0,0 @@
{
"category": "Book",
"packets": [
{
"id": "0x66",
"name": "Book Content Change",
"description": "Client sends updated book page content when player edits a writable book.",
"direction": "incoming",
"isDynamic": true,
"size": "9+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x66",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book being edited"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages being updated"
},
{
"name": "Pages",
"type": "loop",
"description": "Page contents being updated",
"loop": {
"countField": "pageCount",
"fields": [
{
"name": "Page Index",
"type": "ushort",
"size": 2,
"description": "Page number (1-indexed)"
},
{
"name": "Line Count",
"type": "ushort",
"size": 2,
"description": "Number of lines on page (max 8)"
},
{
"name": "Lines",
"type": "loop",
"description": "Lines on the page",
"loop": {
"countField": "lineCount",
"fields": [
{
"name": "Text",
"type": "utf8-t",
"description": "Line text (max 80 characters)"
}
]
}
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 87
}
},
{
"id": "0xD4",
"name": "Book Header Change",
"description": "Client sends updated book title and author when player edits a writable book\u0027s cover.",
"direction": "incoming",
"isDynamic": true,
"size": "13+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD4",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book being edited"
},
{
"name": "Flags",
"type": "ushort",
"size": 2,
"description": "Book flags (ignored by server)"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages (ignored by server)"
},
{
"name": "Title Length",
"type": "ushort",
"size": 2,
"description": "Length of title string including null terminator (max 61)"
},
{
"name": "Title",
"type": "utf8-t",
"description": "Book title (max 60 characters)"
},
{
"name": "Author Length",
"type": "ushort",
"size": 2,
"description": "Length of author string including null terminator (max 31)"
},
{
"name": "Author",
"type": "utf8-t",
"description": "Book author (max 30 characters)"
}
],
"related": [
{
"id": "0x93",
"direction": "incoming",
"relationship": "variant",
"note": "Old Header Change format for older clients"
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 51
}
},
{
"id": "0x93",
"name": "Old Book Header Change",
"description": "Legacy format for book header changes. Uses fixed-size ASCII strings.",
"direction": "incoming",
"isDynamic": false,
"size": 99,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x93",
"description": "Packet identifier"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book being edited"
},
{
"name": "Flags",
"type": "ushort",
"size": 2,
"description": "Book flags (ignored by server)"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages (ignored by server)"
},
{
"name": "Title",
"type": "ascii",
"size": 60,
"description": "Book title (fixed 60 bytes, null-padded)"
},
{
"name": "Author",
"type": "ascii",
"size": 30,
"description": "Book author (fixed 30 bytes, null-padded)"
}
],
"related": [
{
"id": "0xD4",
"direction": "incoming",
"relationship": "variant",
"note": "New Header Change format for newer clients"
}
],
"notes": "Old format used by older clients. Title and author are fixed-size ASCII.",
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 32
}
}
]
}

View file

@ -1,250 +0,0 @@
{
"category": "Bulletin Board",
"packets": [
{
"id": "0x71",
"subId": "0x03",
"name": "Bulletin Board Request Content",
"description": "Client requests the full content of a bulletin board message.",
"direction": "incoming",
"isDynamic": true,
"size": "12",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Request Content command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message to read"
}
],
"related": [
{
"id": "0x71",
"subId": "0x02",
"direction": "outgoing",
"relationship": "response",
"note": "Message Content response"
}
],
"source": {
"file": "Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs",
"line": 78
}
},
{
"id": "0x71",
"subId": "0x04",
"name": "Bulletin Board Request Header",
"description": "Client requests the header (poster, subject, time) of a bulletin board message.",
"direction": "incoming",
"isDynamic": true,
"size": "12",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Request Header command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message"
}
],
"related": [
{
"id": "0x71",
"subId": "0x01",
"direction": "outgoing",
"relationship": "response",
"note": "Message Header response"
}
],
"source": {
"file": "Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs",
"line": 88
}
},
{
"id": "0x71",
"subId": "0x05",
"name": "Bulletin Board Post Message",
"description": "Client posts a new message or reply to the bulletin board.",
"direction": "incoming",
"isDynamic": true,
"size": "12+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x05",
"description": "Post Message command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Thread Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent message (0 for new thread)"
},
{
"name": "Subject Length",
"type": "byte",
"size": 1,
"description": "Length of subject string"
},
{
"name": "Subject",
"type": "utf8",
"description": "Message subject"
},
{
"name": "Line Count",
"type": "byte",
"size": 1,
"description": "Number of message lines"
},
{
"name": "Lines",
"type": "loop",
"description": "Message body lines",
"loop": {
"countField": "Line Count",
"fields": [
{
"name": "Line Length",
"type": "byte",
"size": 1,
"description": "Length of this line"
},
{
"name": "Line",
"type": "utf8",
"description": "Line text"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs",
"line": 98
}
},
{
"id": "0x71",
"subId": "0x06",
"name": "Bulletin Board Remove Message",
"description": "Client requests to delete a bulletin board message.",
"direction": "incoming",
"isDynamic": true,
"size": "12",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x06",
"description": "Remove Message command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message to delete"
}
],
"notes": "Only the message poster or GameMaster+ can delete messages.",
"source": {
"file": "Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs",
"line": 153
}
}
]
}

View file

@ -1,93 +0,0 @@
{
"category": "Chat",
"packets": [
{
"id": "0xB5",
"name": "Open Chat Window Request",
"description": "Client requests to open the chat window. Newer clients don\u0027t send chat username.",
"direction": "incoming",
"isDynamic": false,
"size": 64,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB5",
"description": "Packet identifier"
},
{
"name": "Reserved",
"type": "byte[]",
"size": 63,
"description": "Reserved/unused (newer clients don\u0027t send chat username)"
}
],
"related": [
{
"id": "0xB2",
"direction": "outgoing",
"relationship": "response",
"note": "Server responds with Chat Message (OpenChatWindow command)"
}
],
"source": {
"file": "Projects/UOContent/Engines/Chat/ChatPackets.cs",
"line": 30
}
},
{
"id": "0xB3",
"name": "Chat Action",
"description": "Client sends chat action commands like sending messages, joining channels, etc.",
"direction": "incoming",
"isDynamic": true,
"size": "8+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB3",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027enu\u0027 for English)"
},
{
"name": "Action ID",
"type": "short",
"size": 2,
"description": "Chat action ID"
},
{
"name": "Parameter",
"type": "utf16be",
"size": "var",
"description": "Action parameter (Big Endian Unicode)"
}
],
"related": [
{
"id": "0xB2",
"direction": "outgoing",
"relationship": "response",
"note": "Server responds with Chat Message"
}
],
"source": {
"file": "Projects/UOContent/Engines/Chat/ChatPackets.cs",
"line": 51
}
}
]
}

View file

@ -1,965 +0,0 @@
{
"category": "Encoded Commands (0xD7)",
"packets": [
{
"id": "0xD7",
"name": "Encoded Command",
"description": "Wrapper packet for encoded commands (0xD7 subpackets). Used for house design, abilities, guild/quest requests.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Entity Serial",
"type": "uint",
"size": 4,
"description": "Serial of target entity"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"description": "Encoded command ID"
},
{
"name": "Data",
"type": "byte[]",
"description": "Subcommand-specific data"
}
],
"subpackets": [
{
"subId": "0x02",
"name": "Backup",
"description": "Backup current house design state",
"direction": "incoming"
},
{
"subId": "0x03",
"name": "Restore",
"description": "Restore house design from backup",
"direction": "incoming"
},
{
"subId": "0x04",
"name": "Commit",
"description": "Commit house design changes",
"direction": "incoming"
},
{
"subId": "0x05",
"name": "Delete Component",
"description": "Delete component from house",
"direction": "incoming"
},
{
"subId": "0x06",
"name": "Build Component",
"description": "Place component in house",
"direction": "incoming"
},
{
"subId": "0x0C",
"name": "Close Tool",
"description": "Close house design tool",
"direction": "incoming"
},
{
"subId": "0x0D",
"name": "Add Stairs",
"description": "Add stairs to house design",
"direction": "incoming"
},
{
"subId": "0x0E",
"name": "Sync Request",
"description": "Synchronize house design state",
"direction": "incoming"
},
{
"subId": "0x10",
"name": "Clear Floor",
"description": "Clear a floor in house design",
"direction": "incoming"
},
{
"subId": "0x12",
"name": "Change Floor Level",
"description": "Change visible floor level",
"direction": "incoming"
},
{
"subId": "0x13",
"name": "Add Roof",
"description": "Add roof tile (SE+)",
"direction": "incoming"
},
{
"subId": "0x14",
"name": "Delete Roof",
"description": "Delete roof tile (SE+)",
"direction": "incoming"
},
{
"subId": "0x19",
"name": "Set Weapon Ability",
"description": "Select weapon special ability",
"direction": "incoming"
},
{
"subId": "0x1A",
"name": "Revert",
"description": "Revert house to original state",
"direction": "incoming"
},
{
"subId": "0x28",
"name": "Guild Gump Request",
"description": "Open guild gump",
"direction": "incoming"
},
{
"subId": "0x32",
"name": "Quest Gump Request",
"description": "Open quest/MLB gump",
"direction": "incoming"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 457
}
},
{
"id": "0xD7/0x02",
"subId": "0x02",
"name": "House Design: Backup",
"description": "Client requests to backup current house design state.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x02",
"description": "Backup subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1024
}
},
{
"id": "0xD7/0x03",
"subId": "0x03",
"name": "House Design: Restore",
"description": "Client requests to restore house design from backup.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x03",
"description": "Restore subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1025
}
},
{
"id": "0xD7/0x04",
"subId": "0x04",
"name": "House Design: Commit",
"description": "Client commits the current house design changes.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x04",
"description": "Commit subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1026
}
},
{
"id": "0xD7/0x05",
"subId": "0x05",
"name": "House Design: Delete Component",
"description": "Client requests to delete a component from house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x05",
"description": "Delete subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Tile graphic ID to delete"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
},
{
"name": "Z",
"type": "int",
"size": 4,
"description": "Z offset from foundation"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1027
}
},
{
"id": "0xD7/0x06",
"subId": "0x06",
"name": "House Design: Build Component",
"description": "Client requests to place a component in house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x06",
"description": "Build subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Tile graphic ID to place"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1028
}
},
{
"id": "0xD7/0x0C",
"subId": "0x0C",
"name": "House Design: Close Tool",
"description": "Client closes the house design tool.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0C",
"description": "Close subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1029
}
},
{
"id": "0xD7/0x0D",
"subId": "0x0D",
"name": "House Design: Add Stairs",
"description": "Client requests to add stairs to house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0D",
"description": "Stairs subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Stair tile graphic ID"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1030
}
},
{
"id": "0xD7/0x0E",
"subId": "0x0E",
"name": "House Design: Sync Request",
"description": "Client requests to synchronize house design state.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0E",
"description": "Sync subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1031
}
},
{
"id": "0xD7/0x10",
"subId": "0x10",
"name": "House Design: Clear Floor",
"description": "Client requests to clear a floor in house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x10",
"description": "Clear subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1032
}
},
{
"id": "0xD7/0x12",
"subId": "0x12",
"name": "House Design: Change Floor Level",
"description": "Client changes the visible floor level in house design.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x12",
"description": "Level subcommand"
},
{
"name": "Floor",
"type": "int",
"size": 4,
"description": "Floor level (1-4)"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1033
}
},
{
"id": "0xD7/0x13",
"subId": "0x13",
"name": "House Design: Add Roof",
"description": "Client requests to add a roof tile (Samurai Empire+).",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x13",
"description": "Roof subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Roof tile graphic ID"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
},
{
"name": "Z",
"type": "int",
"size": 4,
"description": "Z offset for roof placement"
}
],
"clientVersion": {
"classic": {
"min": "4.0.3a"
},
"enhanced": {},
"notes": "Added with Samurai Empire expansion"
},
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1035
}
},
{
"id": "0xD7/0x14",
"subId": "0x14",
"name": "House Design: Delete Roof",
"description": "Client requests to delete a roof tile (Samurai Empire+).",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x14",
"description": "Roof Delete subcommand"
},
{
"name": "Tile ID",
"type": "int",
"size": 4,
"description": "Roof tile graphic ID"
},
{
"name": "X",
"type": "int",
"size": 4,
"description": "X offset from foundation"
},
{
"name": "Y",
"type": "int",
"size": 4,
"description": "Y offset from foundation"
},
{
"name": "Z",
"type": "int",
"size": 4,
"description": "Z offset of roof to delete"
}
],
"clientVersion": {
"classic": {
"min": "4.0.3a"
},
"enhanced": {},
"notes": "Added with Samurai Empire expansion"
},
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1036
}
},
{
"id": "0xD7/0x19",
"subId": "0x19",
"name": "Set Weapon Ability",
"description": "Client selects a weapon special ability.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["Combat"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Player serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x19",
"description": "Set Ability subcommand"
},
{
"name": "Ability Index",
"type": "int",
"size": 4,
"description": "Ability index (0 = clear, 1+ = ability index)"
}
],
"related": [
{
"id": "0xBF/0x21",
"relationship": "response",
"note": "Clear Weapon Ability"
},
{
"id": "0xBF/0x25",
"relationship": "response",
"note": "Toggle Special Ability"
}
],
"source": {
"file": "Projects/UOContent/Items/Weapons/Abilities/WeaponAbilityPackets.cs",
"line": 11
}
},
{
"id": "0xD7/0x1A",
"subId": "0x1A",
"name": "House Design: Revert",
"description": "Client requests to revert house design to original state.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "House foundation serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x1A",
"description": "Revert subcommand"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HouseFoundation.cs",
"line": 1038
}
},
{
"id": "0xD7/0x28",
"subId": "0x28",
"name": "Guild Gump Request",
"description": "Client requests to open the guild gump.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["Guild"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Player serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x28",
"description": "Guild Gump subcommand"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 54
}
},
{
"id": "0xD7/0x32",
"subId": "0x32",
"name": "Quest Gump Request",
"description": "Client requests to open the quest/MLB gump.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["Quest"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Player serial"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x32",
"description": "Quest Gump subcommand"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 55
}
}
]
}

View file

@ -1,142 +0,0 @@
{
"category": "Item",
"tags": ["Mobile"],
"packets": [
{
"id": "0x06",
"name": "Use Request (Double-Click)",
"description": "Sent when the player double-clicks an item or mobile. Can also trigger paperdoll if high bit is set.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x06",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target. If high bit (0x80000000) is set, opens player\u0027s paperdoll instead."
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 61
}
},
{
"id": "0x09",
"name": "Look Request (Single-Click)",
"description": "Sent when the player single-clicks an item or mobile to see its name/properties.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x09",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 105
}
},
{
"id": "0xB6",
"name": "Object Help Request",
"description": "Sent when the player requests help/info about an object (Shift+Click or context menu).",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB6",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown"
},
{
"name": "Language",
"type": "ascii",
"size": 3,
"description": "Language code (e.g., \u0027ENU\u0027)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 32
}
},
{
"id": "0xD6",
"name": "Batch Query Properties",
"description": "Sent by the client to request Object Property Lists (tooltips) for multiple entities at once.",
"direction": "incoming",
"isDynamic": true,
"size": "3 + (4 x entityCount)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD6",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serials",
"type": "array",
"description": "List of entity serials to query",
"loop": {
"countField": "(length-3)/4",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingEntityPackets.cs",
"line": 154
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,134 +0,0 @@
{
"category": "FreeShard Protocol (0xF1)",
"packets": [
{
"id": "0xF1",
"name": "FreeShard Protocol",
"description": "Bundle packet for freeshard-specific commands (UOGateway). Sub-command is a single byte.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF1",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "byte",
"size": 1,
"description": "Subcommand ID"
},
{
"name": "Data",
"type": "byte[]",
"description": "Subcommand-specific data"
}
],
"subpackets": [
{
"subId": "0xFE",
"name": "Query Compact Shard Stats",
"direction": "incoming"
},
{
"subId": "0xFF",
"name": "Query Extended Shard Stats",
"direction": "incoming"
}
],
"source": {
"file": "Projects/UOContent/Network/FreeshardProtocol.cs",
"line": 21
}
},
{
"id": "0xF1/0xFE",
"subId": "0xFE",
"name": "Query Compact Shard Stats",
"description": "Query server for compact statistics. Server responds with 0x51.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF1",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "byte",
"size": 1,
"value": "0xFE",
"description": "Query Compact Shard Stats subcommand"
}
],
"notes": "Outgame only. Requires uogateway.enabled configuration.",
"related": [
{
"id": "0x51",
"relationship": "response",
"note": "Compact Shard Stats response"
}
],
"source": {
"file": "Projects/UOContent/Network/UOGateway.cs",
"line": 31
}
},
{
"id": "0xF1/0xFF",
"subId": "0xFF",
"name": "Query Extended Shard Stats",
"description": "Query server for extended statistics. Server responds with raw UTF-8 string.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF1",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "byte",
"size": 1,
"value": "0xFF",
"description": "Query Extended Shard Stats subcommand"
}
],
"notes": "Outgame only. Requires uogateway.enabled configuration. Response is a raw UTF-8 string (no packet wrapper): 'ModernUO, Name={name}, Age={hours}, Clients={count}, Items={count}, Chars={count}, Mem={kb}K, Ver=2\\0'",
"source": {
"file": "Projects/UOContent/Network/UOGateway.cs",
"line": 32
}
}
]
}

View file

@ -1,116 +0,0 @@
{
"category": "Gump",
"packets": [
{
"id": "0xB1",
"name": "Gump Response",
"description": "Client response to a generic gump dialog (button press, checkbox/radio selections, text entries).",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB1",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial from the 0xB0/0xDD gump packet"
},
{
"name": "Gump ID",
"type": "uint",
"size": 4,
"description": "Gump type ID from the 0xB0/0xDD gump packet"
},
{
"name": "Button ID",
"type": "uint",
"size": 4,
"description": "ID of button pressed (0 if gump closed without pressing a button)"
},
{
"name": "Switch Count",
"type": "uint",
"size": 4,
"description": "Number of active switches (checkboxes/radio buttons)"
},
{
"name": "Switches",
"type": "array",
"description": "Array of switch IDs that are active/checked",
"entries": [
{
"name": "Switch ID",
"type": "uint",
"size": 4,
"description": "ID of an active switch"
}
]
},
{
"name": "Text Entry Count",
"type": "uint",
"size": 4,
"description": "Number of text entries"
},
{
"name": "Text Entries",
"type": "array",
"description": "Array of text entry responses",
"entries": [
{
"name": "Entry ID",
"type": "ushort",
"size": 2,
"description": "Text entry field ID"
},
{
"name": "Text Length",
"type": "ushort",
"size": 2,
"description": "Length of text in characters"
},
{
"name": "Text",
"type": "unicode-be",
"size": "var",
"description": "UTF-16 BE encoded text (length * 2 bytes, not null-terminated)"
}
]
}
],
"related": [
{
"id": "0xB0",
"relationship": "response",
"note": "Generic Gump (uncompressed) - server sends this to display the gump"
},
{
"id": "0xDD",
"relationship": "response",
"note": "Compressed Gump - server sends this to display a compressed gump"
}
],
"clientVersion": {
"classic": {},
"enhanced": {}
},
"source": {
"file": "Projects/UOContent/Gumps/Base/GumpSystem.cs",
"line": 31
}
}
]
}

View file

@ -1,188 +0,0 @@
{
"category": "Hardware",
"packets": [
{
"id": "0xD9",
"name": "Hardware Info",
"description": "Client sends hardware and system information. Also known as 'Spy on Client' packet.",
"direction": "incoming",
"isDynamic": false,
"size": 268,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD9",
"description": "Packet identifier"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown (1 for pre-4.0.1a, 2 for 4.0.1a+)"
},
{
"name": "Instance ID",
"type": "int",
"size": 4,
"description": "UO client instance identifier"
},
{
"name": "OS Major",
"type": "int",
"size": 4,
"description": "Operating system major version"
},
{
"name": "OS Minor",
"type": "int",
"size": 4,
"description": "Operating system minor version"
},
{
"name": "OS Revision",
"type": "int",
"size": 4,
"description": "Operating system revision"
},
{
"name": "CPU Manufacturer",
"type": "byte",
"size": 1,
"description": "CPU manufacturer code"
},
{
"name": "CPU Family",
"type": "int",
"size": 4,
"description": "CPU family identifier"
},
{
"name": "CPU Model",
"type": "int",
"size": 4,
"description": "CPU model number"
},
{
"name": "CPU Clock Speed",
"type": "int",
"size": 4,
"description": "CPU clock speed in MHz"
},
{
"name": "CPU Quantity",
"type": "byte",
"size": 1,
"description": "Number of CPUs/cores"
},
{
"name": "Physical Memory",
"type": "int",
"size": 4,
"description": "Physical memory in MB"
},
{
"name": "Screen Width",
"type": "int",
"size": 4,
"description": "Screen width in pixels"
},
{
"name": "Screen Height",
"type": "int",
"size": 4,
"description": "Screen height in pixels"
},
{
"name": "Screen Depth",
"type": "int",
"size": 4,
"description": "Screen color depth in bits"
},
{
"name": "DirectX Major",
"type": "short",
"size": 2,
"description": "DirectX major version"
},
{
"name": "DirectX Minor",
"type": "short",
"size": 2,
"description": "DirectX minor version"
},
{
"name": "Video Card Description",
"type": "unicode-le",
"size": 128,
"description": "Video card description string (64 chars, little-endian UTF-16)"
},
{
"name": "Video Card Vendor ID",
"type": "int",
"size": 4,
"description": "Video card vendor identifier"
},
{
"name": "Video Card Device ID",
"type": "int",
"size": 4,
"description": "Video card device identifier"
},
{
"name": "Video Card Memory",
"type": "int",
"size": 4,
"description": "Video card memory in MB"
},
{
"name": "Distribution",
"type": "byte",
"size": 1,
"description": "Distribution type"
},
{
"name": "Clients Running",
"type": "byte",
"size": 1,
"description": "Number of UO clients currently running"
},
{
"name": "Clients Installed",
"type": "byte",
"size": 1,
"description": "Number of UO clients installed"
},
{
"name": "Partial Installed",
"type": "byte",
"size": 1,
"description": "Partial installation flag"
},
{
"name": "Language",
"type": "unicode-le",
"size": 8,
"description": "Language code (4 chars, little-endian UTF-16)"
},
{
"name": "Unknown2",
"type": "ascii",
"size": 64,
"description": "Unknown data"
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "Packet size is 268 bytes (0x10C) for clients 4.0.1a+"
},
"source": {
"file": "Projects/UOContent/Misc/HardwareInfo.cs",
"line": 93
},
"notes": "This packet is sent automatically by the client after login. The server uses this to track hardware information for debugging and statistics purposes."
}
]
}

View file

@ -1,37 +0,0 @@
{
"category": "House",
"packets": [
{
"id": "0xFB",
"name": "Public House Content",
"description": "Client toggles whether to receive content updates for public houses. When enabled, the server sends container contents for publicly accessible houses.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xFB",
"description": "Packet identifier"
},
{
"name": "Show Contents",
"type": "bool",
"size": 1,
"description": "0 = hide public house contents, 1 = show public house contents"
}
],
"clientVersion": {
"classic": {},
"enhanced": {}
},
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingHousePackets.cs",
"line": 24
},
"notes": "This packet allows clients to opt-in or opt-out of receiving container content data for publicly accessible houses, which can reduce bandwidth for players who don't need to see inside public houses."
}
]
}

View file

@ -1,298 +0,0 @@
{
"category": "Items",
"packets": [
{
"id": "0x07",
"name": "Lift Request",
"description": "Client requests to pick up an item from the world or a container.",
"direction": "incoming",
"isDynamic": false,
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x07",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item to lift"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Amount to pick up"
}
],
"related": [
{
"id": "0x27",
"relationship": "rej",
"note": "Sent if lift is rejected"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 35
}
},
{
"id": "0x08",
"name": "Drop Request",
"description": "Client requests to drop an item at a location or into a container. Size varies by client version.",
"direction": "incoming",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"name": "Classic",
"size": 14,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x08",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of item being dropped (ignored)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Target Z coordinate"
},
{
"name": "Dest",
"type": "uint",
"size": 4,
"description": "Target container/mobile serial, or 0xFFFFFFFF for world"
}
]
},
{
"name": "Container Grid Lines",
"condition": "Client version \u003e= 6.0.1.7 (ContainerGridLines)",
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x08",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of item being dropped (ignored)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Target Z coordinate"
},
{
"name": "Grid Location",
"type": "byte",
"size": 1,
"description": "Grid slot position in container"
},
{
"name": "Dest",
"type": "uint",
"size": 4,
"description": "Target container/mobile serial, or 0xFFFFFFFF for world"
}
]
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "ContainerGridLines (6.0.1.7+) adds gridLocation byte"
},
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 69
}
},
{
"id": "0x13",
"name": "Equip Request",
"description": "Client requests to equip a held item on a mobile.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x13",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to equip"
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Equipment layer"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of target mobile"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 44
}
},
{
"id": "0xEC",
"name": "Equip Macro",
"description": "Client requests to equip multiple items from a saved macro.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xEC",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Count",
"type": "byte",
"size": 1,
"description": "Number of items to equip"
},
{
"name": "Items",
"type": "loop",
"loop": {
"countField": "count",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to equip"
}
]
}
}
],
"clientVersion": {
"enhanced": {}
},
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 112
}
},
{
"id": "0xED",
"name": "Unequip Macro",
"description": "Client requests to unequip items from specific layers via macro.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xED",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Count",
"type": "byte",
"size": 1,
"description": "Number of layers to unequip"
},
{
"name": "Layers",
"type": "loop",
"loop": {
"countField": "count",
"fields": [
{
"name": "Layer",
"type": "ushort",
"size": 2,
"description": "Layer to unequip from"
}
]
}
}
],
"clientVersion": {
"enhanced": {}
},
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingItemPackets.cs",
"line": 125
}
}
]
}

View file

@ -1,907 +0,0 @@
{
"category": "Mahjong",
"packets": [
{
"id": "0xDA",
"name": "Mahjong Game",
"description": "Mahjong game packets for controlling the in-game Mahjong table. Used for both client commands and server updates.",
"direction": "both",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"description": "Command ID (incoming uses byte prefix + byte command)"
},
{
"name": "Data",
"type": "byte[]",
"description": "Command-specific data"
}
],
"subpackets": [
{
"subId": "0x02",
"name": "Players Info",
"description": "Sends player information for all seats",
"direction": "outgoing"
},
{
"subId": "0x03",
"name": "Tile Info",
"description": "Sends information about a single tile",
"direction": "outgoing"
},
{
"subId": "0x04",
"name": "Tiles Info",
"description": "Sends information about all tiles",
"direction": "outgoing"
},
{
"subId": "0x05",
"name": "General Info",
"description": "Sends game state (dice, dealer, wall break)",
"direction": "outgoing"
},
{
"subId": "0x06",
"name": "Exit Game",
"description": "Client exits the game",
"direction": "incoming"
},
{
"subId": "0x0A",
"name": "Give Points",
"description": "Transfer points to another player",
"direction": "incoming"
},
{
"subId": "0x0B",
"name": "Roll Dice",
"description": "Client requests to roll dice",
"direction": "incoming"
},
{
"subId": "0x0C",
"name": "Build Walls",
"description": "Dealer builds/resets tile walls",
"direction": "incoming"
},
{
"subId": "0x0D",
"name": "Reset Scores",
"description": "Dealer resets all scores",
"direction": "incoming"
},
{
"subId": "0x0F",
"name": "Assign Dealer",
"description": "Assign a new dealer",
"direction": "incoming"
},
{
"subId": "0x10",
"name": "Open Seat",
"description": "Open a seat for new players",
"direction": "incoming"
},
{
"subId": "0x11",
"name": "Change Option",
"description": "Change game options",
"direction": "incoming"
},
{
"subId": "0x15",
"name": "Move Wall Break",
"description": "Move wall break indicator",
"direction": "incoming"
},
{
"subId": "0x16",
"name": "Toggle Public Hand",
"description": "Toggle hand visibility",
"direction": "incoming"
},
{
"subId": "0x17",
"name": "Move Tile",
"description": "Move a tile on the board",
"direction": "incoming"
},
{
"subId": "0x18",
"name": "Move Dealer Indicator",
"description": "Move dealer indicator",
"direction": "incoming"
},
{
"subId": "0x19",
"name": "Join Game",
"description": "Server opens game interface",
"direction": "outgoing"
},
{
"subId": "0x1A",
"name": "Relieve",
"description": "Server closes game interface",
"direction": "outgoing"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 46
}
},
{
"id": "0xDA",
"subId": "0x06",
"name": "Mahjong Exit Game",
"description": "Client requests to exit the Mahjong game.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x06",
"description": "Exit Game command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 108
}
},
{
"id": "0xDA",
"subId": "0x0A",
"name": "Mahjong Give Points",
"description": "Client transfers points to another player.",
"direction": "incoming",
"isDynamic": false,
"size": 14,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x0A",
"description": "Give Points command"
},
{
"name": "To Position",
"type": "byte",
"size": 1,
"description": "Target player seat position"
},
{
"name": "Amount",
"type": "int",
"size": 4,
"description": "Points to transfer"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 120
}
},
{
"id": "0xDA",
"subId": "0x0B",
"name": "Mahjong Roll Dice",
"description": "Client requests to roll the dice.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x0B",
"description": "Roll Dice command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 133
}
},
{
"id": "0xDA",
"subId": "0x0C",
"name": "Mahjong Build Walls",
"description": "Dealer requests to reset and build the tile walls.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x0C",
"description": "Build Walls command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 143
}
},
{
"id": "0xDA",
"subId": "0x0D",
"name": "Mahjong Reset Scores",
"description": "Dealer requests to reset all player scores to base value.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x0D",
"description": "Reset Scores command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 153
}
},
{
"id": "0xDA",
"subId": "0x0F",
"name": "Mahjong Assign Dealer",
"description": "Dealer assigns another player as the new dealer.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x0F",
"description": "Assign Dealer command"
},
{
"name": "Position",
"type": "byte",
"size": 1,
"description": "Seat position of new dealer"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 163
}
},
{
"id": "0xDA",
"subId": "0x10",
"name": "Mahjong Open Seat",
"description": "Dealer opens a seat, removing the current player.",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x10",
"description": "Open Seat command"
},
{
"name": "Position",
"type": "byte",
"size": 1,
"description": "Seat position to open"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 175
}
},
{
"id": "0xDA",
"subId": "0x11",
"name": "Mahjong Change Option",
"description": "Dealer changes game options (show scores, spectator vision).",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x11",
"description": "Change Option command"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"description": "Reserved (not used)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"description": "Reserved (not used)"
},
{
"name": "Options",
"type": "bitflags",
"size": 1,
"description": "Game options",
"values": [
{ "value": "0x01", "name": "Show Scores", "description": "Display player scores" },
{ "value": "0x02", "name": "Spectator Vision", "description": "Spectators can see all tiles" }
]
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 192
}
},
{
"id": "0xDA",
"subId": "0x15",
"name": "Mahjong Move Wall Break Indicator",
"description": "Dealer moves the wall break indicator position.",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x15",
"description": "Move Wall Break Indicator command"
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "New Y coordinate"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "New X coordinate"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 208
}
},
{
"id": "0xDA",
"subId": "0x16",
"name": "Mahjong Toggle Public Hand",
"description": "Player toggles whether their hand is visible to others.",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x16",
"description": "Toggle Public Hand command"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"description": "Reserved (not used)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"description": "Reserved (not used)"
},
{
"name": "Public Hand",
"type": "bool",
"size": 1,
"description": "True to show hand publicly"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 221
}
},
{
"id": "0xDA",
"subId": "0x17",
"name": "Mahjong Move Tile",
"description": "Player moves a tile to a new position with direction and flip state.",
"direction": "incoming",
"isDynamic": false,
"size": 22,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x17",
"description": "Move Tile command"
},
{
"name": "Tile Number",
"type": "byte",
"size": 1,
"description": "Tile index number"
},
{
"name": "Current Direction",
"type": "byte",
"size": 1,
"description": "Current tile direction (unused)"
},
{
"name": "New Direction",
"type": "enum",
"size": 1,
"description": "New tile direction",
"values": [
{ "value": "0", "name": "Up", "description": "Facing up" },
{ "value": "1", "name": "Left", "description": "Facing left" },
{ "value": "2", "name": "Down", "description": "Facing down" },
{ "value": "3", "name": "Right", "description": "Facing right" }
]
},
{
"name": "Reserved",
"type": "byte",
"size": 1,
"description": "Reserved byte"
},
{
"name": "Flip",
"type": "bool",
"size": 1,
"description": "True to flip tile face-up"
},
{
"name": "Current Y",
"type": "short",
"size": 2,
"description": "Current Y position (unused)"
},
{
"name": "Current X",
"type": "short",
"size": 2,
"description": "Current X position (unused)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"description": "Reserved byte"
},
{
"name": "New Y",
"type": "short",
"size": 2,
"description": "New Y position"
},
{
"name": "New X",
"type": "short",
"size": 2,
"description": "New X position"
},
{
"name": "Reserved 3",
"type": "byte",
"size": 1,
"description": "Reserved byte"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 236
}
},
{
"id": "0xDA",
"subId": "0x18",
"name": "Mahjong Move Dealer Indicator",
"description": "Dealer moves the dealer indicator with direction and wind.",
"direction": "incoming",
"isDynamic": false,
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown byte"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x18",
"description": "Move Dealer Indicator command"
},
{
"name": "Direction",
"type": "enum",
"size": 1,
"description": "Indicator direction",
"values": [
{ "value": "0", "name": "Up", "description": "Facing up" },
{ "value": "1", "name": "Left", "description": "Facing left" },
{ "value": "2", "name": "Down", "description": "Facing down" },
{ "value": "3", "name": "Right", "description": "Facing right" }
]
},
{
"name": "Wind",
"type": "enum",
"size": 1,
"description": "Wind direction displayed",
"values": [
{ "value": "0", "name": "North", "description": "North wind" },
{ "value": "1", "name": "East", "description": "East wind" },
{ "value": "2", "name": "South", "description": "South wind" },
{ "value": "3", "name": "West", "description": "West wind" }
]
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "New Y position"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "New X position"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 271
}
}
]
}

View file

@ -1,84 +0,0 @@
{
"category": "Map",
"packets": [
{
"id": "0x56",
"name": "Map Command",
"description": "Client sends map pin commands for editable map items. Commands include adding, inserting, changing, and removing pins.",
"direction": "incoming",
"isDynamic": false,
"size": 11,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x56",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Command",
"type": "enum",
"size": 1,
"description": "Map pin command type",
"values": [
{ "value": "1", "name": "AddPin", "description": "Add a new pin" },
{ "value": "2", "name": "InsertPin", "description": "Insert pin at position" },
{ "value": "3", "name": "ChangePin", "description": "Change existing pin" },
{ "value": "4", "name": "RemovePin", "description": "Remove a pin" },
{ "value": "5", "name": "ClearPins", "description": "Clear all pins" },
{ "value": "6", "name": "ToggleEditable", "description": "Toggle edit mode" }
]
},
{
"name": "Number",
"type": "byte",
"size": 1,
"description": "Pin number (for insert, change, remove commands)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate of pin"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate of pin"
}
],
"related": [
{
"id": "0x56",
"direction": "outgoing",
"relationship": "related",
"note": "Server map pin commands"
},
{
"id": "0x90",
"direction": "outgoing",
"relationship": "related",
"note": "Map Details packet (old)"
},
{
"id": "0xF5",
"direction": "outgoing",
"relationship": "related",
"note": "Map Details packet (new)"
}
],
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 28
}
}
]
}

View file

@ -1,300 +0,0 @@
{
"category": "Message",
"packets": [
{
"id": "0x03",
"name": "ASCII Speech",
"description": "Client sends ASCII-encoded speech message.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Message type",
"values": [
{
"value": 0,
"name": "Regular",
"description": "Normal speech"
},
{
"value": 1,
"name": "System",
"description": "System message"
},
{
"value": 2,
"name": "Emote",
"description": "Emote (*action*)"
},
{
"value": 6,
"name": "Label",
"description": "Object label"
},
{
"value": 7,
"name": "Focus",
"description": "Focused message"
},
{
"value": 8,
"name": "Whisper",
"description": "Whisper"
},
{
"value": 9,
"name": "Yell",
"description": "Yell"
},
{
"value": 10,
"name": "Spell",
"description": "Spell words"
},
{
"value": 13,
"name": "Guild",
"description": "Guild chat"
},
{
"value": 14,
"name": "Alliance",
"description": "Alliance chat"
},
{
"value": 15,
"name": "Command",
"description": "Command"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Text",
"type": "ascii-t",
"description": "Speech text (max 128 chars)"
}
],
"related": [
{
"id": "0x1C",
"relationship": "response",
"note": "ASCII Message sent to other clients"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMessagePackets.cs",
"line": 31
}
},
{
"id": "0xAD",
"name": "Unicode Speech",
"description": "Client sends Unicode-encoded speech message. Type byte upper bits (0xC0) indicate if keywords are encoded.",
"direction": "incoming",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Standard Unicode",
"condition": "type & 0xC0 == 0",
"size": "12+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAD",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Type",
"type": "enum",
"size": 1,
"description": "Message type (0xC0 bits clear)",
"values": [
{
"value": 0,
"name": "Regular",
"description": "Normal speech"
},
{
"value": 1,
"name": "System",
"description": "System message"
},
{
"value": 2,
"name": "Emote",
"description": "Emote (*action*)"
},
{
"value": 8,
"name": "Whisper",
"description": "Whisper"
},
{
"value": 9,
"name": "Yell",
"description": "Yell"
},
{
"value": 13,
"name": "Guild",
"description": "Guild chat"
},
{
"value": 14,
"name": "Alliance",
"description": "Alliance chat"
},
{
"value": 15,
"name": "Command",
"description": "Command"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., 'ENU')"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Speech text (Big Endian Unicode, null-terminated)"
}
]
},
{
"name": "Encoded Keywords",
"condition": "type & 0xC0 != 0",
"size": "14+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAD",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type with 0xC0 flag set. Lower 4 bits = message type (see Standard variant)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., 'ENU')"
},
{
"name": "Keyword Header",
"type": "ushort",
"size": 2,
"description": "Bits 15-4: keyword count (0-50), Bits 3-0: first hold value for packed IDs"
},
{
"name": "Packed Keywords",
"type": "byte[]",
"description": "12-bit keyword IDs packed alternating: even indices use hold<<8|byte, odd indices use (short&0xFFF0)>>4 with new hold"
},
{
"name": "Text",
"type": "utf8-t",
"description": "Speech text (UTF-8, null-terminated)"
}
]
}
],
"notes": "Encoded keywords use 12-bit speech IDs packed efficiently. Keyword count must be 0-50. The packing alternates: even-indexed keywords combine the previous 4-bit hold with a new byte (12 bits total), odd-indexed keywords read a short and extract bits 15-4 as the ID, bits 3-0 as the next hold.",
"related": [
{
"id": "0x03",
"direction": "incoming",
"relationship": "variant",
"note": "ASCII Speech (simpler format)"
},
{
"id": "0xAE",
"direction": "outgoing",
"relationship": "response",
"note": "Unicode Message sent to other clients"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMessagePackets.cs",
"line": 58
}
}
]
}

View file

@ -1,168 +0,0 @@
{
"category": "Mobile",
"packets": [
{
"id": "0x75",
"name": "Rename Request",
"description": "Client requests to rename a mobile (pet).",
"direction": "incoming",
"isDynamic": false,
"size": 35,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x75",
"description": "Packet identifier"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of mobile to rename"
},
{
"name": "New Name",
"type": "ascii",
"size": 30,
"description": "New name for the mobile"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 32
}
},
{
"id": "0x98",
"name": "Mobile Name Request",
"description": "Client requests the name of a mobile.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x98",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of mobile to query"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 43
}
},
{
"id": "0xB8",
"name": "Profile Request",
"description": "Client requests to view or edit a mobile's profile.",
"direction": "incoming",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Display Profile",
"condition": "mode == Display (0)",
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB8",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mode",
"type": "byte",
"size": 1,
"value": "0",
"description": "Display mode"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of target mobile"
}
]
},
{
"name": "Edit Profile",
"condition": "mode == Edit (1)",
"size": "12+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB8",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mode",
"type": "byte",
"size": 1,
"value": "1",
"description": "Edit mode"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of target mobile"
},
{
"name": "Padding",
"type": "short",
"size": 2,
"description": "Unused padding"
},
{
"name": "Text Length",
"type": "ushort",
"size": 2,
"description": "Length of text in characters"
},
{
"name": "Text",
"type": "utf16be",
"description": "New profile text (Big Endian Unicode)"
}
]
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 53
}
}
]
}

View file

@ -1,56 +0,0 @@
{
"category": "Movement",
"packets": [
{
"id": "0x02",
"name": "Movement Request",
"description": "Sent by the client when the player attempts to move in a direction. The server responds with either MovementAck (0x22) if successful or MovementRej (0x21) if blocked.",
"direction": "incoming",
"isDynamic": false,
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x02",
"description": "Packet identifier"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Movement direction (0-7). Bit 0x80 indicates running."
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Movement sequence number (1-255, wraps). Used for ack/rej matching."
},
{
"name": "Fastwalk Key",
"type": "uint",
"size": 4,
"description": "Anti-speedhack prevention key. Set to 0 if fastwalk prevention is disabled."
}
],
"related": [
{
"id": "0x21",
"relationship": "rej",
"note": "Sent if movement is blocked"
},
{
"id": "0x22",
"relationship": "ack",
"note": "Sent if movement is successful"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMovementPackets.cs",
"line": 83
}
}
]
}

View file

@ -1,989 +0,0 @@
{
"category": "Player",
"packets": [
{
"id": "0x01",
"name": "Disconnect",
"description": "Client sends disconnect notification.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Packet identifier"
},
{
"name": "Minus One",
"type": "int",
"size": 4,
"value": "0xFFFFFFFF",
"description": "Always -1"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 317
}
},
{
"id": "0x05",
"name": "Attack Request",
"description": "Client requests to attack a mobile.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x05",
"description": "Packet identifier"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of mobile to attack"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 69
}
},
{
"id": "0x12",
"name": "Text Command",
"description": "Client sends text-based commands for skills, spells, virtues, etc.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x12",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Type of text command",
"values": [
{
"value": "0x24",
"name": "Use Skill",
"description": "Use a skill by ID"
},
{
"value": "0x27",
"name": "Cast Spell From Book",
"description": "Cast spell from spellbook"
},
{
"value": "0x2F",
"name": "Old Scroll Click",
"description": "Old scroll double-click"
},
{
"value": "0x43",
"name": "Open Spellbook",
"description": "Open spellbook of type"
},
{
"value": "0x56",
"name": "Cast Spell Macro",
"description": "Cast spell from macro"
},
{
"value": "0x58",
"name": "Open Door",
"description": "Open door macro"
},
{
"value": "0xC7",
"name": "Animate",
"description": "Play animation"
},
{
"value": "0xF4",
"name": "Invoke Virtue",
"description": "Invoke virtue from macro"
}
]
},
{
"name": "Command",
"type": "ascii-t",
"description": "Command-specific text (skill ID, spell ID, etc.)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 119
}
},
{
"id": "0x22",
"name": "Resynchronize",
"description": "Client requests full world state resync.",
"direction": "incoming",
"noMerge": true,
"isDynamic": false,
"size": 3,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x22",
"description": "Packet identifier"
},
{
"name": "Padding",
"type": "ushort",
"size": 2,
"description": "Unused padding"
}
],
"notes": "Not related to outgoing 0x22 (Movement Acknowledgment) despite sharing the same packet ID.",
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 349
}
},
{
"id": "0x2C",
"name": "Death Status Response",
"description": "Client acknowledges death status packet. Currently ignored by server.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x2C",
"description": "Packet identifier"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 58
}
},
{
"id": "0x34",
"name": "Mobile Query",
"description": "Client queries information about a mobile (stats or skills).",
"direction": "incoming",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x34",
"description": "Packet identifier"
},
{
"name": "Pattern",
"type": "uint",
"size": 4,
"value": "0xEDEDEDED",
"description": "Fixed pattern"
},
{
"name": "Query Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Type of query",
"values": [
{
"value": "0x04",
"name": "Stats",
"description": "Request mobile stats"
},
{
"value": "0x05",
"name": "Skills",
"description": "Request mobile skills"
}
]
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of mobile to query"
}
],
"related": [
{
"id": "0x11",
"relationship": "response",
"note": "Mobile Status packet sent in response to stats query"
},
{
"id": "0x3A",
"relationship": "response",
"note": "Skills Update sent in response to skills query"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 376
}
},
{
"id": "0x3A",
"name": "Change Skill Lock",
"description": "Client changes the lock state of a skill.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3A",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Skill Index",
"type": "short",
"size": 2,
"description": "Skill index to change"
},
{
"name": "Lock State",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "New lock state",
"values": [
{
"value": 0,
"name": "Up",
"description": "Skill gains enabled"
},
{
"value": 1,
"name": "Down",
"description": "Skill decreases enabled"
},
{
"value": 2,
"name": "Locked",
"description": "Skill locked at current value"
}
]
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 331
}
},
{
"id": "0x72",
"name": "Set War Mode",
"description": "Client toggles war/peace mode.",
"direction": "incoming",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x72",
"description": "Packet identifier"
},
{
"name": "Warmode",
"type": "bool",
"size": 1,
"description": "True = war mode, False = peace mode"
},
{
"name": "Padding",
"type": "byte",
"size": 3,
"description": "Unused padding (0x00, 0x32, 0x00)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 343
}
},
{
"id": "0x73",
"name": "Ping Request",
"description": "Client sends ping for latency measurement.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x73",
"description": "Packet identifier"
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Ping sequence number"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 366
}
},
{
"id": "0x7D",
"name": "Menu Response",
"description": "Client responds to a displayed item menu.",
"direction": "incoming",
"isDynamic": false,
"size": 13,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x7D",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Menu dialog serial"
},
{
"name": "Menu ID",
"type": "short",
"size": 2,
"description": "Menu ID (unused in implementation)"
},
{
"name": "Index",
"type": "short",
"size": 2,
"description": "Selected item index (1-based, 0 = cancel)"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Item graphic ID of selection"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Hue of selection"
}
],
"related": [
{
"id": "0x7C",
"relationship": "request",
"note": "Display Item List Menu packet"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 287
}
},
{
"id": "0x95",
"name": "Hue Picker Response",
"description": "Client responds to a hue picker dialog.",
"direction": "incoming",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x95",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Hue picker serial"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Item ID (unused)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Selected hue (masked with 0x3FFF)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 86
}
},
{
"id": "0x9A",
"name": "ASCII Prompt Response",
"description": "Client responds to an ASCII text prompt.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["Menu"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x9A",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Prompt serial"
},
{
"name": "Prompt ID",
"type": "int",
"size": 4,
"description": "Prompt ID"
},
{
"name": "Type",
"type": "int",
"size": 4,
"description": "Response type: 0 = cancel, other = submit"
},
{
"name": "Text",
"type": "ascii-t",
"description": "Response text (max 128 chars)"
}
],
"related": [
{
"id": "0xC2",
"relationship": "request",
"note": "Unicode Prompt packet that triggered this response"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 214
}
},
{
"id": "0x9B",
"name": "Help Request",
"description": "Client requests help/GM assistance.",
"direction": "incoming",
"isDynamic": false,
"size": 258,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x9B",
"description": "Packet identifier"
},
{
"name": "Data",
"type": "byte[]",
"size": 257,
"description": "Help request data (format TBD)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 338
}
},
{
"id": "0xA4",
"name": "System Info",
"description": "Client sends system/hardware information.",
"direction": "incoming",
"isDynamic": false,
"size": 149,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xA4",
"description": "Packet identifier"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "ushort",
"size": 2,
"description": "Unknown"
},
{
"name": "Unknown3",
"type": "byte",
"size": 1,
"description": "Unknown"
},
{
"name": "String1",
"type": "ascii",
"size": 32,
"description": "System string 1"
},
{
"name": "String2",
"type": "ascii",
"size": 32,
"description": "System string 2"
},
{
"name": "String3",
"type": "ascii",
"size": 32,
"description": "System string 3"
},
{
"name": "String4",
"type": "ascii",
"size": 32,
"description": "System string 4"
},
{
"name": "Unknown4",
"type": "ushort",
"size": 2,
"description": "Unknown"
},
{
"name": "Unknown5",
"type": "ushort",
"size": 2,
"description": "Unknown"
},
{
"name": "Unknown6",
"type": "int",
"size": 4,
"description": "Unknown"
},
{
"name": "Unknown7",
"type": "int",
"size": 4,
"description": "Unknown"
},
{
"name": "Unknown8",
"type": "int",
"size": 4,
"description": "Unknown"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 103
}
},
{
"id": "0xA7",
"name": "Request Scroll Window",
"description": "Client requests a tips/scroll window.",
"direction": "incoming",
"isDynamic": false,
"size": 4,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xA7",
"description": "Packet identifier"
},
{
"name": "Last Tip",
"type": "short",
"size": 2,
"description": "Last tip ID viewed"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Scroll type"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 63
}
},
{
"id": "0xC2",
"name": "Unicode Prompt Response",
"description": "Client responds to a Unicode text prompt.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"tags": ["Menu"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC2",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Prompt serial"
},
{
"name": "Prompt ID",
"type": "int",
"size": 4,
"description": "Prompt ID"
},
{
"name": "Type",
"type": "int",
"size": 4,
"description": "Response type: 0 = cancel, other = submit"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027ENU\u0027)"
},
{
"name": "Text",
"type": "utf16le-t",
"description": "Response text (max 128 chars)"
}
],
"related": [
{
"id": "0xC2",
"direction": "outgoing",
"relationship": "request",
"note": "Unicode Prompt packet that triggered this response"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 250
}
},
{
"id": "0xC8",
"name": "Set Update Range",
"description": "Client requests to change update range. Server ignores and sends back fixed range.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC8",
"description": "Packet identifier"
},
{
"name": "Range",
"type": "byte",
"size": 1,
"description": "Requested update range (ignored)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 371
}
},
{
"id": "0xD0",
"name": "Configuration File",
"description": "Client sends configuration data. Currently ignored by server.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD0",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Data",
"type": "byte[]",
"description": "Configuration data (ignored)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 322
}
},
{
"id": "0xD1",
"name": "Logout Request",
"description": "Client requests to logout.",
"direction": "incoming",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD1",
"description": "Packet identifier"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown (typically 0x01)"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 326
}
},
{
"id": "0xF4",
"name": "Crash Report",
"description": "Client sends crash/error report.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF4",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Client Major",
"type": "byte",
"size": 1,
"description": "Client major version"
},
{
"name": "Client Minor",
"type": "byte",
"size": 1,
"description": "Client minor version"
},
{
"name": "Client Rev",
"type": "byte",
"size": 1,
"description": "Client revision"
},
{
"name": "Client Pat",
"type": "byte",
"size": 1,
"description": "Client patch"
},
{
"name": "X",
"type": "ushort",
"size": 2,
"description": "Player X coordinate at crash"
},
{
"name": "Y",
"type": "ushort",
"size": 2,
"description": "Player Y coordinate at crash"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Player Z coordinate at crash"
},
{
"name": "Map",
"type": "byte",
"size": 1,
"description": "Map ID at crash"
},
{
"name": "Account Name",
"type": "ascii",
"size": 32,
"description": "Account name"
},
{
"name": "Character Name",
"type": "ascii",
"size": 32,
"description": "Character name"
},
{
"name": "IP Address",
"type": "ascii",
"size": 15,
"description": "Client IP address"
},
{
"name": "Unknown1",
"type": "int",
"size": 4,
"description": "Unknown"
},
{
"name": "Exception Code",
"type": "int",
"size": 4,
"description": "Exception code"
},
{
"name": "Process Name",
"type": "ascii",
"size": 100,
"description": "Process name"
},
{
"name": "Report Text",
"type": "ascii",
"size": 100,
"description": "Report text"
},
{
"name": "Terminator",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Null terminator"
},
{
"name": "Offset",
"type": "int",
"size": 4,
"description": "Crash offset"
},
{
"name": "Stack Count",
"type": "byte",
"size": 1,
"description": "Number of stack trace entries"
},
{
"name": "Stack Addresses",
"type": "loop",
"loop": {
"countField": "stackCount",
"fields": [
{
"name": "Address",
"type": "int",
"size": 4,
"description": "Stack frame address"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingPlayerPackets.cs",
"line": 413
}
}
]
}

View file

@ -1,144 +0,0 @@
{
"category": "Secure Trade",
"packets": [
{
"id": "0x6F",
"name": "Secure Trade",
"description": "Client interacts with a secure trade window.",
"direction": "incoming",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Cancel Trade",
"condition": "action == Cancel (1)",
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Action",
"type": "byte",
"size": 1,
"value": "1",
"description": "Cancel action"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the trade container"
}
]
},
{
"name": "Toggle Accept",
"condition": "action == Check (2)",
"size": 12,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Action",
"type": "byte",
"size": 1,
"value": "2",
"description": "Check/toggle action"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the trade container"
},
{
"name": "Accepted",
"type": "bool",
"size": 4,
"description": "True if accepting the trade"
}
]
},
{
"name": "Update Gold/Platinum",
"condition": "action == UpdateGold (3)",
"size": 16,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Action",
"type": "byte",
"size": 1,
"value": "3",
"description": "Update gold action"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the trade container"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Gold amount to trade"
},
{
"name": "Platinum",
"type": "int",
"size": 4,
"description": "Platinum amount to trade"
}
]
}
],
"related": [
{
"id": "0x6F",
"direction": "outgoing",
"relationship": "response",
"note": "Server sends trade window updates"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingMobilePackets.cs",
"line": 93
}
}
]
}

View file

@ -1,32 +0,0 @@
{
"category": "Store",
"packets": [
{
"id": "0xFA",
"name": "Open UO Store",
"description": "Client requests to open the Ultima Store interface. Sent when player clicks the UO Store button in the client toolbar (Classic) or selects Ultima Store from the menu (Enhanced).",
"direction": "incoming",
"isDynamic": false,
"size": 1,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xFA",
"description": "Packet identifier"
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "Ultima Store feature"
},
"source": {
"file": "Projects/UOContent/Engines/UltimaStore/UltimaStorePackets.cs",
"line": 10
},
"notes": "The Ultima Store is an in-game microtransaction store on official servers. ModernUO includes a placeholder that displays a 'not available' message. Free shards may implement their own store functionality using this packet trigger."
}
]
}

View file

@ -1,117 +0,0 @@
{
"category": "Targeting",
"packets": [
{
"id": "0x6C",
"name": "Target Response",
"description": "Client responds to a target cursor request.",
"direction": "incoming",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6C",
"description": "Packet identifier"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target type",
"values": [
{
"value": 0,
"name": "Object",
"description": "Targeting a specific object (mobile/item)"
},
{
"value": 1,
"name": "Location",
"description": "Targeting a location/tile"
}
]
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID to match request"
},
{
"name": "Flags",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target flags",
"values": [
{
"value": 0,
"name": "Neutral",
"description": "Neutral targeting"
},
{
"value": 1,
"name": "Harmful",
"description": "Harmful action"
},
{
"value": 2,
"name": "Beneficial",
"description": "Beneficial action"
},
{
"value": 3,
"name": "Cancel",
"description": "Targeting canceled"
}
]
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of targeted object (0 for ground)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate (-1 if canceled)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate (-1 if canceled)"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"description": "Unknown (typically 0)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Target Z coordinate"
},
{
"name": "Graphic",
"type": "ushort",
"size": 2,
"description": "Graphic ID of targeted tile (0 for land)"
}
],
"notes": "If x == -1 \u0026\u0026 y == -1 \u0026\u0026 serial is invalid, user pressed Escape to cancel targeting.",
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingTargetingPackets.cs",
"line": 28
}
}
]
}

View file

@ -1,145 +0,0 @@
{
"category": "Vendor",
"packets": [
{
"id": "0x3B",
"name": "Vendor Buy Reply",
"description": "Client confirms items to purchase from a vendor.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3B",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"description": "0x00 = buy, 0x02 = cancel"
},
{
"name": "Items",
"type": "loop",
"loop": {
"untilEnd": true,
"fields": [
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Layer/container index"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to buy"
},
{
"name": "Amount",
"type": "short",
"size": 2,
"description": "Amount to purchase"
}
]
}
}
],
"related": [
{
"id": "0x74",
"relationship": "request",
"note": "Vendor Buy List packet that initiated this"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingVendorPackets.cs",
"line": 25
}
},
{
"id": "0x9F",
"name": "Vendor Sell Reply",
"description": "Client confirms items to sell to a vendor.",
"direction": "incoming",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x9F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items to sell"
},
{
"name": "Items",
"type": "loop",
"loop": {
"countField": "itemCount",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item to sell"
},
{
"name": "Amount",
"type": "short",
"size": 2,
"description": "Amount to sell"
}
]
}
}
],
"related": [
{
"id": "0x9E",
"relationship": "request",
"note": "Vendor Sell List packet that initiated this"
}
],
"source": {
"file": "Projects/UOContent/Network/Packets/IncomingVendorPackets.cs",
"line": 26
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,137 +0,0 @@
{
"category": "Quest",
"packets": [
{
"id": "0xBA",
"name": "Quest Arrow",
"description": "Sets or cancels the quest tracking arrow on the client.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"name": "Pre-High Seas Set Arrow",
"condition": "command == 1 (Set), pre-HighSeas client",
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBA",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Set arrow command"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
}
]
},
{
"name": "Pre-High Seas Cancel Arrow",
"condition": "command == 0 (Cancel), pre-HighSeas client",
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBA",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Cancel arrow command"
},
{
"name": "X",
"type": "short",
"size": 2,
"value": "-1",
"description": "X coordinate (-1)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"value": "-1",
"description": "Y coordinate (-1)"
}
]
},
{
"name": "High Seas",
"condition": "HighSeas client (7.0.9.0+)",
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBA",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"description": "Command (0 = cancel, 1 = set)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Target X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Target Y coordinate"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of tracked target"
}
]
}
],
"related": [
{
"id": "0xBF/0x07",
"relationship": "request",
"note": "Quest Arrow Click from client"
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "HighSeas (7.0.9.0+) adds target serial. Pre-HS clients use 6-byte variant, HS+ clients use 10-byte variant."
},
"source": {
"file": "Projects/UOContent/Skills/Tracking/OutgoingArrowPackets.cs",
"line": 29
}
}
]
}

View file

@ -1,75 +0,0 @@
{
"category": "Assistant",
"packets": [
{
"id": "0xF0",
"name": "Assistant Handshake",
"description": "Server sends handshake to negotiate assistant features with Razor-style clients. Contains disallowed feature flags.",
"direction": "outgoing",
"isDynamic": false,
"size": 12,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF0",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x000C",
"description": "Packet length (12)"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0xFE",
"description": "Handshake command"
},
{
"name": "Disallowed Features",
"type": "ulong",
"size": 8,
"description": "Bitmask of disallowed assistant features"
}
],
"notes": "Used for assistant negotiation with Razor Community Edition and similar clients. If negotiation fails within 30 seconds, the server may kick the player.",
"source": {
"file": "Projects/UOContent/Assistants/AssistantHandler.cs",
"line": 132
}
},
{
"id": "0xBE",
"name": "Assistant Version Request",
"description": "Server requests assistant version information from the client.",
"direction": "outgoing",
"isDynamic": false,
"size": 3,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBE",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0003",
"description": "Packet length (3)"
}
],
"source": {
"file": "Projects/UOContent/Assistants/AssistantHandler.cs",
"line": 122
}
}
]
}

View file

@ -1,122 +0,0 @@
{
"category": "Boat",
"packets": [
{
"id": "0xF6",
"name": "Boat Move (High Seas)",
"description": "Sent when a boat moves, containing the boat\u0027s new position and all entities on board with their updated positions.",
"direction": "outgoing",
"isDynamic": true,
"size": "18 + (entityCount x 10)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF6",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Boat Serial",
"type": "uint",
"size": 4,
"description": "Serial of the boat"
},
{
"name": "Speed",
"type": "byte",
"size": 1,
"description": "Boat movement speed"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Movement direction (0-7)"
},
{
"name": "Facing",
"type": "byte",
"size": 1,
"description": "Boat facing direction"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Boat X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Boat Y coordinate"
},
{
"name": "Z",
"type": "short",
"size": 2,
"description": "Boat Z coordinate"
},
{
"name": "Entity Count",
"type": "short",
"size": 2,
"description": "Number of entities on boat (max 65535)"
},
{
"name": "Entities",
"type": "array",
"description": "Entities on the boat with their positions",
"loop": {
"countField": "entityCount",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Entity X coordinate (boat offset applied)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Entity Y coordinate (boat offset applied)"
},
{
"name": "Z",
"type": "short",
"size": 2,
"description": "Entity Z coordinate"
}
]
}
}
],
"clientVersion": {
"classic": {
"min": "7.0.9.0"
},
"enhanced": {},
"notes": "High Seas expansion feature"
},
"source": {
"file": "Projects/UOContent/Multis/Boats/BoatPackets.cs",
"line": 27
},
"notes": "High Seas expansion only. Entities include mobiles and items on the boat. Coordinates include the boat\u0027s movement offset."
}
]
}

View file

@ -1,217 +0,0 @@
{
"category": "Book",
"packets": [
{
"id": "0x66",
"name": "Book Content",
"description": "Sends full book content including all pages and lines.",
"direction": "outgoing",
"isDynamic": true,
"size": "9+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x66",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages"
},
{
"name": "Pages",
"type": "loop",
"description": "Page contents",
"loop": {
"countField": "pageCount",
"fields": [
{
"name": "Page Number",
"type": "ushort",
"size": 2,
"description": "Page number (1-indexed)"
},
{
"name": "Line Count",
"type": "ushort",
"size": 2,
"description": "Number of lines on page"
},
{
"name": "Lines",
"type": "loop",
"description": "Lines on the page",
"loop": {
"countField": "lineCount",
"fields": [
{
"name": "Text",
"type": "utf8-t",
"description": "Line text"
}
]
}
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 136
}
},
{
"id": "0xD4",
"name": "Book Header",
"description": "Sends book cover information (title, author, writable status).",
"direction": "outgoing",
"isDynamic": true,
"size": "17+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD4",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book"
},
{
"name": "Flag On",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Flag on (always 1)"
},
{
"name": "Writable",
"type": "bool",
"size": 1,
"description": "True if book is writable and in range"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages"
},
{
"name": "Title Length",
"type": "ushort",
"size": 2,
"description": "Length of title + 1 (for null)"
},
{
"name": "Title",
"type": "utf8-t",
"description": "Book title"
},
{
"name": "Author Length",
"type": "ushort",
"size": 2,
"description": "Length of author + 1 (for null)"
},
{
"name": "Author",
"type": "utf8-t",
"description": "Book author"
}
],
"related": [
{
"id": "0x93",
"relationship": "variant",
"note": "Old Book Header format (outgoing)"
}
],
"source": {
"file": "Projects/UOContent/Items/Books/BookPackets.cs",
"line": 184
}
},
{
"id": "0x93",
"name": "Old Book Header",
"description": "Old format for book cover (fixed-size ASCII strings).",
"direction": "outgoing",
"isDynamic": false,
"size": 99,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x93",
"description": "Packet identifier"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the book"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Book flags"
},
{
"name": "Page Count",
"type": "ushort",
"size": 2,
"description": "Number of pages"
},
{
"name": "Title",
"type": "ascii",
"size": 60,
"description": "Book title (fixed 60 bytes)"
},
{
"name": "Author",
"type": "ascii",
"size": 30,
"description": "Book author (fixed 30 bytes)"
}
],
"related": [
{
"id": "0xD4",
"relationship": "variant",
"note": "New Book Header format (outgoing)"
}
],
"notes": "Old format used by older clients. Title and author are fixed-size ASCII."
}
]
}

View file

@ -1,307 +0,0 @@
{
"category": "Buff Icon",
"packets": [
{
"id": "0xDF",
"name": "Buff/Debuff System",
"description": "Manages buff and debuff icons displayed on the client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Remove Buff",
"condition": "command == 0 (Remove)",
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "15",
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile"
},
{
"name": "Icon ID",
"type": "short",
"size": 2,
"description": "Buff icon ID"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0000",
"description": "Remove command"
},
{
"name": "Unused",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
}
]
},
{
"name": "Add Buff (No Args)",
"condition": "command == 1 (Add), no arguments",
"size": 46,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "46",
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile"
},
{
"name": "Icon ID",
"type": "short",
"size": 2,
"description": "Buff icon ID"
},
{
"name": "Command1",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command"
},
{
"name": "Unused1",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Icon Id2",
"type": "short",
"size": 2,
"description": "Buff icon ID (repeated)"
},
{
"name": "Command2",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command (repeated)"
},
{
"name": "Unused2",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Duration",
"type": "short",
"size": 2,
"description": "Duration in seconds"
},
{
"name": "Padding",
"type": "byte[]",
"size": 3,
"description": "Padding (zeros)"
},
{
"name": "Title Cliloc",
"type": "int",
"size": 4,
"description": "Title cliloc number"
},
{
"name": "Secondary Cliloc",
"type": "int",
"size": 4,
"description": "Secondary cliloc number"
},
{
"name": "Empty Args",
"type": "byte[]",
"size": 10,
"description": "Empty arguments (zeros)"
}
]
},
{
"name": "Add Buff (With Args)",
"condition": "command == 1 (Add), with arguments",
"size": "52 + (args.Length x 2)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile"
},
{
"name": "Icon ID",
"type": "short",
"size": 2,
"description": "Buff icon ID"
},
{
"name": "Command1",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command"
},
{
"name": "Unused1",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Icon Id2",
"type": "short",
"size": 2,
"description": "Buff icon ID (repeated)"
},
{
"name": "Command2",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Add command (repeated)"
},
{
"name": "Unused2",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Duration",
"type": "short",
"size": 2,
"description": "Duration in seconds"
},
{
"name": "Padding",
"type": "byte[]",
"size": 3,
"description": "Padding (zeros)"
},
{
"name": "Title Cliloc",
"type": "int",
"size": 4,
"description": "Title cliloc number"
},
{
"name": "Secondary Cliloc",
"type": "int",
"size": 4,
"description": "Secondary cliloc number"
},
{
"name": "Unused3",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Has Args",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Has arguments flag"
},
{
"name": "Unused4",
"type": "ushort",
"size": 2,
"value": "0",
"description": "Unused"
},
{
"name": "Tab Prefix",
"type": "utf16le",
"size": 2,
"value": "\\t",
"description": "Tab character prefix"
},
{
"name": "Arguments",
"type": "utf16le-t",
"description": "Cliloc arguments"
},
{
"name": "Has Args2",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Has arguments flag (repeated)"
},
{
"name": "Unused5",
"type": "ushort",
"size": 2,
"value": "0",
"description": "Unused"
}
]
}
],
"clientVersion": {
"classic": {
"min": "5.0.2b"
},
"enhanced": {},
"notes": "BuffIcon feature supported in Classic Client 5.0.2b+"
},
"source": {
"file": "Projects/UOContent/Engines/BuffIcons/BuffIconPackets.cs",
"line": 8
}
}
]
}

View file

@ -1,276 +0,0 @@
{
"category": "Bulletin Board",
"packets": [
{
"id": "0x71",
"name": "Bulletin Board",
"description": "Bulletin board display and message packets.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Display Board",
"condition": "command == 0x00",
"size": 38,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "38",
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Display board command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Board Name",
"type": "utf8",
"size": 30,
"description": "Board name (null-padded to 30 bytes)"
}
]
},
{
"name": "Message Header",
"condition": "command == 0x01",
"size": "22+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Message header command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message"
},
{
"name": "Thread Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent thread (0 if root)"
},
{
"name": "Poster Length",
"type": "byte",
"size": 1,
"description": "Length of poster name"
},
{
"name": "Poster",
"type": "utf8-t",
"description": "Poster name"
},
{
"name": "Subject Length",
"type": "byte",
"size": 1,
"description": "Length of subject"
},
{
"name": "Subject",
"type": "utf8-t",
"description": "Message subject"
},
{
"name": "Time Length",
"type": "byte",
"size": 1,
"description": "Length of time string"
},
{
"name": "Time",
"type": "utf8-t",
"description": "Posted time string"
}
]
},
{
"name": "Message Content",
"condition": "command == 0x02",
"size": "22+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x71",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x02",
"description": "Message content command"
},
{
"name": "Board Serial",
"type": "uint",
"size": 4,
"description": "Serial of the bulletin board"
},
{
"name": "Message Serial",
"type": "uint",
"size": 4,
"description": "Serial of the message"
},
{
"name": "Poster Length",
"type": "byte",
"size": 1,
"description": "Length of poster name"
},
{
"name": "Poster",
"type": "utf8-t",
"description": "Poster name"
},
{
"name": "Subject Length",
"type": "byte",
"size": 1,
"description": "Length of subject"
},
{
"name": "Subject",
"type": "utf8-t",
"description": "Message subject"
},
{
"name": "Time Length",
"type": "byte",
"size": 1,
"description": "Length of time string"
},
{
"name": "Time",
"type": "utf8-t",
"description": "Posted time string"
},
{
"name": "Poster Body",
"type": "short",
"size": 2,
"description": "Poster body graphic"
},
{
"name": "Poster Hue",
"type": "short",
"size": 2,
"description": "Poster body hue"
},
{
"name": "Equip Count",
"type": "byte",
"size": 1,
"description": "Number of equipment items"
},
{
"name": "Equipment",
"type": "loop",
"description": "Poster\u0027s equipment",
"loop": {
"countField": "equipCount",
"fields": [
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Equipment item graphic"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Equipment hue"
}
]
}
},
{
"name": "Line Count",
"type": "byte",
"size": 1,
"description": "Number of text lines"
},
{
"name": "Lines",
"type": "loop",
"description": "Message lines",
"loop": {
"countField": "lineCount",
"fields": [
{
"name": "Line Length",
"type": "byte",
"size": 1,
"description": "Line length"
},
{
"name": "Line",
"type": "utf8",
"description": "Line text with 2-byte terminator (old client bug)"
}
]
}
}
]
}
],
"source": {
"file": "Projects/UOContent/Items/Bulletin Boards/BulletinBoardPackets.cs",
"line": 168
}
}
]
}

View file

@ -1,69 +0,0 @@
{
"category": "Chat",
"packets": [
{
"id": "0xB2",
"name": "Chat Message",
"description": "Server sends chat system messages and commands to the client.",
"direction": "outgoing",
"isDynamic": true,
"size": "13+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB2",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"description": "Chat command number (original number minus 20)"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027enu\u0027 for English)"
},
{
"name": "Param 1",
"type": "utf16be-t",
"description": "First parameter (Big Endian Unicode, null-terminated)"
},
{
"name": "Param 2",
"type": "utf16be-t",
"description": "Second parameter (Big Endian Unicode, null-terminated)"
}
],
"related": [
{
"id": "0xB3",
"direction": "incoming",
"relationship": "request",
"note": "Client sends Chat Action"
},
{
"id": "0xB5",
"direction": "incoming",
"relationship": "request",
"note": "Client sends Open Chat Window Request"
}
],
"notes": "Part of the in-game chat system. Command numbers are offset by -20 from original values.",
"source": {
"file": "Projects/UOContent/Engines/Chat/ChatPackets.cs",
"line": 104
}
}
]
}

View file

@ -1,120 +0,0 @@
{
"category": "Combat",
"packets": [
{
"id": "0x2F",
"name": "Swing",
"description": "Notifies client of a melee swing between two mobiles.",
"direction": "outgoing",
"isDynamic": false,
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x2F",
"description": "Packet identifier"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Attacker Serial",
"type": "uint",
"size": 4,
"description": "Serial of attacker"
},
{
"name": "Defender Serial",
"type": "uint",
"size": 4,
"description": "Serial of defender"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 23
}
},
{
"id": "0x72",
"name": "Set War Mode",
"description": "Sets the client\u0027s war/peace mode state.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x72",
"description": "Packet identifier"
},
{
"name": "Warmode",
"type": "bool",
"size": 1,
"description": "True = war mode, False = peace mode"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "byte",
"size": 1,
"value": "0x32",
"description": "Unknown (50)"
},
{
"name": "Unknown3",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 40
}
},
{
"id": "0xAA",
"name": "Change Combatant",
"description": "Notifies client of current combat target.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAA",
"description": "Packet identifier"
},
{
"name": "Combatant Serial",
"type": "uint",
"size": 4,
"description": "Serial of current combatant (0 = none)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingCombatPackets.cs",
"line": 43
}
}
]
}

View file

@ -1,594 +0,0 @@
{
"category": "Container",
"packets": [
{
"id": "0x24",
"name": "Display Container",
"description": "Opens a container gump on the client.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"name": "Classic",
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x24",
"description": "Packet identifier"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the container"
},
{
"name": "Gump ID",
"type": "ushort",
"size": 2,
"description": "Gump graphic ID"
}
]
},
{
"name": "High Seas Extended",
"condition": "Client version \u003e= 7.0.9.0 (HighSeas)",
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x24",
"description": "Packet identifier"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of the container"
},
{
"name": "Gump ID",
"type": "ushort",
"size": 2,
"description": "Gump graphic ID"
},
{
"name": "Container Type",
"type": "short",
"size": 2,
"value": "0x007D",
"description": "Container type (125)"
}
]
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "HighSeas (7.0.9.0+) adds containerType field"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 108
}
},
{
"id": "0x25",
"name": "Container Content Update",
"description": "Updates a single item in a container.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"name": "Classic",
"size": 20,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x25",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
},
{
"name": "Container Grid Lines",
"condition": "Client version \u003e= 6.0.1.7 (ContainerGridLines)",
"size": 21,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x25",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Grid Location",
"type": "byte",
"size": 1,
"description": "Grid slot position"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "ContainerGridLines (6.0.1.7+) adds gridLocation byte"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 127
}
},
{
"id": "0x3C",
"name": "Container \u0026 Old Spellbook Content",
"description": "Sends full contents of a container. Also used for corpse contents and old-style spellbook content (pre-AOS clients). For AOS+ spellbooks, use 0xBF/0x1B instead.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"tags": ["Spellbook", "Corpse"],
"variants": [
{
"name": "Classic Format",
"condition": "Client version \u003c 6.0.1.7",
"size": "5 + (itemCount x 19)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Item entries (19 bytes each)",
"loop": {
"countField": "itemCount",
"itemSize": 19,
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
}
}
]
},
{
"name": "Grid Location Format",
"condition": "Client version \u003e= 6.0.1.7 (ContainerGridLines)",
"size": "5 + (itemCount x 20)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Item entries (20 bytes each)",
"loop": {
"countField": "itemCount",
"itemSize": 20,
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Item ID Offset",
"type": "byte",
"size": 1,
"description": "Item ID offset (signed)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X position in container"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y position in container"
},
{
"name": "Grid Location",
"type": "byte",
"size": 1,
"description": "Grid slot position in container"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of parent container"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
}
]
}
}
]
}
],
"related": [
{
"id": "0xBF/0x1B",
"relationship": "variant",
"note": "New Spellbook Content for AOS+ clients"
},
{
"id": "0x89",
"relationship": "related",
"note": "Corpse Equipment (layer mappings for corpse items)"
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "ContainerGridLines (6.0.1.7+) adds gridLocation byte per item"
},
"notes": "Also used for corpse contents. Corpses are special containers that display equipped items on a body graphic. Use with 0x89 Corpse Equipment for full corpse display.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 169
}
},
{
"id": "0xBF",
"subId": "0x1B",
"name": "New Spellbook Content",
"description": "Sends spellbook contents using AOS format with a 64-bit bitmask of known spells.",
"direction": "outgoing",
"isDynamic": false,
"size": 23,
"tags": ["Spell", "Spellbook", "Extended Commands (0xBF)"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0017",
"description": "Packet length (23)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x001B",
"description": "Subcommand (New Spellbook Content)"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Command (always 1)"
},
{
"name": "Book Serial",
"type": "uint",
"size": 4,
"description": "Serial of the spellbook"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Spellbook graphic ID"
},
{
"name": "Offset",
"type": "short",
"size": 2,
"description": "Spell offset (circle/school start)"
},
{
"name": "Spell Bits",
"type": "ulong",
"size": 8,
"description": "64-bit mask of known spells (written byte-by-byte, Little Endian)"
}
],
"related": [
{
"id": "0x3C",
"relationship": "variant",
"note": "Old Spellbook Content for pre-AOS clients"
}
],
"clientVersion": {
"classic": {
"min": "5.0.0a"
},
"enhanced": {},
"notes": "NewSpellbook feature (Core.AOS)"
},
"notes": "Used when Core.AOS \u0026\u0026 ns.NewSpellbook. Otherwise, old 0x3C format is used with spells as pseudo-items.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingContainerPackets.cs",
"line": 46
}
},
{
"id": "0xF7",
"name": "Packet Container",
"description": "Container packet for batching multiple entity packets. Used for sending groups of related entities efficiently, such as all items and mobiles visible on a boat.",
"direction": "outgoing",
"tags": ["Boat"],
"isDynamic": true,
"size": "5+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Total packet length"
},
{
"name": "Packet Count",
"type": "ushort",
"size": 2,
"description": "Number of embedded packets"
},
{
"name": "Packets",
"type": "array",
"description": "Embedded packets (typically 0xF3 World Entity packets)",
"loop": {
"countField": "packetCount",
"fields": [
{
"name": "Embedded Packet",
"type": "bytes",
"size": "var",
"description": "Complete embedded packet (typically 24-26 byte 0xF3 World Entity)"
}
]
}
}
],
"related": [
{
"id": "0xF3",
"relationship": "contains",
"note": "Typically contains World Entity packets"
},
{
"id": "0xF6",
"relationship": "variant",
"note": "Used alongside Move Boat HS for boat display"
}
],
"clientVersion": {
"classic": {
"min": "7.0.9.0"
},
"enhanced": {},
"notes": "HighSeas expansion feature"
},
"notes": "Uses PacketContainerBuilder for efficient dynamic growth. Commonly used by boat system to batch all visible entities on deck. Minimum packet length is 5 bytes (header only).",
"source": {
"file": "Projects/Server/Network/Packets/PacketContainerBuilder.cs",
"line": 23
}
}
]
}

View file

@ -1,212 +0,0 @@
{
"category": "Context Menu",
"packets": [
{
"id": "0xBF",
"subId": "0x14",
"name": "Display Context Menu",
"description": "Displays a context menu for an entity.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Old Format",
"condition": "command == 0x01 (pre-NewHaven)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0014",
"description": "Context Menu subcommand"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Old format command"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
},
{
"name": "Entry Count",
"type": "byte",
"size": 1,
"description": "Number of menu entries"
},
{
"name": "Entries",
"type": "loop",
"description": "Menu entries",
"loop": {
"countField": "entryCount",
"fields": [
{
"name": "Index",
"type": "short",
"size": 2,
"description": "Entry index"
},
{
"name": "Cliloc Offset",
"type": "ushort",
"size": 2,
"description": "Cliloc number - 3000000"
},
{
"name": "Flags",
"type": "bitfield",
"size": 2,
"description": "Entry flags",
"flags": [
{
"bit": "0",
"name": "Disabled",
"description": "Entry is disabled"
},
{
"bit": "1",
"name": "Arrow",
"description": "Show arrow"
},
{
"bit": "2",
"name": "Highlighted",
"description": "Entry is highlighted"
},
{
"bit": "5",
"name": "Colored",
"description": "Entry uses custom color"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text hue (if Colored flag set)",
"condition": "flags \u0026 0x20"
}
]
}
}
]
},
{
"name": "New Format",
"condition": "command == 0x02 (NewHaven+)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0014",
"description": "Context Menu subcommand"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0002",
"description": "New format command"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target entity"
},
{
"name": "Entry Count",
"type": "byte",
"size": 1,
"description": "Number of menu entries"
},
{
"name": "Entries",
"type": "loop",
"description": "Menu entries",
"loop": {
"countField": "entryCount",
"fields": [
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Full cliloc number"
},
{
"name": "Index",
"type": "short",
"size": 2,
"description": "Entry index"
},
{
"name": "Flags",
"type": "short",
"size": 2,
"description": "Entry flags (see Old Format)"
}
]
}
}
]
}
],
"related": [
{
"id": "0xBF/0x13",
"relationship": "request",
"note": "Context Menu Request from client"
},
{
"id": "0xBF/0x15",
"relationship": "response",
"note": "Context Menu Response from client"
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "NewHaven clients (6.0.0.0+) use command 0x02"
},
"source": {
"file": "Projects/UOContent/Context Menus/ContextMenuSystem.cs",
"line": 142
}
}
]
}

View file

@ -1,76 +0,0 @@
{
"category": "Corpse",
"packets": [
{
"id": "0x89",
"name": "Corpse Equipment",
"description": "Sends the equipment layer mapping for items on a corpse, including virtual hair and facial hair items.",
"direction": "outgoing",
"isDynamic": true,
"size": "8+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x89",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Corpse Serial",
"type": "uint",
"size": 4,
"description": "Serial of the corpse"
},
{
"name": "Equipment",
"type": "loop",
"description": "Equipment layer mappings (5 bytes each, until terminator)",
"loop": {
"terminator": "Layer == 0",
"fields": [
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Equipment layer + 1 (0 = terminator)"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of item in this layer"
}
]
}
},
{
"name": "Terminator",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Layer.Invalid (0) marks end of list"
}
],
"notes": "Layer values are offset by +1 (e.g., Layer.Hair (0x0B) is sent as 0x0C). Hair and facial hair use virtual serials.",
"related": [
{
"id": "0x3C",
"direction": "outgoing",
"relationship": "related",
"note": "Container Content (also used for corpse items)"
}
],
"source": {
"file": "Projects/UOContent/Items/Misc/Corpses/CorpsePackets.cs",
"line": 24
}
}
]
}

View file

@ -1,107 +0,0 @@
{
"category": "Combat",
"packets": [
{
"id": "0x0B",
"name": "Damage",
"description": "Shows damage dealt to a mobile (client 5.0.0a+).",
"direction": "outgoing",
"isDynamic": false,
"size": 7,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x0B",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of damaged mobile"
},
{
"name": "Damage",
"type": "ushort",
"size": 2,
"description": "Damage amount (clamped 0-65535)"
}
],
"clientVersion": {
"classic": {
"min": "5.0.0a"
},
"enhanced": {},
"notes": "Used by Enhanced Client (all versions) and Classic Client 5.0.0a+"
},
"notes": "For pre-5.0.0a clients, use 0xBF/0x22 instead. Enhanced Client always uses this packet format (ushort damage allows values up to 65535).",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingDamagePackets.cs",
"line": 34
}
},
{
"id": "0xBF/0x22",
"name": "Damage (Old)",
"description": "Shows damage dealt to a mobile (pre-5.0.0a clients).",
"direction": "outgoing",
"isDynamic": false,
"size": 11,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "11",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x22",
"description": "Subcommand (Damage)"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Unknown (always 1)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of damaged mobile"
},
{
"name": "Damage",
"type": "byte",
"size": 1,
"description": "Damage amount (clamped 0-255)"
}
],
"clientVersion": {
"classic": {
"max": "5.0.0a"
},
"notes": "For Classic Client before DamagePacket feature. Not used by Enhanced Client."
},
"notes": "Damage is capped at 255 for old clients. Classic Client only; Enhanced Client uses 0x0B packet.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingDamagePackets.cs",
"line": 40
}
}
]
}

View file

@ -1,459 +0,0 @@
{
"category": "Effects",
"packets": [
{
"id": "0x54",
"name": "Sound Effect",
"description": "Plays a sound effect at a location.",
"direction": "outgoing",
"isDynamic": false,
"size": 12,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x54",
"description": "Packet identifier"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Sound flags"
},
{
"name": "Sound ID",
"type": "short",
"size": 2,
"description": "Sound effect ID"
},
{
"name": "Volume",
"type": "short",
"size": 2,
"value": "0x0000",
"description": "Volume (unused)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate"
},
{
"name": "Z",
"type": "short",
"size": 2,
"description": "Z coordinate"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 41
}
},
{
"id": "0x70",
"name": "Screen Effect",
"description": "Triggers a screen-wide visual effect (fade in/out).",
"direction": "outgoing",
"isDynamic": false,
"size": 28,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x70",
"description": "Packet identifier"
},
{
"name": "Effect Type",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Effect type (4)"
},
{
"name": "Padding1",
"type": "byte[]",
"size": 8,
"description": "Padding (zeros)"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 2,
"description": "Screen effect type",
"values": [
{
"value": 0,
"name": "Fade Out",
"description": "Fade screen to black"
},
{
"value": 1,
"name": "Fade In",
"description": "Fade screen from black"
},
{
"value": 2,
"name": "Light Flash",
"description": "Light flash effect"
},
{
"value": 3,
"name": "Fade In Out",
"description": "Fade out then in"
},
{
"value": 4,
"name": "Darken Screen",
"description": "Darken screen"
}
]
},
{
"name": "Padding2",
"type": "byte[]",
"size": 16,
"description": "Padding (zeros)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 322
}
},
{
"id": "0xC0",
"name": "Hued Effect",
"description": "Displays a graphical effect with hue and render mode.",
"direction": "outgoing",
"isDynamic": false,
"size": 36,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC0",
"description": "Packet identifier"
},
{
"name": "Effect Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Effect type",
"values": [
{
"value": 0,
"name": "Moving",
"description": "Effect moves between two points"
},
{
"value": 1,
"name": "Lightning",
"description": "Lightning bolt effect"
},
{
"value": 2,
"name": "Fixed XYZ",
"description": "Effect at fixed location"
},
{
"value": 3,
"name": "Fixed From",
"description": "Effect attached to source"
}
]
},
{
"name": "Source Serial",
"type": "uint",
"size": 4,
"description": "Serial of source entity"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of target entity"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Effect graphic ID"
},
{
"name": "Src X",
"type": "short",
"size": 2,
"description": "Source X coordinate"
},
{
"name": "Src Y",
"type": "short",
"size": 2,
"description": "Source Y coordinate"
},
{
"name": "Src Z",
"type": "sbyte",
"size": 1,
"description": "Source Z coordinate"
},
{
"name": "Dst X",
"type": "short",
"size": 2,
"description": "Destination X coordinate"
},
{
"name": "Dst Y",
"type": "short",
"size": 2,
"description": "Destination Y coordinate"
},
{
"name": "Dst Z",
"type": "sbyte",
"size": 1,
"description": "Destination Z coordinate"
},
{
"name": "Speed",
"type": "byte",
"size": 1,
"description": "Effect speed"
},
{
"name": "Duration",
"type": "byte",
"size": 1,
"description": "Effect duration"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Fixed Direction",
"type": "bool",
"size": 1,
"description": "Fixed direction"
},
{
"name": "Explode",
"type": "bool",
"size": 1,
"description": "Explode on impact"
},
{
"name": "Hue",
"type": "int",
"size": 4,
"description": "Effect hue"
},
{
"name": "Render Mode",
"type": "int",
"size": 4,
"description": "Render mode"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 175
}
},
{
"id": "0xC7",
"name": "Particle Effect",
"description": "Displays an advanced particle effect with extended parameters.",
"direction": "outgoing",
"isDynamic": false,
"size": 49,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC7",
"description": "Packet identifier"
},
{
"name": "Effect Type",
"type": "byte",
"size": 1,
"description": "Effect type (see 0xC0)"
},
{
"name": "Source Serial",
"type": "uint",
"size": 4,
"description": "Serial of source entity"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of target entity"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Effect graphic ID"
},
{
"name": "Src X",
"type": "short",
"size": 2,
"description": "Source X coordinate"
},
{
"name": "Src Y",
"type": "short",
"size": 2,
"description": "Source Y coordinate"
},
{
"name": "Src Z",
"type": "sbyte",
"size": 1,
"description": "Source Z coordinate"
},
{
"name": "Dst X",
"type": "short",
"size": 2,
"description": "Destination X coordinate"
},
{
"name": "Dst Y",
"type": "short",
"size": 2,
"description": "Destination Y coordinate"
},
{
"name": "Dst Z",
"type": "sbyte",
"size": 1,
"description": "Destination Z coordinate"
},
{
"name": "Speed",
"type": "byte",
"size": 1,
"description": "Effect speed"
},
{
"name": "Duration",
"type": "byte",
"size": 1,
"description": "Effect duration"
},
{
"name": "Unknown1",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Unknown2",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown"
},
{
"name": "Fixed Direction",
"type": "bool",
"size": 1,
"description": "Fixed direction"
},
{
"name": "Explode",
"type": "bool",
"size": 1,
"description": "Explode on impact"
},
{
"name": "Hue",
"type": "int",
"size": 4,
"description": "Effect hue"
},
{
"name": "Render Mode",
"type": "int",
"size": 4,
"description": "Render mode"
},
{
"name": "Effect",
"type": "short",
"size": 2,
"description": "Particle effect ID"
},
{
"name": "Explode Effect",
"type": "short",
"size": 2,
"description": "Explosion effect ID"
},
{
"name": "Explode Sound",
"type": "short",
"size": 2,
"description": "Explosion sound ID"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Associated entity serial"
},
{
"name": "Layer",
"type": "byte",
"size": 1,
"description": "Effect layer"
},
{
"name": "Unknown3",
"type": "short",
"size": 2,
"description": "Unknown"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEffectPackets.cs",
"line": 58
}
}
]
}

View file

@ -1,403 +0,0 @@
{
"category": "Item",
"tags": ["Mobile"],
"packets": [
{
"id": "0xD6",
"name": "Object Property List",
"description": "Sends the full Object Property List (tooltip) for an entity. Contains a hash for client caching and a list of localized property entries.",
"direction": "outgoing",
"isDynamic": true,
"size": "15+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD6",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Unknown1",
"type": "ushort",
"size": 2,
"value": "0x0001",
"description": "Unknown (always 1)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Unknown2",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Unknown (always 0)"
},
{
"name": "Hash",
"type": "int",
"size": 4,
"description": "XOR hash of all properties (computed with 26-bit mask)"
},
{
"name": "Properties",
"type": "array",
"description": "Property entries, terminated by number=0",
"loop": {
"terminator": "number == 0",
"fields": [
{
"name": "Number",
"type": "int",
"size": 4,
"description": "Cliloc number (0 = end of list)"
},
{
"name": "String Length",
"type": "ushort",
"size": 2,
"description": "Length of arguments in bytes (0 if no arguments)"
},
{
"name": "Arguments",
"type": "utf16le",
"size": "var",
"description": "Unicode LE string with tab-separated cliloc arguments. Length = String Length field"
}
]
}
}
],
"related": [
{
"id": "0xDC",
"relationship": "notification",
"note": "OPL Info notifies client of hash change, triggering 0xD6 request"
}
],
"clientVersion": {
"classic": {
"min": "4.0.0a"
},
"enhanced": {},
"notes": "AOS tooltips feature"
},
"notes": "Hash is calculated by XORing each property\u0027s cliloc number with ((hash \u003e\u003e 31) \u0026 1) ^ (hash \u003c\u003c 1). Properties are cliloc entries with optional Unicode LE arguments separated by tabs.",
"source": {
"file": "Projects/Server/PropertyList/ObjectPropertyList.cs",
"line": 19
}
},
{
"id": "0x1D",
"name": "Remove Entity",
"description": "Removes an entity (item, mobile, or multi) from the client\u0027s view.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x1D",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of entity to remove"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 75
}
},
{
"id": "0xDC",
"name": "OPL Info (Object Property List)",
"description": "Notifies the client of an entity\u0027s Object Property List hash. Client compares hash to cached version and requests full OPL if different.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDC",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Hash",
"type": "int",
"size": 4,
"description": "Hash of the Object Property List"
}
],
"related": [
{
"id": "0xD6",
"direction": "outgoing",
"relationship": "data",
"note": "Full Object Property List packet"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 33
}
},
{
"id": "0xF3",
"name": "World Entity (SA+)",
"description": "Unified entity packet for items, mobiles, and multis. Replaces older 0x1A World Item packet for Stygian Abyss+ clients. High Seas clients add 2 extra bytes.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "Stygian Abyss",
"name": "SA Format",
"condition": "Client version 7.0.0.0 - 7.0.8.x (StygianAbyss, pre-HighSeas)",
"size": 24,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF3",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Command (always 1)"
},
{
"name": "Entity Type",
"type": "enum",
"size": 1,
"description": "Entity type",
"values": [
{ "value": "0", "name": "Item", "description": "World item" },
{ "value": "1", "name": "Mobile", "description": "Mobile/creature" },
{ "value": "2", "name": "Multi", "description": "Multi/structure" }
]
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Graphic ID",
"type": "ushort",
"size": 2,
"description": "Graphic/Body ID (masked with 0x7FFF)"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction (mobiles) or 0"
},
{
"name": "Amount Min",
"type": "short",
"size": 2,
"description": "Minimum amount (items) or 1"
},
{
"name": "Amount Max",
"type": "short",
"size": 2,
"description": "Maximum amount (items) or 1"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate (masked with 0x7FFF)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate (masked with 0x3FFF)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Z coordinate"
},
{
"name": "Light",
"type": "byte",
"size": 1,
"description": "Light level (items)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Hue/color"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Packet flags (hidden, blessed, etc.)"
}
]
},
{
"version": "High Seas+",
"name": "HS Format",
"condition": "Client version \u003e= 7.0.9.0 (HighSeas)",
"size": 26,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF3",
"description": "Packet identifier"
},
{
"name": "Command",
"type": "short",
"size": 2,
"value": "0x0001",
"description": "Command (always 1)"
},
{
"name": "Entity Type",
"type": "enum",
"size": 1,
"description": "Entity type",
"values": [
{ "value": "0", "name": "Item", "description": "World item" },
{ "value": "1", "name": "Mobile", "description": "Mobile/creature" },
{ "value": "2", "name": "Multi", "description": "Multi/structure" }
]
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Entity serial"
},
{
"name": "Graphic ID",
"type": "ushort",
"size": 2,
"description": "Graphic/Body ID (masked with 0xFFFF, supports higher IDs)"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction (mobiles) or 0"
},
{
"name": "Amount Min",
"type": "short",
"size": 2,
"description": "Minimum amount (items) or 1"
},
{
"name": "Amount Max",
"type": "short",
"size": 2,
"description": "Maximum amount (items) or 1"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate (masked with 0x7FFF)"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate (masked with 0x3FFF)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Z coordinate"
},
{
"name": "Light",
"type": "byte",
"size": 1,
"description": "Light level (items)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Hue/color"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Packet flags (hidden, blessed, etc.)"
},
{
"name": "Unknown",
"type": "short",
"size": 2,
"value": "0x0000",
"description": "Unknown (always 0)"
}
]
}
],
"related": [
{
"id": "0x1A",
"relationship": "variant",
"note": "Legacy World Item packet for pre-SA clients"
}
],
"clientVersion": {
"classic": {
"min": "7.0.0.0"
},
"enhanced": {},
"notes": "StygianAbyss expansion feature"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEntityPackets.cs",
"line": 88
}
}
]
}

View file

@ -1,173 +0,0 @@
{
"category": "Equipment",
"packets": [
{
"id": "0x2E",
"name": "Equip Update",
"description": "Notifies client that an item has been equipped on a mobile.",
"direction": "outgoing",
"isDynamic": false,
"size": 15,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x2E",
"description": "Packet identifier"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the equipped item"
},
{
"name": "Item ID",
"type": "short",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Layer",
"type": "ushort",
"size": 2,
"description": "Equipment layer"
},
{
"name": "Mobile Serial",
"type": "uint",
"size": 4,
"description": "Serial of the mobile wearing the item"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue (may be overridden by SolidHueOverride)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs",
"line": 86
}
},
{
"id": "0xBF",
"subId": "0x10",
"name": "Display Equipment Info",
"description": "Displays detailed equipment information including crafter name and magical properties.",
"direction": "outgoing",
"isDynamic": true,
"size": "17+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0010",
"description": "Display Equipment Info subcommand"
},
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Serial of the item"
},
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Base cliloc number for item name"
},
{
"name": "Crafter Info",
"type": "conditional",
"description": "Crafter information (if present)",
"condition": "crafterName.Length \u003e 0",
"fields": [
{
"name": "Crafted By",
"type": "int",
"size": 4,
"value": "-3",
"description": "Crafter marker"
},
{
"name": "Crafter Name Length",
"type": "ushort",
"size": 2,
"description": "Length of crafter name"
},
{
"name": "Crafter Name",
"type": "ascii",
"description": "Crafter name"
}
]
},
{
"name": "Unidentified",
"type": "conditional",
"description": "Unidentified marker",
"condition": "unidentified",
"fields": [
{
"name": "Unidentified Marker",
"type": "int",
"size": 4,
"value": "-4",
"description": "Unidentified marker"
}
]
},
{
"name": "Attributes",
"type": "loop",
"description": "Equipment attributes",
"loop": {
"countField": "variable",
"fields": [
{
"name": "Attribute Number",
"type": "int",
"size": 4,
"description": "Attribute cliloc number"
},
{
"name": "Charges",
"type": "short",
"size": 2,
"description": "Charges (-1 if not applicable)"
}
]
}
},
{
"name": "Terminator",
"type": "int",
"size": 4,
"value": "-1",
"description": "End of attributes marker"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingEquipmentPackets.cs",
"line": 37
}
}
]
}

View file

@ -1,70 +0,0 @@
{
"category": "FreeShard Protocol",
"packets": [
{
"id": "0x51",
"name": "Compact Shard Stats",
"description": "Server response to compact shard stats query (0xF1/0xFE).",
"direction": "outgoing",
"isDynamic": false,
"size": 27,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x51",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x001B",
"description": "Packet length (27)"
},
{
"name": "Clients",
"type": "int",
"size": 4,
"description": "Current client count"
},
{
"name": "Items",
"type": "int",
"size": 4,
"description": "Total item count"
},
{
"name": "Mobiles",
"type": "int",
"size": 4,
"description": "Total mobile count"
},
{
"name": "Age",
"type": "uint",
"size": 4,
"description": "Server uptime in seconds"
},
{
"name": "Memory",
"type": "long",
"size": 8,
"description": "Memory usage in bytes"
}
],
"related": [
{
"id": "0xF1/0xFE",
"relationship": "request",
"note": "Query Compact Shard Stats request"
}
],
"source": {
"file": "Projects/UOContent/Network/UOGateway.cs",
"line": 60
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,309 +0,0 @@
{
"category": "House",
"packets": [
{
"id": "0xD8",
"name": "House Design State Detailed",
"description": "Sends detailed house customization design data. Contains compressed plane data organized by floor level and component type. Tiles are encoded using grid-based or coordinate-based formats depending on their Z-height.",
"direction": "outgoing",
"isDynamic": true,
"size": "18+",
"tags": ["House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xD8",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Compression Type",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Compression type (always 3 = compressed)"
},
{
"name": "Unknown",
"type": "byte",
"size": 1,
"value": "0x00",
"description": "Unknown (always 0)"
},
{
"name": "House Serial",
"type": "uint",
"size": 4,
"description": "Serial of the house foundation"
},
{
"name": "Revision",
"type": "int",
"size": 4,
"description": "Design revision number"
},
{
"name": "Tile Count",
"type": "ushort",
"size": 2,
"description": "Total number of tiles in the design"
},
{
"name": "Buffer Length",
"type": "ushort",
"size": 2,
"description": "Length of remaining data (plane count + all plane sections)"
},
{
"name": "Plane Count",
"type": "byte",
"size": 1,
"description": "Number of plane/buffer sections that follow"
},
{
"name": "Plane Sections",
"type": "array",
"description": "Each section has a 4-byte header followed by compressed tile data",
"loop": {
"countField": "Plane Count",
"fields": [
{
"name": "Section Header",
"type": "uint",
"size": 4,
"description": "Packed header: bits 28-31=mode, bits 24-27=planeZ, bits 16-23+(bits 4-7<<8)=decompLen, bits 8-15+(bits 0-3<<8)=compLen"
},
{
"name": "Compressed Data",
"type": "bytes",
"size": "var",
"description": "DEFLATE compressed tile data (length from header)"
}
]
}
}
],
"planeFormat": {
"description": "Tiles are organized into planes based on Z-height. Planes 0-8 use grid encoding; planes 9+ use explicit coordinates for overflow items.",
"headerDecoding": {
"mode": "(header >> 28) & 0x0F",
"planeZ": "(header >> 24) & 0x0F",
"decompLen": "((header & 0xFF0000) >> 16) | ((header & 0xF0) << 4)",
"compLen": "((header & 0xFF00) >> 8) | ((header & 0x0F) << 8)"
},
"planeZMapping": [
{ "plane": 0, "z": 0, "description": "Ground floor" },
{ "plane": 1, "z": 7, "description": "1st storey (floor items)" },
{ "plane": 2, "z": 27, "description": "2nd storey (floor items)" },
{ "plane": 3, "z": 47, "description": "3rd storey (floor items)" },
{ "plane": 4, "z": 67, "description": "4th storey (floor items)" },
{ "plane": "5-8", "z": "7/27/47/67", "description": "Non-floor items per storey" },
{ "plane": "9+", "z": "varies", "description": "Overflow/stair buffers (explicit coords)" }
],
"encodingModes": [
{
"mode": 0,
"name": "Full Coordinates",
"bytesPerTile": 5,
"format": "ushort itemId, sbyte x, sbyte y, sbyte z",
"description": "Used for overflow buffers with non-standard Z heights"
},
{
"mode": 1,
"name": "XY Coordinates",
"bytesPerTile": 4,
"format": "ushort itemId, sbyte x, sbyte y",
"description": "Z calculated: ((planeZ - 1) % 4) * 20 + 7"
},
{
"mode": 2,
"name": "Grid-Based",
"bytesPerTile": 2,
"format": "ushort itemId (0x0000 = empty)",
"description": "X,Y from grid index: x = i / gridHeight, y = i % gridHeight"
}
],
"gridSizes": [
{ "plane": 0, "width": "width", "height": "height", "notes": "Full foundation footprint" },
{ "plane": "1-4", "width": "width - 1", "height": "height - 2", "notes": "Interior (floor items), offset by (1,1)" },
{ "plane": "5-8", "width": "width", "height": "height - 1", "notes": "Interior (non-floor items)" }
]
},
"compression": {
"algorithm": "DEFLATE",
"notes": "Raw DEFLATE compression (no zlib header/footer). Each plane buffer compressed independently. Max 750 items per overflow buffer (splits into multiple buffers if exceeded)."
},
"related": [
{
"id": "0xBF/0x1D",
"relationship": "related",
"note": "Design State General provides revision info only"
},
{
"id": "0xBF/0x20",
"relationship": "related",
"note": "Begin/End House Customization commands"
}
],
"clientVersion": {
"classic": {
"min": "4.0.0a"
},
"enhanced": {},
"notes": "AOS House Customization feature"
},
"source": {
"file": "Projects/UOContent/Multis/Houses/HousePackets.cs",
"line": 93
}
},
{
"id": "0xBF",
"subId": "0x1D",
"name": "Design State General",
"description": "Sends house design revision information. Client requests full details if revision differs.",
"direction": "outgoing",
"isDynamic": false,
"size": 13,
"tags": ["Extended Commands (0xBF)", "House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x000D",
"description": "Packet length (13)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x001D",
"description": "Design State General subcommand"
},
{
"name": "House Serial",
"type": "uint",
"size": 4,
"description": "Serial of the house"
},
{
"name": "Revision",
"type": "int",
"size": 4,
"description": "Design revision number"
}
],
"related": [
{
"id": "0xD8",
"relationship": "related",
"note": "Full design details requested if revision differs"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HousePackets.cs",
"line": 72
}
},
{
"id": "0xBF",
"subId": "0x20",
"name": "Begin House Customization",
"description": "Notifies client to enter house customization mode.",
"direction": "outgoing",
"isDynamic": false,
"size": 17,
"tags": ["Extended Commands (0xBF)", "House"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0011",
"description": "Packet length (17)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0020",
"description": "House Customization subcommand"
},
{
"name": "House Serial",
"type": "uint",
"size": 4,
"description": "Serial of the house"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Begin customization command"
},
{
"name": "Unknown 1",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Unknown (always 0)"
},
{
"name": "Unknown 2",
"type": "ushort",
"size": 2,
"value": "0xFFFF",
"description": "Unknown (always 0xFFFF)"
},
{
"name": "Unknown 3",
"type": "ushort",
"size": 2,
"value": "0xFFFF",
"description": "Unknown (always 0xFFFF)"
},
{
"name": "Unknown 4",
"type": "byte",
"size": 1,
"value": "0xFF",
"description": "Unknown (always 0xFF)"
}
],
"related": [
{
"id": "0xBF/0x20",
"relationship": "variant",
"note": "End House Customization uses command 0x05"
}
],
"source": {
"file": "Projects/UOContent/Multis/Houses/HousePackets.cs",
"line": 30
}
}
]
}

View file

@ -1,104 +0,0 @@
{
"category": "Items",
"packets": [
{
"id": "0x1A",
"name": "World Item",
"description": "Displays an item in the world (pre-Stygian Abyss clients).",
"direction": "outgoing",
"isDynamic": true,
"size": "14+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x1A",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length (14-20)"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Item serial (bit 31 set if amount present)"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID (bit 14 set for multi)"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Stack amount (if serial bit 31 set)",
"condition": "serial \u0026 0x80000000"
},
{
"name": "X",
"type": "ushort",
"size": 2,
"description": "X coordinate (bit 15 set if direction present)"
},
{
"name": "Y",
"type": "ushort",
"size": 2,
"description": "Y coordinate (bit 15=hue, bit 14=flags)"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction (if x bit 15 set)",
"condition": "x \u0026 0x8000"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Z coordinate"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue (if y bit 15 set)",
"condition": "y \u0026 0x8000"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Packet flags (if y bit 14 set)",
"condition": "y \u0026 0x4000"
}
],
"related": [
{
"id": "0xF3",
"relationship": "variant",
"note": "World Entity packet for SA+ clients"
}
],
"notes": "For Stygian Abyss+ clients, use 0xF3 World Entity instead.",
"clientVersion": {
"classic": {
"max": "6.0.14.2"
},
"notes": "Replaced by 0xF3 for SA+ clients"
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingItemPackets.cs",
"line": 24
}
}
]
}

View file

@ -1,65 +0,0 @@
{
"category": "Light",
"packets": [
{
"id": "0x4E",
"name": "Personal Light Level",
"description": "Sets the light level for a specific entity.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x4E",
"description": "Packet identifier"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of entity"
},
{
"name": "Level",
"type": "byte",
"size": 1,
"description": "Light level (0=brightest, 25-30=typical night)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingLightPackets.cs",
"line": 23
}
},
{
"id": "0x4F",
"name": "Global Light Level",
"description": "Sets the global ambient light level for the client.",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x4F",
"description": "Packet identifier"
},
{
"name": "Level",
"type": "byte",
"size": 1,
"description": "Light level (0=brightest, 25-30=typical night)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingLightPackets.cs",
"line": 39
}
}
]
}

View file

@ -1,501 +0,0 @@
{
"category": "Mahjong",
"packets": [
{
"id": "0xDA",
"subId": "0x19",
"name": "Mahjong Join Game",
"description": "Notifies client to open the Mahjong game interface.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0009",
"description": "Packet length (9)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0019",
"description": "Join Game command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 288
}
},
{
"id": "0xDA",
"subId": "0x03",
"name": "Mahjong Tile Info",
"description": "Sends information about a single Mahjong tile.",
"direction": "outgoing",
"isDynamic": false,
"size": 18,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0012",
"description": "Packet length (18)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0003",
"description": "Tile Info command"
},
{
"name": "Tile Number",
"type": "byte",
"size": 1,
"description": "Tile index number"
},
{
"name": "Tile Value",
"type": "byte",
"size": 1,
"description": "Tile face value (0 if hidden)"
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "Tile Y coordinate"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "Tile X coordinate"
},
{
"name": "Stack Level",
"type": "byte",
"size": 1,
"description": "Stack level for overlapping tiles"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Tile direction (0=Up, 1=Left, 2=Down, 3=Right)"
},
{
"name": "Flipped",
"type": "byte",
"size": 1,
"description": "0x10 if flipped/face-up, 0x00 if face-down"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 362
}
},
{
"id": "0xDA",
"subId": "0x04",
"name": "Mahjong Tiles Info",
"description": "Sends information about all tiles in the Mahjong game.",
"direction": "outgoing",
"isDynamic": true,
"size": "11+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0004",
"description": "Tiles Info command"
},
{
"name": "Tile Count",
"type": "short",
"size": 2,
"description": "Number of tiles"
},
{
"name": "Tiles",
"type": "loop",
"description": "Tile data for each tile",
"loop": {
"countField": "Tile Count",
"fields": [
{
"name": "Tile Number",
"type": "byte",
"size": 1,
"description": "Tile index number"
},
{
"name": "Tile Value",
"type": "byte",
"size": 1,
"description": "Tile face value (0 if hidden)"
},
{
"name": "Y Position",
"type": "short",
"size": 2,
"description": "Tile Y coordinate"
},
{
"name": "X Position",
"type": "short",
"size": 2,
"description": "Tile X coordinate"
},
{
"name": "Stack Level",
"type": "byte",
"size": 1,
"description": "Stack level"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Tile direction"
},
{
"name": "Flipped",
"type": "byte",
"size": 1,
"description": "0x10 if flipped, 0x00 otherwise"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 408
}
},
{
"id": "0xDA",
"subId": "0x02",
"name": "Mahjong Players Info",
"description": "Sends information about all players in the Mahjong game.",
"direction": "outgoing",
"isDynamic": true,
"size": "11+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0002",
"description": "Players Info command"
},
{
"name": "Seat Count",
"type": "ushort",
"size": 2,
"description": "Number of seats with data"
},
{
"name": "Players",
"type": "loop",
"description": "Player data for each seat",
"loop": {
"countField": "Seat Count",
"fields": [
{
"name": "Player Serial",
"type": "uint",
"size": 4,
"description": "Serial of player (0 if empty)"
},
{
"name": "Dealer Flag",
"type": "byte",
"size": 1,
"description": "1=Dealer, 2=Not dealer"
},
{
"name": "Position",
"type": "byte",
"size": 1,
"description": "Seat position index"
},
{
"name": "Score",
"type": "int",
"size": 4,
"description": "Player\u0027s current score"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"value": "0",
"description": "Reserved (always 0)"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"value": "0",
"description": "Reserved (always 0)"
},
{
"name": "Public Hand",
"type": "bool",
"size": 1,
"description": "True if hand is visible to others"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Player name"
},
{
"name": "Empty Seat",
"type": "bool",
"size": 1,
"description": "True if seat is empty or not in game"
}
]
}
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 304
}
},
{
"id": "0xDA",
"subId": "0x05",
"name": "Mahjong General Info",
"description": "Sends general game state including dice values, dealer indicator, and wall break position.",
"direction": "outgoing",
"isDynamic": false,
"size": 25,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0019",
"description": "Packet length (25)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x0005",
"description": "General Info command"
},
{
"name": "Reserved",
"type": "short",
"size": 2,
"value": "0",
"description": "Reserved"
},
{
"name": "Reserved 2",
"type": "byte",
"size": 1,
"value": "0",
"description": "Reserved"
},
{
"name": "Options",
"type": "byte",
"size": 1,
"description": "Bit 0: Show Scores, Bit 1: Spectator Vision"
},
{
"name": "Dice 1",
"type": "byte",
"size": 1,
"description": "First dice value"
},
{
"name": "Dice 2",
"type": "byte",
"size": 1,
"description": "Second dice value"
},
{
"name": "Dealer Wind",
"type": "enum",
"size": 1,
"description": "Dealer indicator wind direction",
"values": [
{ "value": "0", "name": "North", "description": "North wind" },
{ "value": "1", "name": "East", "description": "East wind" },
{ "value": "2", "name": "South", "description": "South wind" },
{ "value": "3", "name": "West", "description": "West wind" }
]
},
{
"name": "Dealer Y",
"type": "short",
"size": 2,
"description": "Dealer indicator Y position"
},
{
"name": "Dealer X",
"type": "short",
"size": 2,
"description": "Dealer indicator X position"
},
{
"name": "Dealer Direction",
"type": "byte",
"size": 1,
"description": "Dealer indicator direction"
},
{
"name": "Wall Break Y",
"type": "short",
"size": 2,
"description": "Wall break indicator Y position"
},
{
"name": "Wall Break X",
"type": "short",
"size": 2,
"description": "Wall break indicator X position"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 461
}
},
{
"id": "0xDA",
"subId": "0x1A",
"name": "Mahjong Relieve",
"description": "Notifies client to close the Mahjong game interface.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xDA",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0009",
"description": "Packet length (9)"
},
{
"name": "Game Serial",
"type": "uint",
"size": 4,
"description": "Serial of the Mahjong game"
},
{
"name": "Command",
"type": "ushort",
"size": 2,
"value": "0x001A",
"description": "Relieve command"
}
],
"source": {
"file": "Projects/UOContent/Items/Games/Mahjong/MahjongPackets.cs",
"line": 504
}
}
]
}

View file

@ -1,427 +0,0 @@
{
"category": "Map",
"packets": [
{
"id": "0xC6",
"name": "Invalid Map",
"description": "Notifies client that the current map is invalid.",
"direction": "outgoing",
"isDynamic": false,
"size": 1,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC6",
"description": "Packet identifier"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMapPackets.cs",
"line": 53
}
},
{
"id": "0xBF",
"subId": "0x08",
"name": "Map Change",
"description": "Notifies client of a facet/map change.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Packet length (6)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0008",
"description": "Map Change subcommand"
},
{
"name": "Map ID",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Map/Facet ID",
"values": [
{
"value": 0,
"name": "Felucca",
"description": "Felucca facet"
},
{
"value": 1,
"name": "Trammel",
"description": "Trammel facet"
},
{
"value": 2,
"name": "Ilshenar",
"description": "Ilshenar facet"
},
{
"value": 3,
"name": "Malas",
"description": "Malas facet"
},
{
"value": 4,
"name": "Tokuno",
"description": "Tokuno Islands facet"
},
{
"value": 5,
"name": "Ter Mur",
"description": "Ter Mur facet"
}
]
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMapPackets.cs",
"line": 55
}
},
{
"id": "0xBF",
"subId": "0x18",
"name": "Map Patches",
"description": "Sends map patch information for static and land blocks.",
"direction": "outgoing",
"isDynamic": false,
"size": 41,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0029",
"description": "Packet length (41)"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0018",
"description": "Map Patches subcommand"
},
{
"name": "Map Count",
"type": "int",
"size": 4,
"value": "4",
"description": "Number of maps (always 4)"
},
{
"name": "Patches",
"type": "loop",
"description": "Patch counts for each map (Felucca, Trammel, Ilshenar, Malas)",
"loop": {
"countField": "4",
"fields": [
{
"name": "Static Blocks",
"type": "int",
"size": 4,
"description": "Number of patched static blocks"
},
{
"name": "Land Blocks",
"type": "int",
"size": 4,
"description": "Number of patched land blocks"
}
]
}
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMapPackets.cs",
"line": 25
}
},
{
"id": "0x56",
"name": "Map Command",
"description": "Server sends map pin commands to update the client\u0027s map display.",
"direction": "outgoing",
"isDynamic": false,
"size": 11,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x56",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Command",
"type": "enum",
"size": 1,
"description": "Map command type",
"values": [
{ "value": "1", "name": "AddPin", "description": "Add a pin to the map" },
{ "value": "5", "name": "DisplayMap", "description": "Display the map to client" },
{ "value": "7", "name": "SetEditable", "description": "Set map editable state" }
]
},
{
"name": "Editable",
"type": "bool",
"size": 1,
"description": "True if map is editable (for command 7)"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "X coordinate of pin"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Y coordinate of pin"
}
],
"related": [
{
"id": "0x56",
"direction": "incoming",
"relationship": "related",
"note": "Client map pin commands"
},
{
"id": "0x90",
"relationship": "related",
"note": "Map Details packet (old)"
},
{
"id": "0xF5",
"relationship": "related",
"note": "Map Details packet (new)"
}
],
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 106
}
},
{
"id": "0x90",
"name": "Map Details",
"description": "Sends map details including bounds, dimensions, and graphic ID. Pre-NewCharacterList clients.",
"direction": "outgoing",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x90",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Graphic ID",
"type": "short",
"size": 2,
"value": "0x139D",
"description": "Map gump graphic ID"
},
{
"name": "Start X",
"type": "short",
"size": 2,
"description": "Map bounds start X coordinate"
},
{
"name": "Start Y",
"type": "short",
"size": 2,
"description": "Map bounds start Y coordinate"
},
{
"name": "End X",
"type": "short",
"size": 2,
"description": "Map bounds end X coordinate"
},
{
"name": "End Y",
"type": "short",
"size": 2,
"description": "Map bounds end Y coordinate"
},
{
"name": "Width",
"type": "short",
"size": 2,
"description": "Map width in pixels"
},
{
"name": "Height",
"type": "short",
"size": 2,
"description": "Map height in pixels"
}
],
"related": [
{
"id": "0x56",
"direction": "both",
"relationship": "related",
"note": "Map pin commands (client and server)"
},
{
"id": "0xF5",
"relationship": "variant",
"note": "New Map Details for NewCharacterList clients"
}
],
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 78
}
},
{
"id": "0xF5",
"name": "Map Details (New)",
"description": "Sends map details for NewCharacterList clients. Includes facet ID.",
"direction": "outgoing",
"isDynamic": false,
"size": 21,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF5",
"description": "Packet identifier"
},
{
"name": "Map Serial",
"type": "uint",
"size": 4,
"description": "Serial of the map item"
},
{
"name": "Graphic ID",
"type": "short",
"size": 2,
"value": "0x139D",
"description": "Map gump graphic ID"
},
{
"name": "Start X",
"type": "short",
"size": 2,
"description": "Map bounds start X coordinate"
},
{
"name": "Start Y",
"type": "short",
"size": 2,
"description": "Map bounds start Y coordinate"
},
{
"name": "End X",
"type": "short",
"size": 2,
"description": "Map bounds end X coordinate"
},
{
"name": "End Y",
"type": "short",
"size": 2,
"description": "Map bounds end Y coordinate"
},
{
"name": "Width",
"type": "short",
"size": 2,
"description": "Map width in pixels"
},
{
"name": "Height",
"type": "short",
"size": 2,
"description": "Map height in pixels"
},
{
"name": "Facet ID",
"type": "enum",
"size": 2,
"description": "Map facet/world identifier",
"values": [
{ "value": "0", "name": "Felucca", "description": "Felucca facet" },
{ "value": "1", "name": "Trammel", "description": "Trammel facet" },
{ "value": "2", "name": "Ilshenar", "description": "Ilshenar facet" },
{ "value": "3", "name": "Malas", "description": "Malas facet" },
{ "value": "4", "name": "Tokuno", "description": "Tokuno Islands" },
{ "value": "5", "name": "TerMur", "description": "Ter Mur facet" }
]
}
],
"related": [
{
"id": "0x56",
"direction": "both",
"relationship": "related",
"note": "Map pin commands (client and server)"
},
{
"id": "0x90",
"relationship": "variant",
"note": "Old Map Details for pre-NewCharacterList clients"
}
],
"clientVersion": {
"classic": {
"min": "7.0.13.0"
},
"enhanced": {},
"notes": "NewCharacterList feature"
},
"source": {
"file": "Projects/UOContent/Items/Maps/MapItemPackets.cs",
"line": 78
}
}
]
}

View file

@ -1,185 +0,0 @@
{
"category": "Menu",
"packets": [
{
"id": "0x7C",
"name": "Display Menu",
"description": "Displays an item list menu or question menu to the client.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Item List Menu",
"condition": "Menu is ItemListMenu",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x7C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Menu Serial",
"type": "uint",
"size": 4,
"description": "Menu serial"
},
{
"name": "Menu ID",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Menu ID (always 0)"
},
{
"name": "Question Length",
"type": "byte",
"size": 1,
"description": "Length of question text"
},
{
"name": "Question",
"type": "ascii",
"description": "Question text"
},
{
"name": "Entry Count",
"type": "byte",
"size": 1,
"description": "Number of menu entries"
},
{
"name": "Entries",
"type": "loop",
"description": "Menu entries",
"loop": {
"countField": "entryCount",
"fields": [
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Item hue"
},
{
"name": "Name Length",
"type": "byte",
"size": 1,
"description": "Length of entry name"
},
{
"name": "Name",
"type": "ascii",
"description": "Entry name"
}
]
}
}
]
},
{
"name": "Question Menu",
"condition": "Menu is QuestionMenu",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x7C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Menu Serial",
"type": "uint",
"size": 4,
"description": "Menu serial"
},
{
"name": "Menu ID",
"type": "ushort",
"size": 2,
"value": "0x0000",
"description": "Menu ID (always 0)"
},
{
"name": "Question Length",
"type": "byte",
"size": 1,
"description": "Length of question text"
},
{
"name": "Question",
"type": "ascii",
"description": "Question text"
},
{
"name": "Answer Count",
"type": "byte",
"size": 1,
"description": "Number of answers"
},
{
"name": "Answers",
"type": "loop",
"description": "Answer options",
"loop": {
"countField": "answerCount",
"fields": [
{
"name": "Padding",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused padding"
},
{
"name": "Answer Length",
"type": "byte",
"size": 1,
"description": "Length of answer text"
},
{
"name": "Answer",
"type": "ascii",
"description": "Answer text"
}
]
}
}
]
}
],
"related": [
{
"id": "0x7D",
"relationship": "response",
"note": "Menu Response from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMenuPackets.cs",
"line": 36
}
}
]
}

View file

@ -1,534 +0,0 @@
{
"category": "Message",
"packets": [
{
"id": "0x15",
"name": "Follow Message",
"description": "Instructs client to follow one entity with another.",
"direction": "outgoing",
"isDynamic": false,
"size": 9,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x15",
"description": "Packet identifier"
},
{
"name": "Follower Serial",
"type": "uint",
"size": 4,
"description": "Serial of the follower"
},
{
"name": "Target Serial",
"type": "uint",
"size": 4,
"description": "Serial of the target to follow"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 231
}
},
{
"id": "0x1C",
"name": "ASCII Message",
"description": "Server sends ASCII-encoded message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x1C",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker (0xFFFFFFFF for system)"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Message type",
"values": [
{
"value": 0,
"name": "Regular",
"description": "Normal speech"
},
{
"value": 1,
"name": "System",
"description": "System message"
},
{
"value": 2,
"name": "Emote",
"description": "Emote (*action*)"
},
{
"value": 6,
"name": "Label",
"description": "Object label"
},
{
"value": 7,
"name": "Focus",
"description": "Focused message"
},
{
"value": 8,
"name": "Whisper",
"description": "Whisper"
},
{
"value": 9,
"name": "Yell",
"description": "Yell"
},
{
"value": 10,
"name": "Spell",
"description": "Spell words"
},
{
"value": 13,
"name": "Guild",
"description": "Guild chat"
},
{
"value": 14,
"name": "Alliance",
"description": "Alliance chat"
},
{
"value": 15,
"name": "Command",
"description": "Command"
}
]
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Text",
"type": "ascii-t",
"description": "Message text"
}
],
"related": [
{
"id": "0x03",
"relationship": "request",
"note": "ASCII Speech from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 180
}
},
{
"id": "0xAE",
"name": "Unicode Message",
"description": "Server sends Unicode-encoded message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xAE",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker (0xFFFFFFFF for system)"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type (see 0x1C)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Language",
"type": "ascii",
"size": 4,
"description": "Language code (e.g., \u0027ENU\u0027)"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Message text (Big Endian Unicode)"
}
],
"related": [
{
"id": "0xAD",
"relationship": "request",
"note": "Unicode Speech from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 180
}
},
{
"id": "0xB7",
"name": "Help Response",
"description": "Server sends help text response to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xB7",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of entity"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Help text"
}
],
"related": [
{
"id": "0xB6",
"relationship": "request",
"note": "Object Help Request from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 263
}
},
{
"id": "0xC1",
"name": "Localized Message",
"description": "Server sends a localized (cliloc) message to client.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC1",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type (see 0x1C)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Cliloc entry number"
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Arguments",
"type": "utf16le-t",
"description": "Tab-separated arguments for cliloc"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 55
}
},
{
"id": "0xC2",
"name": "Unicode Prompt",
"description": "Server requests text input from client.",
"direction": "outgoing",
"isDynamic": false,
"size": 21,
"tags": ["Menu"],
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xC2",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "21",
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Prompt serial"
},
{
"name": "Prompt ID",
"type": "uint",
"size": 4,
"description": "Prompt ID (same as serial)"
},
{
"name": "Padding",
"type": "byte[]",
"size": 10,
"description": "Unused padding (zeros)"
}
],
"related": [
{
"id": "0x9A",
"direction": "incoming",
"relationship": "response",
"note": "ASCII Prompt Response"
},
{
"id": "0xC2",
"direction": "incoming",
"relationship": "response",
"note": "Unicode Prompt Response"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 246
}
},
{
"id": "0xCC",
"name": "Localized Message Affix",
"description": "Server sends a localized message with text prefix/suffix.",
"direction": "outgoing",
"isDynamic": true,
"size": "var",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xCC",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Serial of speaker"
},
{
"name": "Graphic",
"type": "short",
"size": 2,
"description": "Body graphic of speaker"
},
{
"name": "Type",
"type": "byte",
"size": 1,
"description": "Message type (see 0x1C)"
},
{
"name": "Hue",
"type": "short",
"size": 2,
"description": "Text color hue"
},
{
"name": "Font",
"type": "short",
"size": 2,
"description": "Font ID"
},
{
"name": "Cliloc Number",
"type": "int",
"size": 4,
"description": "Cliloc entry number"
},
{
"name": "Affix Type",
"type": "enum",
"size": 1,
"description": "How to apply the affix",
"values": [
{
"value": 0,
"name": "Append",
"description": "Append affix to end"
},
{
"value": 1,
"name": "Prepend",
"description": "Prepend affix to start"
},
{
"value": 2,
"name": "System",
"description": "System message style"
}
]
},
{
"name": "Name",
"type": "ascii",
"size": 30,
"description": "Speaker name"
},
{
"name": "Affix",
"type": "ascii-t",
"description": "Text to prepend/append"
},
{
"name": "Arguments",
"type": "utf16be-t",
"description": "Tab-separated arguments for cliloc"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMessagePackets.cs",
"line": 112
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,256 +0,0 @@
{
"category": "Movement",
"packets": [
{
"id": "0x21",
"name": "Movement Rejection",
"description": "Sent by the server when player movement is blocked (collision, teleport area, etc). Contains the corrected position the client should snap back to.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x21",
"description": "Packet identifier"
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Sequence number of the rejected movement request"
},
{
"name": "X",
"type": "short",
"size": 2,
"description": "Correct X coordinate"
},
{
"name": "Y",
"type": "short",
"size": 2,
"description": "Correct Y coordinate"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Correct facing direction (0-7)"
},
{
"name": "Z",
"type": "sbyte",
"size": 1,
"description": "Correct Z coordinate"
}
],
"related": [
{
"id": "0x02",
"relationship": "request",
"note": "The movement request that was rejected"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 45
}
},
{
"id": "0x22",
"name": "Movement Acknowledgment",
"description": "Sent by the server to confirm successful player movement. Includes the player\u0027s current notoriety for display purposes.",
"direction": "outgoing",
"noMerge": true,
"isDynamic": false,
"size": 3,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x22",
"description": "Packet identifier"
},
{
"name": "Sequence",
"type": "byte",
"size": 1,
"description": "Sequence number of the accepted movement request"
},
{
"name": "Notoriety",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Player\u0027s current notoriety flag",
"values": [
{
"value": 0,
"name": "Innocent",
"description": "Blue - innocent player"
},
{
"value": 1,
"name": "Friend",
"description": "Green - ally/friend"
},
{
"value": 2,
"name": "Attackable",
"description": "Gray - can be attacked"
},
{
"value": 3,
"name": "Criminal",
"description": "Gray - criminal flag"
},
{
"value": 4,
"name": "Enemy",
"description": "Orange - enemy"
},
{
"value": 5,
"name": "Murderer",
"description": "Red - murderer"
},
{
"value": 6,
"name": "Invulnerable",
"description": "Yellow - invulnerable"
}
]
}
],
"related": [
{
"id": "0x02",
"relationship": "request",
"note": "The movement request that was accepted"
}
],
"notes": "Not related to incoming 0x22 (Resynchronize) despite sharing the same packet ID.",
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 42
}
},
{
"id": "0x97",
"name": "Move Player",
"description": "Server-initiated player movement. Forces the client to move in a direction (used for pushback effects, conveyors, etc).",
"direction": "outgoing",
"isDynamic": false,
"size": 2,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x97",
"description": "Packet identifier"
},
{
"name": "Direction",
"type": "byte",
"size": 1,
"description": "Direction to move (0-7). Bit 0x80 indicates running."
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 35
}
},
{
"id": "0xBF",
"subId": "0x26",
"name": "Speed Control",
"description": "Controls the player\u0027s movement speed. Used for mount speed changes, walk/run restrictions, etc.",
"direction": "outgoing",
"isDynamic": false,
"size": 6,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0026",
"description": "Sub-command for speed control"
},
{
"name": "Speed Setting",
"type": "enum",
"size": 1,
"description": "Movement speed mode",
"values": [
{ "value": "0", "name": "Disable", "description": "Normal speed (remove override)" },
{ "value": "1", "name": "MountSpeed", "description": "Force mounted movement speed" },
{ "value": "2", "name": "WalkOnly", "description": "Force walk speed only" }
]
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 31
}
},
{
"id": "0xF2",
"name": "Time Sync Response",
"description": "Server response to client time synchronization request. Contains tick counts for latency calculation.",
"direction": "outgoing",
"isDynamic": false,
"size": 25,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xF2",
"description": "Packet identifier"
},
{
"name": "Tick Count1",
"type": "long",
"size": 8,
"description": "Server tick count"
},
{
"name": "Tick Count2",
"type": "long",
"size": 8,
"description": "Server tick count"
},
{
"name": "Tick Count3",
"type": "long",
"size": 8,
"description": "Server tick count"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingMovementPackets.cs",
"line": 63
}
}
]
}

View file

@ -1,276 +0,0 @@
{
"category": "Party",
"packets": [
{
"id": "0xBF",
"subId": "0x06",
"name": "Party Message",
"description": "Party system messages with various subcommands.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Member List",
"condition": "command == 0x01",
"size": "7 + (memberCount x 4)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x01",
"description": "Member list command"
},
{
"name": "Member Count",
"type": "byte",
"size": 1,
"description": "Number of party members"
},
{
"name": "Members",
"type": "loop",
"description": "Party members",
"loop": {
"countField": "memberCount",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Member\u0027s serial"
}
]
}
}
]
},
{
"name": "Remove Member",
"condition": "command == 0x02",
"size": "11 + (memberCount x 4)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x02",
"description": "Remove member command"
},
{
"name": "Member Count",
"type": "byte",
"size": 1,
"description": "Number of remaining members"
},
{
"name": "Removed Serial",
"type": "uint",
"size": 4,
"description": "Serial of removed member"
},
{
"name": "Members",
"type": "loop",
"description": "Remaining party members",
"loop": {
"countField": "memberCount",
"fields": [
{
"name": "Serial",
"type": "uint",
"size": 4,
"description": "Member\u0027s serial"
}
]
}
}
]
},
{
"name": "Private Message",
"condition": "command == 0x03",
"size": "12 + (text.Length x 2)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x03",
"description": "Private message command"
},
{
"name": "Sender Serial",
"type": "uint",
"size": 4,
"description": "Serial of message sender"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Message text"
}
]
},
{
"name": "Public Message",
"condition": "command == 0x04",
"size": "12 + (text.Length x 2)",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x04",
"description": "Public message command"
},
{
"name": "Sender Serial",
"type": "uint",
"size": 4,
"description": "Serial of message sender"
},
{
"name": "Text",
"type": "utf16be-t",
"description": "Message text"
}
]
},
{
"name": "Party Invitation",
"condition": "command == 0x07",
"size": 10,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "10",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0006",
"description": "Party subcommand"
},
{
"name": "Command",
"type": "byte",
"size": 1,
"value": "0x07",
"description": "Invitation command"
},
{
"name": "Leader Serial",
"type": "uint",
"size": 4,
"description": "Serial of party leader"
}
]
}
],
"related": [
{
"id": "0xBF/0x06",
"relationship": "request",
"note": "Party Message from client"
}
],
"source": {
"file": "Projects/UOContent/Engines/Party/PartyPackets.cs",
"line": 28
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,275 +0,0 @@
{
"category": "Secure Trade",
"packets": [
{
"id": "0x6F",
"name": "Secure Trade",
"description": "Manages secure trade windows between players.",
"direction": "outgoing",
"isDynamic": true,
"size": "Varies",
"variants": [
{
"name": "Display Trade Window",
"condition": "flag == Display (0)",
"size": 47,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "47",
"description": "Packet length"
},
{
"name": "Flag",
"type": "enum",
"enumType": "sequential",
"size": 1,
"value": "0",
"description": "Trade action flag",
"values": [
{
"value": 0,
"name": "Display",
"description": "Open trade window"
},
{
"value": 1,
"name": "Close",
"description": "Close trade window"
},
{
"value": 2,
"name": "Update",
"description": "Update accept status"
},
{
"value": 3,
"name": "Update Gold",
"description": "Update gold amounts"
},
{
"value": 4,
"name": "Update Ledger",
"description": "Update ledger"
}
]
},
{
"name": "Partner Serial",
"type": "uint",
"size": 4,
"description": "Serial of trading partner"
},
{
"name": "First Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of your trade container"
},
{
"name": "Second Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of partner\u0027s trade container"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "true",
"description": "Name field follows"
},
{
"name": "Partner Name",
"type": "ascii",
"size": 30,
"description": "Trading partner\u0027s name"
}
]
},
{
"name": "Close Trade Window",
"condition": "flag == Close (1)",
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "17",
"description": "Packet length"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"value": "1",
"description": "Close flag"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Trade container serial"
},
{
"name": "Unused1",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Unused2",
"type": "int",
"size": 4,
"value": "0",
"description": "Unused"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "false",
"description": "No name follows"
}
]
},
{
"name": "Update Accept Status",
"condition": "flag == Update (2)",
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "17",
"description": "Packet length"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"value": "2",
"description": "Update flag"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Trade container serial"
},
{
"name": "Your Accept",
"type": "int",
"size": 4,
"description": "Your accept status (0 or 1)"
},
{
"name": "Partner Accept",
"type": "int",
"size": 4,
"description": "Partner\u0027s accept status (0 or 1)"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "false",
"description": "No name follows"
}
]
},
{
"name": "Update Gold/Platinum",
"condition": "flag == UpdateGold (3)",
"size": 17,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6F",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "17",
"description": "Packet length"
},
{
"name": "Flag",
"type": "byte",
"size": 1,
"value": "3",
"description": "UpdateGold flag"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Trade container serial"
},
{
"name": "Gold",
"type": "int",
"size": 4,
"description": "Gold amount"
},
{
"name": "Platinum",
"type": "int",
"size": 4,
"description": "Platinum amount"
},
{
"name": "Has Name",
"type": "bool",
"size": 1,
"value": "false",
"description": "No name follows"
}
]
}
],
"related": [
{
"id": "0x6F",
"direction": "incoming",
"relationship": "request",
"note": "Client trade actions"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingSecureTradePackets.cs",
"line": 32
}
}
]
}

View file

@ -1,223 +0,0 @@
{
"category": "Targeting",
"packets": [
{
"id": "0x6C",
"name": "Target Request",
"description": "Requests the client to select a target.",
"direction": "outgoing",
"isDynamic": false,
"size": 19,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x6C",
"description": "Packet identifier"
},
{
"name": "Allow Ground",
"type": "bool",
"size": 1,
"description": "True = allow ground targeting"
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID for matching response"
},
{
"name": "Flags",
"type": "enum",
"enumType": "sequential",
"size": 1,
"description": "Target cursor flags",
"values": [
{
"value": 0,
"name": "Neutral",
"description": "Neutral targeting (gray cursor)"
},
{
"value": 1,
"name": "Harmful",
"description": "Harmful action (red cursor)"
},
{
"value": 2,
"name": "Beneficial",
"description": "Beneficial action (green cursor)"
},
{
"value": 3,
"name": "Cancel",
"description": "Cancel targeting"
}
]
},
{
"name": "Padding",
"type": "byte[]",
"size": 12,
"description": "Padding (zeros)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingTargetPackets.cs",
"line": 57
}
},
{
"id": "0x99",
"name": "Multi Target Request",
"description": "Requests the client to place a multi (house/boat) structure.",
"direction": "outgoing",
"isDynamic": false,
"size": "Varies",
"variants": [
{
"version": "pre-HighSeas",
"name": "Pre-HighSeas (26 bytes)",
"size": 26,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x99",
"description": "Packet identifier"
},
{
"name": "Allow Ground",
"type": "bool",
"size": 1,
"description": "Allow ground targeting"
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Target cursor flags"
},
{
"name": "Padding",
"type": "byte[]",
"size": 11,
"description": "Padding (zeros)"
},
{
"name": "Multi ID",
"type": "short",
"size": 2,
"description": "Multi graphic ID"
},
{
"name": "Offset X",
"type": "short",
"size": 2,
"description": "X offset for placement"
},
{
"name": "Offset Y",
"type": "short",
"size": 2,
"description": "Y offset for placement"
},
{
"name": "Offset Z",
"type": "short",
"size": 2,
"description": "Z offset for placement"
}
]
},
{
"version": "HighSeas+",
"name": "HighSeas / Enhanced (30 bytes)",
"condition": "Classic >= 7.0.9.0, or Enhanced Client (any version)",
"size": 30,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x99",
"description": "Packet identifier"
},
{
"name": "Allow Ground",
"type": "bool",
"size": 1,
"description": "Allow ground targeting"
},
{
"name": "Target ID",
"type": "int",
"size": 4,
"description": "Target cursor ID"
},
{
"name": "Flags",
"type": "byte",
"size": 1,
"description": "Target cursor flags"
},
{
"name": "Padding",
"type": "byte[]",
"size": 11,
"description": "Padding (zeros)"
},
{
"name": "Multi ID",
"type": "short",
"size": 2,
"description": "Multi graphic ID"
},
{
"name": "Offset X",
"type": "short",
"size": 2,
"description": "X offset for placement"
},
{
"name": "Offset Y",
"type": "short",
"size": 2,
"description": "Y offset for placement"
},
{
"name": "Offset Z",
"type": "short",
"size": 2,
"description": "Z offset for placement"
},
{
"name": "Unknown",
"type": "int",
"size": 4,
"description": "Unknown (HighSeas extension)"
}
]
}
],
"clientVersion": {
"classic": {},
"enhanced": {},
"notes": "HighSeas (7.0.9.0+) adds 4 bytes. EC always uses 30-byte variant."
},
"source": {
"file": "Projects/Server/Network/Packets/OutgoingTargetPackets.cs",
"line": 23
}
}
]
}

View file

@ -1,216 +0,0 @@
{
"category": "Vendor",
"packets": [
{
"id": "0x3B",
"name": "End Vendor Transaction",
"description": "Ends a vendor buy or sell transaction.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x3B",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "8",
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Item Count",
"type": "byte",
"size": 1,
"value": "0",
"description": "Item count (0 = end transaction)"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs",
"line": 111
}
},
{
"id": "0x74",
"name": "Vendor Buy List",
"description": "Sends the list of items available for purchase from a vendor with prices.",
"direction": "outgoing",
"isDynamic": true,
"size": "8+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x74",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Container Serial",
"type": "uint",
"size": 4,
"description": "Serial of vendor\u0027s buy container"
},
{
"name": "Item Count",
"type": "byte",
"size": 1,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Buy items with prices",
"loop": {
"countField": "itemCount",
"fields": [
{
"name": "Price",
"type": "int",
"size": 4,
"description": "Item price"
},
{
"name": "Desc Length",
"type": "byte",
"size": 1,
"description": "Description length + 1"
},
{
"name": "Description",
"type": "ascii-t",
"description": "Item description"
}
]
}
}
],
"related": [
{
"id": "0x3C",
"relationship": "request",
"note": "Container Content with items"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs",
"line": 77
}
},
{
"id": "0x9E",
"name": "Vendor Sell List",
"description": "Sends the list of items the vendor will buy from the player.",
"direction": "outgoing",
"isDynamic": true,
"size": "9+",
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0x9E",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"description": "Packet length"
},
{
"name": "Vendor Serial",
"type": "uint",
"size": 4,
"description": "Serial of the vendor"
},
{
"name": "Item Count",
"type": "ushort",
"size": 2,
"description": "Number of items"
},
{
"name": "Items",
"type": "loop",
"description": "Sell items with prices",
"loop": {
"countField": "itemCount",
"fields": [
{
"name": "Item Serial",
"type": "uint",
"size": 4,
"description": "Item serial"
},
{
"name": "Item ID",
"type": "ushort",
"size": 2,
"description": "Item graphic ID"
},
{
"name": "Hue",
"type": "ushort",
"size": 2,
"description": "Item hue"
},
{
"name": "Amount",
"type": "ushort",
"size": 2,
"description": "Item amount"
},
{
"name": "Price",
"type": "ushort",
"size": 2,
"description": "Price per unit"
},
{
"name": "Name Length",
"type": "ushort",
"size": 2,
"description": "Name length"
},
{
"name": "Name",
"type": "ascii",
"description": "Item name"
}
]
}
}
],
"related": [
{
"id": "0x9F",
"relationship": "response",
"note": "Vendor Sell Reply from client"
}
],
"source": {
"file": "Projects/Server/Network/Packets/OutgoingVendorSellPackets.cs",
"line": 25
}
}
]
}

View file

@ -1,89 +0,0 @@
{
"category": "Weapon Ability",
"packets": [
{
"id": "0xBF",
"subId": "0x21",
"name": "Clear Weapon Ability",
"description": "Clears the currently selected weapon ability.",
"direction": "outgoing",
"isDynamic": false,
"size": 5,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "5",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0021",
"description": "Clear Weapon Ability subcommand"
}
],
"source": {
"file": "Projects/UOContent/Items/Weapons/Abilities/WeaponAbilityPackets.cs",
"line": 37
}
},
{
"id": "0xBF",
"subId": "0x25",
"name": "Toggle Special Ability",
"description": "Toggles a special weapon ability on or off.",
"direction": "outgoing",
"isDynamic": false,
"size": 8,
"fields": [
{
"name": "Packet ID",
"type": "byte",
"size": 1,
"value": "0xBF",
"description": "Packet identifier"
},
{
"name": "Length",
"type": "ushort",
"size": 2,
"value": "8",
"description": "Packet length"
},
{
"name": "Sub-Command",
"type": "ushort",
"size": 2,
"value": "0x0025",
"description": "Toggle Special Ability subcommand"
},
{
"name": "Ability ID",
"type": "short",
"size": 2,
"description": "Ability ID"
},
{
"name": "Active",
"type": "bool",
"size": 1,
"description": "True if ability is active"
}
],
"source": {
"file": "Projects/UOContent/Items/Weapons/Abilities/WeaponAbilityPackets.cs",
"line": 40
}
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,10 +0,0 @@
# ModernUO Website
## Development
1. Install Python's `pip` package manager
1. Install MkDocs: `pip install mkdocs`
1. Install Required Extensions
* `pip install pymdown-extensions`
* `pip install mkdocs-material`
1. Launch development server: `mkdocs`

View file

@ -1,198 +0,0 @@
---
title: Serialization
---
# Serialization / Savings
=== "Generic persistence"
```Persistence.Serialize``` and ```Persistence.Deserialize``` is replaced with GenericPersistence class
Example of how to persist a custom system.
```cs
namespace Server.ExampleSystem
{
public static class ExampleSerialization
{
public static void Configure()
{
GenericPersistence.Register("ExampleSystem", Serialize, Deserialize);
}
public static void Serialize(IGenericWriter writer)
{
// Do serialization here
writer.WriteEncodedInt(0); // version
}
public static void Deserialize(IGenericReader reader)
{
// Do deserialization here
var version = reader.ReadEncodedInt();
}
}
}
```
=== "Codegen"
### Basic info
ModernUO can programatically generate migrations. This feature is based on internal C# Source generators [More info](https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/)
Old way of serializing objects:
```cs
public class ExampleItem : Item
{
private string _exampleText;
[CommandProperty(AccessLevel.GameMaster)]
public string ExampleText
{
get => _exampleText;
set
{
if (value != _exampleText)
{
_exampleText = value;
this.MarkDirty();
}
}
}
[Constructible]
public ExampleItem(string text) : base(0)
{
Example = text;
}
public ExampleItem(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); //Version
writer.Write(_exampleText);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadEncodedInt();
// version 0
_exampleText = reader.ReadString();
}
}
```
Same class serialized with codegen
```cs
[SerializationGenerator(0)]
public partial class ExampleItem : Item
{
[SerializableField(0)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
private string _exampleText;
[Constructible]
public ExampleItem(string text) : base(0)
{
_exampleText = text;
}
}
```
### Step by step
1. Add ```SerializationGenerator(versionNumber)``` to your class and make the class ```partial```
```cs
[SerializationGenerator(0)]
public partial class ExampleItem : Item
```
1. Delete the constructor with ```Serial serial```
1. Delete the ```Serialize``` and ```Deserialize``` methods.
1. Add ```SerializableField(fieldOrder)``` attribute to all field you want to serialize.
```cs
[SerializableField(0)]
private string _exampleText;
```
1. Run `publish.cmd`.
ModernUO will create migration files for you. In this case "Server.Items.ExampleItem.v0.json" and "Server.Items.ExampleItem.Serialization.cs".
These files contains all information and classes needed for ModernUO to serialize/deserialize your objects.
### Migrations
When new field is added to the serialization, you need to increment `versionNumber` and run `publish.cmd` again to generate a migration file for the new version.
Here is little example.
New class code will look like this:
```cs
[SerializationGenerator(1)]
public partial class ExampleItem : Item
{
[SerializableField(0)]
private string _exampleText;
[SerializableField(1)]
[SerializedCommandProperty(AccessLevel.GameMaster)]
private string _addedExampleTest;
[Constructible]
public ExampleItem(string text, string addedText) : base(0)
{
_exampleText = text;
_addedExampleTest = addedText;
}
}
```
Your IDE (Visual Studio, Rider, or VSCode), will show errors and the ModernUO will not compile.
This happens because the code generator builds a migration from V0 to V1 and a new struct `V0Content` with all of the V0 fields is generated.
ModernUO is expecting the developer to create a migration from the old version to the new.
Now create a `MigrateFrom` method for each of the older versions, in this case V0, to the new version.
```cs
private void MigrateFrom(V0Content content)
{
_exampleText = content.ExampleText;
}
```
!!! Tip
Since the class is `partial`, you can create a standalone file for migrations to keep them organized. For example "ExampleItem.Migrations.cs"
Your migration is now complete.
### Migrating from pre-codegen
To migrate from pre-codegen serialization, change the old Deserialize method to this:
```cs
private void Deserialize(IGenericReader reader, int version)
```
This method will be automatically called when the serialization generator doesn't have a migration for for that older version.
In this method you can make old fashioned deserializations that are mostly compatible with RunUO.
### After Deserialization
To execute code after the deserialization, add the `AfterDeserialization()` attribute to a method.
```cs
[AfterDeserialization]
private void AfterDeserialization()
{
// Some code here
}
```
!!! Tip
By default, `AfterDeserialization` is executed synchronously right after the actual deserialization. Passing `false` to the attribute will make it execute after all deserializations.
### Serializing Non-Entity Classes
Sometimes you might need to serialize a nested object that is not an `ISerializable`. The syntax is largely the same except you must also mark the *parent* object for dirty tracking by using the `DirtyTrackingEntity` attribute.
A good example of this is ["AquariumState"](https://github.com/modernuo/ModernUO/blob/main/Projects/UOContent/Items/Aquarium/AquariumState.cs).
!!! Note
Non-entity classes cannot be serialized by reference since that would require a reference Serial or ID. This means if the object is a serializable property on multiple objects, it will be serialized
multiple times and will effectively get duplicated on world load. Consider either making it an `ISerializable` type and building world load/save mechanisms, or do not serialize the nested object directly.
Instead opt for a global lookup, serialize with generic persistence, and then reattach to the objects using the `WorldLoad` event sink.

View file

@ -1,8 +0,0 @@
---
title: Timers
---
# Timers
ModernUO completely changed the timer system to use an optimized data structure called a timer wheel. This will allow shards to add thousands of timers without slowing down the server. Traditionally the timer system used a thread and locked to add/remove/process timers. All of this is gone.
With the new timer system there is no TimerPriority. This can be deleted entirely from your scripts.

View file

@ -1,30 +0,0 @@
---
title: Starting the server
---
# Starting the server
Now that the software has been built, all you need to do is run it!
Everything is run from the _Distribution_ folder.
=== "Windows"
Using _windows terminal_, _git bash_, or _powershell_, run:
```bash
cd Distribution
ModernUO.exe
```
=== "OSX/Linux"
Using _terminal_, run:
```bash
cd Distribution
dotnet ModernUO.dll
```
=== "Game Files"
!!! Note
Game files are required to initiate a server. Upon the initial launch, you will encounter a prompt asking for the location of your game files or ClassicUO installation. ClassicUO installations should be configured to reference game files directory within settings.json file.
!!! Tip
Game files are not directly distributed in ModernUO, find the latest version to download these at [client download](https://uo.com/Client-Download/)

View file

@ -1,194 +0,0 @@
# build-packets.ps1
# Combines all packet JSON files with the HTML template to generate the final documentation page.
#
# Usage:
# .\build-packets.ps1
# .\build-packets.ps1 -OutputPath "C:\custom\output\packets.html"
param(
[string]$OutputPath = ""
)
$ErrorActionPreference = "Stop"
# Determine paths
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$docsDir = (Resolve-Path (Join-Path $scriptDir "..")).Path
$packetsDir = Join-Path $docsDir "packets"
$templateFile = Join-Path $packetsDir "template.html"
if (-not $OutputPath) {
$OutputPath = Join-Path $packetsDir "packets.html"
}
Write-Host "ModernUO Packet Documentation Builder" -ForegroundColor Cyan
Write-Host "======================================" -ForegroundColor Cyan
Write-Host ""
# Verify template exists
if (-not (Test-Path $templateFile)) {
Write-Error "Template file not found: $templateFile"
exit 1
}
# Collect all packet JSON files
$allPackets = @{
incoming = @()
outgoing = @()
}
$incomingDir = Join-Path $packetsDir "incoming"
$outgoingDir = Join-Path $packetsDir "outgoing"
# Read incoming packets
if (Test-Path $incomingDir) {
$incomingFiles = Get-ChildItem "$incomingDir\*.json" -ErrorAction SilentlyContinue | Sort-Object Name
foreach ($file in $incomingFiles) {
Write-Host " Reading: $($file.Name)" -ForegroundColor Gray
try {
$content = Get-Content $file.FullName -Raw -Encoding UTF8
$data = $content | ConvertFrom-Json
if ($data.packets) {
# Add category and merge tags for each packet
foreach ($packet in $data.packets) {
# Add category if not present (backward compatibility)
if (-not $packet.category -and $data.category) {
$packet | Add-Member -NotePropertyName "category" -NotePropertyValue $data.category -Force
}
# Merge tags: file-level + packet-level
$fileTags = @()
if ($data.tags) { $fileTags = @($data.tags) }
$packetTags = @()
if ($packet.tags) { $packetTags = @($packet.tags) }
$allTags = @($fileTags + $packetTags) | Select-Object -Unique
# Always include the primary category as a tag (first position)
if ($data.category -and $data.category -notin $allTags) {
$allTags = @($data.category) + $allTags
}
# Ensure tags is always an array (PowerShell can collapse single-element arrays)
$allTags = @($allTags)
$packet | Add-Member -NotePropertyName "tags" -NotePropertyValue $allTags -Force
}
$allPackets.incoming += $data.packets
}
} catch {
Write-Warning "Failed to parse $($file.Name): $_"
}
}
Write-Host " Found $($allPackets.incoming.Count) incoming packets" -ForegroundColor Green
} else {
Write-Host " No incoming packets directory found" -ForegroundColor Yellow
}
# Read outgoing packets
if (Test-Path $outgoingDir) {
$outgoingFiles = Get-ChildItem "$outgoingDir\*.json" -ErrorAction SilentlyContinue | Sort-Object Name
foreach ($file in $outgoingFiles) {
Write-Host " Reading: $($file.Name)" -ForegroundColor Gray
try {
$content = Get-Content $file.FullName -Raw -Encoding UTF8
$data = $content | ConvertFrom-Json
if ($data.packets) {
# Add category and merge tags for each packet
foreach ($packet in $data.packets) {
# Add category if not present (backward compatibility)
if (-not $packet.category -and $data.category) {
$packet | Add-Member -NotePropertyName "category" -NotePropertyValue $data.category -Force
}
# Merge tags: file-level + packet-level
$fileTags = @()
if ($data.tags) { $fileTags = @($data.tags) }
$packetTags = @()
if ($packet.tags) { $packetTags = @($packet.tags) }
$allTags = @($fileTags + $packetTags) | Select-Object -Unique
# Always include the primary category as a tag (first position)
if ($data.category -and $data.category -notin $allTags) {
$allTags = @($data.category) + $allTags
}
# Ensure tags is always an array (PowerShell can collapse single-element arrays)
$allTags = @($allTags)
$packet | Add-Member -NotePropertyName "tags" -NotePropertyValue $allTags -Force
}
$allPackets.outgoing += $data.packets
}
} catch {
Write-Warning "Failed to parse $($file.Name): $_"
}
}
Write-Host " Found $($allPackets.outgoing.Count) outgoing packets" -ForegroundColor Green
} else {
Write-Host " No outgoing packets directory found" -ForegroundColor Yellow
}
$totalPackets = $allPackets.incoming.Count + $allPackets.outgoing.Count
Write-Host ""
Write-Host "Total packets: $totalPackets" -ForegroundColor Cyan
if ($totalPackets -eq 0) {
Write-Warning "No packets found! The output will have empty documentation."
}
# Sort packets by ID for deterministic output
# Handle IDs like "0x02" and "0xBF/0x05" (split on / and parse first part)
$allPackets.incoming = @($allPackets.incoming | Sort-Object {
$baseId = $_.id -split '/' | Select-Object -First 1
[Convert]::ToInt32($baseId, 16)
}, {
if ($_.subId) { [Convert]::ToInt32($_.subId, 16) }
elseif ($_.id -match '/') { [Convert]::ToInt32(($_.id -split '/' | Select-Object -Last 1), 16) }
else { 0 }
})
$allPackets.outgoing = @($allPackets.outgoing | Sort-Object {
$baseId = $_.id -split '/' | Select-Object -First 1
[Convert]::ToInt32($baseId, 16)
}, {
if ($_.subId) { [Convert]::ToInt32($_.subId, 16) }
elseif ($_.id -match '/') { [Convert]::ToInt32(($_.id -split '/' | Select-Object -Last 1), 16) }
else { 0 }
})
# Convert to JSON
$packetsJson = $allPackets | ConvertTo-Json -Depth 20 -Compress
# HTML entity escape the JSON to safely embed in HTML
$packetsJson = $packetsJson -replace '<', '&lt;' -replace '>', '&gt;'
# Read template and inject JSON
Write-Host ""
Write-Host "Reading template..." -ForegroundColor Gray
$template = Get-Content $templateFile -Raw -Encoding UTF8
Write-Host "Injecting packet data..." -ForegroundColor Gray
$output = $template -replace '<!-- PACKETS -->', $packetsJson
# Ensure output directory exists
$outputDir = Split-Path $OutputPath -Parent
if (-not (Test-Path $outputDir)) {
Write-Host "Creating output directory: $outputDir" -ForegroundColor Gray
New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
}
# Write output
Write-Host "Writing output..." -ForegroundColor Gray
$output | Set-Content $OutputPath -Encoding UTF8
$outputSize = (Get-Item $OutputPath).Length
$outputSizeKB = [math]::Round($outputSize / 1024, 2)
Write-Host ""
Write-Host "Success!" -ForegroundColor Green
Write-Host " Output: $OutputPath" -ForegroundColor White
Write-Host " Size: $outputSizeKB KB" -ForegroundColor White
Write-Host " Packets: $totalPackets" -ForegroundColor White

View file

@ -1,83 +0,0 @@
# Exclude non-documentation files from build output
exclude_docs: |
commands/
packets/
tools/
# Project
site_name: ModernUO
site_author: Kamron Batman
site_url: https://modernuo.com
edit_uri: edit/main/docs/
# Repository
repo_name: modernuo/modernuo
repo_url: https://github.com/modernuo/modernuo
site_description: The Ultima Online Server Emulator for the modern era!
copyright: Copyright 2019-2025 ModernUO Development Team
theme:
name: material
favicon: branding/favicon.png
icon:
logo: modernuo/logo
custom_dir: docs/overrides/
features:
- navigation.tabs
- navigation.instant
extra_css:
- assets/stylesheets/extra.css
extra:
social:
- icon: fontawesome/brands/github
link: https://muo.gg/github
name: ModernUO on Github
- icon: fontawesome/brands/discord
link: https://muo.gg/discord
name: ModernUO on Discord
- icon: fontawesome/brands/patreon
link: https://muo.gg/patreon
name: Sponsor ModernUO on Patreon
- icon: fontawesome/brands/reddit
link: https://muo.gg/reddit
name: /r/modernuo
- icon: fontawesome/brands/twitter
link: https://muo.gg/twitter
name: "@modernuo"
markdown_extensions:
- admonition
- footnotes
- meta
- toc:
toc_depth: "1-1"
permalink: true
- attr_list
- pymdownx.highlight
- pymdownx.inlinehilite
- pymdownx.superfences
- pymdownx.snippets
- pymdownx.tabbed:
alternate_style: true
- pymdownx.caret
- pymdownx.mark
- pymdownx.tilde
- pymdownx.critic:
mode: view
- pymdownx.betterem:
smart_enable: all
- pymdownx.emoji:
emoji_index: !!python/name:material.extensions.emoji.twemoji
emoji_generator: !!python/name:material.extensions.emoji.to_svg
options:
custom_icons:
- docs/overrides/.icons
# Pages
nav:
- Home: 'index.md'
- 'Get Started':
- 'installation.md'
- 'building-server.md'
- 'starting-server.md'
- 'Scripting guide':
- 'scripting-guide/timers.md'
- 'scripting-guide/serialization.md'