From 80be80a4c1fd1803d4b373e74f57b1871b4e12da Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Tue, 31 Jan 2012 14:53:16 -0700 Subject: [PATCH] Bugfixes! Fingerprint sanity checks Mulebot sanity checks Traitor objectives work, now Some mapping errors fixed. Attempted fix for solar tracking. --- code/datums/sun.dm | 2 +- code/game/atom_procs.dm | 16 +++-- code/game/gamemodes/traitor/traitor.dm | 99 +++++++++++++++++++------- code/game/machinery/bots/mulebot.dm | 9 ++- code/modules/power/tracker.dm | 3 +- maps/tgstation.2.0.8.dmm | 6 +- 6 files changed, 98 insertions(+), 37 deletions(-) diff --git a/code/datums/sun.dm b/code/datums/sun.dm index d701ad4c5e7..693cd69c156 100644 --- a/code/datums/sun.dm +++ b/code/datums/sun.dm @@ -42,7 +42,7 @@ for(var/obj/machinery/power/tracker/T in machines) - T.set_angle() + T.set_angle(angle) for(var/obj/machinery/power/solar/S in machines) if(S.control) diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index b4cde466f12..9c77038c17d 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -101,12 +101,18 @@ var/prints for(var/i = 1, i < (src.fingerprints.len + 1), i++) var/list/L = params2list(src.fingerprints[i]) - if(L[1] == md5(H.dna.uni_identity)) - new_prints = i - prints = L[2] - break + if(L.len > 1) + if(L[1] == md5(H.dna.uni_identity)) + new_prints = i + prints = L[2] + break + else + src.fingerprints[i] = L[1] + "&" + stars(L[2], rand(80,90)) else - src.fingerprints[i] = L[1] + "&" + stars(L[2], rand(80,90)) + var/turf/T = get_turf(src) + for (var/mob/N in world) + if (N.client && N.client.holder) + N << "ERROR:Fingerprint application failed! Important data: [src.name] at [T.x], [T.y], [T.z] with the print string [L[1]]" if(new_prints) src.fingerprints[new_prints] = text("[]&[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), rand(15,30)))) else if(new_prints == 0) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 000a13d8dac..52071fc0f52 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -88,35 +88,86 @@ traitor.objectives += block_objective else - var/list/target = traitor.objectives for(var/i = 1, i <= rand(1,3), i++) - var/datum/objective/objective switch(rand(1,100)) if(1 to 30) - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = traitor - kill_objective.find_target() - objective = kill_objective + if(!locate(/datum/objective/assassinate) in traitor.objectives && !locate(/datum/objective/protect) in traitor.objectives) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + traitor.objectives += kill_objective + else + var/works = 1 + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + for(var/j, j < traitor.objectives.len, j++) + var/compare = istype(traitor.objectives[j],/datum/objective/assassinate) + if(compare) + var/datum/objective/assassinate/test = traitor.objectives[j] + if(test.target == kill_objective.target) + works = 0 + break + compare = istype(traitor.objectives[j],/datum/objective/protect) + if(compare) + var/datum/objective/protect/test = traitor.objectives[j] + if(test.target == kill_objective.target) + works = 0 + break + if(works) + traitor.objectives += kill_objective + else + i -= 1 if(31 to 40) - var/datum/objective/protect/protect_objective = new - protect_objective.owner = traitor - protect_objective.find_target() - objective = protect_objective + if(!locate(/datum/objective/assassinate) in traitor.objectives && !locate(/datum/objective/protect) in traitor.objectives) + var/datum/objective/protect/protect_objective = new + protect_objective.owner = traitor + protect_objective.find_target() + traitor.objectives += protect_objective + else + var/works = 1 + var/datum/objective/protect/protect_objective = new + protect_objective.owner = traitor + protect_objective.find_target() + for(var/j, j < traitor.objectives.len, j++) + var/compare = istype(traitor.objectives[j],/datum/objective/assassinate) + if(compare) + var/datum/objective/assassinate/test = traitor.objectives[j] + if(test.target == protect_objective.target) + works = 0 + break + compare = istype(traitor.objectives[j],/datum/objective/protect) + if(compare) + var/datum/objective/protect/test = traitor.objectives[j] + if(test.target == protect_objective.target) + works = 0 + break + if(works) + traitor.objectives += protect_objective + else + i -= 1 else - var/datum/objective/steal/steal_objective = new - steal_objective.owner = traitor - steal_objective.find_target() - objective = steal_objective - var/inthere = 0 - for(var/j, j<= target.len, j++) - var/datum/objective/temp = target[j] - if(temp:target == objective:target) - inthere = 1 - break - if(!inthere) - traitor.objectives += objective - else - i -= 1 + if(!locate(/datum/objective/steal) in traitor.objectives) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = traitor + steal_objective.find_target() + traitor.objectives += steal_objective + else + var/works = 1 + var/datum/objective/steal/steal_objective = new + steal_objective.owner = traitor + steal_objective.find_target() + for(var/j, j < traitor.objectives.len, j++) + var/compare = istype(traitor.objectives[j],/datum/objective/steal) + if(compare) + var/datum/objective/steal/test = traitor.objectives[j] + if(test.target_name == steal_objective.target_name) + works = 0 + break + if(works) + traitor.objectives += steal_objective + else + i -= 1 if (!(locate(/datum/objective/escape) in traitor.objectives)) var/datum/objective/escape/escape_objective = new escape_objective.owner = traitor diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 441a7f06fbe..3326604e932 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -698,8 +698,13 @@ // calculates a path to the current destination // given an optional turf to avoid /obj/machinery/bot/mulebot/proc/calc_path(var/turf/avoid = null) - src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance_ortho, 0, 250, id=botcard, exclude=avoid) - src.path = reverselist(src.path) + if(src.target) + src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance_ortho, 0, 250, id=botcard, exclude=avoid) + src.path = reverselist(src.path) + else + for (var/mob/M in world) + if (M.client && M.client.holder) + M << "ERROR:A Mulebot has attempted to path to a null target! This is a bug!" // sets the current destination diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index efaac149680..603afe375f9 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -16,8 +16,7 @@ // called by datum/sun/calc_position() as sun's angle changes - proc/set_angle() - var/angle = sun.angle + proc/set_angle(angle) //set icon dir to show sun illumination dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm index 9080590840c..cdae466b78a 100644 --- a/maps/tgstation.2.0.8.dmm +++ b/maps/tgstation.2.0.8.dmm @@ -116,7 +116,7 @@ "acl" = (/obj/item/weapon/stamp/hos,/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos) "acm" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos) "acn" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/item/device/radio/intercom{pixel_x = 28; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "carpetside"},/area/security/hos) -"aco" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/obj/structure/closet/wardrobe/red,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/security/main) +"aco" = (/obj/structure/closet/wardrobe/red,/turf/simulated/floor,/area/security/main) "acp" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint) "acq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced{tag = "icon-reinf_1tilethick"; icon_state = "reinf_1tilethick"},/obj/machinery/camera{dir = 1; c_tag = "Firing Range"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/range) "acr" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/filingcabinet,/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area/security/hos) @@ -4801,7 +4801,7 @@ "bOq" = (/obj/machinery/door/airlock/glass{name = "Virology"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bOr" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bOs" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"bOt" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Access"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"bOt" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; holdopen = 0; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Access"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bOu" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bOv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bOw" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/medical/research{name = "Research Division"}) @@ -4870,7 +4870,7 @@ "bPH" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/wall/r_wall,/area/medical/virology) "bPI" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 6; icon_state = "intact-r-f"; initialize_directions = 6; level = 1; name = "pipe"},/turf/simulated/wall/r_wall,/area/medical/virology) "bPJ" = (/obj/effect/sign/biohazard,/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 9; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/wall/r_wall,/area/medical/virology) -"bPK" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Access"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"bPK" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; holdopen = 0; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Access"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "bPL" = (/obj/effect/sign/biohazard,/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/medical/virology) "bPM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/virology) "bPN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/virology)