Merge branch 'master' into development

Conflicts:
	code/game/machinery/cryopod.dm
	code/game/objects/structures/stool_bed_chair_nest/bed.dm
	code/modules/supermatter/supermatter.dm
This commit is contained in:
SoundScopes
2014-11-06 01:25:13 +00:00
31 changed files with 526 additions and 65 deletions
+21
View File
@@ -17,6 +17,27 @@ world/IsBanned(key,address,computer_id)
AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0)
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]")
if(config && config.ip_blacklist_enabled)
testing("Loading Blacklist")
var/text = file2text("data/ip_blacklist.txt")
if (!text)
error("Failed to load data/ip_blacklist.txt")
else
var/list/lines = text2list(text, "\n")
for(var/line in lines)
if (!line)
continue
if (copytext(line, 1, 2) == ";")
continue
var/banned_address = copytext(line, 1, length(line)+1)
testing("Blacklist: address:[address] - banned_address:[banned_address]")
if(banned_address == address)
log_access("Failed Login: [src] - Blacklisted IP")
message_admins("\blue Failed Login: [src] - Blacklisted IP")
AddBan(ckey(key), computer_id, "Bad IP", "Automated Ban", 0, 0)
return list("reason"="IP Blacklisted", "desc"="\nReason: This IP has been blacklisted from the server.\nIf you believe this is a mistake, please request help at [config.banappeals]")
if(config.ban_legacy_system)
+76 -3
View File
@@ -740,12 +740,50 @@ var/global/floorIsLava = 0
ooc_allowed = !( ooc_allowed )
if (ooc_allowed)
world << "<B>The OOC channel has been globally enabled!</B>"
ooc_dev_allowed = 1
ooc_mod_allowed = 1
else
world << "<B>The OOC channel has been globally disabled!</B>"
log_admin("[key_name(usr)] toggled OOC.")
message_admins("[key_name_admin(usr)] toggled OOC.", 1)
feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/toggledevooc()
set category = "Server"
set desc="Toggles Developer OOC"
set name="Toggle Dev OOC"
if(ooc_allowed)
usr << "OOC needs to be muted first"
return
ooc_dev_allowed = !( ooc_dev_allowed )
var/looc_status
if (ooc_dev_allowed)
looc_status = "Enabled"
else
looc_status = "Disabled"
log_admin("[key_name(usr)] [looc_status] Developer OOC.")
message_admins("[key_name_admin(usr)] [looc_status] Developer OOC.", 1)
msg_scopes("<B>Developer OOC has been [looc_status]</B>",1,1)
feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/togglemodooc()
set category = "Server"
set desc="Toggles Moderators OOC"
set name="Toggle Mod OOC"
if(ooc_allowed)
usr << "OOC needs to be muted first"
return
ooc_mod_allowed = !( ooc_mod_allowed )
var/looc_status
if (ooc_mod_allowed)
looc_status = "Enabled"
else
looc_status = "Disabled"
log_admin("[key_name(usr)] toggled Mod OOC.")
message_admins("[key_name_admin(usr)] [looc_status] Moderator OOC.", 1)
message_mods("<B>Moderator OOC has been [looc_status]</B>")
feedback_add_details("admin_verb","TMOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/togglelooc()
set category = "Server"
set desc="Globally Toggles LOOC"
@@ -753,14 +791,49 @@ var/global/floorIsLava = 0
looc_allowed = !( looc_allowed )
if (looc_allowed)
world << "<B>The LOOC channel has been globally enabled!</B>"
looc_dev_allowed = 1
looc_mod_allowed = 1
else
world << "<B>The LOOC channel has been globally disabled!</B>"
log_admin("[key_name(usr)] toggled LOOC.")
message_admins("[key_name_admin(usr)] toggled LOOC.", 1)
feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/toggledevlooc()
set category = "Server"
set desc="Toggles Developer LOOC"
set name="Toggle Dev LOOC"
if(looc_allowed)
usr << "Looc needs to be muted first"
return
looc_dev_allowed = !( looc_dev_allowed )
var/looc_status
if (looc_dev_allowed)
looc_status = "Enabled"
else
looc_status = "Disabled"
log_admin("[key_name(usr)] [looc_status] Developer LOOC.")
message_admins("[key_name_admin(usr)] [looc_status] Developer LOOC.", 1)
msg_scopes("<B>Developer LOOC has been [looc_status]</B>",1,1)
feedback_add_details("admin_verb","TDLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/togglemodlooc()
set category = "Server"
set desc="Toggles Moderator LOOC"
set name="Toggle Mod LOOC"
if(looc_allowed)
usr << "Looc needs to be muted first"
return
looc_mod_allowed = !( looc_mod_allowed )
var/looc_status
if (looc_mod_allowed)
looc_status = "Enabled"
else
looc_status = "Disabled"
log_admin("[key_name(usr)] [looc_status] Moderator LOOC.")
message_admins("[key_name_admin(usr)] [looc_status] Moderator LOOC.", 1)
message_mods("<B>Moderator LOOC has been [looc_status]</B>")
feedback_add_details("admin_verb","TMLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/admins/proc/toggledsay()
set category = "Server"
@@ -879,8 +952,8 @@ var/global/floorIsLava = 0
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
message_admins("\blue [key_name(usr)] [ticker.delay_end ? "<font color=#FF0000>delayed</font> the round end" : "has made the round end <font color=#00FF00>normally</font>"].", 1)
message_mods("\blue [key_name(usr)] [ticker.delay_end ? "<font color=#FF0000>delayed</font> the round end" : "has made the round end <font color=#00FF00>normally</font>"].", 1)
return //alert("Round end delayed", null, null, null, null, null)
going = !( going )
if (!( going ))
+49 -1
View File
@@ -59,7 +59,11 @@ var/list/admin_verbs_admin = list(
/client/proc/secrets,
/client/proc/toggleprayers,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/toggledevooc,
/datum/admins/proc/togglemodooc,
/datum/admins/proc/togglelooc,
/datum/admins/proc/togglemodlooc,
/datum/admins/proc/toggledevlooc,
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
@@ -138,6 +142,7 @@ var/list/admin_verbs_dev = list(
/client/proc/cmd_dev_say,
/client/proc/cmd_dev_bst,
/client/proc/cmd_dev_reset_gravity,
/client/proc/cmd_dev_reset_floating,
/client/proc/togglescopeslogs
)
var/list/admin_verbs_spawn = list(
@@ -188,7 +193,10 @@ var/list/admin_verbs_debug = list(
/client/proc/toggledebuglogs,
/client/proc/SDQL_query,
/client/proc/SDQL2_query,
/client/proc/cmd_dev_reset_gravity
/client/proc/cmd_dev_reset_gravity,
/client/proc/cmd_dev_reset_floating,
/client/proc/cleartox,
/client/proc/fillspace
)
var/list/admin_verbs_possess = list(
/proc/possess,
@@ -330,6 +338,7 @@ var/list/admin_verbs_mod = list(
admin_verbs_rejuv,
admin_verbs_sounds,
admin_verbs_spawn,
admin_verbs_dev,
/*Debug verbs added by "show debug verbs"*/
/client/proc/Cell,
/client/proc/do_not_use_these,
@@ -961,3 +970,42 @@ var/list/admin_verbs_mod = list(
usr << "You now will get advanced debug logs"
else
usr << "You now won't get advanced debug logs"
/client/proc/cleartox()
set category = "Special Verbs"
set name = "Clear Toxin/Fire in Zone"
if(!check_rights(R_DEBUG))
return
var/datum/gas_mixture/environment = usr.loc.return_air()
environment.toxins_archived = null
environment.toxins = 0
environment.carbon_dioxide = 0
environment.carbon_dioxide_archived = null
environment.oxygen = 21.8366
environment.oxygen_archived = null
environment.nitrogen = 82.1472
environment.nitrogen_archived = null
environment.temperature_archived = null
environment.temperature = 293.15
environment.update_values()
var/turf/simulated/location = get_turf(usr)
if(location.zone)
for(var/turf/T in location.zone.contents)
for(var/obj/fire/F in T.contents)
del(F)
for(var/obj/fire/FF in world)
del(FF)
/client/proc/fillspace()
set category = "Special Verbs"
set name = "Fill Space with floor"
if(!check_rights(R_DEBUG))
return
var/area/location = usr.loc.loc
if(location.name != "Space")
for(var/turf/space/S in location)
S.ChangeTurf(/turf/simulated/floor/plating)
if(location.name == "Space")
for(var/turf/space/S in range(2,usr.loc))
S.ChangeTurf(/turf/simulated/floor/plating)
+3 -1
View File
@@ -81,7 +81,9 @@
body += "<a href='?src=\ref[src];traitor="+ref+"'>TP</a> - "
body += "<a href='?src=\ref[usr];priv_msg=\ref"+ref+"'>PM</a> - "
body += "<a href='?src=\ref[src];subtlemessage="+ref+"'>SM</a> - "
body += "<a href='?src=\ref[src];adminplayerobservejump="+ref+"'>JMP</a><br>"
body += "<a href='?src=\ref[src];adminplayerobservejump="+ref+"'>JMP</a> - "
body += "<a href='?src=\ref[src];admin_wind_player="+ref+"'>WIND</a><br>"
if(antagonist > 0)
body += "<font size='2'><a href='?src=\ref[src];check_antagonist=1'><font color='red'><b>Antagonist</b></font></a></font>";
+17
View File
@@ -2768,3 +2768,20 @@
if("list")
PlayerNotesPage(text2num(href_list["index"]))
return
if(href_list["admin_wind_player"])
var/mob/M = locate(href_list["admin_wind_player"])
if(!ismob(M))
usr << "This can only be used on instances of type /mob"
return
if(!M.ckey) //sanity
usr << "This mob has no ckey"
return
if(alert("Wind [M]?",,"Yes","No")!="Yes")
return
M.weakened = 500
return
+112 -9
View File
@@ -40,8 +40,7 @@
bst.name = "Bluespace Technician"
bst.real_name = "Bluespace Technician"
bst.voice_name = "Bluespace Technician"
// bst.h_style = "hair_crewcut"
// bst.update_hair()
bst.h_style = "Crewcut"
//Items
var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/centcom_officer/bst(bst)
@@ -77,9 +76,11 @@
id.name = "[id.assignment]"
bst.equip_to_slot_or_del(id, slot_wear_id)
bst.update_inv_wear_id()
bst.regenerate_icons()
//Add the rest of the languages
//Because universal speak doesn't work right.
bst.add_language("Sol Common")
bst.add_language("Sinta'unathi")
bst.add_language("Siik'Maas")
bst.add_language("Skrellian")
@@ -98,7 +99,10 @@
spawn(5)
s.start()
bst.anchored = 0
spawn(10)
del(s)
log_debug("Bluespace Tech Spawned: X:[bst.x] Y:[bst.y] Z:[bst.z] User:[src]")
feedback_add_details("admin_verb","BST")
return 1
@@ -119,14 +123,108 @@
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
ghost.key = key
ghost.mind.name = "[ghost.key] BSTech"
ghost.name = "[ghost.key] BSTech"
ghost.real_name = "[ghost.key] BSTech"
ghost.voice_name = "[ghost.key] BSTech"
spawn(5)
del(s)
if(key && species.name != "Human")
switch(species.name)
if("Tajaran")
bsc()
if("Machine")
bsb()
if("Diona")
bsd()
if("Unathi")
bsu()
if("Skrell")
bss()
/* if(species.name != "Tajaran")
if(species.name == "Machine" && key)
h_style = "blue IPC screen"
regenerate_icons()
*/
if(key)
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
ghost.key = key
/* if(species.name == "Machine")
ghost.mind.name = "Bluespace Bot"
ghost.name = "Bluespace Bot"
ghost.real_name = "Bluespace Bot"
ghost.voice_name = "Bluespace Bot"
else
*/
ghost.mind.name = "[ghost.key] BSTech"
ghost.name = "[ghost.key] BSTech"
ghost.real_name = "[ghost.key] BSTech"
ghost.voice_name = "[ghost.key] BSTech"
del(src)
proc/bsc() //because we all have our unrealistic snowflakes right?
if(set_species("Tajaran"))
h_style = "Tajaran Ears"
name = "Bluespace Cat"
voice_name = "Bluespace Cat"
real_name = "Bluespace Cat"
mind.name = "Bluespace Cat"
regenerate_icons()
else
ghostize(0)
key = null
suicide()
proc/bsb()
if(set_species("Machine"))
h_style = "blue IPC screen"
name = "Bluespace Bot"
voice_name = "Bluespace Bot"
real_name = "Bluespace Bot"
mind.name = "Bluespace Bot"
regenerate_icons()
else
ghostize(0)
key = null
suicide()
proc/bsd()
if(set_species("Diona"))
name = "Bluespace Tree"
voice_name = "Bluespace Tree"
real_name = "Bluespace Tree"
mind.name = "Bluespace Tree"
regenerate_icons()
else
ghostize(0)
key = null
suicide()
proc/bsu()
if(set_species("Unathi"))
h_style = "Unathi Horns"
name = "Bluespace Snake"
voice_name = "Bluespace Snake"
real_name = "Bluespace Snake"
mind.name = "Bluespace Snake"
regenerate_icons()
else
ghostize(0)
key = null
suicide()
proc/bss()
if(set_species("Skrell"))
h_style = "Skrell Male Tentacles"
name = "Bluespace Squid"
voice_name = "Bluespace Squid"
real_name = "Bluespace Squid"
mind.name = "Bluespace Squid"
regenerate_icons()
else
ghostize(0)
key = null
suicide()
say(var/message)
var/verb = "says in a subdued tone"
..(message, verb)
@@ -156,6 +254,8 @@
translate_binary = 1
translate_hive = 1
canremove = 0
keyslot1 = new /obj/item/device/encryptionkey/binary
keyslot2 = new /obj/item/device/encryptionkey/ert
attack_hand()
if(!usr)
@@ -173,6 +273,9 @@
has_sensor = 0
sensor_mode = 0
canremove = 0
siemens_coefficient = 0
cold_protection = FULL_BODY
heat_protection = FULL_BODY
attack_hand()
if(!usr)
@@ -188,7 +291,7 @@
name = "Bluespace Technician's gloves"
desc = "A pair of modified gloves, 'BST' marked on the side."
siemens_coefficient = 0
permeability_coefficient = 0.05
permeability_coefficient = 0
canremove = 0
attack_hand()
+48 -3
View File
@@ -67,20 +67,65 @@
icon_state = "watch"
item_state = "watchgloves"
w_class = 1
var/time = 1
wired = 1
// var/time = 1
verb/checktime()
set category = "Object"
set name = "Check Time"
set src in usr
if(time == 1)
if(wired && !clipped)
usr << "You check your watch, spotting a digital collection of numbers reading '[worldtime2text()]'"
else if(wired && clipped)
usr << "You check your watch realising it's still open"
else
usr << "You check your watch as it dawns on you that it's broken"
verb/pointatwatch()
set category = "Object"
set name = "Point at watch"
set src in usr
if(time == 1)
if(wired && !clipped)
usr.visible_message ("<span class='notice'>[usr] taps their foot on the floor, arrogantly pointing at the [src] on their wrist with a look of derision in their eyes.</span>", "<span class='notice'>You point down at the [src], an arrogant look about your eyes.</span>")
else if(wired && clipped)
usr.visible_message ("<span class='notice'>[usr] taps their foot on the floor, arrogantly pointing at the [src] on their wrist with a look of derision in their eyes, not noticing it's open</span>", "<span class='notice'>You point down at the [src], an arrogant look about your eyes.</span>")
else
usr.visible_message ("<span class='notice'>[usr] taps their foot on the floor, arrogantly pointing at the [src] on their wrist with a look of derision in their eyes, not noticing it's broken</span>", "<span class='notice'>You point down at the [src], an arrogant look about your eyes.</span>")
attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/screwdriver))
if (clipped) //Using clipped because adding a new var for something is dumb
user.visible_message("\blue [user] screws the cover of the [src] closed.","\blue You screw the cover of the [src] closed..")
clipped = 0
return
// playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
user.visible_message("\blue [user] unscrew the cover of the [src].","\blue You unscrew the cover of the [src].")
clipped = 1
return
if(wired)
return
if(istype(W, /obj/item/weapon/cable_coil))
var/obj/item/weapon/cable_coil/C = W
if (!clipped)
user << "<span class='notice'>The [src] is not open.</span>"
return
if(wired)
user << "<span class='notice'>The [src] are already wired.</span>"
return
if(C.amount < 2)
user << "<span class='notice'>There is not enough wire to cover the [src].</span>"
return
C.use(2)
wired = 1
user << "<span class='notice'>You repair some wires in the [src].</span>"
return
emp_act(severity)
if(prob(50/severity))
wired = 0
..()
+6 -1
View File
@@ -248,8 +248,13 @@
attack_self(mob/user)
if(user.r_hand == src || user.l_hand == src)
var/mobgender
if(user.gender == "male")
mobgender = "guy"
else
mobgender = "gal"
for(var/mob/O in viewers(user, null))
O.show_message(text("\red [] uses [] to comb their hair with incredible style and sophistication. What a guy.", user, src), 1)
O.show_message(text("\red [] uses [] to comb their hair with incredible style and sophistication. What a [mobgender].", user, src), 1)
return
/obj/item/weapon/fluff/hugo_cinderbacth_1 //thatoneguy: Hugo Cinderbatch
+1 -1
View File
@@ -52,7 +52,7 @@
return
else if(user.zone_sel.selecting == "mouth")
user.visible_message("[user] swabs [M]'s mouth for a saliva sample.", "You swab [M]'s mouth for a saliva sample.")
dna = M.dna.unique_enzymes
dna += M.dna.unique_enzymes
used = 1
name = "swab of [M]'s DNA"
desc = "[initial(desc)] <br> \blue The label on the vial reads 'Sample of [M]'s DNA'."
@@ -44,6 +44,7 @@
/mob/living/simple_animal/hostile/giant_spider/death()
total_spiders -= 1
lying = 1
if(total_spiders <= (MAX_SPIDERS - 2) && !spider_can_spawn)
spider_can_spawn = 1
if(total_spiders < 0) //Admin mess around protection
@@ -53,6 +54,7 @@
/mob/living/simple_animal/hostile/giant_spider/Life() //Checks to see if spider has been respawned from var edits
if(stat == DEAD)
if(health > 0)
lying = 0
total_spiders += 1
..()
@@ -24,6 +24,7 @@
else
src.dna = user.dna.unique_enzymes
user << "\blue You feel your palm heat up as the gun reads your DNA profile."
desc += "<br>Linked to: [user.real_name]"
Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0)
if(src.dna != user.dna.unique_enzymes)
+8 -6
View File
@@ -153,15 +153,17 @@
/obj/structure/reagent_dispensers/fueltank/attack_ghost(mob/user as mob)
if(user.client && user.client.inquisitive_ghost)
examine()
if(!src.defuse && user.client.holder)
if(!user.client.holder)
return
if(!src.defuse && ((user.client.holder.rights & R_ADMIN) || (user.client.holder.rights & R_MOD)))
src.defuse = 1
message_admins("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).")
message_mods("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).")
message_admins("[key_name_admin(user)] <font color=#00FF00>defused</font> fueltank at ([loc.x],[loc.y],[loc.z]).")
message_mods("[key_name_admin(user)] <font color=#00FF00>defused</font> fueltank at ([loc.x],[loc.y],[loc.z]).")
else
if(!src.armed && user.client.holder)
if(!src.armed && ((user.client.holder.rights & R_ADMIN) || (user.client.holder.rights & R_MOD)))
src.defuse = 0
message_admins("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).")
message_mods("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).")
message_admins("[key_name_admin(user)] <font color=#FF0000>reset</font> fuse on fueltank at ([loc.x],[loc.y],[loc.z]).")
message_mods("[key_name_admin(user)] <font color=#FF0000>reset</font> fuse on fueltank at ([loc.x],[loc.y],[loc.z]).")
/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
+16 -8
View File
@@ -154,13 +154,13 @@
if(damage > explosion_point)
for(var/mob/living/mob in living_mob_list)
if(loc.z == mob.loc.z)
if(istype(mob, /mob/living/carbon/human))
//Hilariously enough, running into a closet should make you get hit the hardest.
var/mob/living/carbon/human/H = mob
H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) )
mob.apply_effect(rads, IRRADIATE)
if(istype(mob, /mob/living/carbon/human))
if(mob.loc.z != src.z)
continue
//Hilariously enough, running into a closet should make you get hit the hardest.
mob:hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) )
mob.apply_effect(rads, IRRADIATE)
explode()
else
@@ -204,8 +204,16 @@
equilibrium_power = 250
icon_state = base_icon_state
<<<<<<< HEAD
temp_factor = ( (equilibrium_power/DECAY_FACTOR)**3 )/800
power = max( (removed.temperature * temp_factor) * oxygen + power, 0)
=======
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
var/thermal_power = THERMAL_RELEASE_MODIFIER
if(removed.total_moles < 35) thermal_power += 750 //If you don't add coolant, you are going to have a bad time.
>>>>>>> master
//We've generated power, now let's transfer it to the collectors for storing/usage
transfer_energy()
@@ -368,4 +376,4 @@
return
/obj/machinery/power/supermatter/RepelAirflowDest(n)
return
return