Angepinnt [SAMMELTHEMA] Nützliche Funktionen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [SAMMELTHEMA] Nützliche Funktionen

      Hallo Leute,

      Hier könnt ihr nützliche selbst geschriebene oder umgeschriebene Funktionen posten (auch überschriebene Standardfunktionen). Bitte vergesst nicht zu jeder Funktion eine kleine Erklärung zu schreiben, damit jeder weiß, was die einzelnen Funktionen bewirken!

      Gruß Tockra

      PS: Ich werde selbst auch einige Funktionen hinzufügen, wenn ich mehr Zeit habe!

      €dit:

      LUA-Quellcode

      1. function mysql_save ( strings )
      2. if(not strings) then
      3. return error("MySQL_Save > no argument",2)
      4. end
      5. return mysql_escape_string ( MYSQLDATENBANK, tostring(strings) )
      6. end

      Diese Funktionen ersparrt die eingabe des "langen" mysql_escape_string" Commands und die Angabe der Datenbank.

      LUA-Quellcode

      1. local aspam = {}
      2. function antiSpam(player,theTime)
      3. if(getElementType(player) ~= "player") then
      4. return error("antiSpam > arg #1 not a player",2)
      5. end
      6. if(not theTime) then theTime = 500 end
      7. if(tonumber(aspam[player])) then
      8. if(getTickCount () - aspam[player] > theTime) then
      9. aspam[player]= getTickCount ()
      10. return true
      11. end
      12. return false
      13. else
      14. aspam[player]= getTickCount()
      15. return false
      16. end
      17. end
      Alles anzeigen

      Diese Funktion ist eine kleine Antispam Funktion. Man kann z.B. vor einer langen MYSQL-Abfrage folgendes packen:

      LUA-Quellcode

      1. if(not antiSpam(player)) then
      2. return false
      3. end

      Hier wird überprüft, ob mind. 500 Millisekunden seit dem letzten Aufruf von antiSpam vergangen sind.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tockra ()

    • Server:
      Man kann dieses Script nehmen um einen Spieler an einem part vom namen zu erkennen.
      Farbcodes sind auch "ausradiert".
      Sollte dann so aussehen.
      local targetPlayer = getPlayerByNamePart (commandstingfürnnamen)
      ...getPlayerName(targetPlayer)

      LUA-Quellcode

      1. function getPlayerByNamePart (namePart)
      2. namePart = string.lower(namePart)
      3. local bestaccuracy = 0
      4. local foundPlayer, b, e
      5. for _,player in ipairs(getElementsByType("player")) do
      6. b,e = string.find(string.lower(string.gsub(getPlayerName(player), "#%x%x%x%x%x%x", "")), namePart)
      7. if b and e then
      8. if e-b > bestaccuracy then
      9. bestaccuracy = e-b
      10. foundPlayer = player end
      11. end
      12. end
      13. if (foundPlayer) then
      14. return foundPlayer
      15. else
      16. return false
      17. end
      18. end
      Alles anzeigen
      Ich muss mal schnell outside attacken
    • Gibt die Möglichkeit den Namen des Spielers ohne Colorcodes zu bekommen.

      LUA-Quellcode

      1. _getPlayerName = getPlayerName;
      2. function getPlayerName(player, withColors)
      3. local name = _getPlayerName(player);
      4. if (not withColors) then name = name:gsub("#%x%x%x%x%x%x", ""); end
      5. return name;
      6. end


      Gibt ein zufälliges Element aus der Table zurück (klappt nur mit durchnummerierten Tablen)

      LUA-Quellcode

      1. function getRandomElement(tab)
      2. return (tab[math.random(#tab)]);
      3. end


      Überprüft ob ein String eine Zahl ist.

      LUA-Quellcode

      1. function isNumeric(string)
      2. return (tonumber(string) ~= nil);
      3. end
    • withColors ist auch keine Funktion, sondern eine Variable bzw ein Parameter.
      function getPlayerName(player, withColors)


      Gibt einen Spieler oder eine Tabelle mit Spielern anhand eines Teilnamens zurück. Weiterhin kann man auch in einem bestimmten Umkreis um einen Punkt oder um ein Element suchen lassen.

      LUA-Quellcode

      1. function getPlayerFromName2(name, rangeXorEle, rangeYorDistance, rangeZ, distance)
      2. if not name then return nil end
      3. local ptable = getElementsByType("player")
      4. if rangeXorEle then -- Reichweitenbeschränkung aktiv
      5. local col
      6. if isElement(rangeXorEle) then
      7. col = createColSphere(getElementPosition(rangeXorEle), rangeYorDistance)
      8. else
      9. col = createColSphere(rangeXorEle, rangeYorDistance, rangeZ, distance)
      10. end
      11. ptable = getElementsWithinColShape(col, "player")
      12. end
      13. local player = getPlayerFromName(name)
      14. if player then
      15. return player
      16. end
      17. name = string.lower(name) -- case insensitive :>
      18. local p = {}
      19. for index, player in pairs(getElementsByType("player")) do
      20. if string.find(string.lower(getPlayerName(player)), name) then
      21. p[#p+1] = player
      22. end
      23. end
      24. if #p == 0 then
      25. return nil
      26. elseif #p == 1 then
      27. return p[1]
      28. else
      29. return p
      30. end
      31. end
      Alles anzeigen

      Ein paar Benutzungsbeispiele:

      LUA-Quellcode

      1. -- Spieler auf dem Server: SpielerBA, SpielerBB, PlayerBC
      2. getPlayerFromName2("SpielerB")
      3. -- gibt eine Table { SpielerBA, SpielerBB } zurück
      4. getPlayerFromName2("Player")
      5. -- gibt den Spieler PlayerBC zurück
      6. getPlayerFromName("Spieler", PlayerBC, 50)
      7. -- gibt alle Spieler, deren Namen mit "Spieler" beginnen und sich im Umkreis von 50 Metern zum Spieler PlayerBC befinden zurück.
      8. getPlayerFromName("Spieler", 0, 0, 0, 50)
      9. -- gibt alle Spieler, deren Namen mit "Spieler" beginnen und sich im Umkreis von 50 Metern zum Punkt (0|0|0) befinden zurück.
      Mich per PN bezüglich Freischaltungen zu nerven ist der beste Weg eine Freischaltung zu verhindern.

      neon-gaming.de

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sbx320 ()

    • Server Event "onClientDownloadFinished"
      Clientside:

      LUA-Quellcode

      1. addEventHandler("onClientResourceStart", resourceRoot, function () triggerServerEvent("onClientDownloadFinished", getLocalPlayer()); end);

      Serverside:

      LUA-Quellcode

      1. addEvent("onClientDownloadFinished", true);

      Source Element ist der Spieler der fertig gedownloadet hat.
    • onClickEditLabel

      So, ich eröffne hier mal einen thread und stelle gleich mal mein neues kleines aber feines GUI script vor.
      Die Funktion bewirkt das man ein Label auf Knopfdruck verändern kann.
      Rechtsklick -1 , Linksklick +1 , Middlemouse = changelabel text
      Also Ich werde mal versuchen es übersichtlich wie im Wiki zu machen.
      Die kleine function marwEditLabelGetText ist eig nur für die function an sich wichtig das andrere könnt ihr dann mit guiGetText(float vom create) herraus finden.

      Client-Only function
      Syntax:

      Quellcode

      1. float marwCreateEditLabel(float x, float y, float width, float height, element parent, element changelabel)

      Required Arguments
      • x: A float of the 2D x position of the GUI label on a player's screen. This is affected by the relative argument.
      • y: A float of the 2D y position of the GUI label on a player's screen. This is affected by the relative argument.
      • width: A float of the width of the GUI label. This is affected by the relative argument.
      • height: A float of the height of the GUI label. This is affected by the relative argument.
      • parent: Ein Gui Element auf dem das EditLabel platziert wird.
      Optional Arguments
      • changelabel: Ein Gui Element welches einen Zahlenwert beinhaltet der mit einem "middle" mausklick auf das label geschrieben wird. (ich persönlich brauchte das für ein Inventarsystem)
      Returns
      Gibt das GUI Label, wessen text per Button gesettet wird wieder.

      Source Code:
      Spoiler anzeigen

      LUA-Quellcode

      1. function marwCreateEditLabel (x,y,width,height,parent,changelabel)
      2. local EditLabel = guiCreateLabel(x,y,width,height,"0",true,parent)
      3. local EditEdit = guiCreateButton(x-0.015,y-0.01,width+0.03,height+0.005,"",true,parent)
      4. setElementData(EditEdit,"parentlabel",EditLabel)
      5. if changelabel then
      6. setElementData(EditEdit,"changelabel",changelabel)
      7. end
      8. guiSetAlpha(EditEdit,0)
      9. guiSetFont(EditLabel,"default-bold-small")
      10. guiLabelSetColor(EditLabel,255,153,0)
      11. guiBringToFront (EditEdit)
      12. guiEditSetMaxLength ( EditEdit, 2 )
      13. addEventHandler("onClientGUIClick",EditEdit,marwEditLabelSyncText,false)
      14. return EditLabel
      15. end
      16. function marwEditLabelGetText (element)
      17. local text = guiGetText (element)
      18. if text then
      19. return text
      20. else
      21. return false
      22. end
      23. end
      24. function marwEditLabelSyncText (button,state)
      25. local elementto = getElementData(source,"parentlabel")
      26. local theEditLabelText = guiGetText(elementto)
      27. if (string.lower(theEditLabelText) == "") or tonumber(theEditLabelText) > 0 and tonumber(theEditLabelText) < 99 then
      28. if button == "left" and state == "up" then
      29. guiSetText(elementto,theEditLabelText+1)
      30. elseif button == "right" and state == "up" then
      31. guiSetText(elementto,theEditLabelText-1)
      32. elseif button == "middle" and state == "up" then
      33. local changelabel = getElementData(source,"changelabel")
      34. if changelabel then
      35. local text = marwEditLabelGetText(changelabel)
      36. guiSetText(elementto,text)
      37. end
      38. end
      39. else
      40. if button == "left" and state == "up" then
      41. guiSetText(elementto,1)
      42. elseif button == "right" and state == "up" then
      43. guiSetText(elementto,theEditLabelText)
      44. elseif button == "middle" and state == "up" then
      45. local changelabel = getElementData(source,"changelabel")
      46. if changelabel then
      47. local text = marwEditLabelGetText(changelabel)
      48. guiSetText(elementto,text)
      49. end
      50. end
      51. end
      52. end
      Alles anzeigen


      MFG
      Ich muss mal schnell outside attacken

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von sbx320 ()

    • so hier ein fskin funktion :D

      LUA-Quellcode

      1. function fskin(thePlayer)
      2. local fac = getElementData(thePlayer,"Fraktion")
      3. local rank = getElementData(thePlayer,"Rank")
      4. if (fac == 7) then
      5. if (rank == 0) then
      6. setElementModel(thePlayer, 115)
      7. elseif (rank == 1) then
      8. setElementModel(thePlayer, 116)
      9. elseif (rank == 2) then
      10. setElementModel(thePlayer,104)
      11. elseif (rank == 3) then
      12. setElementModel(thePlayer,108)
      13. elseif (rank == 4) then
      14. setElementModel(thePlayer,110)
      15. elseif (rank == 5) then
      16. setElementModel(thePlayer,174)
      17. end
      18. end
      19. end
      20. addCommandHandler("fskin", fskin)
      Alles anzeigen


      skins sind nur beispiele

      SKIN LISTE
      gtaonline.fr/liste-des-skins-gta-sa.html
      waffen liste gibts in wiki :D waffen kan man mit

      LUA-Quellcode

      1. giveWeapon


      kleines beispiel

      LUA-Quellcode

      1. function fskin(thePlayer)
      2. local fac = getElementData(thePlayer,"Fraktion")
      3. local rank = getElementData(thePlayer,"Rank")
      4. if (fac == 2) then
      5. if (rank == 0) then
      6. setElementModel(thePlayer, 107)
      7. giveWeapon(thePlayer, 4, 200, true)
      8. giveWeapon(thePlayer, 22, 200, true)
      9. elseif (rank == 1) then
      10. setElementModel(thePlayer, 106)
      11. giveWeapon(thePlayer, 4, 250, true)
      12. giveWeapon(thePlayer, 23, 250, true)
      13. giveWeapon(thePlayer, 30, 250, true)
      14. elseif (rank == 2) then
      15. setElementModel(thePlayer,47)
      16. giveWeapon(thePlayer, 4, 300, true)
      17. giveWeapon(thePlayer, 24, 300, true)
      18. giveWeapon(thePlayer, 30, 300, true)
      19. giveWeapon(thePlayer, 25, 300, true)
      20. elseif (rank == 3) then
      21. setElementModel(thePlayer,271)
      22. giveWeapon(thePlayer, 8, 350,true)
      23. giveWeapon(thePlayer, 24, 350,true)
      24. giveWeapon(thePlayer, 31, 350,true)
      25. giveWeapon(thePlayer, 25, 350,true)
      26. elseif (rank == 4) then
      27. setElementModel(thePlayer,105)
      28. giveWeapon(thePlayer, 8, 400,true)
      29. giveWeapon(thePlayer, 24, 400,true)
      30. giveWeapon(thePlayer, 31, 400,true)
      31. giveWeapon(thePlayer, 25, 400,true)
      32. giveWeapon(thePlayer, 34, 400,true)
      33. elseif (rank == 5) then
      34. setElementModel(thePlayer,270)
      35. giveWeapon(thePlayer, 8, 500,true)
      36. giveWeapon(thePlayer, 34, 150,true)
      37. giveWeapon(thePlayer, 24, 500,true)
      38. giveWeapon(thePlayer, 31, 500,true)
      39. giveWeapon(thePlayer, 26, 500,true)
      40. giveWeapon(thePlayer, 34, 500,true)
      41. giveWeapon(thePlayer, 35, 500,true)
      42. giveWeapon(thePlayer, 16, 500,true)
      43. end
      44. end
      45. end
      46. addCommandHandler("fskin", fskin)
      Alles anzeigen



      So ne kleine starthilfe habt ihr :D
      WAS DU HEUTE KANNST BESORGEN DAS VERSCHIEBE STEHTS AUF MORGEN!
      :P
    • Hier kommen meine kleinen Funktionen :D

      Server-Seitig

      Mit den Funktionen, kann man, nunja, steht in der Funktion, denke nicht dass ich das erklären muss :D

      LUA-Quellcode

      1. function giveVehicleBetterEngine(theVehicle)
      2. if(getElementType(theVehicle) == "vehicle") then
      3. if(getVehicleType(theVehicle) == "Boat") then return end
      4. setVehicleHandling(theVehicle, "engineAcceleration", (getVehicleHandling(theVehicle)['engineAcceleration']+5))
      5. setVehicleHandling(theVehicle, "maxVelocity", (getVehicleHandling(theVehicle)['maxVelocity']+15))
      6. end
      7. end
      8. function giveVehiclePanzerung(theVehicle)
      9. if(getElementType(theVehicle) == "vehicle") then
      10. if(tonumber(getVehicleHandling(theVehicle)['collisionDamageMultiplier']) < 0.3) then setVehicleHandling(theVehicle, "collisionDamageMultiplier", 0) else
      11. setVehicleHandling(theVehicle, "collisionDamageMultiplier", (getVehicleHandling(theVehicle)['collisionDamageMultiplier']-0.3))
      12. end
      13. end
      14. end
      Alles anzeigen


      Client & Server

      Diese Funktion gibt das zurzeitige Datum mit der Uhrzeit in dem Format tag.monat.jahr stunde.minute zurück.

      LUA-Quellcode

      1. function getFormatDate()
      2. local time = getRealTime()
      3. local day = time.monthday
      4. local month = time.month+1
      5. local year = time.year+1900
      6. local hour = time.hour
      7. local minute = time.minute
      8. return day.."."..month.."."..year.." "..hour..":"..minute;
      9. end


      Mit der Funktion kann man die Distanz zwischen 2 Elementen rausfinden. Geht schneller als getDistanceBetweenPoints3D.

      LUA-Quellcode

      1. function getDistanceBetweenElements(element1, element2)
      2. local x, y, z = getElementPosition(element1)
      3. local x1, y1, z1 = getElementPosition(element2)
      4. return getDistanceBetweenPoints3D(x, y, z, x1, y1, z1)
      5. end


      Mit den Funktionen kann man einem gewissen Element(Hier nur für Spieler gesagt) eine gewisse Element-Data als Integer erhöhen/abziehen.
      (removePlayerItem ist eigentlich Sinnlos, da man bei givePlayerItem ein negativen Integer angeben kann.)

      LUA-Quellcode

      1. function removePlayerItem(thePlayer, theItem, value)
      2. if(getPlayerName(thePlayer)) then
      3. local data = getElementData(thePlayer, theItem)
      4. if(data) then
      5. if(tonumber(data) ~= nil) then -- Numeric
      6. data = tonumber(getElementData(thePlayer, theItem))
      7. if(data-value < 0) then return end
      8. setElementData(thePlayer, theItem, data-value)
      9. else
      10. setElementData(thePlayer, theItem, data-value)
      11. end
      12. end
      13. end
      14. end
      15. function givePlayerItem(thePlayer, theItem, value)
      16. if(getPlayerName(thePlayer)) then
      17. local data = getElementData(thePlayer, theItem)
      18. if(data) then
      19. if(tonumber(data) ~= nil) then -- Numeric
      20. data = tonumber(getElementData(thePlayer, theItem))
      21. setElementData(thePlayer, theItem, data+value)
      22. else
      23. setElementData(thePlayer, theItem, data+value)
      24. end
      25. end
      26. end
      27. end
      Alles anzeigen


      Client-Seitig
      Mit der Funktion kann man einem gewissen Auto Ghostmode verpassen.

      LUA-Quellcode

      1. function disableGhostMode(vehicle)
      2. local x, y, z = getElementPosition(vehicle)
      3. local col = createColSphere(x, y, z, 10)
      4. if(#getElementsWithinColShape(col, "vehicle") > 1) then setTimer(disableGhostMode, 1000, 1, vehicle) destroyElement(col) else
      5. destroyElement(col)
      6. setElementAlpha(vehicle, 255)
      7. for index, car in pairs(getElementsByType("vehicle")) do
      8. setElementCollidableWith ( vehicle, car, true )
      9. end
      10. end
      11. end
      12. local pGhostTimer = {}
      13. function set_ghostmode(vehicle)
      14. if(isTimer(pGhostTimer[vehicle])) then killTimer(pGhostTimer[vehicle]) end
      15. setElementAlpha(vehicle, 150)
      16. for index, car in pairs(getElementsByType("vehicle")) do
      17. setElementCollidableWith ( vehicle, car, false )
      18. end
      19. local veh = vehicle
      20. pGhostTimer[vehicle] = setTimer(disableGhostMode, 7500, 1, veh)
      21. end
      22. addEvent("onGhostmodeSet", true)
      23. addEventHandler("onGhostmodeSet", getRootElement(), set_ghostmode)
      Alles anzeigen

      (Falls fehler kommen, bitte sagen, einmal war da was Faul :P)
      mfg
      [Blockierte Grafik: http://i.imgur.com/526C4Hj.png] Mit freundlichen Grüßen,
      Noneatme
      WEBSITE | GITHUB | STACKOVERFLOW | E-MAIL | DONATE