diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 54099070cd..3b9dce8c3b 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -1,3 +1,5 @@ +#define DOM_BLOCKED_SPAM_CAP 6 + /obj/machinery/dominator name = "dominator" desc = "A visibly sinister device. Looks like you can break it if you hit it enough." @@ -13,9 +15,20 @@ var/datum/gang/gang var/operating = 0 //0=standby or broken, 1=takeover var/warned = 0 //if this device has set off the warning at <3 minutes yet + var/spam_prevention = DOM_BLOCKED_SPAM_CAP //first message is immediate var/datum/effect_system/spark_spread/spark_system var/obj/effect/countdown/dominator/countdown +/proc/dominator_excessive_walls(atom/A) + var/open = 0 + for(var/turf/T in circleviewturfs(center=A,radius=3)) + if(!istype(T, /turf/closed)) + open++ + if(open < 40) + return TRUE + else + return FALSE + /obj/machinery/dominator/tesla_act() qdel(src) @@ -48,6 +61,16 @@ if(gang && gang.is_dominating) var/time_remaining = gang.domination_time_remaining() if(time_remaining > 0) + if(dominator_excessive_walls(src)) + gang.domination_timer += 2 + playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) + if(spam_prevention < DOM_BLOCKED_SPAM_CAP) + spam_prevention++ + else + gang.message_gangtools("Warning: There are too many walls around your gang's dominator, its signal is being blocked!") + say("Error: Takeover signal is currently blocked! There are too many walls within 3 standard units of this device.") + spam_prevention = 0 + return . = TRUE playsound(loc, 'sound/items/timer.ogg', 10, 0) if(!warned && (time_remaining < 180)) diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm index c0bb1824b2..724191c642 100644 --- a/code/game/gamemodes/gang/gang_items.dm +++ b/code/game/gamemodes/gang/gang_items.dm @@ -305,7 +305,11 @@ if(obj.density) to_chat(user, "There's not enough room here!") return FALSE - + + if(dominator_excessive_walls(user)) + to_chat(user, "span class='warning'>The dominator will not function here! The dominator requires an open space within three standard units so that walls do not interfere with the signal.") + return FALSE + if(!(usrarea.type in gang.territory|gang.territory_new)) to_chat(user, "The dominator can be spawned only on territory controlled by your gang!") return FALSE