News
FAQ
Downloads
Samples
Links

E-Mail

Proudly Hosted By
Telefragged Home

[an error occurred while processing this directive]

CS 1.1 Fixes March 21st, 2001

Heyo there... I have to apologize for the lack of updates and response to e-mails on cs_stats. This whole Real-Life thing is getting in the way, and I've had little to no time. Poor excuse, I know, but that's where I'm at. Luckily, Mark McCormack is working on fixing the 1.1 issue and is also addressing some other bugs/enhancements. He's going to pretty much take over the entire thing from me and I'll just assist him if there's something he needs clarification on. He will be putting up his own site for it, and I should have the URL to that in a little bit.

So yes, development of cs_stats is going to continue, and you'll still be able to use the stats you've collected thus far. I suppose I'm happy to see that people are still using this more than a year after I pushed it out. I just feel bad for not having the time to spend on this. Of course, if you really desparately wanted to put something in you could grab the code and just do it :-)

Version 0.89 released! December 5th, 2000

Woohoo, a new version! cs_stats has found a new developer. His name is Mark McCormack, and he's both willing and able to take on developing for cs_stats. I've posted the latest version that he put together, complete with updates for CS 1.0. Check it out, and send him a note to thank him for taking on this project!

Looking for someone to take over cs_stats August 30th, 2000

If you've sent me e-mails over the past month or so, I apologize if I didn't respond to it. I've been really swamped at work, and there hasn't been any free time to work on freelance stuff. The bad part is I don't see things slowing down for a while. I haven't even played CS or any HL mod for that matter in over a month. I code full-time during the day for my RL job. That and the fact it's summer time has meant what little free time I've got has not been spent in front of a computer. As a result, I'm looking for someone to take over the coding effort here with cs_stats so that it might live on and people can get through Beta7 now.

Zaph has a pretty full plate right now, too, so he doesn't have the time to dedicate either. I'm not dropping the entire project, I just want to be able to give the admins out there more frequent versions than what I've been able to work on. So consider this an open invite. If you or someone you know has Visual C++ experience (MFC is a big plus) and is willing/able to take on this project and lead the charge, please send me a note.

I'll provide lots of assistance of course to the heir apparent(s) to get them up and running with the codebase we've got. Posted on the downloads page is I believe version 0.87 or 0.86, which is more than enough to learn about cs_stats and how it works. That should give you an idea on whether you feel comfortable taking on the task before committing to anything.

Version 0.87 released June 15th, 2000

Well it was an easy fix, at least! I've just posted 0.87, which fixes the bug with the new [CT] and [TERRORIST] tags in the player names. I'm going to start in right away on keeping track of team assignments, so 0.88 should be along in a week or so. Lots of cool things to do with that data!

Bugs with 6.5 June 15th, 2000

Well it appears they (being the CS team) have added a long sought-after feature to the log files: team association for players. This is really cool, and long overdue, but it completely BROKE cs_stats and probably all the other stats programs. A little heads up from them would have been nice! Needless to say, I'm hot on the trail right now to get it fixed. Hopefully tonight, Thursday.

