About Log_Anal

Log_Anal is an application that uses logs generated by HLDS (the Half-Life Dedicated Server) to create pages of HTML displaying statistics about your players. You can use templates to customize and layout your stats pages however you wish. Log_Anal is fully configurable and will run on any platform.

One of Log_Anal's more outstanding features is its cross-platform support. Log_Anal will run on any platform with a Java Runtime Environment (JRE) installed on it. Also, Log_Anal will work on any Half-Life mod (or Half-Life itself, of course).

Another major feature is that Log_Anal is fully configurable. When I say fully, I mean FULLY. You can control every setting that Log_Anal uses. You can configure everything from which stats are generated right down to image sizes and whether or not to use graphical percentage bars. Don't be afraid, I have included a configuration utility that greatly simplies the setup process.

One feature that sets Log_Anal apart from other stats packages is that the skill rating formula used to rank players is user-definable. To top even that, there are two basic forms of the equation to choose from. One just uses flat overall statistics to calculate a rating while the other uses map weighting to eliminate players from playing only a few maps they are good at to achieve higher ratings. The second form forces players to play all maps if they expect to compete for the top spots. Also, Log_Anal can take your opponents' skill into consideration. It does this kill by kill. The better your opponent that you kill, the higer your rating goes up. Conversely, the worse your opponent that kills you, the lower your rating drops.

A nice feature to relieve administrative duties is Log_Anal's built-in timer to auto-update stats. You can configure Log_Anal to update however often you wish. Also, you can make Log_Anal update and immediately exit. This is useful especially for Linux admins because you can make Log_Anal work with cron.

Log_Anal's output is configurable via templates. You can edit these templates to change the layout of the page in just about any way that you can imagine. The templates use special tags to tell Log_Anal to where place the various stats. You can define tags used by Log_Anal to change various attributes such as ALIGN, BGCOLOR, COLOR, CLASS, or any others. This allows for extreme versatility. You can even use style sheets.

Another nice thing about Log_Anal is that for the amount of statistics it generates, it is extremely efficient. It will not lag your server while the stats are updating. You won't even notice that they are updating. Log_Anal accomplishes this by the use of a data file that contains your players' statistics. This eliminates the need to re-parse the same logs over and over again. Another advantage to this data file is that Log_Anal keeps lifetime stats for your players. You're probably thinking: 'Well, wouldn't that data file get pretty large after a while?'. If you are, you would be correct. It can get rather large. There is a variable that you can set to delete players that don't play very often on your server. If the player doesn't reconnect to your server within the time you specify, their stats get deleted.

How does Log_Anal calculate ratings?

There is one basic formula that Log_Anal uses:

rating=(kills/deaths)*kills/deaths + (kills/time)*kills/time - (1/time)/time + (constant)

The parts of the formula in parentheses represent the definable coefficients via the configuration utility or log_anal.ini. You have the option of using the formula as it stands or incorporating map-weighting to reduce players' ratings that only play on a few maps. The map-weighting only affects the kills/deaths part of the equation. It calculates a separate kills/deaths rating for each map and adds them together. The form for each map's kills/deaths rating is as follows:

rating=(kills/deaths)*kills/deaths*killPer

The (kills/deaths) is the definable coefficient for kills/deaths. The kills and deaths are the number of kills and deaths just for that map. killPer is a percentage of total kills on that map. This number cannot be higher than that map's percentage of the total number of maps. In other words, if a player has 80% of his kills on a certain map and there are 5 maps in the rotation, his killPer would only be 20% (or .2). This is used to limit how high of ratings players can get by playing on a few select maps. With the addition of the opponent skill aspect the formula becomes a bit more complicated. As with the rest of the equation, you can weight or completely eliminate opponent skill considerations. These opponent skill considerations are done kill by kill. Each player has an opponent skill rating that is completely independent of any other stats. Kills/Deaths, frags/minutes, or any others do not affect this rating. The only thing that affects this rating is your oppenent's opponent skill rating that you kill or are killed by. Each time a player is killed, a probability of winning is calculated for each player. Here is the form of the probability equation:

probability=1/(1 + 10^[(opponentSkill - yourSkill)/400])

As you would imagine, the higher an opponent's skill, the lower your probability of winning a fight. The other major part of the equation is what you might call a development coefficient. The higher your skill, the harder it becomes for your skill to keep going up. The lower your skill, the easier it becomes to raise your skill. This formula is very simple:

dev_coeff=(eq_1/skill)/skill

The "eq_1/skill" is a user defined coefficient. The higher you set it, the more skill points you get for each kill. "skill" is your opponent skill rating. There are two different formulas for the killer and the killee. The person that won:

skill=skill + dev_coeff*(1 - probability)

The person that lost:

skill=skill - dev_coeff*probability

If your probability of winning is high but you lose, you lose a lot of points. If your probability of winning is low but you win, you gain a lot of points. This part of the formula can be weighted with the eq_skill variable. The opponent skill rating is simply added to the rest of the overall rating.