-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathplayer.py
104 lines (85 loc) · 3.25 KB
/
player.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import wrap
import config
import models
class Player(wrap.ObjWrap):
def __init__(self, player_obj, viewing_player_name=''):
super(Player, self).__init__(player_obj)
self.viewing_player_name = viewing_player_name
self.units_built_per_game = [self.per_game(x) for x in self.built_counts_total]
def get_avatar_url(self):
if self.avatar_hash:
return '%s?s=64&h=%s' % (config.AVATAR_URL, self.avatar_hash)
else:
return config.ANONYMOUS_AVATAR_URL
def is_viewer_also_player(self):
key1 = models.playermodel_key(self.name)
key2 = models.playermodel_key(self.viewing_player_name)
return key1.name() == key2.name()
def get_player_formatted_url(self, base_url):
if self.is_viewer_also_player():
return '%s?p=%s' % (base_url, self.viewing_player_name)
url = '%s?u=%s' % (base_url, self.name)
if self.viewing_player_name:
url = '%s&p=%s' % (url, self.viewing_player_name)
return url
def get_player_stats_url(self):
return self.get_player_formatted_url(config.STATS_URL)
def get_games_url(self):
return self.get_player_formatted_url(config.GAMES_URL)
def get_units_built_sum_per_game(self):
return self.per_game(sum(self.built_counts_total))
def get_munts_lost_per_game(self):
return self.per_game(self.munts_lost_total)
def get_structs_lost_per_game(self):
return self.per_game(self.structs_lost_total)
def get_munts_killed_per_game(self):
return self.per_game(self.munts_killed_total)
def get_structs_killed_per_game(self):
return self.per_game(self.structs_killed_total)
def get_credits_acquired_per_game(self):
return self.per_game(self.credits_acquired_total)
def get_credits_consumed_per_game(self):
return self.per_game(self.credits_consumed_total)
def get_minutes_per_game(self):
return self.per_game(self.elapsed_seconds_total / 60.0)
def get_units_built_per_game(self):
return self.units_built_per_game
def per_game(self, count):
if not self.game_count:
return 0
value = float(count) / self.game_count
if value >= 10:
return self.thousands(str(int(round(value))))
if value < 1:
if value == 0:
return '0'
return '%.2f' % value
if value == int(value):
return str(int(value))
return '%.1f' % value
def thousands(self, s, sep=','):
if len(s) <= 3:
return s
return self.thousands(s[:-3], sep) + sep + s[-3:]
def reset_stats(p):
p.rating = 0
p.game_count = 0
p.games_won = 0
p.last_game_key_name = ''
p.credits_acquired_total = 0
p.credits_consumed_total = 0
p.munts_killed_total = 0
p.structs_killed_total = 0
p.munts_lost_total = 0
p.structs_lost_total = 0
p.built_counts_total = [0] * config.BUILT_COUNTS_MAX
p.elapsed_seconds_total = 0
p.rating_check_utc = 0
p.last_game_utc = 0
p.blocked = False
p.hidden = False
def load_from_name(name, viewing_player_name=''):
p = models.PlayerModel.get(models.playermodel_key(name))
if p:
return Player(p, viewing_player_name)
return None