diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index c71ce79b256b..242bacd1b709 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -626,6 +626,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
palette.set_expanded(FALSE)
/datum/action_group/palette/refresh_actions()
+ if(!owner)
+ return
+
var/atom/movable/screen/button_palette/palette = owner.toggle_palette
var/atom/movable/screen/palette_scroll/scroll_down = owner.palette_down
var/atom/movable/screen/palette_scroll/scroll_up = owner.palette_up
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 2a9780492023..8cac2ce4a743 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -224,7 +224,7 @@
if(action == src) // This could be us, which is dumb
continue
var/atom/movable/screen/movable/action_button/button = action.viewers[owner.hud_used]
- if(action.name == name && button.id)
+ if(action.name == name && button?.id)
bitfield |= button.id
bitfield = ~bitfield // Flip our possible ids, so we can check if we've found a unique one
diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm
index d58c21aa42d4..b88074c10b02 100644
--- a/code/datums/traits/_quirk.dm
+++ b/code/datums/traits/_quirk.dm
@@ -27,7 +27,7 @@
/// A lazylist of items people can receive from mail who have this quirk enabled
/// The base weight for the each quirk's mail goodies list to be selected is 5
/// then the item selected is determined by pick(selected_quirk.mail_goodies)
- var/list/mail_goodies
+ var/list/mail_goodies = list()
/datum/quirk/New(mob/living/quirk_mob, spawn_effects)
if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 5aae478ab637..da89ffb045dc 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -537,7 +537,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
dat += "[src] is also capable of automatically blocking damage, if you are facing the right direction (usually towards your attacker)!"
if(item_flags & ITEM_CAN_PARRY)
dat += "[src] can be used to parry damage using active parry. Pressed your active parry keybind to initiate a timed parry sequence."
- if(data.parry_automatic_enabled)
+ if(data?.parry_automatic_enabled)
dat += "[src] is also capable of automatically parrying an incoming attack, if your mouse is over your attacker at the time if you being hit in a direct, melee attack."
dat += "Examine [src] to get a full readout of its block/parry stats."
to_chat(user, dat.Join(" "))
diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm
index 9001b907dd9d..bc266bdf535e 100644
--- a/code/modules/admin/DB_ban/functions.dm
+++ b/code/modules/admin/DB_ban/functions.dm
@@ -442,7 +442,7 @@
for(var/j in list(ROLE_TRAITOR, ROLE_CHANGELING, ROLE_OPERATIVE, ROLE_REV, ROLE_CULTIST, ROLE_WIZARD, ROLE_HERETIC))
output += ""
output += ""
- output += "Reason:
"
+ output += "Reason:
"
output += ""
output += ""
diff --git a/code/modules/ambitions/ambition_objective.dm b/code/modules/ambitions/ambition_objective.dm
index b5f1d9e804cd..46aabd6748fa 100644
--- a/code/modules/ambitions/ambition_objective.dm
+++ b/code/modules/ambitions/ambition_objective.dm
@@ -142,7 +142,7 @@
var/list/players = list()
for(var/i in GLOB.joined_player_list) // BLUEMOON EDIT - было for(var/mob/living/carbon/human/player in GLOB.player_list)
var/mob/player = get_mob_by_ckey(i) // BLUEMOON ADD
- if(!player || !player.mind || player.mind.assigned_role == player.mind.special_role || player.client.inactivity > 10 MINUTES || player.mind == owner) //BLUEMOON ADD рантаймы с нулями без !players
+ if(!player || !player.client || !player.mind || player.mind.assigned_role == player.mind.special_role || player.client.inactivity > 10 MINUTES || player.mind == owner) //BLUEMOON ADD рантаймы с нулями без !players или без !player.client
continue
players += player.real_name
var/random_player = "Капитан"
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 3bff7e89a623..88a5694e6c02 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -128,6 +128,7 @@
if(ishuman(M) && load_character)
var/mob/living/carbon/human/H = M
var/mob/grab = get_mob_by_ckey(ckey)
+ grab.mind.transfer_to(H)
H.load_client_appearance(grab.client)
equip(M, load_character)
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 1e3b0adddda7..ee95440a4919 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -52,7 +52,8 @@
if(detached_pockets && detached_pockets.parent == U)
TakeComponent(detached_pockets)
- U.armor = U.armor.detachArmor(armor)
+ if(U.armor && armor)
+ U.armor = U.armor.detachArmor(armor)
//SANDSTORM EDIT
current_uniform = null
//SANDSTORM EDIT END
diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
index 8718d4a67ba2..890824f62ce8 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm
@@ -160,6 +160,10 @@
var/ingredient_count = 0
for (var/atom/movable/ingredient as anything in ingredients)
+ //BLUEMOON FIX
+ if(ingredient_count > 90)// don't fuck around with byond overlays for too long, or byond overlays fuck you around.
+ break
+ //BLUEMOON FIX
var/image/ingredient_overlay = image(ingredient, src)
var/icon/ingredient_icon = icon(ingredient.icon, ingredient.icon_state)
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index c9fc844f7479..80c2e763c365 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -13,7 +13,7 @@
var/obj/item/drone_hat //If this is defined, drones without a default hat will spawn with this one during the holiday; check drones_as_items.dm to see this used
// Special things to be given during this!
- var/list/mail_goodies
+ var/list/mail_goodies = list()
// This proc gets run before the game starts when the holiday is activated. Do festive shit here.
/datum/holiday/proc/celebrate()
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index bb8a07a9447d..d55f1da6620c 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -30,7 +30,7 @@
continue
if(istype(bp, /obj/item/clothing))
var/obj/item/clothing/C = bp
- if(C.body_parts_covered & def_zone.body_part)
+ if(C.body_parts_covered & def_zone.body_part && C.armor)
protection += C.armor.getRating(d_type)
protection += physiology.armor.getRating(d_type)
return protection
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 05487a838d03..d73e23d1b0d8 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -413,7 +413,7 @@
for(var/i in clothing)
var/obj/item/clothing/clothes_check = i
// unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary
- if(clothes_check.armor.getRating(WOUND))
+ if(clothes_check.armor?.getRating(WOUND))
bare_wound_bonus = 0
break
@@ -469,10 +469,10 @@
if(owner && ishuman(owner))
var/mob/living/carbon/human/H = owner
var/list/clothing = H.clothingonpart(src)
- for(var/c in clothing)
- var/obj/item/clothing/C = c
+ for(var/obj/item/clothing/C as anything in clothing)
// unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary
- armor_ablation += C.armor.getRating(WOUND)
+ if(C.armor)
+ armor_ablation += C.armor.getRating(WOUND)
if(wounding_type == WOUND_SLASH)
C.take_damage_zone(body_zone, damage, BRUTE, armour_penetration)
else if(wounding_type == WOUND_BURN && damage >= 10) // lazy way to block freezing from shredding clothes without adding another var onto apply_damage()
diff --git a/config/entries/dbconfig.txt b/config/entries/dbconfig.txt
index d5bc37bce71e..c52fda186d3c 100644
--- a/config/entries/dbconfig.txt
+++ b/config/entries/dbconfig.txt
@@ -1,5 +1,3 @@
-## MySQL Connection Configuration
-## This is used for stats, feedback gathering,
## administration, and the in game library.
## Should SQL be enabled? Uncomment to enable
@@ -33,16 +31,7 @@ FEEDBACK_PASSWORD password
## Set to 0 for infinite
ASYNC_QUERY_TIMEOUT 10
-## Time in seconds for blocking queries to execute before slow query timeout
+## Time in seconds for blocking queries to execute before slow query timeout
## Set to 0 for infinite
## Must be less than or equal to ASYNC_QUERY_TIMEOUT
BLOCKING_QUERY_TIMEOUT 5
-
-## The maximum number of additional threads BSQL is allowed to run at once
-BSQL_THREAD_LIMIT 50
-
-## Uncomment to enable verbose BSQL communication logs
-#BSQL_DEBUG
-
-## Time to wait before considering a query as lingering too long
-@QUERY_DEBUG_LOG_TIMEOUT 70
diff --git a/modular_bluemoon/code/modules/jobs/job_types/synthetics/cyborg.dm b/modular_bluemoon/code/modules/jobs/job_types/synthetics/cyborg.dm
index 4ca17cd6b1f0..86a97ec92d90 100644
--- a/modular_bluemoon/code/modules/jobs/job_types/synthetics/cyborg.dm
+++ b/modular_bluemoon/code/modules/jobs/job_types/synthetics/cyborg.dm
@@ -6,6 +6,7 @@
if(player_client.prefs.silicon_lawset)
var/list/laws = CONFIG_GET(keyed_list/choosable_laws)
var/law_path = text2path(laws[player_client.prefs.silicon_lawset])
- var/obj/item/ai_module/chosenboard = new law_path
- chosenboard.install(R.laws, usr)
- qdel(chosenboard)
+ if(ispath(law_path))
+ var/obj/item/ai_module/chosenboard = new law_path
+ chosenboard.install(R.laws, usr)
+ qdel(chosenboard)
diff --git a/modular_bluemoon/shower_trait/shower_trait.dm b/modular_bluemoon/shower_trait/shower_trait.dm
index f036f0d1c30d..57220f3e2b0f 100644
--- a/modular_bluemoon/shower_trait/shower_trait.dm
+++ b/modular_bluemoon/shower_trait/shower_trait.dm
@@ -48,7 +48,8 @@
// забираем способность изменения оверлея вони
var/mob/living/carbon/human/H = quirk_holder
var/datum/action/cooldown/change_stink_overlay/C = locate() in H.actions
- C.Remove(H)
+ if(C)
+ C.Remove(H)
quirk_holder.cut_overlay(stink_overlay) // удаляем оверлей вони с игрока
diff --git a/strings/ambitions/security.json b/strings/ambitions/security.json
index f4fe673c9df4..c6efd780386b 100644
--- a/strings/ambitions/security.json
+++ b/strings/ambitions/security.json
@@ -106,5 +106,8 @@
"Преступник может быть полезен для станции. Организовать рабочее место для преступников, которые будут отрабатывать принесенные расходы на их содержание - неплохая идея.",
"У меня есть 9-миллиметровые пальцы-пистолеты. Устрою с мимом перестрелку.",
"На все дела беру с собой служебного пса."
+ ],
+ "Internal Affairs Agent": [
+ "SET ME"
]
}
diff --git a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.AssemblyReference.cache b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.AssemblyReference.cache
index d0220da4b95d..e69de29bb2d1 100644
Binary files a/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.AssemblyReference.cache and b/tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/UnstandardnessTestForDM.csproj.AssemblyReference.cache differ