forked from 0ad/0ad
Reformat the database to accept the additional summary counters as well as adding a couple summary counters. Also deletes unnecessary welcome message and deletes whitespace. Refs #686.
This was SVN commit r14752.
This commit is contained in:
parent
ab9a6b6303
commit
be881dc420
@ -934,6 +934,10 @@ function reportGame(extendedSimState)
|
|||||||
// Tribute
|
// Tribute
|
||||||
playerStatistics.tributesSent = "";
|
playerStatistics.tributesSent = "";
|
||||||
playerStatistics.tributesReceived = "";
|
playerStatistics.tributesReceived = "";
|
||||||
|
// Total
|
||||||
|
playerStatistics.economyScore = "";
|
||||||
|
playerStatistics.militaryScore = "";
|
||||||
|
playerStatistics.totalScore = "";
|
||||||
// Various
|
// Various
|
||||||
playerStatistics.treasuresCollected = "";
|
playerStatistics.treasuresCollected = "";
|
||||||
playerStatistics.feminisation = "";
|
playerStatistics.feminisation = "";
|
||||||
@ -963,7 +967,14 @@ function reportGame(extendedSimState)
|
|||||||
for each (var buildingCounterType in buildingsCountersTypes)
|
for each (var buildingCounterType in buildingsCountersTypes)
|
||||||
for each (var buildingsClass in buildingsClasses)
|
for each (var buildingsClass in buildingsClasses)
|
||||||
playerStatistics[buildingCounterType][buildingsClass] += player.statistics[buildingCounterType][buildingsClass] + ",";
|
playerStatistics[buildingCounterType][buildingsClass] += player.statistics[buildingCounterType][buildingsClass] + ",";
|
||||||
|
var total = 0;
|
||||||
|
for each (var res in player.statistics.resourcesGathered)
|
||||||
|
total += res;
|
||||||
|
playerStatistics.economyScore += total + ",";
|
||||||
|
playerStatistics.militaryScore += Math.round((player.statistics.enemyUnitsKilledValue +
|
||||||
|
player.statistics.enemyBuildingsDestroyedValue) / 10) + ",";
|
||||||
|
playerStatistics.totalScore += (total + Math.round((player.statistics.enemyUnitsKilledValue +
|
||||||
|
player.statistics.enemyBuildingsDestroyedValue) / 10)) + ",";
|
||||||
playerStatistics.tradeIncome += player.statistics.tradeIncome + ",";
|
playerStatistics.tradeIncome += player.statistics.tradeIncome + ",";
|
||||||
playerStatistics.tributesSent += player.statistics.tributesSent + ",";
|
playerStatistics.tributesSent += player.statistics.tributesSent + ",";
|
||||||
playerStatistics.tributesReceived += player.statistics.tributesReceived + ",";
|
playerStatistics.tributesReceived += player.statistics.tributesReceived + ",";
|
||||||
@ -981,6 +992,9 @@ function reportGame(extendedSimState)
|
|||||||
reportObject.teams = teams;
|
reportObject.teams = teams;
|
||||||
reportObject.teamsLocked = String(teamsLocked);
|
reportObject.teamsLocked = String(teamsLocked);
|
||||||
reportObject.mapName = mapName;
|
reportObject.mapName = mapName;
|
||||||
|
reportObject.economyScore = playerStatistics.economyScore;
|
||||||
|
reportObject.militaryScore = playerStatistics.militaryScore;
|
||||||
|
reportObject.totalScore = playerStatistics.totalScore;
|
||||||
for each (var rct in resourcesCounterTypes)
|
for each (var rct in resourcesCounterTypes)
|
||||||
{
|
{
|
||||||
for each (var rt in resourcesTypes)
|
for each (var rt in resourcesTypes)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
from sqlalchemy import Column, ForeignKey, Integer, String
|
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean
|
||||||
from sqlalchemy.orm import relationship, sessionmaker
|
from sqlalchemy.orm import relationship, sessionmaker
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
@ -45,21 +45,11 @@ class PlayerInfo(Base):
|
|||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
player_id = Column(Integer, ForeignKey('players.id'))
|
player_id = Column(Integer, ForeignKey('players.id'))
|
||||||
game_id = Column(Integer, ForeignKey('games.id'))
|
game_id = Column(Integer, ForeignKey('games.id'))
|
||||||
civ = String(20)
|
civs = Column(String(20))
|
||||||
|
teams = Column(Integer)
|
||||||
economyScore = Column(Integer)
|
economyScore = Column(Integer)
|
||||||
militaryScore = Column(Integer)
|
militaryScore = Column(Integer)
|
||||||
explorationScore = Column(Integer)
|
|
||||||
# Store to avoid needlessly recomputing it.
|
|
||||||
totalScore = Column(Integer)
|
totalScore = Column(Integer)
|
||||||
unitsTrained = Column(Integer)
|
|
||||||
unitsLost = Column(Integer)
|
|
||||||
unitsKilled = Column(Integer)
|
|
||||||
buildingsConstructed = Column(Integer)
|
|
||||||
buildingsLost = Column(Integer)
|
|
||||||
buildingsDestroyed = Column(Integer)
|
|
||||||
civCentersBuilt = Column(Integer)
|
|
||||||
civCentersDestroyed = Column(Integer)
|
|
||||||
percentMapExplored = Column(Integer)
|
|
||||||
foodGathered = Column(Integer)
|
foodGathered = Column(Integer)
|
||||||
foodUsed = Column(Integer)
|
foodUsed = Column(Integer)
|
||||||
woodGathered = Column(Integer)
|
woodGathered = Column(Integer)
|
||||||
@ -68,20 +58,64 @@ class PlayerInfo(Base):
|
|||||||
stoneUsed = Column(Integer)
|
stoneUsed = Column(Integer)
|
||||||
metalGathered = Column(Integer)
|
metalGathered = Column(Integer)
|
||||||
metalUsed = Column(Integer)
|
metalUsed = Column(Integer)
|
||||||
vegetarianRatio = Column(Integer)
|
vegetarianFoodGathered = Column(Integer)
|
||||||
treasuresCollected = Column(Integer)
|
treasuresCollected = Column(Integer)
|
||||||
tributesSent = Column(Integer)
|
tributesSent = Column(Integer)
|
||||||
tributesRecieved = Column(Integer)
|
tributesReceived = Column(Integer)
|
||||||
foodBought = Column(Integer)
|
totalUnitsTrained = Column(Integer)
|
||||||
foodSold = Column(Integer)
|
totalUnitsLost = Column(Integer)
|
||||||
|
enemytotalUnitsKilled = Column(Integer)
|
||||||
|
infantryUnitsTrained = Column(Integer)
|
||||||
|
infantryUnitsLost = Column(Integer)
|
||||||
|
enemyInfantryUnitsKilled = Column(Integer)
|
||||||
|
workerUnitsTrained = Column(Integer)
|
||||||
|
workerUnitsLost = Column(Integer)
|
||||||
|
enemyWorkerUnitsKilled = Column(Integer)
|
||||||
|
femaleUnitsTrained = Column(Integer)
|
||||||
|
femaleUnitsLost = Column(Integer)
|
||||||
|
enemyFemaleUnitsKilled = Column(Integer)
|
||||||
|
cavalryUnitsTrained = Column(Integer)
|
||||||
|
cavalryUnitsLost = Column(Integer)
|
||||||
|
enemyCavalryUnitsKilled = Column(Integer)
|
||||||
|
championUnitsTrained = Column(Integer)
|
||||||
|
championUnitsLost = Column(Integer)
|
||||||
|
enemyChampionUnitsKilled = Column(Integer)
|
||||||
|
heroUnitsTrained = Column(Integer)
|
||||||
|
heroUnitsLost = Column(Integer)
|
||||||
|
enemyHeroUnitsKilled = Column(Integer)
|
||||||
|
shipUnitsTrained = Column(Integer)
|
||||||
|
shipUnitsLost = Column(Integer)
|
||||||
|
enemyShipUnitsKilled = Column(Integer)
|
||||||
|
totalBuildingsConstructed = Column(Integer)
|
||||||
|
totalBuildingsLost = Column(Integer)
|
||||||
|
enemytotalBuildingsDestroyed = Column(Integer)
|
||||||
|
civCentreBuildingsConstructed = Column(Integer)
|
||||||
|
civCentreBuildingsLost = Column(Integer)
|
||||||
|
enemyCivCentreBuildingsDestroyed = Column(Integer)
|
||||||
|
houseBuildingsConstructed = Column(Integer)
|
||||||
|
houseBuildingsLost = Column(Integer)
|
||||||
|
enemyHouseBuildingsDestroyed = Column(Integer)
|
||||||
|
economicBuildingsConstructed = Column(Integer)
|
||||||
|
economicBuildingsLost = Column(Integer)
|
||||||
|
enemyEconomicBuildingsDestroyed = Column(Integer)
|
||||||
|
outpostBuildingsConstructed = Column(Integer)
|
||||||
|
outpostBuildingsLost = Column(Integer)
|
||||||
|
enemyOutpostBuildingsDestroyed = Column(Integer)
|
||||||
|
militaryBuildingsConstructed = Column(Integer)
|
||||||
|
militaryBuildingsLost = Column(Integer)
|
||||||
|
enemyMilitaryBuildingsDestroyed = Column(Integer)
|
||||||
|
fortressBuildingsConstructed = Column(Integer)
|
||||||
|
fortressBuildingsLost = Column(Integer)
|
||||||
|
enemyFortressBuildingsDestroyed = Column(Integer)
|
||||||
|
wonderBuildingsConstructed = Column(Integer)
|
||||||
|
wonderBuildingsLost = Column(Integer)
|
||||||
|
enemyWonderBuildingsDestroyed = Column(Integer)
|
||||||
woodBought = Column(Integer)
|
woodBought = Column(Integer)
|
||||||
woodSold = Column(Integer)
|
foodBought = Column(Integer)
|
||||||
stoneBought = Column(Integer)
|
stoneBought = Column(Integer)
|
||||||
stoneSold = Column(Integer)
|
|
||||||
metalBought = Column(Integer)
|
metalBought = Column(Integer)
|
||||||
metalSold = Column(Integer)
|
|
||||||
barterEfficiency = Column(Integer)
|
|
||||||
tradeIncome = Column(Integer)
|
tradeIncome = Column(Integer)
|
||||||
|
percentMapExplored = Column(Integer)
|
||||||
|
|
||||||
class Game(Base):
|
class Game(Base):
|
||||||
__tablename__ = 'games'
|
__tablename__ = 'games'
|
||||||
@ -89,6 +123,8 @@ class Game(Base):
|
|||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
map = Column(String(80))
|
map = Column(String(80))
|
||||||
duration = Column(Integer)
|
duration = Column(Integer)
|
||||||
|
teamsLocked = Column(Boolean)
|
||||||
|
matchID = Column(String(20))
|
||||||
winner_id = Column(Integer, ForeignKey('players.id'))
|
winner_id = Column(Integer, ForeignKey('players.id'))
|
||||||
player_info = relationship('PlayerInfo', backref='game')
|
player_info = relationship('PlayerInfo', backref='game')
|
||||||
players = relationship('Player', secondary='players_info')
|
players = relationship('Player', secondary='players_info')
|
||||||
|
@ -85,24 +85,41 @@ class LeaderboardList():
|
|||||||
winning_jid = list(dict.keys({jid: state for jid, state in
|
winning_jid = list(dict.keys({jid: state for jid, state in
|
||||||
gamereport['playerStates'].items()
|
gamereport['playerStates'].items()
|
||||||
if state == 'won'}))[0]
|
if state == 'won'}))[0]
|
||||||
|
|
||||||
def get(stat, jid):
|
def get(stat, jid):
|
||||||
return gamereport[stat][jid]
|
return gamereport[stat][jid]
|
||||||
|
|
||||||
stats = {'civ': 'civs', 'foodGathered': 'foodGathered', 'foodUsed': 'foodUsed',
|
singleStats = {'timeElapsed', 'mapName', 'teamsLocked', 'matchID'}
|
||||||
'woodGathered': 'woodGathered', 'woodUsed': 'woodUsed',
|
totalScoreStats = {'economyScore', 'militaryScore', 'totalScore'}
|
||||||
'stoneGathered': 'stoneGathered', 'stoneUsed': 'stoneUsed',
|
resourceStats = {'foodGathered', 'foodUsed', 'woodGathered', 'woodUsed',
|
||||||
'metalGathered': 'metalGathered', 'metalUsed': 'metalUsed'}
|
'stoneGathered', 'stoneUsed', 'metalGathered', 'metalUsed', 'vegetarianFoodGathered',
|
||||||
|
'treasuresCollected', 'tributesSent', 'tributesReceived'}
|
||||||
|
unitsStats = {'totalUnitsTrained', 'totalUnitsLost', 'enemytotalUnitsKilled', 'infantryUnitsTrained',
|
||||||
|
'infantryUnitsLost', 'enemyInfantryUnitsKilled', 'workerUnitsTrained', 'workerUnitsLost',
|
||||||
|
'enemyWorkerUnitsKilled', 'femaleUnitsTrained', 'femaleUnitsLost', 'enemyFemaleUnitsKilled',
|
||||||
|
'cavalryUnitsTrained', 'cavalryUnitsLost', 'enemyCavalryUnitsKilled', 'championUnitsTrained',
|
||||||
|
'championUnitsLost', 'enemyChampionUnitsKilled', 'heroUnitsTrained', 'heroUnitsLost',
|
||||||
|
'enemyHeroUnitsKilled', 'shipUnitsTrained', 'shipUnitsLost', 'enemyShipUnitsKilled'}
|
||||||
|
buildingsStats = {'totalBuildingsConstructed', 'totalBuildingsLost', 'enemytotalBuildingsDestroyed',
|
||||||
|
'civCentreBuildingsConstructed', 'civCentreBuildingsLost', 'enemyCivCentreBuildingsDestroyed',
|
||||||
|
'houseBuildingsConstructed', 'houseBuildingsLost', 'enemyHouseBuildingsDestroyed',
|
||||||
|
'economicBuildingsConstructed', 'economicBuildingsLost', 'enemyEconomicBuildingsDestroyed',
|
||||||
|
'outpostBuildingsConstructed', 'outpostBuildingsLost', 'enemyOutpostBuildingsDestroyed',
|
||||||
|
'militaryBuildingsConstructed', 'militaryBuildingsLost', 'enemyMilitaryBuildingsDestroyed',
|
||||||
|
'fortressBuildingsConstructed', 'fortressBuildingsLost', 'enemyFortressBuildingsDestroyed',
|
||||||
|
'wonderBuildingsConstructed', 'wonderBuildingsLost', 'enemyWonderBuildingsDestroyed'}
|
||||||
|
marketStats = {'woodBought', 'foodBought', 'stoneBought', 'metalBought', 'tradeIncome'}
|
||||||
|
miscStats = {'civs', 'teams', 'percentMapExplored'}
|
||||||
|
|
||||||
|
stats = totalScoreStats | resourceStats | unitsStats | buildingsStats | marketStats | miscStats
|
||||||
playerInfos = []
|
playerInfos = []
|
||||||
for player in players:
|
for player in players:
|
||||||
jid = player.jid
|
jid = player.jid
|
||||||
playerinfo = PlayerInfo(player=player)
|
playerinfo = PlayerInfo(player=player)
|
||||||
for dbname, reportname in stats.items():
|
for reportname in stats:
|
||||||
setattr(playerinfo, dbname, get(reportname, jid))
|
setattr(playerinfo, reportname, get(reportname, jid))
|
||||||
playerInfos.append(playerinfo)
|
playerInfos.append(playerinfo)
|
||||||
|
|
||||||
game = Game(map=gamereport['mapName'], duration=int(gamereport['timeElapsed']))
|
game = Game(map=gamereport['mapName'], duration=int(gamereport['timeElapsed']), teamsLocked=bool(gamereport['teamsLocked']), matchID=gamereport['matchID'])
|
||||||
game.players.extend(players)
|
game.players.extend(players)
|
||||||
game.player_info.extend(playerInfos)
|
game.player_info.extend(playerInfos)
|
||||||
game.winner = db.query(Player).filter_by(jid=winning_jid).first()
|
game.winner = db.query(Player).filter_by(jid=winning_jid).first()
|
||||||
@ -165,14 +182,14 @@ class LeaderboardList():
|
|||||||
player2.rating += rating_adjustment2
|
player2.rating += rating_adjustment2
|
||||||
db.commit()
|
db.commit()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def getLastRatedMessage(self):
|
def getLastRatedMessage(self):
|
||||||
"""
|
"""
|
||||||
Gets the string of the last rated game. Triggers an update
|
Gets the string of the last rated game. Triggers an update
|
||||||
chat for the bot.
|
chat for the bot.
|
||||||
"""
|
"""
|
||||||
return self.lastRated
|
return self.lastRated
|
||||||
|
|
||||||
def addAndRateGame(self, gamereport):
|
def addAndRateGame(self, gamereport):
|
||||||
"""
|
"""
|
||||||
Calls addGame and if the game has only two
|
Calls addGame and if the game has only two
|
||||||
@ -475,7 +492,6 @@ class XpartaMuPP(sleekxmpp.ClientXMPP):
|
|||||||
self.nicks[str(presence['muc']['jid'])] = presence['muc']['nick']
|
self.nicks[str(presence['muc']['jid'])] = presence['muc']['nick']
|
||||||
# Check the jid isn't already in the lobby.
|
# Check the jid isn't already in the lobby.
|
||||||
if str(presence['muc']['jid']) != self.lastLeft:
|
if str(presence['muc']['jid']) != self.lastLeft:
|
||||||
self.send_message(mto=presence['from'], mbody="Hello %s, welcome to the 0 A.D. lobby. Polish your weapons and get ready to fight!" %(presence['muc']['nick']), mtype='')
|
|
||||||
# Send Gamelist to new player.
|
# Send Gamelist to new player.
|
||||||
self.sendGameList(presence['muc']['jid'])
|
self.sendGameList(presence['muc']['jid'])
|
||||||
# Following two calls make sqlalchemy complain about using objects in the
|
# Following two calls make sqlalchemy complain about using objects in the
|
||||||
@ -509,7 +525,7 @@ class XpartaMuPP(sleekxmpp.ClientXMPP):
|
|||||||
"""
|
"""
|
||||||
if msg['mucnick'] != self.nick and self.nick.lower() in msg['body'].lower():
|
if msg['mucnick'] != self.nick and self.nick.lower() in msg['body'].lower():
|
||||||
self.send_message(mto=msg['from'].bare,
|
self.send_message(mto=msg['from'].bare,
|
||||||
mbody="I (%s) am the administrative bot in this lobby and cannot participate in any games." % self.nick,
|
mbody="I am the administrative bot in this lobby and cannot participate in any games.",
|
||||||
mtype='groupchat')
|
mtype='groupchat')
|
||||||
|
|
||||||
def iqhandler(self, iq):
|
def iqhandler(self, iq):
|
||||||
|
Loading…
Reference in New Issue
Block a user