Beiträge von Edgar

    Hallo zusammen,
    ich habe derzeit ein Problem, und zwar, wenn ich ein Object erstelle
    //Variablen str, font, size und ID sind oben via sscanf angegeben und werden auch abgefragt.
    GetPlayerPos(playerid, X, Y, Z);
    SprayObj[0] = CreateDynamicObject(ID, X+0.5, Y+0.5, Z, 0.0, 0.0, 0.0);
    EditDynamicObject(playerid, SprayObj[0]);
    SetDynamicObjectMaterialText(SprayObj[0], 0, str, OBJECT_MATERIAL_SIZE_256x128, font, size, 1, 0xD70000FF, 0, 0);
    und es dann über
    EditDynamicObject(playerid, SprayObj[0]);
    neu positionieren möchte und danach
    new Float:x, Float:y, Float:z, Float:zx, Float:zy, Float:zz, str[280];
    GetDynamicObjectPos(SprayObj[0], x, y, z);
    GetDynamicObjectRot(SprayObj[0], zx, zy, zz);
    format(str, sizeof str, "X: %f, Y: %f, Z: %f - XR: %f, YR: %f, ZR: %f",x, y, z, zx, zy, zz);
    echo(playerid, cRed, str);
    die Position ausgeben möchte gibt er mir die Position an wo das Object erstellt wurde nicht wo es sich derzeit befindet,
    ist das so gewollt oder mache ich was falsch? Wenn ja, wie kann ich die aktuelle Position herausfinden?


    Edit:
    Ich habe soeben bemerkt das es auch mit CreateObject, EditObject und GetObjectPos auch nicht geht, liegt also nicht am Streamer.


    Mit freundlichen Grüßen

    ocmd:arrest(playerid,params[])
    {
    if(gTeam[playerid] == TEAM_COPS)
    {
    new pID;
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,ROT, "Benutzung: /arrest [ID]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, ROT, "Der Spieler ist nicht online!");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(pID, x, y, z);
    if(IsPlayerInRangeOfPoint(pID,5.0, x,y,z)) {
    if(GetPlayerWantedLevel(pID) >=5)
    {
    new strg[250];
    new arname[MAX_PLAYER_NAME];
    new copname[MAX_PLAYER_NAME];
    GetPlayerName(pID, arname,sizeof(arname));
    GetPlayerName(playerid,copname, sizeof(copname));
    format(strg, sizeof(strg), "Knast-Info: %s wurde von Officer %s Eingesperrt!", arname,copname);
    SetPlayerInterior(pID, 3);
    SetPlayerPos(pID, 194.0580,175.4876,1003.0234);
    SendClientMessageToAll(ROT, strg);
    SendClientMessage(pID, ROT, "Ein Cop hat dich verhaftet und du wurdest eingesperrt! (( 20 Sekunden ))");
    GivePlayerMoney(playerid, 5000);
    timerkill = SetTimerEx("Knast", 20000, false,"i", pID );
    ResetPlayerWeapons(pID);
    SetPlayerWantedLevel(pID, 0);
    SetPlayerColor(pID, WEISS);
    knasted[pID] = 1;
    return 1;
    }
    else SendClientMessage(playerid, ROT, "Der Spieler hat zu wenig Wanteds! Stelle ihm ein Ticket mit /ticket aus!");
    }
    else SendClientMessage(playerid, ROT, "Spieler ist nicht in der Nähe!");
    }
    else SendClientMessage(playerid, ROT, "Du bist kein Cop!");
    return 1;
    }


    So sollte es wohl besser funktionieren.
    Zur For-Schleife:
    Eine For-Schleife ist eine Schleife die sooft wie du es angibst ausgeführt wirst, Beispiel:
    for(new i = 0; i < MAX_PLAYERS; i++)
    heißt
    for(new Variable ist 0; Variable ist kleiner als MAX_PLAYERS; variable wird um 1 erhöht)
    Damit kannst du z.B alle Spieler, Fahrzeuge oder Erstellten Häuser - je nachdem wie dein System ist - abzählen.

    So wie ich es habe sollte es richtig sein, das "VARIABLE VOM RANGNAME" da musst du deine Funktion What ever einfügen.
    Wie lautet denn dein Adminrank Variable und die einzellnen Adminranknamen?


    new AdutyLabel[MAX_PLAYERS]; // Oben definieren
    //:________________________:
    Aduty[playerid] = 1;
    new LabelStr[180], string[128], alvl[64], name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(LabelStr, sizeof LabelStr, "%s OnDuty", VARIABLE VOM RANGNAMEN);
    AdutyLabel[playerid] = Create3DTextLabel(LabelStr, 0x0A00FFFF,0.0,0.0,0.0, 20.0, 0, 0);
    Attach3DTextLabelToPlayer(AdutyLabel[playerid], playerid, 0.0, 0.0, 0.4);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    SetPlayerColor(playerid,RED);
    SetPlayerSkin(playerid,217);
    ShowPlayerMarkers(1);


    Ungetestet sollte aber gehen.
    Haupt Fehler war SetPlayerHealth.

    Ich denke das es daran liegt:


    Du sagst ja auch, das dieses Textdraw eine Box ist und keine Schrift
    TextDrawUseBox(Usebox,1);


    Du must für den Text ein extra Textdraw machen.

    Schwachsinn, man kann ein Textdraw erstellen und eine Box in den Hintergrund legen, dafür braucht man kein extra Textdraw.


    b2t:
    Funktioniert es denn jetzt?
    Das Forum meldet mir:
    Achtung! Dieses Thema wurde als erledigt markiert. Bitte erstellen Sie ggf. ein neues Thema.

    Hey,


    mach mal bei allen "if(!strcmp(tmp,"***",true))" das Ausrufezeichen weg. Dann sollte es gehen :)


    MfG StreetFX

    Bitte schau dir doch mal die Grundfunktion von strcmp im SA-MP Wiki an.



    Sein Problem ist:
    Wenn ich zb. /service Medic eingebe zeigt er mir diesen Text an.
    INFO: /service [Taxi/Oamt/ADAC/Medic/SAPD]



    Sprich, es wird hier return:
    if(sscanf(params,"s[128]",tmp))return SendClientMessage(playerid,grau,"INFO: /service [Taxi/Oamt/ADAC/Medic/SAPD]");
    Somit kommen wir wieder zu meinem Post zurück:
    Schau dir diese Zeile an
    if(sscanf(params,"s[128]",tmp))return SendClientMessage(playerid,grau,"INFO: /service [Taxi/Oamt/ADAC/Medic/SAPD]");


    Bei deine, Params brauchst du die String Länge nicht anzugeben.. Sprich


    if(sscanf(params,"s",tmp))return SendClientMessage(playerid,grau,"INFO: /service [Taxi/Oamt/ADAC/Medic/SAPD]");

    Schau dir diese Zeile an
    if(sscanf(params,"s[128]",tmp))return SendClientMessage(playerid,grau,"INFO: /service [Taxi/Oamt/ADAC/Medic/SAPD]");


    Bei deine, Params brauchst du die String Länge nicht anzugeben.. Sprich


    if(sscanf(params,"s",tmp))return SendClientMessage(playerid,grau,"INFO: /service [Taxi/Oamt/ADAC/Medic/SAPD]");

    Ich glaube zwar nicht das du alles gelesen hast was ich geschrieben habe, aber es ist Ja nicht mein System
    das ich beheben muss :whistling:.


    if(clickedid == BlitzerMenu20)
    {
    if(BlitzerInfo[blitzerid[playerid]][Geschwindigkeit] <= 30 || BlitzerInfo[blitzerid[playerid]][Geschwindigkeit] >= 280)
    return SendClientMessage(playerid,WHITE,"Fehler, die Werte sind zu niedrig bzw zu hoch!");
    BlitzerInfo[blitzerid[playerid]][Strafe] -= 10;
    new string[64];
    format(string,sizeof(string),"%d KM/H",BlitzerInfo[blitzerid[playerid]][Strafe]);
    TextDrawHideForPlayer(playerid,BlitzerMenu22);
    TextDrawSetString(BlitzerMenu22,string);
    TextDrawShowForPlayer(playerid,BlitzerMenu22);
    }


    Versuch dies mal so, wenn dies geht ändere deine anderen Abfragen auch so.

    Hey,
    schau mal hier was im WIKI steht

    Code
    (Text:text, Float:x, Float:y)
    textThe TextDraw to set the size of.
    xThe size on the X axis (left/right) following the same 640x480 grid as TextDrawCreate.
    yThe size on the Y axis (up/down) following the same 640x480 grid as TextDrawCreate.


    Du hast - egal was für eine Auflösung du hast, ein 640x480 großen Bildschirm.
    Hier ist ein Beispiel wie du das setzen musst.
    TextDrawCreate(X, Y, "Text");
    Mit TextDrawCreate setzt du die Anfangspositionen der Box und den Text,
    mit X bestimmst ab wo die Box von Links an anfangt und
    mit Y bestimmst ab wo die Box von Oben an anfangt.


    TextDrawTextSize(Variable, X, Y);

    mit X bestimmst bis wohin die Box von Links an geht und
    mit Y bestimmst bis wohin die Box von Oben an geht, sprich du
    bestimmst nicht die Pixelgröße wie bei einem Bild sonder die Position
    bis wohin die Box gehen soll, hast du also
    TextDrawCreate(200, 300, "Text"); und TextDrawTextSize(Variable, 250, 250);
    ist die Box 50 x 50 groß. Ich hoffe du hast dies so verstanden :).
    Ich würde in deinem Fall es mal so versuchen, bin mir aber nicht sicher ob die Größe denn so passt,
    dass musst du dann noch verbessern.

    BlitzerMenu = TextDrawCreate(0, 142.122222, "usebox");

    TextDrawTextSize(BlitzerMenu, 220, 0.000000);

    Wie gesagt du musst die noch etwas anpassen.


    Hier meinte ich natürlich das du einer Variable nicht 2 Verte abfragen kannst, Dies hier heißt ja:
    wenn Geschwindigkeit 30 - größer ist UND Geschwindigkeit 280 - kleiner ist.
    Sprich es muss 30 oder größer sein und 280 oder kleiner, dass ist aber nicht möglich da es eine Variable ist.
    Was genau möchtest du mit dieser if Abfrage bezwecken? Soll der Zähler dann stoppen?

    BlitzerInfo[blitzerid[playerid]][Geschwindigkeit] >= 30 && BlitzerInfo[blitzerid[playerid]][Geschwindigkeit] <= 280

    Ach Ja, an deiner Stelle würde ich die Text:Variable auf eine Spielervariable ändern Text:Variable[MAX_PLAYERS], ich vermute
    diese Blitzerbox sollen alle aufrufen können die im PD sind, wenn du und ich diese Box gleichzeitig auf haben und ich den Preis
    runter setze und dann dann wieder hoch schneiden sich die beiden Werte.

    Hey,
    schau dir mal diese Zeile an, und den ersten Parameter.
    "-2.000000" das geht bis ganz nach unten.
    TextDrawTextSize wird genutzt um die größe des Inhaltes/ Boxes zu bestimmen,
    aber nicht wie groß es sein soll, sonder bis wohin die Box hin geht, sprich
    TextDrawTextSize(XX, 50, 500); -> Die Box ist nicht 50px x 500px groß sonder geht
    auf deinem Bildschirm auf die Position 50 x 500. Komisch erklärt ^^ aber eigentlich leicht zu verstehen.

    TextDrawTextSize(BlitzerMenu, -2.000000, 0.000000);

    Nun dazu, ich bin mir nicht sicher was genau das bezwecken soll, aber du kannst eine Variable nicht gleichzeitig 2 Werte geben.

    BlitzerInfo[blitzerid[playerid]][Geschwindigkeit] >= 30 && BlitzerInfo[blitzerid[playerid]][Geschwindigkeit] <= 280

    Ich würde den Forum admins mal Raten besser hinzuschauen, es gab vor nicht zu länger zeit schon ein fall mit solch einem Tool, der damaliger Thread erstellen hatte dann alle ftp Daten
    Und diese Bewertung sieht stark nach der damaligen aus.