Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Chatcommand parameter?



Xandaros
18.12.2007, 17:00
Ich weiss die nachfolgende frage ist absolut dämlich :(
Wie kann ich chatcommands auf parameter überprüfen?
Ich füge also ein chatcommand ein, jetzt gibt es aber 3mio parameter^^ Und nun?

Schonmal danke für die hilfe :)

€d!t: sry... falsches forum grml... muss natürlich nach lua :(

Pac_187
18.12.2007, 17:18
Habe es mal verschoben!

@Topic:

Was genau meinst du?

Hast du Links oder eine bessere Beschreibung zu dem was du das machen möchtest?

Xandaros
18.12.2007, 17:29
Man öffnet chat:
/heal 150
man bekommt 150 leben dazu
/heal 300
man bekommt 300 leben dazu

/conc sv_gravity 100
führt sv_gravity 100 aus

sowas halt ;D

Pac_187
18.12.2007, 17:42
Ach so...


Beispiel:


function playerSaid( ply, saywhat )
local playerName = ply:GetName()
local ip = ply:IPAddress()
if string.find(saywhat, "!ip") == 1 then // Look for !ip in the player's chat -- and make sure it's the first in the sentence.
ply:PrintMessage( HUD_PRINTTALK, "IP for " .. playerName .. ": " .. ip .. "." )
end
end


hook.Add ( "PlayerSay", "playerSaid", playerSaid )

Xandaros
18.12.2007, 17:45
äääähm... man gibt !ip ein und bekommt seine ip... toll hrmpf... ich glaube du hast mich nicht verstanden ;D ich möchte das parameter ausgelesen werden, wie in den Beispielen oben...

/health XXX
gibt XXX leben dazu. Ich mach doch nicht 999 commands dafür...

Pac_187
18.12.2007, 17:49
Ja, da kann ich dir so nicht weiterhelfen...
guck dir die ULX Scriptdateien an.

Xandaros
18.12.2007, 17:50
*gegen kopf hau*
danke ;D

ich habs immer noch nicht hinbekommen :oops:
Kann sich jemand bitte die mühe machen mir das zu erklären? Ich bin scheinbar zu blöd dazu :(

BennyG
18.12.2007, 19:11
Das ist nicht schwer,ich kan dir mal nen Beispiel geben,one sec.


function GM:PlayerSay( ply, txt, team ) -- Die Funktion überhaupt,Serverside
if string.find(txt, "/heal") == 1 then -- Prüfen ob /heal vorkommt
local texttable = string.Explode(" ",txt) -- Jedes einzelnes wort in eine tabelle einfügen
local Anzahl = moneytable[2] -- Die Anzahl is der zweite Wert aus der Tabelle mit den Geschrieben Wörtern
if table.getn(texttable) > 2 then -- Falls es mehr als zwei Wörter gibt,beenden.
ply:PrintMessage(HUD_PRINTTALK ,"Falsche Anwendung! Die Anwendung lautet /heal <Anzahl> ")
if !tonumber(Anzahl) then -- Falls die Anzahl keine Zahl ist,beenden.
ply:PrintMessage(3,"Dies ist keine Zahl!.")
return end
if tonumber(Anzahl) ~= math.Round(tonumber(Anzahl)) then -- Falls,die zahl keine normale(Also Keine Dezimal) ist,beenden.
ply:PrintMessage(3,"Keine Dezimalzahlen!")
return end
ply:SetHealth(ply:Health() + tonumber(Anzahl) ) --A Addiere sein jetziges leben mit den der Anzahl

end
end


Bitte dankeschön :)

Xandaros
18.12.2007, 19:24
Frage am rande: würde das auch mit say_team gehen? Oder kann man verhindern das andere diesen befehl sehen?

€d!t: danke^^

BennyG
18.12.2007, 19:30
jo,klar eine Zeile nach ply:SetHealth einfach return " " machen,also das nix wiedergegeben wird.

Xandaros
18.12.2007, 19:57
Frage:

local texttable = string.Explode(" ",txt)
local Anzahl = moneytable[2]

Wie kommt man auf "moneytable"?
Ich will schliesslich was draus lernen ;D

So wie ich das sehe wurde im oberen ein array erzeugt und im unteren dann ...?

Pac_187
18.12.2007, 20:05
Wahrscheinlich hat er es wieder einfach via copy 'n paste gemacht und
Übersetzt...

Denn selbstgeschrieben sieht es nicht aus.

EDIT:



function GiveHealth( ply, txt, team ) // Die Funktion überhaupt,Serverside
if string.find(txt, "/heal") == 1 then // Prüfen ob /heal vorkommt
local texttable = string.Explode(" ",txt) // Jedes einzelnes wort in eine tabelle einfügen
local Anzahl = texttable[2] // Die Anzahl is der zweite Wert aus der Tabelle mit den Geschrieben Wörtern

if table.getn( texttable ) > 2 then // Falls es mehr als zwei Wörter gibt,beenden.
ply:PrintMessage( HUD_PRINTCHAT , "Falsche Anwendung! Die Anwendung lautet /heal <Anzahl> " )
return end

if !tonumber( Anzahl ) then // Falls die Anzahl keine Zahl ist,beenden.
ply:PrintMessage( HUD_PRINTCHAT, "Dies ist keine Zahl!." )
return end

if tonumber( Anzahl ) ~= math.Round(tonumber(Anzahl)) then // Falls,die zahl keine normale(Also Keine Dezimal) ist,beenden.
ply:PrintMessage( HUD_PRINTCHAT, "Keine Dezimalzahlen!" )
return end
ply:SetHealth( ply:Health() + tonumber( Anzahl ) ) // Addiere sein jetziges leben mit den der Anzahl

end
end



hook.Add ( "PlayerSay", "GiveSomeHealth", GiveHealth )



So sollte es funktionieren!

Lucid
18.12.2007, 20:08
Ich will ja nicht meckern, aber ist der Code nicht besser so?


function healcommand( ply, saywhat )
if string.find(saywhat , "/heal") == 1 then
local texttable = string.Explode( " ", saywhat )
local health = texttable[2]

if table.getn(texttable) > 2 then
ply:PrintMessage(HUD_PRINTTALK ,"The command is /heal <Number>")
return
end

if not ( tonumber( health ) ) or ( tonumber( health ) ~= math.Round( tonumber( health ) ) ) or (health > 50000) or (health < 1) then
ply:PrintMessage(3,"You didn't entered a valid numer!")
return
end

ply:SetHealth( ply:Health() + tonumber(health) )

end
end
hook.Add ( "PlayerSay", "healcommand", healcommand )

Xandaros
18.12.2007, 20:11
Doof wird es dann, wenn man nicht weiss wie viele Parameter der Benutzer eingibt, zB bei einem rcon befehl...


Wahrscheinlich hat er es wieder einfach via copy 'n paste gemacht und
Übersetzt...

Denn selbstgeschrieben sieht es nicht aus.


ebendrum ja ;D

Macht mir ein Beispiel mit rcon-befehl und ich bin glücklich ;D
Zum glück mach ich kein rcon-mod, sonst wäre das ja doof :)

PS: wenn ich das zum laufen bringe wäre das mein erster "brauchbarer" mod ;D

Pac_187
18.12.2007, 20:18
So habe meine letzen Beitrag noch einmal editiert!

BennyG
18.12.2007, 20:44
Ich hatte außerdem selbst gesagt,ich hohle ein Beispiel und nicht das ich es eben selbst Schreibe,da ich mir das String.Explode nie merken kann ;)
Zumal das Copy and Paste aus mein eigenen Script war

Und warum Wieder,hat ich schonmal was andres per Copy & Paste gezeigt?

Auch glaube ich sollte es damit keine Probleme geben mit Rcon "say"
Da dies ja auch Chat hookt,und dass den Text auch in den Chat wiedergibt,aber nur ohne den Namen halt.

Aber der name gehöhrt ja nicht zum text,deswegen sollte es soweit keine Probleme damit geben,denke ich