My chat with OLStats author, Overload

Everything about Death Ball.

Moderators: Jay2k1, DavidM, The_One

User avatar
Messy
Posts: 6334
Joined: 01-10-2003 14:37

Post by Messy »

Nice :) very interesting.

I'm a stats whore, so I'll love this <3

Will there be exporting of gamestats for leagues etc.? (where both teams will have to submit an exported text file that will be automatically compared for authenticity)
User avatar
DavidM
Posts: 6795
Joined: 08-03-2003 20:35
Contact:

Post by DavidM »

well stats files are present on client pc's
just not on the server yet, they will be needed
User avatar
Imaginos
Posts: 885
Joined: 17-03-2003 18:06
Contact:

Post by Imaginos »

Messy, this is my goal. The system I currently use can poll multiple servers and download the ut2004 stats logfiles automatically. This is already being done on my server every 15mins. (see link to the existing stats in the other thread)

For the server stats and a databasing system, I don't want to try and reinvent the wheel. Instead, all we need to do is provide more into to the native ut2004 gamestats engine. If we do that, the existing and highly recognized stats tracking package called UTStatsDB will be happy to include DeathBall in its list of supported mods. I had a little bit of a chat with Robert and he agrees that it is easy to do. His current task focus happens to be on the award system and he will begin implementing the necessary lines to track the stats.

The end result should be such that the serverside stats file should be able to reproduce all the events and ending scores of a game with this sequential logging of each event as it happened. Let me try and illustrate using the proposed new awards system:
Deathball award system: 06:04 10.09.2004 by DavidM
***********************
show the following in the hud, middle left, x,y,z,a are the values
---
defense: x
attack: y
keeper: z
passing: a
---
When you get a point play "pointsup" sound, when you lose points play "pointsdown" sound.
The according number should turn green/red in this moment. Normal color should be white (!?)
And the number should "glow" or something for a moment. Since there is no glow effect we need to highlight in a different way.
I think the color change for a moment isn't enough. But we'll see. A size change could be done...other ideas?

--------------
F3 award box has to look like this:

Defender award: 1.name (x) 2.name (x) 3.name (x)
Attacker award: 1.name (y) 2.name (y) 3.name (y)
Keeper award: 1.name (z) 2.name (z) 3.name (z)
pass award: 1.name (a) 2.name (a) 3.name (a)
--------------
(another note to this, they have to be frozen. when an awarded player leaves he has to stay in there tho.)


now a list of all awards and how the points are given
-defender award
-attacker award
-keeper award
-passing award


when 'near goal' is mentioned, it means 2000 units away from goal (value might be changed later)
missed chances = post hit, keeper saves, ball carrier gets killed in enemy pbox

defender award:
--------------
-defender killing an enemy player who just released the ball near defender's goal:
*ball goes to other enemy player after the pass
#if that player scores or misses: -1 points ScoreEvent(defenderID,-1,def_NoPrevent)
#if nothing special happens: 2 points to defender ScoreEvent(defenderID,2,def_Prevent)
*if it goes directly in goal: -2 points for def ScoreEvent(defenderID,-2,def_NoPrevent)
*if it ends up as a direct missed chance (keeper saves, post hit): -2 points ScoreEvent(defenderID,2,def_Prevent)
*if it goes to other team (defender team) give 2 points to defender ScoreEvent(defenderID,2,def_Prevent)

-defender kills enemy ballcarrier near own goal: 2 points ScoreEvent(defenderID,2,def_TackleKill)

-defender HURTS enemy ballcarrier near own goal:
*if hurt player keeps ball: 1 point to def ScoreEvent(defenderID,1,def_Tackle)
*if hurt player is doing a shaken shot due to the tackling (overload): 3 points to def ScoreEvent(defenderID,3,def_Tackle)
*if hurt player gets off a proper shot (not overload)
#if goal: -3 for def ScoreEvent(defenderID,-3,def_Tackle)
#if missed: -2 for def ScoreEvent(defenderID,-2,def_Tackle)
#if pass to other attacker: -1 for def ScoreEvent(defenderID,-1,def_Tackle)
#anything else: 0 ScoreEvent(defenderID,0,def_Tackle)

(make sure that when a shaken shot turns out as assist, goal, missed or so, that the defender gets not blamed for it. defender gets points for the successfull tackling, even if its a goal. afterall, a shaken assist is pure luck!)

-defender kills enemy player without ball in own pbox
*if attacker team has ball: 3 points ScoreEvent(defenderID,3,def_TackleKill)
*if defender team got the ball withing 2 seconds ago: 0 points ScoreEvent(defenderID,0,def_TackleKill)
*if defender team has ball but attacker team gets ball within the next 5 seconds: 3 points ScoreEvent(defenderID,3,def_WatchedItem)
*if defender team has ball, attacker is 250 close to defender team's ballcarrier: 1 point ScoreEvent(defenderID,1,def_TackleKill)

