@@ -7,7 +7,7 @@ namespace OXGaming.TibiaAPI.Network.ServerPackets
77{
88 public class CreatureUpdate : ServerPacket
99 {
10- public Creature OutdatedCreature { get ; set ; }
10+ public Creature Creature { get ; set ; }
1111
1212 public uint CreatureId { get ; set ; }
1313
@@ -25,44 +25,90 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
2525 {
2626 CreatureId = message . ReadUInt32 ( ) ;
2727 Type = message . ReadByte ( ) ;
28- if ( Type == 0x00 ) // Outdated Creature
28+ if ( Type == 0x00 )
2929 {
3030 var id = message . ReadUInt16 ( ) ;
31- if ( id == ( ushort ) CreatureInstanceType . OutdatedCreature )
31+ if ( id == ( ushort ) CreatureInstanceType . UnknownCreature )
3232 {
33+ var removeCreatureId = message . ReadUInt32 ( ) ;
3334 var creatureId = message . ReadUInt32 ( ) ;
34- OutdatedCreature = Client . CreatureStorage . GetCreature ( creatureId ) ;
35- if ( OutdatedCreature == null )
35+
36+ Creature = ( creatureId == Client . Player . Id ) ? Client . Player : new Creature ( creatureId ) ;
37+ Creature . RemoveCreatureId = removeCreatureId ;
38+ Creature . Type = ( Constants . CreatureType ) message . ReadByte ( ) ;
39+ Creature . InstanceType = ( CreatureInstanceType ) id ;
40+ Creature = Client . CreatureStorage . ReplaceCreature ( Creature , Creature . RemoveCreatureId ) ;
41+ if ( Creature == null )
42+ {
43+ throw new Exception ( "[NetworkMessage.ReadCreatureInstance] Failed to append creature." ) ;
44+ }
45+
46+ if ( Creature . IsSummon )
47+ {
48+ Creature . SummonerCreatureId = message . ReadUInt32 ( ) ;
49+ }
50+
51+ Creature . Name = message . ReadString ( ) ;
52+ Creature . HealthPercent = message . ReadByte ( ) ;
53+ Creature . Direction = ( Direction ) message . ReadByte ( ) ;
54+ Creature . Outfit = message . ReadCreatureOutfit ( ) ;
55+ Creature . Mount = message . ReadMountOutfit ( ) ;
56+ Creature . Brightness = message . ReadByte ( ) ;
57+ Creature . LightColor = message . ReadByte ( ) ;
58+ Creature . Speed = message . ReadUInt16 ( ) ;
59+ Creature . PkFlag = message . ReadByte ( ) ;
60+ Creature . PartyFlag = message . ReadByte ( ) ;
61+ Creature . GuildFlag = message . ReadByte ( ) ;
62+
63+ Creature . Type = ( Constants . CreatureType ) message . ReadByte ( ) ;
64+ if ( Creature . Type == Constants . CreatureType . Player )
65+ {
66+ Creature . Vocation = message . ReadByte ( ) ;
67+ }
68+ else if ( Creature . IsSummon )
69+ {
70+ Creature . SummonerCreatureId = message . ReadUInt32 ( ) ;
71+ }
72+
73+ Creature . SpeechCategory = message . ReadByte ( ) ;
74+ Creature . Mark = message . ReadByte ( ) ;
75+ Creature . InspectionState = message . ReadByte ( ) ;
76+ Creature . IsUnpassable = message . ReadBool ( ) ;
77+ }
78+ else if ( id == ( ushort ) CreatureInstanceType . OutdatedCreature )
79+ {
80+ var creatureId = message . ReadUInt32 ( ) ;
81+ Creature = Client . CreatureStorage . GetCreature ( creatureId ) ;
82+ if ( Creature == null )
3683 {
3784 throw new Exception ( "[CreatureUpdate.ParseFromNetworkMessage] Outdated creature not found." ) ;
3885 }
3986
40- OutdatedCreature . InstanceType = ( CreatureInstanceType ) id ;
41- OutdatedCreature . HealthPercent = message . ReadByte ( ) ;
42- OutdatedCreature . Direction = ( Direction ) message . ReadByte ( ) ;
43- OutdatedCreature . Outfit = message . ReadCreatureOutfit ( ) ;
44- OutdatedCreature . Mount = message . ReadMountOutfit ( ) ;
45- OutdatedCreature . Brightness = message . ReadByte ( ) ;
46- OutdatedCreature . LightColor = message . ReadByte ( ) ;
47- OutdatedCreature . Speed = message . ReadUInt16 ( ) ;
48- OutdatedCreature . PkFlag = message . ReadByte ( ) ;
49- OutdatedCreature . PartyFlag = message . ReadByte ( ) ;
50- OutdatedCreature . GuildFlag = message . ReadByte ( ) ;
87+ Creature . InstanceType = ( CreatureInstanceType ) id ;
88+ Creature . HealthPercent = message . ReadByte ( ) ;
89+ Creature . Direction = ( Direction ) message . ReadByte ( ) ;
90+ Creature . Outfit = message . ReadCreatureOutfit ( ) ;
91+ Creature . Mount = message . ReadMountOutfit ( ) ;
92+ Creature . Brightness = message . ReadByte ( ) ;
93+ Creature . LightColor = message . ReadByte ( ) ;
94+ Creature . Speed = message . ReadUInt16 ( ) ;
95+ Creature . PkFlag = message . ReadByte ( ) ;
96+ Creature . PartyFlag = message . ReadByte ( ) ;
5197
52- OutdatedCreature . Type = ( Constants . CreatureType ) message . ReadByte ( ) ;
53- if ( OutdatedCreature . Type == Constants . CreatureType . Player )
98+ Creature . Type = ( Constants . CreatureType ) message . ReadByte ( ) ;
99+ if ( Creature . Type == Constants . CreatureType . Player )
54100 {
55- OutdatedCreature . Vocation = message . ReadByte ( ) ;
101+ Creature . Vocation = message . ReadByte ( ) ;
56102 }
57- else if ( OutdatedCreature . IsSummon )
103+ else if ( Creature . IsSummon )
58104 {
59- OutdatedCreature . SummonerCreatureId = message . ReadUInt32 ( ) ;
105+ Creature . SummonerCreatureId = message . ReadUInt32 ( ) ;
60106 }
61107
62- OutdatedCreature . SpeechCategory = message . ReadByte ( ) ;
63- OutdatedCreature . Mark = message . ReadByte ( ) ;
64- OutdatedCreature . InspectionState = message . ReadByte ( ) ;
65- OutdatedCreature . IsUnpassable = message . ReadBool ( ) ;
108+ Creature . SpeechCategory = message . ReadByte ( ) ;
109+ Creature . Mark = message . ReadByte ( ) ;
110+ Creature . InspectionState = message . ReadByte ( ) ;
111+ Creature . IsUnpassable = message . ReadBool ( ) ;
66112 }
67113 }
68114 else if ( Type == 0x0B ) // ManaPercent
@@ -80,43 +126,94 @@ public override void AppendToNetworkMessage(NetworkMessage message)
80126 message . Write ( ( byte ) ServerPacketType . CreatureUpdate ) ;
81127 message . Write ( CreatureId ) ;
82128 message . Write ( Type ) ;
83- if ( Type == 0x00 && OutdatedCreature != null ) // Outdated Creature
129+ if ( Type == 0x00 && Creature != null )
84130 {
85- message . Write ( ( ushort ) OutdatedCreature . InstanceType ) ;
86- if ( OutdatedCreature . InstanceType == CreatureInstanceType . OutdatedCreature )
131+ message . Write ( ( ushort ) Creature . InstanceType ) ;
132+ if ( Creature . InstanceType == CreatureInstanceType . UnknownCreature )
133+ {
134+ message . Write ( Creature . RemoveCreatureId ) ;
135+ message . Write ( Creature . Id ) ;
136+ message . Write ( ( byte ) Creature . Type ) ;
137+ if ( Creature . IsSummon )
138+ {
139+ message . Write ( Creature . SummonerCreatureId ) ;
140+ }
141+
142+ message . Write ( Creature . Name ) ;
143+ message . Write ( Creature . HealthPercent ) ;
144+ message . Write ( ( byte ) Creature . Direction ) ;
145+
146+ if ( Creature . Outfit is OutfitInstance )
147+ {
148+ message . Write ( ( OutfitInstance ) Creature . Outfit ) ;
149+ }
150+ else
151+ {
152+ message . Write ( ( ushort ) 0 ) ;
153+ message . Write ( ( ushort ) Creature . Outfit . Id ) ;
154+ }
155+
156+ message . Write ( ( ushort ) Creature . Mount . Id ) ;
157+ message . Write ( Creature . Brightness ) ;
158+ message . Write ( Creature . LightColor ) ;
159+ message . Write ( Creature . Speed ) ;
160+ message . Write ( Creature . PkFlag ) ;
161+ message . Write ( Creature . PartyFlag ) ;
162+ message . Write ( Creature . GuildFlag ) ;
163+
164+ message . Write ( ( byte ) Creature . Type ) ;
165+ if ( Creature . Type == Constants . CreatureType . Player )
166+ {
167+ message . Write ( Creature . Vocation ) ;
168+ }
169+ else if ( Creature . IsSummon )
170+ {
171+ message . Write ( Creature . SummonerCreatureId ) ;
172+ }
173+
174+ message . Write ( Creature . SpeechCategory ) ;
175+ message . Write ( Creature . Mark ) ;
176+ message . Write ( Creature . InspectionState ) ;
177+ if ( Client . VersionNumber < 11900000 )
178+ {
179+ message . Write ( Creature . PvpHelpers ) ;
180+ }
181+ message . Write ( Creature . IsUnpassable ) ;
182+ }
183+ else if ( Creature . InstanceType == CreatureInstanceType . OutdatedCreature )
87184 {
88- message . Write ( OutdatedCreature . Id ) ;
89- message . Write ( OutdatedCreature . HealthPercent ) ;
90- message . Write ( ( byte ) OutdatedCreature . Direction ) ;
91- if ( OutdatedCreature . Outfit is OutfitInstance )
185+ message . Write ( Creature . Id ) ;
186+ message . Write ( Creature . HealthPercent ) ;
187+ message . Write ( ( byte ) Creature . Direction ) ;
188+ if ( Creature . Outfit is OutfitInstance )
92189 {
93- message . Write ( ( OutfitInstance ) OutdatedCreature . Outfit ) ;
190+ message . Write ( ( OutfitInstance ) Creature . Outfit ) ;
94191 }
95192 else
96193 {
97194 message . Write ( ( ushort ) 0 ) ;
98- message . Write ( ( ushort ) OutdatedCreature . Outfit . Id ) ;
195+ message . Write ( ( ushort ) Creature . Outfit . Id ) ;
99196 }
100- message . Write ( ( ushort ) OutdatedCreature . Mount . Id ) ;
101- message . Write ( OutdatedCreature . Brightness ) ;
102- message . Write ( OutdatedCreature . LightColor ) ;
103- message . Write ( OutdatedCreature . Speed ) ;
104- message . Write ( OutdatedCreature . PkFlag ) ;
105- message . Write ( OutdatedCreature . PartyFlag ) ;
106- message . Write ( OutdatedCreature . GuildFlag ) ;
107- message . Write ( ( byte ) OutdatedCreature . Type ) ;
108- if ( OutdatedCreature . Type == Constants . CreatureType . Player )
197+ message . Write ( ( ushort ) Creature . Mount . Id ) ;
198+ message . Write ( Creature . Brightness ) ;
199+ message . Write ( Creature . LightColor ) ;
200+ message . Write ( Creature . Speed ) ;
201+ message . Write ( Creature . PkFlag ) ;
202+ message . Write ( Creature . PartyFlag ) ;
203+ message . Write ( Creature . GuildFlag ) ;
204+ message . Write ( ( byte ) Creature . Type ) ;
205+ if ( Creature . Type == Constants . CreatureType . Player )
109206 {
110- message . Write ( OutdatedCreature . Vocation ) ;
207+ message . Write ( Creature . Vocation ) ;
111208 }
112- else if ( OutdatedCreature . IsSummon )
209+ else if ( Creature . IsSummon )
113210 {
114- message . Write ( OutdatedCreature . SummonerCreatureId ) ;
211+ message . Write ( Creature . SummonerCreatureId ) ;
115212 }
116- message . Write ( OutdatedCreature . SpeechCategory ) ;
117- message . Write ( OutdatedCreature . Mark ) ;
118- message . Write ( OutdatedCreature . InspectionState ) ;
119- message . Write ( OutdatedCreature . IsUnpassable ) ;
213+ message . Write ( Creature . SpeechCategory ) ;
214+ message . Write ( Creature . Mark ) ;
215+ message . Write ( Creature . InspectionState ) ;
216+ message . Write ( Creature . IsUnpassable ) ;
120217 }
121218 }
122219 else if ( Type == 0x0B ) // ManaPercent
0 commit comments