Merge remote-tracking branch 'upstream/master' into dev-freeze

Signed-off-by: Mloc-Argent <colmohici@gmail.com>

Conflicts:
	code/game/machinery/cloning.dm
	code/modules/admin/admin_verbs.dm
This commit is contained in:
Mloc-Argent
2014-05-31 00:17:56 +01:00
34 changed files with 1306 additions and 1412 deletions

View File

@@ -136,7 +136,9 @@ var/list/alldepartments = list("Central Command")
authenticated = 0
if(href_list["dept"])
var/lastdpt = dpt
dpt = input(usr, "Which department?", "Choose a department", "") as null|anything in alldepartments
if(!dpt) dpt = lastdpt
if(href_list["auth"])
if ( (!( authenticated ) && (scan)) )

View File

@@ -245,7 +245,8 @@ client
if(ismob(D))
body += "<option value='?_src_=vars;give_spell=\ref[D]'>Give Spell</option>"
body += "<option value='?_src_=vars;give_disease=\ref[D]'>Give Disease</option>"
body += "<option value='?_src_=vars;give_disease2=\ref[D]'>Give Disease</option>"
body += "<option value='?_src_=vars;give_disease=\ref[D]'>Give TG-style Disease</option>"
body += "<option value='?_src_=vars;godmode=\ref[D]'>Toggle Godmode</option>"
body += "<option value='?_src_=vars;build_mode=\ref[D]'>Toggle Build Mode</option>"
@@ -495,6 +496,17 @@ client
src.give_disease(M)
href_list["datumrefresh"] = href_list["give_spell"]
else if(href_list["give_disease2"])
if(!check_rights(R_ADMIN|R_FUN)) return
var/mob/M = locate(href_list["give_disease2"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
src.give_disease2(M)
href_list["datumrefresh"] = href_list["give_spell"]
else if(href_list["ninja"])
if(!check_rights(R_SPAWN)) return

View File

@@ -179,7 +179,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Emergency crate"
group = "Engineering"
/datum/supply_packs/evacuation
/datum/supply_packs/inflatable
name = "Inflatable barriers"
contains = list(/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/weapon/storage/briefcase/inflatable,

View File

@@ -16,6 +16,7 @@
var/implant=null
var/ckey=null
var/mind=null
var/languages=null
/datum/dna2/record/proc/GetData()
var/list/ser=list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0)
@@ -220,6 +221,7 @@
icon = 'icons/obj/computer.dmi'
icon_state = "scanner"
density = 1
circuit = /obj/item/weapon/circuitboard/scan_consolenew
var/selected_ui_block = 1.0
var/selected_ui_subblock = 1.0
var/selected_se_block = 1.0
@@ -241,32 +243,6 @@
var/waiting_for_user_input=0 // Fix for #274 (Mash create block injector without answering dialog to make unlimited injectors) - N3X
/obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/scan_consolenew/M = new /obj/item/weapon/circuitboard/scan_consolenew( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
if (istype(I, /obj/item/weapon/disk/data)) //INSERT SOME diskS
if (!src.disk)
user.drop_item()
@@ -276,7 +252,7 @@
nanomanager.update_uis(src) // update all UIs attached to src
return
else
src.attack_hand(user)
..()
return
/obj/machinery/computer/scan_consolenew/ex_act(severity)
@@ -339,13 +315,6 @@
I.buf = buffer
return 1
/obj/machinery/computer/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/disk/data)) && (!src.disk))
user.drop_item()
W.loc = src
src.disk = W
user << "You insert [W]."
nanomanager.update_uis(src) // update all UIs attached to src
/*
/obj/machinery/computer/scan_consolenew/process() //not really used right now
if(stat & (NOPOWER|BROKEN))

View File

@@ -275,10 +275,15 @@ update_flag
/obj/machinery/portable_atmospherics/canister/Topic(href, href_list)
//Do not use "if(..()) return" here, canisters will stop working in unpowered areas like space or on the derelict.
//Do not use "if(..()) return" here, canisters will stop working in unpowered areas like space or on the derelict. // yeah but without SOME sort of Topic check any dick can mess with them via exploits as he pleases -walter0o
if (!istype(src.loc, /turf))
return 0
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) // exploit protection -walter0o
usr << browse(null, "window=canister")
onclose(usr, "canister")
return
if(href_list["toggle"])
if (valve_open)
if (holding)

View File

@@ -269,7 +269,7 @@ Auto Patrol: []"},
walk_to(src,0)
if (target) // make sure target exists
if (get_dist(src, src.target) <= 1) // if right next to perp
if (Adjacent(target)) // if right next to perp
playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
src.icon_state = "[lasercolor]ed209-c"
spawn(2)
@@ -731,7 +731,7 @@ Auto Patrol: []"},
/obj/machinery/bot/ed209/Bump(M as mob|obj) //Leave no door unopened!
if ((istype(M, /obj/machinery/door)) && (!isnull(src.botcard)))
var/obj/machinery/door/D = M
if (!istype(D, /obj/machinery/door/firedoor) && D.check_access(src.botcard))
if (!istype(D, /obj/machinery/door/firedoor) && D.check_access(src.botcard) && !istype(D,/obj/machinery/door/poddoor))
D.open()
src.frustration = 0
else if ((istype(M, /mob/living/)) && (!src.anchored))

View File

@@ -284,7 +284,7 @@
continue
if(src.patient && (get_dist(src,src.patient) <= 1))
if(src.patient && Adjacent(patient))
if(!src.currently_healing)
src.currently_healing = 1
src.frustration = 0
@@ -480,7 +480,7 @@
/obj/machinery/bot/medbot/Bump(M as mob|obj) //Leave no door unopened!
if ((istype(M, /obj/machinery/door)) && (!isnull(src.botcard)))
var/obj/machinery/door/D = M
if (!istype(D, /obj/machinery/door/firedoor) && D.check_access(src.botcard))
if (!istype(D, /obj/machinery/door/firedoor) && D.check_access(src.botcard) && !istype(D,/obj/machinery/door/poddoor))
D.open()
src.frustration = 0
else if ((istype(M, /mob/living/)) && (!src.anchored))

View File

@@ -219,7 +219,7 @@ Auto Patrol: []"},
walk_to(src,0)
if(target) // make sure target exists
if(get_dist(src, src.target) <= 1 && isturf(src.target.loc)) // if right next to perp
if(Adjacent(target)) // if right next to perp
if(istype(src.target,/mob/living/carbon))
playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
src.icon_state = "secbot-c"
@@ -600,8 +600,6 @@ Auto Patrol: []"},
if(istype(C, /mob/living/carbon/human))
src.threatlevel = src.assess_perp(C)
else if((src.idcheck) && (istype(C, /mob/living/carbon/monkey)))
src.threatlevel = 4
else if(istype(M, /mob/living/simple_animal/hostile))
if(M.stat == DEAD)
@@ -682,7 +680,7 @@ Auto Patrol: []"},
/obj/machinery/bot/secbot/Bump(M as mob|obj) //Leave no door unopened!
if((istype(M, /obj/machinery/door)) && (!isnull(src.botcard)))
var/obj/machinery/door/D = M
if(!istype(D, /obj/machinery/door/firedoor) && D.check_access(src.botcard))
if(!istype(D, /obj/machinery/door/firedoor) && D.check_access(src.botcard) && !istype(D,/obj/machinery/door/poddoor))
D.open()
src.frustration = 0
else if((istype(M, /mob/living/)) && (!src.anchored))

View File

@@ -212,8 +212,8 @@
if(R.dna.species == "Human") //no more xenos losing ears/tentacles
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
//for(var/datum/language/L in languages)
// H.add_language(L.name)
for(var/datum/language/L in R.languages)
H.add_language(L.name)
H.suiciding = 0
src.attempting = 0
return 1

View File

@@ -2,6 +2,7 @@
name = "AI System Integrity Restorer"
icon = 'icons/obj/computer.dmi'
icon_state = "ai-fixer"
circuit = /obj/item/weapon/circuitboard/aifixer
req_access = list(access_captain, access_robotics, access_heads)
var/mob/living/silicon/ai/occupant = null
var/active = 0
@@ -11,43 +12,13 @@
/obj/machinery/computer/aifixer/attackby(I as obj, user as mob)
/*
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/robotics/M = new /obj/item/weapon/circuitboard/robotics( A )
for (var/obj/C in src)
C.loc = src.loc
M.id = src.id
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/robotics/M = new /obj/item/weapon/circuitboard/robotics( A )
for (var/obj/C in src)
C.loc = src.loc
M.id = src.id
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
*/
if(istype(I, /obj/item/device/aicard))
if(stat & (NOPOWER|BROKEN))
user << "This terminal isn't functioning right now, get it working!"
return
I:transfer_ai("AIFIXER","AICARD",src,user)
//src.attack_hand(user)
..()
return
/obj/machinery/computer/aifixer/attack_ai(var/mob/user as mob)

