mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
Solars fix. Needs the powernet fix to actually work properly.
- Solars now bring out a fixed value. 700W each, meaning 60 of them (one array) generates 42000W. Not enough to power the station? That's the point. Although 4 x 42000W = 168000. This might be nerfed soon. - Sun removed. Seriously, that thing ate up processor time and was completely useless. - Solar tracker remains on the map but is completely useless. Will remove. - Also reverted the cable updates from r1729. The code from prior to that revision might be as laggy as it was, but it works properly. After the revision powernets didn't calculate available power properly and did not update properly when new pieces were made (They stopped updating at the first wire piece which ended in a knot (non-smooth cable piece)) git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1897 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -358,6 +358,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
//log_admin("[key_name(src)] has alienized [M.key].")
|
||||
var/list/dresspacks = list(
|
||||
"strip",
|
||||
"standard space gear",
|
||||
"tournament standard red",
|
||||
"tournament standard green",
|
||||
"tournament gangster",
|
||||
@@ -387,6 +388,17 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
switch(dresscode)
|
||||
if ("strip")
|
||||
//do nothing
|
||||
if ("standard space gear")
|
||||
M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
|
||||
|
||||
M.equip_if_possible(new /obj/item/clothing/under/color/grey(M), M.slot_w_uniform)
|
||||
M.equip_if_possible(new /obj/item/clothing/suit/space(M), M.slot_wear_suit)
|
||||
M.equip_if_possible(new /obj/item/clothing/head/helmet/space(M), M.slot_head)
|
||||
var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack(M)
|
||||
M.equip_if_possible(J, M.slot_back)
|
||||
J.toggle()
|
||||
M.equip_if_possible(new /obj/item/clothing/mask/breath(M), M.slot_wear_mask)
|
||||
J.Topic(null, list("stat" = 1))
|
||||
if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
|
||||
if (dresscode=="tournament standard red")
|
||||
M.equip_if_possible(new /obj/item/clothing/under/color/red(M), M.slot_w_uniform)
|
||||
|
||||
+86
-200
@@ -26,37 +26,26 @@
|
||||
|
||||
var/obj/cable/NC = new(T)
|
||||
|
||||
NC.cableColor(coil.color)
|
||||
var/color = "red"
|
||||
if(coil.color)
|
||||
color = coil.color
|
||||
NC.color = coil.color
|
||||
switch(color)
|
||||
if("red")
|
||||
NC.icon = 'power_cond_red.dmi'
|
||||
if("yellow")
|
||||
NC.icon = 'power_cond_yellow.dmi'
|
||||
if("green")
|
||||
NC.icon = 'power_cond_green.dmi'
|
||||
if("blue")
|
||||
NC.icon = 'power_cond_blue.dmi'
|
||||
|
||||
NC.d1 = 0
|
||||
NC.d2 = dirn
|
||||
NC.add_fingerprint()
|
||||
NC.updateicon()
|
||||
|
||||
NC.mergeConnectedNetworks(NC.d2)
|
||||
NC.mergeConnectedNetworksOnTurf()
|
||||
if(netnum == 0 && NC.netnum == 0)
|
||||
var/datum/powernet/PN = new()
|
||||
|
||||
PN.number = powernets.len + 1
|
||||
powernets += PN
|
||||
NC.netnum = PN.number
|
||||
netnum = PN.number
|
||||
PN.cables += NC
|
||||
PN.nodes += src
|
||||
powernet = PN
|
||||
else if(netnum == 0)
|
||||
netnum = NC.netnum
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
powernet = PN
|
||||
PN.nodes += src
|
||||
NC.mergeConnectedNetworksOnTurf()
|
||||
|
||||
NC.update_network()
|
||||
coil.use(1)
|
||||
if (NC.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color)
|
||||
del(NC)
|
||||
return
|
||||
else
|
||||
..()
|
||||
@@ -145,6 +134,8 @@
|
||||
|
||||
|
||||
else if(istype(W, /obj/item/weapon/cable_coil))
|
||||
if (shock(user, 50))
|
||||
return
|
||||
var/obj/item/weapon/cable_coil/coil = W
|
||||
coil.cable_join(src, user)
|
||||
|
||||
@@ -306,27 +297,29 @@
|
||||
|
||||
var/obj/cable/C = new(F)
|
||||
|
||||
C.cableColor(color)
|
||||
var/color_n = "red"
|
||||
if(color)
|
||||
color_n = color
|
||||
C.color = color_n
|
||||
switch(color)
|
||||
if("red")
|
||||
C.icon = 'power_cond_red.dmi'
|
||||
if("yellow")
|
||||
C.icon = 'power_cond_yellow.dmi'
|
||||
if("green")
|
||||
C.icon = 'power_cond_green.dmi'
|
||||
if("blue")
|
||||
C.icon = 'power_cond_blue.dmi'
|
||||
|
||||
C.d1 = 0
|
||||
C.d2 = dirn
|
||||
C.add_fingerprint(user)
|
||||
C.updateicon()
|
||||
|
||||
var/datum/powernet/PN = new()
|
||||
PN.number = powernets.len + 1
|
||||
powernets += PN
|
||||
C.netnum = PN.number
|
||||
PN.cables += C
|
||||
|
||||
C.mergeConnectedNetworks(C.d2)
|
||||
C.mergeConnectedNetworksOnTurf()
|
||||
|
||||
|
||||
C.update_network()
|
||||
use(1)
|
||||
if (C.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(C.loc, 1, C.color)
|
||||
if (prob(50))
|
||||
new/obj/item/weapon/cable_coil(C.loc, C.d1 ? 2 : 1, C.color)
|
||||
del(C)
|
||||
//src.laying = 1
|
||||
//last = C
|
||||
@@ -336,6 +329,7 @@
|
||||
|
||||
/obj/item/weapon/cable_coil/proc/cable_join(obj/cable/C, mob/user)
|
||||
|
||||
|
||||
var/turf/U = user.loc
|
||||
if(!isturf(U))
|
||||
return
|
||||
@@ -371,30 +365,39 @@
|
||||
return
|
||||
|
||||
var/obj/cable/NC = new(U)
|
||||
NC.cableColor(color)
|
||||
|
||||
var/color_n = "red"
|
||||
if(color)
|
||||
color_n = color
|
||||
NC.color = color_n
|
||||
switch(color)
|
||||
if("red")
|
||||
NC.icon = 'power_cond_red.dmi'
|
||||
if("yellow")
|
||||
NC.icon = 'power_cond_yellow.dmi'
|
||||
if("green")
|
||||
NC.icon = 'power_cond_green.dmi'
|
||||
if("blue")
|
||||
NC.icon = 'power_cond_blue.dmi'
|
||||
|
||||
NC.d1 = 0
|
||||
NC.d2 = fdirn
|
||||
NC.add_fingerprint()
|
||||
NC.updateicon()
|
||||
|
||||
NC.netnum = C.netnum
|
||||
var/datum/powernet/PN = powernets[C.netnum]
|
||||
PN.cables += NC
|
||||
NC.mergeConnectedNetworksOnTurf()
|
||||
NC.update_network()
|
||||
use(1)
|
||||
if (NC.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color)
|
||||
if (prob(50))
|
||||
new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color)
|
||||
del(NC)
|
||||
|
||||
return
|
||||
else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub
|
||||
// if so, make it a full cable pointing from it's old direction to our dirn
|
||||
|
||||
var/nd1 = C.d2 // these will be the new directions
|
||||
var/nd2 = dirn
|
||||
|
||||
|
||||
if(nd1 > nd2) // swap directions to match icons/states
|
||||
nd1 = dirn
|
||||
nd2 = C.d2
|
||||
@@ -406,166 +409,49 @@
|
||||
if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction
|
||||
user << "There's already a cable at that position."
|
||||
return
|
||||
C.shock(user, 25)
|
||||
del(C)
|
||||
var/obj/cable/NC = new(T)
|
||||
|
||||
var/color_n = "red"
|
||||
if(color)
|
||||
color_n = color
|
||||
NC.color = color_n
|
||||
switch(color)
|
||||
if("red")
|
||||
NC.icon = 'power_cond_red.dmi'
|
||||
if("yellow")
|
||||
NC.icon = 'power_cond_yellow.dmi'
|
||||
if("green")
|
||||
NC.icon = 'power_cond_green.dmi'
|
||||
if("blue")
|
||||
NC.icon = 'power_cond_blue.dmi'
|
||||
|
||||
C.cableColor(color)
|
||||
|
||||
C.d1 = nd1
|
||||
C.d2 = nd2
|
||||
|
||||
C.add_fingerprint()
|
||||
C.updateicon()
|
||||
|
||||
|
||||
C.mergeConnectedNetworks(C.d1)
|
||||
C.mergeConnectedNetworks(C.d2)
|
||||
NC.d1 = nd1
|
||||
NC.d2 = nd2
|
||||
NC.add_fingerprint()
|
||||
NC.updateicon()
|
||||
NC.update_network()
|
||||
|
||||
use(1)
|
||||
if (C.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(C.loc, 2, C.color)
|
||||
del(C)
|
||||
if (NC.shock(user, 50))
|
||||
if (prob(50))
|
||||
new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color)
|
||||
del(NC)
|
||||
|
||||
return
|
||||
|
||||
/obj/cable/proc/mergeConnectedNetworks(var/direction)
|
||||
var/turf/TB
|
||||
if((d1 == direction || d2 == direction) != 1)
|
||||
return
|
||||
TB = get_step(src, direction)
|
||||
|
||||
for(var/obj/cable/TC in TB)
|
||||
if(src == TC)
|
||||
continue
|
||||
// called when a new cable is created
|
||||
// can be 1 of 3 outcomes:
|
||||
// 1. Isolated cable (or only connects to isolated machine) -> create new powernet
|
||||
// 2. Joins to end or bridges loop of a single network (may also connect isolated machine) -> add to old network
|
||||
// 3. Bridges gap between 2 networks -> merge the networks (must rebuild lists also)
|
||||
|
||||
var/fdir = (!direction)? 0 : turn(direction, 180)
|
||||
|
||||
if(TC.d1 == fdir || TC.d2 == fdir)
|
||||
|
||||
if(!netnum)
|
||||
var/datum/powernet/PN = powernets[TC.netnum]
|
||||
netnum = TC.netnum
|
||||
PN = powernets[netnum]
|
||||
PN.cables += src
|
||||
continue
|
||||
|
||||
if(TC.netnum != netnum)
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
var/datum/powernet/TPN = powernets[TC.netnum]
|
||||
var/kingNetnum = netnum
|
||||
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
|
||||
kingNetnum = TC.netnum
|
||||
var/datum/powernet/temp = PN
|
||||
PN = TPN
|
||||
TPN = temp
|
||||
for(var/obj/cable/C in TPN.cables)
|
||||
TPN.cables -= C
|
||||
PN.cables += C
|
||||
C.netnum = kingNetnum
|
||||
for(var/obj/machinery/power/M in TPN.nodes)
|
||||
if(M.netnum < 0) // APCs have netnum=-1 so they don't count as network nodes directly
|
||||
continue
|
||||
TPN.nodes -= M
|
||||
PN.nodes += M
|
||||
M.netnum = kingNetnum
|
||||
M.powernet = powernets[M.netnum]
|
||||
TC.netnum = kingNetnum
|
||||
TPN.cables -= TC
|
||||
PN.cables += TC
|
||||
for(var/obj/machinery/power/M in TB)
|
||||
if(!netnum)
|
||||
if(!M.netnum)
|
||||
continue
|
||||
else
|
||||
netnum = M.netnum
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
PN.nodes += src
|
||||
|
||||
/obj/cable/proc/mergeConnectedNetworksOnTurf()
|
||||
var/turf/TB
|
||||
TB = loc
|
||||
|
||||
for(var/obj/cable/C in TB)
|
||||
if(C == src)
|
||||
continue
|
||||
if(netnum == 0)
|
||||
var/datum/powernet/PN = powernets[C.netnum]
|
||||
netnum = C.netnum
|
||||
PN.cables += src
|
||||
continue
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
var/datum/powernet/TPN = powernets[C.netnum]
|
||||
var/kingNetnum = netnum
|
||||
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
|
||||
kingNetnum = C.netnum
|
||||
var/datum/powernet/temp = PN
|
||||
PN = TPN
|
||||
TPN = temp
|
||||
|
||||
TPN.cables -= C
|
||||
PN.cables += C
|
||||
C.netnum = kingNetnum
|
||||
for(var/obj/machinery/power/M in TB)
|
||||
|
||||
if(M.netnum < 0)
|
||||
continue
|
||||
if(M.netnum == 0)
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
PN.nodes += M
|
||||
M.netnum = netnum
|
||||
M.powernet = powernets[M.netnum]
|
||||
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
var/datum/powernet/TPN = powernets[M.netnum]
|
||||
var/kingNetnum = netnum
|
||||
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
|
||||
kingNetnum = M.netnum
|
||||
var/datum/powernet/temp = PN
|
||||
PN = TPN
|
||||
TPN = temp
|
||||
|
||||
TPN.nodes -= M
|
||||
PN.nodes += M
|
||||
M.netnum = kingNetnum
|
||||
M.powernet = powernets[M.netnum]
|
||||
for(var/obj/machinery/power/apc/N in TB)
|
||||
var/obj/machinery/power/M
|
||||
M = N.terminal
|
||||
|
||||
if(M.netnum == 0)
|
||||
if(netnum == 0)
|
||||
continue
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
PN.nodes += M
|
||||
M.netnum = netnum
|
||||
M.powernet = powernets[M.netnum]
|
||||
continue
|
||||
|
||||
var/datum/powernet/PN = powernets[netnum]
|
||||
var/datum/powernet/TPN = powernets[M.netnum]
|
||||
var/kingNetnum = netnum
|
||||
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
|
||||
kingNetnum = M.netnum
|
||||
var/datum/powernet/temp = PN
|
||||
PN = TPN
|
||||
TPN = temp
|
||||
|
||||
TPN.nodes -= M
|
||||
PN.nodes += M
|
||||
M.netnum = kingNetnum
|
||||
M.powernet = powernets[M.netnum]
|
||||
|
||||
obj/cable/proc/cableColor(var/colorC)
|
||||
var/color_n = "red"
|
||||
if(colorC)
|
||||
color_n = colorC
|
||||
color = color_n
|
||||
switch(colorC)
|
||||
if("red")
|
||||
icon = 'power_cond_red.dmi'
|
||||
if("yellow")
|
||||
icon = 'power_cond_yellow.dmi'
|
||||
if("green")
|
||||
icon = 'power_cond_green.dmi'
|
||||
if("blue")
|
||||
icon = 'power_cond_blue.dmi'
|
||||
/obj/cable/proc/update_network()
|
||||
// easy way: do /makepowernets again
|
||||
makepowernets()
|
||||
// do things more logically if this turns out to be too slow
|
||||
// may just do this for case 3 anyway (simpler than refreshing list)
|
||||
|
||||
+18
-25
@@ -1,13 +1,19 @@
|
||||
/obj/machinery/power/solar
|
||||
var/id
|
||||
var/net_set = 0
|
||||
|
||||
/obj/machinery/power/solar/New()
|
||||
..()
|
||||
spawn(10)
|
||||
updateicon()
|
||||
update_solar_exposure()
|
||||
|
||||
if(powernet)
|
||||
for(var/obj/machinery/power/solar_control/SC in powernet.nodes)
|
||||
if(SC.id == id)
|
||||
control = SC
|
||||
add_avail(700)
|
||||
net_set = 1
|
||||
else
|
||||
net_set = 0
|
||||
|
||||
|
||||
|
||||
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
|
||||
..()
|
||||
@@ -39,9 +45,9 @@
|
||||
overlays += image('power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
|
||||
else
|
||||
overlays += image('power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
|
||||
src.dir = angle2dir(adir)
|
||||
return
|
||||
|
||||
/*
|
||||
/obj/machinery/power/solar/proc/update_solar_exposure()
|
||||
if(!sun)
|
||||
return
|
||||
@@ -58,31 +64,22 @@
|
||||
|
||||
#define SOLARGENRATE 1500
|
||||
|
||||
*/
|
||||
|
||||
/obj/machinery/power/solar/process()
|
||||
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
|
||||
//return //TODO: FIX
|
||||
add_avail(700)
|
||||
|
||||
if(!obscured)
|
||||
var/sgen = SOLARGENRATE * sunfrac
|
||||
add_avail(sgen)
|
||||
if(powernet && control)
|
||||
if(control in powernet.nodes) //this line right here...
|
||||
control.gen += sgen
|
||||
|
||||
if(adir != ndir)
|
||||
spawn(10+rand(0,15))
|
||||
adir = (360+adir+dd_range(-10,10,ndir-adir))%360
|
||||
updateicon()
|
||||
update_solar_exposure()
|
||||
|
||||
/obj/machinery/power/solar/proc/broken()
|
||||
stat |= BROKEN
|
||||
updateicon()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/solar/meteorhit()
|
||||
if(stat & !BROKEN)
|
||||
broken()
|
||||
@@ -93,19 +90,14 @@
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
if(prob(15))
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(25))
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
del(src)
|
||||
return
|
||||
if (prob(50))
|
||||
broken()
|
||||
if(3.0)
|
||||
if (prob(25))
|
||||
broken()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/power/solar/blob_act()
|
||||
@@ -118,7 +110,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/obj/machinery/power/solar_control/New()
|
||||
..()
|
||||
spawn(15)
|
||||
@@ -331,3 +323,4 @@
|
||||
if (prob(75))
|
||||
broken()
|
||||
src.density = 0
|
||||
*/
|
||||
@@ -3,6 +3,8 @@
|
||||
//Machine that tracks the sun and reports it's direction to the solar controllers
|
||||
//As long as this is working, solar panels on same powernet will track automatically
|
||||
|
||||
|
||||
|
||||
/obj/machinery/power/tracker
|
||||
name = "solar tracker"
|
||||
desc = "A solar directional tracker."
|
||||
@@ -15,6 +17,8 @@
|
||||
var/sun_angle = 0 // sun angle as set by sun datum
|
||||
|
||||
|
||||
/*
|
||||
|
||||
// called by datum/sun/calc_position() as sun's angle changes
|
||||
proc/set_angle(var/angle)
|
||||
sun_angle = angle
|
||||
@@ -34,6 +38,8 @@
|
||||
C.tracker_update(angle)
|
||||
|
||||
|
||||
|
||||
|
||||
// timed process
|
||||
// make sure we can draw power from the powernet
|
||||
process()
|
||||
@@ -47,4 +53,6 @@
|
||||
|
||||
// override power change to do nothing since we don't care about area power
|
||||
power_change()
|
||||
return
|
||||
return
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user