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
|
||||
playerStatistics.tributesSent = "";
|
||||
playerStatistics.tributesReceived = "";
|
||||
// Total
|
||||
playerStatistics.economyScore = "";
|
||||
playerStatistics.militaryScore = "";
|
||||
playerStatistics.totalScore = "";
|
||||
// Various
|
||||
playerStatistics.treasuresCollected = "";
|
||||
playerStatistics.feminisation = "";
|
||||
@ -963,7 +967,14 @@ function reportGame(extendedSimState)
|
||||
for each (var buildingCounterType in buildingsCountersTypes)
|
||||
for each (var buildingsClass in buildingsClasses)
|
||||
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.tributesSent += player.statistics.tributesSent + ",";
|
||||
playerStatistics.tributesReceived += player.statistics.tributesReceived + ",";
|
||||
@ -981,6 +992,9 @@ function reportGame(extendedSimState)
|
||||
reportObject.teams = teams;
|
||||
reportObject.teamsLocked = String(teamsLocked);
|
||||
reportObject.mapName = mapName;
|
||||
reportObject.economyScore = playerStatistics.economyScore;
|
||||
reportObject.militaryScore = playerStatistics.militaryScore;
|
||||
reportObject.totalScore = playerStatistics.totalScore;
|
||||
for each (var rct in resourcesCounterTypes)
|
||||
{
|
||||
for each (var rt in resourcesTypes)
|
||||
|
@ -18,7 +18,7 @@
|
||||
"""
|
||||
|
||||
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.ext.declarative import declarative_base
|
||||
|
||||
@ -45,21 +45,11 @@ class PlayerInfo(Base):
|
||||
id = Column(Integer, primary_key=True)
|
||||
player_id = Column(Integer, ForeignKey('players.id'))
|
||||
game_id = Column(Integer, ForeignKey('games.id'))
|
||||
civ = String(20)
|
||||
civs = Column(String(20))
|
||||
teams = Column(Integer)
|
||||
economyScore = Column(Integer)
|
||||
militaryScore = Column(Integer)
|
||||
explorationScore = Column(Integer)
|
||||
# Store to avoid needlessly recomputing it.
|
||||
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)
|
||||
foodUsed = Column(Integer)
|
||||
woodGathered = Column(Integer)
|
||||
@ -68,20 +58,64 @@ class PlayerInfo(Base):
|
||||
stoneUsed = Column(Integer)
|
||||
metalGathered = Column(Integer)
|
||||
metalUsed = Column(Integer)
|
||||
vegetarianRatio = Column(Integer)
|
||||
vegetarianFoodGathered = Column(Integer)
|
||||
treasuresCollected = Column(Integer)
|
||||
tributesSent = Column(Integer)
|
||||
tributesRecieved = Column(Integer)
|
||||
foodBought = Column(Integer)
|
||||
foodSold = Column(Integer)
|
||||
tributesReceived = Column(Integer)
|
||||
totalUnitsTrained = 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)
|
||||
woodSold = Column(Integer)
|
||||
foodBought = Column(Integer)
|
||||
stoneBought = Column(Integer)
|
||||
stoneSold = Column(Integer)
|
||||
metalBought = Column(Integer)
|
||||
metalSold = Column(Integer)
|
||||
barterEfficiency = Column(Integer)
|
||||
tradeIncome = Column(Integer)
|
||||
percentMapExplored = Column(Integer)
|
||||
|
||||
class Game(Base):
|
||||
__tablename__ = 'games'
|
||||
@ -89,6 +123,8 @@ class Game(Base):
|
||||
id = Column(Integer, primary_key=True)
|
||||
map = Column(String(80))
|
||||
duration = Column(Integer)
|
||||
teamsLocked = Column(Boolean)
|
||||
matchID = Column(String(20))
|
||||
winner_id = Column(Integer, ForeignKey('players.id'))
|
||||
player_info = relationship('PlayerInfo', backref='game')
|
||||
players = relationship('Player', secondary='players_info')
|
||||
|
@ -85,24 +85,41 @@ class LeaderboardList():
|
||||
winning_jid = list(dict.keys({jid: state for jid, state in
|
||||
gamereport['playerStates'].items()
|
||||
if state == 'won'}))[0]
|
||||
|
||||
def get(stat, jid):
|
||||
return gamereport[stat][jid]
|
||||
|
||||
stats = {'civ': 'civs', 'foodGathered': 'foodGathered', 'foodUsed': 'foodUsed',
|
||||
'woodGathered': 'woodGathered', 'woodUsed': 'woodUsed',
|
||||
'stoneGathered': 'stoneGathered', 'stoneUsed': 'stoneUsed',
|
||||
'metalGathered': 'metalGathered', 'metalUsed': 'metalUsed'}
|
||||
singleStats = {'timeElapsed', 'mapName', 'teamsLocked', 'matchID'}
|
||||
totalScoreStats = {'economyScore', 'militaryScore', 'totalScore'}
|
||||
resourceStats = {'foodGathered', 'foodUsed', 'woodGathered', 'woodUsed',
|
||||
'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 = []
|
||||
for player in players:
|
||||
jid = player.jid
|
||||
playerinfo = PlayerInfo(player=player)
|
||||
for dbname, reportname in stats.items():
|
||||
setattr(playerinfo, dbname, get(reportname, jid))
|
||||
for reportname in stats:
|
||||
setattr(playerinfo, reportname, get(reportname, jid))
|
||||
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.player_info.extend(playerInfos)
|
||||
game.winner = db.query(Player).filter_by(jid=winning_jid).first()
|
||||
@ -165,14 +182,14 @@ class LeaderboardList():
|
||||
player2.rating += rating_adjustment2
|
||||
db.commit()
|
||||
return self
|
||||
|
||||
|
||||
def getLastRatedMessage(self):
|
||||
"""
|
||||
Gets the string of the last rated game. Triggers an update
|
||||
chat for the bot.
|
||||
"""
|
||||
return self.lastRated
|
||||
|
||||
|
||||
def addAndRateGame(self, gamereport):
|
||||
"""
|
||||
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']
|
||||
# Check the jid isn't already in the lobby.
|
||||
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.
|
||||
self.sendGameList(presence['muc']['jid'])
|
||||
# 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():
|
||||
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')
|
||||
|
||||
def iqhandler(self, iq):
|
||||
|
Loading…
Reference in New Issue
Block a user