Skip to content

Commit 1575429

Browse files
committed
Saving the character's coordinates. Thanks Atelo.
1 parent 853245f commit 1575429

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1583
-1260
lines changed

ArcheAge/ArcheAge Game Server.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
<SpecificVersion>False</SpecificVersion>
6363
<HintPath>..\LocalCommons\bin\Debug\mysql.data.dll</HintPath>
6464
</Reference>
65+
<Reference Include="PresentationFramework" />
6566
<Reference Include="protobuf-net">
6667
<HintPath>..\LocalCommons\bin\Debug\protobuf-net.dll</HintPath>
6768
</Reference>
@@ -123,6 +124,8 @@
123124
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCCharacterListPacket_0x0079.cs" />
124125
<Compile Include="ArcheAge\Network\Packets\Server\NP_Packet_quit_0x01F1.cs" />
125126
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCChatMessagePacket_0x00C6.cs" />
127+
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCAccountInfoPacket_0x01B7.cs" />
128+
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCCooldownsPacket_0x0045.cs" />
126129
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCUnitPointsPacket_0x01B2.cs" />
127130
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCUnitMovementsPacket_0x0066.cs" />
128131
<Compile Include="ArcheAge\Network\Packets\Server\NP_SCResultRestrictCheck_0x01C3.cs" />
@@ -132,6 +135,8 @@
132135
<Compile Include="ArcheAge\Network\Packets\Server\NP_Pong_0x0013.cs" />
133136
<Compile Include="ArcheAge\Network\Packets\Server\NP_X2EnterWorldResponsePacket_0x0000.cs" />
134137
<Compile Include="ArcheAge\Network\Packets.cs" />
138+
<Compile Include="ArcheAge\Network\Packets\Server\Utils\CharacterInfo.cs" />
139+
<Compile Include="ArcheAge\Network\Packets\Server\Utils\ItemInfo.cs" />
135140
<Compile Include="ArcheAge\Structuring\Account.cs" />
136141
<Compile Include="ArcheAge\Structuring\Character.cs" />
137142
<Compile Include="ArcheAge\Structuring\EventDefinitions.cs" />

ArcheAge/ArcheAge/Holders/CharacterHolder.cs

Lines changed: 230 additions & 327 deletions
Large diffs are not rendered by default.

ArcheAge/ArcheAge/Network/DelegateList.cs

Lines changed: 95 additions & 44 deletions
Large diffs are not rendered by default.

ArcheAge/ArcheAge/Network/Packets/Server/NP_DetailedTimeOfDayPacket_0x00EA.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ public NP_DetailedTimeOfDayPacket_0x00EA(ClientConnection net) : base(01, 0x00EA
1212
//DetailedTimeOfDayPacket
1313
//1400 DD01 EA00 4871B241 D171DA3A 00000000 0000C041
1414
ns.Write((float)DateTime.Now.Hour); //DateTime.UtcNow.Hour); //time f (âðåìÿ ñóòîê íà ñåðâåðå)(Environment.TickCount & Int32.MaxValue)
15-
ns.Write((float) 0.001667); //speed f 0.001666600001044571399688720703125
16-
ns.Write((float) 0.0); //start f
17-
ns.Write((float) 24.0); //end f
15+
ns.Write((float)0.001666600001044571399688720703125f); //speed f
16+
ns.Write((float) 0.0f); //start f
17+
ns.Write((float) 24.0f); //end f
1818
}
1919
}
2020
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using ArcheAge.ArcheAge.Network.Connections;
3+
using LocalCommons.Network;
4+
using LocalCommons.Utilities;
5+
6+
namespace ArcheAge.ArcheAge.Network
7+
{
8+
public sealed class NP_SCAccountInfoPacket_0x01B7 : NetPacket
9+
{
10+
public NP_SCAccountInfoPacket_0x01B7(ClientConnection net) : base(01, 0x01B7)
11+
{
12+
//1.0.1406
13+
//SCAccountInfoPacket
14+
ns.Write((int)0x01); //payMethod d
15+
ns.Write((int)0x01); //payLocation d
16+
17+
long payStart = DateTime.UtcNow.Ticks;
18+
ns.Write((long)payStart); //payStart Q
19+
20+
long payEnd = DateTime.UtcNow.Ticks + 1000000;
21+
ns.Write((long)payEnd); //payEnd Q
22+
}
23+
}
24+
}

ArcheAge/ArcheAge/Network/Packets/Server/NP_SCCharacterListPacket_0x0039.cs

Lines changed: 17 additions & 221 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,15 @@
11
using ArcheAge.ArcheAge.Holders;
22
using ArcheAge.ArcheAge.Network.Connections;
3+
using ArcheAge.ArcheAge.Network.Packets.Server.Utils;
34
using ArcheAge.ArcheAge.Structuring;
45
using LocalCommons.Network;
56
using System.Collections.Generic;
7+
using LocalCommons.Utilities;
68

