aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinDarth <borzifrancesco@gmail.com>2015-12-14 01:54:40 +0100
committerShinDarth <borzifrancesco@gmail.com>2015-12-14 20:09:07 +0100
commit3d1614b622a6b7b0a827b5fad45516f31cb605cd (patch)
tree77c7f7e92461a95d98c5551755348ebff6d0092c
parent54424aff3051bdc2a05d44cbd56adf6f47b98229 (diff)
Core/Arena: create more arena configs
- made rating modifiers configurable - made arena points rate configurable
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp22
-rw-r--r--src/server/game/World/World.cpp5
-rw-r--r--src/server/game/World/World.h5
-rw-r--r--src/server/worldserver/worldserver.conf.dist40
4 files changed, 65 insertions, 7 deletions
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 7806e0b343b..423273c9904 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -612,6 +612,8 @@ uint32 ArenaTeam::GetPoints(uint32 memberRating)
else if (Type == ARENA_TEAM_3v3)
points *= 0.88f;
+ points *= sWorld->getRate(RATE_ARENA_POINTS);
+
return (uint32) points;
}
@@ -673,7 +675,7 @@ int32 ArenaTeam::GetMatchmakerRatingMod(uint32 ownRating, uint32 opponentRating,
*/
// Real rating modification
- mod *= 24.0f;
+ mod *= sWorld->getFloatConfig(CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER);
return (int32)ceil(mod);
}
@@ -683,21 +685,27 @@ int32 ArenaTeam::GetRatingMod(uint32 ownRating, uint32 opponentRating, bool won
// 'Chance' calculation - to beat the opponent
// This is a simulation. Not much info on how it really works
float chance = GetChanceAgainst(ownRating, opponentRating);
- float won_mod = (won) ? 1.0f : 0.0f;
// Calculate the rating modification
float mod;
/// @todo Replace this hack with using the confidence factor (limiting the factor to 2.0f)
- if (won && ownRating < 1300)
+ if (won)
{
- if (ownRating < 1000)
- mod = 48.0f * (won_mod - chance);
+ if (ownRating < 1300)
+ {
+ float win_rating_modifier1 = sWorld->getFloatConfig(CONFIG_ARENA_WIN_RATING_MODIFIER_1);
+
+ if (ownRating < 1000)
+ mod = win_rating_modifier1 * (1.0f - chance);
+ else
+ mod = ((win_rating_modifier1 / 2.0f) + ((win_rating_modifier1 / 2.0f) * (1300.0f - float(ownRating)) / 300.0f)) * (1.0f - chance);
+ }
else
- mod = (24.0f + (24.0f * (1300.0f - float(ownRating)) / 300.0f)) * (won_mod - chance);
+ mod = sWorld->getFloatConfig(CONFIG_ARENA_WIN_RATING_MODIFIER_2) * (1.0f - chance);
}
else
- mod = 24.0f * (won_mod - chance);
+ mod = sWorld->getFloatConfig(CONFIG_ARENA_LOSE_RATING_MODIFIER) * (-chance);
return (int32)ceil(mod);
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index c41caa8f955..93adc30f9c4 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -483,6 +483,7 @@ void World::LoadConfigSettings(bool reload)
rate_values[RATE_AUCTION_DEPOSIT] = sConfigMgr->GetFloatDefault("Rate.Auction.Deposit", 1.0f);
rate_values[RATE_AUCTION_CUT] = sConfigMgr->GetFloatDefault("Rate.Auction.Cut", 1.0f);
rate_values[RATE_HONOR] = sConfigMgr->GetFloatDefault("Rate.Honor", 1.0f);
+ rate_values[RATE_ARENA_POINTS] = sConfigMgr->GetFloatDefault("Rate.ArenaPoints", 1.0f);
rate_values[RATE_INSTANCE_RESET_TIME] = sConfigMgr->GetFloatDefault("Rate.InstanceResetTime", 1.0f);
rate_values[RATE_TALENT] = sConfigMgr->GetFloatDefault("Rate.Talent", 1.0f);
if (rate_values[RATE_TALENT] < 0.0f)
@@ -1046,6 +1047,10 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_ARENA_START_MATCHMAKER_RATING] = sConfigMgr->GetIntDefault ("Arena.ArenaStartMatchmakerRating", 1500);
m_bool_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfigMgr->GetBoolDefault("Arena.ArenaSeason.InProgress", true);
m_bool_configs[CONFIG_ARENA_LOG_EXTENDED_INFO] = sConfigMgr->GetBoolDefault("ArenaLog.ExtendedInfo", false);
+ m_float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_1] = sConfigMgr->GetFloatDefault("Arena.ArenaWinRatingModifier1", 48.0f);
+ m_float_configs[CONFIG_ARENA_WIN_RATING_MODIFIER_2] = sConfigMgr->GetFloatDefault("Arena.ArenaWinRatingModifier2", 24.0f);
+ m_float_configs[CONFIG_ARENA_LOSE_RATING_MODIFIER] = sConfigMgr->GetFloatDefault("Arena.ArenaLoseRatingModifier", 24.0f);
+ m_float_configs[CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER] = sConfigMgr->GetFloatDefault("Arena.ArenaMatchmakerRatingModifier", 24.0f);
m_bool_configs[CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN] = sConfigMgr->GetBoolDefault("OffhandCheckAtSpellUnlearn", true);
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 133ac3f2386..ed5e218b084 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -185,6 +185,10 @@ enum WorldFloatConfigs
CONFIG_STATS_LIMITS_PARRY,
CONFIG_STATS_LIMITS_BLOCK,
CONFIG_STATS_LIMITS_CRIT,
+ CONFIG_ARENA_WIN_RATING_MODIFIER_1,
+ CONFIG_ARENA_WIN_RATING_MODIFIER_2,
+ CONFIG_ARENA_LOSE_RATING_MODIFIER,
+ CONFIG_ARENA_MATCHMAKER_RATING_MODIFIER,
FLOAT_CONFIG_VALUE_COUNT
};
@@ -409,6 +413,7 @@ enum Rates
RATE_AUCTION_DEPOSIT,
RATE_AUCTION_CUT,
RATE_HONOR,
+ RATE_ARENA_POINTS,
RATE_TALENT,
RATE_CORPSE_DECAY_LOOTED,
RATE_INSTANCE_RESET_TIME,
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 8619a864998..840b819fe99 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1939,6 +1939,13 @@ Rate.Auction.Cut = 1
Rate.Honor = 1
#
+# Rate.ArenaPoints
+# Description: Arena points gain rate.
+# Default: 1
+
+Rate.ArenaPoints = 1
+
+#
# Rate.Talent
# Description: Talent point rate.
# Default: 1
@@ -2431,6 +2438,39 @@ Arena.ArenaStartPersonalRating = 0
Arena.ArenaStartMatchmakerRating = 1500
#
+# Arena.ArenaWinRatingModifier1
+# Description: Modifier of rating addition when winner team rating is less than 1300
+# be aware that from 1000 to 1300 it gradually decreases automatically down to the half of it
+# (increasing this value will give more rating)
+# Default: 48
+
+Arena.ArenaWinRatingModifier1 = 48
+
+#
+# Arena.ArenaWinRatingModifier2
+# Description: Modifier of rating addition when winner team rating is equal or more than 1300
+# (increasing this value will give more rating)
+# Default: 24
+
+Arena.ArenaWinRatingModifier2 = 24
+
+
+#
+# Arena.ArenaLoseRatingModifier
+# Description: Modifier of rating subtraction for loser team
+# (increasing this value will subtract more rating)
+# Default: 24
+
+Arena.ArenaLoseRatingModifier = 24
+
+#
+# Arena.ArenaMatchmakerRatingModifier
+# Description: Modifier of matchmaker rating
+# Default: 24
+
+Arena.ArenaMatchmakerRatingModifier = 24
+
+#
# ArenaLog.ExtendedInfo
# Description: Include extended info to ArenaLogFile for each player after rated arena
# matches (guid, name, team, IP, healing/damage done, killing blows).