diff options
author | FlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-12-05 13:23:07 +0000 |
---|---|---|
committer | FlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-12-05 13:23:07 +0000 |
commit | 288490094a7fe9167747dc78d416940759a31197 (patch) | |
tree | 53dc4f5c2375f4b688b53ca8841630ddec5e1f88 /doc/inter_server_packet.txt | |
parent | 8ec1c47aed09c90343949d57c92760ba84738a46 (diff) | |
download | hercules-288490094a7fe9167747dc78d416940759a31197.tar.gz hercules-288490094a7fe9167747dc78d416940759a31197.tar.bz2 hercules-288490094a7fe9167747dc78d416940759a31197.tar.xz hercules-288490094a7fe9167747dc78d416940759a31197.zip |
- Massive EOL normalization & 'svn:eol-style native' flag setting for all txt/conf/h/c files.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9410 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'doc/inter_server_packet.txt')
-rw-r--r-- | doc/inter_server_packet.txt | 408 |
1 files changed, 204 insertions, 204 deletions
diff --git a/doc/inter_server_packet.txt b/doc/inter_server_packet.txt index a88694aa8..253280326 100644 --- a/doc/inter_server_packet.txt +++ b/doc/inter_server_packet.txt @@ -1,204 +1,204 @@ -S map鯖=>inter鯖
-R inter鯖=>map鯖
-
-パケット長リスト
-R 3800-388f
- -1,-1,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 35,-1,11,15, 34,29, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0,
- 10,-1,15, 0, 79,17, 7,-1, 0,-1,-1,-1, 14,67,186,-1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-S 3000-308f
- -1,-1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 72, 6,52,14, 10,29, 6,-1, 34, 0, 0, 0, 0, 0, 0, 0,
- -1, 6,-1, 0, 55,17, 6,-1, 14,-1,-1,-1, 14,19,186,-1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 48,14,-1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-
-
-S 3000 <len>.w <message>.?B
- GMメッセージ送信要求
-R 3800 <len>.w <message>.?B
- GMメッセージ
-S 3001 <len>.w <src-nick>.24B <dst-nick>.24B <message>.?B
- Wis送信要求
-R 3801 <len>.w <wis-id>.l <src-nick>.24B <dst-nick>.24B <message>.?B
- Wisデータ受信
- wis-id=inter鯖内部のWis-id:map鯖では3002で送信するためだけに使う
-S 3002 <wis-id>.l <flag>.B
- このmap鯖でのWisの送信結果
- flag=0 送信完了(このmap鯖にいたので、送信した)
- flag=1 送信失敗(このmap鯖にはそんな人いません)
- flag=2 送信終了(このmap鯖にいるが、ignoreされている)
-R 3802 <src-nick>.24B <flag>.B
- 全map鯖でのWis送信結果
- flag=0 送信完了
- flag=1 送信失敗(どのmap鯖にもそんな人いません)
- flag=2 送信失敗(ignoreされた)
-S 3010 <account_id>.l
- 倉庫データ要求
-R 3810 <len>.w <account_id>.l <storage>.?B
- 倉庫データ受信
-S 3011 <len>.w <account_id>.l <storage>.?B
- 倉庫データ送信&保存要求
-R 3811 <account_id>.l <flag>.b
- 倉庫データ保存終了
- flag=0 成功(現在の仕様では必ず0なので、返信を待たなくてもいい)
-
-S 3020 <account_id>.l <party_name>.24B <nick_name>.24B <map_name>.16B <level>.w
- パーティ作成要求
-R 3820 <account_id>.l <fail>.B <party_id>.l <party_name>.24B
- パーティ成功可否(自分のマップ鯖のみ)
- fail=00 パーティ作成成功
- fail=01 失敗(party_id,pary_nameはゴミ)
-S 3021 <party_id>.l
- パーティ情報要求
-R 3821 <len>.w <struct party>.?B
- (struct partyの最初4バイトはparty_id)
- len=8 パーティは存在しない(受信したら該当キャラを未所属に変更する)
- len>8 パーティ情報(受信したらクライアントに送ること)
- (要求してきたマップ鯖へ)
-S 3022 <party_id>.l <account_id>.l <nick>.24B <map_name>.16B <level>.w
- パーティ追加要求
-R 3822 <party_id>.l <account_id>.l <fail>.B
- パーティ追加通知(要求してきたマップ鯖へ)
- fail=00で成功、fail=01で失敗
- (成功時はこの直後に全鯖にパーティ情報が送られる)
-S 3023 <party_id>.l <account_id>.l <exp>.w <item>.w
- パーティ設定変更要求
-R 3823 <party_id>.l <account_id>.l <exp>.w <item>.w <fail>.B
- パーティ設定変更通知(成功の場合全マップ鯖へ通知)
- fail=0x00 パーティ設定変更完了
- fail=0x01 expの変更失敗
- fail=0x10 itemの変更失敗
-S 3024 <party_id>.l <account_id>.l
- パーティ脱退要求
-R 3824 <party_id>.l <account_id>.l <nick>.24B
- パーティ脱退通知(全マップ鯖へ)
-S 3025 <party_id>.l <account_id>.l <map_name>.16B <online>.B <level>.w
- パーティマップ更新/オンライン要求
-R 3825 <party_id>.l <account_id>.l <map_name>.16B <online>.B <level>.w
- パーティマップ更新通知(全マップ鯖へ)
-S 3026 <party_id>.l
- パーティ解散要求(送られることはないと思われる)
-R 3026 <party_id>.l <fail>.B
- パーティ解散
- fail=00 パーティは解散された(今のところ必ず00)
- (map鯖内の不要データ削除のためだけに使われる)
-S 3027 <len>.w <party_id>.l <account_id>.l <message>.?B
- パーティ内発言要求
-R 3827 <len>.w <party_id>.l <account_id>.l <message>.?B
- パーティ内発言通知(全マップ鯖へ)
-S 3028 <party_id>.l <account_id>.l <nick>.24B
- 別パーティに所属していないかチェック<party_id>は本来の所属
-
-
-S 3030 <len>.w <account_id>.l <guild_name>.24B <struct guild_member>.?B
- ギルド作成要求
-R 3830 <account_id>.l <guild_id>.l
- ギルド作成可否(guild_id=0で失敗)
-S 3031 <guild_id>.l
- ギルド情報要求
-R 3831 <len>.w <struct guild>.?B
- ギルド情報
- len=8 ギルドは存在しない
- len>8 ギルド情報
-S 3032 <len>.w <guild_id>.l <struct guild_member>.?B
- ギルドメンバ追加要求
-R 3832 <guild_id>.l <account_id>.l <charactor_id>.l <fail>.B
- ギルド追加メンバ通知
- fail=0で成功,1で失敗
-S 3034 <guild_id>.l <account_id>.l <charactor_id>.l <flag>.B <mes>.40B
- ギルド脱退/追放要求
- flag=0 脱退 / 1 追放
-R 3834 <guild_id>.l <account_id>.l <charactor_id>.l <flag>.B <mes>.40B <nick>.24B
- ギルド脱退/追放通知
-S 3035 <guild_id>.l <account_id>.l <charactor_id>.l <online>.B <lv>.w <class>.w
- ギルドメンバ情報更新要求
-R 3835 <guild_id>.l <account_id>.l <charactor_id>.l <online>.B <lv>.w <class>.w
- ギルドメンバ情報更新通知
-S 3036 <guild_id>.l
- ギルド解散要求
-R 3836 <guild_id>.l <fail>.B
- ギルド解散通知
- flag=00 解散成功 / 01 失敗
-S 3037 <len>.w <guild_id>.l <account_id>.l <message>.?B
- ギルド発言要求
-R 3837 <len>.w <guild_id>.l <account_id>.l <message>.?B
- ギルド発言通知
-S 3038 <guild_id>.l <account_id>.l <charactor_id>.l
- 別ギルドに所属していないかチェック
-S 3039 <len>.w <guild_id>.l <type>.w <data>.?B
- 各種基本情報更新要求
-R 3839 <len>.w <guild_id>.l <type>.w <data>.?B
- 各種基本情報更新通知
-S 303A <len>.w <guild_id>.l <account_id>.l <char_id>.l <type>.w <data>.?B
- 各種ギルドメンバ情報更新要求
-R 383A <len>.w <guild_id>.l <account_id>.l <char_id>.l <type>.w <data>.?B
- 各種ギルドメンバ情報更新通知
-S 303B <len>.w <guild_id>.l <position>.l <struct guild_position>.?B
- ギルド役職変更要求
-R 383B <len>.w <guild_id>.l <position>.l <struct guild_position>.?B
- ギルド役職変更通知
-S 303C <guild_id>.l <skill_num>.l <account_id>.l
- ギルドスキル割り振り
-R 383C <guild_id>.l <skill_num>.l <account_id>.l
- ギルドスキル割り振り(skill_num==0で失敗)
-S 303D <guild_id1>.l <guild_id2>.l <account_id1>.l <account_id2>.l <flag>.B
- ギルド同盟/敵対要求
- flag=0 同盟 / 1 敵対 / 8 同盟解除 / 9 敵対解除
-R 383D <guild_id1>.l <guild_id2>.l <account_id1>.l <account_id2>.l <flag>.B <name1>.24B <name2>.24B
- ギルド同盟/敵対通知
- flag=0 同盟 / 1 敵対
- flag=0x10 同盟失敗 / 0x11 敵対失敗
-S 303E <guild_id>.l <message1>.60B <message2>.120B
- ギルド告知設定要求
-R 383E <guild_id>.l <message1>.60B <message2>.120B
- ギルド告知設定通知
-S 303F <len>.w <guild_id>.l <dummy>.l <emblem_data>.?B
- ギルドエンブレム変更要求 dummyは0固定
-R 383F <len>.w <guild_id>.l <dummy>.l <emblem_data>.?B
- ギルドエンブレム変更通知
-(以下、ギルド系追加予定)
-
-S 3080 <account_id>.l <char_id>.I <pet_type>.w <pet_lv>.w <pet_egg_id>.w
- <pet_equip>.w <pet_intimate>.w <pet_hungry>.w <rename_flag>.B <incuvate>.B
- <pet_name>.24B
- ペット生成要求
-R 3880 <account_id>.l <fail>.B <pet_id>.l
- ペット生成成功可否
- fail=00 ペット生成成功
- fail=01 失敗(pet_idはゴミ)
-S 3081 <account_id>.l <char_id>.I <pet_id>.l
- ペットデータ要求
-R 3881 <len>.w <account_id>.l <fail>.B <struct s_pet>.?B
- ペットデータ受信
- fail=00 ペットデータ転送
- fail=01 ペットのデータがないかもしくはaccount_idかchar_idが合わないので
- 失敗(s_petはゴミ)
-S 3082 <len>.w <account_id>.l <struct s_pet>.?B
- ペットデータ送信&保存要求
-R 3882 <account_id>.l <flag>.b
- ペットデータ保存終了
- flag=0 成功(現在の仕様ではメモリ不足以外には必ず0なので、返信を
- 待たなくてもいい)
- flag=1 失敗
-S 3083 <pet_id>.l
- ペットデータ削除要求
-R 3883 <flag>.b
- ペットデータ削除終了
- flag=0 成功(現在の仕様では既にデータがいない場合以外は必ず0なので、
- 返信を待たなくてもいい)
- flag=1 失敗(pet_idに当たるデータがない場合の物ですが既にデータが
- いないと言うことは削除する必要がないことにもなりますので
- 意味はありません)
-
+S map鯖=>inter鯖 +R inter鯖=>map鯖 + +パケット長リスト +R 3800-388f + -1,-1,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35,-1,11,15, 34,29, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0, + 10,-1,15, 0, 79,17, 7,-1, 0,-1,-1,-1, 14,67,186,-1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 11,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +S 3000-308f + -1,-1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 6,52,14, 10,29, 6,-1, 34, 0, 0, 0, 0, 0, 0, 0, + -1, 6,-1, 0, 55,17, 6,-1, 14,-1,-1,-1, 14,19,186,-1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48,14,-1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + + +S 3000 <len>.w <message>.?B + GMメッセージ送信要求 +R 3800 <len>.w <message>.?B + GMメッセージ +S 3001 <len>.w <src-nick>.24B <dst-nick>.24B <message>.?B + Wis送信要求 +R 3801 <len>.w <wis-id>.l <src-nick>.24B <dst-nick>.24B <message>.?B + Wisデータ受信 + wis-id=inter鯖内部のWis-id:map鯖では3002で送信するためだけに使う +S 3002 <wis-id>.l <flag>.B + このmap鯖でのWisの送信結果 + flag=0 送信完了(このmap鯖にいたので、送信した) + flag=1 送信失敗(このmap鯖にはそんな人いません) + flag=2 送信終了(このmap鯖にいるが、ignoreされている) +R 3802 <src-nick>.24B <flag>.B + 全map鯖でのWis送信結果 + flag=0 送信完了 + flag=1 送信失敗(どのmap鯖にもそんな人いません) + flag=2 送信失敗(ignoreされた) +S 3010 <account_id>.l + 倉庫データ要求 +R 3810 <len>.w <account_id>.l <storage>.?B + 倉庫データ受信 +S 3011 <len>.w <account_id>.l <storage>.?B + 倉庫データ送信&保存要求 +R 3811 <account_id>.l <flag>.b + 倉庫データ保存終了 + flag=0 成功(現在の仕様では必ず0なので、返信を待たなくてもいい) + +S 3020 <account_id>.l <party_name>.24B <nick_name>.24B <map_name>.16B <level>.w + パーティ作成要求 +R 3820 <account_id>.l <fail>.B <party_id>.l <party_name>.24B + パーティ成功可否(自分のマップ鯖のみ) + fail=00 パーティ作成成功 + fail=01 失敗(party_id,pary_nameはゴミ) +S 3021 <party_id>.l + パーティ情報要求 +R 3821 <len>.w <struct party>.?B + (struct partyの最初4バイトはparty_id) + len=8 パーティは存在しない(受信したら該当キャラを未所属に変更する) + len>8 パーティ情報(受信したらクライアントに送ること) + (要求してきたマップ鯖へ) +S 3022 <party_id>.l <account_id>.l <nick>.24B <map_name>.16B <level>.w + パーティ追加要求 +R 3822 <party_id>.l <account_id>.l <fail>.B + パーティ追加通知(要求してきたマップ鯖へ) + fail=00で成功、fail=01で失敗 + (成功時はこの直後に全鯖にパーティ情報が送られる) +S 3023 <party_id>.l <account_id>.l <exp>.w <item>.w + パーティ設定変更要求 +R 3823 <party_id>.l <account_id>.l <exp>.w <item>.w <fail>.B + パーティ設定変更通知(成功の場合全マップ鯖へ通知) + fail=0x00 パーティ設定変更完了 + fail=0x01 expの変更失敗 + fail=0x10 itemの変更失敗 +S 3024 <party_id>.l <account_id>.l + パーティ脱退要求 +R 3824 <party_id>.l <account_id>.l <nick>.24B + パーティ脱退通知(全マップ鯖へ) +S 3025 <party_id>.l <account_id>.l <map_name>.16B <online>.B <level>.w + パーティマップ更新/オンライン要求 +R 3825 <party_id>.l <account_id>.l <map_name>.16B <online>.B <level>.w + パーティマップ更新通知(全マップ鯖へ) +S 3026 <party_id>.l + パーティ解散要求(送られることはないと思われる) +R 3026 <party_id>.l <fail>.B + パーティ解散 + fail=00 パーティは解散された(今のところ必ず00) + (map鯖内の不要データ削除のためだけに使われる) +S 3027 <len>.w <party_id>.l <account_id>.l <message>.?B + パーティ内発言要求 +R 3827 <len>.w <party_id>.l <account_id>.l <message>.?B + パーティ内発言通知(全マップ鯖へ) +S 3028 <party_id>.l <account_id>.l <nick>.24B + 別パーティに所属していないかチェック<party_id>は本来の所属 + + +S 3030 <len>.w <account_id>.l <guild_name>.24B <struct guild_member>.?B + ギルド作成要求 +R 3830 <account_id>.l <guild_id>.l + ギルド作成可否(guild_id=0で失敗) +S 3031 <guild_id>.l + ギルド情報要求 +R 3831 <len>.w <struct guild>.?B + ギルド情報 + len=8 ギルドは存在しない + len>8 ギルド情報 +S 3032 <len>.w <guild_id>.l <struct guild_member>.?B + ギルドメンバ追加要求 +R 3832 <guild_id>.l <account_id>.l <charactor_id>.l <fail>.B + ギルド追加メンバ通知 + fail=0で成功,1で失敗 +S 3034 <guild_id>.l <account_id>.l <charactor_id>.l <flag>.B <mes>.40B + ギルド脱退/追放要求 + flag=0 脱退 / 1 追放 +R 3834 <guild_id>.l <account_id>.l <charactor_id>.l <flag>.B <mes>.40B <nick>.24B + ギルド脱退/追放通知 +S 3035 <guild_id>.l <account_id>.l <charactor_id>.l <online>.B <lv>.w <class>.w + ギルドメンバ情報更新要求 +R 3835 <guild_id>.l <account_id>.l <charactor_id>.l <online>.B <lv>.w <class>.w + ギルドメンバ情報更新通知 +S 3036 <guild_id>.l + ギルド解散要求 +R 3836 <guild_id>.l <fail>.B + ギルド解散通知 + flag=00 解散成功 / 01 失敗 +S 3037 <len>.w <guild_id>.l <account_id>.l <message>.?B + ギルド発言要求 +R 3837 <len>.w <guild_id>.l <account_id>.l <message>.?B + ギルド発言通知 +S 3038 <guild_id>.l <account_id>.l <charactor_id>.l + 別ギルドに所属していないかチェック +S 3039 <len>.w <guild_id>.l <type>.w <data>.?B + 各種基本情報更新要求 +R 3839 <len>.w <guild_id>.l <type>.w <data>.?B + 各種基本情報更新通知 +S 303A <len>.w <guild_id>.l <account_id>.l <char_id>.l <type>.w <data>.?B + 各種ギルドメンバ情報更新要求 +R 383A <len>.w <guild_id>.l <account_id>.l <char_id>.l <type>.w <data>.?B + 各種ギルドメンバ情報更新通知 +S 303B <len>.w <guild_id>.l <position>.l <struct guild_position>.?B + ギルド役職変更要求 +R 383B <len>.w <guild_id>.l <position>.l <struct guild_position>.?B + ギルド役職変更通知 +S 303C <guild_id>.l <skill_num>.l <account_id>.l + ギルドスキル割り振り +R 383C <guild_id>.l <skill_num>.l <account_id>.l + ギルドスキル割り振り(skill_num==0で失敗) +S 303D <guild_id1>.l <guild_id2>.l <account_id1>.l <account_id2>.l <flag>.B + ギルド同盟/敵対要求 + flag=0 同盟 / 1 敵対 / 8 同盟解除 / 9 敵対解除 +R 383D <guild_id1>.l <guild_id2>.l <account_id1>.l <account_id2>.l <flag>.B <name1>.24B <name2>.24B + ギルド同盟/敵対通知 + flag=0 同盟 / 1 敵対 + flag=0x10 同盟失敗 / 0x11 敵対失敗 +S 303E <guild_id>.l <message1>.60B <message2>.120B + ギルド告知設定要求 +R 383E <guild_id>.l <message1>.60B <message2>.120B + ギルド告知設定通知 +S 303F <len>.w <guild_id>.l <dummy>.l <emblem_data>.?B + ギルドエンブレム変更要求 dummyは0固定 +R 383F <len>.w <guild_id>.l <dummy>.l <emblem_data>.?B + ギルドエンブレム変更通知 +(以下、ギルド系追加予定) + +S 3080 <account_id>.l <char_id>.I <pet_type>.w <pet_lv>.w <pet_egg_id>.w + <pet_equip>.w <pet_intimate>.w <pet_hungry>.w <rename_flag>.B <incuvate>.B + <pet_name>.24B + ペット生成要求 +R 3880 <account_id>.l <fail>.B <pet_id>.l + ペット生成成功可否 + fail=00 ペット生成成功 + fail=01 失敗(pet_idはゴミ) +S 3081 <account_id>.l <char_id>.I <pet_id>.l + ペットデータ要求 +R 3881 <len>.w <account_id>.l <fail>.B <struct s_pet>.?B + ペットデータ受信 + fail=00 ペットデータ転送 + fail=01 ペットのデータがないかもしくはaccount_idかchar_idが合わないので + 失敗(s_petはゴミ) +S 3082 <len>.w <account_id>.l <struct s_pet>.?B + ペットデータ送信&保存要求 +R 3882 <account_id>.l <flag>.b + ペットデータ保存終了 + flag=0 成功(現在の仕様ではメモリ不足以外には必ず0なので、返信を + 待たなくてもいい) + flag=1 失敗 +S 3083 <pet_id>.l + ペットデータ削除要求 +R 3883 <flag>.b + ペットデータ削除終了 + flag=0 成功(現在の仕様では既にデータがいない場合以外は必ず0なので、 + 返信を待たなくてもいい) + flag=1 失敗(pet_idに当たるデータがない場合の物ですが既にデータが + いないと言うことは削除する必要がないことにもなりますので + 意味はありません) + |