PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein Lua Command Macro



Lemopav
28.04.2013, 19:41
Ich habe nun stunden voller sucherrei hinter mir und langsam verliere ich die lust, weshalb ich nun dieses Thema aufgemacht habe...

Im grunde suche ich ein Relativ einfaches Lua Makro was folgendes tun könnte:

Wenn ich etwas bestimmtes im chat eintippe (was am besten nur ich als server owner machen kann).
Im chat wird zuerstmal ein bestimmter text angezeigt, danach sollen mehrere befehle ausgeführt werden, gefolgt von einem weiteren text im chat. Fertig.

Lua technisch bin ich selber erst noch am lernen... aber ich schliesse daraus das ich nichts gefunden habe, es etwas zu schwer für mich wäre...

Schonmal Danke im Vorraus ;)

gamerpaddy
28.04.2013, 21:07
in autorun/server:



function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Hier kommt ein chattext")
v:PrintMessage(HUD_PRINTCENTER,"Hier kommt ein Text in der mitte des Bildschirms")
v:Ban(1337,"So isses!") --alle bannen (1337 minuten )
end
RunConsoleCommand("hostname", "H4rtzer Build | Unsere props sind von der caritas")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, public)
if not public then return end
if not msg == "ISCH BAHN EUSCH ALLEH!" then return end
if evolve then
if not ply:EV_HasPrivilege("Chatcommand1) then return end
ply:RunCommandList()
else
if ply:IsSuperAdmin() then ply:RunCommandList()
end

end




Wenn du nun "ISCH BAHN EUSCH ALLEH!" (ohne die " " ) in den Chat eingibst, passiert was schönes :P

Keine ahnung ob der Code funktioniert.. Habe den ohne zu testen aus dem Kopf geschrieben ..

Lemopav
28.04.2013, 21:15
Danke schön, hat mir sehr geholfen

PS: trotz das ich lua anfänger bin, seh ich was passieren wird, aber das ist ja auch nicht schwer zu erkennen :P

Trotzdem Danke :D

Lemopav
28.04.2013, 21:43
Ich habe gerade gesehen das du das für Evolve geschrieben hast :S
was muss ich machen wenn ich das für ULX und ULib haben möchte?

gamerpaddy
28.04.2013, 22:35
ohne das Evolve zeug, welches eh nicht ging da man die Privilegien in einem Plugin festlegen muss..

function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Hier kommt ein chattext")
v:PrintMessage(HUD_PRINTCENTER,"Hier kommt ein Text in der mitte des Bildschirms")
v:Ban(1337,"So isses!") --alle bannen (1337 minuten )
end
RunConsoleCommand("hostname", "H4rtzer Build | Unsere props sind von der caritas")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, public)
if not public then return end
if not msg == "ISCH BAHN EUSCH ALLEH!" then

if ply:IsSuperAdmin() then ply:RunCommandList() end
end

end

Lemopav
28.04.2013, 23:03
hmm, es fonktioniert irgendwie nicht
so mache ich das:


function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, public)
if not public then return end
if not msg == "!test" then

if ply:IsSuperAdmin() then ply:RunCommandList() end
end

end
wenn ich dann auf den server gehe und !test eingebe passiert jedoch nix...

isch
28.04.2013, 23:27
if not msg == "!test" then
Wenn NICHT Nachricht gleich "!test" dann

Das "not" muss da weg, aktuell überprüfst du ob die Nachricht nicht gleich "!test" ist. Probier mal etwas anderes in den Chat zu schreiben, dann sollte es ausgeführt werden.

gamerpaddy
29.04.2013, 01:39
Oh, ja hatte das erste beispiel kopiert, und dass vergessen :P

Lemopav
29.04.2013, 09:15
nope ändert sich nix, hab das "not" rausgenommen, und dann mal probiert, aber nix.

Egal ob mit not oder nicht egal was ich mache es klappt nicht >.<
hat das möglicherweise mit linux zu tun oder ist das egal?
braucht die Lua. datei ein bestimmten namen?

isch
29.04.2013, 09:33
Bist du auf dem Server wo du das probierst auch Super Admin? Probier mal folgenden Code, wenn du nicht die Super Admin bist sollte die Meldung "Du bist kein Super Admin" kommen.


