Fix conflicts with OOP solars, fix exploit with shard welding, add TG unlocking borgs with PDA, robotizing fixed to prevent getting stuck within objects, number of DNA blocks increased to 54 to match number of genes, fix numerous problems with solar construction and deconstruction.

Changelog
This commit is contained in:
clusterfack
2015-01-26 19:07:34 -06:00
parent b1e2fe8ecd
commit c273f2b9eb
22 changed files with 295 additions and 244 deletions

View File

@@ -89,8 +89,8 @@
A.anchored = 1
qdel(src)
else
visible_message("<span class='notice'>[user] disconnects [src]'s monitor.</span>", \
"<span class='notice'>You disconnect [src]'s monitor.</span>")
visible_message("[user] begins to unscrew \the [src]'s monitor.",
"You begin to unscrew the monitor...")
var/obj/structure/computerframe/A = new /obj/structure/computerframe(src.loc)
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control(A)
for (var/obj/C in src)
@@ -118,7 +118,7 @@
return
if ((get_dist(src, user) > 1))
if (!istype(user, /mob/living/silicon/ai))
if (!issilicon(user)&&!isobserver(user))
user.unset_machine()
user << browse(null, "window=solcon")
return
@@ -195,7 +195,7 @@ Manual Tracking Direction:"}
track = text2num(href_list["track"])
if(track == 2)
for(var/obj/machinery/power/solar/tracker/T in getPowernetNodes())
for(var/obj/machinery/power/solar/panel/tracker/T in getPowernetNodes())
cdir = T.sun_angle
break
@@ -245,4 +245,4 @@ Manual Tracking Direction:"}
/obj/machinery/power/solar/control/blob_act()
if(prob(75))
broken()
density = 0
density = 0

View File

@@ -9,34 +9,48 @@
var/ndir = SOUTH
var/turn_angle = 0
var/glass_quality_factor = 1 //Rglass is average. Glass is shite. Tinted glass is "Are you even trying ?" tier if anyone ever makes a sheet version
var/tracker = 0
var/obj/machinery/power/solar/control/control
var/obj/machinery/power/solar_assembly/solar_assembly
/obj/machinery/power/solar/panel/New(loc)
/obj/machinery/power/solar/panel/New(loc, var/obj/machinery/power/solar_assembly/S)
..(loc)
make()
make(S)
/obj/machinery/power/solar/panel/proc/make()
if(!solar_assembly)
/obj/machinery/power/solar/panel/proc/make(var/obj/machinery/power/solar_assembly/S)
if(!S)
solar_assembly = new /obj/machinery/power/solar_assembly()
solar_assembly.glass_type = /obj/item/stack/sheet/rglass
solar_assembly.glass_type = /obj/item/stack/sheet/glass/rglass
solar_assembly.anchored = 1
solar_assembly.density = 1
solar_assembly.tracker = tracker
else
solar_assembly = S
var/obj/item/stack/sheet/glass/G = solar_assembly.glass_type //This is how you call up variables from an object without making one
src.glass_quality_factor = initial(G.glass_quality) //Don't use istype checks kids
src.maxhealth = initial(G.shealth)
src.health = initial(G.shealth)
solar_assembly.loc = src
update_icon()
/obj/machinery/power/solar/panel/attackby(obj/item/weapon/W, mob/user)
if(iscrowbar(W))
var/turf/T = get_turf(src)
var/obj/item/stack/sheet/glass/G = solar_assembly.glass_type
user << "<span class='notice'>You begin taking the [initial(G.name)] off the [src].</span>"
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
if(solar_assembly)
solar_assembly.loc = T
solar_assembly.give_glass()
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] takes the glass off the solar panel.</span>")
user.visible_message("<span class='notice'>[user] takes the [initial(G.name)] off the [src].</span>",\
"<span class='notice'>You takes the [initial(G.name)] off the [src].</span>")
qdel(src)
else if(W)
add_fingerprint(user)
health -= W.force
healthcheck()
..()
/obj/machinery/power/solar/panel/blob_act()
@@ -52,37 +66,25 @@
if(!(stat & BROKEN))
broken()
else
var/obj/item/stack/sheet/glass/G = solar_assembly.glass_type
var/shard = initial(G.shard_type)
solar_assembly.glass_type = null //The glass you're looking for is below pal
getFromPool(/obj/item/weapon/shard, loc)
getFromPool(/obj/item/weapon/shard, loc)
solar_assembly.loc = get_turf(src)
getFromPool(shard, loc)
getFromPool(shard, loc)
qdel(src)
/obj/machinery/power/solar/panel/update_icon()
..()
overlays.len = 0
if(stat & BROKEN)
if(solar_assembly.glass_type == /obj/item/stack/sheet/glass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/rglass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel_ref-b", layer = FLY_LAYER)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/glass/plasmaglass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel_plasma-b", layer = FLY_LAYER)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/rglass/plasmarglass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel_plasma_ref-b", layer = FLY_LAYER)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/glass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
src.dir = angle2dir(adir)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/rglass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel_ref", layer = FLY_LAYER)
src.dir = angle2dir(adir)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/glass/plasmaglass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel_plasma", layer = FLY_LAYER)
src.dir = angle2dir(adir)
else if(solar_assembly.glass_type == /obj/item/stack/sheet/rglass/plasmarglass)
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel_plasma_ref", layer = FLY_LAYER)
if(!tracker)
overlays.len = 0
var/obj/item/stack/sheet/glass/G = solar_assembly.glass_type
var/icon = "solar_panel_" + initial(G.sname)
if(stat & BROKEN)
icon += "-b"
overlays += image('icons/obj/power.dmi', icon_state = icon, layer = FLY_LAYER)
src.dir = angle2dir(adir)
return
/obj/machinery/power/solar/panel/proc/update_solar_exposure()
if(!sun)
@@ -160,4 +162,4 @@
. = ..()
if(.)
control = null
control = null

View File

@@ -1,23 +1,12 @@
/obj/machinery/power/solar/tracker
/obj/machinery/power/solar/panel/tracker
name = "solar tracker"
desc = "A solar directional tracker."
icon_state = "tracker"
var/sun_angle = 0 // sun angle as set by sun datum
/obj/machinery/power/solar/tracker/New(loc, obj/machinery/power/solar_assembly/S)
..(loc)
if(!S)
S = new(src)
S.glass_type = /obj/item/stack/sheet/rglass
S.tracker = 1
S.anchored = 1
S.loc = src
tracker = 1
// called by datum/sun/calc_position() as sun's angle changes
/obj/machinery/power/solar/tracker/proc/set_angle(angle)
/obj/machinery/power/solar/panel/tracker/proc/set_angle(angle)
sun_angle = angle
//Set icon dir to show sun illumination
@@ -34,22 +23,8 @@
if(get_dist(C, src) < SOLAR_MAX_DIST)
C.tracker_update(angle)
/obj/machinery/power/solar/tracker/attackby(var/obj/item/weapon/W, var/mob/user)
if(iscrowbar(W))
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
var/obj/machinery/power/solar_assembly/S = locate() in src
if(S)
S.loc = src.loc
S.give_glass()
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] takes the glass off the tracker.</span>")
qdel(src)
return
..()
// make sure we can draw power from the powernet
/obj/machinery/power/solar/tracker/process()
/obj/machinery/power/solar/panel/tracker/process()
var/avail = surplus()
if(avail > 500)
@@ -63,4 +38,4 @@
name = "tracker electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_electronics"
w_class = 2.0
w_class = 2.0