I don't forsee adding any new features just yet (like keeping track of CT vs T stuff) since most admins would like to get this fixed first. If you're currently using cs_stats and are seeing "0" deaths for people, then you're probably going to have to blow away the stats and start anew once I get this fixed. I'm sorry it has to be that way (and hopefully you're saving the log files) but this one is out of my control.

Stay tuned... should have a post in a couple hours here.

Version 0.86 Released May 12th, 2000

Version 0.86 was posted late last night. There's quite a few cool new things in here:

  • Much-improved algorithms, which have sped up processing time dramatically
  • New overall rating stat
  • Minimum minutes filter to go along with the kills + deaths minimum filter
  • Sequence row option for player tables on the WeaponRanking template
  • Sequence row option for the opponent section on individual pages
  • Number of opponents listed is now configurable (5 is the default)
  • Ability to sort opponents on number of kills/deaths instead of just K:D ratio
  • HE Grenades added to Weapon template
  • Corrupt log file processing option (delete, move, or stop processing)
Probably the coolest new addition to cs_stats is... a new programmer! Kevin 'Zaph' Burfitt has joined the "team" of now two whole programmers. Zaph downloaded the source code and made some suggestions as to improving the base algorithms that are used quite heavily. Nearly all of the major improvements in speed are a result of his performance tuning skills. After making a handful of his suggestions, one thing led to another, and he accepted my invitation to work on the code with me. One of the first things he's going to work on is a new stat called "Average Life Expectancy." This is how long a player survives in a round on average. One minute, two minutes, or 20 seconds? Should be a really cool, and very telling, new stat. One that will work its way into the overall rating.

Speaking of the overall rating, I suppose I should share the actual formula for calculating this. Initially, I was thinking about making the rating relative to the overall averages calculated by the server. Thinking about that more, however, it became obvious that the rating won't be meaningful across all servers that run cs_stats. A player scoring 200 on one box might only score 150 on another. So, I gathered averages from nearly 2000 log files... a span of about 3 months, and close to 10,000 players. I used the averages for that range to come up with the base formula. It weighs certain stats more heavily than others, and there are 5 stats being used in the calculation: K:D ratio, kills per minute, deaths per minute, kills per round, and deaths per round. The overall formula is now in the FAQ, if you care to check out how it's actually calculated.

The new sequence tables are already built into the templates, and you should be familiar with how they work. The new opponent listing number is a configuration parameter, found in the same place as all others.

On to version 0.87!

Version 0.85 Released April 16th, 2000

I've just posted version 0.85. This latest release fixes an ugly bug, and adds some cool new features. First the bug. cs_stats was written to match names exactly, IE case-sensitive. Thinking that players named PlaYeR would be able to be kept separate from those named player. Well that works okay if you're on a Unix box, but under Win32, the filename structure is case INsensitive. The second player would wipe out the first. This means that if someone comes along with the same name, just cased differently, that second player would in effect completely wipe out the first one. There have been a few mysterious complaints about stats disappearing, and I'm pretty sure this is why. No more with 0.85! PlaYeR is the same person as player.

The main new feature to the app is alternating player listing rows. This is something I've thought about adding before, but was spurred on by a user's request. Alternating rows is a way to have varying colors and whatnot for a given row sequence. For long lists of players, having varying background colors every 3rd or 4th row helps to break up the monotony and makes stat comparison easier. To find out how to use this new feature, check out the FAQ. I've changed the Contemporary templates and all of the style sheets to include this new look, so you don't have to do anything to get a default version in. I chose to vary the color on every 3rd line, but this is totally customizable.

The last piece added is a configuration parameter which allows you to split the output HTML into two directories; one for player listings, and the other for the individual player pages. This is another user request. Check out the Directories config tab for a new directory called Player HTML Directory. The app will pick up by default your current configuration for the HTML Directory and use that.

Links updated March 29th, 2000

I've updated the links page to reflect a small list of the servers that run cs_stats. Check them out if you're an admin looking for some new templates, or if you're a player and you'd like to check to see if you're listed. Send me a note if you'd like to see your server listed here.

Also, I forgot to mention something in the 0.84 posting news. I've added a configuration parameter for the string of invalid filename characters. This is to allow an admin to add to the list for their particular OS/Web Server that doesn't like filenames with certain characters. Just note that if you change this parameter after already having stat files out there, you'll have to change the filenames of those players who have any characters that you remove/add to the parameter. This is because the app looks specifically for the exact player name in the directory as opposed to scanning all files until it finds a match.

So for example, if you changed the parameter to now include the @ sign, and you've got players with @ in their name, you'll have to change the filename to reflect the $xx value instead of the @ sign. $ is the special symbol for the app to denote an invalid character. The two characters immediately after the $ represent the ASCII equivalent (in hex) of the character that would otherwise be part of the filename. For instance, someone whose player name is @Player@ would have a filename @Player@.csd before you make the change. Once you add the @ sign to the invalid character string, you'd have to change the filename to $40Player$40.csd to avoid "hiding" that player from the app. The app is looking for $40Player$40.csd, not @Player@.csd. Hopefully that makes sense :)

Version 0.84 Released March 25th, 2000

I've just posted version 0.84. This latest release adds a new template, does some major overhauling of the way templates work as a whole, and fixes the latest bug with those huge minute totals and Beta 6.1x.

First the bug. They've added new logging information as of 6.1x. Kinda snuck it in there, with no advance warning. At any rate, the new log info details CT vs T wins, bomb defusings/explosions, hostage rescues, VIP assasinations, and more. This means cool new things for stat trackings. It means one bad thing for existing log parsers; they didn't exactly follow the standard logging output, and as such some new unrecognized lines are being entered. This caused the parser to interpret those new lines as the date/time stamp, and consequently, the stats for number of minutes went bezerk on some players. It's an easy fix on my end, but for those players who now have minutes totalling in the millions, you'll need to go in and manually fix them. Hopefully this prevents any future instance of this happening. I am not tracking any of the new information, as I wanted to get this fix out first. I will be working on keeping track of those new CS-specific items.

Now for some of the cool stuff. I've changed the contemporary templates to all link to a single cascading style sheet. This sheet is named PlayerSortStyleSheet.css. Contrary to the name, this actually controls the color scheme for every contemporary template. Background colors, font colors/sizes/types, percentage bar colors, etc. By changing this single sheet you can quickly and quite easily change the look and feel for the entire set of output files. Should make things much easier for anyone who wants to change the colors to their own liking. I've included three different color schemes: Blue/Yellow (default), Red/Gold, and Black/Green. You'll see these in the Templates/Contemporary folder. Just copy one to your output html directory and name it PlayerSortStyleSheet.css and you'll be good to go.

The last piece is a new template: WeaponListTemplate. This is a complete listing of all the current weapons in CS 6.1, with player sorts by percentage of kills with that weapon. This gives you a feel for what players use a given weapon the most. You may choose to sort on a stat other than percentage of kills. Perhaps you'd like to sort by total number of kills instead. You can do that very easily by embedding special tags within the block of HTML. Look inside the WeaponListTemplate.html file for full details and instructions for doing so. This alternate sort method applies on a per-weapon basis, so you can change the way it sorts from one weapon to the next.

An important thing to note about the weapon rankings is that no weapon is hard-coded. Every table block for listing out the players has a special tag for telling the app what weapon it's supposed to sort with as the key. You'll see this tag:

<!--WEAPON_NAME=knife-->

in every section (obviously with varying weapon names.) If you duplicate a weapon name, you'll have duplicate tables generated. If new weapons come out, you need only copy some other block, change the weapon name, and adjust the weapon information I've put in there. Like everything else, the player stats that get shown (by default, number of kills with weapon, total number of kills, and percentage) can be any of the valid player stats. Just add the proper tags, and the app will fill them in. I'll write up something more formal soon for the FAQ.

Doh March 16th, 2000

I forgot an image file with my first posting of 0.83. It's a small green bar, named appropriately enough small_green_bar.png. I'm confident you'll be able to get around the problem, however I have posted a new download. Same name, except now it includes the missing image. Thanks go to Neil Soane for pointing my goof out :-)

Version 0.83 Released March 15th, 2000

I've just posted version 0.83. This doesn't have anything terribly revolutionary in it; just some small bug fixes for logs that did not include map names, and a feature enhancement to the built-in player editor. When editing a player's stats you can now sort by the various columns for the opponent list, and I've added a K:D column.

A bigger piece is the addition of a new series of templates. I put these together after becoming tired of the classic look. Take a peek at them here. The individual stat pages are also using the new template series, so be sure to check them out. Look for a new folder under Templates named Contemporary (couldn't think of anything cool) and just copy those over to your current directory if you want to use them right away. Or not, and just let them sit :-) These templates make heavy use of cascading style sheets so that the oft-duplicated table colors and font sizes can be quickly and easily changed.

I've added weapon pics for the new weapons (aug and mac10), and I've now included the source images that I use to build the smaller pics. They are in PaintShop Pro format (.PSP) with two layers. One layer is the background color, the other is just the weapon itself. These are much larger than the pics included with the html. This is so that you can change the background color, do fancy stuff, then shrink them down and maintain a higher level of quality during the sampling.

Beta 6 Notes March 14th, 2000

Just a quick note, as there seems to be a bit of confusion about the log files and what's needed for CS Beta6. Let me start by saying that the log files spit out by the HL server engine are always the same, no matter what mod is being played. This is because the server engine is locked code from Valve and cannot be altered. As a result, the logs are very generic. Along the lines of "Player1 killed Player2 with weapon" and nothing more. In a nutshell, the only thing that ever has to change with a new beta of CS are the images of the weapons. Technically, you could use cs_stats with any mod made for HL, so long as you included images that match the weapon names. If you've removed the images from the output html, you wouldn't even need that. This flexibility and lack of anything hard-coded is one of my initial goals.

I will be posting a new release soon; probably tonight or tomorrow. I've got a new template for individual player scores to show off, and a couple niceties added to the editor. There's also a small bug fix for server logs that do not include the map name, so that those stats with map names are able to be tracked again.

Along the lines of the above paragraph, make sure you've got the log on command in your autoexec.cfg file, and NOT server.cfg. For some reason, the logs that are generated by logging through the server.cfg show up with no map name or any other server variables. Don't know why, but if you put the command in your autoexec.cfg (somewhere before the map xyz command) it works fine.

Links Wanted February 29th, 2000

If you're a server admin, and you run some stats using cs_stats, I'd like to link to your site off of here, to give some people a place to go for other templates, check out scores, and what not. After all, stats don't do much good unless people actually see them, right?

So if you run a server and use cs_stats to post the stats, send me a note and I'll put a link up here. Thanks!

Source Code Released February 25th, 2000

Numerous people have requested the source code for cs_stats, and I'd been planning on releasing when I considered it "finished', but I found that there probably won't ever be a final release. Kind of like Counter-Strike, it's just always in Beta. Head to the Downloads page for a link to the download zip file, and some info about the code base.

Version 0.82 Released February 22nd, 2000

Version 0.82 is now out. This fixes a couple bugs, changes the method by which it tracks players, adds a few new stats, and includes a built-in player stat editor.

First the bugs. There was a problem tracking the total number of minutes a player has played. It had to do with missing disconnect messages. If you've got existing stats with some players at huge numbers of minutes, you can use the new built-in editor to manually fix that. Alternately, you can just yank all of the stats and re-process your old log files to have them regenerated.

As I mentioned in previous posts, the method by which cs_stats tracks players needed to be changed. LAN admins could not make use of the app because players do not get Won IDs, or in some cases they all get the same Won ID. To fix this, along with the "same player but separate Won ID" problem, cs_stats now tracks players by their name instead of their Won ID. This is a big change in terms of the stat files, but a small one overall for the actual code. Check out the FAQ page for more info on what I'm doing with special characters in player's names.

Please be aware of the following:

The first time you run this new version, the app is going to convert your existing stat files to the new tracking method. It will match up duplicate names and combine them into one player. You will see this happen a second or two after the app launches. The bottom progress bar will show the conversion status. It will not build any new HTML, so you'll have to run some logs through or manually build them to immediately see the new name matching scheme.

It is important to note that this conversion only happens the one time. This is because it needs to read in *every* stat file to look for duplicates, combine them, yank out the old ones, and write the new data files. This is too intensive to do every time the app runs. If you try and copy in some old stat files after the conversion has happened, the app will still read them and treat them as if they were valid, converting them on the fly. However, because the old WonID files could actually be someone's name (bizarre, I know) there's no way to force a removal of those old files, you'll end up with duplicate names for those two players, and only one of them is going to win out. Eventually the old stat file will get removed from disuse.

Bottom line: don't try and use any old stat files you've got stashed somewhere after the conversion has taken place. Let the app convert your stats, and never look back. I've added code to automatically back up your existing stat files to a "Conversion Backup" directory located under the main app directory, so you can be doubly sure that if anything goes wrong, the old stat files will still be available for another conversion attempt.

You might prefer to just yank out all of the existing stat files and html, and re-process the log files you've accumulated with the new version. This way you start with a clean slate, and the new stats I've added will be accounted for. This is what I did for the server I play on. All 600+ logs. If you run into problems with the conversion, and you don't have the old log files to re-process and start anew, send me a note and I can give you instructions for how to fake the app into thinking it needs to do the conversion again.

Speaking of the new stats: they are A) the total number of rounds the player has played, B) the average number of kills per round, and C) the average number of deaths per round. Because these stats are accumulated, they won't really have much weight right away if you've got existing stats out there already. They will be accurate so far as the fact that a player's average number of kills per round is only tabulated from the new logs being processed, so it's not like it's not accurate. It just can't assume a total for any logs it's already done. You might want to just yank out all of the .csd files, re-process your saved logs, and re-build every player's stat file if the stat is important to you. Otherwise, just note that the stat is only kept from this day forward, and can't be known for previous logs.

