Beiträge von Jeffry

    format(string,sizeof(string),"Name: %s (ID: %i) | Ort: %s | Situation: %s",SpielerName(i),i,ZoneName(i),GetPVarString(i,"NotfallCallGrund", lengt, 150));
    zu:
    GetPVarString(i,"NotfallCallGrund", lengt, 150);
    format(string,sizeof(string),"Name: %s (ID: %i) | Ort: %s | Situation: %s",SpielerName(i),i,ZoneName(i),lengt);

    if(strlen(inputtext) < 4)return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Anmeldung", "Es wurde kein Account unter diesem namen gefunden!", "Anmelden", "Abbrechen");

    Du musst die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen. https://wiki.sa-mp.com/wiki/TextDrawTextSize Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.


    Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist TextDrawTextSize-X = 120 + 64 = 184.
    Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre TextDrawTextSize-Y = 24.

    Das habe ich gesehen, daher ja die besagte Änderung. ;)
    Du kannst den Spieler nicht aus dem SpectateMode spawnen, der muss erst (also vor dem Register) beendet werden. Das SpawnPlayer kannst du auch ganz weg machen, da das Beenden des SpectateModus den Spieler automatisch spawnt.

    Dann füge das hier bitte mal direkt unter den Includes ein und poste was dann im Server Log steht, wenn du dich einloggst und der Score dann nicht stimmt.
    stock test_SetPlayerScore(playerid, score)
    {
    printf("Setze Score für playerid %d zu %d.", playerid, score);
    return SetPlayerScore(playerid, score);
    }


    #if defined _HOOK_SetPlayerScore
    #undef SetPlayerScore
    #else
    #define _HOOK_SetPlayerScore
    #endif
    #define SetPlayerScore test_SetPlayerScore

    Weil dann müsste ich doch die komplette Stadt neu mappen um diese Objekte nach unten zu Fahren und Problem da wäre das Wasser ist ja nicht Überall in LS zb Wird alles nach Unten Gefahren doch da befindet sich doch kein Wasser?


    Du müsstest rein theoretisch alles über der Meer-Fläche neu aufbauen. Das macht aber keinen Sinn, denn da geht wohl jeder Streamer in die Knie ^^
    Sowas bietet sich nur für kleinere Maps an, wenn man das machen will.

    Versuche es so:
    if(dialogid == DIALOG_REGISTER)
    {
    if(response == 0)
    {
    SelectTextDraw(playerid, 0xE18C30FF);
    return 1;
    }
    if(response == 1)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Grau,"Du hast kein Passwort in das Feld geschrieben !");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registrierung","Bitte gib dein gewünschtes Passwort ein:","Register","Zurück");
    return 1;
    }
    else
    {
    //Hier noch SetSpawnInfo verwenden, falls nirgends sonst zuvor verwendet.
    TogglePlayerSpectating(playerid,false);
    Register(playerid,inputtext);
    for(new i; i != _:tData; ++i)TextDrawHideForPlayer(playerid,Intro[tData:i]);
    return 1;
    }
    }
    }

    public OnPlayerText(playerid, text[])
    {
    new string[145],Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    if(GetPVarInt(playerid,"NeedMedic") == 1)
    {
    SendClientMessage(playerid,ROT,"Du kannst wärend du tot bist nicht reden.");
    return 0;
    }
    if(SpielerInfo[playerid][pLogIn] == 0)
    {
    SendClientMessage(playerid,ROT,"Du kannst nicht schreiben du bist nicht eingeloggt.");
    return 0;
    }
    if(SpielerInfo[playerid][pPrisonTime] >= 1)
    {
    SendClientMessage(playerid,ROT,"Du kannst im Prison nicht reden.");
    return 0;
    }
    format(string,sizeof(string),"%s sagt: %s",SpielerName(playerid),text);
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(IsPlayerInRangeOfPoint(i,20,X,Y,Z))
    {
    SendClientMessage(i,WEIS,string);
    }
    }
    return 0;
    }
    Versuche es so.

    Dann musst du es herausfinden.
    Gehe in deinen Server und registriere ein neues Konto, stehen dann die Daten in der Datei? Wenn ja, logge dich aus, stehen die aktualisierten Daten dann drin? Wenn ja, logge dich ein und wieder aus, was steht dann drin?

    Ok, das passt.
    Dann debugge es so und poste dann nochmal was im Server Log steht, wenn du den Befehl ausführst:
    CMD:duty(playerid,params[])
    {
    printf("%d / %d / %d", IsPlayerInRangeOfPoint(playerid, 3.0 ,1525.7338,-1674.2052,5.8906), IsPlayerInRangeOfPoint(playerid, 3.0 , 235.6204,115.2621,1003.2188), Spieler[playerid][fraktion]);
    if(IsPlayerInRangeOfPoint(playerid, 3.0 ,1525.7338,-1674.2052,5.8906))
    {
    printf("Nahe 1");
    if(Spieler[playerid][fraktion] == 1)
    {
    printf("Fraktion 1");
    new string[128];
    format(string,sizeof(string),"{FF9900}Polizist : %s ist nun im Dienst!",ReadName(playerid));
    printf("string: %s", string);
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    printf("ok");
    }
    }
    else if(IsPlayerInRangeOfPoint(playerid, 3.0 , 235.6204,115.2621,1003.2188))
    {
    printf("Nahe 2");
    if(Spieler[playerid][fraktion] == 2)
    {
    printf("Fraktion 2");
    new string[128];
    format(string, sizeof(string),"{FF9900}FBI Agent : %s ist nun im Dienst!",ReadName(playerid));
    printf("string: %s", string);
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    printf("ok");
    }
    }
    printf("Ende");
    return 1;
    }

    Laut Log ist alles korrekt.
    Du müsstest die FBI-Nachricht sehen. Falls du sie nicht siehst: Hast du eine mehrzeilige Meldung im Compiler mit vielen Zahlen?

    Dann teste es so und poste dann was im Server Log steht, wenn du den Befehl eingibst:
    CMD:duty(playerid,params[])
    {
    printf("%d / %d / %d", IsPlayerInRangeOfPoint(playerid, 3.0 ,1525.7338,-1674.2052,5.8906), IsPlayerInRangeOfPoint(playerid, 3.0 , 235.6204,115.2621,1003.2188), Spieler[playerid][fraktion]);
    if(IsPlayerInRangeOfPoint(playerid, 3.0 ,1525.7338,-1674.2052,5.8906))
    {
    if(Spieler[playerid][fraktion] == 1)
    {
    new string[128];
    format(string,sizeof(string),"{FF9900}Polizist : %s ist nun im Dienst!",ReadName(playerid));
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    else if(IsPlayerInRangeOfPoint(playerid, 3.0 , 235.6204,115.2621,1003.2188))
    {
    if(Spieler[playerid][fraktion] == 2)
    {
    new string[128];
    format(string, sizeof(string),"{FF9900}FBI Agent : %s ist nun im Dienst!",ReadName(playerid));
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    return 1;
    }

    Dann erhöhe mal den Umkreis, 1 ist relativ wenig.
    CMD:duty(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0 ,1525.7338,-1674.2052,5.8906))
    {
    if(Spieler[playerid][fraktion] == 1)
    {
    new string[128];
    format(string,sizeof(string),"{FF9900}Polizist : %s ist nun im Dienst!",ReadName(playerid));
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    else if(IsPlayerInRangeOfPoint(playerid, 3.0 , 235.6204,115.2621,1003.2188))
    {
    if(Spieler[playerid][fraktion] == 2)
    {
    new string[128];
    format(string, sizeof(string),"{FF9900}FBI Agent : %s ist nun im Dienst!",ReadName(playerid));
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    return 1;
    }

    Die Schleife ist dort nicht richtig.
    CMD:duty(playerid,params[])
    {
    if(IsPlayerInRangeOfPoint(playerid, 1.0 ,1525.7338,-1674.2052,5.8906))
    {
    if(Spieler[playerid][fraktion] == 1)
    {
    new string[128];
    format(string,sizeof(string),"{FF9900}Polizist : %s ist nun im Dienst!",ReadName(playerid));
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    else if(IsPlayerInRangeOfPoint(playerid, 1.0 , 235.6204,115.2621,1003.2188))
    {
    if(Spieler[playerid][fraktion] == 2)
    {
    new string[128];
    format(string, sizeof(string),"{FF9900}FBI Agent : %s ist nun im Dienst!",ReadName(playerid));
    SendClientMessageToAll(COLOR_ADMIN, string);
    Spieler[playerid][duty] = 1;
    dutycheck(playerid);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    return 1;
    }