Project 1999

Go Back   Project 1999 > Blue Community > Blue Server Chat

Closed Thread
 
Thread Tools Display Modes
  #51  
Old 11-19-2009, 02:42 PM
Swank Swank is offline
Skeleton


Join Date: Oct 2009
Posts: 18
Default

It's funny you mentioned MW2 and Dragon Age, cause they've actually helped me break my addiction to this server, and my masochistic melee ways [You must be logged in to view images. Log in or Register.]

In all seriousness I appreciate all the dev's work, and will keep lurking here till I here some new news on this subject.
  #52  
Old 11-19-2009, 09:55 PM
Haynar Haynar is offline
Developer

Haynar's Avatar

Join Date: Oct 2009
Location: West of the Mississippi
Posts: 2,955
Default

I have been looking at the AC interval tables for mitigation. The tables do not seem all that unreasonable. I tweaked on a few things, and found it takes very few changes to make huge swings in the effect of AC at different levels.

I am looking into the mitigation range, as that looks like where some changes could be made. I have to do some calculations and see how best to make changes and run a few more parses after. This really only covers melee mitigation what I have been testing. If there are issues with avoidance, the first place I would check are in the rules set for the server. The melee attack rate was increased previously on the server. My big question was how this was done, so I can see if this affected other things.

It looks like the easy answer to increase melee hit rates is to increase Combat:BaseHitChance. The default setting is 69. The NPC's get Combat:NPCBonusHitChance at 26. 69 + 26 = 95, so I assume that is why they normally have a 95% chance of hitting. I havent tested results of raising one, without properly offsetting other, but I imaging it will make avoidance be a rare occurance. So this needs looked at more.

I will do some tweaks on the rates of mitigation, with how changes to the interval tables for AC and post what I find when I get finished. I do not imagine any major tweaks are necessary here, but I want to see if the interval is a fixed differential or if it varies with level. But that is where I am currently investigating mitigation.

Will post more as I figure more out.

Haynar
  #53  
Old 11-20-2009, 12:45 AM
stormlord stormlord is offline
Planar Protector


Join Date: Nov 2009
Posts: 1,165
Default

Quote:
Originally Posted by Haynar [You must be logged in to view images. Log in or Register.]
I have been looking at the AC interval tables for mitigation. The tables do not seem all that unreasonable. I tweaked on a few things, and found it takes very few changes to make huge swings in the effect of AC at different levels.

I am looking into the mitigation range, as that looks like where some changes could be made. I have to do some calculations and see how best to make changes and run a few more parses after. This really only covers melee mitigation what I have been testing. If there are issues with avoidance, the first place I would check are in the rules set for the server. The melee attack rate was increased previously on the server. My big question was how this was done, so I can see if this affected other things.

It looks like the easy answer to increase melee hit rates is to increase Combat:BaseHitChance. The default setting is 69. The NPC's get Combat:NPCBonusHitChance at 26. 69 + 26 = 95, so I assume that is why they normally have a 95% chance of hitting. I havent tested results of raising one, without properly offsetting other, but I imaging it will make avoidance be a rare occurance. So this needs looked at more.

I will do some tweaks on the rates of mitigation, with how changes to the interval tables for AC and post what I find when I get finished. I do not imagine any major tweaks are necessary here, but I want to see if the interval is a fixed differential or if it varies with level. But that is where I am currently investigating mitigation.

Will post more as I figure more out.

Haynar
Grats for looking into it. Only issue I see so far is I get hit a lot, but the other day I noticed my level 5/6 alts were getting hit less than normal by the level 1's. For example, one of them missed 3 times in a row.

I don't think the lower levels should be changed too much. I like the toughness of everything so far. If it was any easier, it would be too much like live where everyone has this mindset where they gotta be max level. I hate that attitude so much. They'll never be happy.

For example... my warrior and monk are killing dark blues, evens and yellows. I'd say that the evens are doable at level 6 for the monk, but hard. The yellows are getting too difficult for the monk to kill. However, I haven't upgraded his armor, yet. I see a lot of people who don't even have armor at level 6 (one guy just had a couple peices of cloth armor). The warrior can kill evens at level 4 without too much trouble. His benefit is he has a lot of hitpoints and can wield 2 handers.

