Page 1 of 1
BUG: AddSkillBonus adds incorrect amount
Posted: Wed Apr 17, 2019 4:35 am
by Ememjr
when using the add skill bonus Lua Function from a script the incorrect amount is being added as following
starting skill value 5/100
add 5 with addskillbounes then value is 15/105
the little troubleshooting i did so far has this lua function executing twice each time i execute the spell
Code: Select all
int EQ2Emu_lua_AddSkillBonus(lua_State* state) {
i have confirmed the the addskillbonus is only in the script once
Edit: squashed, pending commit
Re: BUG: AddSkillBonus adds incorrect amount
Posted: Wed Apr 17, 2019 5:39 am
by tyrbo
Looking at the code (forgive me, it's been a while), I don't think I changed anything significant with how adding skills works.
iirc, this was struct/packet related and not an issue with the code.
A quick look through my commits and this _may_ be the fix:
https://github.com/stitchpvp/world/blam ... #L347-L348
Might have just been that the logic was a little funky. Anyway, that seems to work on Stitch, so I'd give it a shot.
Re: BUG: AddSkillBonus adds incorrect amount
Posted: Wed Apr 17, 2019 6:11 am
by Ememjr
yup that is what i found, we were on the right track
Code: Select all
sint16 skill_max_with_bonuses = CalculateSkillMaxValue(skill->skill_id, skill->max_val);
packet->setArrayDataByName("skill_id", skill->skill_id, i);
packet->setArrayDataByName("type", skill->skill_type, i);
//packet->setArrayDataByName("current_val", CalculateSkillValue(skill->skill_id, skill->current_val), i);
//packet->setArrayDataByName("base_val", skill->max_val, i);
//packet->setArrayDataByName("max_val", skill->max_val, i);
packet->setArrayDataByName("current_val", CalculateSkillValue(skill->skill_id, skill->current_val), i);
packet->setArrayDataByName("base_val", skill_max_with_bonuses, i); //<<<<change this line to skill->currentskill to fix this bug
packet->setArrayDataByName("skill_delta2", skill_max_with_bonuses - skill->max_val, i);
packet->setArrayDataByName("max_val", skill->max_val, i);
packet->setArrayDataByName("display_minval", skill->display, i);
packet->setArrayDataByName("display_maxval", skill->display, i);
i++;
base val should not be skill_max_with_bonuses
my current val is currect, you should probaly change your current_val to CalculateSkillValue(skill->skill_id, skill->current_val) so that is adds in the AddSkillBonus
Re: BUG: AddSkillBonus adds incorrect amount
Posted: Wed Apr 17, 2019 6:27 am
by tyrbo
I'm pretty sure it all shows correctly on Stitch at this point.
I'm not making any more changes to my old code though, just focused on the rewrite.
Re: BUG: AddSkillBonus adds incorrect amount
Posted: Wed Apr 17, 2019 12:14 pm
by Ememjr
ok it is a false alarm, i did not find a fix, but seem to have found where in a general area it is failing
here is orginal portion of packet (this is #3 of 31 skill updates) from the inital full send packet
Code: Select all
Name: type_3 Index: 0 Type: int32 Data: 3
Name: current_val_3 Index: 0 Type: int16 Data: 10
Name: base_val_3 Index: 0 Type: int16 Data: 10
Name: max_val_3 Index: 0 Type: int16 Data: 105
Name: skill_delta_3 Index: 0 Type: sint16 Data: 3
Name: skill_delta2_3 Index: 0 Type: sint16 Data: 3
Name: display_minval_3 Index: 0 Type: int8 Data: 1
Name: display_maxval_3 Index: 0 Type: int8 Data: 1
Name: language_unknown_3 Index: 0 Type: int8 Data: 0
you will see that current_val is 10 the correct value
here is the dump
Code: Select all
0: 1F 00 73 01 00 00 BE 02 - 15 D4 93 D8 D4 69 05 05 | ..s..........i..
16: E0 01 01 9E 20 7C B2 7A - D4 65 01 01 08 9F 11 21 | .... |.z.e.....!
32: 0A 75 C9 AA 65 01 01 B0 - 01 01 9F 03 24 5A 0A 8A | .u..e.......$Z..
48: AA 69 0A 0A B0 01 01 9F - 02 24 98 D3 E3 AA 69 05 | .i.......$....i.
64: 05 B0 01 01 9F 06 29 0B - 11 2A AA 69 05 05 B0 01 | ......)..*.i....
80: 01 9F 11 2D EA 03 99 AA - 65 01 01 B0 01 01 9F 02 | ...-....e.......
96: 34 A1 43 AC AA 69 05 05 - B0 01 01 8E 34 E2 D0 AA | 4.C..i......4...
112: 65 01 01 B0 01 01 9F 06 - 3E 7F 0C 41 AA 69 05 05 | e.......>..A.i..
128: B0 01 01 8F 5C 9D FC BC - AA 65 01 01 07 9F 06 75 | ....\....e.....u
144: 6D D1 92 AA 69 05 05 B0 - 01 01 9F 0C 79 76 D8 8D | m...i.......yv..
160: AA 69 05 05 B0 01 01 9F - 0C 7B 8D 17 2E AA 65 01 | .i.......{....e.
176: 01 07 9D 06 8A 40 42 AA - 69 05 05 B0 01 01 8F 8E | .....@B.i.......
192: 11 F2 27 AA 65 01 01 07 - 8F 96 FC 67 DD AA 65 01 | ..'.e......g..e.
208: 01 07 9F 01 9D 3F B5 16 - AA 69 05 05 B0 01 01 8F | .....?...i......
224: 9E B1 77 A6 AA 65 01 01 - 07 9F 01 B5 B5 8F E6 AA | ..w..e..........
240: 69 05 05 B0 01 01 9F 11 - BD 91 0C 6D AA 65 01 01 | i..........m.e..
256: B0 01 01 9F 01 CB EF DD - 30 AA 69 05 05 B0 01 01 | ........0.i.....
272: 9F 0C CC 64 74 1E AA 65 - 01 01 07 9F 04 D2 F1 5A | ...dt..e.......Z
288: 8C AA 65 01 01 07 9F 02 - D5 DB 48 D4 AA 69 05 05 | ..e.......H..i..
304: B0 01 01 9F 06 DA 22 95 - A9 AA 69 05 05 B0 01 01 | ......"...i.....
320: 8F E3 BA CE 46 AA 65 01 - 01 07 8F F0 AC 21 16 AA | ....F.e......!..
336: 65 01 01 07 9F 06 F7 DB - A0 2F AA 69 05 05 B0 01 | e......../.i....
352: 01 9F 0C FD 52 8D 32 AA - 69 05 05 B0 01 01 9F 0F | ....R.2.i.......
368: FD 86 97 E1 AA 65 01 01 - 07 00 | .....e....
this is the update packet after casting spell that has an addskillbonus of 3 on it. current_val is now 13
Code: Select all
Name: type_3 Index: 0 Type: int32 Data: 3
Name: current_val_3 Index: 0 Type: int16 Data: 13
Name: base_val_3 Index: 0 Type: int16 Data: 10
Name: max_val_3 Index: 0 Type: int16 Data: 105
Name: skill_delta_3 Index: 0 Type: sint16 Data: 3
Name: skill_delta2_3 Index: 0 Type: sint16 Data: 3
Name: display_minval_3 Index: 0 Type: int8 Data: 1
Name: display_maxval_3 Index: 0 Type: int8 Data: 1
Name: language_unknown_3 Index: 0 Type: int8 Data: 0
here is the dump of the update packet, its just updateing 1 skill that is different
Code: Select all
0: 1F 00 0B 00 00 00 48 C1 - 03 07 82 03 7F 7F 7F 7F | ......H.........
16: 3A 00 | :.
this is one of the Xor update packets, so i have to assume that it is not XORing correctly or if offset wrong