# Feather Network Protocol
###### tags: `Feather Cracking`
Protocol that used in featherEXE. Only work with newest featherEXE
# Manual
## Search with Prove Read Needed
```
Ctrl + F, PRN:<pkt-cate>
ie (pkt-cate: 1c, the rest are unknown)
PRN:4b??
```
## Search in Well-Known section
**Only work with packets listed in Well-Known section**<br>
**The packets listed in previous section cannot be searched using this method** <br>
<br>
Search packet with known sub-cate:
```
Ctrl + F, idx:<pkt-cate><sub-cate>
ie (pkt-cate: 69, sub-cate: 0a):
idx:690a
```
Search packet with arbitrary sub-cate:
```
Ctrl + F, idx:<pkt-cate>??
ie (pkt-cate: 83):
idx:83??
```
# Packet
Format:
```
+--------+----------------------+------------------------>
| 1 Byte | 1~2 Bytes | <n-1 Bytes>
| Packet | Packet Cate | Packet Length Long
| Length | | Packet Body
+--------+----------------------+------------------------>
```
# Unknown / Prove Read Needed Packets
```
-- Paste Them Here :D --
-- Just directly copy the packet if you dont know which part is controling what --
-- Please follow the packet format, split them with spaces --
-- Packet size MUST be replaced by "__" (2 underlines)
-- (Please provide the mark "PRN:XX??" where XX is packet type) --
Example:
```
After Join Game, player item bar position:
```
// ProveReadNeeded
// PRN:4b??
// $1: packet type (item bar item ?)
// $2: item bar item position?
// $3 ~ $8: item ID?
$1 $2 $3$4$5$6$7$8
__ 4b 01 353730313430 00 // for 353730313430, decoded: 570140
__ 4b 02 353130303130 00 // for 353130303130, decoded: 510010
```
Change Attack Mode:
```
// ProveReadNeeded
// PRN:3e01
07 # sz
3e # pkt-cate
01 # sub-cate ?
65310000 # msgID
00 # null-term
```
Create Store:
```
7b 000101 00 // yxb
3d 54e7c22b002d450f006478160000 00
7b fc2d450f006478160000 00
7b 000201 00 // yb
3d 55e7c22b002d450f006478160000 00
7b fc2d450f006478160000 00
3d 5035 00 // 改名
3d 52e7c22b0033 00
7b 000001 00 // 收皮
3d 51e7c22b0000 00
21 01d40d0000 00
```
Pick Up/Drop Item:
```
2b ea152c00 02 BC2E0200 01000000 0000 00 BC2E0200 00 // pick BC2E02=item id 01000000=count??
3e 01 2cb00a00 64 BC2E0200 00 //唔知邊到有問題
3e 011fb00a00 64 BC2E0200 00 // throw item message
2d ea152c00 00 // clear item
```
## Login Related
### Client To Server (cli -> srv)
Some of the contents in this part are **INCORRECT**. Please noted.<br>
<br>
| Size | Prefix | Desc/Format | Example |
| :--- |:--- |:--- | :--- |
| 03_ | ff_ | 00_00_: Start of Connection Block<br>02_00_: Connect Retry Counter[1]<br>03_00_: Connect Retry Counter[2] <br>04_00_: Connect Retry Counter[3]<br>09_00_: End of Connection Block<br>0a_00_: Disconnect with Protocol Error<br>fe_00_: Go Online (Login with hero)
| |
| 05_ | ff_0f_c7_ 00_00_ | Incorrect Protocol | - No Message & Clear pw input -
| 05_ | ff_0f_ca_ 00_00_ | Incorrect Protocol / Invalid Connection |
| |
| 07_ | 21_02_76_ d8_6a_ 00_00_ | Login Fail (Incorrect ac / pw)
| 07_ | 49_0e_00_ 00_00_ 00_00_ | Login Success
| 07_ | ff_08_46_ 27_00_ 00_00_ | Connection Closed
### Handshake
1. \[cli->srv] Client Connect
2. \[srv->cli] Server Reply \[7 bytes] \[EndsWith: <bool4004_> <bool4004_>] \[arbitrary]
3. \[cli->srv] 1024bits RSA public key in ASN.1 notation
4. \[srv->cli] RSA-Encrypted AES secret\[secretA] \[32 bytes secret]
5. \[srv->cli] AES-Encrypted\[secretA] AES secret\[secretB] for password encryption \[32 bytes secret]
6. \[cli->srv] AES-Encrypted\[secretA] Login packet with AES-Encrypted\[secretB] password
7. \[srv->cli] AES-Encrypted\[secretA] Login Success (goto: @HeroFormat) / Error Message (goto: @MessagePacket)
**Login Workflow**
```
1. [cli<-srv] Init Handshake 7-Bytes
2. [cli->srv] 1024-bit RSA public key in ASN.1 (90-bytes)
3. [cli<-srv] RSA-Encrypted AES secret (secretA) for packet encryption
------ from now on, all packets are encrypted by AES secretA ------
4. [cli<-srv] AES secret (secretB) for auth-password encryption
5.1 [cli->srv] [PreAuth|LOGIN] Auth string (LOGIN <Version Number> <Client SubVersion?> <username> <secretB encrypted password>
5.2 [cli->srv] [PreAuth|IN_HEO_SELECTION]
5.2.1 [cli->srv] (Create Hero) Auth string (LOGIN <Version Number> <Client SubVersion?> <username> <secretB encrypted password> <Name(GBK)> <gender> <icon> <hairCut> <hairColor> <pos> <family>
5.2.2 [cli->srv] (Delete Hero Request) Auth string (DELETE_USER <Version Number> <Client SubVersion?> <username> <secretB encrypted password> <Target HeroUID> 1)
5.2.3 [cli->srv] (Confirm Delete Hero) Auth string (DELETE_USER <Version Number> <Client SubVersion?> <username> <secretB encrypted password> <Target HeroUID> 2) // TODO: is that == 2?
5.2.4 [cli->srv] (Cancel Delete Hero) Auth string (DELETE_USER <Version Number> <Client SubVersion?> <username> <secretB encrypted password> <Target HeroUID> 3)
5.2.5 [cli->srv] (Join Game) Auth string (LOGIN <Version Number> <Client SubVersion?> <username> <secretB encrypted password> <pos>
6. [cli<-srv]
```
### Hero Format
```
```
### After Login - Select Hero
```
```
### Create Hero
```
```
### After Login Auth - Delete Hero
Flow: cli connect -> (handshake -- normal login) -> cli send del req. -> srv reply all heros
```
# client request -- delete hero
0f_ # size
21_02_df_07_00_00_73_03_00_00_00_
77_63_77_00_ # name (wcw) in GBK encode with 00 padding
# cancel delete request
0f_ # size
21_02_e1_07_00_00_73_03_00_00_00_
77_63_77_00_ # name
# hero in pos: 01 -- waiting for delete, name: wcw
46_49_0d_01_ac_70_00_00_00_11_27_00_00_00_00_01_00_e7_80_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_3d_01_00_00_00_00_5e_45_0f_00_73_03_00_00_00_77_63_77_64_fe_11_00_00_00_
# mark the previous one hero as waiting for delete
0c_ # size
49_0c_ # 0c -> waiting for delete, 0d -> normal
01_ # hero pos, 01 is pos 1 (default main)
ac_70_00_00_ # user ID
09_69_f2_5d_00_ # time ?
# hero in pos: 01 -- normal, name: wcw
46_49_0d_01_ac_70_00_00_00_11_27_00_00_00_00_01_00_e7_80_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_3d_01_00_00_00_00_5e_45_0f_00_73_03_00_00_00_77_63_77_64_fe_11_00_00_00_
# hero in pos: 04 -- empty space
44_49_0d_04_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_5e_45_0f_00_73_01_00_00_00_20_64_00_00_00_00_00_
# hero in pos: 05 -- empty space
44_49_0d_04_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_5e_45_0f_00_73_01_00_00_00_20_64_00_00_00_00_00_
```
#### Join Game with Hero
Flow:
1. \[cli->srv] handshake
2. ... handshaking ...
3. \[cli->srv]: \[@handshake step 6]: LOGIN request with HeroPosition (AES encrypt, ascii)
4. \[cli->srv]: machine code add \<machineCode> (AES encrypte, ascii)
5. \[srv->cli]: Join Game Packet
```
LOGIN 1.3.0.10 11 <uname> <AES encrypted-pswd> <hero pos, 06 = pos6>
4c4f47494e20312e332e302e3130203131206b616c76696e30303030312032313143334246433733464344414436383136413936323132314432334646332036 0d0a
machine_code add <machine code>:
6d616368696e655f636f64652061646420 <machine code> 0d0a
```
### Player Online/Offline
```sh
08_ # size
54_29_ # prefix [request type]
0f_37_ # player ID [message body]
00_00_ # suffix
00_ # status (either \x00 or \x01), 00 = offline, 01 = online
00_ # end of packet
```
### Chat Related
| Channel | Desc/Format | Example |
|:--- |:--- | :--- |
| 2b_31_36_37_37_37_32_31_35 (16776960) | Team
| 2b_31_36_37_37_36_39_36_30 (16777215) | Current
| 2b_36_32_34_33_37_ (62437) | World
| 0f_43_02_00_00_00_00_ 1b_3a_ c4_b3_c8_cb_3a_2e_00_
#### Chat Color Code
```sh
# VIP colors
^piv*W # color White
^piv*Y # color Yellow
^piv*C # color Cyan
^piv*G # color Green
^piv*B # color Blue
^piv*M # color Magenta
^piv*R # color Red
^piv*q # color Pink
^piv*Q # color Orange
```
#### Chat Packet Format
##### World Channel
split on every \\x09
```sh
# format
# col. view
<size> # size
<4 Bytes Prefix> # prefix (TODO)
00_00_ # separator
1a_3a_ # TODO
09_ # separator
2b_36_32_34_33_37_2c_ # magic (encoded: "+62437,")
<name> # name
3d_ # encoded: "="
<player ID> # player id
09_ # separator
2d_ # end of prefix (encoded: "-")
3a_ # message start (encoded: ":")
<msg> # message body (color code included)
00_ # end of message
# sample (after GBK encoded)
# UC) +62437,蓝天=10714 -: ^piv*R帝君你干活不卖力,礼都杀我好几轮了,你刚杀一个号
55_43_01_da_29_ 00_00_ 1b_3a_ 09_ 2b_36_32_34_33_37_2c_ c0_b6_cc_ec_ 3d_ 31_30_37_31_34_ 09_ 2d_ 3a_20_ 5e_70_69_76_2a_52_b5_db_be_fd_c4_e3_b8_c9_bb_ee_b2_bb_c2_f4_c1_a6_a3_ac_c0_f1_b6_bc_c9_b1_ce_d2_ba_c3_bc_b8_c2_d6_c1_cb_a3_ac_c4_e3_b8_d5_c9_b1_d2_bb_b8_f6_ba_c5_00_
```
##### Near Channel
```sh
# format
# col. view
<size> # size
<4 Bytes Prefix> # prefix (TODO)
00_00_ # separator
1a_3a_ # TODO
09_ # separator
2b_31_36_37_37_36_39_36_30_2c_ # magic (encoded: "+16777215,")
<name> # name
3d_ # encoded: "="
<player ID> # player id
09_ # separator
2d_ # end of prefix (encoded: "-")
3a_ # message start (encoded: ":")
<msg> # message body (color code included)
00_ # end of message
```
##### Team Channel
```sh
# format
# col. view
<size> # size
<4 Bytes Prefix> # 21 01 F4 0C -> washing P | 43 07 [09/0F] 37
00_00_ # separator
1a_3a_ # [1a/1b]_3a_ -> normal, 00_3a_ -> washing P
09_ # separator
2b_31_36_37_37_37_32_31_35_2c_ # magic (encoded: "+16776960,")
<name> # name
3d_ # encoded: "="
<player ID> # player id (in GBK encoded character)
09_ # separator
2d_ # end of prefix (encoded: "-")
3a_ # message start (encoded: ":")
<msg> # message body (color code included)
00_ # end of message
# sample (after GBK encoded)
# (C 7 +16776960,旋1=14089 -: ^piv*Y.
28_43_07_09_37_00_00_1b_3a_09_2b_31_36_37_37_36_39_36_30_2c_d0_fd_31_3d_31_34_30_38_39_09_2d_3a_20_5e_70_69_76_2a_59_2e_00_
```
### System Related (Broadcast Notice)
#### [系統] 征服世界的\<name>上線了~~
```sh
# format
# col. view
20_43_00_0a_00_
00_00_
00_9c_
08_00_00_64_8a_27_
00_00_
73_0a_00_00_00_
<name>
d8_af_41_72_65_73_d8_bc_c0_f1_00_
```
#### [系統] \<tag>的\<name>上線了~~
#### 排行榜
##### 最強實力
```sh
# format
16_ # msg len
b9_a1_02_01_ # 排行榜 cate
0a_ # 排名 (this one is 第 10)
04_96_ # 職業
a9_11_ # 經驗 (排行榜 value)
00_00_a4_b8_bb_d2_cc_ab_c0_c7_d8_bc_00_ # 人名
```
##### 富甲天下
```sh
14_ b9_a1_02_02_
01_ # rank
05_ # role
64_d5_39_ # unk
19_00_ # value ? -- N/A
57_73_6d_d8_bc_73_c4_ad_00_ # name
10_ b9_a1_02_02_ 02_ 01_ 28_29_dd_ 11_00_ ba_cc_c4_be_00_
12_ b9_a1_02_02_ 03_ 02_ 59_ac_1f_ 0b_00_ d7_cf_fd_92_83_b9_00_
12_ b9_a1_02_02_ 04_ 01_ 3d_4a_72_ 0a_00_ c7_b3_d8_bc_d2_e4_00_
18_ b9_a1_02_02_ 05_ 04_ 96_21_44_ 0a_00_ c6_af_c1_c1_b5_c4_d0_a1_c1_e1_c1_e1_00_
14_ b9_a1_02_02_ 06_ 01_ 04_cf_39_ 0a_00_ 32_30_31_38_2e_33_2e_33_00_
10_ b9_a1_02_02_ 07_ 02_ 96_8c_90_ 09_00_ b5_db_be_fd_00_
14_ b9_a1_02_02_ 08_ 02_ 78_58_ef_ 08_00_ b3_b3_bc_dc_cd_f5_d8_bc_00_
16_ b9_a1_02_02_ 09_ 04_ 96_5e_cd_ 06_00_ d8_af_41_72_65_73_d8_bc_c0_f1_00_
12_ b9_a1_02_02_ 0a_ 01_ 96_1d_a5_ 06_00_ d2_e4_c4_ce_ba_ce_00_
```
### Action Related
#### Open a shop
```sh
05_ # size
7b_00_01_01_ # action
00_ # padding
```
#### Move
```shell
0f_ # pkt size 0xF (15)
67_e7_f7_70_ # action code
00_ # separator
30_47_ #
23_0c_ #
2f_00_ # x axis (47)
7d_00_ # y axis (125)
34_ # facing G4 -- 0x34 (52)
00_ # x046 y124 G4 (jw)
```
```shell
0f_ # pkt size 0xF (15)
67_e7_f7_70_ # action code
00_ # separator
3b_47_ #
23_0c_ #
2e_00_ # x axis (46)
7c_00_ # y axis (123)
33_ # facing G3 -- 0x33 (51)
00_ # x046 y123 G3 (jw)
```
```shell
0f_ # pkt size 0xF (15)
67_51_4f_dc_ # action code
03_ # separator
62_f2_ #
5d_0d_ #
e5_00_ # x axis (229)
df_00_ # y axis (223)
32_ # facing G2 -- 0x32 (50)
00_ # x229 y223 G2 (tyc)
```
```shell
go2 230,222 4 42579
0f_67_51_4f_dc_03_4e_18_5e_0d_e6_00_de_00_34_00_
0f_ # pkt size 0xF (15)
67_51_4f_dc_ # action code
03_ # separator
4e_18_ #
5e_0d_ #
e6_00_ # x axis (230)
de_00_ # y axis (222)
34_ # facing G4 -- 0x34 (52)
00_ # x230 y222 G4 (tyc)
```
| Packet | Desc & Format | Example |
| -- | -- | -- |
| 0d_54_0a_0f_37_00_00 | teammate move | |
| 0f_54_ 03_ 09_37_00_00_ 47_03_00_00_ 64_03_00_00_00_ | attacking<br>{prefix}{uk1(1b)}{uk2(4b)}{health(4b)}{uk3(4b)}\_00_ | ```0f_54 _03 _09_37_00_00 _48_03_00_00_ 64_03_00_00 _00_ # 840hp```<br>```0f_54 _03 _09_37_00_00 _47_03_00_00_ 64_03_00_00 _00_ # 839hp```
# Well-Known
## Spawn Player
### Spawn with Animate
```
idx:690b
__ # pkt sz
69 # pkt-cate
0b # sub-cate [0b: animated, 0a: show only]
dedf0d00 # heroID [entity ID]
ee00 # locX
6e00 # locY
02 # facing direction
02 # state [01: preparing, 02: ready]
04 # act [01: stand, 04: sit, 0b: fight]
0100 # hairCut [girls: >1000]
1127 # gender
00000000 # sep
0200 # icon [girls: >1000]
a4aa # hairColor
00000000 # unk [possible values: ea030000, 24000000, ff03fbde, 0304089a, 07002cd3]
00000000 # unk [possible values: ea030000, 24000000, ff03fbde, 0304c84b, 07002cd3]
1400 # hat
0000 # hat dye
1600 # body
0000 # body dye
0000 # wings
0000 # wings dye
0000 # mask
0000 # mask dye
0200 # tail
0000 # tail dye
3e08 # weapon
0000df7b # weapon effect (RGB-Alpha)
0000 # unk [possible values: 0101, 0202, 0303, 0404, 0505]
30 # player hp (max: 50 [0x30])
00 # unk1
0000 # unk2
0001 # unk3 [!!different from 690b]
0200 # unk4
09370000 # heroID (in Player GUI)
c0adcbb9c0d7b6c82020202020202020 # player name with fixed sz[16], pad with 0x20 (space)
00 # null-term
```
### Spawn without Animate
```
idx:690a
__ # pkt sz
69 # pkt-cate
0a # sub-cate [0a: show only, 0b: animated]
dedf0d00 # heroID [entity ID]
ee00 # locX
6e00 # locY
02 # facing direction
02 # state [01: preparing, 02: ready]
04 # act [01: stand, 04: sit, 0b: fight]
0100 # hairCut [girls: >1000]
1127 # gender
00000000 # sep
0200 # icon [girls: >1000]
a4aa # hairColor
00000000 # unk [possible values: ea030000, 24000000, ff03fbde, 0304089a, 07002cd3]
00000000 # unk [possible values: ea030000, 24000000, ff03fbde, 0304c84b, 07002cd3]
1400 # hat
0000 # hat dye
1600 # body
0000 # body dye
0000 # wings
0000 # wings dye
0000 # mask
0000 # mask dye
0200 # tail
0000 # tail dye
3e08 # weapon
0000df7b # weapon effect (RGB-Alpha)
0000 # unk [possible values: 0101, 0202, 0303, 0404, 0505]
30 # player hp (max: 50 [0x30])
00 # unk
09370000 # heroID (in Player GUI)
c0adcbb9c0d7b6c82020202020202020 # player name with fixed sz[16], pad with 0x20 (space)
00 # null-term
```
### Bottom-Title
```
idx:a214
// title & color of title name, color: "2b433078313462666634602d43"
24 # sz
a2 # pkt-cate
14 # sub-cate [14: ]
89240e00 # heroID
// [type A]
00 # sep [if exists, (type A) it is a formated string | else: type B, direct string]
9fcb1000 # unk
730e0000 # unk
00 # sep
602b433078323766353263602d43 # color [GBK-string] content: "`+C0x27f52c`-C"
64 # last-sep
13270000 # format string [@formatstring.dat] (0x2713:10003 桃李满天下)
// [type B]
1b43b7e7bba8d1a9d4c2 # GBK encoded string (the title in text)
00 # null-term
```
### Ride
```
idx:b9a201
// Update Player State [pkt-cate: b9 sub-cate: a2]
09 # sz
b9 # pkt-cate
a2 # sub-cate
01 # sub-cate2
89240e00 # heroID
01 # act (state) | [1: stand, 2: running, 3: just die, 4: sit, 5: sitWithPet, 6~8: attacking, 9: use skill, A: use skill faster, B: act fight, C: flying in the air (riding 飛氈), D: flying & moving in the air (riding 飛氈), E: not exist, F: sit]
00 # null-term
idx:62??
16 # sz
62 # pkt-cate
89240e00 # heroID
1b00 # ride ID @ info.dat[Item][col:buffdec]
0000 # sep
0000 # model color [0x62b9, 0x1ae8, ...]
0000 # sep
0a00 # wings level [00: None, 0a: 羽, 0b: 翼]
0000 # sep
0030 # wings ID [0x3000: 紅, 0x0841: 黑, 0x6127: 金, 0x]
0000 # sep
00 # null-term
```
### Personnal Signature (Head Message)
```
// entityID sign content------
10 a8 01 89240e00 05b3cfcadbb1bebac5 00 // sign // entityID: 89240e00
// heroID-- playerName------
0f a2 0d 166a0000 cee4c1a6cac0bcd2 00 // realID: 166a0000 | 武力世家
```
### Buff
```
idx:83??
// entity buff
0c # sz
83 # pkt-type
89240e00 # heroID
40d10c00 # skillID @ info.dat[Skill] [840000 师徒buff]
53d10c00 # another skill ID
01 # ? duration
01 # ? duration
00 # null-term
```
### TY-Title
```
idx:a225
// 天元稱號
// formatID, colorCode, rank & level are found in (formatstring.dat)
// formatID : cat: 登峰造极 [0x767f] 30335 "|1|2|3`=C"
// colorCode: cat: 道具描述黄色 [0x767f] 620586 "`+C0xffff00`-C"
// rankID : cat: 登峰造极 [0x7694] 30356 "上仙"
// lvID : cat: 登峰造极 [0x7682] 30338 "三重"
// heroID-- formatID colorCode rankID-- lvID----
1ba225 d7c10d00 00 7f760000 64 2a780900 64 94760000 64 82760000 00 // 上仙。三重
1ba225 972c1200 00 7f760000 64 2e780900 64 8a760000 64 83760000 00 // 武聖。四重
1ba225 bf881400 00 7f760000 64 28780900 64 8b760000 64 80760000 00 // 武神。一重
```
### Player Effects
```
idx:6f??
// $0: effect ID
// $1: unk
// $2: unk
// $3: unk
// $4: animation duration (unit: seconds)
// $5: 0x01: cover player model (front) | 0x02: behind player model (back)
// $6: player once/loop. 0x01: once | 0x02: loop
// heroID-- $0 $1$2$3 $4 $5 $6
0d 6f d7c10d00 70 d10c00 02 01 02 00
0d 6f d7c10d00 6f d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6e d10c00 04 02 02 00
0d 6f d7c10d00 6d d10c00 02 01 02 00
0d 6f d7c10d00 6c d10c00 02 01 02 00
0d 6f d7c10d00 5d d10c00 04 02 02 00
0d 6f d7c10d00 76 d10c00 02 01 02 00
0d 6f d7c10d00 74 d10c00 02 01 02 00
0d 6f d7c10d00 70 d10c00 02 01 02 00
0d 6f d7c10d00 30 5c0c00 04 02 02 00
__ 6f 3a433000 cd bf0400 02 01 02 00
```
#### Known Effects
```
43: reading icon
...
52: little fireworks
53: big big firework
54: big big firework
...
5d: star going up
!! <no effect in between> !!
63: big star star (2代爬蟲 bottom effect)
6c: orange circle
6d: 心心
6e: particle effect
6f: 火花
70: orange mark (騎寵effect)
71: ?? (darker)
72: ?? (lighter)
73: 黃象 (騎寵effect)
74: 落雨 (騎寵effect)
75: (騎寵effect)
76: 雪? (騎寵effect)
77: (騎寵effect)
78: (2代爬蟲 bottom effect)
79: 潛水? (騎寵effect)
cd: 寵物白色光環 (腳底)
```
## Player Location
```
idx:67??
0f # sz
67 # cate
f9d41800 # heroID
31fb # unk
a612 # unk
b800 # X
2900 # Y
35 # facing (ascii)
00
```
## Teleport (Enter Portal)
```
0f67f9d4180031fba612b80029003500
0678f766170000
0678ca54000000
0678df52000000
06787768170000
067814110c0000
idx:3c11
11 # sz
3c1127
6800 # map ID
6800 # map ID
1301 # X
e500 # Y
00 # sep
6800 # map name ID
0000 # sep
00 # null-term
```
## Item Description
```
idx:31??
// upper one 6p 4* +6 (钰风战戒) | itemID: 141100 (0x2272C | 2C2702)
$1------ __ $2------ __ $param1- __ $param2- __ $param3- __ $param4- __
__ 31 2c270200 01 00000000 00 // newline (620824 `N 道具描述(后面无空格))
__ 31 2c270200 01 0b780900 64 2c270200 64 06000000 64 30780900 64 2c780900 00 // (|3^1 `=C|4+$2`=C) $1: itemID $2: 強化數 $3 colorCode $4: 強化ColorCode
__ 31 2c270200 01 09780900 00 // 永綁 (09780900)
__ 31 2c270200 01 0a780900 64 04000000 00 // 星星數
__ 31 2c270200 01 18790900 00 // newline (620824 `N 道具描述(后面无空格))
__ 31 2c270200 01 16780900 00 // itemType [16780900: 戒指]
__ 31 2c270200 02 2c270200 00 // item desc (by itemID)
__ 31 2c270200 01 18790900 00 // newline (620824 `N 道具描述(后面无空格))
__ 31 2c270200 01 48790900 64 27780900 64 64000000 00 // lv Req 100 [red]
__ 31 2c270200 01 41780900 64 78000000 64 ff000000 00 // 耐久 120/255 (耐久: $1 / $2`N)
__ 31 2c270200 01 44780900 64 30780900 73 03000000 2b3235 00 // 精神 +25 [red] | 44780900
__ 31 2c270200 01 46780900 64 30780900 73 03000000 2b3236 00 // 體質 +26 [red] | 46780900
__ 31 2c270200 01 47780900 64 30780900 73 03000000 2b3531 00 // 命中 +51 [red] | 47780900
__ 31 2c270200 01 5e780900 64 30780900 73 05000000 2b33333933 00 // 生命 +3393 [red] | 5e780900
__ 31 2c270200 01 62780900 64 30780900 73 04000000 2b343238 00 // 法力 +428 [red] | 62780900 (|1法力: $2`=C`N)
__ 31 2c270200 01 77780900 64 31780900 73 05000000 2b31372e30 00 // 附加生命 | value: +17.0 [purple] | 77780900
__ 31 2c270200 01 78780900 64 31780900 73 05000000 2b31372e30 00 // 附加法力 | value: +17.0 [purple] | 78780900
__ 31 2c270200 01 7d780900 64 91e10800 64 01000000 00 // 黑暗恐懼 Lv.1 - 91e10800 | 7d780900
__ 31 2c270200 01 7e780900 73 02000000 3037 73 02000000 3030 00 // 洞洞數 07 (可用) 00 (已入) | 7e780900 ([4:H$1:U$2]`N)
__ 31 2c270200 01 8c780900 64 59010000 00 // 賣出價 (345) | 8c780900
__ 31 2c270200 01 97780900 00 // itemQuality [97780900: 六品裝備] (`+C0xffff00`-C[六品装备]`=C`N)
__ 31 2c270200 01 9b780900 73 04000000 cea8d2bb 00 // maker name | 9b780900 (`N`+C0xffff00`-C[製作者:^1]`=C`N)
__ 31 2c270200 01 ffffffff 00 // tag end (item desc)
```
## Alert Message
```
idx:2102
```