baseline: OpenMU upstream b5a0961 (fresh source)

This commit is contained in:
Acentech Dev
2026-07-14 19:00:35 +03:00
parent 450402e47d
commit 36fc125d5c
11968 changed files with 748705 additions and 0 deletions

53
docs/GameMap.md Normal file
View File

@@ -0,0 +1,53 @@
# GameMap
I want to give a quick description about how the [game map](../src/GameLogic/GameMap.cs),
especially observing between players/npc works.
## AreaOfInterestManager
Each game map has an area of interest manager. It takes care of the event
subscriptions between objects, in case they were added, moved or removed at the
map.
The default implementation ([BucketAreaOfInterestManager](../src/GameLogic/BucketAreaOfInterestManager.cs))
creates a BucketMap, which is described below.
Other (simpler) implementations may be possible for the future for maps which
are more likely to be "empty" or require that all objects of a map need to know
all other objects (e.g. Duel map).
## BucketMap
The [bucket map](../src/GameLogic/BucketMap{T}.cs) is basically a two-dimensional
data structure.
We split the map of 256 x 256 possible coordinates into "[buckets](../src/GameLogic/Bucket{T}.cs)".
For example, each bucket covers 8 x 8 coordinates.
A player (or other "observers") can observe buckets, so that it gets informed
when objects (other players, npc, dropped items) enter or leave this bucket.
When a player moves and comes into the range of a bucket (defined by an
"info range"), it subscribes this enter/leave events and adds all existing
objects of this bucket to his view.
You may ask, why I introduced such a structure and not simply use a list of
objects and compare the distance to them when moving to decide if a object
should be sent (add/remove) to the game client.
As far as I know, the original server works like that and has a lot of lag when
a lot of players (more than thousand at castle siege) are on the same map, all
moving around.
This is a O(n²) problem where n is the number of objects on the same map - this
can get pretty complex very fast.
Now with my concept, this search is only happening when a player enters a new
bucket - and then it searches only for new buckets in range, not for other
individual objects.
So this is not as complex when you have many objects on your map. Of course,
this needs a bit more memory and is slower on empty maps, but IMHO that's
really worth it - usually, game maps are packed with monsters, players and a
lot of dropped items.
## Other ideas
Instead of partitioning a map into buckets (where a lot of them are empty), we
could try to use some other 2d index structures, like
[R-trees](https://en.wikipedia.org/wiki/R-tree) or [B-Trees](https://en.wikipedia.org/wiki/B-tree)
with [Z-Ordering](https://en.wikipedia.org/wiki/Z-order_curve).

116
docs/MasterSystem.md Normal file
View File

@@ -0,0 +1,116 @@
# Master System
## What is it?
When a character reached a certain level (usually level 400) and completes a quest,
its character class changes to a *master character class*.
This unlocks the *Master Skill Tree* which allows to distribute points to master
skills.
Points are given by each master level the player reaches (just like before, by
gaining experience).
## Types of master skills
Basically, there are two types of master skills in a skill tree:
### Passive skills
When these skills are learned, they give certain power-ups passively. For example,
there are master skills to increase the maximum health or to increase the
attack damage.
### Active skills
When learned, these skills appear in the skill list. Most skills of this type replace
previously existing skills. The replaced skills are staying in the background,
are not visible in the game client, but their internal value still apply to the
master skill as well.
The master skill just defines how much damage or buff power is added to the
replaced skill.
## Structure of the master skill tree
The master skill tree consists of three roots.
The skills are put into rows which defines the *rank* of a skill.
By default, there 5 ranks available. However, the game client would support up
to 9 ranks. Each skill usually can have up to 20 levels, some only have 10. The
client probably supports more than that.
A skill can be defined to depend on a skill of the same or the previous rank of
the same root.
Each character class is able to learn different skills, which are sometimes
exclusive to the character class. So, one skill can be available for multiple
character classes.
The root and rank for a skill is always the same for all character classes.
The visual appearance on the client may differ (more on that later).
## Requisitions of learning a skill
To learn a skill, the following checks are done by the server (and client).
### Character class
The skill must be defined for the class of the character.
### Rank
The skill must either be in the first rank, or a skill in the previous rank of
the same root must at least of level 10.
### Required Skill
If the skill has required skills defined (it's optional), these skills must be
at least of level 10.
## Client implementation
Some short notes about the client:
* There is a message for the master level etc. (F3 50)
* It contains health and mana, too. If this packet isn't sent, a master
character appears without health/mana.
* There is a message for the learned master skills (F3 53)
* The information about each skill contains:
* Skill Number
* Skill Index
* Defines were the skill is located in the clients interface
* I wonder why they need this in the message, since the client already
knows the index of a skill itself
* May differ between character classes
* Current Level
* Value of its effect at the current level
* Value of its effect at the next level
* Even if no skill was learned, this message needs to be sent - otherwise it
may still contain the master information about the previously played master
character.
## Server implementation
### Adding Points
* For code, see [AddMasterPointAction](https://github.com/MUnique/OpenMU/tree/master/src/GameLogic/PlayerActions/Character/AddMasterPointAction.cs).
* Request Packet: [C1F352 - Add Master Skill Point](Packets/C1-F3-52-AddMasterSkillPoint_by-client.md)
* Response Packet: [C1F352 - Master skill level update](Packets/C1-F3-52-MasterSkillLevelUpdate_by-server.md)
### Sending Master Stats (F3 50)
* For code, see [UpdateMasterStatsPlugIn](https://github.com/MUnique/OpenMU/tree/master/src/GameServer/RemoteView/Character/UpdateMasterStatsPlugIn.cs).
* Request Packet: [C2F350 - Master Stats Update](Packets/C1-F3-50-MasterStatsUpdate_by-server.md)
### Sending Master Skills (F3 53)
* For code, see [UpdateMasterSkillsPlugIn](https://github.com/MUnique/OpenMU/tree/master/src/GameServer/RemoteView/Character/UpdateMasterSkillsPlugIn.cs).
* Packet: [C2F353 - Master Skill List](Packets/C2-F3-53-MasterSkillList_by-server.md)

View File

@@ -0,0 +1,87 @@
# Packet Structure Tests Implementation
## Overview
This implementation provides automatically generated tests for packet structures defined in XML files. The tests validate that packet definitions are correct and would catch issues like incorrect packet lengths (as mentioned in PR #622).
## Files Created
### 1. `src/Network/Packets/GenerateTests.xslt`
XSLT transformation that generates C# test code from XML packet definitions. Features:
- Validates fixed-length packets/structures against their declared lengths
- Tests variable-length packets' GetRequiredSize methods
- Validates field boundaries to prevent buffer overruns
- Generates syntactically correct C# test code with proper naming
### 2. `tests/MUnique.OpenMU.Network.Packets.Tests/`
New test project that:
- Automatically generates test files during build (when `ci` is not set)
- Integrates with existing test infrastructure (NUnit, StyleCop, etc.)
- Added to main solution file for CI/CD integration
### 3. Test Files Generated
- `ClientToServerPacketTests.cs` - Tests for client-to-server packets
- `ServerToClientPacketTests.cs` - Tests for server-to-client packets
- `ChatServerPacketTests.cs` - Tests for chat server packets
- `ConnectServerPacketTests.cs` - Tests for connect server packets
## Types of Validation
### Fixed-Length Validation
```csharp
// Validates declared length matches calculated size
const int expectedLength = 20; // From XML
const int actualLength = PlayerShopItem.Length; // From generated struct
Assert.That(actualLength, Is.EqualTo(expectedLength));
// Validates field boundaries
Assert.That(fieldIndex + fieldSize, Is.LessThanOrEqualTo(expectedLength));
```
### Variable-Length Validation
```csharp
// Tests GetRequiredSize method accuracy
const string testString = "TestData";
var calculatedSize = StoredItem.GetRequiredSize(testString);
var expectedSize = Encoding.UTF8.GetByteCount(testString) + 1 + baseOffset;
Assert.That(calculatedSize, Is.EqualTo(expectedSize));
```
### Field Boundary Validation
```csharp
// Ensures fields don't exceed packet boundaries
Assert.That(fieldIndex + fieldSize, Is.LessThanOrEqualTo(packetLength));
```
## How It Works
1. **Build Process**: During build, XSLT transformations read XML packet definitions
2. **Code Generation**: Generates comprehensive test methods for each packet/structure
3. **Validation**: Tests run during normal test execution, catching definition errors
4. **Integration**: Fully integrated with existing CI/CD pipeline
## Benefits
- **Automatic Detection**: Catches packet definition errors at build time
- **Comprehensive Coverage**: Tests all packet types and structures
- **Zero Maintenance**: Tests are automatically updated when XML definitions change
- **Early Error Detection**: Prevents runtime issues from malformed packets
## Usage
The tests run automatically as part of the normal build and test process. No manual intervention required.
To run tests manually:
```bash
dotnet test tests/MUnique.OpenMU.Network.Packets.Tests/
```
## Example Issues Caught
The generated tests would catch issues like:
- Packet length declared as 10 but fields require 12 bytes
- Field starting at index 8 with size 4 in a 10-byte packet
- Incorrect GetRequiredSize calculations
- Overlapping field definitions
This addresses the core issue mentioned in PR #622 where packet structures were defined incorrectly.

154
docs/Packets/Appearance.md Normal file
View File

@@ -0,0 +1,154 @@
# Appearance
The appearance of characters is serialized as follows.
Webzen did a "good" job saving one bit here and there, so it's a bit complicated
sometimes (e.g. wings and pets).
It seems like the structure is historically grown.
## Structure
Please read this table like a stream of bits. E.g. if there are 8 bits of 1 byte
are specified in a row, the highest bits come first.
| Byte index | Length | Data type | Description |
|----------|---------|-------------|------------|
| 0 | 4 | bit | Character class |
| 0 | 4 | bit | Character pose, see below |
| 1 | 1 | byte | Left hand item index. 0xFF if empty. |
| 2 | 1 | byte | Right hand item index. 0xFF if empty. |
| 3 | 4 | bit | Helm item index (lower 4 bits). See byte index 9 and 13 for the rest. |
| 3 | 4 | bit | Armor item index (lower 4 bits). See byte index 9 and 14 for the rest. |
| 4 | 4 | bit | Pants item index (lower 4 bits). See byte index 9 and 14 for the rest. |
| 4 | 4 | bit | Gloves item index (lower 4 bits). See byte index 9 and 15 for the rest. |
| 5 | 4 | bit | Boots item index (lower 4 bits). See byte index 9 and 15 for the rest. |
| 5 | 4 | bit | Pets and wings flags, see below |
| 6 | 3 | bit | Left hand item level |
| 6 | 3 | bit | Right hand item level |
| 6~7 | 3 | bit | Helm item level |
| 7 | 3 | bit | Armor item level |
| 7 | 3 | bit | Pants item level |
| 7~8 | 3 | bit | Gloves item level |
| 8 | 3 | bit | Boots item level |
| 8 | 3 | bit | unused |
| 9 | 1 | bit | Helm item index (5th bit) |
| 9 | 1 | bit | Armor item index (5th bit) |
| 9 | 1 | bit | Pants item index (5th bit) |
| 9 | 1 | bit | Gloves item index (5th bit) |
| 9 | 1 | bit | Boots item index (5th bit) |
| 9 | 3 | bit | Wing item index (see table below) |
| 10 | 1 | bit | Helm excellent option flag |
| 10 | 1 | bit | Armor excellent option flag |
| 10 | 1 | bit | Pants excellent option flag |
| 10 | 1 | bit | Gloves excellent option flag |
| 10 | 1 | bit | Boots excellent option flag |
| 10 | 1 | bit | Left hand item excellent option flag |
| 10 | 1 | bit | Right hand item excellent option flag |
| 10 | 1 | bit | Dinorant flag |
| 11 | 1 | bit | Helm ancient option flag |
| 11 | 1 | bit | Armor ancient option flag |
| 11 | 1 | bit | Pants ancient option flag |
| 11 | 1 | bit | Gloves ancient option flag |
| 11 | 1 | bit | Boots ancient option flag |
| 11 | 1 | bit | Left hand item ancient option flag |
| 11 | 1 | bit | Right hand item ancient option flag |
| 11 | 1 | bit | Full ancient set flag |
| 12 | 3 | bit | Left hand item group. 111 = empty |
| 12 | 1 | bit | unused or empty flag? |
| 12 | 1 | bit | unused |
| 12 | 1 | bit | Fenrir flag |
| 12 | 1 | bit | unused |
| 12 | 1 | bit | Dark horse flag |
| 13 | 3 | bit | Right hand item group. 111 = empty |
| 13 | 1 | bit | unused or empty flag? |
| 13 | 4 | bit | Helm item index (6-9th bit). 0xF = empty |
| 14 | 4 | bit | Armor item index (6-9th bit). 0xF = empty |
| 14 | 4 | bit | Pants item index (6-9th bit). 0xF = empty |
| 15 | 4 | bit | Gloves item index (6-9th bit). 0xF = empty |
| 15 | 4 | bit | Boots item index (6-9th bit). 0xF = empty |
| 16 | 6 | bit | Pet item index, see below |
| 16 | 1 | bit | Blue fenrir flag |
| 16 | 1 | bit | Black fenrir flag |
| 17 | 4 | bit | Small Wing item index, see below |
| 17 | 3 | bit | unused |
| 17 | 1 | bit | Gold fenrir flag |
### Character pose
| Value | Meaning |
|-------|---------|
| 0 | Standing (default) |
| 1 | unused |
| 2 | Sitting (e.g. on a trunk) |
| 3 | Leaning (e.g. against a wall) |
| 4 | Hanging (at these strange things in Noria) |
Note: At Season 10 and above, the values are different.
Sitting is at 1, Leaning 2, Hanging 3. So, they removed the unused value.
### Item level calculation
The item levels are calculated with the following formula: ([Item Level] - 1) / 2.
This works until item level of 15, because it fits into 4 bits.
### Item indexes
The bytes are represented in binary format. X means the bit is used by something
else (see table above).
#### Pet items
| Item | 5th byte | 10th byte | 12th byte |
|-----------------------|----------|-----------|-----------|
| Guardian Angel | xxxxxx00 |
| Imp | xxxxxx01 |
| Unicorn | xxxxxx10 |
| Dinorant | xxxxxx11 | xxxxxxx1 ||
| Fenrir | xxxxxx11 | | xxxxxx1x |
| None | xxxxxx11 | xxxxxxx0 |
And some other pets:
| Item | 16th byte |
|-----------------------|-----------|
| Pet Panda | 111000xx |
| Pet Unicorn | 101000xx |
| Skeleton | 011000xx |
| Rudolph | 100000xx |
| Spirit of Guardian | 010000xx |
| Demon | 001000xx |
#### Wings
| Item | Character Class | 5th byte | 9th byte |
|-----------------------|-----------------|----------|----------|
| Wings of Elf | Fairy Elf | xxxx01xx | xxxxx001 |
| Wings of Heaven | Dark Wizard | xxxx01xx | xxxxx010 |
| Wings of Satan | Dark Knight | xxxx01xx | xxxxx011 |
| Wings of Mistery | Summoner | xxxx01xx | xxxxx100 |
| Wings of Spirit | Muse Elf | xxxx10xx | xxxxx001 |
| Wings of Soul | Soul Master | xxxx10xx | xxxxx010 |
| Wings of Dragon | Blade Knight | xxxx10xx | xxxxx011 |
| Wings of Darkness | Magic Gladiator | xxxx10xx | xxxxx100 |
| Cape of Lord | Dark Lord | xxxx10xx | xxxxx101 |
| Wings of Despair | Bloody Summoner | xxxx10xx | xxxxx110 |
| Cape of Fighter | Rage Fighter | xxxx10xx | xxxxx111 |
| Wing of Storm | Blade Master | xxxx11xx | xxxxx001 |
| Wing of Eternal | Grand Master | xxxx11xx | xxxxx010 |
| Wing of Illusion | High Elf | xxxx11xx | xxxxx011 |
| Wing of Ruin | Duel Master | xxxx11xx | xxxxx100 |
| Cape of Emperor | Lord Emperor | xxxx11xx | xxxxx101 |
| Wing of Dimension | Dimension Master| xxxx11xx | xxxxx110 |
| Cape of Overrule | Fist Master | xxxx11xx | xxxxx111 |
| None | | xxxx00xx | xxxxx000 |
#### Small Wings
| Wing Item | 5th byte | 17th byte |
|-----------------------|----------|-------|
| Small Cape of Lord | xxxx11xx | 0x20 |
| Small Wings of Mistery| xxxx11xx | 0x40 |
| Small Wings of Elf | xxxx11xx | 0x60 |
| Small Wings of Heaven | xxxx11xx | 0x80 |
| Small Wings of Satan | xxxx11xx | 0xA0 |
| Small Cloak of Warrior| xxxx11xx | 0xC0 |

View File

@@ -0,0 +1,18 @@
# C1 00 01 - Hello (by server)
## Is sent when
This packet is sent by the server after the client connected to the server.
## Causes the following actions on the client side
A game client will request the server list. The launcher would request the patch state.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x00 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x01 | Packet header - sub packet type identifier |

View File

@@ -0,0 +1,19 @@
# C1 00 - Authenticate (by client)
## Is sent when
This packet is sent by the client after it connected to the server, to authenticate itself.
## Causes the following actions on the server side
The server will check the token. If it's correct, the client gets added to the requested chat room.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 16 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x00 | Packet header - packet type identifier |
| 4 | 2 | ShortLittleEndian | | RoomId |
| 6 | 10 | Binary | | Token; A token (integer number), formatted as string and "encrypted" with the 3-byte XOR key (FC CF AB). |

View File

@@ -0,0 +1,29 @@
# C1 00 - ChatMessage (by server)
## Is sent when
A player sends a chat message.
## Causes the following actions on the client side
The message is shown in the chat box and above the character of the sender.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x00 | Packet header - packet type identifier |
| 2 | 1 | ChatMessageType | | Type |
| 3 | 10 | String | | Sender |
| 13 | | String | | Message |
### ChatMessageType Enum
Defines the type of a chat message.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Normal | The message is a normal chat message, e.g. public, within a party or guild. |
| 2 | Whisper | The message is sent privately to the receiving player. |

View File

@@ -0,0 +1,19 @@
# C1 00 - PublicChatMessage (by client)
## Is sent when
A player sends a public chat message.
## Causes the following actions on the server side
The message is forwarded to all surrounding players, including the sender.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x00 | Packet header - packet type identifier |
| 3 | 10 | String | | Character |
| 13 | | String | | Message |

View File

@@ -0,0 +1,20 @@
# C1 01 00 - ChatRoomClientJoined (by server)
## Is sent when
This packet is sent by the server after another chat client joined the chat room.
## Causes the following actions on the client side
The client will add the client in its list (if over 2 clients are connected to the same room), or show its name in the title bar.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 15 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x01 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x00 | Packet header - sub packet type identifier |
| 4 | 1 | Byte | | ClientIndex |
| 5 | 10 | String | | Name |

View File

@@ -0,0 +1,20 @@
# C1 01 01 - ChatRoomClientLeft (by server)
## Is sent when
This packet is sent by the server after a chat client left the chat room.
## Causes the following actions on the client side
The client will remove the client from its list, or mark its name in the title bar as offline.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 15 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x01 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x01 | Packet header - sub packet type identifier |
| 4 | 1 | Byte | | ClientIndex |
| 5 | 10 | String | | Name |

View File

@@ -0,0 +1,17 @@
# C1 01 - LeaveChatRoom (by client)
## Is sent when
This packet is sent by the client when it leaves the chat room, before the connection closes.
## Causes the following actions on the server side
The server will remove the client from the chat room, notifying the remaining clients.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 3 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x01 | Packet header - packet type identifier |

View File

@@ -0,0 +1,19 @@
# C1 01 - ObjectMessage (by server)
## Is sent when
The server wants to show a message above any kind of character, even NPCs.
## Causes the following actions on the client side
The message is shown above the character.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x01 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | ObjectId |
| 5 | | String | | Message |

View File

@@ -0,0 +1,20 @@
# C1 02 - PatchCheckRequest (by client)
## Is sent when
This packet is sent by the client (launcher) to check if the patch version is high enough to be able to connect to the server.
## Causes the following actions on the server side
The connect server will check the version and sends a 'PatchVersionOkay' or a 'ClientNeedsPatch' message.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x02 | Packet header - packet type identifier |
| 3 | 1 | Byte | | MajorVersion |
| 4 | 1 | Byte | | MinorVersion |
| 5 | 1 | Byte | | PatchVersion |

View File

@@ -0,0 +1,17 @@
# C1 02 - PatchVersionOkay (by server)
## Is sent when
This packet is sent by the server after the client (launcher) requested the to check the patch version and it was high enough.
## Causes the following actions on the client side
The launcher will activate its start button.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x02 | Packet header - packet type identifier |

View File

@@ -0,0 +1,19 @@
# C1 02 - WhisperMessage (by client)
## Is sent when
A player sends a private chat message to a specific target player.
## Causes the following actions on the server side
The message is forwarded to the target player.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x02 | Packet header - packet type identifier |
| 3 | 10 | String | | ReceiverName |
| 13 | | String | | Message |

View File

@@ -0,0 +1,20 @@
# C1 04 - ChatMessage
## Is sent when
This packet is sent by the server after another chat client sent a message to the current chat room.
## Causes the following actions on the client side
The client will show the message.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x04 | Packet header - packet type identifier |
| 3 | 1 | Byte | | SenderIndex |
| 4 | 1 | Byte | | MessageLength |
| 5 | | Binary | | Message; The message. It's "encrypted" with the 3-byte XOR key (FC CF AB). |

View File

@@ -0,0 +1,20 @@
# C1 05 1 - ClientNeedsPatch (by server)
## Is sent when
This packet is sent by the server after the client (launcher) requested to check the patch version and it requires an update.
## Causes the following actions on the client side
The launcher will download the required patches and then activate the start button.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 138 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x05 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x1 | Packet header - sub packet type identifier |
| 4 | 1 | Byte | | PatchVersion |
| 6 | | String | | PatchAddress; The patch address, usually to a ftp server. The address is usually "encrypted" with the 3-byte XOR key (FC CF AB). |

View File

@@ -0,0 +1,17 @@
# C1 05 - KeepAlive (by client)
## Is sent when
This packet is sent by the client in a fixed interval.
## Causes the following actions on the server side
The server will keep the connection and chat room intact as long as the clients sends a message in a certain period of time.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 3 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x05 | Packet header - packet type identifier |

View File

@@ -0,0 +1,20 @@
# C1 07 - MagicEffectStatus (by server)
## Is sent when
A magic effect was added or removed to the own or another player.
## Causes the following actions on the client side
The user interface updates itself. If it's the effect of the own player, it's shown as icon at the top of the interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x07 | Packet header - packet type identifier |
| 3 | 1 | Boolean | | IsActive |
| 4 | 2 | ShortBigEndian | | PlayerId |
| 6 | 1 | Byte | | EffectId |

View File

@@ -0,0 +1,28 @@
# C1 0B - MapEventState (by server)
## Is sent when
The state of event is about to change.
## Causes the following actions on the client side
The event's effect is shown.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x0B | Packet header - packet type identifier |
| 3 | 1 | Boolean | | Enable |
| 4 | 1 | Events | | Event |
### Events Enum
Defines all events.
| Value | Name | Description |
|-------|------|-------------|
| 1 | RedDragon | Red dragon invasion. |
| 3 | GoldenDragon | Golden dragon invasion. |

View File

@@ -0,0 +1,29 @@
# C1 0D - ServerMessage (by server)
## Is sent when
## Causes the following actions on the client side
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x0D | Packet header - packet type identifier |
| 3 | 1 | MessageType | | Type |
| 4 | | String | | Message |
### MessageType Enum
Defines a type of a server message.
| Value | Name | Description |
|-------|------|-------------|
| 0 | GoldenCenter | The message is shown as centered golden message in the client. |
| 1 | BlueNormal | The message is shown as a blue system message. |
| 2 | GuildNotice | The message is a guild notice, centered in green. |

View File

@@ -0,0 +1,19 @@
# C1 0F - WeatherStatusUpdate (by server)
## Is sent when
The weather on the current map has been changed or the player entered the map.
## Causes the following actions on the client side
The game client updates the weather effects.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x0F | Packet header - packet type identifier |
| 3 | 4 bit | Byte | | Weather; A random value between 0 and 2 (inclusive). |
| 3 | 4 bit | Byte | | Variation; A random value between 0 and 9 (inclusive). |

View File

@@ -0,0 +1,21 @@
# C1 10 - ObjectWalked075 (by server)
## Is sent when
An object in the observed scope (including the own player) walked to another position.
## Causes the following actions on the client side
The object is animated to walk to the new position.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x10 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | ObjectId |
| 5 | 1 | Byte | | TargetX |
| 6 | 1 | Byte | | TargetY |
| 7 | 4 bit | Byte | | TargetRotation |

View File

@@ -0,0 +1,22 @@
# C1 10 - WalkRequest075 (by client)
## Is sent when
A player wants to walk on the game map.
## Causes the following actions on the server side
The player gets moved on the map, visible for other surrounding players.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x10 | Packet header - packet type identifier |
| 3 | 1 | Byte | | SourceX |
| 4 | 1 | Byte | | SourceY |
| 5 | 4 bit | Byte | | StepCount |
| 5 | 4 bit | Byte | | TargetRotation |
| 6 | | Binary | | Directions; The directions of the walking path. The target is calculated by taking the source coordinates and applying the directions to it. |

View File

@@ -0,0 +1,20 @@
# C1 11 - HitRequest (by client)
## Is sent when
A player attacks a target without using a skill.
## Causes the following actions on the server side
Damage is calculated and the target is hit, if the attack was successful. A response is sent back with the caused damage, and all surrounding players get an animation message.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x11 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | TargetId |
| 5 | 1 | Byte | | AttackAnimation |
| 6 | 1 | Byte | | LookingDirection |

View File

@@ -0,0 +1,42 @@
# C1 11 - ObjectHitExtended (by server)
## Is sent when
An object got hit in two cases: 1. When the own player is hit; 2. When the own player attacked some other object which got hit.
## Causes the following actions on the client side
The damage is shown at the object which received the hit.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 16 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x11 | Packet header - packet type identifier |
| 3 << 0 | 4 bit | DamageKind | | Kind |
| 3 << 4 | 1 bit | Boolean | | IsRageFighterStreakHit |
| 3 << 5 | 1 bit | Boolean | | IsRageFighterStreakFinalHit |
| 3 << 6 | 1 bit | Boolean | | IsDoubleDamage |
| 3 << 7 | 1 bit | Boolean | | IsTripleDamage |
| 4 | 2 | ShortLittleEndian | | ObjectId |
| 6 | 1 | Byte | | HealthStatus; Gets or sets the status of the remaining health in fractions of 1/250. |
| 7 | 1 | Byte | | ShieldStatus; Gets or sets the status of the remaining shield in fractions of 1/250. |
| 8 | 4 | IntegerLittleEndian | | HealthDamage |
| 12 | 4 | IntegerLittleEndian | | ShieldDamage |
### DamageKind Enum
Defines the kind of the damage.
| Value | Name | Description |
|-------|------|-------------|
| 0 | NormalRed | Red color, used by normal damage. |
| 1 | IgnoreDefenseCyan | Cyan color, usually used by ignore defense damage. |
| 2 | ExcellentLightGreen | Light green color, usually used by excellent damage. |
| 3 | CriticalBlue | Blue color, usually used by critical damage. |
| 4 | ReflectedLightPink | Light pink color, usually used by reflected damage. |
| 5 | PoisonDarkGreen | Dark green color, usually used by poison damage. |
| 6 | DarkPink | Dark pink color. |
| 7 | White | White color. |

View File

@@ -0,0 +1,41 @@
# C1 11 - ObjectHit (by server)
## Is sent when
An object got hit in two cases: 1. When the own player is hit; 2. When the own player attacked some other object which got hit.
## Causes the following actions on the client side
The damage is shown at the object which received the hit.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 10 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x11 | Packet header - packet type identifier |
| 2 | 1 | Byte | | HeaderCode |
| 3 | 2 | ShortBigEndian | | ObjectId |
| 5 | 2 | ShortBigEndian | | HealthDamage |
| 7 << 0 | 4 bit | DamageKind | | Kind |
| 7 << 4 | 1 bit | Boolean | | IsRageFighterStreakHit |
| 7 << 5 | 1 bit | Boolean | | IsRageFighterStreakFinalHit |
| 7 << 6 | 1 bit | Boolean | | IsDoubleDamage |
| 7 << 7 | 1 bit | Boolean | | IsTripleDamage |
| 8 | 2 | ShortBigEndian | | ShieldDamage |
### DamageKind Enum
Defines the kind of the damage.
| Value | Name | Description |
|-------|------|-------------|
| 0 | NormalRed | Red color, used by normal damage. |
| 1 | IgnoreDefenseCyan | Cyan color, usually used by ignore defense damage. |
| 2 | ExcellentLightGreen | Light green color, usually used by excellent damage. |
| 3 | CriticalBlue | Blue color, usually used by critical damage. |
| 4 | ReflectedLightPink | Light pink color, usually used by reflected damage. |
| 5 | PoisonDarkGreen | Dark green color, usually used by poison damage. |
| 6 | DarkPink | Dark pink color. |
| 7 | White | White color. |

View File

@@ -0,0 +1,29 @@
# C1 14 - MapObjectOutOfScope (by server)
## Is sent when
One or more objects (player, npc, etc.) on the map got out of scope, e.g. when the own player moved away from it/them or the object itself moved.
## Causes the following actions on the client side
The game client removes the objects from the game map.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x14 | Packet header - packet type identifier |
| 3 | 1 | Byte | | ObjectCount |
| 4 | ObjectId.Length * ObjectCount | Array of ObjectId | | Objects |
### ObjectId Structure
Contains the id of a object.
Length: 2 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 2 | ShortBigEndian | | Id |

View File

@@ -0,0 +1,19 @@
# C1 15 - InstantMoveRequest (by client)
## Is sent when
It's sent when the player performs specific skills.
## Causes the following actions on the server side
Usually, the player is moved instantly to the specified coordinates on the current map. In OpenMU, this request is not handled, because it allows hackers to "teleport" to any coordinates.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x15 | Packet header - packet type identifier |
| 3 | 1 | Byte | | TargetX |
| 4 | 1 | Byte | | TargetY |

View File

@@ -0,0 +1,21 @@
# C1 15 - ObjectMoved (by server)
## Is sent when
An object in the observed scope (including the own player) moved instantly.
## Causes the following actions on the client side
The position of the object is updated on client side.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x15 | Packet header - packet type identifier |
| 2 | 1 | Byte | | HeaderCode |
| 3 | 2 | ShortBigEndian | | ObjectId |
| 5 | 1 | Byte | | PositionX |
| 6 | 1 | Byte | | PositionY |

View File

@@ -0,0 +1,20 @@
# C1 17 - ObjectGotKilled (by server)
## Is sent when
An observed object was killed.
## Causes the following actions on the client side
The object is shown as dead.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 9 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x17 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | KilledId |
| 5 | 2 | ShortBigEndian | | SkillId |
| 7 | 2 | ShortBigEndian | | KillerId |

View File

@@ -0,0 +1,19 @@
# C1 18 - AnimationRequest (by client)
## Is sent when
A player does any kind of animation.
## Causes the following actions on the server side
The animation number and rotation is forwarded to all surrounding players.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x18 | Packet header - packet type identifier |
| 3 | 1 | Byte | | Rotation |
| 4 | 1 | Byte | | AnimationNumber |

View File

@@ -0,0 +1,21 @@
# C1 18 - ObjectAnimation (by server)
## Is sent when
An object performs an animation.
## Causes the following actions on the client side
The animation is shown for the specified object.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 9 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x18 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | ObjectId |
| 5 | 1 | Byte | | Direction |
| 6 | 1 | Byte | | Animation |
| 7 | 2 | ShortBigEndian | | TargetId |

View File

@@ -0,0 +1,21 @@
# C1 19 - SkillAnimation075 (by server)
## Is sent when
An object performs a skill which is directly targeted to another object.
## Causes the following actions on the client side
The animation is shown on the user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x19 | Packet header - packet type identifier |
| 3 | 1 | Byte | | SkillId |
| 4 | 2 | ShortBigEndian | | PlayerId |
| 6 | 2 | ShortBigEndian | | TargetId |
| 6 << 7 | 1 bit | Boolean | | EffectApplied |

View File

@@ -0,0 +1,19 @@
# C1 19 - TargetedSkill075 (by client)
## Is sent when
A player performs a skill with a target, e.g. attacking or buffing.
## Causes the following actions on the server side
Damage is calculated and the target is hit, if the attack was successful. A response is sent back with the caused damage, and all surrounding players get an animation message.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x19 | Packet header - packet type identifier |
| 3 | 1 | Byte | | SkillIndex; The index of the skill in the skill list. |
| 4 | 2 | ShortBigEndian | | TargetId |

View File

@@ -0,0 +1,19 @@
# C1 1B - MagicEffectCancelRequest (by client)
## Is sent when
A player cancels a specific magic effect of a skill, usually 'Infinity Arrow' and 'Wizardy Enhance'.
## Causes the following actions on the server side
The effect is cancelled and an update is sent to the player and all surrounding players.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x1B | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | SkillId |
| 5 | 2 | ShortBigEndian | | PlayerId |

View File

@@ -0,0 +1,19 @@
# C1 1B - MagicEffectCancelled075 (by server)
## Is sent when
A player cancelled a specific magic effect of a skill (Infinity Arrow, Wizardry Enhance), or an effect was removed due a timeout (Ice, Poison) or antidote.
## Causes the following actions on the client side
The effect is removed from the target object.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x1B | Packet header - packet type identifier |
| 3 | 1 | Byte | | SkillId |
| 4 | 2 | ShortBigEndian | | TargetId |

View File

@@ -0,0 +1,19 @@
# C1 1B - MagicEffectCancelled (by server)
## Is sent when
A player cancelled a specific magic effect of a skill (Infinity Arrow, Wizardry Enhance), or an effect was removed due a timeout (Ice, Poison) or antidote.
## Causes the following actions on the client side
The effect is removed from the target object.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x1B | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | SkillId |
| 5 | 2 | ShortBigEndian | | TargetId |

View File

@@ -0,0 +1,32 @@
# C1 1D - AreaSkillHit075 (by client)
## Is sent when
An area skill was performed and the client decided to hit one or more targets.
## Causes the following actions on the server side
The server is calculating the damage and applying it to the targets. The attacker gets a response back with the caused damage.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x1D | Packet header - packet type identifier |
| 3 | 1 | Byte | | SkillIndex; The index of the skill in the skill list. |
| 4 | 1 | Byte | | TargetX |
| 5 | 1 | Byte | | TargetY |
| 6 | 1 | Byte | | TargetCount; The number of targets which are hit. |
| 7 | TargetData.Length * TargetCount | Array of TargetData | | Targets |
### TargetData Structure
Contains the data of the target
Length: 2 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 2 | ShortBigEndian | | TargetId |

View File

@@ -0,0 +1,21 @@
# C1 1E - AreaSkill075 (by client)
## Is sent when
A player is performing an skill which affects an area of the map.
## Causes the following actions on the server side
It's forwarded to all surrounding players, so that the animation is visible. In the original server implementation, no damage is done yet for attack skills - there are separate hit packets.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x1E | Packet header - packet type identifier |
| 3 | 1 | Byte | | SkillIndex; The index of the skill in the skill list. |
| 4 | 1 | Byte | | TargetX |
| 5 | 1 | Byte | | TargetY |
| 6 | 1 | Byte | | Rotation |

View File

@@ -0,0 +1,22 @@
# C1 1E - AreaSkillAnimation075 (by server)
## Is sent when
An object performs a skill which has effect on an area.
## Causes the following actions on the client side
The animation is shown on the user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 9 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x1E | Packet header - packet type identifier |
| 3 | 1 | Byte | | SkillId |
| 4 | 2 | ShortBigEndian | | PlayerId |
| 6 | 1 | Byte | | PointX |
| 7 | 1 | Byte | | PointY |
| 8 | 1 | Byte | | Rotation |

View File

@@ -0,0 +1,18 @@
# C1 22 - PickupItemRequest075 (by client)
## Is sent when
A player requests to pick up an item which is laying on the ground in the near of the players character.
## Causes the following actions on the server side
If the player is allowed to pick the item up, and is the first player which tried that, it tries to add the item to the inventory. The server sends a response about the result of the request.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x22 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | ItemId |

View File

@@ -0,0 +1,19 @@
# C1 23 - ItemDropResponse (by server)
## Is sent when
The player requested to drop an item of his inventory. This message is the response about the success of the request.
## Causes the following actions on the client side
If successful, the client removes the item from the inventory user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x23 | Packet header - packet type identifier |
| 3 | 1 | Boolean | | Success |
| 4 | 1 | Byte | | InventorySlot |

View File

@@ -0,0 +1,25 @@
# C1 25 - AppearanceChangedExtended (by server)
## Is sent when
The appearance of a player changed, all surrounding players are informed about it.
## Causes the following actions on the client side
The appearance of the player is updated.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 14 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x25 | Packet header - packet type identifier |
| 4 | 2 | ShortLittleEndian | | ChangedPlayerId |
| 6 | 1 | Byte | | ItemSlot |
| 7 | 1 | Byte | | ItemGroup |
| 8 | 2 | ShortLittleEndian | | ItemNumber |
| 10 | 1 | Byte | | ItemLevel |
| 11 | 1 | Byte | | ExcellentFlags |
| 12 | 1 | Byte | | AncientDiscriminator |
| 13 | 1 | Boolean | | IsAncientSetComplete |

View File

@@ -0,0 +1,19 @@
# C1 25 - AppearanceChanged (by server)
## Is sent when
The appearance of a player changed, all surrounding players are informed about it.
## Causes the following actions on the client side
The appearance of the player is updated.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x25 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | ChangedPlayerId |
| 5 | | Binary | | ItemData |

View File

@@ -0,0 +1,19 @@
# C1 26 - ConsumeItemRequest075 (by client)
## Is sent when
A player requests to 'consume' an item. This can be a potion which recovers some kind of attribute, or a jewel to upgrade a target item.
## Causes the following actions on the server side
The server tries to 'consume' the specified item and responses accordingly.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | | ItemSlot; The inventory slot index of the item which should be consumed. |
| 4 | 1 | Byte | | TargetSlot; If the item has an effect on another item, e.g. upgrading it, this field contains the inventory slot index of the target item. |

View File

@@ -0,0 +1,20 @@
# C1 26 FD - ItemConsumptionFailedExtended (by server)
## Is sent when
When the consumption of an item failed.
## Causes the following actions on the client side
The game client gets a feedback about a failed consumption, and allows for do further consumption requests.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 12 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFD | Packet header - sub packet type identifier |
| 4 | 4 | IntegerLittleEndian | | Health |
| 8 | 4 | IntegerLittleEndian | | Shield |

View File

@@ -0,0 +1,20 @@
# C1 26 FD - ItemConsumptionFailed (by server)
## Is sent when
When the consumption of an item failed.
## Causes the following actions on the client side
The game client gets a feedback about a failed consumption, and allows for do further consumption requests.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 9 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFD | Packet header - sub packet type identifier |
| 4 | 2 | ShortBigEndian | | Health |
| 7 | 2 | ShortBigEndian | | Shield |

View File

@@ -0,0 +1,20 @@
# C1 26 FE - MaximumHealthAndShield (by server)
## Is sent when
When the maximum health changed, e.g. by adding stat points or changed items.
## Causes the following actions on the client side
The health and shield bar is updated on the game client user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 9 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFE | Packet header - sub packet type identifier |
| 4 | 2 | ShortBigEndian | | Health |
| 7 | 2 | ShortBigEndian | | Shield |

View File

@@ -0,0 +1,22 @@
# C1 26 FE - MaximumStatsExtended (by server)
## Is sent when
When the maximum stats, like health, shield, mana or attack speed changed on the server side, e.g. by adding stat points or changed items.
## Causes the following actions on the client side
The values are updated on the game client user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 20 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFE | Packet header - sub packet type identifier |
| 4 | 4 | IntegerLittleEndian | | Health |
| 8 | 4 | IntegerLittleEndian | | Shield |
| 12 | 4 | IntegerLittleEndian | | Mana |
| 16 | 4 | IntegerLittleEndian | | Ability |

View File

@@ -0,0 +1,20 @@
# C1 26 FF - CurrentHealthAndShield (by server)
## Is sent when
Periodically, or if the current health or shield changed on the server side, e.g. by hits.
## Causes the following actions on the client side
The health and shield bar is updated on the game client user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 9 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFF | Packet header - sub packet type identifier |
| 4 | 2 | ShortBigEndian | | Health |
| 7 | 2 | ShortBigEndian | | Shield |

View File

@@ -0,0 +1,24 @@
# C1 26 FF - CurrentStatsExtended (by server)
## Is sent when
Periodically, or if the current stats, like health, shield, mana or attack speed changed on the server side, e.g. by hits.
## Causes the following actions on the client side
The values are updated on the game client user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 24 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x26 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFF | Packet header - sub packet type identifier |
| 4 | 4 | IntegerLittleEndian | | Health |
| 8 | 4 | IntegerLittleEndian | | Shield |
| 12 | 4 | IntegerLittleEndian | | Mana |
| 16 | 4 | IntegerLittleEndian | | Ability |
| 20 | 2 | ShortLittleEndian | | AttackSpeed |
| 22 | 2 | ShortLittleEndian | | MagicSpeed |

View File

@@ -0,0 +1,20 @@
# C1 27 FE - MaximumManaAndAbility (by server)
## Is sent when
The maximum available mana or ability has changed, e.g. by adding stat points.
## Causes the following actions on the client side
The mana and ability bar is updated on the game client user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x27 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFE | Packet header - sub packet type identifier |
| 4 | 2 | ShortBigEndian | | Mana |
| 6 | 2 | ShortBigEndian | | Ability |

View File

@@ -0,0 +1,20 @@
# C1 27 FF - CurrentManaAndAbility (by server)
## Is sent when
The currently available mana or ability has changed, e.g. by using a skill.
## Causes the following actions on the client side
The mana and ability bar is updated on the game client user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x27 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFF | Packet header - sub packet type identifier |
| 4 | 2 | ShortBigEndian | | Mana |
| 6 | 2 | ShortBigEndian | | Ability |

View File

@@ -0,0 +1,19 @@
# C1 28 - ItemRemoved (by server)
## Is sent when
The item has been removed from the inventory of the player.
## Causes the following actions on the client side
The client removes the item in the inventory user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x28 | Packet header - packet type identifier |
| 3 | 1 | Byte | | InventorySlot; The affected slot of the item in the inventory. |
| 4 | 1 | Byte | 1 | TrueFlag |

View File

@@ -0,0 +1,20 @@
# C1 2A - ItemDurabilityChanged (by server)
## Is sent when
The durability of an item in the inventory of the player has been changed.
## Causes the following actions on the client side
The client updates the item in the inventory user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x2A | Packet header - packet type identifier |
| 3 | 1 | Byte | | InventorySlot |
| 4 | 1 | Byte | | Durability |
| 5 | 1 | Boolean | | ByConsumption; true, if the change resulted from an item consumption; otherwise, false |

View File

@@ -0,0 +1,50 @@
# C1 2C - FruitConsumptionResponse (by server)
## Is sent when
The player requested to consume a fruit.
## Causes the following actions on the client side
The client updates the user interface, by changing the added stat points and used fruit points.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x2C | Packet header - packet type identifier |
| 3 | 1 | FruitConsumptionResult | | Result |
| 4 | 2 | ShortLittleEndian | | StatPoints |
| 6 | 1 | FruitStatType | | StatType |
### FruitConsumptionResult Enum
Defines the result of the fruit consumption request.
| Value | Name | Description |
|-------|------|-------------|
| 0 | PlusSuccess | Consumption to add points was successful. |
| 1 | PlusFailed | Consumption to add points failed. |
| 2 | PlusPrevented | Consumption to add points was prevented because some conditions were not correct. |
| 3 | MinusSuccess | Consumption to remove points was successful. |
| 4 | MinusFailed | Consumption to remove points failed. |
| 5 | MinusPrevented | Consumption to remove points was prevented because some conditions were not correct. |
| 6 | MinusSuccessCashShopFruit | Consumption to remove points was successful, removed by a fruit acquired through the cash shop. |
| 16 | PreventedByEquippedItems | Consumption was prevented because an item was equipped. |
| 33 | PlusPreventedByMaximum | Consumption to add points was prevented because the maximum amount of points have been added. |
| 37 | MinusPreventedByMaximum | Consumption to remove points was prevented because the maximum amount of points have been removed. |
| 38 | MinusPreventedByDefault | Consumption to remove points was prevented because the base amount of stat points of the character class cannot be undercut. |
### FruitStatType Enum
Defines the type of stat which the fruit modifies.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Energy | Fruit which modifies the energy stat. |
| 1 | Vitality | Fruit which modifies the vitality stat. |
| 2 | Agility | Fruit which modifies the agility stat. |
| 3 | Strength | Fruit which modifies the strength stat. |
| 4 | Leadership | Fruit which modifies the leadership stat. |

View File

@@ -0,0 +1,65 @@
# C1 2D - EffectItemConsumption (by server)
## Is sent when
The player requested to consume an item which gives a magic effect.
## Causes the following actions on the client side
The client updates the user interface, it shows the remaining time at the effect icon.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 17 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x2D | Packet header - packet type identifier |
| 4 | 1 | EffectOrigin | | Origin |
| 6 | 1 | EffectType | | Type |
| 8 | 1 | EffectAction | | Action |
| 12 | 4 | IntegerLittleEndian | | RemainingSeconds |
| 16 | 1 | Byte | | MagicEffectNumber |
### EffectOrigin Enum
Defines the origin of the effect.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Undefined | Not defined. |
| 1 | HalloweenAndCherryBlossomEvent | Options of Halloween and Cherry Blossom Event items. |
| 2 | CashShopItem | Options of cash shop items, like Seals. |
### EffectAction Enum
Defines the effect option.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Add | Effect is added. |
| 1 | Remove | Effect is removed. |
| 2 | Replace | Effect is removed, because its getting replaced. |
### EffectType Enum
Defines the kind of effect which was applied.
| Value | Name | Description |
|-------|------|-------------|
| 1 | AttackSpeed | Attack speed increase. |
| 2 | Damage | Damage increase. |
| 3 | Defense | Defense increase. |
| 4 | MaximumHealth | Maximum Health increase. |
| 5 | MaximumMana | Maximum Mana increase. |
| 6 | ExperienceRate | Experience rate increase. |
| 7 | DropRate | Drop rate increase. |
| 8 | Sustenance | Sustenance effect, means no experience is gained during this effect. |
| 9 | Strength | Strength stat increase. |
| 10 | Agility | Agility stat increase. |
| 11 | Vitality | Vitality stat increase. |
| 12 | Energy | Energy stat increase. |
| 13 | Leadership | Leadership stat increase. |
| 14 | PhysicalDamage | Physical damage increase. |
| 15 | WizardryDamage | Wizardry damage increase. |
| 16 | Mobility | Mobility increase. |

View File

@@ -0,0 +1,22 @@
# C1 2F - MoneyDroppedExtended (by server)
## Is sent when
Money dropped on the ground.
## Causes the following actions on the client side
The client adds the money to the ground.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 12 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x2F | Packet header - packet type identifier |
| 3 | 1 | Boolean | | IsFreshDrop; If this flag is set, the money is added to the map with an animation and sound. Otherwise, it's just added like it was already on the ground before. |
| 4 | 2 | ShortLittleEndian | | Id |
| 6 | 1 | Byte | | PositionX |
| 7 | 1 | Byte | | PositionY |
| 8 | 4 | IntegerLittleEndian | | Amount |

View File

@@ -0,0 +1,17 @@
# C1 31 - CloseNpcRequest (by client)
## Is sent when
A player closes the dialog which was opened by an interaction with a NPC.
## Causes the following actions on the server side
The server updates the state of the player accordingly.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 3 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x31 | Packet header - packet type identifier |

View File

@@ -0,0 +1,18 @@
# C1 32 FF - NpcItemBuyFailed (by server)
## Is sent when
The request of buying an item from a NPC failed.
## Causes the following actions on the client side
The client is responsive again. Without this message, it may stuck.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x32 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0xFF | Packet header - sub packet type identifier |

View File

@@ -0,0 +1,19 @@
# C1 32 - ItemBought (by server)
## Is sent when
The request of buying an item from a player or npc was successful.
## Causes the following actions on the client side
The bought item is added to the inventory.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x32 | Packet header - packet type identifier |
| 3 | 1 | Byte | | InventorySlot |
| 4 | | Binary | | ItemData |

View File

@@ -0,0 +1,19 @@
# C1 34 - RepairItemRequest (by client)
## Is sent when
A player wants to repair an item of his inventory.
## Causes the following actions on the server side
The item is repaired if the player has enough money in its inventory. A corresponding response is sent.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x34 | Packet header - packet type identifier |
| 3 | 1 | Byte | | ItemSlot; Inventory item slot of the target item. If it's 0xFF, the player wants to repair all items - this is only possible with some opened NPC dialogs. Repairing the pet item slot (8) is only possible when the pet trainer npc is opened. |
| 4 | 1 | Boolean | | IsSelfRepair; If the player repairs it over his inventory, it's true. However, a server should never rely on this flag and do his own checks. |

View File

@@ -0,0 +1,21 @@
# C1 37 - TradeRequestAnswer (by server)
## Is sent when
The player which receives this message, sent a trade request to another player. This message is sent when the other player responded to this request.
## Causes the following actions on the client side
If the trade was accepted, a trade dialog is opened. Otherwise, a message is shown.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 20 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x37 | Packet header - packet type identifier |
| 3 | 1 | Boolean | | Accepted |
| 4 | 10 | String | | Name |
| 14 | 2 | ShortBigEndian | | TradePartnerLevel |
| 16 | 4 | IntegerLittleEndian | | GuildId |

View File

@@ -0,0 +1,18 @@
# C1 37 - TradeRequestResponse (by client)
## Is sent when
A requested player responded to a trade request of another player.
## Causes the following actions on the server side
When the trade request was accepted, the server tries to open a new trade and sends corresponding responses to both players.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x37 | Packet header - packet type identifier |
| 3 | 1 | Boolean | | TradeAccepted |

View File

@@ -0,0 +1,18 @@
# C1 38 - TradeItemRemoved (by server)
## Is sent when
The trading partner removed an item from the trade.
## Causes the following actions on the client side
The item is removed from the trade dialog.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x38 | Packet header - packet type identifier |
| 3 | 1 | Byte | | Slot |

View File

@@ -0,0 +1,19 @@
# C1 39 - TradeItemAdded (by server)
## Is sent when
The trading partner added an item to the trade.
## Causes the following actions on the client side
The item is added in the trade dialog.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x39 | Packet header - packet type identifier |
| 3 | 1 | Byte | | ToSlot |
| 4 | | Binary | | ItemData |

View File

@@ -0,0 +1,18 @@
# C1 3A 01 - TradeMoneySetResponse (by server)
## Is sent when
The trade money has been set by a previous request of the player.
## Causes the following actions on the client side
The money which was set into the trade by the player is updated on the UI.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3A | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x01 | Packet header - sub packet type identifier |

View File

@@ -0,0 +1,18 @@
# C1 3A - SetTradeMoney (by client)
## Is sent when
A player requests to set an amount of money in the trade.
## Causes the following actions on the server side
It's taken from the available money of the inventory. If the new money amount is lower than the amount which was set before, it's added back to the inventory. The trade partner is informed about any change.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3A | Packet header - packet type identifier |
| 4 | 4 | IntegerLittleEndian | | Amount |

View File

@@ -0,0 +1,18 @@
# C1 3B - TradeMoneyUpdate (by server)
## Is sent when
This message is sent when the trading partner put a certain amount of money (also 0) into the trade.
## Causes the following actions on the client side
It overrides all previous sent money values.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 8 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3B | Packet header - packet type identifier |
| 4 | 4 | IntegerLittleEndian | | MoneyAmount |

View File

@@ -0,0 +1,28 @@
# C1 3C - TradeButtonStateChange (by client)
## Is sent when
The player presses the trade button.
## Causes the following actions on the server side
The state change is forwarded to the trade partner. If both players press the trade button at the same time, the server will try to complete the trade by exchanging the items and money.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3C | Packet header - packet type identifier |
| 3 | 1 | TradeButtonState | | NewState |
### TradeButtonState Enum
The state of the trade button.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Unchecked | Trade button is not pressed. It means that the trade is not yet accepted by the trader. |
| 1 | Checked | Trade Button is pressed. It means that the trade is accepted by the trader. |
| 2 | Red | This state is only sent to the client. After some seconds the client is changing back to normal Unchecked. |

View File

@@ -0,0 +1,28 @@
# C1 3C - TradeButtonStateChanged (by server)
## Is sent when
After the trading partner checked or unchecked the trade accept button.
## Causes the following actions on the client side
The game client updates the trade button state accordingly.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3C | Packet header - packet type identifier |
| 3 | 1 | TradeButtonState | | State |
### TradeButtonState Enum
Defines the state of the trade button.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Unchecked | Trade button is not pressed. It means that the trade is not yet accepted by the trader. |
| 1 | Checked | Trade Button is pressed. It means that the trade is accepted by the trader. |
| 2 | Red | This state is only sent to the client. After some seconds the client is changing back to normal Unchecked. |

View File

@@ -0,0 +1,17 @@
# C1 3D - TradeCancel (by client)
## Is sent when
The player wants to cancel the trade.
## Causes the following actions on the server side
The trade is cancelled and the previous inventory state is restored.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 3 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3D | Packet header - packet type identifier |

View File

@@ -0,0 +1,30 @@
# C1 3D - TradeFinished (by server)
## Is sent when
A trade was finished.
## Causes the following actions on the client side
The trade dialog is closed. Depending on the result, a message is shown.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3D | Packet header - packet type identifier |
| 3 | 1 | TradeResult | | Result |
### TradeResult Enum
Defines the result of a finished trade.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Cancelled | The trade was cancelled. |
| 1 | Success | The trade was successful. |
| 2 | FailedByFullInventory | The trade failed because of a full inventory. |
| 3 | TimedOut | The trade failed because the request timed out. |
| 4 | FailedByItemsNotAllowedToTrade | The trade failed because one or more items were not allowed to trade. |

View File

@@ -0,0 +1,39 @@
# C1 3F 06 - PlayerShopBuyResultExtended (by server)
## Is sent when
After the player requested to buy an item of a shop of another player.
## Causes the following actions on the client side
The result is shown to the player. If successful, the item is added to the inventory.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3F | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x06 | Packet header - sub packet type identifier |
| 4 | 2 | ShortLittleEndian | | SellerId |
| 6 | 1 | ResultKind | | Result |
| 7 | 1 | Byte | | ItemSlot |
| 8 | | Binary | | ItemData |
### ResultKind Enum
The kind of result.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Undefined | Undefined result. |
| 1 | Success | The item has been bought successfully. |
| 2 | NotAvailable | The seller is not available. |
| 3 | ShopNotOpened | The requested player has no open shop. |
| 4 | InTransaction | The requested player is already in a transaction with another player. |
| 5 | InvalidShopSlot | The requested item slot is invalid. |
| 6 | NameMismatchOrPriceMissing | The requested player with the specified id has a different name or price is missing. |
| 7 | LackOfMoney | The player has not enough money to buy the item from the seller. |
| 8 | MoneyOverflowOrNotEnoughSpace | The selling player cannot sell the item, because the sale would overflow his money amount in the inventory. Another possibility is that the inventory of the buyer cannot take the item. |
| 9 | ItemBlock | The requested player has item block active. |

View File

@@ -0,0 +1,39 @@
# C1 3F 06 - PlayerShopBuyResult (by server)
## Is sent when
After the player requested to buy an item of a shop of another player.
## Causes the following actions on the client side
The result is shown to the player. If successful, the item is added to the inventory.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 21 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3F | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x06 | Packet header - sub packet type identifier |
| 4 | 1 | ResultKind | | Result |
| 5 | 2 | ShortBigEndian | | SellerId |
| 7 | 13 | Binary | | ItemData |
| 20 | 1 | Byte | | ItemSlot |
### ResultKind Enum
The kind of result.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Undefined | Undefined result. |
| 1 | Success | The item has been bought successfully. |
| 2 | NotAvailable | The seller is not available. |
| 3 | ShopNotOpened | The requested player has no open shop. |
| 4 | InTransaction | The requested player is already in a transaction with another player. |
| 5 | InvalidShopSlot | The requested item slot is invalid. |
| 6 | NameMismatchOrPriceMissing | The requested player with the specified id has a different name or price is missing. |
| 7 | LackOfMoney | The player has not enough money to buy the item from the seller. |
| 8 | MoneyOverflowOrNotEnoughSpace | The selling player cannot sell the item, because the sale would overflow his money amount in the inventory. Another possibility is that the inventory of the buyer cannot take the item. |
| 9 | ItemBlock | The requested player has item block active. |

View File

@@ -0,0 +1,20 @@
# C1 3F 08 - PlayerShopItemSoldToPlayer (by server)
## Is sent when
An item of the players shop was sold to another player.
## Causes the following actions on the client side
The item is removed from the players inventory and a blue system message appears.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 15 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3F | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x08 | Packet header - sub packet type identifier |
| 4 | 1 | Byte | | InventorySlot |
| 5 | 10 | String | | BuyerName |

View File

@@ -0,0 +1,19 @@
# C1 3F 12 - ClosePlayerShopDialog (by server)
## Is sent when
After the player requested to close his shop or after all items has been sold.
## Causes the following actions on the client side
The player shop dialog is closed for the shop of the specified player.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3F | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x12 | Packet header - sub packet type identifier |
| 4 | 2 | ShortBigEndian | | PlayerId |

View File

@@ -0,0 +1,19 @@
# C1 3F 2 - PlayerShopOpenSuccessful (by server)
## Is sent when
After the player requested to open his shop and this request was successful.
## Causes the following actions on the client side
The own player shop is shown as open.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3F | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x2 | Packet header - sub packet type identifier |
| 4 | 1 | Boolean | true | Success |

View File

@@ -0,0 +1,20 @@
# C1 3F 3 - PlayerShopClosed (by server)
## Is sent when
After a player in scope requested to close his shop or after all items has been sold.
## Causes the following actions on the client side
The player shop not shown as open anymore.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x3F | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x3 | Packet header - sub packet type identifier |
| 4 | 1 | Boolean | true | Success |
| 5 | 2 | ShortBigEndian | | PlayerId |

View File

@@ -0,0 +1,18 @@
# C1 40 - PartyInviteRequest (by client)
## Is sent when
A party master wants to invite another player to his party.
## Causes the following actions on the server side
If the requesting player has no party, or is the party master, a request is sent to the target player.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x40 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | TargetPlayerId |

View File

@@ -0,0 +1,18 @@
# C1 40 - PartyRequest (by server)
## Is sent when
Another player requests party from the receiver of this message.
## Causes the following actions on the client side
The party request is shown.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x40 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | RequesterId |

View File

@@ -0,0 +1,19 @@
# C1 41 - PartyInviteResponse (by client)
## Is sent when
A player was invited by another player to join a party and this player sent the response back.
## Causes the following actions on the server side
If the sender accepts the request, it's added to the party.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x41 | Packet header - packet type identifier |
| 3 | 1 | Boolean | | Accepted |
| 4 | 2 | ShortBigEndian | | RequesterId |

View File

@@ -0,0 +1,34 @@
# C1 42 01 - PartyList075 (by server)
## Is sent when
A player joined a party or requested the current party list by opening the party dialog.
## Causes the following actions on the client side
The party list is updated.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x42 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x01 | Packet header - sub packet type identifier |
| 4 | 1 | Byte | | Count |
| 5 | PartyMember.Length * Count | Array of PartyMember | | Members |
### PartyMember Structure
Data about a party member.
Length: 14 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 10 | String | | Name |
| 10 | 1 | Byte | | Index |
| 11 | 1 | Byte | | MapId |
| 12 | 1 | Byte | | PositionX |
| 13 | 1 | Byte | | PositionY |

View File

@@ -0,0 +1,36 @@
# C1 42 01 - PartyList (by server)
## Is sent when
A player joined a party or requested the current party list by opening the party dialog.
## Causes the following actions on the client side
The party list is updated.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x42 | Packet header - packet type identifier |
| 3 | 1 | Byte | 0x01 | Packet header - sub packet type identifier |
| 4 | 1 | Byte | | Count |
| 5 | PartyMember.Length * Count | Array of PartyMember | | Members |
### PartyMember Structure
Data about a party member.
Length: 24 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 10 | String | | Name |
| 10 | 1 | Byte | | Index |
| 11 | 1 | Byte | | MapId |
| 12 | 1 | Byte | | PositionX |
| 13 | 1 | Byte | | PositionY |
| 16 | 4 | IntegerLittleEndian | | CurrentHealth |
| 20 | 4 | IntegerLittleEndian | | MaximumHealth |

View File

@@ -0,0 +1,17 @@
# C1 42 - PartyListRequest (by client)
## Is sent when
When the player opens the party menu in the game client.
## Causes the following actions on the server side
If the player is in a party, the server sends back a list with information about all players of the party.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 3 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x42 | Packet header - packet type identifier |

View File

@@ -0,0 +1,18 @@
# C1 43 - PartyPlayerKickRequest (by client)
## Is sent when
A party master wants to kick another player from his party, or when a player wants to kick himself from his party.
## Causes the following actions on the server side
If the sending player is the party master, or the player wants to kick himself, the target player is removed from the party.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x43 | Packet header - packet type identifier |
| 3 | 1 | Byte | | PlayerIndex |

View File

@@ -0,0 +1,18 @@
# C1 43 - RemovePartyMember (by server)
## Is sent when
A party member got removed from a party in which the player is in.
## Causes the following actions on the client side
The party member with the specified index is removed from the party list on the user interface.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x43 | Packet header - packet type identifier |
| 3 | 1 | Byte | | Index |

View File

@@ -0,0 +1,30 @@
# C1 44 - PartyHealthUpdate (by server)
## Is sent when
Periodically, when the health state of the party changed.
## Causes the following actions on the client side
The party health list is updated.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x44 | Packet header - packet type identifier |
| 3 | 1 | Byte | | Count |
| 4 | PartyMemberHealth.Length * Count | Array of PartyMemberHealth | | Members |
### PartyMemberHealth Structure
Health of a party member
Length: 1 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 4 bit | Byte | | Index |
| 0 | 4 bit | Byte | | Value; A value from 0 to 10 about the health of a player. 10 means the current health is 100% of the maximum health. |

View File

@@ -0,0 +1,47 @@
# C1 46 - ChangeTerrainAttributes (by server)
## Is sent when
The server wants to alter the terrain attributes of a map at runtime.
## Causes the following actions on the client side
The client updates the terrain attributes on its side.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x46 | Packet header - packet type identifier |
| 3 | 1 | Boolean | false | Type |
| 4 | 1 | TerrainAttributeType | | Attribute |
| 5 | 1 | Boolean | | RemoveAttribute; When this is true, the attribute is removed on the client side. If it's false, then the attribute is added. |
| 6 | 1 | Byte | | AreaCount |
| 7 | TerrainArea.Length * AreaCount | Array of TerrainArea | | Areas |
### TerrainArea Structure
Defines the area which should be changed.
Length: 4 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | | StartX |
| 1 | 1 | Byte | | StartY |
| 2 | 1 | Byte | | EndX |
| 3 | 1 | Byte | | EndY |
### TerrainAttributeType Enum
Defines the attribute which should be set/unset. It's a Flags enumeration.
| Value | Name | Description |
|-------|------|-------------|
| 1 | Safezone | The coordinate is a safezone. |
| 2 | Character | The coordinate is occupied by a character. |
| 4 | Blocked | The coordinate is blocked and can't be passed by a character. |
| 8 | NoGround | The coordinate is blocked, because there is no ground and can't be passed by a character. |
| 16 | Water | The coordinate is blocked by water and can't be passed by a character. |

View File

@@ -0,0 +1,29 @@
# C1 48 - ShowEffect (by server)
## Is sent when
After a player achieved or lost something.
## Causes the following actions on the client side
An effect is shown for the affected player.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x48 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | PlayerId |
| 5 | 1 | EffectType | | Effect |
### EffectType Enum
Defines the effect which is shown for the player.
| Value | Name | Description |
|-------|------|-------------|
| 3 | ShieldPotion | The player gained shield by drinking a potion. |
| 16 | LevelUp | A level up effect is shown for the player. |
| 17 | ShieldLost | The players shield depleted. |

View File

@@ -0,0 +1,19 @@
# C1 4B - RageAttackRangeRequest (by client)
## Is sent when
A player (rage fighter) performs the dark side skill on a target.
## Causes the following actions on the server side
The targets (up to 5) are determined and sent back to the player with the RageAttackRangeResponse.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 7 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x4B | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | SkillId |
| 5 | 2 | ShortBigEndian | | TargetId |

View File

@@ -0,0 +1,29 @@
# C1 4B - RageAttackRangeResponse (by server)
## Is sent when
A player (rage fighter) performs the dark side skill on a target and sent a RageAttackRangeRequest.
## Causes the following actions on the client side
The targets are attacked with visual effects.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 16 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x4B | Packet header - packet type identifier |
| 4 | 2 | ShortLittleEndian | | SkillId |
| 6 | RageTarget.Length * | Array of RageTarget | | Targets |
### RageTarget Structure
Contains the target identifier.
Length: 2 Bytes
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 2 | ShortLittleEndian | 10000 | TargetId |

View File

@@ -0,0 +1,18 @@
# C1 50 - GuildJoinRequest (by client)
## Is sent when
A player (non-guild member) requests to join a guild.
## Causes the following actions on the server side
The request is forwarded to the guild master. There can only be one request at a time. If the guild master already has an open request, a corresponding response is directly sent back to the requesting player.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x50 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | GuildMasterPlayerId |

View File

@@ -0,0 +1,18 @@
# C1 50 - GuildJoinRequest (by server)
## Is sent when
A player requested to join a guild. This message is sent then to the guild master.
## Causes the following actions on the client side
The guild master gets a message box with the request popping up.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 5 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x50 | Packet header - packet type identifier |
| 3 | 2 | ShortBigEndian | | RequesterId |

View File

@@ -0,0 +1,19 @@
# C1 51 - GuildJoinResponse (by client)
## Is sent when
A guild master responded to a previously sent request.
## Causes the following actions on the server side
If the request was accepted by the guild master, the previously requesting player is added to the guild.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 6 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x51 | Packet header - packet type identifier |
| 3 | 1 | Boolean | | Accepted |
| 4 | 2 | ShortBigEndian | | RequesterId |

View File

@@ -0,0 +1,33 @@
# C1 51 - GuildJoinResponse (by server)
## Is sent when
After a guild master responded to a request of a player to join his guild. This message is sent back to the requesting player.
## Causes the following actions on the client side
The requester gets a corresponding message showing.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x51 | Packet header - packet type identifier |
| 3 | 1 | GuildJoinRequestResult | | Result |
### GuildJoinRequestResult Enum
The result of the guild join request.
| Value | Name | Description |
|-------|------|-------------|
| 0 | Refused | Refused by the guild master. |
| 1 | Accepted | Accepted by the guild master. |
| 2 | GuildFull | The guild is full. |
| 3 | Disconnected | The guild master is disconnected. |
| 4 | NotTheGuildMaster | The requested player is not the guild master of its guild. |
| 5 | AlreadyHaveGuild | The player already has a guild. |
| 6 | GuildMasterOrRequesterIsBusy | he guild master or the requesting player is busy, e.g. by another request or by an ongoing guild war. |
| 7 | MinimumLevel6 | The requesting player needs a minimum level of 6. |

View File

@@ -0,0 +1,17 @@
# C1 52 - GuildListRequest (by client)
## Is sent when
A guild player opens its guild menu in the game client.
## Causes the following actions on the server side
A list of all guild members and their state is sent back as response.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 3 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x52 | Packet header - packet type identifier |

View File

@@ -0,0 +1,19 @@
# C1 53 - GuildKickPlayerRequest (by client)
## Is sent when
A guild member wants to kick himself or a guild master wants to kick another player from its guild.
## Causes the following actions on the server side
If the player is allowed to kick the player, it's removed from the guild. If the guild master kicks himself, the guild is disbanded. Corresponding responses are sent to all involved players.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | | Packet header - length of the packet |
| 2 | 1 | Byte | 0x53 | Packet header - packet type identifier |
| 3 | 10 | String | | PlayerName |
| 13 | | String | | SecurityCode |

View File

@@ -0,0 +1,31 @@
# C1 53 - GuildKickResponse (by server)
## Is sent when
After a guild master sent a request to kick a player from its guild and the server processed this request.
## Causes the following actions on the client side
The client shows a message depending on the result.
## Structure
| Index | Length | Data Type | Value | Description |
|-------|--------|-----------|-------|-------------|
| 0 | 1 | Byte | 0xC1 | [Packet type](PacketTypes.md) |
| 1 | 1 | Byte | 4 | Packet header - length of the packet |
| 2 | 1 | Byte | 0x53 | Packet header - packet type identifier |
| 3 | 1 | GuildKickSuccess | | Result |
### GuildKickSuccess Enum
The result of the guild kick request.
| Value | Name | Description |
|-------|------|-------------|
| 0 | FailedPasswordIncorrect | The kick request failed because of an incorrect password. |
| 1 | KickSucceeded | The kick request was successful. |
| 2 | KickFailedBecausePlayerIsNotGuildMaster | The kick failed because player is not guild master. |
| 3 | Failed | The kick request failed. |
| 4 | GuildDisband | The guild has been disbanded. |
| 5 | GuildMemberWithdrawn | The guild member has been withdrawn. |

Some files were not shown because too many files have changed in this diff Show More