diff --git a/baystation12.dme b/baystation12.dme
index 8e69350ebe..9100395f76 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -454,6 +454,7 @@
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
#include "code\game\gamemodes\sandbox\sandbox.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
+#include "code\game\gamemodes\traitor\traitor_info.dm"
#include "code\game\gamemodes\wizard\rightandwrong.dm"
#include "code\game\gamemodes\wizard\soulstone.dm"
#include "code\game\gamemodes\wizard\spellbook.dm"
@@ -1178,8 +1179,8 @@
#include "code\WorkInProgress\Mloc\Shortcuts.dm"
#include "code\WorkInProgress\organs\implants.dm"
#include "code\WorkInProgress\organs\organs.dm"
-#include "code\WorkInProgress\Ported\head.dm"
#include "code\WorkInProgress\Ported\policetape.dm"
+#include "code\WorkInProgress\Ported\sql.dm"
#include "code\WorkInProgress\Ported\Abi79\uplink_kits.dm"
#include "code\WorkInProgress\Ported\Abi79\uplinks.dm"
#include "code\WorkInProgress\Ported\Bureaucracy\copier.dm"
diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm
index 203cbb77bb..ae261a85ac 100644
--- a/code/WorkInProgress/Ported/Abi79/uplinks.dm
+++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm
@@ -175,9 +175,9 @@ A list of items and costs is stored under the datum of every game mode, alongsid
if(text2num(href_list["cost"]) > uses) // Not enough crystals for the item
return 0
- //if(usr:mind && ticker.mode.traitors[usr:mind])
- //var/datum/traitorinfo/info = ticker.mode.traitors[usr:mind]
- //info.spawnlist += href_list["buy_item"]
+ if(usr:mind && ticker.mode.traitors[usr:mind])
+ var/datum/traitorinfo/info = ticker.mode.traitors[usr:mind]
+ info.spawnlist += href_list["buy_item"]
uses -= text2num(href_list["cost"])
@@ -268,7 +268,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
else
item:loc = get_turf(A)
usr.update_clothing()
- // usr.client.onBought("[item:name]") When we have the stats again, uncomment.
+ usr.client.onBought("[item:name]")
/* if(istype(item, /obj/spawner)) // Spawners need to have del called on them to avoid leaving a marker behind
del item*/
//HEADFINDBACK
@@ -371,7 +371,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
item:loc = get_turf(A)
/* if(istype(item, /obj/spawner)) // Spawners need to have del called on them to avoid leaving a marker behind
del item*/
- // usr.client.onBought("[item:name]") When we have the stats again, uncomment.
+ usr.client.onBought("[item:name]")
src.attack_self(usr)
return
diff --git a/code/WorkInProgress/Ported/head.dm b/code/WorkInProgress/Ported/sql.dm
similarity index 55%
rename from code/WorkInProgress/Ported/head.dm
rename to code/WorkInProgress/Ported/sql.dm
index d1cac9bc30..9e0cad90ad 100644
--- a/code/WorkInProgress/Ported/head.dm
+++ b/code/WorkInProgress/Ported/sql.dm
@@ -1,48 +1,65 @@
-//This looks to be the traitor win tracker code. Gonna comment it out as we lack it currently.
-/*
+//This looks to be the traitor win tracker code.
client/proc/add_roundsjoined()
if(!makejson)
return
+ var/DBConnection/dbcon = new()
+
+ dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
+ if(!dbcon.IsConnected()) return
+
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `roundsjoined` (`ckey`) VALUES ('[ckey(src.key)]')")
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
+
client/proc/add_roundssurvived()
if(!makejson)
return
+ var/DBConnection/dbcon = new()
+
+ dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
+ if(!dbcon.IsConnected()) return
+
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `roundsurvived` (`ckey`) VALUES ('[ckey(src.key)]')")
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
-client/proc/onDeath(var/mob/A = src.mob)
+
+client/proc/onDeath()
if(!makejson)
return
roundinfo.deaths++
- if(!ismob(A))
+ if(!ismob(mob))
return
- var/ckey = src.ckey
- var/area
+ var/area = get_area(mob)
var/attacker
var/tod = time2text(world.realtime)
var/health
var/last
- if(isturf(A.loc))
- area = A.loc:loc:name
- else
- area = A.loc:name
- if(ishuman(A.lastattacker))
- attacker = A.lastattacker:name
+ if(ishuman(mob.lastattacker))
+ attacker = mob.lastattacker:name
else
attacker = "None"
- health = "Oxy:[A.oxyloss]Brute:[A.bruteloss]Burn:[A.fireloss]Toxins:[A.toxloss]"
- if(A.logs.len >= 1)
- last = A.logs[A.logs.len]
+ health = "Oxy:[mob.oxyloss]Brute:[mob.bruteloss]Burn:[mob.fireloss]Toxins:[mob.toxloss]Brain:[mob.brainloss]"
+ if(mob.attack_log.len >= 1)
+ last = mob.attack_log[mob.attack_log.len]
else
last = "None"
+
+ var/DBConnection/dbcon = new()
+
+ dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
+ if(!dbcon.IsConnected()) return
+
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `deathlog` (`ckey`,`location`,`lastattacker`,`ToD`,`health`,`lasthit`) VALUES ('[ckey]',[dbcon.Quote(area)],[dbcon.Quote(attacker)],'[tod]','[health]',[dbcon.Quote(last)])")
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
+
client/proc/onBought(names)
if(!makejson) return
if(!names) return
+ var/DBConnection/dbcon = new()
+
+ dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
+ if(!dbcon.IsConnected()) return
+
var/DBQuery/cquery = dbcon.NewQuery("INSERT INTO `traitorbuy` (`type`) VALUES ([dbcon.Quote(names)])")
if(!cquery.Execute()) message_admins(cquery.ErrorMsg())
-*/
datum/roundinfo
var/core = 0
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 42837d308c..6cff317a6c 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -22,6 +22,7 @@
list/datum/mind/modePlayer = new
list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist
list/protected_jobs = list() // Jobs that can't be tratiors because
+ list/logtraitors = list()
required_players = 1
required_enemies = 0
recommended_enemies = 0
diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm
index 6b91dc6e4e..2782617d8d 100644
--- a/code/game/gamemodes/meme/meme.dm
+++ b/code/game/gamemodes/meme/meme.dm
@@ -92,7 +92,7 @@
// if picking hosts works with this method, remove the method above
if(!first_host)
first_host = pick(first_hosts)
- first_hosts.remove(first_host)
+ first_hosts.Remove(first_host)
M.enter_host(first_host.current)
forge_meme_objectives(meme, first_host)
diff --git a/code/game/gamemodes/revolution/rp-revolution.dm b/code/game/gamemodes/revolution/rp-revolution.dm
index c66dfef4cd..1c8d2367ee 100644
--- a/code/game/gamemodes/revolution/rp-revolution.dm
+++ b/code/game/gamemodes/revolution/rp-revolution.dm
@@ -25,15 +25,13 @@
/datum/game_mode/rp_revolution/announce()
world << "The current game mode is - Revolution RP!"
-// world << "Some crewmembers are attempting to start a revolution!
\nRevolutionaries - Kill the Captain, HoP, and HoS. Convert other crewmembers (excluding the Captain, HoP, HoS, and security officers) to your cause. Protect your leaders.
\nPersonnel - Protect the Captain, HoP, and HoR. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head)."
/datum/game_mode/rp_revolution/send_intercept()
var/intercepttext = "Cent. Com. Update Requested staus information: