[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
  • Hast du noch einen anderen Command Prozessor im Code, außer ocmd?


    Setze bitte mal einen Print direkt als erstes vor die erste if-Abfrage im Befehl.
    Wird diese im Server Log angezeigt? Wenn nein, dann wird der Befehl gar nicht aufgerufen, das heißt er wird durch irgendetwas anderes (z.B. einen anderen Command Prozessor) blockiert.

  • Hey, hab glaub schon mal hier wegen dem Problem geschrieben.


    Es geht um SetPlayerMarkerForPlayer. Es sollen nur Marker für Spieler gesetzt werden die sich im selben Team befinden (GetPlayerTeam).


    Folgendes Problem: Manchmal erhalten die Teammitglieder auch Marker aber manchmal nicht


    Hab das mit einem Timer geschrieben der nach 1 Sekunde die Marker setzen soll.


    Code (runtergebrochen) :



    public OnPlayerSpawn(playerid){
    SetTimerEx("ShowFactionTeamMarker", 1000, 0, "i", playerid);
    return 1;
    }


    forward ShowFactionTeamMarker(playerid);
    public ShowFactionTeamMarker(playerid){
    for(new i = 0; i < MAX_PLAYERS; i++){
    if(!IsPlayerConnected(i))continue;

    if(GetPlayerTeam(playerid) == GetPlayerTeam(i)){
    SetPlayerMarkerForPlayer(playerid, i, 0xFF00FFFF);
    SetPlayerMarkerForPlayer(i, playerid, 0xFF00FFFF);
    }
    }
    return 1;
    }

  • Manchmal erhalten die Teammitglieder auch Marker aber manchmal nicht

    Hmm, ist schwer dir da so zu helfen, da der Code eigentlich korrekt aussieht.


    Du musst einfach mal mit prints prüfen, ob das auch immer aufgerufen wird und ob GetPlayerTeam auch immer das richtige Ergebnis liefert :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ist halt für jeden Spieler der den Server betritt ein Timer.


    Was hast du denn genau vor?

  • Es sollen für Spieler die im selbem Team sind (GetPlayerTeam) Marker gesetzt werden (SetPlayerMarkerForPlayer). Siehe ein paar Posts weiter oben.


    Hab es schon bei OnPlayerSpawn  versucht aber es ist buggy. (laut SA-MP Forum funktioniert das auch nicht vernünftig in dem Callback, frag mich nicht wieso)

  • SetTimerEx("OnSomethingToDo", 1000, "i", playerid);

    Wiederholend oder einmalig? Das fehlt hier nämlich.


    Einmalig wäre so:
    SetTimerEx("OnSomethingToDo", 1000, false, "i", playerid);
    Das ist von der Performance überhaupt kein Problem, da es ja nur ein Aufruf ist, das spielt keine Rolle wann und wo du den machst.


    Wiederholend wäre so:
    SetTimerEx("OnSomethingToDo", 1000, true, "i", playerid);
    Da würde allerdings ein einziger Timer mehr Sinn machen, mit einem Loop durch alle Spieler.


    Bei der genannten Anforderung gehe ich aber davon aus, dass es sich um einen einmaligen Aufruf handelt, sprich die erste Variante.


  • Leider die zweite Variante. Der Timer soll Loopen. Habe es jetzt so implementiert, dass der Timer nur beim betreten der Arena (DM Script) erstellt wird und gelöscht wenn der Spieler die Arena verlässt.
    Somit läuft der Timer nicht permanent (?).

  • Jemand eine Ahnung, wie ich die anklickbare Größe der Boxen einfach herausfinden kann? Die ganzen Tutorials hier zu, sind mir echt zu kompliziert.
    GUI_Login[playerid][3] = CreatePlayerTextDraw(playerid, 459.745239, 253.500000, "usebox");
    PlayerTextDrawLetterSize(playerid, GUI_Login[playerid][3], 0.000000, 2.340741);
    PlayerTextDrawTextSize(playerid, GUI_Login[playerid][3], 331.587097, 0.000000);
    PlayerTextDrawAlignment(playerid, GUI_Login[playerid][3], 1);
    PlayerTextDrawColor(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawUseBox(playerid, GUI_Login[playerid][3], true);
    PlayerTextDrawBoxColor(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawSetShadow(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawSetOutline(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawFont(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawSetSelectable(playerid, GUI_Login[playerid][3], 1);

  • Habe schon lange nicht mehr mit TextDraws gearbeitet, aber soweit ich mich erinnern kann musst du mit PlayerTextDrawTextSize(playerid, GUI_Login[playerid][3], 331.587097, 0.000000); den anklickbaren Bereich definieren.
    In deinem Fall ist die Höhe bei 0.0.

    Richtig, so weit bin ich auch schon. Aber meines Wissens nach ist es nicht getan, lediglich die Y Achse für die Höhe zu ändern.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen