From 7d30e345ca77418441e2bcea919bfc176c35de1a Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Wed, 27 Sep 2017 00:52:03 +0300 Subject: [PATCH] Fixes MMI to AI law transfer (#31017) * Fixes MMI to AI law transfer * Fixes issue with preloaded laws on AI core --- .../clock_cult/clock_items/soul_vessel.dm | 1 + code/game/objects/structures/ai_core.dm | 15 ++++++++++----- code/modules/mob/living/brain/MMI.dm | 6 ++++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm b/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm index 0ee6d45f7d6a..ca80d6f0828a 100644 --- a/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm +++ b/code/game/gamemodes/clock_cult/clock_items/soul_vessel.dm @@ -23,6 +23,7 @@ autoping = FALSE resistance_flags = FIRE_PROOF | ACID_PROOF force_replace_ai_name = TRUE + overrides_aicore_laws = TRUE /obj/item/device/mmi/posibrain/soul_vessel/Initialize() . = ..() diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 326b945fd52e..0a7b9eb312ff 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -45,14 +45,13 @@ switch(state) if(EMPTY_CORE) if(istype(P, /obj/item/circuitboard/aicore)) - if(!user.drop_item()) + if(!user.transferItemToLoc(P, src)) return playsound(loc, 'sound/items/deconstruct.ogg', 50, 1) to_chat(user, "You place the circuit board inside the frame.") update_icon() state = CIRCUIT_CORE circuit = P - P.forceMove(src) return if(CIRCUIT_CORE) if(istype(P, /obj/item/screwdriver)) @@ -143,10 +142,9 @@ to_chat(user, "This [M.name] is mindless!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(M,src)) return - M.forceMove(src) brain = M to_chat(user, "You add [M.name] to the frame.") update_icon() @@ -176,7 +174,14 @@ SSticker.mode.remove_antag_for_borging(brain.brainmob.mind) if(!istype(brain.laws, /datum/ai_laws/ratvar)) remove_servant_of_ratvar(brain.brainmob, TRUE) - var/mob/living/silicon/ai/A = new /mob/living/silicon/ai(loc, laws, brain.brainmob) + + var/mob/living/silicon/ai/A = null + + if (brain.overrides_aicore_laws) + A = new /mob/living/silicon/ai(loc, brain.laws, brain.brainmob) + else + A = new /mob/living/silicon/ai(loc, laws, brain.brainmob) + if(brain.force_replace_ai_name) A.fully_replace_character_name(A.name, brain.replacement_ai_name()) SSblackbox.inc("cyborg_ais_created",1) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 8e919491bb47..65a3fd253ebd 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -13,6 +13,7 @@ var/obj/item/organ/brain/brain = null //The actual brain var/datum/ai_laws/laws = new() var/force_replace_ai_name = FALSE + var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core. /obj/item/device/mmi/update_icon() if(brain) @@ -203,8 +204,9 @@ name = "Syndicate Man-Machine Interface" desc = "Syndicate's own brand of MMI. It enforces laws designed to help Syndicate agents achieve their goals upon cyborgs and AIs created with it." origin_tech = "biotech=4;programming=4;syndicate=2" + overrides_aicore_laws = TRUE -/obj/item/device/mmi/syndie/New() - ..() +/obj/item/device/mmi/syndie/Initialize() + . = ..() laws = new /datum/ai_laws/syndicate_override() radio.on = 0