mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
This commit is contained in:
@@ -130,7 +130,7 @@
|
||||
var/total_specific_power = 0 //the power required to remove one mole of filterable gas
|
||||
for (var/g in filtering)
|
||||
var/ratio = source.gas[g]/total_filterable_moles //this converts the specific power per mole of pure gas to specific power per mole of scrubbed gas
|
||||
total_specific_power = specific_power_gas[g]*ratio
|
||||
total_specific_power += specific_power_gas[g]*ratio
|
||||
|
||||
//Figure out how much of each gas to filter
|
||||
if (isnull(total_transfer_moles))
|
||||
|
||||
@@ -85,6 +85,9 @@ obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/a
|
||||
return node.pipe_color
|
||||
|
||||
/obj/machinery/atmospherics/process()
|
||||
last_flow_rate = 0
|
||||
last_power_draw = 0
|
||||
|
||||
build_network()
|
||||
|
||||
/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
var/frequency = 1439
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
var/hibernate = 0 //Do we even process?
|
||||
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
|
||||
var/list/scrubbing_gas = list("carbon_dioxide")
|
||||
|
||||
@@ -126,8 +127,8 @@
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/process()
|
||||
..()
|
||||
|
||||
last_power_draw = 0
|
||||
last_flow_rate = 0
|
||||
if (hibernate)
|
||||
return 1
|
||||
|
||||
if (!node)
|
||||
use_power = 0
|
||||
@@ -149,6 +150,12 @@
|
||||
|
||||
power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating)
|
||||
|
||||
if(scrubbing && power_draw < 0 && controller_iteration > 10) //99% of all scrubbers
|
||||
//Fucking hibernate because you ain't doing shit.
|
||||
hibernate = 1
|
||||
spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly
|
||||
hibernate = 0
|
||||
|
||||
if (power_draw >= 0)
|
||||
last_power_draw = power_draw
|
||||
use_power(power_draw)
|
||||
|
||||
@@ -7,6 +7,8 @@ var/list/directory = list() //list of all ckeys with associated client
|
||||
|
||||
var/global/list/player_list = list() //List of all mobs **with clients attached**. Excludes /mob/new_player
|
||||
var/global/list/mob_list = list() //List of all mobs, including clientless
|
||||
var/global/list/human_mob_list = list() //List of all human mobs and sub-types, including clientless
|
||||
var/global/list/silicon_mob_list = list() //List of all silicon mobs, including clientless
|
||||
var/global/list/living_mob_list = list() //List of all alive mobs, including clientless. Excludes /mob/new_player
|
||||
var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless. Excludes /mob/new_player
|
||||
|
||||
|
||||
@@ -11,3 +11,9 @@
|
||||
|
||||
/proc/isfloor(turf/T)
|
||||
return (istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor))
|
||||
|
||||
/proc/turf_clear(turf/T)
|
||||
for(var/atom/A in T)
|
||||
if(A.simulated)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -444,6 +444,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
/proc/sortmobs()
|
||||
var/list/moblist = list()
|
||||
var/list/sortmob = sortAtom(mob_list)
|
||||
for(var/mob/eye/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/silicon/ai/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/silicon/pai/M in sortmob)
|
||||
|
||||
@@ -55,19 +55,11 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(!stored_computer.manipulating)
|
||||
stored_computer.manipulating = 1
|
||||
stored_computer.loc = loc
|
||||
stored_computer.stat &= ~MAINT
|
||||
stored_computer.update_icon()
|
||||
loc = null
|
||||
usr << "You open \the [src]."
|
||||
|
||||
spawn(5)
|
||||
stored_computer.manipulating = 0
|
||||
qdel(src)
|
||||
else
|
||||
usr << "\red You are already opening the computer!"
|
||||
stored_computer.loc = loc
|
||||
stored_computer.stat &= ~MAINT
|
||||
stored_computer.update_icon()
|
||||
loc = stored_computer
|
||||
usr << "You open \the [src]."
|
||||
|
||||
|
||||
AltClick()
|
||||
@@ -82,12 +74,10 @@
|
||||
|
||||
if(stored_computer)
|
||||
stored_computer.eject_id()
|
||||
|
||||
/obj/machinery/computer3/laptop/verb/eject_id()
|
||||
set category = "Object"
|
||||
set name = "Eject ID Card"
|
||||
set src in oview(1)
|
||||
|
||||
var/obj/item/part/computer/cardslot/C = locate() in src.contents
|
||||
|
||||
if(!C)
|
||||
@@ -104,7 +94,7 @@
|
||||
return
|
||||
|
||||
usr << "You remove [card] from the laptop."
|
||||
C.remove(card)
|
||||
C.remove(4)
|
||||
|
||||
|
||||
/obj/machinery/computer3/laptop
|
||||
@@ -117,7 +107,6 @@
|
||||
pixel_y = -3
|
||||
show_keyboard = 0
|
||||
|
||||
var/manipulating = 0 // To prevent disappearing bug
|
||||
var/obj/item/device/laptop/portable = null
|
||||
|
||||
New(var/L, var/built = 0)
|
||||
@@ -157,12 +146,11 @@
|
||||
portable=new
|
||||
portable.stored_computer = src
|
||||
|
||||
if(!manipulating)
|
||||
portable.loc = loc
|
||||
loc = portable
|
||||
stat |= MAINT
|
||||
if(user)
|
||||
user << "You close \the [src]."
|
||||
portable.loc = loc
|
||||
loc = portable
|
||||
stat |= MAINT
|
||||
if(user)
|
||||
user << "You close \the [src]."
|
||||
|
||||
auto_use_power()
|
||||
if(stat&MAINT)
|
||||
|
||||
@@ -393,9 +393,9 @@
|
||||
occupant.ckey = null
|
||||
|
||||
//Make an announcement and log the person entering storage.
|
||||
control_computer.frozen_crew += "[occupant.real_name]"
|
||||
control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.assigned_role] - [worldtime2text()]"
|
||||
|
||||
announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
|
||||
announce.autosay("[occupant.real_name], [occupant.mind.assigned_role] [on_store_message]", "[on_store_name]")
|
||||
visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.</span>", 3)
|
||||
|
||||
// Delete the mob.
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
desc = "It's just an ordinary box."
|
||||
icon_state = "box"
|
||||
item_state = "syringe_kit"
|
||||
var/foldable = null // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
|
||||
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
|
||||
|
||||
// BubbleWrap - A box can be folded up to make card
|
||||
/obj/item/weapon/storage/box/attack_self(mob/user as mob)
|
||||
@@ -598,7 +598,6 @@
|
||||
icon_state = "light"
|
||||
desc = "This box is shaped on the inside so that only light tubes and bulbs fit."
|
||||
item_state = "syringe_kit"
|
||||
foldable = /obj/item/stack/material/cardboard //BubbleWrap
|
||||
storage_slots=21
|
||||
can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb)
|
||||
max_storage_space = 42 //holds 21 items of w_class 2
|
||||
|
||||
@@ -1236,7 +1236,7 @@ var/global/floorIsLava = 0
|
||||
if(!ai_number)
|
||||
usr << "<b>No AIs located</b>" //Just so you know the thing is actually working and not just ignoring you.
|
||||
|
||||
/datum/admins/proc/show_skills(var/mob/living/carbon/human/M as mob in world)
|
||||
/datum/admins/proc/show_skills()
|
||||
set category = "Admin"
|
||||
set name = "Show Skills"
|
||||
|
||||
@@ -1246,6 +1246,9 @@ var/global/floorIsLava = 0
|
||||
usr << "Error: you are not an admin!"
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/M = input("Select mob.", "Select mob.") as null|anything in human_mob_list
|
||||
if(!M) return
|
||||
|
||||
show_skill_window(usr, M)
|
||||
|
||||
return
|
||||
|
||||
@@ -711,66 +711,70 @@ var/list/admin_verbs_mentor = list(
|
||||
if(holder)
|
||||
src.holder.output_ai_laws()
|
||||
|
||||
/client/proc/rename_silicon(mob/living/silicon/S in mob_list)
|
||||
/client/proc/rename_silicon()
|
||||
set name = "Rename Silicon"
|
||||
set category = "Admin"
|
||||
|
||||
if(!istype(S))
|
||||
return
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
if(holder)
|
||||
var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "Enter new silicon name", S.real_name))
|
||||
if(new_name && new_name != S.real_name)
|
||||
admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
|
||||
S.SetName(new_name)
|
||||
var/mob/living/silicon/S = input("Select silicon.", "Rename Silicon.") as null|anything in silicon_mob_list
|
||||
if(!S) return
|
||||
|
||||
var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "[S.real_name] - Enter new silicon name", S.real_name))
|
||||
if(new_name && new_name != S.real_name)
|
||||
admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'")
|
||||
S.SetName(new_name)
|
||||
feedback_add_details("admin_verb","RAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/manage_silicon_laws(mob/living/silicon/S in mob_list)
|
||||
/client/proc/manage_silicon_laws()
|
||||
set name = "Manage Silicon Laws"
|
||||
set category = "Admin"
|
||||
|
||||
if(!istype(S))
|
||||
return
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
if(holder)
|
||||
var/obj/nano_module/law_manager/L = new(S)
|
||||
L.ui_interact(usr, state = admin_state)
|
||||
var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in silicon_mob_list
|
||||
if(!S) return
|
||||
|
||||
var/obj/nano_module/law_manager/L = new(S)
|
||||
L.ui_interact(usr, state = admin_state)
|
||||
admin_log_and_message_admins("has opened [S]'s law manager.")
|
||||
feedback_add_details("admin_verb","MSL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/change_human_appearance_admin(mob/living/carbon/human/H in world)
|
||||
/client/proc/change_human_appearance_admin()
|
||||
set name = "Change Mob Appearance - Admin"
|
||||
set desc = "Allows you to change the mob appearance"
|
||||
set category = "Admin"
|
||||
|
||||
if(!istype(H))
|
||||
return
|
||||
if(!check_rights(R_FUN)) return
|
||||
|
||||
if(holder)
|
||||
admin_log_and_message_admins("is altering the appearance of [H].")
|
||||
H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state)
|
||||
var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in human_mob_list
|
||||
if(!H) return
|
||||
|
||||
admin_log_and_message_admins("is altering the appearance of [H].")
|
||||
H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state)
|
||||
feedback_add_details("admin_verb","CHAA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/change_human_appearance_self(mob/living/carbon/human/H in mob_list)
|
||||
/client/proc/change_human_appearance_self()
|
||||
set name = "Change Mob Appearance - Self"
|
||||
set desc = "Allows the mob to change its appearance"
|
||||
set category = "Admin"
|
||||
|
||||
if(!istype(H))
|
||||
return
|
||||
if(!check_rights(R_FUN)) return
|
||||
|
||||
var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Self") as null|anything in human_mob_list
|
||||
if(!H) return
|
||||
|
||||
if(!H.client)
|
||||
usr << "Only mobs with clients can alter their own appearance."
|
||||
return
|
||||
|
||||
if(holder)
|
||||
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
|
||||
if("Yes")
|
||||
admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
|
||||
if("No")
|
||||
admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
|
||||
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
|
||||
if("Yes")
|
||||
admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
|
||||
if("No")
|
||||
admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
|
||||
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
|
||||
feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/change_security_level()
|
||||
@@ -795,12 +799,14 @@ var/list/admin_verbs_mentor = list(
|
||||
// feedback_add_details("admin_verb","MP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
|
||||
/client/proc/editappear(mob/living/carbon/human/M as mob in mob_list)
|
||||
/client/proc/editappear()
|
||||
set name = "Edit Appearance"
|
||||
set category = "Fun"
|
||||
|
||||
if(!check_rights(R_FUN)) return
|
||||
|
||||
var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list
|
||||
|
||||
if(!istype(M, /mob/living/carbon/human))
|
||||
usr << "\red You can only do this to humans!"
|
||||
return
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
|
||||
send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]")
|
||||
|
||||
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
|
||||
src << "<span class='pm'><span class='out'>" + create_text_tag("pm_out_alt", "", src) + " to <span class='name'>Admin IRC</span>: <span class='message'>[msg]</span></span></span>"
|
||||
|
||||
log_admin("PM: [key_name(src)]->IRC: [msg]")
|
||||
for(var/client/X in admins)
|
||||
|
||||
@@ -516,12 +516,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
for(var/areatype in areas_without_camera)
|
||||
world << "* [areatype]"
|
||||
|
||||
/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in mob_list)
|
||||
/client/proc/cmd_admin_dress()
|
||||
set category = "Fun"
|
||||
set name = "Select equipment"
|
||||
if(!ishuman(M))
|
||||
alert("Invalid mob")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/M = input("Select mob.", "Select equipment.") as null|anything in human_mob_list
|
||||
if(!M) return
|
||||
|
||||
//log_admin("[key_name(src)] has alienized [M.key].")
|
||||
var/list/dresspacks = list(
|
||||
"strip",
|
||||
|
||||
@@ -236,8 +236,9 @@ datum/preferences
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client) return
|
||||
update_preview_icon()
|
||||
user << browse_rsc(preview_icon_front, "previewicon.png")
|
||||
user << browse_rsc(preview_icon_side, "previewicon2.png")
|
||||
if(preview_icon_front && preview_icon_side)
|
||||
user << browse_rsc(preview_icon_front, "previewicon.png")
|
||||
user << browse_rsc(preview_icon_side, "previewicon2.png")
|
||||
var/dat = "<html><body><center>"
|
||||
|
||||
if(path)
|
||||
@@ -1667,6 +1668,7 @@ datum/preferences
|
||||
var/status = organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
O.status = 0
|
||||
if(status == "amputated")
|
||||
character.organs_by_name[O.limb_name] = null
|
||||
character.organs -= O
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];choice=toggle_lock'>Lock in new transaction</a><br><br>"
|
||||
|
||||
dat += "Transaction purpose: <a href='?src=\ref[src];choice=trans_purpose'>[transaction_purpose]</a><br>"
|
||||
dat += "<a href='?src=\ref[src];choice=trans_purpose'>Transaction purpose: [transaction_purpose]</a><br>"
|
||||
dat += "Value: <a href='?src=\ref[src];choice=trans_value'>$[transaction_amount]</a><br>"
|
||||
dat += "Linked account: <a href='?src=\ref[src];choice=link_account'>[linked_account ? linked_account.owner_name : "None"]</a><hr>"
|
||||
dat += "<a href='?src=\ref[src];choice=change_code'>Change access code</a><br>"
|
||||
|
||||
@@ -188,28 +188,35 @@ var/list/event_last_fired = list()
|
||||
active_with_role["Cyborg"] = 0
|
||||
active_with_role["Janitor"] = 0
|
||||
active_with_role["Gardener"] = 0
|
||||
active_with_role["Any"] = player_list.len
|
||||
|
||||
for(var/mob/M in player_list)
|
||||
if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive
|
||||
if(!M.mind || !M.client || M.client.is_afk(10 MINUTES)) // longer than 10 minutes AFK counts them as inactive
|
||||
continue
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "engineering robot module")
|
||||
active_with_role["Engineer"]++
|
||||
if(M.mind.assigned_role in list("Chief Engineer", "Station Engineer"))
|
||||
active_with_role["Any"]++
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.module)
|
||||
if(istype(R.module, /obj/item/weapon/robot_module/engineering))
|
||||
active_with_role["Engineer"]++
|
||||
else if(istype(R.module, /obj/item/weapon/robot_module/security))
|
||||
active_with_role["Security"]++
|
||||
else if(istype(R.module, /obj/item/weapon/robot_module/medical))
|
||||
active_with_role["Medical"]++
|
||||
else if(istype(R.module, /obj/item/weapon/robot_module/research))
|
||||
active_with_role["Scientist"]++
|
||||
|
||||
if(M.mind.assigned_role in engineering_positions)
|
||||
active_with_role["Engineer"]++
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "medical robot module")
|
||||
active_with_role["Medical"]++
|
||||
if(M.mind.assigned_role in medical_positions)
|
||||
active_with_role["Medical"]++
|
||||
|
||||
if(istype(M, /mob/living/silicon/robot) && M:module && M:module.name == "security robot module")
|
||||
active_with_role["Security"]++
|
||||
if(M.mind.assigned_role in security_positions)
|
||||
active_with_role["Security"]++
|
||||
|
||||
if(M.mind.assigned_role in list("Research Director", "Scientist"))
|
||||
if(M.mind.assigned_role in science_positions)
|
||||
active_with_role["Scientist"]++
|
||||
|
||||
if(M.mind.assigned_role == "AI")
|
||||
|
||||
@@ -58,14 +58,10 @@
|
||||
spawn_area_type = /area/security/tactical
|
||||
locstring = "tactical equipment storage"
|
||||
|
||||
//world << "looking for [spawn_area_type]"
|
||||
for(var/areapath in typesof(spawn_area_type))
|
||||
//world << " checking [areapath]"
|
||||
var/area/A = locate(areapath)
|
||||
//world << " A: [A], contents.len: [A.contents.len]"
|
||||
//world << " B: [B], contents.len: [B.contents.len]"
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(!F.contents.len)
|
||||
if(turf_clear(F))
|
||||
turfs += F
|
||||
|
||||
var/list/spawn_types = list()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
for(var/areapath in typesof(/area/hallway))
|
||||
var/area/A = locate(areapath)
|
||||
for(var/turf/simulated/floor/F in A.contents)
|
||||
if(!F.contents.len)
|
||||
if(turf_clear(F))
|
||||
turfs += F
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
|
||||
@@ -670,6 +670,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
client.images -= ghostimage //remove ourself
|
||||
|
||||
mob/dead/observer/MayRespawn(var/feedback = 0)
|
||||
if(!client || !mind)
|
||||
return 0
|
||||
if(mind.current && mind.current.stat != DEAD)
|
||||
if(feedback)
|
||||
src << "<span class='warning'>Your non-dead body prevent you from respawning.</span>"
|
||||
return 0
|
||||
if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
|
||||
if(feedback)
|
||||
src << "<span class='warning'>antagHUD restrictions prevent you from respawning.</span>"
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
|
||||
|
||||
human_mob_list |= src
|
||||
..()
|
||||
|
||||
if(dna)
|
||||
@@ -44,6 +45,7 @@
|
||||
make_blood()
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
human_mob_list -= src
|
||||
for(var/organ in organs)
|
||||
qdel(organ)
|
||||
return ..()
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
This is another way of saying that we won't bother dealing with them.*/
|
||||
else
|
||||
src << "No holopad connected."
|
||||
return
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
|
||||
@@ -206,7 +206,7 @@
|
||||
M.show_message(rendered, 2)
|
||||
else //This shouldn't occur, but better safe then sorry.
|
||||
src << "No holopad connected."
|
||||
return
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/ai/emote(var/act, var/type, var/message)
|
||||
|
||||
@@ -27,11 +27,13 @@
|
||||
#define MED_HUD 2 //Medical HUD mode
|
||||
|
||||
/mob/living/silicon/New()
|
||||
silicon_mob_list |= src
|
||||
..()
|
||||
add_language("Galactic Common")
|
||||
init_subsystems()
|
||||
|
||||
/mob/living/silicon/Destroy()
|
||||
silicon_mob_list -= src
|
||||
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
|
||||
AH.unregister(src)
|
||||
..()
|
||||
|
||||
@@ -34,10 +34,7 @@
|
||||
return 1
|
||||
|
||||
if(href_list["set_view"])
|
||||
if(is_malf(usr) || owner.is_ai_malf())
|
||||
current_view = text2num(href_list["set_view"])
|
||||
else
|
||||
current_view = 0
|
||||
current_view = text2num(href_list["set_view"])
|
||||
return 1
|
||||
|
||||
if(href_list["law_channel"])
|
||||
@@ -170,12 +167,8 @@
|
||||
|
||||
data["isAI"] = owner.isAI()
|
||||
data["isMalf"] = is_malf(user)
|
||||
data["isAIMalf"] = owner.is_ai_malf()
|
||||
data["isSlaved"] = owner.is_slaved()
|
||||
data["isAdmin"] = is_admin(user)
|
||||
|
||||
if(!(data["isMalf"] || data["isAIMalf"]))
|
||||
current_view = 0
|
||||
data["view"] = current_view
|
||||
|
||||
var/channels[0]
|
||||
@@ -183,9 +176,7 @@
|
||||
channels[++channels.len] = list("channel" = ch_name)
|
||||
data["channel"] = owner.lawchannel
|
||||
data["channels"] = channels
|
||||
|
||||
if(data["isMalf"] || data["isAIMalf"])
|
||||
data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
|
||||
data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
@@ -216,15 +207,6 @@
|
||||
/obj/nano_module/law_manager/proc/is_malf(var/mob/user)
|
||||
return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
|
||||
|
||||
/mob/living/silicon/proc/is_ai_malf()
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/robot/is_ai_malf()
|
||||
return is_slaved() && connected_ai.is_malf_or_traitor()
|
||||
|
||||
/mob/living/silicon/ai/is_ai_malf()
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/proc/is_slaved()
|
||||
return 0
|
||||
|
||||
|
||||
@@ -882,11 +882,14 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
dislocated = -1 //TODO, make robotic limbs a separate type, remove snowflake
|
||||
cannot_break = 1
|
||||
get_icon()
|
||||
unmutate()
|
||||
for (var/obj/item/organ/external/T in children)
|
||||
if(T)
|
||||
T.robotize()
|
||||
|
||||
/obj/item/organ/external/proc/mutate()
|
||||
if(src.status & ORGAN_ROBOT)
|
||||
return
|
||||
src.status |= ORGAN_MUTATED
|
||||
owner.update_body()
|
||||
|
||||
|
||||
@@ -57,6 +57,15 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">01 June 2015</h2>
|
||||
<h2 class="date">04 June 2015</h2>
|
||||
<h3 class="author">PsiOmegaDelta updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">AI eyes can now be found in the observer follow list.</li>
|
||||
<li class="rscadd">Synths can now review all law modules that can be found on the station from their law manager.</li>
|
||||
<li class="rscadd">Synths can state these laws if desired, however this is strongly discouraged unless subverted/malfunctioning.</li>
|
||||
<li class="bugfix">Astral projecting mobs, such as wizards or cultists, may no longer respawn as something else while their body lives.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">02 June 2015</h2>
|
||||
<h3 class="author">Techhead updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -1936,3 +1936,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
2015-06-02:
|
||||
Techhead:
|
||||
- rscadd: Re-adds extended capacity emergency oxygen tanks to relevant jobs.
|
||||
2015-06-04:
|
||||
PsiOmegaDelta:
|
||||
- rscadd: AI eyes can now be found in the observer follow list.
|
||||
- rscadd: Synths can now review all law modules that can be found on the station
|
||||
from their law manager.
|
||||
- rscadd: Synths can state these laws if desired, however this is strongly discouraged
|
||||
unless subverted/malfunctioning.
|
||||
- bugfix: Astral projecting mobs, such as wizards or cultists, may no longer respawn
|
||||
as something else while their body lives.
|
||||
|
||||
@@ -41,18 +41,16 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
{{if data.isSlaved && data.isAdmin}}
|
||||
<span class='notice'>This unit is law synced to {{:data.isSlaved}}.</span>
|
||||
{{if data.isSlaved}}
|
||||
<div class='notice'>Law synced to {{:data.isSlaved}}.</div>
|
||||
{{/if}}
|
||||
|
||||
{{if data.isMalf || data.isAIMalf}}
|
||||
<div class="item">
|
||||
<div class="itemContentWidest">
|
||||
{{:helper.link('Law Management', null, {'set_view' : 0}, data.view == 0 ? 'selected' : null)}}
|
||||
{{:helper.link('Law Sets', null, {'set_view' : 1}, data.view == 1 ? 'selected' : null)}}
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="itemContentWidest">
|
||||
{{:helper.link('Law Management', null, {'set_view' : 0}, data.view == 0 ? 'selected' : null)}}
|
||||
{{:helper.link('Law Sets', null, {'set_view' : 1}, data.view == 1 ? 'selected' : null)}}
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{if data.view == 0}}
|
||||
{{if data.has_ion_laws}}
|
||||
@@ -196,6 +194,8 @@
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else data.view == 1}}
|
||||
<div class='notice'>Remember: Stating laws other than those currently loaded may be grounds for decommissioning - NanoTrasen</div>
|
||||
|
||||
{{for data.law_sets}}
|
||||
<div class="item">
|
||||
<div class="itemLabelWide">
|
||||
@@ -246,7 +246,7 @@
|
||||
|
||||
<div class="itemContent">
|
||||
<br>
|
||||
{{:helper.link('Load Laws', null, {'transfer_laws' : value.ref}, data.isSlaved ? 'disabled' : null)}}{{:helper.link('State Laws', null, {'state_law_set' : value.ref})}}
|
||||
{{:helper.link('Load Laws', null, {'transfer_laws' : value.ref}, data.isMalf ? null : 'disabled')}}{{:helper.link('State Laws', null, {'state_law_set' : value.ref})}}
|
||||
</div>
|
||||
</div>
|
||||
{{/for}}
|
||||
|
||||
Reference in New Issue
Block a user