Ok I have some progress, this was a pain in the butt lol
So here is the story, if the name of the character is to long then the address that GetPartyMemberName(_number) gets is actually a pointer where the name is kept where as normally GetPartyMemberName(_number) gets the actual name.
This might take some looking in to as to how to deal with it but yes I can confirm the long name is the issue.
Maybe Rock has an idea for this but this is what I see at this early stage on investigation.
Ok so top name is to long and so it points to another address that has the name
Second name contains the actual name as a string.
Main difference I see first is
4 bytes after where the name should be is 00000000, I would need to check what is after a name with few letters to see if it will also have the 00000000 after the name.
Ok checked and 4 letter name has 00000000 after it aswell.
This just gets worse and worse.
Once a name with to many letters has been in a spot of party then that spot ALWAYS has a pointer to the name held elsewhere, regardless of it party is disbanded and reinvited.
So once a long name has been in any position in party it is messed up until client restarts.
So basically if we are going to allow for long names then function GetPartyMemberName(_number) needs to be rewritten to allow for it being a pointer or string at the address.