function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, public)
if not public then return end
if msg == "!test" then
if ply:IsSuperAdmin() then
ply:RunCommandList() end
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end
end

Es wäre auch toll wenn du mal einige Informationen hier veröffentlichst. z.B. ob du nur lokal entwickelst oder zum Testen einen eigenen dedicated Server aufgesetzt hast? Läuft das ganze dann bei dir zuhause? Oder auf einem "echten" Server? Da du "Linux" geschrieben hast geh ich davon aus, dass du einen dedicated Server einsetzt? Post bitte einmal die Ausgabe von "ls [pfad zum server]/lua/*".

Lemopav
29.04.2013, 09:36
Wichtige Informationen:
- Es ist ein Richtiger server, der aber über linux läuft.
- hlds/srcds/orangebox/garrysmod/lua/autorun/server/

derzeitiger name der datei:
command_calypso.lua (es ist eine lua datei)


Dein neues script habe ich ausprobiert, er gibt garnichts aus.
wenn ich !test in denn chat schreibe, passiert nix...

isch
29.04.2013, 09:53
Überprüf einmal ob die Datei überhaupt geladen wird. (Schreib einfach mal irgend nen Blödsinn, also ungültigen Lua-Code, in die Datei. Beim Starten des Servers sollte dann ein Lua-Error in der Console kommen.)

Lemopav
29.04.2013, 09:56
hmm tatsächlich ...

[ERROR] lua/autorun/server/command_calypso.lua:18: ')' expected (to close '(' at line 9) near 'end'
1. unknown - lua/autorun/server/command_calypso.lua:0


[ERROR] lua/autorun/server/command_calypso.lua:18: ')' expected (to close '(' at line 9) near 'end'
1. unknown - lua/autorun/server/command_calypso.lua:0



das spuckt er mir aus

isch
29.04.2013, 10:13
Beim Schreiben des im Spoiler stehenden Textes sind mir 2 Sachen aufgefallen. Probier es einmal mit folgendem Code:


function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, teamChat) -- Der Dritte Parameter ist "True" gibt an, ob die Nachricht im Team-Chat geschrieben wurde und nicht ob sie im Public-Chat geschrieben wurde
if teamChat then return end -- Die Überprüfung hier müssen wir jetzt auch anpassen (von "Wenn nicht Public-Chat dann abbrechen" zu "Wenn Team-Chat dann abbrechen")
if msg == "!test" then
if ply:IsSuperAdmin() then
ply:RunCommandList() end
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end
end) -- Die Klammer von hook.Add( sollte hier noch geschlossen werden.




Das ist gut, du kannst dir nun sicher sein, dass die Datei zumindest geladen wird.

Nun probieren wir ob der Hook "PlayerSay" richtig ausgeführt wird.
Dazu fügst du folgenden Code in die Datei ein:


hook.Add("PlayerSay", "Calypso Chat Command", function(ply, msg, teamChat)
return "[Calypso] " .. msg
end)

Egal was du in den Chat schreibst, es sollte vor der Nachricht nun immer noch "[Calypso] " erscheinen.

Lemopav
29.04.2013, 10:21
Okey, gut...
Der obere hat nicht fonktioniert, doch wenn ich das mit dem 2. code mache fonktioniert es, es erscheint jetzt immer [Calypso] vor jeder nachricht

Beim ersten code erscheint wieder folgende fehlermeldung:

[ERROR] lua/autorun/server/command_calypso.lua:18: ')' expected (to close '(' at line 9) near 'end'
1. unknown - lua/autorun/server/command_calypso.lua:0


[ERROR] lua/autorun/server/command_calypso.lua:18: ')' expected (to close '(' at line 9) near 'end'
1. unknown - lua/autorun/server/command_calypso.lua:0

isch
29.04.2013, 10:25
Schau dir meinen oberen Post nochmal genau an. Vor allem die letzte Zeile. Hast du die ")" auch eingefügt?

Lemopav
29.04.2013, 10:31
Ja, auch nach genaueren nachschauen :shock: ändert sich dabei nix
die ) ist direkt hinter end

so sieht das jetzt bei mir aus:

function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, teamChat)
if teamChat then return end
if msg == "!test" then
if ply:IsSuperAdmin() then
ply:RunCommandList() end
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end
end)

isch
29.04.2013, 10:56
Ah jetzt sehe ich den Fehler