Ofcourse, when I go into groups we're routinely killing evens/yellows/reds. Keep that in mind! It would be weird/wrong to be killing all reds in a group. I know some peple may disagree with me on this, but it just wouldn't seem right to me.
Last edited by stormlord; 11-20-2009 at 12:54 AM..
  #54  
Old 11-20-2009, 12:51 AM
sever sever is offline
Orc


Join Date: Oct 2009
Posts: 35
Default

Quote:
The NPC's get Combat:NPCBonusHitChance at 26. 69 + 26 = 95
I can relate to this directly, as it's just about right around the npc level area my 50 gets owned vs. doing the owning. Avoidance seems to be like 1% per skill - dodge/riposte/whatever - even vs. level 1's at 50; they just miss me plenty.
  #55  
Old 11-20-2009, 02:32 AM
Haynar Haynar is offline
Developer

Haynar's Avatar

Join Date: Oct 2009
Location: West of the Mississippi
Posts: 2,955
Default

I have some new equations for the mitigation to test, plus a few other little tweaks to them to be more like I remember live. I will run a few tests on my little server here at home tomorrow, and post some possible mitigation solutions tomorrow. I left the interval values for AC alone, but changed the slopes of the mitigation vs AC basically.

Haynar
  #56  
Old 11-20-2009, 05:16 AM
Skeletonya Skeletonya is offline
Aviak


Join Date: Nov 2009
Posts: 99
Default

[You must be logged in to view images. Log in or Register.]
  #57  
Old 11-20-2009, 10:36 AM
Haynar Haynar is offline
Developer

Haynar's Avatar

Join Date: Oct 2009
Location: West of the Mississippi
Posts: 2,955
Default

Here are the changes I made to attack.cpp

I changed the combat rating slightly, lowering just a tad.

Changed the scaling on d1_chance and d2_d19_chance.

I added a d20_chance which basically says any mob can hit for max, 5% of time, no matter how high your AC.

It scales pretty well I think.

Hope this helps in coming up with a solution for melee.

Haynar

