Every faction that exists on a server is listed in the
faction_list table. This table includes a unique id, a name, and a starting (base) faction. This starting value is combined with any race/class/deity adjustments that apply (see
faction_list_mod table) to create the starting faction for characters when they are born. As characters interact with the world, they can gain/lose faction through their actions, be that killing or questing. These values are continuously updated in the
[ as of 3/6/2019 we have imported the client faction list and we now use these renumbered factions. The client does not have a base for any of the factions, all of the offsets are realized in faction_list_mod instead. This does not mean that the base cannot be altered for custom results. ]
Each faction has a minimum and a maximum value, at which point no more faction can be lost or gained. This information is stored in the faction_base_data table. The default BASE maximum is 2000 and the BASE minimum is -2000 if there is no entry. The amount a character can earn is based on these constants AND the factions initial base value. For example, a faction that starts out at 0 (base value in faction_list) is the simple case.
The character can earn or lose faction until his _earned _faction reaches the factions min or max. The base value for a faction impacts this in cases where that base is non zero. For a faction that starts out at -500 for example, the character can earn 2500 (500 to make up for initial impressions, and 2000 more to get into good graces. If a faction starts you out at a positive value, say 300, you can only earn 1700 more, but you can lose 2300.
A character's unmodified faction value at any time is calculated by the following formula:
current_faction = faction base (faction_list table) + faction_hits_accumulated (faction_values table)
This value is further adjusted by any impact the character's race/class/deity have on the faction in question. These modifications are stored in the
faction_list_mod table. These adjustments cannot be made up for by actions or deeds. They are permanent marks on the character's record, and can therefore impact how high (or low) a character can get with the faction in question. They can be temporarily masked by things like illusions, but cannot be completely erased.
The following depicts a set of factions and the values from all these tables and how they add up.
Looking at a couple examples from above: (generated by https://github.com/EQEmu/Server/blob/master/utils/sql/git/optional/2015_01_25_MyFaction_Stored_Procedure.sql).
The Stone Hive Bixies start at -1000 to everyone. That means the current_value column is limited to the range of +3000 and -1000. This allows the character to earn up to 3000 (max) and lose down to -1000 (min). Since there are no race/class/deity adjustments this is a simple case.
The Guards of Qeynos also has a race bump value of 100 in addition to the factions starting value of -100. Therefore the character can earn up to 2100 (2000 + 100 to make up for the starting value) and lose 1900 (to put them at -2000). However, since the sum of the values in race/class/diety is not zero, that is added to the end, allowing the character to exceed the max and reach 2200. This is because the faction is predisposed to like them more than other characters. Conversely, if a character has a negative value for one of them, lets say race -950, and no other adjustments and a starting base of 0, that character can earn the normal 2000 but still only max out at a total of 1050. This is why some races, classes or deity worshippers can not attain ally without further assistance like an illusion which would negate the 500 penalty.
Faction values for each level are as follows. The number on the left is the TOTAL value as seen in the table above (+ or minus any effects like illusions, etc):
Total Faction Value
1100 -> ABOVE
750 -> 1099
500 -> 749
100 -> 499
0 -> 99
-100 -> -1
-500 -> -101
-750 -> -501
BELOW -> -751