steam_set_stat_avg_rate(stat_name, session_count, session_length);

参数 | 描述 |
---|---|

stat_name | The name of the statistic to set (a string). |

session_count | The value to get the average of (a real number) |

session_length | The time that has been taken since the last time the stat was set (a real number). |

**返回：** N/A（无返回值）

This function permits you to set an average statistic type with
a "sliding window" effect on the average. The "session_count" value
is the current value that you wish to average out, while the
"session_length" is the amount of game time since the last call to
the function. Please see the **extended Example** below for
further details on how this can be used.

Since the average stat function can be complex to understand, we will illustrate its use with the following example. Consider the case where you'd like to track an average statistic, such as "Points earned per hour". One approach would be to have two stats: an *integer* stat, "TotalPoints", and a *float* stat "TotalPlayTimeHours", and then divide the total points by the total time to get the "Points per Hour" value.

However, once the player has accumulated a significant amount of playtime, the calculated average will change extremely slowly, and the more the user plays the game, the less responsive that average will be. If the user has spent 100 hours playing the game, the calculated average will "lag" by about 50 hours of that, and if they increase their skill, they will not see the increase in "Points Per Hour" that they expect. To get around that we can use a "sliding window" to only calculate the "Points per hour" for the last 10 hours played.

So, to use this function, we would need to create a Steam stat (in the control panel for the game on the Workshop) called "AvgPointsPerHour" and set its **Window** property to 10. Now in your game you would have to add some global variables into an instance at the start:

global.Points = 0;

global.Time = 0;

You would then have some controller object to count up the global "Time" variable in an alarm (for example) every second, while your game-play would affect the global "Points" variable. At regular intervals while playing (again, in a controller object, perhaps in an Alarm, or at intervals from polling the "Time" value) you would set the stat like this:

steam_set_stat_avg_rate("AvgPointsPerHour",
global.Points, (global.Time / 3600));

global.Points = 0;

global.Time = 0;

Note that we divide time by 3600 since we want the time in
*hours* and not in seconds, and afterward we reset the global
"Points" variable and the global "Time" variable to 0 so that the
next time the function is called, we get a new average for the
statistic. Now, what Steam will do is take this value that you have
sent and create an average value over the time that was set for our
"window".