diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm index 2b21ec0c97..7f427f3b9a 100644 --- a/_maps/shuttles/emergency_raven.dmm +++ b/_maps/shuttles/emergency_raven.dmm @@ -1,24 +1,21 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/open/space, /obj/machinery/porta_turret/centcom_shuttle{ dir = 9 }, -/turf/closed/wall/mineral/plastitanium{ - dir = 8; - icon_state = "diagonalWall3" - }, +/turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) "ab" = ( /obj/machinery/status_display, /turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) "ac" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters{ id = "shuttleshutters"; name = "blast shutters" }, +/obj/structure/grille, +/obj/structure/window/plastitanium, /turf/open/floor/plating, /area/shuttle/escape) "ad" = ( @@ -277,20 +274,20 @@ /area/shuttle/escape) "aT" = ( /obj/structure/table/reinforced, -/obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/o2{ pixel_x = 4; pixel_y = 4 }, +/obj/item/storage/firstaid/toxin, /turf/open/floor/plasteel/black, /area/shuttle/escape) "aU" = ( /obj/structure/table/reinforced, -/obj/item/storage/firstaid/fire, /obj/item/storage/firstaid/brute{ pixel_x = 3; pixel_y = 4 }, +/obj/item/storage/firstaid/fire, /turf/open/floor/plasteel/black, /area/shuttle/escape) "aV" = ( @@ -639,15 +636,15 @@ /area/shuttle/escape) "bH" = ( /obj/structure/rack, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 3; - pixel_y = -6 - }, -/obj/item/storage/toolbox/emergency, /obj/item/storage/toolbox/electrical{ pixel_x = -2; pixel_y = 5 }, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 3; + pixel_y = -6 + }, /turf/open/floor/plasteel/darkgreen/side{ dir = 9; icon_state = "darkgreen" @@ -664,7 +661,8 @@ }, /area/shuttle/escape) "bJ" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/structure/grille, +/obj/structure/window/plastitanium, /turf/open/floor/plating, /area/shuttle/escape) "bK" = ( @@ -972,39 +970,14 @@ }, /area/shuttle/escape) "cr" = ( -/turf/open/space, /obj/machinery/porta_turret/centcom_shuttle{ dir = 5 }, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, +/turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) "cs" = ( /turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) -"ct" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cu" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"cv" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"cw" = ( -/turf/open/space, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) "cx" = ( /turf/open/space, /turf/closed/wall/mineral/plastitanium{ @@ -1037,30 +1010,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/shuttle/escape) -"cB" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cC" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) "cD" = ( /turf/open/space, /turf/closed/wall/mineral/plastitanium{ icon_state = "diagonalWall3" }, /area/shuttle/escape) -"cE" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cF" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cG" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cH" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) "cI" = ( /turf/open/space, /turf/closed/wall/mineral/plastitanium{ @@ -1068,381 +1023,18 @@ icon_state = "diagonalWall3" }, /area/shuttle/escape) -"cJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"cK" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"cL" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cM" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cN" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cO" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cP" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cQ" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cR" = ( -/turf/open/space, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"cS" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cT" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"cV" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cW" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cX" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cY" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"cZ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"da" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"db" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dc" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dd" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"de" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"df" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dg" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dh" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"di" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dj" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dk" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dm" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dn" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"do" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dp" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dq" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dr" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"ds" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dt" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"du" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dv" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"dw" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dx" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dy" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dz" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dA" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dB" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dC" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dD" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"dE" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dF" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/shuttle/escape) -"dG" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"dH" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dI" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dJ" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dK" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dL" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"dM" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dN" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dO" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dP" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dQ" = ( -/turf/open/space, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"dR" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dS" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dT" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dU" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dV" = ( -/turf/open/space, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"dW" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dX" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dY" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"dZ" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ea" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"eb" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ec" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ed" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ee" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ef" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"eg" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"eh" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) "ei" = ( -/turf/open/space, /obj/machinery/porta_turret/centcom_shuttle{ dir = 10 }, -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"ej" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ek" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"el" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"em" = ( /turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) "en" = ( -/turf/open/space, /obj/machinery/porta_turret/centcom_shuttle{ dir = 6 }, -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"eo" = ( /turf/closed/wall/mineral/plastitanium/interior, /area/shuttle/escape) -"ep" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"eq" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"er" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"es" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"et" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"eu" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ev" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"ew" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - dir = 8; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"ex" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ey" = ( -/turf/closed/wall/mineral/plastitanium/interior, -/area/shuttle/escape) -"ez" = ( -/turf/open/space, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) -"eA" = ( -/turf/open/space, -/obj/machinery/porta_turret/centcom_shuttle{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/escape) "eB" = ( /obj/machinery/flasher{ id = "shuttleflash"; @@ -1489,22 +1081,10 @@ dir = 8 }, /area/shuttle/escape) -"eG" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 1 - }, -/area/shuttle/escape) "eH" = ( /obj/machinery/light, /turf/open/floor/plasteel/darkgreen/side, /area/shuttle/escape) -"eI" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/darkgreen/side, -/area/shuttle/escape) "eJ" = ( /obj/machinery/button/flasher{ id = "cockpit_flasher"; @@ -1514,30 +1094,6 @@ /obj/machinery/light, /turf/open/floor/mineral/titanium/blue, /area/space) -"eK" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 1 - }, -/area/shuttle/escape) -"eL" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 1 - }, -/area/shuttle/escape) -"eM" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 1 - }, -/area/shuttle/escape) "eN" = ( /obj/machinery/light{ dir = 4 @@ -1547,62 +1103,44 @@ }, /area/shuttle/escape) "eO" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 8 - }, +/obj/machinery/status_display, +/turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/escape) "eP" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/darkgreen/side, +/turf/closed/wall/mineral/plastitanium/nodiagonal, /area/shuttle/escape) "eQ" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/darkgreen/side{ - dir = 4 - }, -/area/shuttle/escape) -"eR" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/darkgreen/side, -/area/shuttle/escape) -"eS" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/darkgreen/side, -/area/shuttle/escape) +/turf/open/space/basic, +/area/space) (1,1,1) = {" aa cs ac ac -cD +cs ad aa -cu -cu +bJ +bJ cs -cu -cu +bJ +bJ bs cs bE -cu -cu -cD +bJ +bJ +cs ad aa bs -cu +bJ bs cs -cu +bJ cs -cu +bJ ei ad ad @@ -1629,17 +1167,17 @@ bK bM cs ad -cu +bJ bF be be -eO +eF be be cd -cu +bJ ad -cx +cs ar co "} @@ -1686,25 +1224,25 @@ ar aJ ar cs -cu -cu -cu -cu +bJ +bJ +bJ +bJ cs -ar -eG +eP +eE aC eH ar bT bo -eK +eE bZ ca aC bZ ca -eR +eH ab ch ar @@ -1788,25 +1326,25 @@ ar aM ar cs -cu -cu -ab +bJ +bJ +eO br bz -bo +eO cs bL bP ar bU bo -eL +eE bZ ca aC bZ ca -eS +eH ab ci ar @@ -1830,7 +1368,7 @@ bz cs bH bG -eI +eH cs cs cs @@ -1867,7 +1405,7 @@ aZ bQ cs ad -cu +bJ bW aZ bq @@ -1875,9 +1413,9 @@ aC by aZ ce -cu +bJ ad -cy +cs ar co "} @@ -1885,8 +1423,8 @@ co cr cs ac -cA -cI +ac +cs ad cr cs @@ -1896,19 +1434,19 @@ ar br bz ar -cu -cu -cu -cI +bJ +bJ +bJ +cs ad cr -cu -cs +bJ +eP br aC bz -cs -cu +eP +bJ en ad ad @@ -1937,11 +1475,11 @@ ad ad ad ad -cu +bJ cb aC cc -cu +bJ ad ad ad @@ -1952,15 +1490,15 @@ ad (12,1,1) = {" ad ad -cx cs -cu cs -cu -cu -cu +bJ cs -bo +bJ +bJ +bJ +cs +eO bt bA bo @@ -1971,14 +1509,14 @@ ad aa cs cs -cs -eM +eP +eE aC +eH eP cs cs cs -cD ad ad ad @@ -1997,10 +1535,10 @@ bl bp bu bA -cu -ad -ad +bJ ad +eQ +eQ ad cs bV @@ -2019,11 +1557,11 @@ ad "} (14,1,1) = {" ad -cu +bJ as aC aC -cu +bJ aT aC bh @@ -2031,12 +1569,12 @@ bh aC bv bB -cu +bJ ad +eQ +eQ ad -eJ -ad -cu +bJ br bX bX @@ -2046,18 +1584,18 @@ bX bX bX bz -cu +bJ ad ad ad "} (15,1,1) = {" ad -cu +bJ at aD aC -cu +bJ aU aC aC @@ -2065,12 +1603,12 @@ aC aC aC bC -cu +bJ ad +eQ +eQ ad -ad -ad -cu +bJ br bY bY @@ -2080,7 +1618,7 @@ bY bY bY bz -cu +bJ ad ad ad @@ -2099,10 +1637,10 @@ bm bi bm ar -cI -ad -ad +cs ad +eQ +eQ ad cs bW @@ -2110,7 +1648,7 @@ aZ aZ eN aZ -eQ +eN aZ aZ ce @@ -2122,17 +1660,17 @@ ad (17,1,1) = {" ad ad -cy -cs -cu cs cs -cu -cu -cu -cu +bJ +cs +cs +bJ +bJ +bJ +bJ +cs cs -cI ad ad ad @@ -2140,15 +1678,15 @@ ad ad cr cs -cu -cu +bJ +bJ ab -cu +bJ ab -cu -cu +bJ +bJ +cs cs -cI ad ad ad diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index c9b392ed76..6b3c03b180 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -518,6 +518,19 @@ Turf and target are separate in case you want to teleport some distance from a t assembled += A return assembled +/atom/proc/GetAllContentsIgnoring(list/ignore_typecache) + if(!ignore_typecache) + return GetAllContents() + var/list/processing = list(src) + var/list/assembled = list() + while(processing.len) + var/atom/A = processing[1] + processing.Cut(1,2) + if(!ignore_typecache[A.type]) + processing += A.contents + assembled += A + return assembled + //Step-towards method of determining whether one atom can see another. Similar to viewers() /proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. var/turf/current = get_turf(source) diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index fd9f717103..b3b281ef39 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -213,6 +213,8 @@ damage = 15 armour_penetration = 10 light_range = 2 + speed = 1.2 + range = 25 light_color = LIGHT_COLOR_RED /obj/item/projectile/bullet/nlmags //non-lethal boolets @@ -220,9 +222,11 @@ icon_state = "magjectile-nl" damage = 1 knockdown = 0 - stamina = 25 + stamina = 30 armour_penetration = -10 light_range = 2 + speed = 1.2 + range = 25 light_color = LIGHT_COLOR_BLUE @@ -378,19 +382,23 @@ /obj/item/projectile/bullet/magrifle icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "magjectile-large" - damage = 25 + damage = 20 armour_penetration = 25 light_range = 3 + speed = 1.2 + range = 35 light_color = LIGHT_COLOR_RED /obj/item/projectile/bullet/nlmagrifle //non-lethal boolets icon = 'icons/obj/guns/cit_guns.dmi' icon_state = "magjectile-large-nl" - damage = 2 + damage = 1 knockdown = 0 - stamina = 30 + stamina = 35 armour_penetration = -10 light_range = 3 + speed = 1.0 + range = 35 light_color = LIGHT_COLOR_BLUE ///ammo casings/// @@ -494,7 +502,7 @@ name = "foamag rifle" desc = "A foam launching magnetic rifle. Ages 8 and up." icon_state = "foamagrifle" - needs_permit = 0 + needs_permit = FALSE mag_type = /obj/item/ammo_box/magazine/toy/foamag casing_ejector = FALSE origin_tech = "combat=2;engineering=2;magnets=2" @@ -1070,12 +1078,16 @@ obj/item/projectile/bullet/c10mm/soporific name = "9mm frangible bullet" damage = 15 stamina = 0 + speed = 1.0 + range = 20 armour_penetration = -25 /obj/item/projectile/bullet/c9mm/rubber name = "9mm rubber bullet" - damage = 2 - stamina = 25 + damage = 5 + stamina = 30 + speed = 1.2 + range = 14 knockdown = 0 /obj/item/ammo_casing/c9mm/frangible @@ -1120,9 +1132,9 @@ obj/item/projectile/bullet/c10mm/soporific name = "Box of 9mm Frangible Bullets" id = "9mm_frag" build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) + materials = list(MAT_METAL = 25000) build_path = /obj/item/ammo_box/c9mm/frangible - category = list("initial", "Security") + category = list("hacked", "Security") /datum/design/c9mmrubber name = "Box of 9mm Rubber Bullets" @@ -1159,6 +1171,7 @@ obj/item/projectile/bullet/c10mm/soporific icon_state = "p37_foam" pin = /obj/item/device/firing_pin spawnwithmagazine = TRUE + needs_permit = FALSE mag_type = /obj/item/ammo_box/magazine/toy/pistol can_suppress = FALSE actions_types = list(/datum/action/item_action/pick_color) diff --git a/code/citadel/cit_weapons.dm b/code/citadel/cit_weapons.dm index 466a41e427..7526f3f6b6 100644 --- a/code/citadel/cit_weapons.dm +++ b/code/citadel/cit_weapons.dm @@ -72,6 +72,9 @@ blade_inhand.color = light_color . += blade_inhand +/obj/item/toy/sword/cx/attackby(obj/item/W, mob/living/user, params) + return //NO MORE MAKING DUAL ESWORDS + /*///autolathe memes/// I really need to stop doing this and find a proper way of adding in my toys /datum/design/toyneb diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index eac7cf2161..a12483f647 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -6,6 +6,10 @@ var/datum/parent /datum/component/New(datum/P, ...) + if(type == /datum/component) + qdel(src) + CRASH("[type] instantiated!") + parent = P var/list/arguments = args.Copy() arguments.Cut(1, 2) @@ -56,7 +60,7 @@ var/test = dc[I] if(test) //already another component of this type here var/list/components_of_type - if(!islist(test)) + if(!length(test)) components_of_type = list(test) dc[I] = components_of_type else @@ -91,10 +95,9 @@ /datum/component/proc/_RemoveFromParent() var/datum/P = parent var/list/dc = P.datum_components - var/our_type = type - for(var/I in _GetInverseTypeList(our_type)) + for(var/I in _GetInverseTypeList()) var/list/components_of_type = dc[I] - if(islist(components_of_type)) // + if(length(components_of_type)) // var/list/subtracted = components_of_type - src if(subtracted.len == 1) //only 1 guy left dc[I] = subtracted[1] //make him special @@ -133,10 +136,6 @@ set waitfor = FALSE return -<<<<<<< HEAD -/datum/component/proc/_GetInverseTypeList(current_type) - . = list(current_type) -======= /datum/component/proc/_GetInverseTypeList(our_type = type) #if DM_VERSION > 511 #warning Remove this hack for http://www.byond.com/forum/?post=73469 @@ -146,7 +145,6 @@ var/current_type = parent_type . = list(our_type, current_type) //and since most components are root level + 1, this won't even have to run ->>>>>>> 828ff86... Merge pull request #32307 from tgstation/Cyberboss-patch-1 while (current_type != /datum/component) current_type = type2parent(current_type) . += current_type @@ -158,7 +156,7 @@ var/list/arguments = args.Copy() arguments.Cut(1, 2) var/target = comps[/datum/component] - if(!islist(target)) + if(!length(target)) var/datum/component/C = target if(!C.enabled) return FALSE @@ -194,7 +192,7 @@ if(!dc) return null . = dc[c_type] - if(islist(.)) + if(length(.)) return .[1] /datum/proc/GetExactComponent(c_type) @@ -203,7 +201,7 @@ return null var/datum/component/C = dc[c_type] if(C) - if(islist(C)) + if(length(C)) C = C[1] if(C.type == c_type) return C @@ -214,7 +212,7 @@ if(!dc) return null . = dc[c_type] - if(!islist(.)) + if(!length(.)) return list(.) /datum/proc/AddComponent(new_type, ...) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index f7b15035d1..00dd796f47 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -24,7 +24,7 @@ var/list/dc = datum_components if(dc) var/all_components = dc[/datum/component] - if(islist(all_components)) + if(length(all_components)) for(var/I in all_components) var/datum/component/C = I C._RemoveFromParent() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 93ea89445b..8ebb7b6061 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -91,6 +91,7 @@ icon_state = "cuff" item_state = "coil" item_color = "red" + color = "#ff0000" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' materials = list(MAT_METAL=150, MAT_GLASS=75) @@ -109,6 +110,7 @@ update_icon() /obj/item/restraints/handcuffs/cable/update_icon() + color = null add_atom_colour(item_color, FIXED_COLOUR_PRIORITY) /obj/item/restraints/handcuffs/cable/attack(mob/living/carbon/C, mob/living/carbon/human/user) @@ -130,24 +132,31 @@ /obj/item/restraints/handcuffs/cable/red item_color = "red" + color = "#ff0000" /obj/item/restraints/handcuffs/cable/yellow item_color = "yellow" + color = "#ffff00" /obj/item/restraints/handcuffs/cable/blue item_color = "blue" + color = "#1919c8" /obj/item/restraints/handcuffs/cable/green item_color = "green" + color = "#00aa00" /obj/item/restraints/handcuffs/cable/pink item_color = "pink" + color = "#ff3ccd" /obj/item/restraints/handcuffs/cable/orange item_color = "orange" + color = "#ff8000" /obj/item/restraints/handcuffs/cable/cyan item_color = "cyan" + color = "#00ffff" /obj/item/restraints/handcuffs/cable/white item_color = "white" diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 9a5928665c..3aba3d05f2 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -26,8 +26,31 @@ var/fire_mode = PCANNON_FIREALL var/automatic = FALSE var/clumsyCheck = TRUE + var/list/allowed_typecache //Leave as null to allow all. + var/charge_amount = 1 + var/charge_ticks = 1 + var/charge_tick = 0 + var/charge_type + var/selfcharge = FALSE trigger_guard = TRIGGER_GUARD_NORMAL + +/obj/item/pneumatic_cannon/Initialize() + . = ..() + if(selfcharge) + init_charge() + +/obj/item/pneumatic_cannon/proc/init_charge() //wrapper so it can be vv'd easier + START_PROCESSING(SSobj, src) + +/obj/item/pneumatic_cannon/process() + if(++charge_tick >= charge_ticks && charge_type) + fill_with_type(charge_type, charge_amount) + +/obj/item/pneumatic_cannon/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + /obj/item/pneumatic_cannon/CanItemAutoclick() return automatic @@ -75,6 +98,10 @@ load_item(IW, user) /obj/item/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user) + if(allowed_typecache && is_type_in_typecache(I, allowed_typecache)) + if(user) + to_chat(user, "[I] won't fit into [src]!") + return if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user if(user) to_chat(user, "\The [I] won't fit into \the [src]!") @@ -233,28 +260,14 @@ throw_amount = 1 maxWeightClass = 150 //50 pies. :^) clumsyCheck = FALSE + var/static/list/pie_typecache = typecacheof(/obj/item/reagent_containers/food/snacks/pie) -/obj/item/pneumatic_cannon/pie/can_load_item(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/food/snacks/pie)) - return ..() - to_chat(user, "[src] only accepts pies!") - return FALSE - +/obj/item/pneumatic_cannon/pie/Initialize() + . = ..() + allowed_typecache = pie_typecache + /obj/item/pneumatic_cannon/pie/selfcharge automatic = TRUE - var/charge_amount = 1 - var/charge_ticks = 1 - var/charge_tick = 0 + selfcharge = TRUE + charge_type = /obj/item/reagent_containers/food/snacks/pie/cream maxWeightClass = 60 //20 pies. - -/obj/item/pneumatic_cannon/pie/selfcharge/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/pneumatic_cannon/pie/selfcharge/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/pneumatic_cannon/pie/selfcharge/process() - if(++charge_tick >= charge_ticks) - fill_with_type(/obj/item/reagent_containers/food/snacks/pie/cream, charge_amount) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 2ccb57564f..c4d86b0800 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -561,6 +561,10 @@ if(istype(dampening_field)) QDEL_NULL(dampening_field) dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) + + var/mob/living/silicon/robot/owner = get_host() + if(owner) + owner.module.allow_riding = FALSE /obj/item/borg/projectile_dampen/proc/deactivate_field() QDEL_NULL(dampening_field) @@ -568,6 +572,18 @@ for(var/P in tracked) restore_projectile(P) + var/mob/living/silicon/robot/owner = get_host() + if(owner) + owner.module.allow_riding = TRUE + +/obj/item/borg/projectile_dampen/proc/get_host() + if(istype(host)) + return host + else + if(iscyborg(host.loc)) + return host.loc + return null + /obj/item/borg/projectile_dampen/dropped() . = ..() host = loc diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 40c026a7cb..815ee91520 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -440,7 +440,7 @@ /turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, forceop = FALSE) // Remove all atoms except observers, landmarks, docking ports var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) - var/list/allowed_contents = typecache_filter_list_reverse(GetAllContents(), ignored_atoms | ignore_typecache) + var/list/allowed_contents = typecache_filter_list_reverse(GetAllContentsIgnoring(ignore_typecache), ignored_atoms) allowed_contents -= src for(var/i in 1 to allowed_contents.len) var/thing = allowed_contents[i] diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 10a3774ae1..af3d1c5375 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -6,8 +6,10 @@ #define STICKYBAN_MAX_EXISTING_USER_MATCHES 5 //ie, users who were connected before the ban triggered #define STICKYBAN_MAX_ADMIN_MATCHES 2 -/world/IsBanned(key,address,computer_id) +/world/IsBanned(key,address,computer_id,real_bans_only=FALSE) if (!key || !address || !computer_id) + if(real_bans_only) + return FALSE log_access("Failed Login (invalid data): [key] [address]-[computer_id]") return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]'. (If you continue to get this error, please restart byond or contact byond support.)") @@ -31,7 +33,7 @@ return list("reason"="whitelist", "desc" = "\nReason: You are not on the white list for this server") //Guest Checking - if(IsGuestKey(key)) + if(!real_bans_only && IsGuestKey(key)) if (CONFIG_GET(flag/guest_ban)) log_access("Failed Login: [key] - Guests not allowed") return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") @@ -41,7 +43,7 @@ //Population Cap Checking var/extreme_popcap = CONFIG_GET(number/extreme_popcap) - if(extreme_popcap && living_player_count() >= extreme_popcap && !admin) + if(!real_bans_only && extreme_popcap && living_player_count() >= extreme_popcap && !admin) log_access("Failed Login: [key] - Population cap reached") return list("reason"="popcap", "desc"= "\nReason: [CONFIG_GET(string/extreme_popcap_message)]") diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 65a78d0ef0..191c2b442b 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -179,6 +179,16 @@ time = 40 category = CAT_ROBOT +/datum/crafting_recipe/honkbot + name = "Honkbot" + result = /mob/living/simple_animal/bot/honkbot + reqs = list(/obj/item/storage/box/clown = 1, + /obj/item/bodypart/r_arm/robot = 1, + /obj/item/device/assembly/prox_sensor = 1, + /obj/item/bikehorn/ = 1) + time = 40 + category = CAT_ROBOT + /datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but name = "Pneumatic Cannon" result = /obj/item/pneumatic_cannon/ghetto diff --git a/code/modules/fields/peaceborg_dampener.dm b/code/modules/fields/peaceborg_dampener.dm index 5e0fbdfb2b..79bd866fca 100644 --- a/code/modules/fields/peaceborg_dampener.dm +++ b/code/modules/fields/peaceborg_dampener.dm @@ -42,7 +42,7 @@ if(R.has_buckled_mobs()) for(var/mob/living/L in R.buckled_mobs) L.visible_message("[L] is knocked off of [R] by the charge in [R]'s chassis induced by [name]!") //I know it's bad. - L.Knockdown(60) + L.Knockdown(10) R.unbuckle_mob(L) do_sparks(5, 0, L) ..() diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 408da4c401..602cef5f5e 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -158,7 +158,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic var/list/row = src.connectionHistory[i] if (!row || row.len < 3 || (!row["ckey"] || !row["compid"] || !row["ip"])) //Passed malformed history object return - if (world.IsBanned(row["ckey"], row["compid"], row["ip"])) + if (world.IsBanned(row["ckey"], row["compid"], row["ip"], real_bans_only=TRUE)) found = row break diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 865ae48b4c..1829a85344 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -320,6 +320,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians forceMove(summoner.loc) new /obj/effect/temp_visual/guardian/phase(loc) cooldown = world.time + 10 + reset_perspective() return TRUE return FALSE diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ec23f5b7f8..dc63253681 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -48,24 +48,31 @@ By design, d1 is the smallest direction and d2 is the highest var/obj/item/stack/cable_coil/stored var/cable_color = "red" + color = "#ff0000" /obj/structure/cable/yellow cable_color = "yellow" + color = "#ffff00" /obj/structure/cable/green cable_color = "green" + color = "#00aa00" /obj/structure/cable/blue cable_color = "blue" + color = "#1919c8" /obj/structure/cable/pink cable_color = "pink" + color = "#ff3cc8" /obj/structure/cable/orange cable_color = "orange" + color = "#ff8000" /obj/structure/cable/cyan cable_color = "cyan" + color = "#00ffff" /obj/structure/cable/white cable_color = "white" @@ -123,6 +130,7 @@ By design, d1 is the smallest direction and d2 is the highest icon_state = "[d1]-[d2]-f" else icon_state = "[d1]-[d2]" + color = null add_atom_colour(cable_color, FIXED_COLOUR_PRIORITY) /obj/structure/cable/proc/handlecable(obj/item/W, mob/user, params) @@ -523,6 +531,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai /obj/item/stack/cable_coil/update_icon() icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" name = "cable [amount < 3 ? "piece" : "coil"]" + color = null add_atom_colour(item_color, FIXED_COLOUR_PRIORITY) /obj/item/stack/cable_coil/attack_hand(mob/user) @@ -743,30 +752,38 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai /obj/item/stack/cable_coil/red item_color = "red" + color = "#ff0000" /obj/item/stack/cable_coil/yellow item_color = "yellow" + color = "#ffff00" /obj/item/stack/cable_coil/blue item_color = "blue" + color = "#1919c8" /obj/item/stack/cable_coil/green item_color = "green" + color = "#00aa00" /obj/item/stack/cable_coil/pink item_color = "pink" + color = "#ff3ccd" /obj/item/stack/cable_coil/orange item_color = "orange" + color = "#ff8000" /obj/item/stack/cable_coil/cyan item_color = "cyan" + color = "#00ffff" /obj/item/stack/cable_coil/white item_color = "white" /obj/item/stack/cable_coil/random item_color = null + color = "#ffffff" /obj/item/stack/cable_coil/random/five amount = 5 diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index 2365bb03ed..dc92dd3b52 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -1,6 +1,6 @@ /obj/machinery/smoke_machine - name = "Smoke Machine" - desc = "Seriously man?" + name = "smoke machine" + desc = "A machine with a centrifuge installed into it. It produces smoke with any reagents you put into the machine." icon = 'icons/obj/chemical.dmi' icon_state = "smoke0" density = TRUE @@ -11,9 +11,9 @@ var/cooldown = 0 var/screen = "home" var/useramount = 30 // Last used amount - var/volume = 1000 + var/volume = 300 var/setting = 3 - var/list/possible_settings = list(3,6,9,12,15) + var/list/possible_settings = list(3,6,9) /datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting = 3, efficiency = 10, loc) amount = setting diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 279589c4b1..9784dd115c 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -121,14 +121,22 @@ O.transfer_to_limb(src, C) update_icon_dropped() - forceMove(T) C.update_health_hud() //update the healthdoll C.update_body() C.update_hair() C.update_canmove() + + if(!T) // T = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced. + qdel(src) + return + if(is_pseudopart) drop_organs(C) //Psuedoparts shouldn't have organs, but just in case qdel(src) + return + + forceMove(T) + //when a limb is dropped, the internal organs are removed from the mob and put into the limb diff --git a/tools/WebhookProcessor/github_webhook_processor.php b/tools/WebhookProcessor/github_webhook_processor.php index 37805aae7a..62446d707c 100644 --- a/tools/WebhookProcessor/github_webhook_processor.php +++ b/tools/WebhookProcessor/github_webhook_processor.php @@ -42,7 +42,7 @@ set_error_handler(function($severity, $message, $file, $line) { set_exception_handler(function($e) { header('HTTP/1.1 500 Internal Server Error'); echo "Error on line {$e->getLine()}: " . htmlSpecialChars($e->getMessage()); - file_put_contents('htwebhookerror.log', "Error on line {$e->getLine()}: " . $e->getMessage(), FILE_APPEND); + file_put_contents('htwebhookerror.log', '['.date(DATE_ATOM).'] '."Error on line {$e->getLine()}: " . $e->getMessage().PHP_EOL, FILE_APPEND); die(); }); $rawPost = NULL; @@ -519,35 +519,49 @@ function update_pr_balance($payload) { fclose($balances_file); } -function auto_update($payload){ - global $enable_live_tracking; - global $path_to_script; - global $repoOwnerAndName; - global $tracked_branch; - if(!$enable_live_tracking || !has_tree_been_edited($payload, $path_to_script) || $payload['pull_request']['base']['ref'] != $tracked_branch) - return; - - $content = file_get_contents('https://raw.githubusercontent.com/' . $repoOwnerAndName . '/' . $tracked_branch . '/'. $path_to_script); - - create_comment($payload, "Edit detected. Self updating... Here is my new code:\n``" . "`HTML+PHP\n" . $content . "\n``" . '`'); - - $code_file = fopen(basename($path_to_script), 'w'); - fwrite($code_file, $content); - fclose($code_file); -} - $github_diff = null; -function has_tree_been_edited($payload, $tree){ +function get_diff($payload) { global $github_diff; if ($github_diff === null) { //go to the diff url $url = $payload['pull_request']['diff_url']; $github_diff = file_get_contents($url); } + return $github_diff; +} + +function auto_update($payload){ + global $enable_live_tracking; + global $path_to_script; + global $repoOwnerAndName; + global $tracked_branch; + global $github_diff; + if(!$enable_live_tracking || !has_tree_been_edited($payload, $path_to_script) || $payload['pull_request']['base']['ref'] != $tracked_branch) + return; + + get_diff($payload); + $content = file_get_contents('https://raw.githubusercontent.com/' . $repoOwnerAndName . '/' . $tracked_branch . '/'. $path_to_script); + $content_diff = "### Diff not available. :slightly_frowning_face:"; + if($github_diff && preg_match('/(diff --git a\/' . preg_quote($path_to_script, '/') . '.+?)(?:^diff)?/sm', $github_diff, $matches)) { + $script_diff = matches[1]; + if($script_diff) { + $content_diff = "``" . "`DIFF\n" . $script_diff ."\n``" . "`"; + } + } + create_comment($payload, "Edit detected. Self updating... \n
Here are my changes:\n\n" . $content_diff . "\n
\n
Here is my new code:\n\n``" . "`HTML+PHP\n" . $content . "\n``" . '`\n
'); + + $code_file = fopen(basename($path_to_script), 'w'); + fwrite($code_file, $content); + fclose($code_file); +} + +function has_tree_been_edited($payload, $tree){ + global $github_diff; + get_diff($payload); //find things in the _maps/map_files tree //e.g. diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm - return $github_diff !== FALSE && preg_match('/^diff --git a\/' . preg_quote($tree, '/') . '/m') !== FALSE; + return ($github_diff !== FALSE) && (preg_match('/^diff --git a\/' . preg_quote($tree, '/') . '/m', $github_diff) !== 0); } $no_changelog = false;