View File

@@ -238,27 +238,10 @@
src.updateUsrDialog()
else if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/arcade/M = new /obj/item/weapon/circuitboard/arcade( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.anchored = 1
else
..()
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
new /obj/item/weapon/shard( src.loc )
A.state = 3
A.icon_state = "3"
else
user << "\blue You disconnect the monitor."
A.state = 4
A.icon_state = "4"
del(src)
/obj/machinery/computer/arcade/emp_act(severity)
if(stat & (NOPOWER|BROKEN))
..(severity)

View File

@@ -281,14 +281,15 @@
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/screwdriver))
user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.")
if(src.build_path == "/obj/machinery/computer/rdconsole/core")
src.name = "Circuit Board (RD Console - Robotics)"
src.build_path = "/obj/machinery/computer/rdconsole/robotics"
user << "\blue Access protocols succesfully updated."
user << "\blue Access protocols set to robotics."
else
src.name = "Circuit Board (RD Console)"
src.build_path = "/obj/machinery/computer/rdconsole/core"
user << "\blue Defaulting access protocols."
user << "\blue Access protocols set to default."
return
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)

View File

@@ -361,6 +361,7 @@
R.id= copytext(md5(subject.real_name), 2, 6)
R.name=R.dna.real_name
R.types=DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE
R.languages=subject.languages
//Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)

