Beiträge von Edgar

    Beim eingeben des Thread-Titels gab es 2 Vorschläge, einmal ein Filterscript und eine Server Vorstellung.
    Bei Google habe ich auch schon einiges eingegeben.


    Das komische ist aber auch das laut der Beschreibung vom Wiki es die aktuelle Position nehmen sollte...

    Das liegt am Streamer - vermutlich.
    Das rendern der Objecte dauert etwas je weiter die Person weg ist.
    Ich würde dir raten einfach ein Object mit CreateObject anstatt
    CreateDynamicObject als Boden hinzu mappen.

    Danke für deine Antwort,
    das Problem ist nur das ich das Object nicht da positioniert habe wo ich es haben will, ich positioniere es ja InGame.
    Es wird ja ein Text auf das Object attached und ich möchte das es perfekt an der Wand positioniert ist, dass kann
    ich - denke ich - nicht mit dem Editor machen, zudem möchte ich es generell inGame möglich haben, es sollte ein
    Dynamisches System werden womit man die Position des Object's verändert und es dann gespeichert wird.
    Wie schon oben erwähnt ist das einzige was nicht geht das mit der aktuellen Position auslesen.

    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.