Hallo,
Heute will ich euch zeigen wie man eine Spielerliste in dxDraw bzw in dxElementen umsetzt.
Inhalt :
1. Vorwort.
2. Funktionen
3. Script
1. Vorwort :
In diesem Tutorial versuche ich euch zu erklären, wie man eine spielerliste mit dxElementen scriptet, hierbei
solltet ihr bitte Beachten das dies eine Neuere Version von meinem Alten Tutorial ist Tutorial zum Bauen einer Spielerliste mit dxElement
Ich werde außerdem Versuchen das Tutorial so übersichtlich wie Möglich zu gestalten.
2. Funktionen
getElementsByType
getPlayerName
getPlayerPing
dxDrawImage --Alternativ
dxDrawRectangel
dxDrawText
dxDrawLine
toggleControl
bindKey
guiGetScreenSize
function getPingColor(ping)
if (ping > 100) then
return 150,150,150
elseif (ping < 100) then
return 20,200,20
else
return 200,20,20
end
end
3. Script
Als erstes definieren wir oben im Script ( im oberen teil ) , die Variablen die wir im Laufe brauchen, dazu gehöhren unter anderem die Funktion "getPingColor",guiGetScreenSize
und "position_scoreboard = 0" .
Dies Müsste dann am Ende so aussehen , Achtung, Hierbei nutze ich als Variablen für guiGetScreenSize x und y bitte beachtet dies.
local x,y = guiGetScreenSize()position_scoreboard = 0function getPingColor(ping)if (ping > 100) then return 150,150,150elseif (ping < 100) then return 20,200,20else return 200,20,20endend
Bitte achtet darauf das ihr Local vor dem Namen habt,
da es sonst bei Variablen wie x und y zu Komplikationen kommen kann.
Nun Kommen wir zum eigentlichen.
Wir gehen ingame, öffnen den guiEditor und zaubern uns ein Schönes Scoreboard
So mein Scoreboard sieht so aus
Nun brauchen wir noch alle einträge, dafür machen wir in Jeder Spalte einmal ein dxDrawText "label" für einen Spieler.
Die Labels müssten dann etwa So Positioniert sein.
So sieht mein Code nun aus :
dxDrawRectangle(388, 225, 670, 366, tocolor(0, 0, 0, 169), true)
dxDrawRectangle(556, 225, 1, 366, tocolor(0, 0, 0, 255), true)
dxDrawRectangle(734, 225, 1, 366, tocolor(0, 0, 0, 255), true)
dxDrawRectangle(963, 225, 1, 366, tocolor(0, 0, 0, 255), true)
dxDrawRectangle(388, 225, 670, 20, tocolor(25, 25, 25, 255), true)
dxDrawText("Name", 405, 224, 572, 245, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Playtime", 568, 225, 735, 246, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Social State", 739, 225, 906, 246, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Ping", 973, 225, 1068, 245, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("name", 395, 249, 546, 265, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Playtime", 568, 250, 719, 266, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("State", 739, 250, 952, 267, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Pong", 973, 250, 1048, 267, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
Alles anzeigen
Nun müssen wir ihn aber noch auf unsere Auflösung anpassen, dies geschiet via 3 Satz
daher zahl * x oder y / Auflösung
Nun mache ich dies schnell
dxDrawRectangle(388 * x / 1440, 225 * y / 900, 670* x / 1440, 366 * y / 900, tocolor(0, 0, 0, 169), true) dxDrawRectangle(556* x / 1440, 225 * y / 900, 1* x / 1440, 366 * y / 900, tocolor(0, 0, 0, 255), true) dxDrawRectangle(734 * x / 1440, 225 * y / 900, 1 * x / 1440, 366 * y / 900, tocolor(0, 0, 0, 255), true) dxDrawRectangle(963 * x / 1440, 225 * y / 900, 1 * x / 1440, 366 * y / 900, tocolor(0, 0, 0, 255), true) dxDrawRectangle(388 * x / 1440, 225 * y / 900, 670* x / 1440, 20 * y / 900, tocolor(25, 25, 25, 255), true) dxDrawText("Name", 405* x / 1440, 224 * y / 900, 572* x / 1440, 245 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("Playtime", 568* x / 1440, 225 * y / 900, 735* x / 1440, 246 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("Social State", 739* x / 1440, 225 * y / 900, 906* x / 1440, 246, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("Ping", 973* x / 1440, 225 * y / 900, 1068* x / 1440, 245 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("name", 395* x / 1440, 249 * y / 900, 546* x / 1440, 265 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("Playtime", 568* x / 1440, 250 * y / 900, 719* x / 1440, 266 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("State", 739* x / 1440, 250 * y / 900, 952* x / 1440, 267 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false) dxDrawText("Pong", 973* x / 1440, 250 * y / 900, 1048* x / 1440, 267 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
Nun müssen wir aber noch dafür sorgen das es auch Angezeigt wird.
dies geschieht via bindKey
bindKey("tab","down",function()
addEventHandler("onClientRender", root, drawScoreboard)
bindKey("mouse_wheel_down","down",scrollDown)
bindKey("mouse_wheel_up","down",scrollUp)
toggleControl("next_weapon",false)
toggleControl("previous_weapon",false)
toggleControl("fire",false)
end)
bindKey("tab","up",function()
unbindKey("mouse_wheel_down","down",scrollDown)
unbindKey("mouse_wheel_up","down",scrollUp)
removeEventHandler("onClientRender", root, drawScoreboard)
toggleControl("next_weapon",true)
toggleControl("previous_weapon",true)
toggleControl("fire",true)
end)
Alles anzeigen
Wie man oben schon sieht, fehlen uns noch die Funktionen scrollDown / scrollUp und drawScoreboard
diese werden wir nun erstellen
ScrollUp und down sind dies hier :
function scrollDown() if #getElementsByType("player") - position_scoreboard <= 2 then position_scoreboard = #getElementsByType("player") else position_scoreboard = position_scoreboard + 2 -- Immer + 2 also immer + 2 Bei der Anzeige von mehreren spielern, für genaueres kann man auch + 1 machen endendfunction scrollUp() if position_scoreboard <= 2 then position_scoreboard = 0 else position_scoreboard = position_scoreboard - 2-- Immer + 2 also immer - 2 Bei der Anzeige von mehreren spielern, für genaueres kann man auch - 1 machen endend
Für drawScoreboard nehmen wir unseren Code von vorhin, und fügen ihn ein.
function drawScoreboard ()
dxDrawRectangle(388 * x / 1440, 225 * y / 900, 670* x / 1440, 366 * y / 900, tocolor(0, 0, 0, 169), true)
dxDrawRectangle(556* x / 1440, 225 * y / 900, 1* x / 1440, 366 * y / 900, tocolor(0, 0, 0, 255), true)
dxDrawRectangle(734 * x / 1440, 225 * y / 900, 1 * x / 1440, 366 * y / 900, tocolor(0, 0, 0, 255), true)
dxDrawRectangle(963 * x / 1440, 225 * y / 900, 1 * x / 1440, 366 * y / 900, tocolor(0, 0, 0, 255), true)
dxDrawRectangle(388 * x / 1440, 225 * y / 900, 670* x / 1440, 20 * y / 900, tocolor(25, 25, 25, 255), true)
dxDrawText("Name", 405* x / 1440, 224 * y / 900, 572* x / 1440, 245 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Playtime", 568* x / 1440, 225 * y / 900, 735* x / 1440, 246 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Social State", 739* x / 1440, 225 * y / 900, 906* x / 1440, 246 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText("Ping", 973* x / 1440, 225 * y / 900, 1068* x / 1440, 245 * y / 900, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
-- Ab Hier wird das mit den Scroll zuständig
-- Hier Fängts an die spieler zu zu ordnen.
pl = {}
local i = 0
for id, play in ipairs(getElementsByType("player")) do -- Wird für alle spieler ausgeführt bzw einmal durchgegangen.
local name = getPlayerName(play )
local playtime= "Playtime" -- Spielzeit
local ping = getPlayerPing(play ) -- Ping
pl[i] = {}
pl[i].name = name -- Name auch oben Definiert
pl[i].playtime= playtime -- Playtime Oben Definiert
pl[i].state = "Test State" -- Hier halt der Soziale Status
pl[i].ping = ping -- Ping Oben Definiert.
i = i + 1
end
row = 0
for i = 0+position_scoreboard , 18+position_scoreboard do -- 18 ist in diesem fall die Maximale anzahl an angezeigten Spielern.
if pl[i] then
-- +(18*row) ist in diesem fall die 18 mal die anzahl an row´s, dies dient dafür das auch die spieler angezeigt werden.
dxDrawText(pl[i].name, 395* x / 1440, 249 * y / 900 +(18*row), 546* x / 1440, 265 * y / 900 +(18*row), tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText(pl[i].playtime, 568* x / 1440, 250 * y / 900 +(18*row), 719* x / 1440, 266 * y / 900 +(18*row), tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
dxDrawText(pl[i].state, 739* x / 1440, 250 * y / 900 +(18*row), 952* x / 1440, 267 * y / 900 +(18*row), tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
r,g,b = getPingColor(pl[i].ping)
dxDrawText(pl[i].ping, 973* x / 1440, 250 * y / 900 +(18*row), 1048* x / 1440, 267 * y / 900 +(18*row), tocolor(255, 255, 255, 255), 1.00, "clear", "left", "center", false, false, true, false, false)
row = row + 1
end
end
end
Alles anzeigen
Mit diesem Code sollte es etwa so aussehen
Dies war mein Tutorial für eine Spielerliste mit dxElementen, bei Fragen einfach unter diesen Thread schreiben.
Bitte Beachtet das wenn ihr mehr "Tabs" haben wollt, ihr auch mehr einsetzen müsst.
ich Hoffe das euch dieses Tutorial geholfen hat, und ich nicht mehr Threads wie, " wie mache ich ein Scoreboard" Finde.
MfG