[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • @Dr. Frauenarzt Jap. Funktioniert?

    es steht dann das ich in ein Aktiven SUpport bin. wen ich das weg mache also ausklammer und mit /sup antworten möchte geht es nicht

  • Wo liegt hier der Fehler? Betroffene Zeile markiert.

    case DIALOG_TAFELEINSTEXT:
    {
    if(response)
    {
    if(strlen(inputtext) && strlen(inputtext) > 60)
    {
    new string[128];
    new wtafel = TafelID[playerid];
    new text = strval(inputtext);
    if(!IsPlayerInRangeOfPoint(playerid,50.0,Werbetafeln[wtafel][wtafelx],Werbetafeln[wtafel][wtafely],Werbetafeln[wtafel][wtafelz]))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an der angegebenen Werbetafel!");
    format(string,sizeof(string),"Du hast den Text der Werbetafel %i auf '%s' umgeändert.",wtafel,text);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    strmid(Werbetafeln[wtafel][wtafeltext],text,0,strlen(text),sizeof(text)); // <-- Fehlerzeile
    DestroyDynamicObject(Werbetafelobject[wtafel]);
    Werbetafelobject[wtafel] = CreateDynamicObject(Werbetafeln[wtafel][wtafelobjectid],Werbetafeln[wtafel][wtafelx],Werbetafeln[wtafel][wtafely],Werbetafeln[wtafel][wtafelz],Werbetafeln[wtafel][wtafelxrot],Werbetafeln[wtafel][wtafelyrot],Werbetafeln[wtafel][wtafelzrot]);
    SetDynamicObjectMaterialText(Werbetafelobject[wtafel],Werbetafeln[wtafel][wtafeltmindex],Werbetafeln[wtafel][wtafeltext],Werbetafeln[wtafel][wtafeltmsize],Werbetafeln[wtafel][wtafeltfonts],Werbetafeln[wtafel][wtafeltfontsize],Werbetafeln[wtafel][wtafeltbold],Werbetafeln[wtafel][wtafeltfontcolor],Werbetafeln[wtafel][wtafeltbackcolor],Werbetafeln[wtafel][wtafeltaligment]);
    }
    }
    }


    Code
    error 035: argument type mismatch (argument 2)
  • @Dr. Frauenarzt willst du da dein eigenes Ticket annehmen?


    Weil der der das Ticket sendet bekommt die Variable pReportActive auf 1 gesetzt. Und wenn diese auf 1 ist (weil du zum Beispiel gerade ein Ticket gesendet hast) kannst du selbst das Ticket nicht annehmen.


    @Speezy du gibst für "new text" keine länge an (zb "new text[28]") was man ja glaub ich in SA:MP machen muss damit das ein String ist oder?

  • @Dr. Frauenarzt willst du da dein eigenes Ticket annehmen?


    Weil der der das Ticket sendet bekommt die Variable pReportActive auf 1 gesetzt. Und wenn diese auf 1 ist (weil du zum Beispiel gerade ein Ticket gesendet hast) kannst du selbst das Ticket nicht annehmen.


    @Speezy du gibst für "new text" keine länge an (zb "new text[28]") was man ja glaub ich in SA:MP machen muss damit das ein String ist oder?

    man kann per areport das ticket annehmen.


    So aber das problem ist man konnt vorher schreiben !Text. so ich wollte es mit /sup machen das man mit /sup ein Ticket erstellt und ein Admin es mit /areport annimmt. so aber das man mit /sup auch antworten kann.

  • Wie fragt man am besten ab ob der Spieler zum Fahrzeug gedreht ist? Wie z.B. bei einem Kofferraum System.

    Da kannst du einen Trick anwenden und einfach prüfen ob der Spieler ungefähr die selbe ZAngle wie das Auto hat

    Das reicht nicht, da kann der Spieler auch vor dem Fahrzeug stehen, und von dem Fahrzeug weg schauen, dann schaut er laut deinem Code auch auf den Kofferraum.


    Hier die beiden Funktionen, die notwendig sind, um das korrekt zu überprüfen:
    Einmal um das nächste Fahrzeug zu finden:
    stock GetClosestVehicleID(playerid, Float:dist = 10000.0) //©Jeffry
    {
    new Float:tmp, Float:x, Float:y, Float:z, id = INVALID_VEHICLE_ID;
    for(new i = 0; i < MAX_VEHICLES; i++)
    {
    if(GetVehiclePos(i, x, y, z))
    {
    tmp = GetPlayerDistanceFromPoint(playerid, x, y, z);
    if(tmp <= dist)
    {
    dist = tmp;
    id = i;
    }
    }
    }
    return id;
    }


    Und dann die Funktion um zu prüfen, ob der Spieler hinter dem Fahrzeug ist, und auf den Kofferraum schaut.
    stock IsPlayerBehindVeh(playerid, vehicleid) //©Jeffry
    {
    new Float:a, Float:vx, Float:vy, Float:vz, Float:x, Float:y, Float:z, Float:pa, Float:px, Float:py, Float:pz;
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, vx, vy, vz);
    GetVehicleZAngle(vehicleid, a);
    GetVehiclePos(vehicleid, x, y, z);
    GetPlayerPos(playerid, px, py, pz);
    x += (-vy/2.0 * floatsin(-a, degrees));
    y += (-vy/2.0 * floatcos(-a, degrees));
    if(IsPlayerInRangeOfPoint(playerid, vx/2.0, x, y, z) && pz <= (z+vz/2.0))
    {
    GetPlayerFacingAngle(playerid, pa);
    if(floatabs(pa-a) < 45 || floatabs(pa-a) > 315)
    {
    return true;
    }
    }
    return false;
    }


    Anbei ein Beispiel zur Nutzung:
    new vehicleid = GetClosestVehicleID(playerid);
    if(IsPlayerBehindVeh(playerid, vehicleid))
    {
    //Spieler ist am Kofferraum
    }
    else
    {
    //Spieler ist nicht am Kofferraum
    }

  • Nope, keinerlei Änderung, auch wenn ich es als

    Nutze "inputtext":
    case DIALOG_TAFELEINSTEXT:
    {
    if(response)
    {
    if(strlen(inputtext) && strlen(inputtext) > 60)
    {
    new string[128];
    new wtafel = TafelID[playerid];
    if(!IsPlayerInRangeOfPoint(playerid,50.0,Werbetafeln[wtafel][wtafelx],Werbetafeln[wtafel][wtafely],Werbetafeln[wtafel][wtafelz]))return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an der angegebenen Werbetafel!");
    format(string,sizeof(string),"Du hast den Text der Werbetafel %i auf '%s' umgeändert.",wtafel,inputtext);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    format(Werbetafeln[wtafel][wtafeltext],60,inputtext);
    DestroyDynamicObject(Werbetafelobject[wtafel]);
    Werbetafelobject[wtafel] = CreateDynamicObject(Werbetafeln[wtafel][wtafelobjectid],Werbetafeln[wtafel][wtafelx],Werbetafeln[wtafel][wtafely],Werbetafeln[wtafel][wtafelz],Werbetafeln[wtafel][wtafelxrot],Werbetafeln[wtafel][wtafelyrot],Werbetafeln[wtafel][wtafelzrot]);
    SetDynamicObjectMaterialText(Werbetafelobject[wtafel],Werbetafeln[wtafel][wtafeltmindex],Werbetafeln[wtafel][wtafeltext],Werbetafeln[wtafel][wtafeltmsize],Werbetafeln[wtafel][wtafeltfonts],Werbetafeln[wtafel][wtafeltfontsize],Werbetafeln[wtafel][wtafeltbold],Werbetafeln[wtafel][wtafeltfontcolor],Werbetafeln[wtafel][wtafeltbackcolor],Werbetafeln[wtafel][wtafeltaligment]);
    }
    }
    }

  • @SaschaLois






  • Hallo,


    Ich hab ein Problem wen ich das Auto kaufe sollte eig das ShowTutorial angezeigt werden wird zwar angezeigt aber beim Text steht Error

  • @Dr. Frauenarzt zu deinem ersten Problem: Sende mal überall wo die Spielervariable pReportActive auf 1 gesetzt wird eine Nachricht oder ein print damit du siehst wann bzw wo die Variable auf 1 gesetzt wird.


    zu deinem 2. Problem: Wie sieht denn "ShowTutorial" aus? Funktioniert die Funktion wo anders im Script?

  • @Dr. Frauenarzt zu deinem ersten Problem: Sende mal überall wo die Spielervariable pReportActive auf 1 gesetzt wird eine Nachricht oder ein print damit du siehst wann bzw wo die Variable auf 1 gesetzt wird.


    zu deinem 2. Problem: Wie sieht denn "ShowTutorial" aus? Funktioniert die Funktion wo anders im Script?





    @SaschaLois






    Da wird es überall auf 1 gesetzt.



    Ja,


    Wen man sich neu Registriert und spawnt wird ihm ein Textdraw angezeigt.
    somit muss er Checkpoints ablaufen und wird ihm immer ein neuer Text angezeigt.
    nur das beim Autokauf Funktioniert nicht. Der Rest Funktioniert

  • Der Befehl klappt super, aber wenn ich z.B. 3 Punkte schreibe, werden nur 2 wiedergegeben, wieso?


    //Edit: Weiß einer von euch woran das liegt? @Jeffry @Kaliber

    Einmal editiert, zuletzt von Jadeclon ()

  • Wie kann man es machen, dass man kein Geld Cheaten kann?
    Gibt es da eine simple Lösung?

    Eine Variable machen & vor jedem GivePlayerMoney(); die Variable auf 1 setzen. Ein Timer muss dann nurnoch jede Sekunde abfragen ob jemand Geld bekommen hat, wenn ja -> War die Variable auf 1 ? Wenn nein -> Ban


    Oder du machst einen neuen GivePlayerMoney Befehl der die Variable automatisch auf 1 setzt.