7 con.execute(
"PRAGMA journal_mode=WAL;");
8 con.execute(
"PRAGMA synchronous=NORMAL;");
9 con.execute(
"CREATE TABLE IF NOT EXISTS schema(version INT);");
10 result = con.execute(
"SELECT version FROM schema").fetchall();
13 Crossfire.Log(Crossfire.LogInfo,
14 "Initializing factions schema %d->%d" % (curr, version))
15 for f
in schema_files:
16 with open(f)
as initfile:
17 con.executescript(initfile.read())
21 return os.path.join(Crossfire.DataDirectory(), Crossfire.MapDirectory(),
22 "python/CFReputation/sql", f)
25 schema_files =
map(_get_sql_path, [
"schema.sql"])
26 init_files =
map(_get_sql_path, [
"init.sql",
"gods.sql"])
27 db_path = os.path.join(Crossfire.LocalDirectory(),
"factions.db")
28 con = sqlite3.connect(db_path)
31 with open(f)
as initfile:
32 con.executescript(initfile.read())
40 Return tuple with the name and reputation of the player with the given
41 faction. If faction is None, return all known reputations.
46 SELECT faction, CAST(ROUND(reputation*100) as integer) as rep
48 WHERE name=? AND ABS(rep) > 0;
50 result = con.execute(query, (player,)).fetchall()
53 SELECT faction, CAST(ROUND(reputation*100) as integer) as rep
55 WHERE name=? AND faction=? AND ABS(rep) > 0;
57 result = con.execute(query, (player, faction)).fetchall()
61 def record_kill(race, region, player, fraction=0.0001, limit=0.4):
65 SELECT faction, -attitude*? AS change
67 NATURAL JOIN relations
68 WHERE race=? AND (region=? OR region='ALL'))
69 REPLACE INTO reputations
70 SELECT ? AS player, updates.faction,
71 COALESCE(reputation, 0) + change AS new_rep
74 ON updates.faction=reputations.faction AND player=reputations.name
75 WHERE ABS(new_rep) <= ?;
77 con.execute(query, (fraction, race, region, player, limit))