So ich melde mich nun hier wieder, weil es doch ist, was ich dachte.
Die function von Lars verhindert jegliches ändern der ElementDatas, auch wenn
es Scripts vom Server sind (im Clientseitigen), somit habe ich das Problem, wenn ich der Funktion
vioSetElementData einfach das SetElementData rausnehme, sodass es nur in der Tabelle gespeichert ist, dann
gibt es das Problem, dass ich im ganzen Script setElementData durch vioSetElementData ersetzen muss, was nämlich öfters
benutzt wird, hat einer eine Idee ?
Beiträge von INCepted
-
-
Also wenn ich das richtig verstehe, du hast ein eigenes Leben, was bis zu 10.000 geht, richtig ?
Dann machst du das, wie von Lars erwähnt, mit dem Dreisatz.
Nur statt /100 machst du /10000 -
gangwardeath und gangwarDeath
Bitte lies dir mein Thema erst richtig durch, ich habe bereits dies getestet, es wird richtig gesetzt und
auch abgefragt, wenn ich sterbe wird aber die variable nicht geupdated, ich habe einfach quasi das Gefühl die komplette Schleife
wird nur einmal gemacht obwohl da ein Timer ist...EDIT: Hat sich geklärt, hab vergessen die Parameter wieder beim Timer zu setzen
-
Welcher Name bitte ? -
Hey liebes Forum,
bin dabei eine HUD für das Gangwar zu machen. Bisher ist alles eigentlich
fertig bis auf die Lebenden Anzeige.Ich möchte nämlich, dass die Lebenden gezählt werden, dass habe ich mit
setElementData gemacht, sobald man stirbt und vom Gangwar betroffen ist wird
ElementData ( "gangwardeath" ) auf true gestellt, das klappt auch, da ich es mit
einer Chatbox getestet habe..Wenn ich aber alle zählen will funktioniert das nicht. Die Online Zahl geht, jedoch wenn
ich sterbe wird es nicht bei den Lebenden abgezogen, wahrscheinlich weil die if-Abfrage dann nicht mehr
passiert werden kann aber immer noch in der Variable gezählt wird, was kein SInn macht.Hier die function:
Lua
Alles anzeigenfunction countGangsOnline ( attacker, defender ) for id, playeritem in ipairs ( getElementsByType( "player" ) ) do if tonumber ( vioGetElementData ( playeritem, "fraktion" ) ) == attacker then attackerCountOnline = attackerCountOnline + 1 if vioGetElementData ( playeritem, "gangwarDeath" ) == false then attackerAliveOnline = attackerAliveOnline + 1 end elseif tonumber ( vioGetElementData ( playeritem, "fraktion" ) ) == defender then defenderCountOnline = defenderCountOnline + 1 if vioGetElementData ( playeritem, "gangwarDeath" ) == false then defenderAliveOnline = defenderAliveOnline + 1 end end end countGangwarTimer = setTimer ( countGangsOnline, 1000, 1 ) end
-
Die army_func ist nicht nötig, wir brauchen die vom SFPD wo suspect
definiert wurde.. -
Hier mal ein Beispiel wie man das ganze lösen könnte
Lua
Alles anzeigenlocal elementData = {} _setElementData = setElementData _getElementData = getElementData function setElementData(elem, key, val, sync) if (not elementData[elem]) then elementData[elem] = {} end elementData[elem][key] = val return _setElementData(elem, key, val, sync) end function getElementData(elem, key) if (not elementData[elem]) then elementData[elem] = {} end return elementData[elem][key] end addEventHandler("onElementDataChange", root, function(str, data) if (client ~= nil and getElementType(client) == "player") then _setElementData(source, str, data) kickPlayer(player, "Anticheat", "Versuch's doch einfach nochmal ;)", false) end end)
Würde man nun Clientseitig ein Elementdata verändern, wird die Änderung rückgängig gemacht, und man wird gekickt.
LG
Lars
Das trifft aber nicht auf Clientseitige Scripts des Servers zu, oder ?
Somit würde clientseitig setElementData immer noch mit einer absichernden
Function funktionieren, wenn ich es verstanden habe.Denn wenn ich nach Sams und Noneatemes Erklärung gehen würde,
Müsste ich ja setElementData bei der Function vioSetElementData weglassen, das
Erforder dann, dass ich überall im Vio Script das reine setElementData ersetzen, da das auch
öfters verwendet wird..Also nochmal rückfassend: Die Sicherheits Function von Lars reicht
Aus um das Ausnutzen zu verhindern, sodass setElementData clientseitig
Nur bei Dateien vom Server funktioniert, richtig ?Danke aber für die hilfreichen Antworten!
-
Ich versteh irgendwie nicht, Irgendwo ist falsch, Obwohl ich überall das gleich wort geschrieben hab ("Job")
"getElementData(player,Job,1)" so mache ich immer, Sonst nie anders.
Data muss einen String enthalten.. -
Element Datas sind in der Regel nicht Vertrauenswürdig da sie von Clienten Modifiziert werden können.
Diese werden dann Automatisch mit dem Server sychronisiert, sodass Element Datas niemals für sensible Daten wie Adminlevel o.Ä. verwendet werden sollten.Eine Serverseitige Tabelle, wie im Vio Script vorhanden ist, gleicht die Element-Datas ab und hat somit eine "sichere" Version der Element-Datas.
Da das Vio Script allerdings komplett inperformant gescriptet wurde und so ziemlich alles Falsch gemacht wurde was man Falsch machen kann, kann ich die Funktion jedoch nicht empfehlen.Wenn du das Thema Tabellen in Lua verstanden hast, wirst du schnell merken wie man diese Daten in einer Tabelle speichert. Dazu kannst du dir ein paar Tutorials anschauen.
Schon klar, jedoch sind bei mir die ElementDatas in einer Tabelle ( elementData = {} ) gespeichert, was bezweckt also diese Tabelle
serverseitig wirklich und was ist an dieser Tabelle falsch ? -
Hey liebes Forum,
habe mich zum Thema VIO allgemein so ein wenig durchgelesen.
Nun ist mir zu Ohren gekommen, VIO sei unsicher bzw. ausnutzbar aufgrund seiner getElementData
Function (vioGetElementData etc.), da dies zwar zur Sicherheit dienen sollte aber nicht vollkommen ist, weswegen es
so gut wirkt als wäre es gar nicht da.Nun meine Frage, da die Lösung wäre die ElementDatas in eine Tabelle zu speichern, habe ich jetzt die
Frage wie das gehen soll, ich kann mir nicht vorstellen was genau wie in eine Tabelle gespeichert werden soll
bei ElementData, könnte mir das einer näher beibringen oder zeigen, wäre echt dankbarGruß
-
Danke für eure Hilfe!
Aber dieser Rotz ist ja voll verbuggt...
Kaum ein Button geht dabei...
Und der Befehl /newhouse geht auch nicht.
Dieser "Rotz" ist auch für Leute die Scripten oder anfangen wollen, welche
sich in die Sachen einlesen und die Errors sich anschauen um versuchen dies zu beheben.
Dieses Forum kann dir dann dabei helfen, jedoch kann das Forum auch nicht dein Server verwalten.. -
Lua
Alles anzeigen--außerhalb deiner Funktion local oldMoney = 0 local money = 0 local lp = getLocalPlayer() -- ^^ -- in deiner RenderFunktion local currentMoney = getPlayerMoney(lp) if currentMoney ~= oldMoney then if currentMoney < oldMoney then -- Geld wird weniger money = money-1 money = oldMoney else -- Geld wird mehr money = money+1 money = oldMoney end end -- deine Geldanzeige dxDrawText(money,...)
Vielen dank, MasterM!Diese Zeile sollte man vielleicht weglassen:
Da das Geld ja sonst immer wieder auf 0 gesetzt wird und es ein endloser Kreislauf ist ^^.
Klappt so weit gut, Problem ist nur, was ist wenn ich 70.000 auf der Hand habe, dann dauert dies ja entsprechend lange,
kann man das bei onClientRender, sofern man eine größere Summe hat etwas verschnellern ? -
Du erstellst Serverseitig eine Tabelle oder speicherst deine Werte in Element-Datas (also vioSetElementData). Du musst dann in die entsprechenden Funktionen (z.B. wenn wer im Gangwar getötet wird) Die Werte updaten, also z.B. so:
Lua--Anfang der krassen Funktion für die Kills vioSetElementData(killer,"gangwar_kills",vioGetElementData(killer,"gangwar_kills")+1) -- killer ist der Mörder -- weiteres Zeug der Funktion
Mit der Damage-Anzeige: omPlayerDamage gibt dir einen loss-Parameter zurück, der ist eine Zahl von 1-100, wie viel der Spieler eben Leben verliert hat.
Super, vielen dank! -
Heyho liebe Community,
Ich habe vor eine Gangwar HUD zu erstellen, was auch relativ simpel wäre,
Jedoch fehlen mir noch 2 wichtige Faktoren, die ich nicht
Mir vorstellen kann, wie dies gehen soll.1.: Kills im Gangwar berechnen:
Die HUD soll auch anzeigen, wie viel Kills selber
Man im Gangwar gemacht hat.2.: Damage Counter:
Zudem soll sie anzeigen wie viel Damage man insgesamt
Geleistet hat.Ich freue mich über jede Antwort
-
Du könntest statt "onClientRender"noch "onClientHUDRender" (wird vor dem rendern der GUI ausgeführt) oder "onClientPreRender" verwenden.
Beides versucht, dennoch ist die GUI Hinter der HUD... -
Angenehmen Abend liebe Community,
ich habe eine HUD, die logischerweise auf DxDraw aufbaut und mit
"onClientRender" ausgeführt wird.Ich habe jedoch nun ein Problem, dass wenn ich eine GUI öffne die HUD VOR der GUI ist.
Was muss ich tun um die HUD HINTER die GUI zu plazieren ? -
Du kannst keine fps setzten nur ein limit wieviel fps ein spieler haben kann.
Das meine ich ja auch. Dennoch ist es ja immer noch dasselbe Problem, dass das Limit nicht gesetzt
wird und es straight immer 50 bleibt.. -
Mit einem GUI müsstest du die Funktion setFPSLimit nutzen (Clientseitig).
Oder du öffnest die Konsole (F8) und gibst fps_limit=60 ein (60 ist dabei ein Beispiel).Bei beidem gilt, es geht nicht über die Serverseitig eingestellte FPS.
Hey danke für die Antwort, leider klappt das nicht.. Die
FPS Anzahl wird immer wieder auf 50 gesetzt, egal welche FPS ich eingebe, obwohl
die maximale FPS anzahl des Servers 65 beträgt.
Ich habe das testweise mit einem Command gemacht, da ich es
für ein Script brauche.Lua
Alles anzeigenfunction setnewfps ( value ) setFPSLimit ( 60 ) getnewfps () end addCommandHandler ("setfps", setnewfps) function getnewfps () local getFPS = tostring ( getFPSLimit () ) outputChatBox ( getFPS, 180, 0, 0) end addCommandHandler ("getfps",getnewfps)
Jedoch wird bei eingabe des "setfps" Commands nie die FPS auf 60 gesetzt... -
Hey liebes MTA Forum,
gibt es eine Einstellung womit der Spieler Ingame seine clientseitige FPS Anzahl setzen kann.
Also bspw. per GUI vom Server die die gewünschte FPS setzen.Wäre dankbar
-
Hallo MTA-SA,
Ich bin dabei gerade eine HUD zu animieren, da ich es mit "onClientRender" mache gibt es ein
Problem, sofern man die gebindete Taste für das animieren zu oft drückt sozusagen Spamt,
dann kommt der Client nicht hinterher und es bugt. Ich habe jetzt im Wiki nichts gefunden, aber kann
ich irgendwie abfragen ob bereits ein Event gesetzt wurde ?Gruß