#Latest Eevee Skinmod update preventing connection to Celestenet

17 messages · Page 1 of 1 (latest)

bleak sandal
#
 ---> System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
   at System.IO.BinaryReader.ReadByte()
   at Celeste.Mod.CelesteNet.CelesteNetBinaryReader.ReadColorNoA()
   at Celeste.Mod.Eevee_Skinmod.DataPlayerEeveeSkin.Read(CelesteNetBinaryReader reader)
   at Celeste.Mod.CelesteNet.DataTypes.DataType.ReadAll(CelesteNetBinaryReader reader)
   at Celeste.Mod.CelesteNet.DataContext.Read(CelesteNetBinaryReader reader)
   --- End of inner exception stack trace ---
   at Celeste.Mod.CelesteNet.DataContext.Read(CelesteNetBinaryReader reader)
   at Celeste.Mod.CelesteNet.Client.CelesteNetClientTCPUDPConnection.TCPRecvThreadFunc()```
Running on Everest 4648
The selected SMH+ skin, or any combination of Eevee's settings/palettes, don't seem to matter.
@cunning ingot thought i'd let you know ![laugheline](https://cdn.discordapp.com/emojis/454887887847030814.webp?size=128 "laugheline")
cunning ingot
#

yeah, if you updated its because the mod is expecting new data, so if there are people with the previous version already connected it wont let you join, i dont think i can do something there ^^;

bleak sandal
#

o h mildpanic

#

let's hope everyone updates :')

cunning ingot
#

gotta put it here in case anyone comes looking for this too, a bit of a work around for those that want to play with the skin in the meantime

#

if you want to play with others, first you need to disable the skin (full disable, not just in mod options) to enter celestenet and change to a new lobby (with /join [lobby]), then enable the skin again

vague fiber
#

@cunning ingot you should version your packet types to avoid this

#

Madhunt, head 2 head, and co-op helper all append version string to the data IDs so that when it changes you can just bump the protocol version and the versions won't talk to each other, but that's the point

cunning ingot
#

like i should put here something like "writer.Write(String)"? or how?

vague fiber
#

Head2HeadModule.ProtocolVersion is just a const string. By doing it this way, when i bump the protocol version, cnet sees it as a whole new data type so it won't try to deserialize older versions

cunning ingot
vague fiber
#

The part where it says "Eeveeskin_skinconfig" - that's what cnet uses to figure out what code to call to deserialize a packet. You would append the protocol version to that so that cnet knows it's a diffent kind of packet

#

That string is sent along with the packet and cnet goes "ok let me look for a data type with a matching DataID" and if it finds one, it calls that to deserialize the packet. So if the incoming packet's DataID doesn't match a known DataID, cnet just ignores it so theres no deserializatio failure

cunning ingot
#

so i just add this here then, and those with the previous version would appears just as madeline, right?

vague fiber
#

If not receiving packets sent by older versions means appearing as madeline, then yes

#

The tough part for cross-version compatibility is that even if you make newer versions able to deserialize the older version, the older version still won't be able to handle the new one's packets. The only way around this would be to put the size of the packet in bytes into the packet and add some fancy stream manipulation so that it always leaves the stream at the end of the packet. Co-op helper does this for cross-mod compatibility