View Single Post
  #1  
Old 12-08-2011, 02:09 AM
revloc02c's Avatar
revloc02c
Hill Giant
 
Join Date: Aug 2010
Location: UT
Posts: 215
Default Zone:HotZoneBonus should also be a multiplier

This is more of a suggestion that could be a submission:

In exp.cpp
Code:
		//get modifiers
		if(RuleR(Character, ExpMultiplier) >= 0){
			totalmod *= RuleR(Character, ExpMultiplier);
		}

		if(zone->newzone_data.zone_exp_multiplier >= 0){
			zemmod *= zone->newzone_data.zone_exp_multiplier;
		}

		if(RuleB(Character,UseRaceClassExpBonuses))
		{
			if(GetBaseRace() == HALFLING){
				totalmod *= 1.05;
			}

			if(GetClass() == ROGUE || GetClass() == WARRIOR){
				totalmod *= 1.05;
			}
		}

		if(zone->IsHotzone())
		{
			totalmod += RuleR(Zone, HotZoneBonus);
		}

		add_exp = int32(float(add_exp) * totalmod * zemmod);
The HotZoneBonus is added to the modifier, and it should be multiplied just like the other modifiers are. Granted the value in the rule_values table (default is 0.75 I think) may need to change to accommodate this, but multiplying make more sense.

Consider:
If you decided to make your ExpMultiplier really high, say 10 for arguments sake (not a likely value I know, but to help make the point) then adding a 0.75 to the modifier is relatively a very small increase, only 7.5%.
But if your ExpMultiplier was really low...I actually set it to 0.01 (along with some other changes mind you) and when I got to a hot zone I was getting 75 times as much exp as I should have (that's 7500%)...kinda throws things off a little when you kill one goblin in Runny Eye and gain 23 levels.

Changing the code to this:
Code:
if(zone->IsHotzone())
{
	totalmod *= RuleR(Zone, HotZoneBonus);
}
...would keep the bonus consistent. Set the db value to 1.5 and you'd always have 150% exp bonus in hot zones regardless of what the base ExpMultiplier is; set it to 2 and you'll always get 200% exp etc.

One caution if this change is implemented, if the HotZoneBonus value in the rule_values table stays at 0.75 it is going to make hot zones only give 75% exp of a normal zone, making it more of a cold-zone-penalty. So the db value would have to change along with the cpp code.
Reply With Quote