Code:
void Mob::MeleeMitigation(Mob *attacker, sint32 &damage, sint32 minhit)
{
	if(damage <= 0)
		return;

	Mob* defender = this;
	int totalMit = 0;

	switch(GetAA(aaCombatStability)){
		case 1:
			totalMit += 2;
			break;
		case 2:
			totalMit += 5;
			break;
		case 3:
			totalMit += 10;
			break;
	}

	totalMit += GetAA(aaPhysicalEnhancement)*2;
	totalMit += GetAA(aaInnateDefense);
	totalMit += GetAA(aaDefensiveInstincts)*0.5;

	if(RuleB(Combat, UseIntervalAC)){
		//AC Mitigation
		sint32 attackRating = 0;
		uint16 ac_eq100 = 125;
		if(defender->GetLevel() < 20)
		{
			ac_eq100 += 15 * defender->GetLevel();
		}
		else if(defender->GetLevel() < 50)
		{
			ac_eq100 += (285 + ((defender->GetLevel()-19)*30));
		}
		else if(defender->GetLevel() < 60)
		{
			ac_eq100 += (1185 + ((defender->GetLevel()-49)*60));
		}
		else if(defender->GetLevel() < 70)
		{
			ac_eq100 += (1785 + ((defender->GetLevel()-59)*90));
		}
		else
		{
			ac_eq100 += (2325 + ((defender->GetLevel()-69)*125));
		}

		attackRating = 10 + attacker->GetATK();

		sint32 defenseRating = defender->GetAC();
		defenseRating += 125;
		defenseRating += (totalMit * defenseRating / 100);

		double d1_chance;
		double d2_d19_chance;
		double d20_chance;

		double combat_rating = (defenseRating - attackRating);

		combat_rating = 100 * combat_rating / (double)ac_eq100;
		combat_rating -= 20;

		d1_chance = ((combat_rating) * 0.3);
		d2_d19_chance = 48.0 + ((combat_rating) * 0.42);

		if(d1_chance < 1.0)
			d1_chance = 1.0;

		if(d2_d19_chance < 4.0)
			d2_d19_chance = 4.0;

		d20_chance = d1_chance + d2_d19_chance;

		if (d20_chance > 95.0)
			d20_chance = 95.0;

		double roll = MakeRandomFloat(0, 100);
	
		int interval_used = 0;
		if(roll <= d1_chance)
		{
			interval_used = 1;
		}
		else if(roll <= (d20_chance))
		{
			interval_used = 1 + (int)((((roll-d1_chance) / d2_d19_chance) * 18) + 1);
		}
		else
		{
			interval_used = 20;
		}

		//PS: this looks WRONG but there's a method to the madness
		int db = minhit;
		double di = ((double)(damage-minhit)/19);
		damage = db + (di * (interval_used - 1));
	}
	else{
		////////////////////////////////////////////////////////
		// Scorpious2k: Include AC in the calculation
		// use serverop variables to set values
		int myac = GetAC();
		if (damage > 0 && myac > 0) {
			int acfail=1000;
			char tmp[10];

			if (database.GetVariable("ACfail", tmp, 9)) {
				acfail = (int) (atof(tmp) * 100);
				if (acfail>100) acfail=100;
			}

			if (acfail<=0 || rand()%101>acfail) {
				float acreduction=1;
				int acrandom=300;
				if (database.GetVariable("ACreduction", tmp, 9))
				{
					acreduction=atof(tmp);
					if (acreduction>100) acreduction=100;
				}
		
				if (database.GetVariable("ACrandom", tmp, 9))
				{
					acrandom = (int) ((atof(tmp)+1) * 100);
					if (acrandom>10100) acrandom=10100;
				}
				
				if (acreduction>0) {
					damage -= (int) (GetAC() * acreduction/100.0f);
				}		
				if (acrandom>0) {
					damage -= (myac * MakeRandomInt(0, acrandom) / 10000);
				}
				if (damage<1) damage=1;
				mlog(COMBAT__DAMAGE, "AC Damage Reduction: fail chance %d%%. Failed. Reduction %.3f%%, random %d. Resulting damage %d.", acfail, acreduction, acrandom, damage);
			} else {
				mlog(COMBAT__DAMAGE, "AC Damage Reduction: fail chance %d%%. Did not fail.", acfail);
			}
		}

		damage -= (totalMit * damage / 100);

		if(damage != 0 && damage < minhit)
			damage = minhit;
	}


	//reduce the damage from shielding item and aa based on the min dmg
	//spells offer pure mitigation
	damage -= (minhit * defender->itembonuses.MeleeMitigation / 100);
	damage -= (damage * defender->spellbonuses.MeleeMitigation / 100);

	if(damage < 0)
		damage = 0;

	mlog(COMBAT__DAMAGE, "Applied %d percent mitigation, remaining damage %d", totalMit, damage);
}
  #58  
Old 11-20-2009, 11:57 AM
Enig Enig is offline
Skeleton


Join Date: Nov 2009
Posts: 15
Default

Thanks Haynar, keep fighting the good fight [You must be logged in to view images. Log in or Register.]
  #59  
Old 11-20-2009, 12:08 PM
Wildir Wildir is offline
Orc


Join Date: Oct 2009
Posts: 37
Default

thanks for the work, I am not melee class atm, but as a cleric, I can appreciate the concern, and hope this gets "tweeked".
I think productive posts like this is what is needed, the whining needs to stop and lets find a solution to help.
I love this game, and am having fun again playing MMO, so keep up the good work!
Wildir
  #60  
Old 11-20-2009, 12:54 PM
Aeolwind Aeolwind is offline
Developer

Aeolwind's Avatar

Join Date: Oct 2009
Location: Watauga, TN
Posts: 1,641
Send a message via AIM to Aeolwind Send a message via MSN to Aeolwind Send a message via Yahoo to Aeolwind
Default

Nice code Haynar, going to submit it to KLS and see what she thinks about it. If not ready for prime time Emu as a rule value but would work for us we'll get it implemented here exclusively.
Closed Thread


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 03:11 PM.


Everquest is a registered trademark of Daybreak Game Company LLC.
Project 1999 is not associated or affiliated in any way with Daybreak Game Company LLC.
Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.