The last piece I want to mention is the new built-in player editor. This editor lets you manually alter a player's stats, delete players, combine players, etc. If you know someone that plays on your server on a regular basis, has changed their name from something, and now has two or more stat files, you can use this editor to combine them into one. Check out the FAQ page for more info on how to use the editor, and what sorts of things you can do with it.

Version 0.81 Released February 15th, 2000

I've just posted version 0.81. This fixes a problem with reading log files from a Linux server, and fixes sort issues with best round (K:D) and other floating-point stats. There's also a bug fix with the player stats templates; I was missing the end table tag, and as such, people using Netscape weren't seeing the Weapon Distribution stuff. Doh!

I wanted to get this out first, as there are some significant changes I need to make to fix a problem with LAN games. LANs don't use Won to get a unique ID, so the method by which I use to keep people separate needs to be overhauled. I'm thinking of just going to straight-up name matching, and hope that there aren't any issues with duplicate names. Obviously you can't have a dup name on the server, but the possibility exists that someone will come along after another with the same name (there is no method to really know who is who), and those two people will share the same stats. People playing from a LAN to an Internet server will find this same problem.

Considering LAN server admins can't really use cs_stats at all, and the issue with people playing from a LAN, I think it's best to move forward with the name recognition only and skipping the WonID completely. The only thing I can recommend for people who are concerned about malicious "name stealing" or "stat degradation" (IE someone uses your name, joins a server, and plays like crap) is to not use generic names, like Player (duh), Killer, Beefhole, Sniper, etc. Come up with some unique character string, spelling (I am going to enforce case-sensitivity), or clan marking to make your name as unique as possible. Even if you don't belong in a clan, or like your Beefhole name... change it to {--=BeefHole--=} or something like that.

