Scripting! Anfänger.

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich habe eine Frage und zwar, möchte ich das man InGame zum Beispiel /blabla eingibt und eine Waffen ID erhält, und ein Satz dazu im Chat auftaucht.


    Ich habe es schon probiert, doch dann, wenn man sich bewegt hat, würde der Befehl schon ausgeführt.


    Eigentlich sollte sowas einfach sein, doch bin ziemlicher Anfänger.

  • Es ist eigendlich ganz einfach.



    Schritt 1:
    Ganz oben im Script, erstellst du dir eine Farbe (#define [Farbname] [Farbcode] << Farbcode erhältst du auf dem sa-mp Collor picker.


    Schritt 2:
    Du gehst zu "public OnPlayerCommandText(playerid, cmdtext[])" dort trägst du dann folgendes ein (Bitte entsprechend ändern).
    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,WaffenID,Munition);
    SendClientMessage(playerid,Farbe,"Nachricht");
    return 1;
    }


    Schritt 3:
    Einfach auf deinen Server gehen und testen..


    PS: Die WaffenID bekommst du indem du in Google einfach nach "samp Waffen ids" suchst.

  • Jetzt kommt das
    E:\GTA - San Andreas\Pawno\abc.pwn(65703) : error 021: symbol already defined: "OnPlayerCommandText"
    E:\GTA - San Andreas\Pawno\abc.pwn(65705) : error 017: undefined symbol "WaffenID"
    E:\GTA - San Andreas\Pawno\abc.pwn(65709) : warning 209: function "OnPlayerCommandText" should return a value
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    public OnPlayerCommandText(playerid, cmdtext[]) gab es bei mir nicht, also habe das ganz unten eingefügt.


    Achja ist es möglich bei Hitsound noch die Value anzeigen zu lassen InGame z.b über dem Kopf -9 HP.


    Das Script:


    public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
    {
    PlayerPlaySound(issuerid,17802,0.0,0.0,0.0);
    PlayerPlaySound(playerid,17802,0.0,0.0,0.0);
    return 1;
    }


  • So muss das sein:
    public OnPlayerCommandText(playerid, cmdtext[]
    {
    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,WEAPON_DEAGLE,100);
    SendClientMessage(playerid,Farbe,"Du hast dir selbst eine Deagle mit 100 Schuss gegebenn");
    return 1;
    }
    return 0;
    }


    //Edit anscheinend gibts OnPlayerCommandText schon, such mal im Script, oder drück STRG + F und gib in der Suchleiste: "OnPlayerCommandText" ein ohne die Anführungszeichen ;)

  • Nun kommt:


    E:\GTA - San Andreas\Pawno\NPR.pwn(65702) : error 001: expected token: ")", but found "{"
    E:\GTA - San Andreas\Pawno\NPR.pwn(65702) : error 021: symbol already defined: "OnPlayerCommandText"
    E:\GTA - San Andreas\Pawno\NPR.pwn(65709) : warning 217: loose indentation
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    Habe das { durch ( ersetzt nun kommt das:


    E:\GTA - San Andreas\Pawno\NPR.pwn(65703) : error 021: symbol already defined: "OnPlayerCommandText"
    E:\GTA - San Andreas\Pawno\NPR.pwn(65709) : warning 209: function "OnPlayerCommandText" should return a value
    E:\GTA - San Andreas\Pawno\NPR.pwn(65709) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.

  • Merke dir für die Zukunft: Wenn du die Errrors postet, poste bitte auch gleich die Zeilen, in denen die Fehler auftreten.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • public OnPlayerCommandText(playerid, cmdtext[]
    )
    if (strcmp("/blabla",cmdtext,true,10)==0) //error 021: symbol already defined: "OnPlayerCommandText"
    {
    GivePlayerWeapon(playerid,WEAPON_DEAGLE,100);
    SendClientMessage(playerid,Farbe,"Du hast dir selbst eine Deagle mit 100 Schuss gegebenn");
    return 1;
    }
    return 0; // warning 209: function "OnPlayerCommandText" should return a value , error 010: invalid function or declaration
    }

  • public OnPlayerCommandText(playerid, cmdtext[]) gab es bei mir nicht, also habe das ganz unten eingefügt.

    Sehr unwahrscheinlich. Eventuell heißt es bei dir Function OnPlayerCommandText.
    Bei WaffenID sollst du die ID der Waffe eingeben. Die kannst du unter Weapons - SA-MP Wiki nachschlagen. Bei Munition dann die Anzahl der Anzahl der Schüsse, sprich 200 für 200 Schuss.


    Beispiel:

    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,24,14); //Die 24 steht für "Desert Eagle", wie du in der SA-MP Wiki nachschlagen kannst. Die 14 steht für Anzahl der Schüsse. Da die Desert Eagle (Deagle) 7 Schuss pro Magazin hat, hätte man nun in der Anzeige im Interface stehen "7-7" sprich 7 Schuss im Magazin und 7 Schuss zum nachladen.
    return 1;
    }


    Bei der SendClientMessage sind ebenfalls noch offene Parameter. Diese während Farbe und "Nachricht" wenn man es so nehmen will. Bei Farbe trägst du einen Farbcode ein. Benutze dau am besten den SA-MP Colorpicker.


    Beispiel 2:

    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,24,14); //Die 24 steht für "Desert Eagle", wie du in der SA-MP Wiki nachschlagen kannst. Die 14 steht für Anzahl der Schüsse. Da die Desert Eagle (Deagle) 7 Schuss pro Magazin hat, hätte man nun in der Anzeige im Interface stehen "7-7" sprich 7 Schuss im Magazin und 7 Schuss zum nachladen.
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast eine Desert Eagle (Deagle) mit 14 Schuss erhalten."); // Dieses 0xFFFFFFFF ist der Farbcode, der gerade für weiß steht. In den Anführungszeichen steht dann die Nachricht.
    return 1;
    }


    Beachte das ein public immer einen Wert wieder geben muss, bzw. returnen muss. Das wäre zum Beispiel return 1; oder return 0;. Wir schreiben nun also den Befehl in einem public, natürlich in den CommandText public, damit SA-MP auch erkennt das es ein Befehl war.


    Fertiger Code:

    public OnPlayerCommandText(playerid, cmdtext[]
    {
    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,24,14); //Die 24 steht für "Desert Eagle", wie du in der SA-MP Wiki nachschlagen kannst. Die 14 steht für Anzahl der Schüsse. Da die Desert Eagle (Deagle) 7 Schuss pro Magazin hat, hätte man nun in der Anzeige im Interface stehen "7-7" sprich 7 Schuss im Magazin und 7 Schuss zum nachladen.
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast eine Desert Eagle (Deagle) mit 14 Schuss erhalten."); // Dieses 0xFFFFFFFF ist der Farbcode, der gerade für weiß steht. In den Anführungszeichen steht dann die Nachricht.
    return 1;
    }
    return 0; //Hier bzw. außerhalb der { } Klammern kommt das return vom public rein. Das return 0; bedeutet das wenn man nun einen Befehl eingibt der nicht existiert ein "SERVER: Unknown Command" kommt.
    }


    Hoffe konnte dir helfen und es einigermaßen erklären :love:

  • Danke schon mal :)


    public OnPlayerCommandText(playerid, cmdtext[]
    {//error 001: expected token: ")", but found "{" , error 021: symbol already defined: "OnPlayerCommandText"
    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,24,14);
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast eine Desert Eagle (Deagle) mit 14 Schuss erhalten."); // warning 217: loose indentation
    return 1; // warning 217: loose indentation
    }
    return 0;
    }

  • public OnPlayerCommandText(playerid, cmdtext[]) //Klammer hat gefehlt{//error 001: expected token: ")", but found "{" , error 021: symbol already defined: "OnPlayerCommandText"
    if (strcmp("/blabla",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,24,14);
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast eine Desert Eagle (Deagle) mit 14 Schuss erhalten."); // warning 217: loose indentation
    return 1; // warning 217: loose indentation
    }
    return 0; }Die anderen beiden Errors sind wahrscheinlich dadurch entstanden, weil du nicht ordentlich eingerückt hast.

  • public OnPlayerCommandText(playerid, cmdtext[]) //Habe hier noch eine Klammer eingefügt.
    { // error 021: symbol already defined: "OnPlayerCommandText"
    if (strcmp("/waffegeben",cmdtext,true,10)==0)
    {
    GivePlayerWeapon(playerid,24,14);
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast eine Desert Eagle (Deagle) mit 14 Schuss erhalten.");
    return 1;
    }
    return 0;
    }


    Oder wäre das als Filterscript einfacher?

  • Ich empfehle dir mit Youtube Videos und einem Selfmade anzufangen, viel einfacher und erklärreicher.
    Mit einem GF, das über 50.000 Zeilen hat, kannst du nicht als Anfänger überblicken. Mach dein eigenes Selfmade mit eigenem
    Konzept, dann ist das schon sehr gut von dir !
    Zu deinem Fehler kann ich dir nicht viel sagen, da dir schon sehr viel geholfen worden ist !


    Mfg,

  • Ganz einfach. Erstell dir ein neues Script.
    Dann drückst du 'Strg + F' und gibst dort ein 'OnPlayerCommandText'.


    public OnPlayerCommandText(playerid, cmdtext[]
    {
    if (strcmp("/waffe",cmdtext,true,10)==0) // Kannst du noch verändern wie du möchtst
    {
    GivePlayerWeapon(playerid,24,100); // 24 steht für die Deagle , 100 steht für die Munition. Kannst du auch ändern, die IDs kriegst du von deinem Google freund.
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast eine Deagle von Gott erhalten."); // Das ist die Nachricht die er bekommt.
    return 1;
    }
    return 0;
    }