function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, teamChat)
if teamChat then return end
if msg == "!test" then
if ply:IsSuperAdmin() then
ply:RunCommandList() end
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end
end)

Dieses "end" gehört natürlich weg.



function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, teamChat)
if teamChat then return end
if msg == "!test" then
if ply:IsSuperAdmin() then
ply:RunCommandList()
end
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end

end)
Das letzte "end" bleibt hier übrig/ist zu viel, die Klammer gehört auch ein end früher

Lemopav
29.04.2013, 11:02
Mein server verarscht mich -.-
wenn der server hochfährt, kann er die lua datei (endlich) lesen, jedoch wenn ich dann im chat "!test" eingebe kommt in der Console

[ERROR] lua/autorun/server/command_calypso.lua:13: attempt to call method 'RunCommandList' (a nil value)
1. fn - lua/autorun/server/command_calypso.lua:13
2. unknown - addons/ulib/lua/ulib/shared/hook.lua:183


[ERROR] lua/autorun/server/command_calypso.lua:13: attempt to call method 'RunCommandList' (a nil value)
1. fn - lua/autorun/server/command_calypso.lua:13
2. unknown - addons/ulib/lua/ulib/shared/hook.lua:183

isch
29.04.2013, 11:07
function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, teamChat)
if teamChat then return end
if msg == "!test" then
if ply:IsSuperAdmin() then
ply:RunCommandList()
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end
end)

Das "ply:" vor "RunCommandList()" muss noch weg.

Lemopav
29.04.2013, 11:13
Jaa :D es Fonktioniert endlich :D

Jetzt hab ich nur noch eine letzte frage :S
kann man mehrere kommands darüber auch ausführen?

Hier nochmal das Fontkionierende Script ;) Für alle die es auch haben wollen xD

function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
end
RunConsoleCommand("say", "test")
end

hook.Add("PlayerSay","Chat command dingens", function(ply ,msg, teamChat)
if teamChat then return end
if msg == "!test" then
if ply:IsSuperAdmin() then
RunCommandList()
else
ply:PrintMessage(HUD_PRINTTALK,"Du bist kein Super Admin")
end
end
end)

isch
29.04.2013, 11:16
Kopiere einfach das "RunConsoleCommand("say", "test")" und füg es mehrmals ein? Oder was meinst du mit "mehrere kommandos damit ausführen"?

Lemopav
29.04.2013, 11:33
ne hat sich erledigt, aber ne andere frage, wie kann ich ulx befehle dadurch ausführen?

isch
29.04.2013, 12:09
ULX ist lediglich die Grafische Oberfläche (glaub ich). Ich denke du meinst ULib.

Es kommt ganz darauf an was du machen willst. Um im obigen beispiel die Spieler (über ULib) zu kicken kannst du folgenden Code verwenden:Um einen Spieler beispielsweise vom Server zu kicken



function RunCommandList()
for k,v in pairs(player.GetAll()) do
v:PrintMessage(HUD_PRINTTALK,"Test")
v:PrintMessage(HUD_PRINTCENTER,"Test")
ULib.kick(v, "Kick-Grund")
end
RunConsoleCommand("say", "test")
end
[...restlicher Code]


Andere Funktionen (beispielsweise Slap statt Kick) findest du in der Dokumentation von ULib
http://ulyssesmod.net/docs/index/Functions.html

Lemopav
29.04.2013, 13:21
ahh, okey danke für deine gedult und hilfe :)

Lemopav
03.05.2013, 14:33
Neues Thema

Da es ja irgendwie dazu gehöhrt erkunde ich mich hier ;)

Ein weiteres Kleines .Lua macro, das im grunde folgendes kann:
Wenn ich wie im vorherigen script etwas im chat schreibe wie "!shutdown"
es ein Countdown von ca. 15 minuten im chat gibt...

Also ungefähr das wenn ich "!shutdown" Schreibe,


Chat: Der server wird in 15 minuten heruntergefahren.
Chat: Der server wird in 10 minuten heruntergefahren.
Chat: Der server wird in 05 minuten heruntergefahren.
Chat: Der server wird in 03 minuten heruntergefahren.
Chat: Der server wird in 01 minute heruntergefahren.
conconsole.killserver

Ich hab es schon versucht jedoch ohne erfolg...
wäre dankbar für hilfe :D