View File

@@ -4,6 +4,7 @@
name = "Pod Launch Control"
desc = "A controll for launching pods. Some people prefer firing Mechas."
icon_state = "computer_generic"
circuit = /obj/item/weapon/circuitboard/pod
var/id = 1.0
var/obj/machinery/mass_driver/connected = null
var/timing = 0.0
@@ -33,7 +34,7 @@
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == id)
M.open()
return
sleep(20)
for(var/obj/machinery/mass_driver/M in world)
@@ -48,7 +49,7 @@
return
return
/*
/obj/machinery/computer/pod/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
@@ -103,6 +104,7 @@
else
attack_hand(user)
return
*/
/obj/machinery/computer/pod/attack_ai(var/mob/user as mob)
@@ -171,6 +173,12 @@
connected.power = t
if(href_list["alarm"])
alarm()
if(href_list["drive"])
for(var/obj/machinery/mass_driver/M in machines)
if(M.id == id)
M.power = connected.power
M.drive()
if(href_list["time"])
timing = text2num(href_list["time"])
if(href_list["tp"])

View File

@@ -362,6 +362,11 @@
/obj/machinery/mecha_part_fabricator/proc/build_part(var/obj/item/part)
if(!part) return
// critical exploit prevention, do not remove unless you replace it -walter0o
if( !(locate(part, src.contents)) || !(part.vars.Find("construction_time")) || !(part.vars.Find("construction_cost")) ) // these 3 are the current requirements for an object being buildable by the mech_fabricator
return
src.being_built = new part.type(src)
src.desc = "It's building [src.being_built]."
src.remove_resources(part)
@@ -603,9 +608,26 @@
onclose(user, "mecha_fabricator")
return
/obj/machinery/mecha_part_fabricator/proc/exploit_prevention(var/obj/Part, mob/user as mob, var/desc_exploit)
// critical exploit prevention, feel free to improve or replace this, but do not remove it -walter0o
if(!Part || !user || !istype(Part) || !istype(user)) // sanity
return 1
if( !(locate(Part, src.contents)) || !(Part.vars.Find("construction_time")) || !(Part.vars.Find("construction_cost")) ) // these 3 are the current requirements for an object being buildable by the mech_fabricator
var/turf/LOC = get_turf(user)
message_admins("[key_name_admin(user)] tried to exploit an Exosuit Fabricator to [desc_exploit ? "get the desc of" : "duplicate"] <a href='?_src_=vars;Vars=\ref[Part]'>[Part]</a> ! ([LOC ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[LOC.x];Y=[LOC.y];Z=[LOC.z]'>JMP</a>" : "null"])", 0)
log_admin("EXPLOIT : [key_name(user)] tried to exploit an Exosuit Fabricator to [desc_exploit ? "get the desc of" : "duplicate"] [Part] !")
return 1
return null
/obj/machinery/mecha_part_fabricator/Topic(href, href_list)
..()
if(..()) // critical exploit prevention, do not remove unless you replace it -walter0o
return
var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
if(href_list["part_set"])
var/tpart_set = filter.getStr("part_set")
@@ -616,13 +638,25 @@
src.part_set = tpart_set
screen = "parts"
if(href_list["part"])
var/list/part = filter.getObj("part")
var/obj/part = filter.getObj("part")
// critical exploit prevention, do not remove unless you replace it -walter0o
if(src.exploit_prevention(part, usr))
return
if(!processing_queue)
build_part(part)
else
add_to_queue(part)
if(href_list["add_to_queue"])
add_to_queue(filter.getObj("add_to_queue"))
var/obj/part = filter.getObj("add_to_queue")
// critical exploit prevention, do not remove unless you replace it -walter0o
if(src.exploit_prevention(part, usr))
return
add_to_queue(part)
return update_queue_on_page()
if(href_list["remove_from_queue"])
remove_from_queue(filter.getNum("remove_from_queue"))
@@ -661,7 +695,12 @@
return update_queue_on_page()
if(href_list["part_desc"])
var/obj/part = filter.getObj("part_desc")
if(part)
// critical exploit prevention, do not remove unless you replace it -walter0o
if(src.exploit_prevention(part, usr, 1))
return
if(part)
temp = {"<h1>[part] description:</h1>
[part.desc]<br>
<a href='?src=\ref[src];clear_temp=1'>Return</a>

View File

@@ -184,6 +184,7 @@
anchored = 1
density = 0
layer = 2
var/health = 15
var/obj/effect/alien/weeds/node/linked_node = null
@@ -191,6 +192,7 @@
icon_state = "weednode"
name = "purple sac"
desc = "Weird purple octopus-like thing."
layer = 3
luminosity = NODERANGE
var/node_range = NODERANGE
@@ -200,10 +202,10 @@
/obj/effect/alien/weeds/New(pos, node)
..()
linked_node = node
if(istype(loc, /turf/space))
del(src)
return
linked_node = node
if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2")
spawn(rand(150, 200))
if(src)
@@ -230,6 +232,9 @@ Alien plants should do something if theres a lot of poison
del(src)
return
if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) )
return
direction_loop:
for(var/dirn in cardinal)
var/turf/T = get_step(src, dirn)
@@ -237,9 +242,6 @@ Alien plants should do something if theres a lot of poison
if (!istype(T) || T.density || locate(/obj/effect/alien/weeds) in T || istype(T.loc, /area/arrival) || istype(T, /turf/space))
continue
if(!linked_node || get_dist(linked_node, src) > linked_node.node_range)
return
// if (locate(/obj/movable, T)) // don't propogate into movables
// continue

