diff --git a/code/_helpers/roundend.dm b/code/_helpers/roundend.dm index 9fbae7e33f..eb207d7526 100644 --- a/code/_helpers/roundend.dm +++ b/code/_helpers/roundend.dm @@ -57,13 +57,15 @@ continue if (!robo.connected_ai) + var/list/robot_stat_display = list() if (robo.stat != 2) - to_chat(world, span_filter_system(span_bold("[robo.name] survived as an AI-less stationbound synthetic! Its laws were:"))) // VOREStation edit + robot_stat_display += span_filter_system(span_bold("[robo.name] survived as an AI-less stationbound synthetic! Its laws were:")) else - to_chat(world, span_filter_system(span_bold("[robo.name] was unable to survive the rigors of being a stationbound synthetic without an AI. Its laws were:"))) // VOREStation edit + robot_stat_display += span_filter_system(span_bold("[robo.name] was unable to survive the rigors of being a stationbound synthetic without an AI. Its laws were:")) if(robo) //How the hell do we lose robo between here and the world messages directly above this? - robo.laws.show_laws(world) + robot_stat_display += robo.laws.get_formatted_laws() + to_chat(world, robot_stat_display.Join("\n")) if(dronecount) to_chat(world, span_filter_system(span_bold("There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] at the end of this round."))) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 949cd4c8fb..137a524514 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -222,6 +222,18 @@ supplied_laws.Cut() sorted_laws.Cut() +/datum/ai_laws/proc/get_formatted_laws() + sort_laws() + var/list/law_block = list() + for(var/datum/ai_law/law in sorted_laws) + if(law == zeroth_law_borg) + continue + if(law == zeroth_law) + law_block += span_info(span_red("[law.get_index()]. [law.law]")) + else + law_block += span_infoplain("[law.get_index()]. [law.law]") + return examine_block(law_block.Join("\n")) + /datum/ai_laws/proc/show_laws(var/who) sort_laws() for(var/datum/ai_law/law in sorted_laws) diff --git a/code/datums/outfits/tournament.dm b/code/datums/outfits/tournament.dm index af524a1665..d90665b82b 100644 --- a/code/datums/outfits/tournament.dm +++ b/code/datums/outfits/tournament.dm @@ -46,4 +46,4 @@ /decl/hierarchy/outfit/tournament_gear/janitor/post_equip(var/mob/living/carbon/human/H) var/obj/item/reagent_containers/glass/bucket/bucket = locate(/obj/item/reagent_containers/glass/bucket) in H if(bucket) - bucket.reagents.add_reagent(/datum/reagent/water, 70) + bucket.reagents.add_reagent(REAGENT_ID_WATER, 70) diff --git a/code/game/objects/items/soap.dm b/code/game/objects/items/soap.dm index bc7c5bb61d..3335a868a7 100644 --- a/code/game/objects/items/soap.dm +++ b/code/game/objects/items/soap.dm @@ -44,8 +44,8 @@ user.visible_message(span_notice("[user] takes a bite out of [src]!"), span_notice("You gnaw on [src]! This can't be good for you...")) var/mob/living/carbon/C = user playsound(get_turf(C), 'sound/items/eatfood.ogg', 25, 0) - C.ingested.add_reagent(/datum/reagent/toxin, 0.5) //normally formaldehyde, and 2 units of it. Toxin is being subsituted and is 4 times as toxic, hence a quarter of the normal amount. - C.ingested.add_reagent(/datum/reagent/chloralhydrate, 3) + C.ingested.add_reagent(REAGENT_ID_TOXIN, 0.5) //normally formaldehyde, and 2 units of it. Toxin is being subsituted and is 4 times as toxic, hence a quarter of the normal amount. + C.ingested.add_reagent(REAGENT_ID_CHLORALHYDRATE, 3) reagents.trans_to_holder(C.ingested, 1) bites++ if(bites >= 5) diff --git a/code/modules/admin/modify_robot.dm b/code/modules/admin/modify_robot.dm index d7327c6975..25cab53eb9 100644 --- a/code/modules/admin/modify_robot.dm +++ b/code/modules/admin/modify_robot.dm @@ -577,13 +577,11 @@ target.lawsync() return TRUE if("notify_laws") - to_chat(target, span_danger("Law Notice")) - target.laws.show_laws(target) + to_chat(target, span_danger("Law Notice\n") + target.laws.get_formatted_laws()) if(isAI(target)) var/mob/living/silicon/ai/our_ai = target for(var/mob/living/silicon/robot/R in our_ai.connected_robots) - to_chat(R, span_danger("Law Notice")) - R.laws.show_laws(R) + to_chat(R, span_danger("Law Notice\n") + R.laws.get_formatted_laws()) if(ui.user != target) to_chat(ui.user, span_notice("Laws displayed.")) return TRUE @@ -613,7 +611,7 @@ target.clear_supplied_laws() target.clear_inherent_laws() target.laws = new global.using_map.default_law_type - target.laws.show_laws(target) + to_chat(target, span_danger("Laws updated!\n") + target.laws.get_formatted_laws()) target.hud_used?.update_robot_modules_display() else target.emagged = 1 @@ -625,7 +623,7 @@ if(target.bolt) if(!target.bolt.malfunction) target.bolt.malfunction = MALFUNCTION_PERMANENT - target.laws.show_laws(target) + to_chat(target, span_danger("Laws updated!\n") + target.laws.get_formatted_laws()) target.hud_used?.update_robot_modules_display() return TRUE diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index e826d46f78..24e8acf664 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -101,40 +101,29 @@ else - if(!recipient) - if(holder) - to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found.")) - if(msg) - to_chat(src, msg) - else - current_ticket.MessageNoRecipient(msg) - return - //get message text, limit it's length.and clean/escape html if(!msg) msg = tgui_input_text(src, "Message:", "Private message to [key_name(recipient, 0, 0)]", multiline = TRUE, encode = FALSE) + //clean the message if it's not sent by a high-rank admin + if(!check_rights(R_SERVER|R_DEBUG, FALSE)||irc)//no sending html to the poor bots + msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN))) if(!msg) return - if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, span_admin_pm_warning("Error: Admin-PM: You are unable to use admin PM-s (muted).")) - return + if (src.handle_spam_prevention(MUTE_ADMINHELP)) + return - if(!recipient) - if(holder) - to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found.")) - else - current_ticket.MessageNoRecipient(msg) - return + if(prefs.muted & MUTE_ADMINHELP) + to_chat(src, span_admin_pm_warning("Error: Admin-PM: You are unable to use admin PM-s (muted).")) + return - if (src.handle_spam_prevention(MUTE_ADMINHELP)) - return - - //clean the message if it's not sent by a high-rank admin - if(!check_rights(R_SERVER|R_DEBUG, FALSE)||irc)//no sending html to the poor bots - msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN))) - if(!msg) + if(!recipient) + if(holder) + to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found.")) + to_chat(src, msg) + else + current_ticket.MessageNoRecipient(msg) return var/rawmsg = msg diff --git a/code/modules/materials/sheets/_sheets.dm b/code/modules/materials/sheets/_sheets.dm index ed15ae48c1..1d21169f7e 100644 --- a/code/modules/materials/sheets/_sheets.dm +++ b/code/modules/materials/sheets/_sheets.dm @@ -84,8 +84,10 @@ if(!istype(M) || material.name != M.material.name) return 0 var/transfer = ..(S,tamount,1) - if(src) update_strings() - if(M) M.update_strings() + if(!QDELETED(src)) + update_strings() + if(M) + M.update_strings() return transfer /obj/item/stack/material/attack_self(var/mob/user) diff --git a/code/modules/materials/sheets/organic/wood.dm b/code/modules/materials/sheets/organic/wood.dm index f3af059f97..63f4f3a1c8 100644 --- a/code/modules/materials/sheets/organic/wood.dm +++ b/code/modules/materials/sheets/organic/wood.dm @@ -53,12 +53,13 @@ if(W.sharp && W.edge) var/time = (3 SECONDS / max(W.force / 10, 1)) * W.toolspeed user.setClickCooldown(time) + var/our_material_name = src.material.name if(do_after(user, time, target = src) && use(1)) to_chat(user, span_notice("You cut up a log into planks.")) playsound(src, 'sound/effects/woodcutting.ogg', 50, 1) var/obj/item/stack/material/wood/existing_wood = null for(var/obj/item/stack/material/wood/M in user.loc) - if(M.material.name == src.material.name) + if(M.material.name == our_material_name) existing_wood = M break diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 9dfa8f615a..27e54ac728 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -280,8 +280,7 @@ var/list/mob_hat_cache = list() var/datum/gender/TU = GLOB.gender_datums[user.get_visible_gender()] set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.") - to_chat(src, span_infoplain(span_bold("Obey these laws:"))) - laws.show_laws(src) + to_chat(src, span_infoplain(span_bold("Obey these laws:\n") + laws.get_formatted_laws())) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and \his commands.")) return 1 diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index 080b691630..add016a659 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -30,8 +30,7 @@ to_chat(src, span_infoplain(span_bold("No AI selected to sync laws with, disabling lawsync protocol."))) lawupdate = FALSE - to_chat(who, span_infoplain(span_bold("Obey these laws:"))) - laws.show_laws(who) + to_chat(who, span_infoplain(span_bold("Obey these laws:\n") + laws.get_formatted_laws())) if(shell) //AI shell to_chat(who, span_infoplain(span_bold("Remember, you are an AI remotely controlling your shell, other AIs can be ignored."))) // TODO: Update to new antagonist system. diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6dc9f1fd04..11f37302bb 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1332,8 +1332,7 @@ log_game("[key_name(user)] assigned as operator on cyborg [key_name(src)]. Syndicate Operator change.") var/datum/gender/TU = GLOB.gender_datums[user.get_visible_gender()] set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.") - to_chat(src, span_infoplain(span_bold("Obey these laws:"))) - laws.show_laws(src) + to_chat(src, span_infoplain(span_bold("Obey these laws:\n") + laws.get_formatted_laws())) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands.")) else to_chat(user, span_filter_notice("[src] already has an operator assigned.")) @@ -1385,8 +1384,7 @@ to_chat(src, span_danger("> N")) sleep(20) to_chat(src, span_danger("ERRORERRORERROR")) - to_chat(src, span_infoplain(span_bold("Obey these laws:"))) - laws.show_laws(src) + to_chat(src, span_infoplain(span_bold("Obey these laws:\n") + laws.get_formatted_laws())) to_chat(src, span_danger("ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands.")) update_icon() hud_used.update_robot_modules_display() diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm index 77981c2a14..845ac56f43 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm @@ -71,8 +71,7 @@ var/confirm = tgui_alert(src, "Do you want to keep your laws or reroll? (For specific laws, feel free to ahelp and we'll see what we can do)", "Confirm laws", list("Keep", "Reroll ([law_retries])")) if(findtext(confirm, regex("Reroll \\(\[0-9\]*\\)", ""))) apply_new_laws() - to_chat(src, span_infoplain(span_bold("Obey these laws:"))) - laws.show_laws(src) + to_chat(src, span_infoplain(span_bold("Obey these laws:\n") + laws.get_formatted_laws())) law_retries -- else law_retries = 0 diff --git a/code/modules/tgui/modules/law_manager.dm b/code/modules/tgui/modules/law_manager.dm index 4df258a42d..16d13964ac 100644 --- a/code/modules/tgui/modules/law_manager.dm +++ b/code/modules/tgui/modules/law_manager.dm @@ -127,13 +127,11 @@ return TRUE if("notify_laws") - to_chat(owner, span_danger("Law Notice")) - owner.laws.show_laws(owner) + to_chat(owner, span_danger("Law Notice\n") + owner.laws.get_formatted_laws()) if(isAI(owner)) var/mob/living/silicon/ai/AI = owner for(var/mob/living/silicon/robot/R in AI.connected_robots) - to_chat(R, span_danger("Law Notice")) - R.laws.show_laws(R) + to_chat(R, span_danger("Law Notice\n") + R.laws.get_formatted_laws()) if(ui.user != owner) to_chat(ui.user, span_notice("Laws displayed.")) return TRUE