Moin
Heute möchte ich euch mal Zeigen wie man eine Spielerliste zusammenbaut/Scriptet.
Diese Methode ist nicht unbedingt die beste Aber sie Geht.
Als erstes Liste ich hier den Ablauf auf :
1. Funktionen
2. Bau bzw Script
1. Die Funktionen die Benötigt werden:
dxDrawLine ( für die Spalten/Zeilen)
dxDrawRectangle( für Das Fenster )
dxDrawText( für den Spielernamen und Sonstige text Elemente )
getElementsByType ( für die Spieler )
getPlayerPing ( für den Ping )
getPlayerName ( für den Spielernamen )
getKeyState ( zum Öffnen und Schließen )
guiGetScreenSize ( Bildschirm auflösung )
2. Bau / Script
Als erstes Finden wir die Bildschirm auflösung heraus mit
Danach Bauen wir uns eine Funktion um herauszufinden wieviele spieler Online sind.
Dafür nutzen wir :
getElementsByType
eine for Schleife
und das Wars eigentlich dies Sollte dann so aussehen :
getPlayersOnline = function ()
local playersOnline = getElementsByType ( "player" )
local playersO = 0
for count, playerOn in pairs(playersOnline) do
playersO = playersO + 1
end
return playersO
end
Dann Fangen wir mit dem Eigentlichen an :
Damit Bauen wir das Fenster dieses habe ich so aufgebaut :
dxDrawRectangle ( x/4.05,y/4.1, x/1.88,y/1.86, tocolor(1,1,1,200), true )--Der Hintergrund
dxDrawRectangle ( x/4,y/4, x/1.9,y/1.9, tocolor(50,50,50,150), true )
--Der Vordergrund
Dadrauf "drawen" wir dann die Spalten :
Dies habe ich so aufgebaut :
dxDrawLine ( x/2.9,y/4.001, x/2.9,y/1.288, tocolor(1,1,1,200),2,true )
dxDrawLine ( x/2.1,y/4.001, x/2.1,y/1.288, tocolor(1,1,1,200),2,true )
Diese Funktion Macht die ersten 2 Spalten
Jetzt Kommt der Text
dxDrawText("Text", x/Links,y/Open, x/Rechts,y/Unten, tocolor(red,green.blue,alpha), größe , "sans","center", "center",false, false,true)
Diesen habe ich so aufgebaut :
dxDrawText("Name :", x/15,y/30/20, x/1.9,y/1.9, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true,true)
dxDrawText("Ping : ", x/1.1,y/30/20, x/1.9,y/1.9, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true)
Nun Fügen wir die Spieler Hinzu
Als Erstes kriegen wir alle Spieler Heraus :
Nun die For Schleife
Führt für jeden Spieler die Schleife aus.
nun Zählen wir die Spieler auf :
Für 20 Spieler wird jetzt der Name Angezeigt wenn wir dieses Hier Hinzufügen :
Nun Färben wir das Ping ein damit man auf den Ersten Blick Erkännen kann ob er High,Low oder Normal Ping hat.
local ping = getPlayerPing(player)
if (ping >= 250) then
r,g,b = 200,20,25
elseif (ping >= 120) then
r,g,b = 255,149,4
else
r,g,b = 50,200,50
end
Nun Fügen wir die Spieler hinzu :
dxDrawText(amt..". "..getPlayerName ( player ), x/15,y/4*amt/5, x/1.9,y/1.9, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true,true)
Nun ist in einer Spalte der Spieler aber das Wars
nun Fügen wir das Ping hinzu :
dxDrawText(ping, x/1.1,y/4*amt/5, x/1.9,y/1.9, tocolor(r,g,b), 1.2 , "sans","center", "center",false, false,true,true)
Nun Sorgen wir dafür das es Erscheint wenn wir Tab Drücken :
addEventHandler("onClientPreRender",getRootElement(),
function ()
if ( getKeyState( "tab" ) == true) then
drawPlayerList()
end
end)
Nun Müsste das script etwa so Aus Sehen :
local x,y = guiGetScreenSize ()
getPlayersOnline = function ()
local playersOnline = getElementsByType ( "player" )
local playersO = 0
for count, playerOn in pairs(playersOnline) do
playersO = playersO + 1
end
return playersO
end
drawPlayerList = function ()
dxDrawRectangle ( x/4.05,y/4.1, x/1.88,y/1.86, tocolor(1,1,1,200), true )
dxDrawRectangle ( x/4,y/4, x/1.9,y/1.9, tocolor(50,50,50,150), true )
dxDrawLine ( x/2.9,y/4.001, x/2.9,y/1.288, tocolor(1,1,1,200),2,true )
dxDrawLine ( x/2.1,y/4.001, x/2.1,y/1.288, tocolor(1,1,1,200),2,true )
dxDrawText("Name :", x/15,y/30/20, x/1.9,y/1.9, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true,true)
dxDrawText("Ping : ", x/1.1,y/30/20, x/1.9,y/1.9, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true)
dxDrawText( getPlayersOnline().." | Player/s Online", x/1.3,y/30/20, x/1.9,y/0.66-700+pls, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true)
local players = getElementsByType ( "player" )
local playas = 0
for amt, player in pairs(players) do
playas = playas + 1
if (playas <= 20) then
local ping = getPlayerPing(player)
if (ping >= 250) then
r,g,b = 200,20,25
elseif (ping >= 120) then
r,g,b = 255,149,4
else
r,g,b = 50,200,50
end
dxDrawText(amt..". "..getPlayerName ( player ), x/15,y/4*amt/5, x/1.9,y/1.9, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true,true)
dxDrawText(ping, x/1.1,y/4*amt/5, x/1.9,y/1.9, tocolor(r,g,b), 1.2 , "sans","center", "center",false, false,true,true)
end
end
end
addEventHandler("onClientPreRender",getRootElement(),
function ()
if ( getKeyState( "tab" ) == true) then
drawPlayerList()
end
end)
Alles anzeigen
Ich habe die Funktion drawPlayerList genannt.
Das Script ist eigentlich jetzt Fertig
man Kann es Allerdings noch Verschönern
Ich zum Beispiel habe ein Effekt hinzugefügt das die PlayerListe hoch und Runter Fährt wenn man Tab drückt als eine art funktion vom hoch und runter fahren:
So Sieht es bei mir aus dort ist die Funktion schon drinne :
Spoiler anzeigen
local x,y = guiGetScreenSize ()
getPlayersOnline = function ()
local playersOnline = getElementsByType ( "player" )
local playersO = 0
for count, playerOn in pairs(playersOnline) do
playersO = playersO + 1
end
return playersO
end
drawPlayerList = function (pls)
dxDrawRectangle ( x/4.05,y/4.1-700+pls, x/1.88,y/1.86, tocolor(1,1,1,200), true )
dxDrawRectangle ( x/4,y/4-700+pls, x/1.9,y/1.9, tocolor(50,50,50,150), true )
dxDrawLine ( x/2.9,y/4.001-700+pls, x/2.9,y/1.288-700+pls, tocolor(1,1,1,200),2,true )
dxDrawLine ( x/2.1,y/4.001-700+pls, x/2.1,y/1.288-700+pls, tocolor(1,1,1,200),2,true )
dxDrawText("Name :", x/15,y/30/20-700+pls, x/1.9,y/1.9-700+pls, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true,true)
dxDrawText("Ping : ", x/1.1,y/30/20-700+pls, x/1.9,y/1.9-700+pls, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true)
dxDrawText( getPlayersOnline().." | Player/s Online", x/1.3,y/30/20-700+pls, x/1.9,y/0.66-700+pls, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true)
local players = getElementsByType ( "player" )
local playas = 0
for amt, player in pairs(players) do
playas = playas + 1
if (playas <= 20) then
local ping = getPlayerPing(player)
if (ping >= 250) then
r,g,b = 200,20,25
elseif (ping >= 120) then
r,g,b = 255,149,4
else
r,g,b = 50,200,50
end
dxDrawText(amt..". "..getPlayerName ( player ), x/15,y/4*amt/5-700+pls, x/1.9,y/1.9-700+pls, tocolor(50,200,50), 1.2 , "sans","center", "center",false, false,true,true)
dxDrawText(ping, x/1.1,y/4*amt/5-700+pls, x/1.9,y/1.9-700+pls, tocolor(r,g,b), 1.2 , "sans","center", "center",false, false,true,true)
end
end
end
local cnt = 0
addEventHandler("onClientPreRender",getRootElement(),
function ()
if ( getKeyState( "tab" ) == true) then
cnt = cnt + 10
drawPlayerList(cnt)
if (cnt >= 690) then
cnt = 690
end
elseif ( getKeyState( "tab" ) == false) then
cnt = cnt - 10
drawPlayerList(cnt)
if (cnt <= 10) then
cnt = 5
end
end
end)
Alles anzeigen
Das Wars
Beispiel :
So kann es am Ende aus Sehen :
Spoiler anzeigen
MfG