7-
namespace ArcheAge.ArcheAge.Network
9+
namespace ArcheAge.ArcheAge.Network.Packets.Server
810
{
911
public sealed class NP_CharacterListPacket_0x0039 : NetPacket
1012
{
11-
/*private void WriteItem(int itemId)
12-
{
13-
ns.Write((int)itemId);
14-
if (itemId <= 0)
15-
{
16-
return;
17-
}
18-
19-
ns.Write((int)0x01);
20-
for (int i = 0; i < 6; i++)
21-
{
22-
ns.Write((byte)0x00);
23-
}
24-
25-
ns.Write((byte)0x01);
26-
for (int i = 0; i < 3; i++)
27-
{
28-
ns.Write((byte)0x00);
29-
}
30-
31-
ns.Write((byte)0x01);
32-
for (int i = 0; i < 4; i++)
33-
{
34-
ns.Write((byte)0x00);
35-
}
36-
37-
ns.Write((byte)0x55);
38-
for (int i = 0; i < 62; i++)
39-
{
40-
ns.Write((byte)0x00);
41-
}
42-
43-
ns.Write((byte)0x0B);
44-
for (int i = 0; i < 16; i++)
45-
{
46-
ns.Write((byte)0x00);
47-
}
48-
}*/
49-
private void WriteItem(int itemId)
50-
{
51-
ns.Write((int)itemId);
52-
switch (itemId)
53-
{
54-
case 0:
55-
break;
56-
default:
57-
ns.Write((long)Program.ObjectUid.Next()); //id[1] Q //TODO: сделать у вещей постоянные UID
58-
ns.Write((byte)0); //type[1] c
59-
ns.Write((byte)0); //flags[1] c
60-
ns.Write((int)0x01); //stackSize[1] d
61-
byte detailType = 1;
62-
ns.Write((byte)detailType); //detailType c
63-
switch (detailType)
64-
{
65-
case 0:
66-
break;
67-
case 1:
68-
ns.WriteHex("000000005500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); //detail 51 b
69-
break;
70-
case 2:
71-
ns.WriteHex("0000000000000000000000000000000000000000000000000000000000"); //detail 29 b
72-
break;
73-
case 3:
74-
ns.WriteHex("000000000000"); //detail 6 b
75-
break;
76-
case 4:
77-
ns.WriteHex("000000000000000000"); //detail 9 b
78-
break;
79-
case 5:
80-
ns.Write((long)0); //type d
81-
ns.Write((long)0); //x Q
82-
ns.Write((long)0); //y Q
83-
ns.Write((float)0); //z f
84-
break;
85-
case 6:
86-
ns.WriteHex("00000000000000000000000000000000"); //detail 16 b
87-
break;
88-
case 7:
89-
ns.WriteHex("00000000000000000000000000000000"); //detail 16 b
90-
break;
91-
case 8:
92-
ns.WriteHex("0000000000000000"); //detail 8 b
93-
break;
94-
}
95-
96-
ns.Write((long)0); //creationTime[1] Q
97-
ns.Write((int)0); //lifespanMins[1] d
98-
ns.Write((int)0); //type[1] d
99-
ns.Write((byte)0x0b); //worldId c"
100-
ns.Write((long)0); //unsecureDateTime Q
101-
ns.Write((long)0); //unpackDateTime Q
102-
break;
103-
}
104-
}
105-
10613
/// <summary>
10714
/// пакет для входа в Лобби
10815
/// CharacterListPacket01_0x0039
@@ -137,7 +44,7 @@ public NP_CharacterListPacket_0x0039(ClientConnection net, int num, int last) :
13744
CharacterHolder.LoadWeaponsData(chr, chr.NewbieWeaponPackId); //дополнительно прочитать Weapon,WeaponExtra,WeaponRanged,Instrument из таблицы equip_pack_weapons
13845
CharacterHolder.LoadCharacterBodyCoord(chr, chr.CharRace, chr.CharGender); //дополнительно прочитать body, x, y, z из таблицы charactermodel
13946
CharacterHolder.LoadZoneFaction(chr, chr.CharRace, chr.CharGender); //дополнительно прочитать FactionId,StartingZoneId из таблицы characters
140-
47+
14148
ns.Write((int)chr.CharacterId); //type d
14249
ns.WriteUTF8Fixed(chr.CharName, chr.CharName.Length); //name S
14350
ns.Write((byte)chr.CharRace); //CharRace c
@@ -152,139 +59,28 @@ public NP_CharacterListPacket_0x0039(ClientConnection net, int num, int last) :
15259
//-----------------------------
15360
ns.Write((int)0x00); //type d
15461
ns.Write((int)0x00); //family d
155-
//------------------------------------
156-
// инвентарь персонажа
157-
//------------------------------------
158-
// 1.костюм
159-
// 2.Шлем (ткань, кожа, латы)
160-
// 3.Нагрудник (ткань, кожа, латы)
161-
// 4.Пояс (ткань, кожа, латы)
162-
// 5.Наручи (ткань, кожа, латы)
163-
// 6.Перчатки (ткань, кожа, латы)
164-
// 7.Накидка
165-
// 8.Поножи (ткань, кожа, латы)
166-
// 9.Обувь (ткань, кожа, латы)
167-
//10.Ожерелье
168-
//11.Серьга
169-
//12.Серьга
170-
//13.Кольцо
171-
//14.Кольцо
172-
//15.Оружие
173-
//16.Дополнительное оружие
174-
//17.Лук
175-
//18.Муз. инструмент (струнный, духовой, ударный)
176-
//19.Груз (глайдер, торговый груз, местный товар)
177-
//for (int i = 0; i < 19; i++)
178-
//{
179-
//equip_slot
180-
WriteItem(chr.Head); //ES_HEAD
181-
WriteItem(0); //ES_NECK
182-
WriteItem(chr.Chest); //ES_CHEST Нагрудник (ткань, кожа, латы) 23387
183-
WriteItem(0); //ES_WAIST
184-
WriteItem(chr.Legs); //ES_LEGS Поножи (ткань, кожа, латы) 23388
185-
WriteItem(chr.Gloves); //ES_HANDS
186-
WriteItem(chr.Feet); //ES_FEET Обувь (ткань, кожа, латы) 23390
187-
WriteItem(0); //ES_ARMS
188-
WriteItem(0); //ES_BACK
189-
WriteItem(0); //ES_EAR_1
190-
WriteItem(0); //ES_EAR_2
191-
WriteItem(0); //ES_FINGER_1
192-
WriteItem(0); //ES_FINGER_2
193-
WriteItem(0); //ES_UNDERSHIRT
194-
WriteItem(0); //ES_UNDERPANTS
195-
WriteItem(chr.Weapon); //ES_MAINHAND Оружие
196-
WriteItem(chr.WeaponExtra); //ES_OFFHAND Дополнительное оружие
197-
WriteItem(chr.WeaponRanged); //ES_RANGED Лук
198-
WriteItem(chr.Instrument); //ES_MUSICAL Муз. инструмент (струнный, духовой, ударный)
199-
//}
200-
//for (int i = 0; i < 7; i++)
201-
//{
202-
ns.Write((int)chr.Type[0]); //type[somehow_special] d 19839 face
203-
ns.Write((int)chr.Type[1]); //type[somehow_special] d 25372 hair_id
204-
ns.Write((int)chr.Type[2]); //type[somehow_special] d
205-
ns.Write((int)chr.Type[3]); //type[somehow_special] d
206-
ns.Write((int)chr.Type[4]); //type[somehow_special] d
207-
208-
ns.Write((int)chr.CharBody); //type[somehow_special] d 539 body
209-
ns.Write((int)chr.Type[6]); //type[somehow_special] d
210-
//}
211-
212-
//for (int i = 0; i < 2; i++)
213-
//{
214-
//equip_slot
215-
WriteItem(0); //ES_BACKPACK
216-
WriteItem(0); //ES_COSPLAY
217-
//}
62+
//<!-- same as in character packets -->
63+
/*
64+
* инвентарь персонажа
65+
*/
66+
CharacterInfo.WriteItemInfo(net, chr);
67+
//<!-- same as in character packets ends-->
21868

21969
//for (int i = 0; i < 3; i++)
22070
//{
22171
ns.Write((byte)chr.Ability[0]); //специализация: 1-FIGHTER нападение, 7-MAGIC волшебство, 6-WILD исцеление,
22272
//10-LOVE преследование, 5-DEATH мистицизм, 8-VOCATION скрытность
22373
ns.Write((byte)chr.Ability[1]); //эффект класса 1
22474
ns.Write((byte)chr.Ability[2]); //эффект класса 2
225-
//}
75+
//}
22676
//position
227-
//ns.WriteHex("00000000A8B7CF03");
228-
ns.Write((int)0);
229-
ns.Write((float) 867.27); //x Q 03cfb7a8 00000000 = 0.0
230-
//ns.WriteHex("000000006090A603");
231-
ns.Write((int)0);
232-
ns.Write((float)779.11); //y Q 03a69060 00000000 =
233-
//ns.WriteHex("EFFC1043");
234-
ns.Write((float)247.8); //z f 4310fcef = 144.988
235-
236-
ns.Write((byte)chr.Ext); //ext c
237-
switch (chr.Ext)
238-
{
239-
case 0:
240-
break;
241-
case 1:
242-
ns.Write((int)chr.Type[7]); //type d
243-
break;
244-
case 2:
245-
ns.Write((int)chr.Type[7]); //type d
246-
ns.Write((int)chr.Type[8]); //type d
247-
ns.Write((int)chr.Type[9]); //type d
248-
break;
249-
default:
250-
ns.Write((int)chr.Type[7]); //type d 4299 hair_color_id
251-
ns.Write((int)chr.Type[8]); //type d 4 skin_color_id
252-
ns.Write((int)chr.Type[9]); //type d 0
253-
ns.Write((int)chr.Type[10]); //type d 0
254-
ns.Write((float)chr.Weight[10]); //weight f 1
255-
ns.Write((float)chr.Scale); //scale f 1
256-
ns.Write((float)chr.Rotate); //rotate f 0
257-
ns.Write((short)chr.MoveX); //moveX h 0
258-
ns.Write((short)chr.MoveY); //moveY h 0
259-
//for (int i = 11; i < 15; i++)
260-
//{
261-
//ns.Write((int)chr.Type[i]); //type d
262-
//ns.Write((float)chr.Weight[i]); //weight f
263-
ns.Write((int)chr.Type[11]); //type d 0 face_fixed_decal_asset_0_id
264-
ns.Write((float)chr.Weight[11]); //weight f 1 face_fixed_decal_asset_0_weight
265-
ns.Write((int)chr.Type[12]); //type d 444 face_fixed_decal_asset_1_id
266-
ns.Write((float)chr.Weight[12]); //weight f 1 face_fixed_decal_asset_1_weight
267-
ns.Write((int)chr.Type[13]); //type d 170 face_fixed_decal_asset_2_id
268-
ns.Write((float)chr.Weight[13]); //weight f 1 face_fixed_decal_asset_2_weight)
269-
ns.Write((int)chr.Type[14]); //type d 0 face_fixed_decal_asset_3_id
270-
ns.Write((float)chr.Weight[14]); //weight f 0.71 face_fixed_decal_asset_3_weight
271-
//}
77+
ns.Write((long)Helpers.ConvertLongX(chr.Position.X)); //x Q
78+
ns.Write((long)Helpers.ConvertLongY(chr.Position.Y)); //y Q
79+
ns.Write((float)chr.Position.Z); //z f
27280

273-
ns.Write((int)chr.Type[15]); //type d 0
274-
ns.Write((int)chr.Type[16]); //type d 0 face_normal_map_id
275-
ns.Write((int)chr.Type[17]); //type d 0
276-
ns.Write((float)chr.Weight[17]); //weight f 1
277-
ns.Write((int)chr.Lip); //lip d 0
278-
ns.Write((int)chr.LeftPupil); //leftPupil d left_pupil_color
279-
ns.Write((int)chr.RightPupil); //rightPupil d right_pupil_color
280-
ns.Write((int)chr.Eyebrow); //eyebrow d eyebrow_color
281-
ns.Write((int)chr.Decor); //decor d deco_color
282-
//следующая инструкция пишет: len.stringHex
283-
//---ns.Write((short)0x00); //modifiers_len h
284-
string subString = chr.Modifiers.Substring(0, 256); //надо отрезать в конце два символа \0\0
285-
ns.WriteHex(subString, subString.Length); //modifiers b"
286-
break;
287-
}
81+
//<!-- same as in character packets (2) -->
82+
CharacterInfo.WriteStaticData(net, chr);
83+
//<!-- same as in character packets (2) ends -->
28884

28985
ns.Write((short)0x36); //laborPower h //очки работы = 5000
29086
ns.Write((long)0x532F427F); //lastLaborPowerModified Q

ArcheAge/ArcheAge/Network/Packets/Server/NP_SCCharacterListPacket_0x0079.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using ArcheAge.ArcheAge.Structuring;
44
using LocalCommons.Network;
55
using System.Collections.Generic;
6+
using LocalCommons.Utilities;
67

78
namespace ArcheAge.ArcheAge.Network
89
{
@@ -143,6 +144,11 @@ public NP_0x05_CharacterListPacket_0x0079(ClientConnection net, int num, int las
143144
ns.Write((long)0x0007045E3D800000); //x q
144145
ns.Write((long)0x0021F96715C40000); //y q
145146
ns.Write((int)0x42CFA1CB); //z d
147+
148+
ns.Write(Helpers.ConvertX(net.CurrentAccount.Character.Position.X), 0, 3);
149+
ns.Write(Helpers.ConvertY(net.CurrentAccount.Character.Position.Y), 0, 3);
150+
ns.Write(Helpers.ConvertZ(net.CurrentAccount.Character.Position.Z), 0, 3);
151+
146152
ns.Write((byte)chr.Ext); //ext c
147153
switch (chr.Ext)
148154
{

0 commit comments

Comments
 (0)