so, this version should throw a few less errors ^^
"Server" Scripting.tbl
#Global Hooks
$HUD:[
]
#End
#Conditional Hooks
$Application: FS2_Open
$State: GS_STATE_GAME_PLAY
$On Key Pressed: [
taste=hv.Key
doenergychange=function(wertA,wertB,wertC,aktion)
if aktion<0 then
emani=math.min(wertA,2)
else--if aktion==2 then
emani=math.min(12-wertA,2)
end
local change=(emani/2*aktion*-1)
local cA=emani*aktion
local cB=change
local cC=change
local rest=0
if (wertB+change)>12 then
rest=12-(wertB+change)
cB=change-rest
cC=change+rest
elseif (wertC+change)>12 then
rest=12-(wertC+change)
cC=change-rest
cB=change+rest
elseif (wertB+change)<0 then
rest=(wertB+change)
cB=change-rest
cC=change+rest
elseif (wertC+change)<0 then
rest=(wertC+change)
cC=change-rest
cB=change+rest
end
return cA,cB,cC
end
energyverwaltung=function(ve,vs,vg)
local e=0
local s=0
local g=0
if ve~=0 then
e,s,g=doenergychange(e_nrg,s_nrg,g_nrg,ve)
elseif vs~=0 then
s,e,g=doenergychange(s_nrg,e_nrg,g_nrg,vs)
elseif vg~=0 then
g,e,s=doenergychange(g_nrg,e_nrg,s_nrg,vg)
end
e_nrg=e_nrg+e
s_nrg=s_nrg+s
g_nrg=g_nrg+g
end
if hv.Key=='Page Down' then
energyverwaltung(-1,0,0)
elseif hv.Key=='Page Up' then
energyverwaltung(1,0,0)
elseif hv.Key=='End' then
energyverwaltung(0,-1,0)
elseif hv.Key=='Home' then
energyverwaltung(0,1,0)
elseif hv.Key=='Delete' then
energyverwaltung(0,0,-1)
elseif hv.Key=='Insert' then
energyverwaltung(0,0,1)
end
]
$On State Start:
[
taste=""
--clr=require("CLRPackage")
--import "Microsoft.VisualBasic"
--import "System.Windows.Forms"
timestamp = 0
socket=require("socket")
sendinginterval=0.02--alle so viele Sekunden werden Spielinfos verschickt
udp=socket.udp()
udp:settimeout(0)
-- connect to UDP server
--ip auflösen evtl host = socket.dns.toip("Computername, zB Cerberos")
udp:setpeername ("192.168.0.8",14285)
--energie verteilung beim starten einer mission
e_nrg=4
s_nrg=4
g_nrg=4
]
$On Frame:
[
if mn.getMissionTime() > timestamp then
timestamp = mn.getMissionTime() + sendinginterval
ship = mn.Ships["Alpha 1"]
plr = hv.Player
-- only continue if we can get valid player handle
if plr:isValid() and ship:isValid() then
shipinfo={}
--schiffstyp
table.insert(shipinfo,ship.Class.Name)
--speed
table.insert(shipinfo,math.floor(plr.Physics.Velocity:getMagnitude()))
--life/damage aka hull integrity in %
table.insert(shipinfo,math.floor(100/ship.HitpointsMax*ship.HitpointsLeft))
--countermeasures aka flares
table.insert(shipinfo,ship.CountermeasuresLeft..":|:"..ship.Class.CountermeasuresMax)
--nachbrennerenergie in %
table.insert(shipinfo,math.floor(100/ship.AfterburnerFuelMax*ship.AfterburnerFuelLeft).."%")
--schilde insgesamt / 1=rechts / 2=vorne / 3=hinten / 4=links
table.insert(shipinfo,math.floor(100/plr.Shields.CombinedMax*plr.Shields.CombinedLeft)..":|:"..math.floor(plr.Shields[1])..":|:"..math.floor(plr.Shields[2])..":|:"..math.floor(plr.Shields[3])..":|:"..math.floor(plr.Shields[4]))
--energie management
table.insert(shipinfo,g_nrg..":|:"..s_nrg..":|:"..e_nrg)
--waffen energie in %
local wepeng=math.floor((ship.WeaponEnergyLeft/ship.WeaponEnergyMax)*100)
table.insert(shipinfo,wepeng)
-------gun ammo
local guninfo={}
local missleinfo={}
local primarydual=hv.Player.PrimaryBanks.Linked
local secondyrydual=hv.Player.SecondaryBanks.DualFire
if secondyrydual then secondyrydual="1"
else secondyrydual="0" end
for i = 1, 3, 1 do
if ship.PrimaryBanks[i]:isValid() then
local warmed="0"
----primarys with ammo: Gattler, Archer, UX Accelerator, Redeemer, Vajra
if ship.PrimaryBanks[i].Armed or primarydual then warmed="1" end
if ship.PrimaryBanks[i].AmmoMax>0 then
table.insert(guninfo,ship.PrimaryBanks[i].WeaponClass.Name..":_:"..warmed..":_:"..ship.PrimaryBanks[i].AmmoLeft..":_:"..ship.PrimaryBanks[i].AmmoMax..":_:".."0")
else
table.insert(guninfo,ship.PrimaryBanks[i].WeaponClass.Name..":_:"..warmed..":_:"..wepeng.."%:_:100%:_:0")
end
end
end
-------missile ammo
for i = 1, 4, 1 do
if ship.SecondaryBanks[i]:isValid() then
local warmed="0"
if ship.SecondaryBanks[i].Armed then warmed="1" end
table.insert(missleinfo,ship.SecondaryBanks[i].WeaponClass.Name..":_:"..warmed..":_:"..ship.SecondaryBanks[i].AmmoLeft..":_:"..ship.SecondaryBanks[i].AmmoMax..":_:"..secondyrydual)
end
end
for i = 1, 4, 1 do
if ship.TertiaryBanks[i]:isValid() then
local warmed="0"
if ship.TertiaryBanks[i].Armed then warmed="1" end
table.insert(missleinfo,ship.TertiaryBanks[i].WeaponClass.Name..":_:"..warmed..":_:"..ship.TertiaryBanks[i].AmmoLeft..":_:"..ship.TertiaryBanks[i].AmmoMax":_:".."0")
end
end
table.insert(shipinfo,table.concat(guninfo,":|:"))
table.insert(shipinfo,table.concat(missleinfo,":|:"))
local damageerror={}
local plrship = mn.getObjectFromSignature(plr:getSignature())
if ship.HitpointsMax~=ship.HitpointsLeft then
table.insert(damageerror,"Hull ["..math.floor(100/ship.HitpointsMax*ship.HitpointsLeft).."%]")
end
for i = 1, #plrship, 1 do
if plrship[i].HitpointsMax~=plrship[i].HitpointsLeft then
table.insert(damageerror,plrship[i].Name.." ["..math.floor(100/plrship[i].HitpointsMax*plrship[i].HitpointsLeft).."%]")
end
end
table.insert(shipinfo,table.concat(damageerror,":|:"))
--target information START
targetinfo={}
if plr.Target:isValid() then
local targetdistance=plr.Target.Position:getDistance(plr.Position)
if lasttargetdistance==nil or targetdistance==lasttargetdistance then
distpm=""
elseif targetdistance>lasttargetdistance then
distpm="+"
else
distpm="-"
end
lasttargetdistance=targetdistance
local targetdistance=math.floor(targetdistance)
local targetspeed = plr.Target.Physics.Velocity:getMagnitude()
if lasttargetspeed==nil or targetspeed==lasttargetspeed then
sistpm=""
elseif targetspeed>lasttargetspeed then
sistpm="+"
else
sistpm="-"
end
lasttargetspeed=targetspeed
local targetspeed=math.floor(targetspeed)
if plr.Target:getBreedName()=='Ship' then
local shipClassIndex=plr.Target.Class:getShipClassIndex()
local targetdcm = math.floor(100/plr.Target.HitpointsMax*plr.Target.HitpointsLeft)
table.insert(targetinfo,plr.Target.Team.Name)
table.insert(targetinfo,plr.Target.Name)
table.insert(targetinfo,plr.Target.Class.Name)
table.insert(targetinfo,targetdistance..distpm)
table.insert(targetinfo,targetspeed..sistpm)
table.insert(targetinfo,targetdcm)
table.insert(targetinfo, shipClassIndex)
if plr.Target.Shields.CombinedMax~=0 then
table.insert(targetinfo,math.floor(100/plr.Target.Shields.CombinedMax*plr.Target.Shields.CombinedLeft)..":|:"..math.floor(plr.Target.Shields[1])..":|:"..math.floor(plr.Target.Shields[2])..":|:"..math.floor(plr.Target.Shields[3])..":|:"..math.floor(plr.Target.Shields[4]))
else
table.insert(targetinfo,"")
end
else
table.insert(targetinfo,"-")
table.insert(targetinfo,"-")
table.insert(targetinfo,plr.Target:getBreedName())
table.insert(targetinfo,targetdistance..distpm)
table.insert(targetinfo,targetspeed..sistpm)
table.insert(targetinfo,"-")
table.insert(targetinfo,"-")
table.insert(targetinfo,"")
end
local torientation=(plr.Target.Position-plr.Position)
table.insert(targetinfo,table.concat({-torientation.x,-torientation.y,torientation.z},":|:"))
end
--target information END
--radar START
radarinfo={}
local stv--zum zwischenspeichern des targets
if mn.Debris ~= nil then
for i= 1,#mn.Debris do
if mn.Debris[i]:isValid() then
--transform vector and get length
local tpos = plr.Orientation:rotateVector(mn.Debris[i].Position - plr.Position)
if plr.Target == mn.Debris[i] then --target zwischenspeichern
stv = {"a",tpos.x,tpos.z,tpos.y,tpos:getMagnitude(),"1"}
else
local tmpradarblip={"d",tpos.x,tpos.z,tpos.y,tpos:getMagnitude(),"0","Debris"}
table.insert(radarinfo,table.concat(tmpradarblip,":|:"))
end
end
end
end
if mn.Asteroids ~= nil then
for i= 1,#mn.Asteroids do
if mn.Asteroids[i]:isValid() then
--transform vector and get length
local tpos = plr.Orientation:rotateVector(mn.Asteroids[i].Position - plr.Position)
if plr.Target == mn.Asteroids[i] then --target zwischenspeichern
stv = {"d",tpos.x,tpos.z,tpos.y,tpos:getMagnitude(),"1"}
else
local tmpradarblip={"a",tpos.x,tpos.z,tpos.y,tpos:getMagnitude(),"0","Asteroid"}
table.insert(radarinfo,table.concat(tmpradarblip,":|:"))
end
end
end
end
if mn.Ships ~= nil then
for i= 1,#mn.Ships do
if mn.Ships[i]:isValid() and mn.Ships[i] ~= plr then
--transform vector and get length
local tpos = plr.Orientation:rotateVector(mn.Ships[i].Position - plr.Position)
local iswrp="0"
if mn.Ships[i]:isWarpingIn() then local iswrp="1" end
local smass=math.floor(tb.ShipClasses[(mn.Ships[i].Class:getShipClassIndex()+1)].Model.Mass)
if plr.Target == mn.Ships[i] then --target zwischenspeichern
stv = {"s",tpos.x,tpos.z,tpos.y,tpos:getMagnitude(),"1",mn.Ships[i].Name,mn.Ships[i].Team.Name,mn.Ships[i].Class.Name,iswrp,math.floor(100/mn.Ships[i].HitpointsMax*mn.Ships[i].HitpointsLeft),smass}
else
local tmpradarblip={"s",tpos.x,tpos.z,tpos.y,tpos:getMagnitude(),"0",mn.Ships[i].Name,mn.Ships[i].Team.Name,mn.Ships[i].Class.Name,iswrp,math.floor(100/mn.Ships[i].HitpointsMax*mn.Ships[i].HitpointsLeft),smass}
table.insert(radarinfo,table.concat(tmpradarblip,":|:"))
end
end
end
end
if stv then
table.insert(radarinfo,table.concat(stv,":|:"))
end
--radar ENDE
local wingmeninfo={}
for i= 1,#mn.Wings do
local tmpsqdrinfo={}
for ii= 1,#mn.Wings[i] do
table.insert(tmpsqdrinfo,mn.Wings[i][ii].Name.." ["..math.floor(100/mn.Wings[i][ii].HitpointsMax*mn.Wings[i][ii].HitpointsLeft).."]")
end
table.insert(wingmeninfo,table.concat(tmpsqdrinfo,":|:"))
end
--das senden wir zum client
local clientstring=table.concat({table.concat(shipinfo,":||:"),table.concat(targetinfo,":||:"),table.concat(radarinfo,":||:"),table.concat(wingmeninfo,":||:")},":|||:")
--udp:sendto(clientstring, ip, destport)
udp:send(clientstring)
--if plr.Target:isValid() and plr.Target.Team.Name=='Friendly' then
--local file = cf.openFile('C:\\Games\\FreeSpace2\\data\\tables\\testclientstring.txt','w')
--file:write(clientstring)
--file:close()
--ba.error('testclientstring gespeichert')
--end
end
end
]
$On State End:
[
--den bildschirm clearen
udp:send(":|||::|||::|||:")
]
#END
"Client" Scripting.tbl
#Global hooks
$Splash: [
--gr.setColor(255,0,255,255)
--gr.drawRectangle(10,10,500,500,true)--hintergrund
]
+Override: true
#End
#Conditional Hooks
$Application: FS2_Open
$State: GS_STATE_INITIAL_PLAYER_SELECT
$On State Start:
[
radar_range = 3500
lastclienstring = ":|||::|||::|||::|||:"
socket=require("socket")
udp = socket.udp()
udp:settimeout(0)
-- bind UDP to all local interfaces
udp:setsockname("*",14285)
]
$State: GS_STATE_INITIAL_PLAYER_SELECT
$On Frame:
[
--config############################################################ START
--base color
baseR,baseG,baseB=50,250,50--R,G,B
--radar position
radarX,radarY,radarR=450,10,370--X,Y,Radius
showscanline=false--radar scannline
--target infobox position
targetX,targetY=10,10--X,Y
--player ship infobox position
shipinfoX,shipinfoY=10,300--X,Y
--monitor/wingmen infobox position
monitorX,monitorY=10,605--X,Y
--config############################################################ END
local clientstring=lastclienstring
function nicebox(posX,posY,width,height,title,textcontent)
local textcontent = textcontent or {{}}
gr.setColor(baseR,baseG,baseB,150)
local cornercut=7
gr.drawLine(posX,posY,(posX+width)-cornercut,posY)
gr.drawLine(posX,posY,posX,(posY+height))
gr.drawLine(posX,(posY+height),(posX+width),(posY+height))
gr.drawLine((posX+width),posY+cornercut,(posX+width),(posY+height))
gr.drawLine((posX+width)-cornercut,posY,(posX+width),posY+cornercut)
gr.drawRectangle(posX+1,posY,(posX+gr.getStringWidth(title)+4),(posY+9),true)
gr.drawLine((posX+gr.getStringWidth(title)+4),posY+9,posX+(gr.getStringWidth(title)+4)+9,posY)
gr.setColor(0,0,0,255)
gr.drawString(title,posX+2,posY)
local prevcolwidesttext=0
local widesttext=0
local maxrows=0
gr.setColor(baseR,baseG,baseB,255)
for colnr,colcont in pairs(textcontent) do
for rownr,rowcont in pairs(textcontent[colnr]) do
gr.drawString(textcontent[colnr][rownr],(posX+4+(prevcolwidesttext)),(posY+2+(rownr*11)))
if gr.getStringWidth(textcontent[colnr][rownr])>widesttext then widesttext=gr.getStringWidth(textcontent[colnr][rownr]) end
end
if table.getn(textcontent[colnr])>maxrows then maxrows=table.getn(textcontent[colnr]) end
prevcolwidesttext=prevcolwidesttext+widesttext+5
widesttext=0
end
--if prevcolwidesttext>width then ba.error('Text in Box \''..title..'\' to wide (Need: '..prevcolwidesttext..' Px / Have: '..width..' Px)') end
--if ((maxrows+1)*11)>height then ba.error('Text in Box \''..title..'\' to short (Need: '..((maxrows+1)*11)..' Px / Have: '..height..' Px)') end
end
function update()
-- receive incoming data from server
while true do
local new_clientstring,ip,port=udp:receivefrom()
if new_clientstring == nil then
break
end
clientstring=new_clientstring
end
--test clientstring
--clientstring='GTF Myrmidon:||:75:||:100:||:36:|:36:||:100%:||:99:|:97:|:97:|:97:|:97:||:4:|:4:|:4:||:100:||:Subach HL-7:_:1:_:100%:_:100%:_:0:|:Subach HL-7:_:0:_:100%:_:100%:_:0:||:Rockeye:_:1:_:5:_:5:_:0:|:Rockeye:_:0:_:5:_:5:_:0:|:Tempest:_:0:_:160:_:160:_:0:||:Hull [100%]:|:sensors [100%]:|:communications [100%]:|:weapons [100%]:|:navigation [100%]:|:engine [100%]:|||:Friendly:||:Alpha 2:||:GTF Myrmidon:||:218-:||:63+:||:100:||:8:||:99:|:97:|:97:|:97:|:97:||:-12.108276367188:|:16.492980957031:|:-217.509765625:|||:s:|:-271.84191894531:|:5833.3994140625:|:-624.83575439453:|:5873.0625:|:0:|:Iceni:|:Neutral:|:NTF Iceni:|:0:|:69:|:488051:||:s:|:144.70185852051:|:-220.74002075195:|:-17.712619781494:|:264.53454589844:|:0:|:Alpha 3:|:Friendly:|:GTF Myrmidon:|:0:|:100:|:210:||:s:|:236.2311706543:|:213.39468383789:|:-128.48809814453:|:343.29528808594:|:0:|:Beta 1:|:Friendly:|:GTF Myrmidon:|:0:|:100:|:210:||:s:|:167.96406555176:|:148.53744506836:|:-126.40850067139:|:257.39932250977:|:0:|:Beta 2:|:Friendly:|:GTF Myrmidon:|:0:|:100:|:210:||:s:|:321.30990600586:|:136.66542053223:|:-93.947769165039:|:361.58493041992:|:0:|:Beta 3:|:Friendly:|:GTF Myrmidon:|:0:|:100:|:210:||:s:|:15.988680839539:|:-217.23811340332:|:-16.766021728516:|:218.46998596191:|:1:|:Alpha 2:|:Friendly:|:GTF Myrmidon:|:0:|:100:|:210:|||:Alpha 1 [100]:|:Alpha 2 [100]:|:Alpha 3 [100]:||::||::||::||::||:Beta 1 [100]:|:Beta 2 [100]:|:Beta 3 [100]:||:'
lastclienstring=clientstring
local tmpinfogroups=clientstring:split(":|||:")
inf={}
for kii,wii in pairs(tmpinfogroups) do
for kyy,wyy in pairs(wii:split(":||:")) do
if inf[kii]==nil then inf[kii]={} end
if inf[kii][kyy]==nil then inf[kii][kyy]={} end
table.insert(inf[kii][kyy],wyy:split(":|:"))
inf[kii][kyy]=wyy:split(":|:")
end
end
drawradar(inf[3],radarX,radarY,radarR)
drawtargetinfo(inf[2],targetX,targetY)
drawshipinfo(inf[1],shipinfoX,shipinfoY)
drawmonitor(inf[4],monitorX,monitorY)
end
drawradar = function (radinf,posX,posY,radarradius)
local rs = radarradius * 0.85, radarradius * 0.08
--mal 1.2 wegen dem deco rand des radars
local sc = rs/(radar_range*1.2)
gr.setColor(0,0,0,255)
gr.drawRectangle(posX,posY,posX+(radarradius*2),posY+(radarradius*2)+100,true)--hintergrund
--die datei befindet (bzw sollte) sich in "\data\interface\" und heisst "radar_bg.tga"
radarbg = gr.loadTexture("radar_bg")
--if gr.drawImage(radarbg,posX,posY,posX+(radarradius*2),posY+(radarradius*2))==false then
--hübscher radar hintergrund konnte nicht gezeichnet werden, also zeichnen wir einfach einen kreis
gr.setColor(baseR,baseG,baseB,255)
gr.drawCircle(radarradius,posX+radarradius,posY+radarradius)
gr.setColor(0,0,0,255)
gr.drawCircle(radarradius-2,posX+radarradius,posY+radarradius)
--end
radarbg:unload()
if sweeppos==nil or sweeppos>200 then sweeppos=0 end
local tmpswp=(sweeppos+150);
if tmpswp>200 then tmpswp=tmpswp-200 end
local cswpos=math.pi*(2-(tmpswp/100))
if showscanline then
--den führenden sweep linie zeichnen
gr.setColor(baseR,baseG,baseB,125)
local sclnx=(posX+radarradius)+((radarradius/100*78)*math.sin(cswpos));
local sclny=(posY+radarradius)+((radarradius/100*78)*math.cos(cswpos));
gr.drawLine((posX+radarradius),(posY+radarradius),sclnx,sclny)
--den schwanz der sweep linie zeichen
for sw = 1, 150, 0.2 do
local tmpswp=(sweeppos+sw);
if tmpswp>200 then tmpswp=tmpswp-200 end
local swpos=math.pi*(2-(tmpswp/100))
gr.setColor(baseR,baseG,baseB,math.floor(50/150*sw))
local sclnx=(posX+radarradius)+((radarradius/100*78)*math.sin(swpos));
local sclny=(posY+radarradius)+((radarradius/100*78)*math.cos(swpos));
gr.drawLine((posX+radarradius),(posY+radarradius),sclnx,sclny)
end
end
sweeppos=sweeppos+1
--die radarobjekte zeichnen
local anzhost=0
local anzfrndl=0
local anzunkn=0
for kii,wii in pairs(radinf) do
--daten sind ok und blip ist innerhalb der radar range
if table.getn(wii)>1 and radar_range>math.floor(wii[5]) then
local xkoord = (wii[2]*sc)
local ykoord = -(wii[3]*sc)
local bxkoord = posX+radarradius+xkoord-13
local bykoord = posY+radarradius+ykoord-13
local abstand2d=math.sqrt(math.pow(math.abs(ykoord),2)+math.pow(math.abs(xkoord),2))
if xkoord<0 then
zwinkel=(math.pi*2)-math.acos(ykoord/abstand2d)
else
zwinkel=math.acos(ykoord/abstand2d)
end
if wii[6]=="1" then calpha=255
else calpha=125 end
local R,G,B,A
if wii[10] and wii[10]==1 then
R,G,B,A = 50,50,255,calpha
anzunkn=anzunkn+1
elseif wii[8] == "Hostile" or wii[8] == "Traitor" or wii[8] == "Neutral" then
R,G,B,A = 255,0,0,calpha
anzhost=anzhost+1
elseif wii[8] == "Friendly" then
R,G,B,A = 0,255,0,calpha
anzfrndl=anzfrndl+1
elseif wii[8] == "Unknown" then
R,G,B,A = 255,0,255,calpha
anzunkn=anzunkn+1
elseif wii[8] == "Asteroid" then
R,G,B,A = 155,155,155,calpha
anzunkn=anzunkn+1
else
R,G,B,A = 128,128,128,calpha
anzunkn=anzunkn+1
end
gr.setColor(R,G,B,A)
if wii[6]=="1" then
--falls es das target ist, dann durchgezogene umrandung
gr.drawRectangle(bxkoord,bykoord,bxkoord+26,bykoord+26,false)--umrandung
else
--nur ein normales radar objekt, kein target
--ecke oben links
gr.drawLine(bxkoord,bykoord,bxkoord+8,bykoord)
gr.drawLine(bxkoord,bykoord,bxkoord,bykoord+8)
--ecke oben rechts
gr.drawLine(bxkoord+17,bykoord,bxkoord+25,bykoord)
gr.drawLine(bxkoord+25,bykoord,bxkoord+25,bykoord+8)
--ecke unten links
gr.drawLine(bxkoord,bykoord+25,bxkoord+8,bykoord+25)
gr.drawLine(bxkoord,bykoord+17,bxkoord,bykoord+25)
--ecke unten rechts
gr.drawLine(bxkoord+25,bykoord+25,bxkoord+17,bykoord+25)
gr.drawLine(bxkoord+25,bykoord+17,bxkoord+25,bykoord+25)
end
gr.drawString(math.floor(wii[5]),bxkoord,bykoord-10)--entfernung
if wii[1]=="s" then
local textlaenge=math.ceil(math.max(string.len(wii[7]),string.len(wii[9]))*8.6)
gr.drawLine(bxkoord+26,bykoord+13,bxkoord+26+textlaenge,bykoord+13)--texttrennlinie horizontal
if wii[6]=="1" then
gr.drawString(math.floor(math.abs(wii[4])),bxkoord+30+textlaenge,bykoord+10)--steigung
if math.floor(wii[4]) > 40 then
gr.drawLine(bxkoord+30+textlaenge,bykoord+8,bxkoord+30+textlaenge+20,bykoord+8)
gr.drawLine(bxkoord+30+textlaenge,bykoord+8,bxkoord+30+textlaenge+10,bykoord-2)
gr.drawLine(bxkoord+40+textlaenge,bykoord-2,bxkoord+30+textlaenge+20,bykoord+8)
elseif math.ceil(wii[4]) < -40 then
gr.drawLine(bxkoord+30+textlaenge,bykoord+20,bxkoord+30+textlaenge+20,bykoord+20)
gr.drawLine(bxkoord+30+textlaenge,bykoord+20,bxkoord+30+textlaenge+10,bykoord+30)
gr.drawLine(bxkoord+30+textlaenge+10,bykoord+30,bxkoord+30+textlaenge+20,bykoord+20)
end
end
gr.drawString(wii[7],bxkoord+30,bykoord+2)--schiffname
gr.drawString(wii[9],bxkoord+30,bykoord+18)--schiffklasse
end
local blipalpha=100
if zwinkel then
local blipfade
if zwinkel>cswpos then
blipfade=(math.pi*20)+math.floor(cswpos*10)-math.floor(zwinkel*10)
else
blipfade=math.floor(cswpos*10)-math.floor(zwinkel*10)
end
blipalpha=40+(140/62.82*blipfade)
end
local blibbradius=5
local smass=tonumber(wii[12])
if smass~=nil then
if smass>400000 then blibbradius=10
elseif smass>100000 then blibbradius=8
elseif smass>40000 then blibbradius=6
elseif smass>2000 then blibbradius=4
elseif smass>1000 then blibbradius=3
end
end
gr.setColor(baseR,baseG,baseB,blipalpha-20)
gr.drawCircle(blibbradius,bxkoord+13+math.random(-1,1),bykoord+13+math.random(-1,1))--radarpunkt
gr.setColor(baseR,baseG,baseB,blipalpha-10)
gr.drawCircle(blibbradius,bxkoord+13+math.random(-1,1),bykoord+13+math.random(-1,1))--radarpunkt
gr.setColor(baseR,baseG,baseB,blipalpha+10)
gr.drawCircle(blibbradius,bxkoord+13+math.random(-1,1),bykoord+13+math.random(-1,1))--radarpunkt
gr.setColor(baseR,baseG,baseB,blipalpha+20)
gr.drawCircle(blibbradius,bxkoord+13+math.random(-1,1),bykoord+13+math.random(-1,1))--radarpunkt
end
end
end
drawshipinfo = function(sinfo,posX,posY)
--zeichnet die ship-info box
gr.setColor(baseR,baseG,baseB,20)
gr.drawRectangle(posX-2,posY-2,posX+355,posY+290,true)
if table.getn(sinfo)==1 then return end
--weapons
local gun_strs={}
local mis_strs={}
for gk,gv in pairs(inf[1][9]) do
local guninfo=gv:split(":_:")
local isgunarmed=" "
if guninfo[2]=="1" then isgunarmed=" >" end
table.insert(gun_strs,isgunarmed..guninfo[1].." ["..guninfo[3].."]")
end
for mk,mv in pairs(inf[1][10]) do
local misinfo=mv:split(":_:")
local ismisarmed=" "
if misinfo[2]=="1" then if misinfo[5]=="1" then ismisarmed=">>" else ismisarmed=" >" end end
table.insert(mis_strs,ismisarmed..misinfo[1].." ["..misinfo[3].."]")
end
nicebox(posX,posY,350,70,'Weapons',{mis_strs,gun_strs})
nicebox(posX,posY+80,70,50,'ETS',{{"G","S","E"},{string.rep('|',inf[1][7][1]),string.rep('|',inf[1][7][2]),string.rep('|',inf[1][7][3])}})
nicebox(posX+80,posY+80,50,50,'CM.',{{sinfo[4][1]}})
if Shield_icon[sinfo[1][1]]~=nil then
--shields
shieldico = gr.loadTexture(Shield_icon[sinfo[1][1]],true)
gr.setColor(baseR,baseG,baseB,255)
gr.drawMonochromeImage(shieldico[1],posX+215,posY+90)
gr.setColor(baseR,baseG,baseB,(255/100*sinfo[6][1]))
gr.drawMonochromeImage(shieldico[2],posX+215,posY+90)
gr.setColor(baseR,baseG,baseB,(255/100*sinfo[6][2]))
gr.drawMonochromeImage(shieldico[3],posX+215,posY+90)
gr.setColor(baseR,baseG,baseB,(255/100*sinfo[6][3]))
gr.drawMonochromeImage(shieldico[4],posX+215,posY+90)
gr.setColor(baseR,baseG,baseB,(255/100*sinfo[6][4]))
gr.drawMonochromeImage(shieldico[5],posX+215,posY+90)
nicebox(posX+220,posY+80,100,110,'Shields',{{}})
else
nicebox(posX+220,posY+80,100,110,'Shields',{{"",sinfo[6][5],""},{sinfo[6][3],sinfo[6][1],sinfo[6][4]},{"",sinfo[6][2],""}})
end
local radarrangestring=""
if radar_range>1000 then
radarrangestring=(math.floor(radar_range/100)/10).." Km"
else
radarrangestring=radar_range.." m"
end
nicebox(posX+140,posY+80,70,50,'Radar',{{radarrangestring}})
nicebox(posX,posY+140,90,50,'Engine',{{"Speed","AB"},{sinfo[2][1],sinfo[5][1]}})
nicebox(posX,posY+200,350,90,'Damage',{inf[1][11]})
end
Shield_icon={}
Shield_icon['GTF Ulysses']='shield-f01'
Shield_icon['GTF Hercules']='shield-f06'
Shield_icon['GTF Hercules Mark II']='shieldft-02'
Shield_icon['GTF Ares']='shieldft-02x'
Shield_icon['GTF Erinyes']='shieldft-04'
Shield_icon['GTF Loki']='shield-f13'
Shield_icon['GTF Pegasus']='shieldft-01'
Shield_icon['GTF Perseus']='shieldft-03'
Shield_icon['GTF Myrmidon']='shieldft-05'
Shield_icon['SF Mara']='shieldfs-02'
Shield_icon['GTB Artemis']='shieldbt-03'
Shield_icon['GTB Medusa']='shield-b04'
Shield_icon['GTB Ursa']='shield-b05'
Shield_icon['GTB Zeus']='shield-b09'
Shield_icon['GTB Boanerges']='shieldbt-01'
Shield_icon['GVF Seth']='shield-f07'
Shield_icon['GVF Horus']='shield-f08'
Shield_icon['GVF Thoth']='shield-f09'
Shield_icon['GVF Serapis']='shieldfv-01'
Shield_icon['GVF Tauret']='shieldfv-02'
Shield_icon['GVB Sekhmet']='shieldbv-02'
Shield_icon['GVB Osiris']='shield-b06'
Shield_icon['GVB Bakha']='shieldbv-01'
Shield_icon['GVF Ptah']='shieldfv-04'
Shield_icon['SF Dragon']='shield-f03'
Shield_icon['SF Basilisk']='shield-f10'
Shield_icon['SF Manticore']='shield-f11'
Shield_icon['SF Aeshma']='shieldfs-01'
Shield_icon['SF Mara']='shieldfs-02'
Shield_icon['SF Astaroth']='shieldfs-03'
Shield_icon['SB Nephilim']='shield-b08'
Shield_icon['SB Taurvi']='shieldbs-01'
Shield_icon['SB Nahema']='shieldbs-02'
Shield_icon['SB Seraphim']='shield-b10'
drawmonitor = function(minfo,posX,posY)
gr.setColor(baseR,baseG,baseB,20)
gr.drawRectangle(posX-2,posY-2,posX+355,posY+150,true)
nicebox(posX,posY,350,55,'Wingmen',minfo)
nicebox(posX,posY+65,350,80,'Monitor',{{}})
end
drawtargetinfo = function(tinfo,posX,posY)
--zeichnet die target-info box
gr.setColor(baseR,baseG,baseB,20)
gr.drawRectangle(posX-2,posY-2,posX+355,posY+255,true)
local targetboxwidth=200
local targetboxheight=250
local targetrenderbreite=200
local targetrenderhoehe=200
local randabstand=5
local zeilenabstand=15
local targetrenderposx=posX
local targetrenderposy=posY+50
--testtex = gr.loadTexture("targetview1",true)
--gr.setColor(baseR,baseG,baseB,255)
--gr.drawMonochromeImage(testtex[1],posX,posY)
--gr.setColor(baseR,baseG,baseB,255)
--gr.drawMonochromeImage(testtex[2],posX,posY)
--umrandung
gr.setColor(baseR,baseG,baseB,100)
gr.drawRectangle(posX,posY,posX+targetboxwidth,posY+targetboxheight,false)
--hintergrund für die targetrenderbox
gr.setColor(baseR,baseG,baseB,25)
gr.drawRectangle(targetrenderposx,targetrenderposy,targetrenderposx+targetrenderbreite,targetrenderposy+targetrenderhoehe,true)
--hintergrund für die targetrenderbox
gr.setColor(baseR,baseG,baseB,50)
gr.drawRectangle(targetrenderposx+targetrenderbreite-38,targetrenderposy,targetrenderposx+targetrenderbreite,targetrenderposy+zeilenabstand,true)
gr.drawRectangle(targetrenderposx,targetrenderposy,targetrenderposx+targetrenderbreite-38,targetrenderposy+2,true)
gr.setColor(baseR,baseG,baseB,150)
gr.drawRectangle(targetrenderposx+targetrenderbreite-5,targetrenderposy+zeilenabstand,targetrenderposx+targetrenderbreite,targetrenderposy+targetrenderhoehe,true)
if table.getn(tinfo) == 9 then
local calpha=255
local R,G,B,A
--if wii[10] and wii[10]==1 then
-- R,G,B,A = 50,50,255,calpha
if tinfo[1][1] == "Hostile" or tinfo[1][1] == "Traitor" or tinfo[1][1] == "Neutral" then
R,G,B,A = 255,0,0,calpha
elseif tinfo[1][1] == "Friendly" then
R,G,B,A = 0,255,0,calpha
elseif tinfo[1][1] == "Unknown" then
R,G,B,A = 255,0,255,calpha
elseif tinfo[1][1] == "Asteroid" then
R,G,B,A = 155,155,155,calpha
else
R,G,B,A = 128,128,128,calpha
end
gr.setColor(R,G,B,A)
gr.drawString(tinfo[2][1].." ("..tinfo[1][1]..")",posX+randabstand,posY+randabstand)--name
gr.drawString(tinfo[3][1],posX+randabstand,posY+(zeilenabstand*1)+randabstand)--klasse
gr.drawString("D: "..tinfo[4][1],posX+randabstand,posY+(zeilenabstand*2)+randabstand)--entfernung
gr.drawString("S: "..tinfo[5][1],posX+randabstand+targetboxwidth-50,posY+(zeilenabstand*2)+randabstand)--geschwindigkeit
gr.setColor(baseR,baseG,baseB,255)
gr.drawString(tinfo[6][1].."%",posX+randabstand+targetboxwidth-40,posY+(zeilenabstand*3)+randabstand+randabstand)--hull integrity
if tinfo[7][1]~="-" then
local targetshiphandle = tb.ShipClasses[(tinfo[7][1]+1)]
if targetshiphandle ~= nil and targetshiphandle:isValid() then
targetshiphandle:isModelLoaded(true)
local tpostest=ba.createVector(tinfo[9][1],tinfo[9][2],tinfo[9][3]):getOrientation()
targetshiphandle:renderTechModel2(targetrenderposx,targetrenderposy,targetrenderposx+targetrenderbreite,targetrenderposy+targetrenderhoehe,tpostest,0.95)
end
end
if table.getn(tinfo[8])==5 then
--nicebox(posX+targetrenderbreite+10,posY+50,100,110,'Shields',{{"",tinfo[8][5],""},{tinfo[8][3],tinfo[8][1],tinfo[8][4]},{"",tinfo[8][2],""}})
if Shield_icon[tinfo[3][1]]~=nil then
--shields
shieldico = gr.loadTexture(Shield_icon[tinfo[3][1]],true)
gr.setColor(baseR,baseG,baseB,255)
gr.drawMonochromeImage(shieldico[1],posX+targetrenderbreite+5,posY+60)
gr.setColor(baseR,baseG,baseB,(255/100*tinfo[8][1]))
gr.drawMonochromeImage(shieldico[2],posX+targetrenderbreite+5,posY+60)
gr.setColor(baseR,baseG,baseB,(255/100*tinfo[8][2]))
gr.drawMonochromeImage(shieldico[3],posX+targetrenderbreite+5,posY+60)
gr.setColor(baseR,baseG,baseB,(255/100*tinfo[8][3]))
gr.drawMonochromeImage(shieldico[4],posX+targetrenderbreite+5,posY+60)
gr.setColor(baseR,baseG,baseB,(255/100*tinfo[8][4]))
gr.drawMonochromeImage(shieldico[5],posX+targetrenderbreite+5,posY+60)
nicebox(posX+targetrenderbreite+10,posY+50,100,110,'Shields',{{}})
else
nicebox(posX+targetrenderbreite+10,posY+50,100,110,'Shields',{{"",tinfo[8][5],""},{tinfo[8][3],tinfo[8][1],tinfo[8][4]},{"",tinfo[8][2],""}})
end
end
else
gr.drawString("No Target",posX+randabstand,posY+randabstand)--name
end
end
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
update()
]
+Override: true
$On Key Pressed: [
kp=hv.Key
if hv.Key=="2" and radar_range<10000 then
radar_range = radar_range+500
elseif hv.Key=="1" and radar_range>500 then
radar_range = radar_range-500
end
]
#End
positions of the info boxes can be changed in the "config" section of the client scripting.tbl ^^