Go Back   EQEmulator Home > EQEmulator Forums > Support > Support::Windows Servers

Support::Windows Servers Support forum for Windows EQEMu users.

Reply
 
Thread Tools Display Modes
  #1  
Old 09-16-2015, 02:58 PM
starblight's Avatar
starblight
Sarnak
 
Join Date: Jan 2007
Posts: 76
Default Skill rate slow down near max skill

I have increased exp gain on my server so to keep skills from lagging behind I updated the rate you learn them. the problem I am having is when you get close to your max it slows way down. So for example a level 55 SK equips a 2hs weapon for the first time. Up to around 100 is fast about a skill gain each hit. but past that it can take more then one fight to gain one skill point. Is there a way to change this? I could try setting Character:SkillUpModifier even higher then I did as it is almost a skill level per hit anyways it would have little effect in the beginning.
Reply With Quote
  #2  
Old 09-16-2015, 03:33 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

What have you set the Character::SkillUpModifier to? 100 means normal speed. 200 would mean skill-ups happen twice as often.

Regular non-modified skill-up rates as a percentage chance for each swing are:

0 - 17.6% (every 5.7 swings)
100 - 12.6% (every 7.9 swings)
150 - 10.1% (every 9.9 swings)
200 - 7.6% (every 13.2 swings)
252 - 5% (every 20 swings)
280 - 3.6% (every 27.8 swings)
300 - 2.6% (every 38.5 swings)
Reply With Quote
  #3  
Old 09-16-2015, 05:45 PM
starblight's Avatar
starblight
Sarnak
 
Join Date: Jan 2007
Posts: 76
Default

I set it to 2400. Is it possible to set it to high?
Reply With Quote
  #4  
Old 09-16-2015, 05:53 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

2400 shouldn't do it. That should yield a ... 12.6 * 2400 = 302.4% chance to succeed. Every swing should give you a skill-up if the 2400 rule is in effect.

My suspicion at this point would be that the rule set that the 2400 rule is on (rule_values.ruleset_id -> rule_sets.ruleset_id) is not the one that the server is working with (variables "RuleSet" -> rule_sets.name).

If your rule_values table is using rulesetid 10, and rulesetid 10 is named "Default" in rule_sets, then you would need a variable in your Variables table called RuleSet with the value of Default.
Reply With Quote
  #5  
Old 09-16-2015, 05:57 PM
Kingly_Krab
Administrator
 
Join Date: May 2013
Location: United States
Posts: 1,589
Default

Also, try changing the ruleset column to the same number for every zone, in case the zone you're testing it in isn't under that ruleset:
Code:
UPDATE `zone` SET `ruleset` = '#' WHERE `ruleset` != '#'
Reply With Quote
  #6  
Old 09-16-2015, 05:58 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

Oh, right! Each zone can be on a different ruleset from the default. Thanks, KK.
Reply With Quote
  #7  
Old 09-16-2015, 09:58 PM
starblight's Avatar
starblight
Sarnak
 
Join Date: Jan 2007
Posts: 76
Default

I made the changes suggested and I think I will like having all the zones on the same rule set.

That being said I feel I was not as clear as I should have been on the problem I am having. It seems like there is a soft cap for how fast a skill is learned. As you get closer to your levels cap the rate slows way down. But as soon as you level again the rate increases then slows again. Thanks for all the help so far.
Reply With Quote
  #8  
Old 09-16-2015, 10:08 PM
AdrianD
Discordant
 
Join Date: Dec 2013
Posts: 297
Default

I have noticed for quite a while that skills like parry/dodge/rip/foraging? and some others skill up extremely fast. Even with mid/high skill values (say, max for a lvl 40) these skills balloon quickly. On the other hand, weapon skills/offense/defense increase much, much slower, maybe 10/20+ times slower. Changing the general modrate doesn't make sense. I'm fine with the slower skills as they are.

I would really like to change this but it's been low priority. I figure this is a source change.

* I suppose a question would help. Which source file(s) would I find the equation which governs skill-ups of various skills? If you know off-hand.
Reply With Quote
  #9  
Old 09-16-2015, 10:57 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

client.cpp - Client::CheckIncreaseSkill

Defensive skills get a chance to increase with every swing an enemy takes at you. Offensive skills get a chance to increase with every swing you take at an enemy.

If you have 2 enemies attacking, you, you'll get twice as many opportunities to skill up defensive skills as offensive skills.

I don't see anything in the skillup code that would affect chances of skillups as you get closer to max for a level. This is basically it:

Code:
// Make sure we're not already at skill cap
	if (skillval < maxskill)
	{
		// the higher your current skill level, the harder it is
		int32 Chance = 10 + chancemodi + ((252 - skillval) / 20);

		Chance = (Chance * RuleI(Character, SkillUpModifier) / 100);

		Chance = mod_increase_skill_chance(Chance, against_who);

		if(Chance < 1)
			Chance = 1; // Make it always possible

		if(zone->random.Real(0, 99) < Chance)
		{
			SetSkill(skillid, GetRawSkill(skillid) + 1);
			Log.Out(Logs::Detail, Logs::Skills, "Skill %d at value %d successfully gain with %d%%chance (mod %d)", skillid, skillval, Chance, chancemodi);
			return true;
		} else {
			Log.Out(Logs::Detail, Logs::Skills, "Skill %d at value %d failed to gain with %d%%chance (mod %d)", skillid, skillval, Chance, chancemodi);
		}
	} else {
		Log.Out(Logs::Detail, Logs::Skills, "Skill %d at value %d cannot increase due to maxmum %d", skillid, skillval, maxskill);
	}
Reply With Quote
  #10  
Old 09-21-2015, 07:21 PM
starblight's Avatar
starblight
Sarnak
 
Join Date: Jan 2007
Posts: 76
Default

So I quickly realized I had not done enough research on the exact problem I was having. I do want to thank people for the info they posted. The source code is definitely interesting.

So my goal was to make skills a lot less of a concern. So I set as I said above the Character::SkillUpModifier to 2400 and while testing it over the next few day I set it to a variety of setting ranging from 300-24000. After leveling a group to level 65 a lot of the skills level at the expected rate. but a few seem to not work as expected. here is a list of ones that level fast up to around 100 then slow down. It seem like a 1% chance is about how slow they get.
  • All weapon skills like 1hs 2hb and so on
  • Swimming
  • Archery
  • Disarm (Broken skill?)

Oddly throwing skill levels up fast.

Class specific skills have not been tested as well. There is a rouge and back stab and pick pocket has been reported as levels up fast.

For now what I am considering as a work around will be to modify the source to change the chance line from 1 to 20
Code:
		if(Chance < 1)
			Chance = 1; // Make it always possible
Code:
		if(Chance < 60)
			Chance = 60; // Make it always possible
(edit)
A quick test on archery and this change worked. You now gain a skill point about 60% of the time.
Reply With Quote
  #11  
Old 09-22-2015, 06:27 AM
N0ctrnl's Avatar
N0ctrnl
Discordant
 
Join Date: Jan 2007
Posts: 443
Default

Why not just max the skill on level? Seems like you basically want to ignore the skillup parts anyway. Could just grant the 5 points as soon as they level up and it's a non-issue. Any reason you're not looking at doing that instead?
Reply With Quote
  #12  
Old 09-22-2015, 12:13 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

Yeah, that was my thought, too. If skillups are too inconvenient for your server's philosophy, may as well max 'em at level up.

zone/exp.cpp - Client::SetLevel() - Line ~604

Code:
...
	Log.Out(Logs::General, Logs::Normal, "Setting Level for %s to %i", GetName(), set_level);

	CalcBonuses();

	// Set all skills to max:
	for (uint32 i = 0; i <= HIGHEST_SKILL; ++i) {
		// Skip specialized, tradeskills (fishing excluded), Alcohol Tolerance, and Bind Wound
		if (EQEmu::IsSpecializedSkill((SkillUseTypes)i) ||
				(EQEmu::IsTradeskill((SkillUseTypes)i) && i != SkillFishing) ||
				i == SkillAlcoholTolerance || i == SkillBindWound)
			continue;

		pp->skills[i] = database.GetSkillCap(pp->class_, (SkillUseTypes)i, 1);
	}


	if(!RuleB(Character, HealOnLevel)) {
		int mhp = CalcMaxHP();
...
Note: Untested. Just found the appropriate places in the code to copy/paste from and to.
Reply With Quote
  #13  
Old 09-22-2015, 01:05 PM
starblight's Avatar
starblight
Sarnak
 
Join Date: Jan 2007
Posts: 76
Default

I had seen a post about how to do this but it was using the old code not the lua. so sounds like I would have had to revert back to an old script or rewrite the code. setting it at level up also would have maxed out all skills. It is a thin line but still faster then I would like. While both fixes work I still would rather have the Character::SkillUpModifier work so I can fine tune the rate. As we play I am still figuring out the best rate. While the default settings was way to slow my new setting is a little fast. I most likely should have set it closer to 30%-40%. I am curious though are others having issues with the default skill rate being very slow? It is a lot slower then I recall on live.
Reply With Quote
  #14  
Old 09-22-2015, 03:16 PM
AdrianD
Discordant
 
Join Date: Dec 2013
Posts: 297
Default

Thanks for posting that Shendare. Bookmarked for later use.

I think the perception of rate of skillup on or vs live will be varied across the board. I'm pretty sure they changed it several times during the life of EQ. I recall it being slower in earlier expansions I played in but, this is my perception.

My rule_value for this setting is at 100 with recent code. I will have the same rate as anyone else with the same code, et al. My perception is:

Quote:
I have noticed for quite a while that skills like parry/dodge/rip/foraging? and some others skill up extremely fast. Even with mid/high skill values (say, max for a lvl 40) these skills balloon quickly. On the other hand, weapon skills/offense/defense increase much, much slower, maybe 10/20+ times slower.
I don't think most of them are slow at all. Weapon skills/offense/defense could use a tweak, but that's just me.

Quote:
While both fixes work I still would rather have the Character::SkillUpModifier work so I can fine tune the rate.
I think you may need to alter the code if you want it to work how you want it to work.
Reply With Quote
  #15  
Old 09-22-2015, 03:22 PM
Kingly_Krab
Administrator
 
Join Date: May 2013
Location: United States
Posts: 1,589
Default

As for Shendare's resolution, you can also do that in Perl (this would go in your global_player.pl):
Code:
sub EVENT_LEVEL_UP {
    foreach my $skill (0..55, 62, 66, 67, 70..74) {
        if($client->CanHaveSkill($skill) && $client->MaxSkill($skill, $client->GetClass(), $ulevel) > $client->GetRawSkill($skill)) {
            $client->SetSkill($skill, $client->MaxSkill($skill, $client->GetClass(), $ulevel));
        }
    }
}
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 07:36 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3