EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Bug Reports (https://www.eqemulator.org/forums/forumdisplay.php?f=591)
-   -   Bind Wound skill 200+ not working up to 70% (https://www.eqemulator.org/forums/showthread.php?t=40867)

Riklin 08-31-2016 02:40 PM

Bind Wound skill 200+ not working up to 70%
 
Server Halls Havoc.

Database version 070_pop

db update version thru 9097

Tested with characters above and below level 50.

I have been testing bind wound and how it works. From what I can tell, bind wound works to repair injuries until your health is 50%+, until you get your bind wound skill over 200. When you attempt to bind wound when your skill is below 200 and your health is above 50%, you get the message "you cannot bind wounds above 50% hitpoints.", "You cannot have your wounds bound above 50% hitpoints".

What the problem is that when your skill is above 200, the message about not binding wounds over 50% still occurs.

I read somewhere that the skill value needs to be above 210. so I tried that. I bound wounds till my skill went to 212. I'm still getting the cannot bind wound with health over 50% message.

I have searched through the rule_values and didn't see anything obvious about this. I even zoned to make sure this issue is not related to zoning.

I have not made any major changes to the database. I removed the defiant armor drops, disabled mercs (in the rules), but that is it.


Why isn't bind wound working up to 70% when your skill is over 200?

Thanks,
Riklin

ghanja 08-31-2016 03:22 PM

Is the test toon a Monk? Does the test toon have AA's (i.e. First Aid)?

source/zone/client.cpp:
Code:

bool Client::BindWound(Mob *bindmob, bool start, bool fail)
Is where Bind Wound is handled.

Riklin 08-31-2016 03:39 PM

The main test character is a bard. Whether his level is below 50 or over, it doesn't matter. I'm not trying to test whether the AA pts work, that is different. I am stating for my basic Linux server build, using the database version identified, that it looks like the default settings do not allow characters to bind wound over if their health is over 50%. I did not use GM commands to set the skill. I increased the bind wound skill by using lots and lots of bandages. I even zoned, to confirm whether or not zoning was required before the change took place. In any case, whether it's a bind wound skill of 200+ or 210+, bind wound does not seem to allow bind wound to be done over 50% health. It should work up to 70% health without AAs, when your skill is over 200, but its not for me.

ghanja 08-31-2016 04:01 PM

Quote:

Originally Posted by Riklin (Post 250828)
The main test character is a bard. Whether his level is below 50 or over, it doesn't matter. I'm not trying to test whether the AA pts work, that is different. I am stating for my basic Linux server build, using the database version identified, that it looks like the default settings do not allow characters to bind wound over if their health is over 50%. I did not use GM commands to set the skill. I increased the bind wound skill by using lots and lots of bandages. I even zoned, to confirm whether or not zoning was required before the change took place. In any case, whether it's a bind wound skill of 200+ or 210+, bind wound does not seem to allow bind wound to be done over 50% health. It should work up to 70% health without AAs, when your skill is over 200, but its not for me.

Code:

int maxHPBonus = spellbonuses.MaxBindWound + itembonuses.MaxBindWound +
                                                        aabonuses.MaxBindWound;
int max_percent = 50 + 10 * maxHPBonus;

So, while you suggest it's (in your words) irrelevant as to whether or not your toon has the AA's, spells or items with effect of 269, those lines says otherwise.

Thus, whether or not you're a Monk too is relevant.

Because a Bard is not a Monk (obviously), and assuming no spells, AA's, etc. (I never mentioned level specifically, but yes I know 51+ for the AA and skill > 200), how I'm reading the code, it doesn't appear to be a "BUG" so much as perhaps not the way things are in live?

But good luck to you....

ghanja 08-31-2016 04:09 PM

While I don't know what the current Live status is on Bind Wound, "back in the day" it was a Rogue, Warrior or Monk that could go to 70% max (assuming no other modifiers) upon having a Bind Wound of greater than 200.

Code:

                                        if ((GetClass() == MONK || GetClass() == WARRIOR || GetClass() == ROGUE) && GetSkill(EQEmu::skills::SkillBindWound) > 200) {
                                                max_percent = 70 + 10 * maxHPBonus;
                                        }

Would be formula assuming it's still true.

Maze_EQ 08-31-2016 04:18 PM

I'd listen to Ghanja.


Code:

Bandage your wounds to heal some damage. At 200 skill or below, the formula is 1 HP per 4 points of Bind Wound, for a max of 50 HP at 200 skill. At 201 skill or above, the formula is 1 HP per 2.5 points of Bind Wound, for a max of 84 HP at 210 skill.
Note: All classes that can exceed 200 Bind Wound can bind to 70% after exceeding 200 skill, otherwise bind wound can only heal you to 50% health. Consumes a Aloe Swatch or Bandages when used.

Code:

Warrior (Max 210)
Monk (Max 210)
Rogue (Max 210)
Ranger (Max 200)
Bard (Max 200)
Paladin (Max 200)
Shadow Knight (Max 200)
Shaman (Max 200)
Cleric (Max 200)
Druid (Max 200)
Enchanter (Max 100)
Magician (Max 100)
Necromancer (Max 100)
Wizard (Max 100)



KEY WORD = EXCEED
Code:

Warrior (Max 210)
Monk (Max 210)
Rogue (Max 210)

Code:

                                        if (GetClass() == MONK && GetSkill(EQEmu::skills::SkillBindWound) > 200) {
                                        max_percent = mod_bindwound_percent(max_percent, bindmob);

You are wrong OP.

Should prolly test apples to apples.

I do agree theres an issue in the source, but it's 100% different than whatever you tested.

Riklin 08-31-2016 05:37 PM

Written communication sucks sometimes.

The reason I said whether or not it was a bard was irrelevant was because I could get my bind wound skill over 200! Again, and I want to stress this, I have not modified the database beyond removing defiant/combatant's/adept's drops and making sure mercs are turned off. I have done absolutely nothing involving skill caps!

To prove my point, I just ran a simple sql query:
select * from eq.skill_caps where skillid = 9 and level = 50;

The results I get are for each class (1 thru 16) at level 50, the skill cap for skill 9 (which should be bind wound) is all the same - 275! That means every class can get their bind wound skill up to 275 at level 50!

I used the database source file of peqbeta_2015-08-12-02_01.tar.gz.

I am stating that version of the database seems to support the bind wound skill going over 200, without increasing the bind wound skill to support up to 70% health.

Using Underfoot client, btw...

Doing another test with a WARRIOR this time...
create new character,
set level to 45 (#level 45) skills ui shows skill cap of 250 for Bind Wound,
summon many stacks of bandages (#summon 13009 20),
set bind wound skill to 197 (#setskill 9 197),
damage self to set health below 50% (#damage 1000) as needed
keep using bind wound until skill increases over 200 (yeah this takes awhile...)
keep damaging self below 50% until skill is over 200, then more bind wound,
Got the cannot bind wounds above 50% message with bind wound skill of 201!
Zoned to make sure this is not something that requires zoning before it works.
Same thing - cannot bind wounds above 50%.
Continued bind wound until skill got up to 211. Got the same message - "You cannot bind wounds above 50% hitpoints."

These are the steps I used to test this...

IIRC, if skills go above what the client seems to support, skills turn yellow on the Skills ui window. They are not yellow, so the client does not appear to be the limiter.


I am able to get bind wound skill up to over 210 at level 45 on the bard and the warrior. Neither can bind wounds beyond 50%, which is the reason I am asking for confirmation that this is normal. I do not believe it should work this way. My understanding is that if you can get your bind wound skill to over 200, then you should be able to bind wounds up to 70% health, which I cannot do.

That is what I am stating.

Uleat 08-31-2016 06:08 PM

Pretty sure the answer was already given..


One of the issues with fixing this is having to deal with non-advanceable classes already having a '> 200' bind wounds skill.

If you can advance those classes past 200, then the skill-up code needs to be checked and modified as well.

Currently, the only class coded to use the 70% max is Monk.

Based on that, and the observation of your non-Monk characters being able to skill-up past 200, the most viable course of action is to add additional
cases for those classes that should be allowed to use the 70% rule.


If anyone can provide those classes, I could commit a fix for this..otherwise, it'll have to wait until I can research it, or another dev has time to.

Drajor 08-31-2016 06:24 PM

How I would solve this;
- There are two specific limits, 50% and 70%. You need to determine where these values are checked.
- Drop a break point in the function that handles the BW packet to determine whether the client is blocking BW usage in various circumstances. If it is not blocking then the solution is easy. Modify the server code the suit your desired limits / skill level requirements.
- If the client is blocking it becomes more complicated. You will need to determine how the client checks 'context' for BW usage. Depending on your dev skills you can either try combinations of skill caps, level, AA etc. Or you can locate the code in the client with a disassembler and work out what it is checking.

The answer to where the limits are checked is not always one or the other. Sometimes the server implements mirror checks to the client, sometimes these checks match and sometimes they don't. Sometimes the server checks things the client doesn't. Have fun :)

Maze_EQ 08-31-2016 06:46 PM

Quote:

Originally Posted by Uleat (Post 250836)
Pretty sure the answer was already given..


One of the issues with fixing this is having to deal with non-advanceable classes already having a '> 200' bind wounds skill.

If you can advance those classes past 200, then the skill-up code needs to be checked and modified as well.

Currently, the only class coded to use the 70% max is Monk.

Based on that, and the observation of your non-Monk characters being able to skill-up past 200, the most viable course of action is to add additional
cases for those classes that should be allowed to use the 70% rule.


If anyone can provide those classes, I could commit a fix for this..otherwise, it'll have to wait until I can research it, or another dev has time to.


Sorry for the huge quote. But basically add


Code:

|| GetClass==WARRIOR || GetClass==ROGUE
Just recompiled nagafens and works fine.

Riklin 08-31-2016 07:19 PM

I repeated the test I had previously done with the bard and the warrior, with a monk this time. The monk can indeed go above 50% immediately upon gaining a bind wound skill of 201. So your assumptions about Monks being different are confirmed.

Everquest clients have a skillcaps text file (e.g. c:\everquest\resources\SkillCaps.txt)

This seems to indicate that the current source has the database set up correctly, but the code is likely supporting an older version of the source.

Around May 3rd 2004, the Bind Wound ability was modified so that all classes could bind wounds up to 70%. To do that, the skill caps were reset. It works the same way for all classes now. Get your bind wound skill over 200 and you too can bind wound up to 70%. Get the First Aid AAs and you can bind wound up to 100%.

So, all that needs changing is the code needs modified to work for all classes.

Riklin 08-31-2016 09:37 PM

To be thorough, here is the exact quote from the patch notes dated May 5 2004:

HP Regen
- All characters should now regenerate HP faster when sitting. The longer you sit, the faster you regenerate!
- You will not receive increased regen while under the effects of a DOT or while feigned.
- You can now bandage yourself up to 70% of your HP. Folks with the appropriate AA abilities can bandage above 70%.
- You can now bandage while sitting.

Here is the link, if you want to check my work...:
http://everquest.allakhazam.com/hist...es-2004-1.html

Uleat 08-31-2016 10:14 PM

I checked out that link and it does look like it's valid data.


I still need some info on the scaling rate before I can make any changes.

Will have to look into both AA's as well..

Riklin 09-01-2016 12:22 PM

I think it uniformly works based on a ratio of 4 skill points equaling 1 hitpoint, per bandage/bind wound attempt, with a minimum of 1 hitpoint healed. That is supported by people saying they can bind up to around 86 hp per bandage. For all lvl 50 characters, with bind wound skill maxed (max skill at 50 is 275) would heal for 68 points (depending on rounding).

Uleat 09-02-2016 06:24 PM

Here is the function with some reworked code: http://wiki.eqemulator.org/i?Module=...Paste=JxyFgjSx (30-day lease)


As far a scaling, I am really looking for anything outside of the nominal 4:1 ratio.

(I have the max percent and bonus hp accounted for.)


In the info you provided, there was a discrepancy (or typo) in the numbers.

You said observed has been 86..but, the calculated was 68 - which is a difference of 18.

If this is not a typo, 18 can be arrived at by taking the binders level and dividing by 3.

This would give you a level range of 54-56 (18.000, 18.333, 18.666, respectively.)


Also, I don't have any info on a 'minimum' heal amount, if there are bonus ranges/caps or if there any other factors.

Finding plausible information on this skill is almost impossible...


The code is simple and I have tested the basic operation.

I still need to test with AA and items mods (spells should be ok if both of those work.)


EDIT: Updated linked code..


All times are GMT -4. The time now is 02:24 AM.

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.