I've also added a new directory name to the zip. I realized that some people will want to have only one spot for the templates, and not ever have to change the config to point to new ones. At the same time, they'd like to be able to reference the classic templates for use in their own. So I've added a "Current" directory underneath the "Templates" directory, and the application will use that first instead of "Classic." All of the template files are there in Current, they just happen to also be in Classic. So you basically can do whatever you want with the Current directory and not worry about overridding the classic formats. Think of it as an automatic backup that I've done for you :-)

FAQ Updated February 14th, 2000

There seems to be some confusion as to how to get the app up and running, what the operating mode is like, and other general questions that I forgot to include within the FAQ. Thus, I've updated it with some more basic information on getting it started, things like that.

Version 0.80 released February 9th, 2000

cs_stats Version 0.80, the first public version, was released today. This initial offering doesn't have everything that I want to put out, but I wanted to at least get a version out there for people to play with and make use of.

You'll probably want to visit the FAQ page for a little more detailed information on what this app does, how to change how it behaves, how to change the html it spits out, etc. I've tried to make it as easy to customize as possible. I've got a few ideas on how to take it one step further to allow you to practically do anything and everything you want (where you specify the templates you want to load, and the app just figures out where it's supposed to insert things) but that's a few notches down on my ToDo list.

The first thing I want to sort out is remote file output. I realize most admins have a separate box for their web server, and would like to automatically drop the pages to that location as opposed to on the game server itself, or having to process them manually after moving them over. I personally have a need for this, as my friend's server isn't the same box as the web server. So I'm looking into writing a "helper" app of sorts that will forward the log files over to a remote machine using some TCP socket stuff. I've got code already to do it, I just need to fine-tune it a bit and make it more robust. Should be fun to do.