-defender intercepts enemy ball ("altfire bounce" counts as intercept too)
*near own goal: 3 points ScoreEvent(defenderID,3,def_Intercept)
*somewhere else on pitch: 1 point ScoreEvent(defenderID,1,def_Intercept)

-defender kicks enemy attacker away, who was about to get a locked pass
*enemy attacker doesnt get it: 2 points ScoreEvent(defenderID,2,def_Prevent)
// (*enemy attacker doesnt get it and defender catches ball: 4 points) <- i figured out its bullshit, because you get points for "interception" already. ScoreEvent(defenderID,4,def_Prevent)

-defender has an attacker ball deflect off him near own goal: 2 point ScoreEvent(defenderID,2,def_Prevent)

-defender kicked away by attacker
*attacker scores within 4 secs after: -5 points ScoreEvent(defenderID,-5,def_Beaten)
*attacker misses within 4 secs after: -3 points ScoreEvent(defenderID,-3,def_Beaten)


attacker award:
--------------
-attacker scores goal: 9 points ScoreEvent(attackerID,9,atk_Goal)
-attacker misses with a shot: -4 ScoreEvent(attackerID,-4,atk_MissGoal)
-attacker misses with a volley or "altfire bounce": -3 ScoreEvent(attackerID,-3,atk_MissGoal)
-attacker misses by being killed with ball in enemy pbox: -3 ScoreEvent(attackerID,-3,atk_MissGoal)
-attacker misses (no matter how) from 3500+ units away: -1 ScoreEvent(attackerID,-1,atk_MissGoal)
-attacker A passes to attacker B, attacker B misses: 4 points for attacker A ScoreEvent(attackerID,4,atk_MissAssist)
-attacker A passes to attacker B, attacker B scores: 9 points for attacker A (so 9 points for last assist) ScoreEvent(attackerID,9,atk_Assist)
-4 points for 2nd last assist (that would be 4 points for player C in this case: C pass to B, B pass to A, A scores); If C=A don't give points ScoreEvent(attackerID,4,atk_Assist)
-attacker is being shaken due to well timed tackling by defender NEAR ENEMY GOAL: -2 points for attacker ScoreEvent(attackerID,-2,atk_Hurt)
-attacker creates a bad pass near enemy goal: -3 points ScoreEvent(attackerID,-3,pas_BadPass) *atk or pas points here?!*
-attacker A boosts attacker B, attacker B scores within the next 5 seconds: 4 points ScoreEvent(attackerID,4,atk_Booster)
-attacker A boosts attacker B, attacker B is last assist for a goal that's being scored in the next 7 seconds: 4 points ScoreEvent(attackerID,4,atk_Booster)

keeper award:
--------------
-keeper kills enemy player without ball in own pbox
*if attacker team has ball: 3 points ScoreEvent(keeperID,3,kep_TackleKill)
*if keeper team got the ball withing 2 seconds ago: 0 points ScoreEvent(keeperID,0,kep_TackleKill)
*if keeper team has ball but attacker team gets ball within the next 5 seconds: 3 points ScoreEvent(keeperID,3,kep_WatchedItem)
*if keeper team has ball, attacker is 250 close to defender team's ballcarrier: 1 point ScoreEvent(keeperID,1,kep_TackleKill)
-keeper saves ball
*ball has less than 60km/h: 1 point ScoreEvent(keeperID,1,kep_Save)
*ball 60km/h and above and shot from 23 to 35 meters: 3 points ScoreEvent(keeperID,3,kep_Save)
*ball 60km/h and above and shot from farer than 35 meters away: 1 point ScoreEvent(keeperID,1,kep_Save)
*ball shot from less than 12 meters away from goal: 7 points (even if speed below 60km/h; so dissable the 1st point if distance that low) ScoreEvent(keeperID,7,kep_Save)
*ball shot from 23 to 12 meters: 5 points (only if speed above 60km/h) ScoreEvent(keeperID,5,kep_Save)

-keeper kills player with ball in own box ScoreEvent(keeperID,5,kep_TackleKill)
-intercepts ball (keeper outside box; if he was keeper 5 secs before): 3 points ScoreEvent(keeperID,3,kep_Intercept)
-keeper has last assist: 5 points [5 for keeper and 9 for attacker] ScoreEvent(keeperID,5,kep_Assist)
-keeper has 2nd last assist: 3 points ScoreEvent(keeperID,3,kep_Assist)
-keeper passes to enemy player -5 points ScoreEvent(keeperID,-5,pas_BadPass) *kep or pas points here?!*

pass award:
--------------
as usual
you need 3 good passes to compensate 1 bad pass
so
+1 for good pass ScoreEvent(passerID,1,pas_GoodPass)
-3 for bad pass ScoreEvent(passerID,-3,pas_BadPass)

I think these are redundant after assist points
+5 if pass was last assist ScoreEvent(passerID,5,pas_WatchedItem)
+3 if pass was 2nd last assist ScoreEvent(passerID,3,pas_WatchedItem)
Last edited by Imaginos on 26-09-2004 23:51, edited 1 time in total.
OverloadUT
Junior Member
Posts: 4
Joined: 26-09-2004 23:14

