mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 15:47:15 +01:00
Merge remote-tracking branch 'upstream/master' into traymesons
Conflicts: code/modules/research/designs.dm icons/mob/eyes.dmi icons/obj/clothing/glasses.dmi
This commit is contained in:
@@ -61,19 +61,19 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
/obj/machinery/r_n_d/circuit_imprinter/proc/check_mat(datum/design/being_built, var/M)
|
||||
switch(M)
|
||||
if("$glass")
|
||||
return (g_amount - (being_built.materials[M]/efficiency_coeff) >= 0) ? 1 : 0
|
||||
return (g_amount - (being_built.materials[M]/efficiency_coeff) >= 0)
|
||||
if("$gold")
|
||||
return (gold_amount - (being_built.materials[M]/efficiency_coeff) >= 0) ? 1 : 0
|
||||
return (gold_amount - (being_built.materials[M]/efficiency_coeff) >= 0)
|
||||
if("$diamond")
|
||||
return (diamond_amount - (being_built.materials[M]/efficiency_coeff) >= 0) ? 1 : 0
|
||||
return (diamond_amount - (being_built.materials[M]/efficiency_coeff) >= 0)
|
||||
else
|
||||
return (reagents.has_reagent(M, (being_built.materials[M]/efficiency_coeff)) != 0) ? 1 : 0
|
||||
return (reagents.has_reagent(M, (being_built.materials[M]/efficiency_coeff)) != 0)
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials()
|
||||
return g_amount + gold_amount + diamond_amount
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
if (default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O))
|
||||
|
||||
@@ -126,16 +126,6 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
/////////////////Mining//////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/jackhammer
|
||||
name = "Sonic Jackhammer"
|
||||
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
|
||||
id = "jackhammer"
|
||||
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
|
||||
build_path = /obj/item/weapon/pickaxe/jackhammer
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/drill
|
||||
name = "Mining Drill"
|
||||
desc = "Yours is the drill that will pierce through the rock walls."
|
||||
@@ -152,32 +142,32 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
id = "plasmacutter"
|
||||
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
|
||||
materials = list("$metal" = 5000, "$glass" = 1000, "$gold" = 500, "$plasma" = 500)
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/plasmacutter
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/pick_diamond
|
||||
name = "Diamond Pickaxe"
|
||||
desc = "A pickaxe with a diamond pick head, this is just like minesim 2554!."
|
||||
id = "pick_diamond"
|
||||
req_tech = list("materials" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$diamond" = 3000)
|
||||
build_path = /obj/item/weapon/pickaxe/diamond
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/drill_diamond
|
||||
name = "Diamond Mining Drill"
|
||||
name = "Diamond-Tipped Mining Drill"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
id = "drill_diamond"
|
||||
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
|
||||
materials = list("$metal" = 6000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
|
||||
reliability = 79
|
||||
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
|
||||
category = list("Mining Designs")
|
||||
|
||||
/datum/design/jackhammer
|
||||
name = "Sonic Jackhammer"
|
||||
desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well, but has high power cost for doing so."
|
||||
id = "jackhammer"
|
||||
req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 8000, "$glass" = 1500, "$silver" = 2000, "$diamond" = 6000)
|
||||
build_path = /obj/item/weapon/pickaxe/drill/jackhammer
|
||||
category = list("Mining Designs")
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////Blue Space/////////////////
|
||||
/////////////////////////////////////////
|
||||
@@ -297,6 +287,16 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
build_path = /obj/item/clothing/mask/gas/welding
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/air_horn
|
||||
name = "Air Horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
id = "air_horn"
|
||||
req_tech = list("materials" = 2, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 4000, "$bananium" = 1000)
|
||||
build_path = /obj/item/weapon/bikehorn/airhorn
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/mesons
|
||||
name = "Optical Meson Scanners"
|
||||
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
|
||||
@@ -317,6 +317,16 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
|
||||
build_path = /obj/item/clothing/glasses/meson/engine
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/nvgmesons
|
||||
name = "Night Vision Optical Meson Scanners"
|
||||
desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display."
|
||||
id = "nvgmesons"
|
||||
req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 300, "$glass" = 400, "$plasma" = 250, "$uranium" = 1000)
|
||||
build_path = /obj/item/clothing/glasses/meson/night
|
||||
category = list("Equipement")
|
||||
|
||||
/datum/design/night_vision_goggles
|
||||
name = "Night Vision Goggles"
|
||||
desc = "Goggles that let you see through darkness unhindered."
|
||||
|
||||
@@ -599,7 +599,7 @@
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/borg_upgrade_reset
|
||||
name = "Cyborg Upgrade Module (Reset Module)"
|
||||
name = "Cyborg Upgrade (Reset Module)"
|
||||
id = "borg_upgrade_reset"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/reset
|
||||
@@ -608,7 +608,7 @@
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_rename
|
||||
name = "Cyborg Upgrade Module (Rename Module)"
|
||||
name = "Cyborg Upgrade (Rename Module)"
|
||||
id = "borg_upgrade_rename"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/rename
|
||||
@@ -617,7 +617,7 @@
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_restart
|
||||
name = "Cyborg Upgrade Module (Restart Module)"
|
||||
name = "Cyborg Upgrade (Restart Module)"
|
||||
id = "borg_upgrade_restart"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/restart
|
||||
@@ -626,7 +626,7 @@
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_vtec
|
||||
name = "Cyborg Upgrade Module (VTEC Module)"
|
||||
name = "Cyborg Upgrade (VTEC Module)"
|
||||
id = "borg_upgrade_vtec"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/vtec
|
||||
@@ -636,7 +636,7 @@
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_disablercooler
|
||||
name = "Cyborg Upgrade Module (Rapid Disabler Cooling Module)"
|
||||
name = "Cyborg Upgrade (Rapid Disabler Cooling Module)"
|
||||
id = "borg_upgrade_disablercooler"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/disablercooler
|
||||
@@ -646,18 +646,28 @@
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_jetpack
|
||||
name = "Cyborg Upgrade Module (Mining Jetpack)"
|
||||
name = "Cyborg Upgrade (Mining Jetpack)"
|
||||
id = "borg_upgrade_jetpack"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/jetpack
|
||||
req_tech = list("engineering" = 4, "power" = 4)
|
||||
materials = list("$metal"=10000,"$plasma"=12000,"$uranium" = 10000)
|
||||
materials = list("$metal"=10000, "$plasma"=5000, "$uranium" = 6000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_diamonddrill
|
||||
name = "Cyborg Upgrade (Diamond Drill)"
|
||||
id = "borg_upgrade_diamonddrill"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/ddrill
|
||||
req_tech = list("engineering" = 5, "materials" = 5)
|
||||
materials = list("$metal"=10000, "$diamond"=3750)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_syndicate_module
|
||||
name = "Borg Illegal Weapons Upgrade"
|
||||
desc = "Allows for the construction of illegal upgrades for cyborgs"
|
||||
name = "Cyborg Illegal Upgrades Module"
|
||||
desc = "Allows for the construction of restricted upgrades for cyborgs"
|
||||
id = "borg_syndicate_module"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 4, "syndicate" = 3)
|
||||
|
||||
@@ -22,27 +22,27 @@
|
||||
build_path = /obj/item/device/firing_pin/implant/loyalty
|
||||
category = list("Firing Pins")
|
||||
|
||||
/datum/design/stunrevolver
|
||||
name = "Stun Revolver"
|
||||
desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
|
||||
id = "stunrevolver"
|
||||
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 4000, "$glass" = 1000)
|
||||
build_path = /obj/item/weapon/gun/energy/stunrevolver
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/nuclear_gun
|
||||
name = "Advanced Energy Gun"
|
||||
desc = "An energy gun with an experimental miniaturized reactor."
|
||||
id = "nuclear_gun"
|
||||
req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3)
|
||||
req_tech = list("combat" = 4, "materials" = 5, "powerstorage" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 2000)
|
||||
reliability = 76
|
||||
build_path = /obj/item/weapon/gun/energy/gun/nuclear
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/stunrevolver
|
||||
name = "Stun Revolver"
|
||||
desc = "A high-tech revolver that fires internal, reusable stun cartridges in a revolving cylinder. The stun cartridges can be recharged using a conventional energy weapon recharger."
|
||||
id = "stunrevolver"
|
||||
req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$metal" = 4000)
|
||||
build_path = /obj/item/weapon/gun/energy/stunrevolver
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/tele_shield
|
||||
name = "Telescopic Riot Shield"
|
||||
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
|
||||
@@ -145,14 +145,14 @@
|
||||
build_path = /obj/item/weapon/gun/energy/xray
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/ionrifle
|
||||
name = "Ion Rifle"
|
||||
/datum/design/ioncarbine
|
||||
name = "Ion Carbine"
|
||||
desc = "How to dismantle a cyborg : The gun."
|
||||
id = "ionrifle"
|
||||
id = "ioncarbine"
|
||||
req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4)
|
||||
build_type = PROTOLATHE
|
||||
materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000)
|
||||
build_path = /obj/item/weapon/gun/energy/ionrifle
|
||||
build_path = /obj/item/weapon/gun/energy/ionrifle/carbine
|
||||
category = list("Weapons")
|
||||
|
||||
/datum/design/wormhole_projector
|
||||
|
||||
@@ -37,7 +37,7 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
return temp_list
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
if (default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O))
|
||||
|
||||
@@ -40,12 +40,6 @@
|
||||
temp_list[O] = text2num(temp_list[O])
|
||||
return temp_list
|
||||
|
||||
/obj/machinery/r_n_d/experimentor/proc/ConvertReqList2String(var/list/source_list)
|
||||
var/returnString = ""
|
||||
for(var/O in source_list)
|
||||
returnString += "[O];"
|
||||
return returnString
|
||||
|
||||
/* //uncomment to enable forced reactions.
|
||||
/obj/machinery/r_n_d/experimentor/verb/forceReaction()
|
||||
set name = "Force Experimentor Reaction"
|
||||
@@ -120,7 +114,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/r_n_d/experimentor/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/machinery/r_n_d/experimentor/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
|
||||
@@ -227,7 +221,7 @@
|
||||
--cloneCount
|
||||
if(cloneCount == 0)
|
||||
cloneMode = FALSE
|
||||
var/turf/dropturf = get_turf(pick(oview(1,src)))
|
||||
var/turf/dropturf = get_turf(pick(view(1,src)))
|
||||
if(!dropturf) //Failsafe to prevent the object being lost in the void forever.
|
||||
dropturf = get_turf(src)
|
||||
loaded_item.loc = dropturf
|
||||
@@ -256,6 +250,7 @@
|
||||
/obj/machinery/r_n_d/experimentor/proc/experiment(var/exp,var/obj/item/exp_on)
|
||||
recentlyExperimented = 1
|
||||
icon_state = "h_lathe_wloop"
|
||||
var/chosenchem
|
||||
var/criticalReaction = locate(exp_on) in critical_items ? TRUE : FALSE
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if(exp == SCANTYPE_POKE)
|
||||
@@ -265,8 +260,9 @@
|
||||
badThingCoeff++
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions and destroys [exp_on], lashing it's arms out at nearby people!.</span>")
|
||||
for(var/mob/living/m in oview(1))
|
||||
for(var/mob/living/m in oview(1, src))
|
||||
m.apply_damage(15,"brute",pick("head","chest","groin"))
|
||||
investigate_log("Experimentor dealt minor brute to [m].", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions!.</span>")
|
||||
@@ -276,6 +272,7 @@
|
||||
var/mob/living/target = locate(/mob/living) in oview(7,src)
|
||||
if(target)
|
||||
var/obj/item/throwing = loaded_item
|
||||
investigate_log("Experimentor has thrown [loaded_item] at [target]", "experimentor")
|
||||
ejectItem()
|
||||
if(throwing)
|
||||
throwing.throw_at(target, 10, 1)
|
||||
@@ -286,15 +283,17 @@
|
||||
visible_message("<span class='notice'>[exp_on] has activated an unknown subroutine!</span>")
|
||||
cloneMode = TRUE
|
||||
cloneCount = badThingCoeff
|
||||
investigate_log("Experimentor has made a clone of [exp_on]", "experimentor")
|
||||
ejectItem()
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, melting [exp_on] and leaking radiation!.</span>")
|
||||
for(var/mob/living/m in oview(1))
|
||||
for(var/mob/living/m in oview(1, src))
|
||||
m.apply_effect(25,IRRADIATE)
|
||||
investigate_log("Experimentor has irradiated [m]", "experimentor") //One entry per person so we know what was irradiated.
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, spewing toxic waste!.</span>")
|
||||
for(var/turf/T in oview(1))
|
||||
for(var/turf/T in oview(1, src))
|
||||
if(!T.density)
|
||||
if(prob(EFFECT_PROB_VERYHIGH))
|
||||
new /obj/effect/decal/cleanable/greenglow(T)
|
||||
@@ -304,6 +303,7 @@
|
||||
var/newPath = pickWeighted(valid_items)
|
||||
loaded_item = new newPath(src)
|
||||
visible_message("<span class='notice'>[src] malfunctions, transforming [savedName] into [loaded_item]!.</span>")
|
||||
investigate_log("Experimentor has transformed [savedName] into [loaded_item]", "experimentor")
|
||||
if(istype(loaded_item,/obj/item/weapon/grenade/chem_grenade))
|
||||
var/obj/item/weapon/grenade/chem_grenade/CG = loaded_item
|
||||
CG.prime()
|
||||
@@ -316,10 +316,11 @@
|
||||
new /obj/item/stack/sheet/mineral/plasma(get_turf(pick(oview(1,src))))
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] destroys [exp_on], leaking dangerous gas!.</span>")
|
||||
var/list/chems = list("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash")
|
||||
chosenchem = pick("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash")
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
R.my_atom = src
|
||||
R.add_reagent(pick(chems) , 50)
|
||||
R.add_reagent(chosenchem , 50)
|
||||
investigate_log("Experimentor has released [chosenchem] smoke.", "experimentor")
|
||||
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
@@ -328,22 +329,25 @@
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src]'s chemical chamber has sprung a leak!.</span>")
|
||||
var/list/chems = list("mutationtoxin","nanomachines","xenomicrobes")
|
||||
chosenchem = pick("mutationtoxin","nanomachines","xenomicrobes")
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
R.my_atom = src
|
||||
R.add_reagent(pick(chems) , 50)
|
||||
R.add_reagent(chosenchem , 50)
|
||||
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.start()
|
||||
R.delete()
|
||||
ejectItem(TRUE)
|
||||
warn_admins(usr, "[chosenchem] smoke")
|
||||
investigate_log("Experimentor has released <font color='red'>[chosenchem]</font> smoke!", "experimentor")
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, spewing harmless gas!.</span>")
|
||||
throwSmoke(src.loc)
|
||||
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] melts [exp_on], ionizing the air around it!.</span>")
|
||||
empulse(src.loc, 4, 6)
|
||||
investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if(exp == SCANTYPE_HEAT)
|
||||
@@ -352,16 +356,19 @@
|
||||
visible_message("<span class='danger'>[src]'s emergency coolant system gives off a small ding!</span>")
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/coffee/C = new /obj/item/weapon/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src))))
|
||||
var/list/chems = list("plasma","capsaicin","ethanol")
|
||||
chosenchem = pick("plasma","capsaicin","ethanol")
|
||||
C.reagents.remove_any(25)
|
||||
C.reagents.add_reagent(pick(chems) , 50)
|
||||
C.reagents.add_reagent(chosenchem , 50)
|
||||
C.name = "Cup of Suspicious Liquid"
|
||||
C.desc = "It has a large hazard symbol printed on the side in fading ink."
|
||||
investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor")
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
var/turf/start = get_turf(src)
|
||||
var/turf/MT = get_turf(locate(/mob/living) in oview(src, 3))
|
||||
var/mob/M = locate(/mob/living) in view(src, 3)
|
||||
var/turf/MT = get_turf(M)
|
||||
if(MT)
|
||||
visible_message("<span class='danger'>[src] dangerously overheats, launching a flaming fuel orb!</span>")
|
||||
investigate_log("Experimentor has launched a <font color='red'>fireball</font> at [M]!", "experimentor")
|
||||
var/obj/item/projectile/magic/fireball/FB = new /obj/item/projectile/magic/fireball(start)
|
||||
FB.original = MT
|
||||
FB.current = start
|
||||
@@ -371,6 +378,7 @@
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, melting [exp_on] and releasing a burst of flame!.</span>")
|
||||
explosion(src.loc, -1, 0, 0, 0, 0, flame_range = 2)
|
||||
investigate_log("Experimentor started a fire.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, melting [exp_on] and leaking hot air!.</span>")
|
||||
@@ -384,12 +392,14 @@
|
||||
removed.temperature = min((removed.temperature*heat_capacity + 100000)/heat_capacity, 1000)
|
||||
env.merge(removed)
|
||||
air_update_turf()
|
||||
investigate_log("Experimentor has released hot air.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, activating it's emergency coolant systems!.</span>")
|
||||
throwSmoke(src.loc)
|
||||
for(var/mob/living/m in oview(1))
|
||||
for(var/mob/living/m in oview(1, src))
|
||||
m.apply_damage(5,"burn",pick("head","chest","groin"))
|
||||
investigate_log("Experimentor has dealt minor burn damage to [m]", "experimentor")
|
||||
ejectItem()
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
if(exp == SCANTYPE_COLD)
|
||||
@@ -398,16 +408,18 @@
|
||||
visible_message("<span class='notice'>[src]'s emergency coolant system gives off a small ding!</span>")
|
||||
var/obj/machinery/vending/coffee/C = new /obj/machinery/vending/coffee(get_turf(pick(oview(1,src))))
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready!
|
||||
var/list/chems = list("uranium","frostoil","ephedrine")
|
||||
chosenchem = pick("uranium","frostoil","ephedrine")
|
||||
C.reagents.remove_any(25)
|
||||
C.reagents.add_reagent(pick(chems) , 50)
|
||||
C.reagents.add_reagent(chosenchem , 50)
|
||||
C.name = "Cup of Suspicious Liquid"
|
||||
C.desc = "It has a large hazard symbol printed on the side in fading ink."
|
||||
investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor")
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!</span>")
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
R.my_atom = src
|
||||
R.add_reagent("frostoil" , 50)
|
||||
investigate_log("Experimentor has released frostoil gas.", "experimentor")
|
||||
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
|
||||
smoke.set_up(R, 1, 0, src, 0, silent = 1)
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
@@ -426,6 +438,7 @@
|
||||
removed.temperature = (removed.temperature*heat_capacity - 75000)/heat_capacity
|
||||
env.merge(removed)
|
||||
air_update_turf()
|
||||
investigate_log("Experimentor has released cold air.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!.</span>")
|
||||
@@ -445,6 +458,7 @@
|
||||
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src]'s crusher goes way too many levels too high, crushing right through space-time!</span>")
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
|
||||
investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor")
|
||||
var/list/throwAt = list()
|
||||
for(var/i in oview(7,src))
|
||||
if(istype(i,/obj/item) || istype(i,/mob/living))
|
||||
@@ -456,6 +470,7 @@
|
||||
if(prob(EFFECT_PROB_LOW-badThingCoeff))
|
||||
visible_message("<span class='notice'>[src]'s crusher goes one level too high, crushing right into space-time!.</span>")
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
|
||||
investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor")
|
||||
var/list/oViewStuff = oview(7,src)
|
||||
var/list/throwAt = list()
|
||||
for(var/i in oViewStuff)
|
||||
@@ -477,6 +492,7 @@
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 3, -1)
|
||||
var/obj/item/weapon/relic/R = loaded_item
|
||||
R.reveal()
|
||||
investigate_log("Experimentor has revealed a relic with <span class='danger'>[R.realProc]</span> effect.", "experimentor")
|
||||
ejectItem()
|
||||
|
||||
//Global reactions
|
||||
@@ -492,30 +508,37 @@
|
||||
if(trackedIan)
|
||||
throwSmoke(trackedIan.loc)
|
||||
trackedIan.loc = src.loc
|
||||
investigate_log("Experimentor has stolen Ian!", "experimentor") //...if anyone ever fixes it...
|
||||
else
|
||||
new /mob/living/simple_animal/corgi(src.loc)
|
||||
investigate_log("Experimentor has spawned a new corgi.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(globalMalf > 36 && globalMalf < 50)
|
||||
visible_message("<span class='notice'>[src] improves [exp_on], drawing the life essence of those nearby!</span>")
|
||||
for(var/mob/living/m in view(4,src))
|
||||
m << "<span class='danger'>You feel your flesh being torn from you, mists of blood drifting to [src]!</span>"
|
||||
m.apply_damage(50,"brute","chest")
|
||||
investigate_log("Experimentor has taken 50 brute a blood sacrifice from [m]", "experimentor")
|
||||
var/list/reqs = ConvertReqString2List(exp_on.origin_tech)
|
||||
for(var/T in reqs)
|
||||
reqs[T] = reqs[T] + 1
|
||||
exp_on.origin_tech = ConvertReqList2String(reqs)
|
||||
exp_on.origin_tech = list2params(reqs)
|
||||
investigate_log("Experimentor has set the origin tech of [exp_on] to [exp_on.origin_tech]", "experimentor")
|
||||
if(globalMalf > 51 && globalMalf < 75)
|
||||
visible_message("<span class='notice'>[src] encounters a run-time error!</span>")
|
||||
throwSmoke(src.loc)
|
||||
if(trackedRuntime)
|
||||
throwSmoke(trackedRuntime.loc)
|
||||
trackedRuntime.loc = src.loc
|
||||
investigate_log("Experimentor has stolen Runtime!", "experimentor")
|
||||
else
|
||||
new /mob/living/simple_animal/cat(src.loc)
|
||||
investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
if(globalMalf > 76)
|
||||
visible_message("<span class='notice'>[src] begins to smoke and hiss, shaking violently!</span>")
|
||||
use_power(500000)
|
||||
investigate_log("Experimentor has drained power from its APC", "experimentor")
|
||||
|
||||
spawn(resetTime)
|
||||
icon_state = "h_lathe"
|
||||
@@ -562,6 +585,12 @@
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~
|
||||
/obj/machinery/r_n_d/experimentor/proc/warn_admins(var/mob/user, var/ReactionName)
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Experimentor reaction: [ReactionName] generated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
|
||||
log_game("Experimentor reaction: [ReactionName] generated by [user.ckey]([user]) in ([T.x],[T.y],[T.z])")
|
||||
|
||||
#undef SCANTYPE_POKE
|
||||
#undef SCANTYPE_IRRADIATE
|
||||
#undef SCANTYPE_GAS
|
||||
@@ -609,8 +638,8 @@
|
||||
user << "<span class='notice'>[src] does not react.</span>"
|
||||
return
|
||||
else if(src.loc == user)
|
||||
call(src,realProc)(user)
|
||||
cooldown = TRUE
|
||||
call(src,realProc)(user)
|
||||
spawn(cooldownMax)
|
||||
cooldown = FALSE
|
||||
else
|
||||
@@ -638,6 +667,7 @@
|
||||
playsound(src.loc, "sparks", rand(25,50), 1)
|
||||
var/obj/item/weapon/grenade/flashbang/CB = new/obj/item/weapon/grenade/flashbang(get_turf(user))
|
||||
CB.prime()
|
||||
warn_admins(user, "Flash")
|
||||
|
||||
/obj/item/weapon/relic/proc/petSpray(var/mob/user)
|
||||
visible_message("<span class='notice'>[src] begans to shake, and in the distance the sound of rampaging animals arises!</span>")
|
||||
@@ -647,6 +677,7 @@
|
||||
for(counter = 1; counter < animals; counter++)
|
||||
var/mobType = pick(valid_animals)
|
||||
new mobType(get_turf(src))
|
||||
warn_admins(user, "Mass Mob Spawn")
|
||||
|
||||
/obj/item/weapon/relic/proc/rapidDupe(var/mob/user)
|
||||
visible_message("<span class='notice'>[src] emits a loud pop!</span>")
|
||||
@@ -661,10 +692,10 @@
|
||||
R.realProc = realProc
|
||||
R.revealed = TRUE
|
||||
dupes |= R
|
||||
R.throw_at(pick(oview(7,src)),10,1)
|
||||
R.throw_at(pick(oview(7,get_turf(src))),10,1)
|
||||
counter = 0
|
||||
spawn(rand(10,100))
|
||||
for(counter = 1; counter < dupes.len; counter++)
|
||||
for(counter = 1; counter <= dupes.len; counter++)
|
||||
var/obj/item/weapon/relic/R = dupes[counter]
|
||||
qdel(R)
|
||||
|
||||
@@ -674,6 +705,7 @@
|
||||
if(src.loc == user)
|
||||
visible_message("<span class='notice'>The [src]'s top opens, releasing a powerful blast!</span>")
|
||||
explosion(user.loc, -1, rand(1,5), rand(1,5), rand(1,5), rand(1,5), flame_range = 2)
|
||||
warn_admins(user, "Explosion")
|
||||
|
||||
/obj/item/weapon/relic/proc/teleport(var/mob/user)
|
||||
visible_message("<span class='notice'>The [src] begins to vibrate!</span>")
|
||||
@@ -683,3 +715,9 @@
|
||||
throwSmoke(get_turf(user))
|
||||
do_teleport(user, get_turf(user), 8, asoundin = 'sound/effects/phasein.ogg')
|
||||
throwSmoke(get_turf(user))
|
||||
|
||||
//Admin Warning proc for relics
|
||||
/obj/item/weapon/relic/proc/warn_admins(var/mob/user, var/RelicType)
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("[RelicType] relic activated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
|
||||
log_game("[RelicType] relic used by [user.ckey]([user]) in ([T.x],[T.y],[T.z])")
|
||||
|
||||
@@ -94,7 +94,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
A = A / max(1, (being_built.materials[M]/efficiency_coeff))
|
||||
return A
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if (shocked)
|
||||
shock(user,50)
|
||||
if (default_deconstruction_screwdriver(user, "protolathe_t", "protolathe", O))
|
||||
|
||||
@@ -143,7 +143,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
griefProtection()
|
||||
*/
|
||||
|
||||
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
|
||||
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params)
|
||||
|
||||
//Loading a disk into it.
|
||||
if(istype(D, /obj/item/weapon/disk))
|
||||
@@ -168,7 +168,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(!emagged)
|
||||
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
|
||||
emagged = 1
|
||||
user << "<span class='notice'> You you disable the security protocols</span>"
|
||||
user << "<span class='notice'> You disable the security protocols</span>"
|
||||
|
||||
/obj/machinery/computer/rdconsole/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -202,7 +202,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
t_disk = null
|
||||
screen = 1.0
|
||||
|
||||
else if(href_list["copy_tech"]) //Copys some technology data from the research holder to the disk.
|
||||
else if(href_list["copy_tech"]) //Copy some technology data from the research holder to the disk.
|
||||
for(var/datum/tech/T in files.known_tech)
|
||||
if(href_list["copy_tech_ID"] == T.id)
|
||||
t_disk.stored = T
|
||||
@@ -353,6 +353,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(being_built)
|
||||
var/power = 2000
|
||||
var/amount=text2num(href_list["amount"])
|
||||
var/old_screen = screen
|
||||
amount = max(1, min(10, amount))
|
||||
for(var/M in being_built.materials)
|
||||
power += round(being_built.materials[M] * amount / 5)
|
||||
@@ -368,34 +369,38 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
|
||||
if (g2g) //If input is incorrect, nothing happens
|
||||
var/enough_materials = 1
|
||||
linked_lathe.busy = 1
|
||||
flick("protolathe_n",linked_lathe)
|
||||
use_power(power)
|
||||
|
||||
for(var/M in being_built.materials)
|
||||
if(!linked_lathe.check_mat(being_built, M))
|
||||
if(linked_lathe.check_mat(being_built, M) < amount)
|
||||
src.visible_message("<span class='notice'>The [src.name] beeps, \"Not enough materials to complete prototype.\"</span>")
|
||||
enough_materials = 0
|
||||
g2g = 0
|
||||
break
|
||||
switch(M)
|
||||
if("$metal")
|
||||
linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$glass")
|
||||
linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$gold")
|
||||
linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$silver")
|
||||
linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$plasma")
|
||||
linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$uranium")
|
||||
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$diamond")
|
||||
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$bananium")
|
||||
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount)))
|
||||
else
|
||||
linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount)
|
||||
if(enough_materials)
|
||||
for(var/M in being_built.materials)
|
||||
switch(M)
|
||||
if("$metal")
|
||||
linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$glass")
|
||||
linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$gold")
|
||||
linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$silver")
|
||||
linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$plasma")
|
||||
linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$uranium")
|
||||
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$diamond")
|
||||
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount)))
|
||||
if("$bananium")
|
||||
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount)))
|
||||
else
|
||||
linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount)
|
||||
|
||||
var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes.
|
||||
var/R = being_built.reliability
|
||||
@@ -412,7 +417,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
R = max((new_item.reliability/2), 0)
|
||||
new_item.loc = linked_lathe.loc
|
||||
linked_lathe.busy = 0
|
||||
screen = 3.15
|
||||
screen = old_screen
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something.
|
||||
@@ -426,6 +431,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
break
|
||||
if(being_built)
|
||||
var/power = 2000
|
||||
var/old_screen = screen
|
||||
for(var/M in being_built.materials)
|
||||
power += round(being_built.materials[M] / 5)
|
||||
power = max(2000, power)
|
||||
@@ -464,7 +470,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
new_item.reliability = R
|
||||
new_item.loc = linked_imprinter.loc
|
||||
linked_imprinter.busy = 0
|
||||
screen = 4.1
|
||||
screen = old_screen
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["disposeI"] && linked_imprinter) //Causes the circuit imprinter to dispose of a single reagent (all of it)
|
||||
@@ -825,17 +831,17 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
for(var/M in D.materials)
|
||||
t = linked_lathe.check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (!t)
|
||||
if (t < 1)
|
||||
temp_material += "<span class='bad'>[D.materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
else
|
||||
temp_material += " [D.materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c)
|
||||
if (c >= 1)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=1'>[D.name]</A>"
|
||||
if(c >= 5.0)
|
||||
if(c >= 5)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=5'>x5</A>"
|
||||
if(c >= 10.0)
|
||||
if(c >= 10)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=10'>x10</A>"
|
||||
dat += "[temp_material]"
|
||||
else
|
||||
@@ -858,17 +864,17 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
for(var/M in D.materials)
|
||||
t = linked_lathe.check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (!t)
|
||||
if (t < 1)
|
||||
temp_material += "<span class='bad'>[D.materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
else
|
||||
temp_material += " [D.materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c)
|
||||
if (c >= 1)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=1'>[D.name]</A>"
|
||||
if(c >= 5.0)
|
||||
if(c >= 5)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=5'>x5</A>"
|
||||
if(c >= 10.0)
|
||||
if(c >= 10)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=10'>x10</A>"
|
||||
dat += "[temp_material]"
|
||||
else
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
env.merge(removed)
|
||||
air_update_turf()
|
||||
|
||||
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if (disabled)
|
||||
return
|
||||
if (shocked)
|
||||
@@ -316,7 +316,7 @@
|
||||
onclose(user, "server_control")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
|
||||
/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params)
|
||||
..()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user