Welcome to the new Diaspora forums, please let us know if you see anything broken! Notice: Some users may need to reupload their avatars due to an issue during forum setup!
Steeveeo's E2s
I have quite a few E2s that steeveeo made a while back, and most people have either lost them or never had them. The autodownloader used to send these to everyone, but that stopped working about a year ago. So yeah, here you guys go.
E2 Autoparenter
E2 Weldchecker
Automatic Sliding Door
Toggle Use Door
Prop Direction Finder
Third-person Camera
Holo Propeller Controller
Atmospheric Probe
E2 Autoparenter
# Author: Steeveeo
# Updated: February 7, 2011 @ 12:08 AM PST (-8 GMT)
# Use and Purpose:
# Place this chip on the main prop of your ship and say
# '!parent' in chat. This will do all the work for you
# to have a properly working and non-laggy parented ship.
# Note that this does auto-weight props, so if your gyropod
# is setup for a different weight, you may have to adjust.
#
# To share this chip, just say 'share mode' in chat before placing.
#
# Note: Do NOT save your ship after this, it will not work as
# expected. Instead, use this before flying each time your ship
# is placed.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name E2 Tool - Auto Parenter
@inputs
@outputs
@persist Parts:array Parent:entity Step
@trigger
runOnChat(1)
#Startup
if(first())
{
#Check if constrained
if(!entity():isConstrained() & owner():lastSaid():lower() != "share mode")
{
print("Please place this on a contraption to begin")
selfDestruct()
}
elseif(entity():isConstrained())
{
print("Caching structure parts, say '!parent' to begin.")
Parent = entity():isConstrainedTo()
Parts = entity():getConstraints()
}
}
#Begin parenting
if(chatClk(owner()) & owner():lastSaid():lower() == "!parent")
{
print("Initializing AutoParent, DO NOT TOUCH YOUR SHIP UNTIL THIS IS COMPLETE!")
Step = 0
timer("Freeze",100)
}
#Freeze all props
if(clk("Freeze"))
{
#From here on out, these are expensive processes, so we need to do this in chunks
Index = 1+(10*Step)
End = 0
while(Index <= 10+(10*Step))
{
if(Index != Parts:count()+1)
{
Parts[Index,entity]:freeze()
Index++
}
else
{
#Call the Unconstrainer
Step = 0
timer("Unconstrain",100)
print("Freezing finished, optimizing constraints.")
print("Unconstraining all props.")
End = 1
break
}
}
#Check if we did not hit the end, start next step
if(!End)
{
Step++
timer("Freeze",100)
}
}
#Unconstrain everything
if(clk("Unconstrain"))
{
Index = 1+(10*Step)
End = 0
while(Index <= 10+(10*Step))
{
if(Index != Parts:count()+1)
{
Parts[Index,entity]:unConstrain()
Index++
}
else
{
#Call the Rewelder
Step = 0
timer("Reweld",100)
print("Unconstrain finished, welding to parent.")
End = 1
break
}
}
#Check if we did not hit the end, start next step
if(!End)
{
Step++
timer("Unconstrain",100)
}
}
#ReWeld everything to Parent
if(clk("Reweld"))
{
Index = 1+(10*Step)
End = 0
while(Index <= 10+(10*Step))
{
if(Index != Parts:count()+1)
{
if(Parts[Index,entity] != Parent)
{
Parts[Index,entity]:weld(Parent)
}
Index++
}
else
{
#Call the Weighter
Step = 0
timer("Weights",100)
print("Rewelding finished, beginning dynamic weighting.")
End = 1
break
}
}
#Check if we did not hit the end, start next step
if(!End)
{
Step++
timer("Reweld",100)
}
}
#Weight everything dynamically
if(clk("Weights"))
{
Index = 1+(10*Step)
End = 0
while(Index <= 10+(10*Step))
{
if(Index != Parts:count()+1)
{
Part = Parts[Index,entity]
if(Part == Parent)
{
Part:setMass(50000)
}
elseif(Part:type() == "prop_physics" | Part:type() == "prop_physics_multiplayer")
{
Part:setMass(200)
}
else
{
Type = Part:type():lower()
if(Type:find("resource") | Type:find("storage") | Type:find("gen") | Type:find("regulator") | Type:find("gyropod"))
{
Part:setMass(50)
}
else
{
Part:setMass(1)
}
}
Index++
}
else
{
#Call the Parenter
Step = 0
timer("Parent",100)
print("Weighting finished, parenting ship.")
End = 1
break
}
}
#Check if we did not hit the end, start next step
if(!End)
{
Step++
timer("Weights",100)
}
}
#Parenting time
if(clk("Parent"))
{
Index = 1+(10*Step)
End = 0
while(Index <= 10+(10*Step))
{
if(Index != Parts:count()+1)
{
if(Parts[Index,entity] != Parent & !Parts[Index,entity]:isVehicle())
{
Parts[Index,entity]:parentTo(Parent)
}
Index++
}
else
{
#End it
print("Parenting complete, you may now fly this ship.")
End = 1
break
}
}
#Check if we did not hit the end, start next step
if(!End)
{
Step++
timer("Parent",100)
}
else
{
selfDestruct()
}
}
E2 Weldchecker
# Author: Steeveeo
# Updated: November 22, 2010 @ 11:48 PST (-8 GMT)
# Use and Purpose:
# Place on a ship and say "weldcheck: start" to mark everything
# welded to it. Say "weldcheck: end" or delete the chip to clear
# marking.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name Weld Check
@inputs
@outputs
@persist Parts:array PartColors:array
@trigger
runOnChat(1)
runOnLast(1)
#Startup
if(first()|dupefinished())
{
}
#Chat Control
if(chatClk(owner()))
{
#Chat Parsing
LastSaid = lastSaid():lower()
Command = LastSaid:explode(": "):string(1)
Args = LastSaid:explode(": "):string(2):explode(", ")
if(Command == "weldcheck")
{
#Start Weld Coloring
if(Args[1,string] == "start")
{
#Check if stuck on anything
if(entity():isConstrained())
{
Parts = entity():getConstraints()
for(Index = 1, Parts:count())
{
PartColors[Index,vector4] = Parts[Index,entity]:getColor4()
}
print("[WELDCHECK] - Beginning Scan and Marking Welded Objects")
timer("Mark",1000)
}
else
{
print("[WELDCHECK] - Chip is not attached to anything! Weld this chip on a contraption to start check.")
}
}
#End, unmark all checks
if(Args[1,string] == "end")
{
print("[WELDCHECK] - Unmarking all objects, end of weld check.")
timer("Unmark",1000)
}
}
}
#Mark all welded objects sequentially
if(clk("Mark"))
{
for(Index = 1, Parts:count())
{
Parts[Index,entity]:setColor(vec4(255,0,0,128))
}
}
#Unmark if told to or chip removed
if(clk("Unmark") | last())
{
for(Index = 1, Parts:count())
{
Parts[Index,entity]:setColor(PartColors[Index,vector4])
}
}
Automatic Sliding Door
# Author: Steeveeo
# Updated: November 20, 2010 @ 4:11 PM PST (-8 GMT)
# Use and Purpose:
# Put this chip in a bulkhead for an effective and smooth
# animated door that activates on [USE]. Automatically closes
# after some time if nobody is in the way. Use the inputs for
# further control.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name Use Door
@inputs Lock OpenSeconds OwnerOnly
@outputs PlayersInRange
@persist PlayOpenSound SoundOpenPlayed PlayClosedSound SoundClosedPlayed
@persist SlideUnits MaxSlide
@trigger all
@model models/SmallBridge/SEnts/sbadoors2a.mdl
#CREDITS:
#
#Writer: Steeveeo
runOnUse(1)
hide(1)
#Startup
if(first()|dupefinished())
{
entity():setAlpha(0)
entity():setSkin(9)
SlideUnits = 0
MaxSlide = 36
#Create Replacement Holos
#--Left
holoCreate(1)
holoModel(1,entity():model())
holoSkin(1,entity():getSkin())
holoMaterial(1,entity():getMaterial())
holoColor(1,entity():getColor())
holoPos(1,entity():toWorld(vec(0,-28,0)))
holoScale(1,vec(1,0.68,1))
holoParent(1,entity())
#--Right
holoCreate(2)
holoModel(2,entity():model())
holoSkin(2,entity():getSkin())
holoMaterial(2,entity():getMaterial())
holoColor(2,entity():getColor())
holoPos(2,entity():toWorld(vec(0,28,0)))
holoScale(2,vec(1,0.68,1))
holoParent(2,entity())
}
#Variable Declaration
if(OpenSeconds == 0)
{
OpenSeconds = 3
}
#Open/Close door
if(!Lock)
{
if(OwnerOnly & useClk(owner()))
{
entity():setSolid(0)
soundPurge()
soundPlay("DoorSlide", 0, "doors/doormove3.wav")
timer("ChecktoClose",OpenSeconds*1000)
timer("Open Anim",1000/MaxSlide)
}
elseif(!OwnerOnly & useClk())
{
entity():setSolid(0)
soundPurge()
soundPlay("DoorSlide", 0, "doors/doormove3.wav")
timer("ChecktoClose",OpenSeconds*1000)
timer("Open Anim",1000/MaxSlide)
}
}
if(clk("ChecktoClose"))
{
#Entity Discovery
findByClass("player")
PlayersInRange = findClipToSphere(entity():pos(), 75)
if(!PlayersInRange)
{
soundPurge()
soundPlay("DoorSlide", 0, "doors/doormove3.wav")
timer("Close Anim",1000/MaxSlide)
}
else
{
timer("ChecktoClose",1000)
}
}
#------------
# Animations
#------------
#Slide Open
if(clk("Open Anim"))
{
SlideUnits++
holoPos(1,holoEntity(1):toWorld(vec(0,-1,0)))
holoPos(2,holoEntity(2):toWorld(vec(0,1,0)))
if(SlideUnits < MaxSlide)
{
timer("Open Anim",1000/MaxSlide)
}
else
{
soundPurge()
soundPlay("DoorStop", 1, "doors/door_metal_thin_open1.wav")
}
}
#Slide Closed
if(clk("Close Anim"))
{
SlideUnits--
holoPos(1,holoEntity(1):toWorld(vec(0,1,0)))
holoPos(2,holoEntity(2):toWorld(vec(0,-1,0)))
if(SlideUnits > 0)
{
timer("Close Anim",1000/MaxSlide)
}
else
{
soundPurge()
soundPlay("DoorStop", 1, "doors/door_metal_thin_open1.wav")
entity():setSolid(1)
}
}
Toggle Use Door
# Author: Steeveeo
# Updated: July 9, 2010 @ 6:55 AM PST (-8 GMT)
# Use and Purpose:
# Give this a model with the concmd "wire_expression2_model <path>",
# then place where needed to make an effective and lagless door that
# runs on [USE]. Use inputs for further control.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name Use Door
#@model models/Slyfo/shuttlehatchclosed.mdl
@model models/SmallBridge/Ship Parts/sbengine2or.mdl
@inputs Lock OpenSeconds OwnerOnly
@outputs PlayersInRange
@persist PlayOpenSound SoundOpenPlayed PlayClosedSound SoundClosedPlayed
@trigger all
#CREDITS:
#
#Writer: Steeveeo
runOnUse(1)
hide(1)
#Variable Declaration
if(OpenSeconds == 0)
{
OpenSeconds = 2
}
#Open/Close door
if(!Lock)
{
if(OwnerOnly & useClk(owner()))
{
soundStop("DoorClosed")
entity():setAlpha(0)
entity():setSolid(0)
soundPlay("DoorOpen", 0, "doors/doormove3.wav")
timer("ChecktoClose",OpenSeconds*1000)
}
elseif(!OwnerOnly & useClk())
{
soundStop("DoorClosed")
entity():setAlpha(0)
entity():setSolid(0)
soundPlay("DoorOpen", 0, "doors/doormove3.wav")
timer("ChecktoClose",OpenSeconds*1000)
}
}
if(clk("ChecktoClose"))
{
#Entity Discovery
findByClass("player")
PlayersInRange = findClipToSphere(entity():pos(), 75)
if(!PlayersInRange)
{
soundStop("DoorOpen")
entity():setAlpha(255)
entity():setSolid(1)
soundPlay("DoorClosed", 0, "doors/door_metal_thin_open1.wav")
}
else
{
timer("ChecktoClose",1000)
}
}
Prop Direction Finder
@name Prop-Direction Finder
@inputs
@outputs
@persist Prop:entity
@trigger
#Startup
if(first())
{
if(entity():isConstrained())
{
print("Prop Detected, calculating prop's orientation.")
Prop = entity():isConstrainedTo()
#Forward
holoCreate(1)
holoModel(1,"hq_icosphere")
holoPos(1,Prop:pos()+Prop:forward()*(10+Prop:boxSize():x()))
holoColor(1,vec(255,0,0))
holoScale(1, vec(1,1,1)*(Prop:radius()/100))
holoParent(1,Prop)
Direction = holoEntity(1):pos() - Prop:pos()
#Up
holoCreate(2)
holoModel(2,"hq_icosphere")
holoPos(2,Prop:pos()+Prop:up()*(10+Prop:boxSize():z()))
holoColor(2,vec(0,255,0))
holoScale(2, vec(1,1,1)*(Prop:radius()/100))
holoParent(2,Prop)
#Right
holoCreate(3)
holoModel(3,"hq_icosphere")
holoPos(3,Prop:pos()+Prop:right()*(10+Prop:boxSize():y()))
holoColor(3,vec(0,0,255))
holoScale(3, vec(1,1,1)*(Prop:radius()/100))
holoParent(3,Prop)
print((10+Prop:boxSize():y()))
}
else
{
print("Please place on prop, not ground.")
selfDestruct()
}
}
Third-person Camera
# Author: Steeveeo
# Updated: November 19, 2010 @ 11:03 PM PST (-8 GMT)
# Use and Purpose:
# Hide this chip somewhere and say "camera: on" to change your
# view to an over-the-shoulder third-person camera. Say
# "camera: off" or undo the chip to turn this off.
#
# Note: This is also useful for if your camera gets screwed up
# by those pesky CamControllers, or if you want to learn how
# powerful the SetView function is.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name Third-Person Cam
@inputs
@outputs
@persist On
@trigger
runOnChat(1)
if(chatClk(owner()))
{
#Chat Parsing
LastSaid = lastSaid():lower()
Command = LastSaid:explode(": "):string(1)
Args = LastSaid:explode(": "):string(2):explode(", ")
if(Command == "camera")
{
if(Args[1,string] == "on")
{
if(!On)
{
On = 1
timer("Apply Camera",100)
}
else
{
print("[TPC] - Camera Already Active!")
}
}
elseif(Args[1,string] == "off")
{
On = 0
stoptimer("Death Check")
stoptimer("Respawn Check")
timer("Remove Cam",100)
}
else
{
print("Argument Not Recognized")
}
}
}
#Remove Camera
if(last()|clk("Remove Cam"))
{
owner():setView(0,vec(),ang())
}
#Set up the camera
if(clk("Apply Camera"))
{
#Camera Position
Multiplier = owner():height()/75 #Default height is 72
CamPos = owner():pos()
CamPos -= owner():forward()*(75*Multiplier*2)
CamPos += owner():up()*(75*Multiplier)
CamPos += owner():right()*(15*Multiplier)
CamAng = ((owner():pos()+vec(0,0,owner():height())) - (CamPos-owner():right()*(15*Multiplier))):toAngle()
owner():setView(1,CamPos,CamAng)
Cam = getSetViewEnt()
Cam:parentTo(owner())
timer("Death Check",100)
}
#Check for user death
if(clk("Death Check"))
{
if(changed(owner():isAlive()) & !owner():isAlive())
{
timer("Remove Cam",100)
timer("Respawn Check",100)
}
else
{
timer("Death Check",100)
}
}
#Check if respawned after death
if(clk("Respawn Check"))
{
if(owner():isAlive())
{
timer("Apply Camera",100)
}
else
{
timer("Respawn Check",100)
}
}
Holo Propeller Controller
# Author: Steeveeo
# Updated: Jan 29, 2011 @ 12:17 AM PST (-8 GMT)
# Use and Purpose:
# This chip uses holoModel to create lagless spinning fans
# for helicopters, planes, steampunk airships, and anything in
# between. First, place all of your fans on your ship by welding
# them where you want them (don't bother axising, just weld).
# Then take an Advanced Entity Marker and hook in all of your
# fans. Wire up accordingly.
#
# Inputs work in the following manner:
# Fans [ARRAY] - Advanced Ent Marker holding all your fans
# SpeedAll - Base Speed for all fans (added to
# FanSpeed[Index,number]).
#
# Outputs:
# Channel [STRING] - This is the name of the gTable that controls
# individual fan speed. I would do this over a
# normal wire, but arrays just don't work in
# that medium. Speed index == Fan index.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name HoloPropeller Controller
@inputs Fans:array SpeedAll
@outputs Channel:string
@persist FanSpeed:gtable SetupStep
@trigger
runOnLast(1)
#Startup
if(first()|dupefinished()|changed(Fans:count()))
{
#Remove existing holos
holoDeleteAll()
Channel = "HoloPropeller_" + entity():toString()
FanSpeed = gTable(Channel,0)
#Create Propellers
SetupStep = 1
timer("Fan Setup",100)
timer("Rotate",25)
}
#Build all fans
if(clk("Fan Setup"))
{
#Loop through and create replacement holos
Fan = Fans[SetupStep,entity]
#Find parent of the fan, if any, so we know what to
#stick the holo on.
if(Fan:parent())
{
Parent = Fan:parent()
}
else
{
Parent = Fan
}
holoCreate(SetupStep)
holoModel(SetupStep,Fan:model())
holoMaterial(SetupStep,Fan:getMaterial())
holoColor(SetupStep,Fan:getColor())
holoAng(SetupStep,Fan:angles())
holoPos(SetupStep,Fan:pos())
holoParent(SetupStep,Parent)
holoShadow(SetupStep,1)
Fan:setAlpha(0)
#Next Pass
SetupStep++
if(SetupStep <= Fans:count())
{
timer("Fan Setup",100)
}
}
#Shutdown
if(last())
{
#Restore all prop fans
for(Index = 1, Fans:count())
{
Fan = Fans[Index,entity]
Fan:setAlpha(255)
}
}
#Spin the fan
if(clk("Rotate"))
{
for(Index = 1, Fans:count())
{
Speed = FanSpeed[Index,number]
holoAng(Index,holoEntity(Index):toWorld(ang(0,0,Speed*SpeedAll)))
}
timer("Rotate",25)
}
Atmospheric Probe
# Author: Steeveeo
# Updated: May 2, 2010 @ 5:37 AM PST (-8 GMT)
# Use and Purpose:
# This chip can be placed anywhere and will output and display
# the current atmospheric stats.
# Fair Use and Legality:
# This chip is provided as is and is designed to work only
# as instructed. This is provided under Creative Commons and
# may be modified and/or shared with anyone as long as proper
# credit is given to the original author (Steeveeo). Failure to
# give credit by plagiarising or removing this header is subject
# to administrative punishment.
@name Atmospheric Probe
@inputs
@outputs Name:string Size:string Gravity Temperature O2Percent O2Volume CO2Percent CO2Volume NitroPercent NitroVolume HydroPercent HydroVolume Vacuum Volume UnUsedVolume
@persist OverlayText:string
@trigger
interval(5000)
#Startup
if(first())
{
OverlayText = ""
timer("Startup",500)
}
#Problems with duping, reset chip
if(duped())
{
reset()
}
#Compile Atmosphere Data
if(clk()|clk("Startup"))
{
soundStop("Active")
#Ping if in a viable atmosphere
if(Name & Name != "Space")
{
soundPlay("Active", 0.5, "RD/pump/beep-3.wav",0.75) #Accidental Sonar effect FTW!
}
#Else Warn
else
{
soundPlay("Active", 0.5, "buttons/blip2.wav")
}
#Check if real atmo or climate reg.
if(entity():lsName() == "No Name")
{
Name = "Regulated Climate"
}
else
{
Name = entity():lsName()
}
#If an atmosphere is detected, read it (and don't redbrick in space).
if(Name & Name != "Space")
{
Size = entity():lsSize():toString() + " units"
Temperature = entity():lsTemperature()
Gravity = entity():lsGravity()
O2Percent = entity():lsO2Percent()
O2Volume = entity():lsO2Amount()
CO2Percent = entity():lsCO2Percent()
CO2Volume = entity():lsCO2Amount()
NitroPercent = entity():lsNPercent()
NitroVolume = entity():lsNAmount()
HydroPercent = entity():lsHPercent()
HydroVolume = entity():lsHAmount()
Vacuum = entity():lsEmptyAirPercent()
Volume = entity():lsVolume()
UnUsedVolume = entity():lsEmptyAirAmount()
}
else
{
Size = "Undetectable"
Temperature = entity():lsTemperature()
Gravity = 0
O2Percent = 0
O2Volume = 0
CO2Percent = 0
CO2Volume = 0
NitroPercent = 0
NitroVolume = 0
HydroPercent = 0
HydroVolume = 0
Vacuum = 100
UnUsedVolume = 0
}
#Overlay Text (Tooltip)
OverlayText = "- " + Name + " -\n"
OverlayText += "Size: " + Size + "\n"
OverlayText += "Temperature: " + round(Temperature*100)/100 + "K\n"
OverlayText += "Gravity: " + round(Gravity*100)/100 + "\n"
OverlayText += "Oxygen: " + round(O2Percent*100)/100 + "% (" + round(O2Volume) + ")\n"
OverlayText += "Carbon Dioxide: " + round(CO2Percent*100)/100 + "% (" + round(CO2Volume) + ")\n"
OverlayText += "Nitrogen: " + round(NitroPercent*100)/100 + "% (" + round(NitroVolume) + ")\n"
OverlayText += "Hydrogen: " + round(HydroPercent*100)/100 + "% (" + round(HydroVolume) + ")\n"
OverlayText += "Vacuum: " + round(Vacuum*100)/100 + "% (" + round(UnUsedVolume) + ")"
setName(OverlayText)
}
#if(first()|clk("Overlay"))
#{
# #Set Tooltip
# entity():setOverlayText(OverlayText)
# timer("Overlay",10)
#}
This is a block of text that can be added to posts you make. There is a 255 character limit.
Lλmbdλ: donations for coding the space future of diaspora :>
Get your extra long EVE trial here!
Lλmbdλ: donations for coding the space future of diaspora :>
Get your extra long EVE trial here!

Comments