Post by OverloadUT »

Hi. I'm Overload, author of OLStats.

Looks good to me. If those function calls made it in to the Deathball code, it would do wonders for the Statlogging community.

It's a shame how few mods take the time to put proper statlogging in to their game, especially when it's a built in feature and only takes minutes to implement.
User avatar
DavidM
Posts: 6795
Joined: 08-03-2003 20:35
Contact:

Post by DavidM »

I think these are redundant after assist points
+5 if pass was last assist ScoreEvent(passerID,5,pas_WatchedItem)
+3 if pass was 2nd last assist ScoreEvent(passerID,3,pas_WatchedItem)
no, it adds points to pass and to attack award
User avatar
Imaginos
Posts: 885
Joined: 17-03-2003 18:06
Contact:

Post by Imaginos »

Roger. An assist is pretty much a pass that led to a score already though, which is why I thought it a little redundant.
NP.

Any thoughts on the previous posts besides that?
User avatar
DavidM
Posts: 6795
Joined: 08-03-2003 20:35
Contact:

Post by DavidM »

dunno what to comment on :|
User avatar
Imaginos
Posts: 885
Joined: 17-03-2003 18:06
Contact:

Post by Imaginos »

I'm just pulling ScoreEvent statements out of my ass - I have no idea what variables they should be. I know it's all a work in progress, but I'd think there'd need to be some corrections at least. I'm not even clear on what the difference between a kill and a tackle is. Or how to best report them.
User avatar
Twigstir
Posts: 756
Joined: 05-04-2003 21:19
Contact:

Post by Twigstir »

DavidM - your being asked to help set up stat tracking and what's your coder's opinions on how to do it. If it's coded, then Deathball would have stat tracking.

Imaginos and OverloadUT have suggest ways to do this which might be easy to implement.

Other suggestion are about what stats to track.

Many in the community think stat tracking would be cool. We're searching for ways to implement them. At this point, it seems a little work in coding is all that is needed to get them going. We would like your and your team's help and opinions on the matter.
User avatar
DavidM
Posts: 6795
Joined: 08-03-2003 20:35
Contact:

Post by DavidM »

robert says he knows how to do it, and he will put it in as he does the award stuff
User avatar
Twigstir
Posts: 756
Joined: 05-04-2003 21:19
Contact:

Post by Twigstir »

Thanks DavidM and Robert.

When he gets a list of the what is going to be included in the stats, we'd love to see it and chime in our opinions and ideas. Besides the award things, I would like to see some raw stats like what's already in the clientside csv output, only modified a bit to include more stats.
Last edited by Twigstir on 27-09-2004 05:01, edited 1 time in total.
User avatar
Inphidel
Posts: 779
Joined: 13-03-2003 21:28
Contact:

Post by Inphidel »

\o/ stats rule!

now i'm gonna now how bad i am :<
OverloadUT
Junior Member
Posts: 4
Joined: 26-09-2004 23:14

Post by OverloadUT »

Just to clarify a bit:

The server side stats, using the built in functions would be useful for serveradmins who already have UTStatsDB set up and do not want to run a seperate program to parse and display Deathball logs. A custom stats reporting tool would be cool, no doubt, but it would be great if you also supported the already built-in stat logging mechanism.

All you would have to do is put the function calls that Imaginos posted above, and it would work great. (Except all those third parameters should be strings)
User avatar
Imaginos
Posts: 885
Joined: 17-03-2003 18:06
Contact:

Post by Imaginos »

Exactly. And to reemphasize, using the established UTStatsDB and making Deathball compatable with it will give the mod more exposure. Especially on multi-mod servers where new players can sample the game and get hooked.

Twig, the beauty of it is that the clientside stats can be easily recreated just by parsing the log and counting scoreevent descriptions that correlate to each csv stat. My clumsy initial proposed events in red a few posts above follow this logic:
ScoreEvent(PlayerID,points_awarded,prefix_DescriptionString)
PlayerID and points are self explanatory.
The prefix references which counter to add the points to (def,atk,kep,pas) while the description string is used to increment the associated stat counter. Stat counters such as tackles/tackled, good/bad passes, etc.

This is going to need more fine tuning of course. Sofar, volleys, touches, boosts, hat tricks, touchdowns, and ball hold times aren't noted anywhere yet. I hope we can identify all the things and get them in there as soon as possible to get the UTStatsDB side up and running as soon as possible.
OverloadUT
Junior Member
Posts: 4
Joined: 26-09-2004 23:14

Post by OverloadUT »

All of those other events you mentioned that are not associated with actually getting points can easily be reported by using the SpecialEvent() or GameEvent() functions - those allow you to send special and game events to the stats. For example, CTF does this whenever a flag is dropped, picked up, or returned. Even though there is a score event associated with some of those (return, for example) - a generic "blue_flag_returned" event is sent to make it easier for the stats to keep track of who has the flag.
Locked