Und wieder ein weiteres Skript in ein Pythonprogramm umgewandelt. Dieses mal ist es ein Skript gewesen welches für mich ein paar Zahlen und Daten aus Insulae ermittelt und ablegt. Zum Beispiel wieviele Spieler sich gerade in einer bestimmten Region aufhalten.

Anhand dieser Daten kann ich dann gegebenenfalls in Insulae eingreiffen und Aktionen starten. Denn wenn ich feststelle das sich auf einmal die Mehrheit der Spieler an einem Fleck sammelt und sich nicht über die Welt verteilen, dann kann ich entsprechend reagieren. Oder sollte ich feststellen das 90% aller Spieler einem einzigen Gott huldigen, dann sollte ich mal dringen überpruefen ob die durch den Gott gewährten Boni nicht eventuell zu stark sind. Ums kurz zu machen, diese Auswertungen stellen für mich ein mittel der Spielsteuerung dar.

Wie auch immer. Die Grundlage ist nun geschaffen, damit ist der Weg frei in der Zukunft weitere Auswertungen zu implementieren.

Und wenn ich noch ein paar Tests mit der PIL gemacht habe, dann kann ich die gesammelten Daten den Moderatoren auch direkt grafisch zur Verfügung stellen.

~~~~ {lang="python" line="1"}

! /usr/local/bin/python### Copyright (c) 2009, Jan H. Krueger# All rights reserved.## The contents of this file are subject to the GNU Lesser General Public# License (the "License"); you may not use this file except in# compliance with the License. You may obtain a copy of the License at# http://www.gnu.org/licenses/lgpl.html## Software distributed under the License is distributed on an "AS IS"# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See# the License for the specific language governing rights and limitations# under the License.### File: ermittle_statistiken.py# Authors: Jan H. Krueger (game.insulae@googlemail.com)# Created: (04/09/2003)# Last Updated: (21/01/2009)# Version: 1.0# Package: Insulae# Category: Insulae-Backend## History:# 11/02/2006 Umstellung auf dbx# 25/05/2006 Umstellung auf neue Historie-Art# 19/06/2006 Kontrolle und Wiedereinsetzung in die Cronjobs# 18/01/2009 Umstellung auf Python# 21/01/2009 Wiedereinbau der Statistiken fuer Spielerregionen, Haeuser### collects some statistics and numbers of the game#import psycopg2import psycopg2.extensionsimport conn as dbimport sysimport timeE = sys.exit### Connect to the postgresql database and open a cursorcon = psycopg2.connect( database = db.dbdatabase, host = db.dbhost, user = db.dbuser, password = db.dbpassword )cu=con.cursor()skriptname = 'ermittle_statistiken.py'# log the start of ermittle_statistiken.pytry: varstatus = 'beginn' zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """insert into daten.skriptlog (skriptname, zeitstempel, verarbeitungsstatus) values (%s, %s, %s) """ cu.execute(sql, (skriptname, vartime, varstatus)) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)zeit = time.mktime(time.localtime(time.time()))vartime = str(zeit)[0:-2]# selects the skillstry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT min(fertigkeit_stufe) as minimum, avg(fertigkeit_stufe) as durchschnitt, max(fertigkeit_stufe) as maximum, fertigkeit_id FROM spieler.charakter_fertigkeit GROUP BY fertigkeit_id ORDER BY fertigkeit_id """ cu.execute(sql) statdaten = cu.fetchall() for (minimum, durchschnitt, maximum, fertigkeit_id) in statdaten: sql = """ INSERT INTO daten.fertigkeit (df_fertigkeit, df_datum, df_minimum, df_durchschnitt, df_maximum) VALUES (%s, %s, %s, %s, %s) """ cu.execute(sql, ( fertigkeit_id, vartime, minimum, durchschnitt, maximum) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)# selects the classestry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT Count(charakter_beruf) as anzahl, charakter_beruf, charakter_hauptcharakter FROM spieler.charakter GROUP BY charakter_beruf, charakter_hauptcharakter """ cu.execute(sql) statdaten = cu.fetchall() for (anzahl, charakter_beruf, charakter_hauptcharakter) in statdaten: sql = """ INSERT INTO daten.beruf (berufsdaten_beruf, berufsdaten_datum, berufsdaten_anzahl, berufsdaten_hauptcharakter) VALUES (%s, %s, %s, %s) """ cu.execute(sql, ( charakter_beruf, vartime, anzahl, charakter_hauptcharakter) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)# selects the racestry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT Count(charakter_volk) as anzahl, charakter_volk, charakter_hauptcharakter FROM spieler.charakter GROUP BY charakter_volk, charakter_hauptcharakter ORDER BY charakter_volk """ cu.execute(sql) statdaten = cu.fetchall() for (anzahl, charakter_volk, charakter_hauptcharakter) in statdaten: sql = """ INSERT INTO daten.volk (dv_volk, dv_datum, dv_anzahl, dv_hauptcharakter) VALUES (%s, %s, %s, %s) """ cu.execute(sql, ( charakter_volk, vartime, anzahl, charakter_hauptcharakter) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)# selects the deitiestry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT Count(charakter_gott) as anzahl, charakter_gott, charakter_hauptcharakter FROM spieler.charakter GROUP BY charakter_gott, charakter_hauptcharakter ORDER BY charakter_gott """ cu.execute(sql) statdaten = cu.fetchall() for (anzahl, charakter_gott, charakter_hauptcharakter) in statdaten: sql = """ INSERT INTO daten.glaube (dg_gott, dg_datum, dg_anzahl, dg_hauptcharakter) VALUES (%s, %s, %s, %s) """ cu.execute(sql, ( charakter_gott, vartime, anzahl, charakter_hauptcharakter) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)### selects how many players are in a specific regiontry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT Count( spieler.spieler_id ) AS anzahl, COALESCE ( welt.karte.karte_id, 999 ) AS Region FROM spieler.spieler LEFT JOIN welt.karte ON ( welt.karte.karte_x = spieler.spieler_x AND welt.karte.karte_y = spieler.spieler_y AND welt.karte.karte_w = spieler.spieler_w ) WHERE spieler.spieler_verwaltung = 'n' GROUP BY welt.karte.karte_id """ cu.execute(sql) statdaten = cu.fetchall() for (anzahl, region) in statdaten: sql = """ INSERT INTO daten.region (dr_region, dr_datum, dr_anzahl) VALUES (%s, %s, %s) """ cu.execute(sql, ( region, vartime, anzahl) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)### collects how many people lives in the towns, only min, max, avgtry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT min( stadt_einwohner ) as min, avg( stadt_einwohner ) as avg, max( stadt_einwohner ) as max FROM stadt.stadt """ cu.execute(sql) statdaten = cu.fetchall() for (min, avg, max) in statdaten: sql = """ INSERT INTO daten.stadteinwohner (ds_datum, ds_minimum, ds_durchschnitt, ds_maximum) VALUES (%s, %s, %s, %s) """ cu.execute(sql, ( vartime, min, avg, max) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)# selects how many buildings are buildtry: zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """ SELECT Count( h.wh_haustyp ) as anzahl, h.wh_haustyp as haustyp FROM welt.haus h, spieler.spieler s WHERE h.wh_spieler = s.spieler_id AND s.spieler_verwaltung = 'n' GROUP BY h.wh_haustyp """ cu.execute(sql) statdaten = cu.fetchall() for (anzahl, haustyp) in statdaten: sql = """ INSERT INTO daten.haus (dh_haus, dh_datum, dh_anzahl) VALUES (%s, %s, %s) """ cu.execute(sql, ( haustyp, vartime, anzahl) ) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)# Log the ending of ermittle_statistiken.py.try: varstatus = 'ende' zeit = time.mktime(time.localtime(time.time())) vartime = str(zeit)[0:-2] sql = """insert into daten.skriptlog (skriptname, zeitstempel, verarbeitungsstatus) values (%s, %s, %s)""" cu.execute(sql, (skriptname, vartime, varstatus)) con.commit()except psycopg2.ProgrammingError, errval: print errval E(8)# Close the cursor and connection, end the script.cu.close() con.close()E(0)

~~~~