View File

@@ -585,4 +585,14 @@
force = 5
w_class = 4.0
slot_flags = SLOT_BACK
*/
*/
//This should really be somewhere else but I don't know where. w/e
/obj/item/weapon/inflatable_duck
name = "inflatable duck"
desc = "No bother to sink or swim when you can just float!"
icon_state = "inflatable"
item_state = "inflatable"
flags = FPRINT | TABLEPASS
icon = 'icons/obj/clothing/belts.dmi'
slot_flags = SLOT_BELT

View File

@@ -134,12 +134,6 @@
"/obj/item/clothing/mask/luchador"
)
/obj/item/weapon/storage/belt/inflatable
name = "inflatable duck"
desc = "No bother to sink or swim when you can just float!"
icon_state = "inflatable"
item_state = "inflatable"
/obj/item/weapon/storage/belt/security/tactical
name = "combat belt"
desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage."

View File

@@ -497,36 +497,8 @@ var/list/mechtoys = list(
user << "\blue Special supplies unlocked."
hacked = 1
return
if(istype(I, /obj/item/weapon/screwdriver))
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
new /obj/item/weapon/shard( loc )
var/obj/item/weapon/circuitboard/supplycomp/M = new /obj/item/weapon/circuitboard/supplycomp( A )
for (var/obj/C in src)
C.loc = loc
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( loc )
var/obj/item/weapon/circuitboard/supplycomp/M = new /obj/item/weapon/circuitboard/supplycomp( A )
if(can_order_contraband)
M.contraband_enabled = 1
for (var/obj/C in src)
C.loc = loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else
attack_hand(user)
..()
return
/obj/machinery/computer/supplycomp/Topic(href, href_list)

View File

@@ -563,8 +563,8 @@ var/list/admin_verbs_mentor = list(
/client/proc/give_disease(mob/T as mob in mob_list) // -- Giacom
set category = "Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
set name = "Give Disease (old)"
set desc = "Gives a (tg-style) Disease to a mob."
var/list/disease_names = list()
for(var/v in diseases)
// "/datum/disease/" 15 symbols ~Intercross
@@ -576,6 +576,34 @@ var/list/admin_verbs_mentor = list(
feedback_add_details("admin_verb","GD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] the disease [D].", 1)
/client/proc/give_disease2(mob/T as mob in mob_list) // -- Giacom
set category = "Fun"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
var/datum/disease2/disease/D = new /datum/disease2/disease()
var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
D.makerandom(greater)
if (!greater)
D.infectionchance = 1
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if (H.species)
D.affected_species = list(H.species.name)
if(istype(T,/mob/living/carbon/monkey))
var/mob/living/carbon/monkey/M = T
D.affected_species = list(M.greaterform)
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"

View File

@@ -5,6 +5,10 @@
//BS12: Species-restricted clothing check.
/obj/item/clothing/mob_can_equip(M as mob, slot)
//if we can equip the item anyway, don't bother with species_restricted (aslo cuts down on spam)
if (!..())
return 0
if(species_restricted && istype(M,/mob/living/carbon/human))
var/wearable = null
@@ -26,7 +30,7 @@
M << "\red Your species cannot wear [src]."
return 0
return ..()
return 1
//Ears: headsets, earmuffs and tiny objects
/obj/item/clothing/ears

View File

@@ -7,9 +7,11 @@
else
nudge_lib = "lib/nudge.so"
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[msg]")
spawn(0)
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[msg]")
else
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [msg]")
spawn(0)
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [msg]")
return
/proc/send2mainirc(var/msg)

View File

@@ -161,28 +161,8 @@ proc/move_mining_shuttle()
src.req_access = list()
hacked = 1
usr << "You fried the consoles ID checking system. It's now available to everyone!"
else if(istype(W, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/mining_shuttle/M = new /obj/item/weapon/circuitboard/mining_shuttle( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.anchored = 1
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
new /obj/item/weapon/shard( src.loc )
A.state = 3
A.icon_state = "3"
else
user << "\blue You disconnect the monitor."
A.state = 4
A.icon_state = "4"
del(src)
else
..()
/******************************Lantern*******************************/

View File

@@ -308,9 +308,11 @@
var/datum/gas_mixture/environment = loc.return_air()
var/datum/gas_mixture/breath
// HACK NEED CHANGING LATER
if(health < config.health_threshold_crit)
if(health < config.health_threshold_crit && !reagents.has_reagent("inaprovaline"))
losebreath++
if(losebreath>0) //Suffocating so do not take a breath
losebreath--
if (prob(10)) //Gasp per 10 ticks? Sounds about right.
@@ -418,8 +420,6 @@
return
if(!breath || (breath.total_moles() == 0) || suiciding)
if(reagents.has_reagent("inaprovaline"))
return
if(suiciding)
adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster
failed_last_breath = 1

View File

@@ -19,6 +19,8 @@
icon_state = "spiderbot-chassis"
icon_living = "spiderbot-chassis"
icon_dead = "spiderbot-smashed"
universal_speak = 1 //Temp until these are rewritten.
wander = 0
health = 10
@@ -33,9 +35,8 @@
response_disarm = "shoos"
response_harm = "stomps on"
var/emagged = 0
var/obj/item/held_item = null //Storage for single item they can hold.
var/emagged = 0 //IS WE EXPLODEN?
var/syndie = 0 //IS WE SYNDICAT? (currently unused)
speed = -1 //Spiderbots gotta go fast.
//pass_flags = PASSTABLE //Maybe griefy?
small = 1

View File

@@ -127,7 +127,7 @@
// Copy Mimic
//
var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/cable, /obj/structure/window)
var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/cable, /obj/structure/window, /obj/item/projectile/animate)
/mob/living/simple_animal/hostile/mimic/copy

View File

@@ -31,6 +31,7 @@
desc = "A computer to remotely control a gas turbine"
icon = 'icons/obj/computer.dmi'
icon_state = "airtunnel0e"
circuit = /obj/item/weapon/circuitboard/turbine_control
anchored = 1
density = 1
var/obj/machinery/compressor/compressor
@@ -220,6 +221,7 @@
if(P.id == id)
doors += P
/*
/obj/machinery/computer/turbine_computer/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
@@ -252,6 +254,7 @@
else
src.attack_hand(user)
return
*/
/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob)
user.machine = src

View File

@@ -599,8 +599,9 @@
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "mixer0"
use_power = 1
idle_power_usage = 20
circuit = /obj/item/weapon/circuitboard/pandemic
//use_power = 1
//idle_power_usage = 20 //defaults make more sense.
var/temphtml = ""
var/wait = null
var/obj/item/weapon/reagent_containers/glass/beaker = null
@@ -829,33 +830,7 @@
/obj/machinery/computer/pandemic/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe(src.loc)
new /obj/item/weapon/shard(src.loc)
var/obj/item/weapon/circuitboard/pandemic/M = new /obj/item/weapon/circuitboard/pandemic(A)
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/pandemic/M = new /obj/item/weapon/circuitboard/pandemic(A)
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(stat & (NOPOWER|BROKEN)) return
if(src.beaker)
user << "A beaker is already loaded into the machine."

View File

@@ -34,6 +34,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole
name = "R&D Console"
icon_state = "rdcomp"
circuit = /obj/item/weapon/circuitboard/rdconsole
var/datum/research/files //Stores all the collected research data.
var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk.
var/obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk.
@@ -46,7 +47,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/id = 0 //ID of the computer (for server restrictions).
var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console
req_access = list(access_tox) //Data and setting manipulation requires scientist access.
req_access = list(access_research) //Data and setting manipulation requires scientist access.
/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID.
@@ -141,35 +142,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
*/
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
//The construction/deconstruction of the console code.
if(istype(D, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/rdconsole/M = new /obj/item/weapon/circuitboard/rdconsole( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/rdconsole/M = new /obj/item/weapon/circuitboard/rdconsole( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
//Loading a disk into it.
else if(istype(D, /obj/item/weapon/disk))
if(istype(D, /obj/item/weapon/disk))
if(t_disk || d_disk)
user << "A disk is already loaded into the machine."
return
@@ -186,6 +160,10 @@ won't update every console in existence) but it's more of a hassle to do. Also,
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You you disable the security protocols"
else
//The construction/deconstruction of the console code.
..()
src.updateUsrDialog()
return

View File

@@ -104,24 +104,5 @@ proc/move_research_shuttle()
hacked = 1
usr << "You fried the consoles ID checking system. It's now available to everyone!"
else if(istype(W, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/research_shuttle/M = new /obj/item/weapon/circuitboard/research_shuttle( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.anchored = 1
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
new /obj/item/weapon/shard( src.loc )
A.state = 3
A.icon_state = "3"
else
user << "\blue You disconnect the monitor."
A.state = 4
A.icon_state = "4"
del(src)
else
..()

View File

@@ -193,6 +193,7 @@
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
icon_state = "rdcomp"
circuit = /obj/item/weapon/circuitboard/rdservercontrol
var/screen = 0
var/obj/machinery/r_n_d/server/temp_server
var/list/servers = list()
@@ -332,38 +333,12 @@
return
/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
if(istype(D, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A )
for (var/obj/C in src)
C.loc = src.loc
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
if(istype(D, /obj/item/weapon/card/emag) && !emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You you disable the security protocols"
src.updateUsrDialog()
return
return ..()
/obj/machinery/r_n_d/server/robotics

View File

@@ -191,7 +191,7 @@
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
for(var/mob/living/l in range(src, 8))
var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) )
l.apply_effect(rads, IRRADIATE)

View File

@@ -2,20 +2,20 @@
name = "Cure Research Machine"
icon = 'icons/obj/computer.dmi'
icon_state = "dna"
circuit = /obj/item/weapon/circuitboard/curefab
var/curing
var/virusing
var/obj/item/weapon/reagent_containers/container = null
/obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
return ..(I,user)
if(istype(I,/obj/item/weapon/reagent_containers))
var/mob/living/carbon/C = user
if(!container)
container = I
C.drop_item()
I.loc = src
return
if(istype(I,/obj/item/weapon/virusdish))
if(virusing)
user << "<b>The pathogen materializer is still recharging.."
@@ -31,8 +31,8 @@
state("The [src.name] Buzzes", "blue")
return
src.attack_hand(user)
return
..()
return
/obj/machinery/computer/curer/attack_ai(var/mob/user as mob)
return src.attack_hand(user)

File diff suppressed because it is too large Load Diff