Quote:
Originally Posted by Shendare
Targetable11 = unknown0156[3], Offset 625 (If this field is set to 11, the NPC is untargetable. Weird, I know. Totally found it by accident!)
|
That is interesting, because body type 11 is untargetable. So, my guess is that our current field for bodytype is probably incorrect. I got most of the fields originally from SEQ and they really only care about a few key parts of that structure. This probably explains why certain NPCs show up on SoF that shouldn't. Or at least partially explains that possibly.
Quote:
Originally Posted by Shendare
Also, I found the bug with my bald player character. This block of code in mob.cpp at line # 724 was messing things up. It assumes a zero value for the appearance fields is invalid, and sets such zero fields to 0xFF instead.
Code:
ns->spawn.haircolor = haircolor ? haircolor : 0xFF;
ns->spawn.beardcolor = beardcolor ? beardcolor : 0xFF;
ns->spawn.eyecolor1 = eyecolor1 ? eyecolor1 : 0xFF;
ns->spawn.eyecolor2 = eyecolor2 ? eyecolor2 : 0xFF;
ns->spawn.hairstyle = hairstyle ? hairstyle : 0xFF;
ns->spawn.face = luclinface;
ns->spawn.beard = beard ? beard : 0xFF;
The problem is, zero is perfectly valid. It's generally the first available appearance option for each field! Zero is the matted-hair for high elves, the dark brown hair color for races that can use it, the moustache face for humans, etc. Setting them to 255 actually SET them to an invalid value, making anyone with a zero value for the fields bald or incorrectly colored.
I simply commented out the 0xFF stuff, and things started working normally again.
Code:
ns->spawn.haircolor = haircolor; // ? haircolor : 0xFF;
ns->spawn.beardcolor = beardcolor; // ? beardcolor : 0xFF;
ns->spawn.eyecolor1 = eyecolor1; // ? eyecolor1 : 0xFF;
ns->spawn.eyecolor2 = eyecolor2; // ? eyecolor2 : 0xFF;
ns->spawn.hairstyle = hairstyle; // ? hairstyle : 0xFF;
ns->spawn.face = luclinface;
ns->spawn.beard = beard; // ? beard : 0xFF;
Maybe they were put in place to correct a render problem in a pre-SoF client. I tried messing around with it for a couple of minutes with the Titanium client, but I couldn't even get beards to load with Titanium to test with. Hair color and hair style seemed to work properly with the 0 values, so the 0xFF stuff might have been implemented for a pre-Titanium client, though that would mean this bug would have been around for a long time.
|
This is an interesting find and might be a great breakthrough for handling face settings. Definitely worth looking into.
I am going to have to give this code a try. It beats the crap out of changing whole chunks of the struct to a certain value, compiling, starting the server, logging in and hopefully seeing a difference, and then starting the whole process over again lol.