@name @persist [Wirelinks Usage Production ]:table @persist [LifeSupportFilter]:table [RemovalFilter]:string @persist E2Name:string Tally @persist TimerDelay SortNum LinkNum FoundEntities:array MaxEntities @persist ResourceNode:entity BasicLifesupport @model models/slyfo_2/rocketpod_turbo_full.mdl if(dupefinished()){reset()} if(first()) { entity():setMaterial("phoenix_storms/dome") runOnLast(1) LifeSupportFilter = invert(table("storage_cache","generator_liquid_hvywater","generator_energy_steam_turbine","generator_gas_o2h_water")) RemovalFilter = "prop wire gmod func" TimerDelay = 100 #in milliseconds ###################################################################################################### ############################---START OF GENERATOR CONSTANTS---######################################## ###################################################################################################### #Water Pump Usage["generator_liquid_water models/chipstiks_ls3_models/largeh2opump/largeh2opump.mdl",number]=172 Production["generator_liquid_water models/chipstiks_ls3_models/largeh2opump/largeh2opump.mdl",number]=464 Usage["generator_liquid_water models/ce_ls3additional/water_pump/water_pump.mdl",number]=33 Production["generator_liquid_water models/ce_ls3additional/water_pump/water_pump.mdl",number]=259 Usage["generator_liquid_water models/props_phx/life_support/gen_water.mdl",number]=13 Production["generator_liquid_water models/props_phx/life_support/gen_water.mdl",number]=97 #----Heavy Water Electrolyzer-----# Usage["generator_liquid_hvywater models/ce_ls3additional/water_heater/water_heater.mdl",number]=81 Production["generator_liquid_hvywater models/ce_ls3additional/water_heater/water_heater.mdl",number]=80 Usage["generator_liquid_hvywater models/chipstiks_ls3_models/nitrogenliquifier/nitrogenliquifier.mdl",number]=84 Production["generator_liquid_hvywater models/chipstiks_ls3_models/nitrogenliquifier/nitrogenliquifier.mdl",number]=83 Usage["generator_liquid_hvywater models/props_wasteland/laundry_washer003.mdl",number]=350 Production["generator_liquid_hvywater models/props_wasteland/laundry_washer003.mdl",number]=345 #----Steam Turbine-----# Usage["generator_energy_steam_turbine models/ce_ls3additional/water_heater/water_heater.mdl",number]=31 Production["generator_energy_steam_turbine models/ce_ls3additional/water_heater/water_heater.mdl",number]=278 #----Water Air Extractor-----# Usage["generator_gas_o2h_water models/ce_ls3additional/water_heater/water_heater.mdl",number]=578 Production["generator_gas_o2h_water models/ce_ls3additional/water_heater/water_heater.mdl",number]=289 Usage["generator_gas_o2h_water models/ce_ls3additional/water_air_extractor/water_air_extractor.mdl",number]=117 Production["generator_gas_o2h_water models/ce_ls3additional/water_air_extractor/water_air_extractor.mdl",number]=59 Usage["generator_gas_o2h_water models/lifesupport/generators/waterairextractor.mdl",number]=250 Production["generator_gas_o2h_water models/lifesupport/generators/waterairextractor.mdl",number]=125 ###################################################################################################### #############################---END OF GENERATOR CONSTANTS---######################################### ###################################################################################################### ##User Defined Functions function wirelink createWL(Ent:entity) { Ent:makeWirelink() return Ent:getWirelink() } function generatorControl(WL:wirelink, On:number) { WL["On",number]=On } function generatorControl(WL:wirelink, On:number, Mult:number) { WL["On",number]=On WL["Multiplier",number]=Mult } #End Functions timer("SetE2Name",1000) timer("FindConstrainedEntities",1000) } if(clk("SetE2Name")) { #entity():setColor(vec((10-Tally)*25.5,Tally*25.5,Tally*15)) setName("=":repeat(24)+E2Name+"\n"+"=":repeat(24)) timer("SetE2Name",1000) } if(clk("FindConstrainedEntities")) { FoundEntities = entity():getConstraints() MaxEntities = FoundEntities:count() if(MaxEntities>3) { SortNum = 0 timer("SortEntities",TimerDelay) } else { E2Name = "\nThis is not a ship!\nI won't work unless placed on a completed ship!" } } if(clk("SortEntities")) { SortNum++ if(SortNum<=MaxEntities) { timer("SortEntities",TimerDelay) PercentDone = SortNum/MaxEntities*20 E2Name="\nScanning Entities "+"|"+"*":repeat(PercentDone) + " ":repeat(20-PercentDone)+ "|" SortedEnt=FoundEntities[SortNum,entity] Class=SortedEnt:type() if(RemovalFilter:find(Class:left(4))) { FoundEntities:remove(SortNum) SortNum-- } elseif(Class == "generator_liquid_water") { TempWL = createWL(SortedEnt) Wirelinks[Class,wirelink]=TempWL Wirelinks[Class,wirelink]["Mute",number]=1 } elseif(Class == "resource_node" | Class == "ship_core_test") { if(SortedEnt:rdNodeSize()>ResourceNode:rdNodeSize() | !ResourceNode) { ResourceNode=SortedEnt FoundEntities:remove(SortNum) SortNum-- } } elseif(LifeSupportFilter:exists(Class)) { LifeSupportFilter:remove(Class) TempWL = createWL(SortedEnt) Wirelinks[Class,wirelink]=TempWL } MaxEntities=FoundEntities:count() } else { if(LifeSupportFilter:count()==0) { BasicLifesupport=1 Wirelinks["generator_liquid_hvywater",wirelink]["Mute",number]=1 Wirelinks["generator_gas_o2h_water",wirelink]["Mute",number]=1 Wirelinks["generator_energy_steam_turbine",wirelink]["Mute",number]=1 } if(ResourceNode) { concmd("say Largest Resource Node is " + ResourceNode:type() + " with a radius of " + ResourceNode:rdNodeSize() + " units") LinkNum = 1 MaxEntities = FoundEntities:count() timer("LinkEntities",TimerDelay) } else { E2Name="\nI couldn't find a resource node, better put one down!" } } } if(clk("LinkEntities")) { if(LinkNum <= MaxEntities) { PercentDone = LinkNum/MaxEntities*20 E2Name="\nLinking Components "+"|"+"*":repeat(PercentDone) + " ":repeat(20-PercentDone)+ "|" LinkedEnt=FoundEntities[LinkNum,entity] if(LinkedEnt:rdNetID()==0&LinkedEnt:pos():distance(ResourceNode:pos())<=ResourceNode:rdNodeSize()) { LinkedEnt:link(ResourceNode) } LinkNum++ timer("LinkEntities",TimerDelay) } else { timer("SearchForPump",500) timer("ManageResources",1000) } } if(BasicLifesupport&clk("SearchForPump")&!Wirelinks:exists("generator_liquid_water")) { timer("SearchForPump",5000) findIncludeClass("generator_liquid_water") Found=findInSphere(ResourceNode:pos(),ResourceNode:rdNodeSize()) if(Found>0) { FoundPumps=findToArray() for(I=1,FoundPumps:count()) { TempEnt=FoundPumps[I,entity] Const=invert(TempEnt:getConstraints()) Concat=Const:keys():concat(" ") if(TempEnt:owner()==owner()&Concat:find("resource_node")==0) { N=1 TempEnt:link(ResourceNode) TempWL = createWL(TempEnt) Wirelinks["generator_liquid_water",wirelink]=TempWL Wirelinks["generator_liquid_water",wirelink]["Mute",number]=1 } } } } elseif(BasicLifesupport&clk("SearchForPump")) { timer("SearchForPump",5000) Pump=Wirelinks["generator_liquid_water",wirelink] if(Pump:entity():id()==0|Pump:entity():pos():distance(ResourceNode:pos())>ResourceNode:rdNodeSize()) { Wirelinks:remove("generator_liquid_water") } } if(clk("ManageResources")) { E2Name=(BasicLifesupport ? "\nBasic Lifesupport" : "") Docked=Wirelinks:exists("generator_liquid_water")&Wirelinks["generator_liquid_water",wirelink]:entity():isUnderWater() timer("ManageResources",1000) TempWL=Wirelinks["storage_cache",wirelink] MaxEnergy=TempWL["Max Energy",number] Energy=TempWL["Energy",number] Pcnt=Energy/MaxEnergy*10 E2Name = E2Name + "\nEnergy |"+"*":repeat(Pcnt)+" ":repeat(10-Pcnt)+"|" #Tally+=Pcnt if(BasicLifesupport) { Water=TempWL["Water",number] MaxWater=TempWL["Max Water",number] Pcnt=Water/MaxWater*10 E2Name = E2Name + "\nWater |"+"*":repeat(Pcnt)+" ":repeat(10-Pcnt)+"|" #Tally+=Pcnt Steam=TempWL["Steam",number] MaxSteam=TempWL["Max Steam",number] Pcnt=Steam/MaxSteam*10 E2Name = E2Name + "\nSteam |"+"*":repeat(Pcnt)+" ":repeat(10-Pcnt)+"|" #Tally+=Pcnt Oxygen=TempWL["Oxygen",number] MaxOxygen=TempWL["Max Oxygen",number] Pcnt=Oxygen/MaxOxygen*10 E2Name = E2Name + "\nOxygen |"+"*":repeat(Pcnt)+" ":repeat(10-Pcnt)+"|" #Tally=(Tally+Pcnt)/4 Hydrogen=TempWL["Hydrogen",number] MaxHydrogen=TempWL["Max Hydrogen",number] } if(Docked) { if(BasicLifesupport) { TempWL=Wirelinks["generator_liquid_water",wirelink] TempEnt=TempWL:entity() WaterProduction=Production[TempEnt:type()+" "+TempEnt:model(),number] EnergyUsage=Usage[TempEnt:type()+" "+TempEnt:model(),number] On=((Energy>5)&(Water1000)) Mult=min(Energy/(EnergyUsage*1.75),(MaxWater-Water)/(1.05*WaterProduction)) generatorControl(TempWL,On,Mult) TempWL=Wirelinks["generator_liquid_hvywater",wirelink] TempEnt=TempWL:entity() SteamProduction=Production[TempEnt:type()+" "+TempEnt:model(),number] WaterUsage=Usage[TempEnt:type()+" "+TempEnt:model(),number] On=(Energy>15)&(Water>50)&(Steam2)) Mult=min(Steam/(SteamUsage*1.15),((MaxEnergy-Energy)/(1.5*EnergyProduction))) generatorControl(TempWL,On,Mult) TempWL=Wirelinks["generator_gas_o2h_water",wirelink] TempEnt=TempWL:entity() OxygenProduction=Production[TempEnt:type()+" "+TempEnt:model(),number] WaterUsage=Usage[TempEnt:type()+" "+TempEnt:model(),number] HydrogenProduction=OxygenProduction*2 On=(Energy>MaxEnergy*0.1)&(OxygenMaxWater*0.1|Water>500000) Mult=min(Water/(WaterUsage*6),max((MaxOxygen-Oxygen)/(1.5*OxygenProduction),(MaxHydrogen-Hydrogen)/(1.5*HydrogenProduction))) generatorControl(TempWL,On,Mult) } } elseif(!Docked) { if(BasicLifesupport) { TempWL=Wirelinks["generator_liquid_hvywater",wirelink] TempEnt=TempWL:entity() SteamProduction=Production[TempEnt:type()+" "+TempEnt:model(),number] WaterUsage=Usage[TempEnt:type()+" "+TempEnt:model(),number] On=((Energy>MaxEnergy*0.01) | Energy>5000) &((Water>MaxWater*0.3)&(SteamMaxSteam*0.05))|((WaterMaxSteam*0.1))|(Water==0&Steam>0) Mult=min(Steam/SteamUsage,(MaxEnergy*0.95-Energy)/EnergyProduction,90000000001*(Water>=(MaxWater*0.05))+(MaxWater*0.95-Water)/SteamUsage) generatorControl(TempWL,On,Mult) TempWL=Wirelinks["generator_gas_o2h_water",wirelink] TempEnt=TempWL:entity() OxygenProduction=Production[TempEnt:type()+" "+TempEnt:model(),number] WaterUsage=Usage[TempEnt:type()+" "+TempEnt:model(),number] HydrogenProduction=OxygenProduction*2 On=(Energy>MaxEnergy*0.05)&((Oxygen50000) Mult=Water/(WaterUsage*12) generatorControl(TempWL,On,Mult) } } } if(last()) { foreach(Key,TempWL:wirelink=Wirelinks) { TempWL["On",number]=0 } }