PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Addon: Dynamic Player Lights



ALL YOU CAN EAT
05.01.2010, 20:48
Hi,
ich habe letztens mal bei youtube reingeschaut und bin über ein Video gestoßen in dem Dynamic Lights vorgestellt wurden, dann dachte ich mir mach ich das auch für gmod.
Das dabei rausgekommen.
(Das Menü öffnet ihr mit dem Consolen-Befehl "****_dlight")
Folgende Möglichkeiten gibt es:
-zeige Licht beim Gegner
-zeige Licht beim Freund
-ändern der Farbe
-ändern der Größe
-ändern der Helligkeit
http://img258.imageshack.us/i/dmoverwatch0000.jpg

Download:http://www.garrysmod.org/downloads/?a=view&id=87734

Stoned
07.01.2010, 07:56
Sieht ja recht nett aus aber man gibt Variablen nicht den prefix f*ck_ ;)

Zudem hast du die DieTime auf 150 Sekunden gesetzt (wtf?) und rufst das ganze mit nem ConsoleCommand auf.
Schau dir in der Wiki mal hook.Add an. (Think)

ALL YOU CAN EAT
07.01.2010, 11:49
Ja,
Das mit der dietime lässt sich so erklären ,dass ich am Anfang keinen "timer" verwendet habe und es mir nach 10 Sekunden zu schnell weg war. Ob ich jetzt mit dem "timer" die Funktion abrufe oder den Befehl da tut sich nit viel. Ich hätte einen hook verwenden können aber ich hatte Probleme den zu updaten(Farbe wechseln).
Ich weiß ja nit ob es auch für gmod while schleifen gibt... und mit hook.Destroy("","",xyz) und hook.Add("","",xyz) is auch behindert.
Wegen dem Konsolen Befehl ja ok ,dass aber ne abkürzung ^^für etwas.:twisted:

Stoned
08.01.2010, 07:56
Was is falsch an hook.Add("Think","Dynamic lights",funcname) :\

ALL YOU CAN EAT
08.01.2010, 11:40
Ja das Problem ist das der hook "Think" zu langsam aufgerufen wird und nicht schneller.
Dann ist der Spieler schneller als das Licht ... das würde irgendwie blöd aussehen oder ?;)

Stoned
12.01.2010, 15:08
Nein das ist nicht der fall, ich benutze so ein script schon seit zwei Jahren und es geht (noch) immer mit Think.

ALL YOU CAN EAT
12.01.2010, 18:59
Ok, ich muss kurz vom Thema abweichen, hoffe du vergibst es mir 8) .
Du kennst nicht Zufällig eine Funktion oder eine Methode die Position von z.b einem Entity umzurechen auf die Fläche des Screens. Sprich das es nicht passiert das die größe des gezeichneten Rectes sich mit größer werdender Entfernung addiert(Glaube syranide benutzt sowas bei smartsnap... bin mir arber nicht sicher vll. kannst du mir ein Beispiel näher bringen.)

Stoned
12.01.2010, 19:15
Ok, ich muss kurz vom Thema abweichen, hoffe du vergibst es mir 8) .
Du kennst nicht Zufällig eine Funktion oder eine Methode die Position von z.b einem Entity umzurechen auf die Fläche des Screens. Sprich das es nicht passiert das die größe des gezeichneten Rectes sich mit größer werdender Entfernung addiert(Glaube syranide benutzt sowas bei smartsnap... bin mir arber nicht sicher vll. kannst du mir ein Beispiel näher bringen.)

ent:ToScreen() und ent:Distance(ply) ?

ALL YOU CAN EAT
12.01.2010, 19:38
Ne, das mein ich nicht das Problem ist wenn ich es mit ToScreen mache , z.b

function DrawPlayerName()
surface.CreateFont( "arial", 12, 350, true, false, "Testfont" )
for _, ply in pairs(player.GetAll()) do
local pos = (ply:GetPos() + Vector(0,0,40))
pos = pos:ToScreen()
if (LocalPlayer() == ply) then
--nichts
elseif(LocalPlayer() ~= ply) then
draw.DrawText(""..ply:Nick().."", "Testfont", pos.x + 45,pos.y -20, Color(255,255,255,255),1)
end
end
end

Dann wird der Spielername immer größer desto weiter ich weg bin vom Spieler und genau das will ich vermeiden.

Stoned
13.01.2010, 19:11
1.) Du erstellst eine font in nem HUDPaint hook -> schlecht
2.) Du könntest versuchen je nach Distanz andere fonts zu versuchen.


-- fonts
surface.CreateFont("arial",12,200,true,false,"Testfont1")
surface.CreateFont("arial",12,250,true,false,"Testfont2")
surface.CreateFont("arial",12,300,true,false,"Testfont3")
surface.CreateFont("arial",12,350,true,false,"Testfont4")
local font = "Testfont1"

function DrawPlayerName()
for _,ply in pairs(player.GetAll()) do
local pos = ply:GetShootPos() -- höhe sollte passen
local screen_pos = pos:ToScreen()
if (LocalPlayer() ~= ply) then
local dist = pos:Distance(LocalPlayer():GetPos())
if dist < 500 then
font = "Testfont4"
elseif dist >= 500 and dist < 1000 then
font = "Testfont3"
elseif dist >= 1000 and dist < 2000 then
font = "TestFont2"
end
draw.DrawText(ply:Nick(),font,screen_pos.x + 45,screen_pos.y -20,Color(255,255,255,255),1)
end
end
end

ALL YOU CAN EAT
13.01.2010, 20:34
Ja das Problem ist nun, dass das eine sehr spezielle Methode ist.
Ich meinte eine Umfassende Methode die auch Rect,drawlin etc. einschließt.
Also ein Methode die Welt-Koordinaten in Bildschirm-Koordinaten umwandelt.

Stoned
13.01.2010, 21:30
Ja das Problem ist nun, dass das eine sehr spezielle Methode ist.
Ich meinte eine Umfassende Methode die auch Rect,drawlin etc. einschließt.
Also ein Methode die Welt-Koordinaten in Bildschirm-Koordinaten umwandelt.

Das Problem ist, dass man Schriften nicht einfach so skalieren kann. :/

Bei Rect und DrawLine gehts aber mit ent:Distance()

RP-01
14.01.2010, 10:20
Das Coding ist etwas unordentlich und umständlich nach meinem Geschmack, und man hätte es können solider und Ressourcen einsparender Coden.

Ich hoffe du verbesserst es iergendwann.

Joker
14.01.2010, 11:27
Das Coding ist etwas unordentlich und umständlich nach meinem Geschmack, und man hätte es können solider und Ressourcen einsparender Coden.

Ich hoffe du verbesserst es iergendwann.
Die Grammatik und die Rechtschreibung ist etwas unordentlich und unleserlich nach meinem Geschmack, und man hätte es können richtig und leserlicher Schreiben.

Ich hoffe du verbesserst es iergendwann.