Space Combat 2 - Scoreboard e2
Special thanks to Zombie who created the e2 extensions for getting the Ship Core Stats. I made this as a sample e2 on how to use the new functions. I think I have included them all in this example.
Setup:
Place an EGP v3 screen, hud, or emitter
Place the E2 chip
Wiring:Wire the EGP[wirelink] from the e2 chip to the wirelink of the EGP v3
I think you will probably have to reload the chip (update) once wiring is complete to clear the screen. If you are using a EGPv3 HUD or Emitter, you will need to press your Use key on it to activate it.
Chat Commands:
!1 <playername> to set player 1 also accepts !player1
!2 <playername> to set player 2 also accepts !player2
!battle or !engage to set the chip to auto-update every second. !battle or !engage again to stop auto-update. The EGPv3 will be black if not auto-updating, red if it is.
@name SC2_Scoreboard
@inputs EGP:wirelink
@outputs
@persist [Player1 Player2]:table Engage
@trigger
if (first()) {
Engage = 0
EGP:egpClear()
EGP:egpBox(2,vec2(250,250),vec2(510,510))
EGP:egpColor(2,vec(0,0,0))
EGP:egpResolution(vec2(0,0), vec2(500,500))
EGP:egpText(200,"PLAYER 1",vec2(50,20))
EGP:egpText(225,"PLAYER 2",vec2(300,20))
EGP:egpLine(275,vec2(250,0),vec2(250,500))
EGP:egpLine(276,vec2(0,40),vec2(500,40))
runOnChat(1)
interval(500)
function entity getPlayerCore(Player:entity) {
# print(Player:name())
# find ship core(s) of Player
findClearWhiteList()
findIncludePlayerProps(Player)
ShipCores = findByClass("ship_core*")
# print("# Ship Cores after find: " + ShipCores)
if (ShipCores > 0) {
Player["ShipCore",entity] = findResult(1)
return Player["ShipCore",entity]
}
}
function getPlayerCoreInfo(Ply:table) {
if (Ply["PlayerNumber",number] == 1 | Ply["PlayerNumber",number] == 2) {
if (!Ply["ShipCore",entity]:isValid()) {
ShipCore = getPlayerCore(Ply["Entity",entity])
} else {
ShipCore = Ply["ShipCore",entity]
}
K=201 + (25 * (Ply["PlayerNumber",number]-1))
X=20 + (250 * (Ply["PlayerNumber",number]-1))
Y=60
EGP:egpText(K, "Type: " + ShipCore:getCoreType(),vec2(X,Y))
K++
EGP:egpText(K, "Name: " + ShipCore:getCoreName(),vec2(X,Y+25))
K++
EGP:egpText(K, "Shield: " + floor(ShipCore:getCoreShield()*100/ShipCore:getCoreMaxShield())+"%", vec2(X,Y+75))
K++
EGP:egpText(K, floor(ShipCore:getCoreShield()) + " of " + ShipCore:getCoreMaxShield() ,vec2(X,Y+100))
K++
EGP:egpText(K, "Armor: " + floor(ShipCore:getCoreArmor() *100/ShipCore:getCoreMaxArmor() )+"%",vec2(X,Y+150))
K++
EGP:egpText(K, floor(ShipCore:getCoreArmor()) + " of " + ShipCore:getCoreMaxArmor() ,vec2(X,Y+175))
K++
EGP:egpText(K, "Hull: " + floor(ShipCore:getCoreHull() *100/ShipCore:getCoreMaxHull() )+"%",vec2(X,Y+225))
K++
EGP:egpText(K, floor(ShipCore:getCoreHull()) + " of " + ShipCore:getCoreMaxHull() ,vec2(X,Y+250))
K++
EGP:egpText(K, "Cap: " + floor(ShipCore:getCoreCap() *100/ShipCore:getCoreMaxCap() )+"%",vec2(X,Y+300))
K++
EGP:egpText(K, floor(ShipCore:getCoreCap()) + " of " + ShipCore:getCoreMaxCap() ,vec2(X,Y+325))
} else {
hint("[Fn: getPlayerCoreInfo] Invalid", 15)
}
}
}
if (chatClk(owner())) {
LastSaid = owner():lastSaid():lower():explode(" ")
#LastSaid = owner():lastSaid():explode(" ")
Arg1 = LastSaid[1,string]
Arg2 = LastSaid[2,string]
if (Arg1[1] == "!") {
hideChat(1)
}
# Chat commands
if (Arg1 == "!player1" | Arg1 == "!1") {
Ply1 = findPlayerByName(Arg2)
hint("Player 1: " + Ply1:name(), 5)
if (Ply1) {
Player1["Entity", entity] = Ply1
Player1["PlayerNumber", number] = 1
Player1["ShipCore",entity] = noentity()
EGP:egpText(200,Ply1:name(), vec2(50,20))
}
getPlayerCoreInfo(Player1)
}
if (Arg1 == "!player2" | Arg1 == "!2") {
Ply2 = findPlayerByName(Arg2)
hint("Player 2: " + Ply2:name(), 5)
if (Ply2) {
Player2["Entity", entity] = Ply2
Player2["PlayerNumber", number] = 2
Player2["ShipCore",entity] = noentity()
EGP:egpText(225,Ply2:name(), vec2(300,20))
}
getPlayerCoreInfo(Player2)
}
if (Arg1 == "!engage" | Arg1 == "!battle") {
Engage = !Engage
if(Engage) {
EGP:egpColor(2,vec4(255,0,0,128))
timer("AutoUpdate",100)
} else {
EGP:egpColor(2,vec4(0,0,0,255))
}
}
}
if(clk("AutoUpdate")) {
if (Engage) {
getPlayerCoreInfo(Player1)
getPlayerCoreInfo(Player2)
timer("AutoUpdate",500)
} else {
stoptimer("AutoUpddate")
}
}
As a HUD element:
As a screen: