Beiträge von Jeffry

    So sollte es passen:
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(!ispassenger)
    {
    for(new i=0; i<sizeof(carInfo); i++)
    {
    if(vehicleid == carInfo[i][id_x])
    {
    for(new k=0; k<sizeof(keyInfo); k++)
    {
    if(keyInfo[k][k_id] == carInfo[i][db_id])
    {
    if(keyInfo[k][besitzer] == sInfo[playerid][db_id])
    {
    return 1;
    }
    }
    }
    TogglePlayerControllable(playerid,false),
    TogglePlayerControllable(playerid,true);
    return SendClientMessage(playerid,COLOR_RED,"Du hast keinen Schlüssel für das Fahrzeug!"),
    }
    }
    }
    return 1;
    }

    Problem 1:
    Wie sieht dann jetzt dein LoadVehicles aus? Weil zu anfangs hat es ja geklappt, oder? Also, bevor du /opark machst.


    Problem 2:
    Für welchen Befehl, zum Beispiel, musst du dich reloggen, damit du ihn wieder verwenden kannst, nachdem du das Fahrzeug freigekauft hast?

    Ja, das ist egal. Ich schreibe es der Übersichtlichkeit halber immer so, du kannst es aber auch in eine Zeile schreiben, das macht keinen Unterschied.
    Übrigens ist das keine "Case-Schleife" sondern ein "switch". ;)

    Keine 5 Stunden mehr bis zum "Samsung Galaxy Unpacked 2015" aus Barcelona.


    Hier ist der offizielle Live-Stream:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    So, das mit dem Einsteigen sollte so passen:
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(GetVehicleFrak(vehicleid) != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1)
    {
    SendClientMessage(playerid,hinweis1,"Du hast keinen Schlüssel!");
    TogglePlayerControllable(playerid,false);
    TogglePlayerControllable(playerid,true);
    }
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new frak = GetVehicleFrak(vehicleid);
    if(frak != -1 && frak != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1)
    {
    if(frak == 1) SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
    else if(frak == 2) SendClientMessage(playerid, hinweis1, "Du bist kein Sanitäter/Arzt!");
    return RemovePlayerFromVehicle(playerid);
    }
    }
    return 1;
    }


    Mit dieser Funktion:
    stock GetVehicleFrak(vehid)
    {
    new idx = -1;
    for(new i=0; i<sizeof(VehInfo); i++)
    {
    if(VehInfo[i][veh_ID] == vehid)
    {
    idx = i;
    break;
    }
    }
    if(idx == -1) return -1;
    return VehInfo[idx][Fraktion];
    }


    Teste das mal.


    Und was meinst du bei dem /opark? Kannst du den Befehl bitte posten und erklären, was da nicht geht?

    Man muss, wenn man keinen Streamer verwendet, die Position des Spielers mit der des Checkpoints vergleichen:
    public OnPlayerSpawn(playerid)
    {
    SetPlayerCheckpoint(playerid,1430.5883,-1735.9539,13.0885,4);
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    DisablePlayerCheckpoint(playerid);
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 1430.5883,-1735.9539,13.0885))
    {
    SetPlayerCheckpoint(playerid,1535.0945,-1668.1747,13.0868,4);
    SendClientMessage(playerid,rot,"2punkt");
    }
    else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1535.0945,-1668.1747,13.0868))
    {
    SetPlayerCheckpoint(playerid,1488.4778,-1588.9446,13.0875,4);
    SendClientMessage(playerid,rot,"Nächster Punkt");
    }
    else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1488.4778,-1588.9446,13.0875))
    {
    SetPlayerCheckpoint(playerid,1424.7736,-1672.6342,13.1667,4);
    SendClientMessage(playerid,rot,"nächster punkt");
    }
    else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1424.7736,-1672.6342,13.1667))
    {
    SetPlayerCheckpoint(playerid,1453.7714,-1737.3793,13.1674,4);
    SendClientMessage(playerid,rot,"zum letzten punkt");
    }
    else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1453.7714,-1737.3793,13.1674))
    {
    SendClientMessage(playerid,rot,"Ende");
    }
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }

    Der Code muss so aussehen:
    if (strcmp("/deagle", cmdtext, true) == 0)
    {
    if(PlayerInDM[playerid] == 0)
    {
    new name[MAX_PLAYER_NAME], germanstring[100], englishstring[100];
    GetPlayerName(playerid, name, sizeof(name));
    if(PlayersInDeagle < 10)
    {
    if(PlayerInDeagle[playerid] == 0) //Zeile 1440
    {
    switch(random(10)+1)
    {
    case 1:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
    }
    case 2:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
    }
    case 3:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
    }
    case 4:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
    }
    case 5:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,328.4060400);/*unten*/
    }
    case 6:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
    }
    case 7:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
    }
    case 8:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
    }
    case 9:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
    }
    case 10:
    {
    SetPlayerPos(playerid,4945.6430700,-4108.7656300,528.4060400);/*weiter oben*/
    }
    }
    PlayerInDM[playerid] = 1;
    PlayerInDeagle[playerid] = 1;
    PlayersInDeagle ++; // Zeile 1463
    SendPlayerMessage(playerid, GREEN, "Zur Deagle Arena teleportiert.", "Teleported to deagle cage.");
    format(germanstring,sizeof(germanstring),"%s hat sich zur Deagle Arena teleportiert. (/deagle)",name);
    format(englishstring,sizeof(englishstring),"%s teleported to deagle cage. (/deagle)",name);
    SendAllPlayerMessage(LIGHTBLUE, germanstring, englishstring);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 0);
    GivePlayerWeapon(playerid, 24, 500);
    }
    }
    else
    {
    SendPlayerMessage(playerid, RED, "Die Deagle Arena ist voll!", "The deagle cage is full!");
    }
    }
    else
    {
    SendPlayerMessage(playerid, RED, "Du bist schon im DM!", "You already in dm!");
    }
    return 1;
    }


    if (strcmp("/exit", cmdtext, true) == 0)
    {
    if(PlayerInDM[playerid] == 1)
    {
    PlayerInDM[playerid] = 0;
    if(PlayerInDeagle[playerid] == 1)
    {
    PlayersInDeagle --;
    PlayerInDeagle[playerid] = 0;
    }
    else if(PlayerInMinigun[playerid] == 1)
    {
    PlayerInMinigun[playerid] = 0;
    PlayersInMinigun --;
    }
    SpawnPlayer(playerid);
    }
    else
    {
    SendPlayerMessage(playerid, RED, "Du bist nicht im DM oder Rennen!", "You are not in dm or race!");
    }
    return 1;
    }
    return 0;
    }


    Und die Deklarationen so:
    new PlayerInDM[MAX_PLAYERS];
    new PlayerInDeagle[MAX_PLAYERS];
    new PlayerInMinigun[MAX_PLAYERS];
    new PlayersInDeagle;
    new PlayersInMinigun;

    Nicht unbedingt Apokrate. Das geht auch ohne.
    Ich denke, du hast es nicht richtig definiert.


    So funktioniert es ohne Probleme:
    #define FORUMURL "www.test.de"
    #define TEAMSPEAKIP "123.456.789.0"
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp("/serverinfo",cmdtext,true))
    {
    new str[300];
    format(str,sizeof str,"{FFFFFF}Owner MrCompany || Simon\nTeamSpeak Inhaber: MrCompany || Simon\nForum Inhaber: MrCompany || Simon");
    format(str,sizeof str,"%s\n{FFFFFF}Scripter: MrCompany\nScript Version:{FF00FF} %s{FFFFFF}\nForumadresse: %s\nTeamSpeak³ IP: %s",str,FORUMURL,TEAMSPEAKIP);
    ShowPlayerDialog(playerid,108,DIALOG_STYLE_MSGBOX,"Serverinformation",str,"Fertig","");
    return 1;
    }
    return 0;
    }

    SQL
    SELECT pVerheiratet FROM user WHERE name = '%s';


    Dann das result auslesen und abfragen ob strlen größer als 1 ist. Wenn ja, dann ist er verheiratet, wenn nein, dann nicht.


    Sinnvoller wäre es natürlich das beim Login zu laden, und dann nur abzufragen:
    if(strlen(pVerheiratetName)>1) //verheiratet
    else //nicht verheiratet

    Aha! Dann muss es entweder unter OnPlayerStateChange hin, oder so:
    printf("Vor GetFrakVehicleIdx: %d", GetPlayerVehicleID(playerid));
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    zu:
    printf("Vor GetFrakVehicleIdx: %d", vehicleid);
    new i = GetFrakVehicleIdx(vehicleid);


    Denn bei OnPlayerEnterVehicle ist der Spieler noch nicht im Fahrzeug.

    Dann wurde das Fahrzeug in das du einsteigst nicht mit deinem LoadVehicles Code erstellt. Diese Dinge funktionieren ja nur mit den Fahrzeugen, die mit LoadVehicles erstellt worden sind, bzw. mit dem Code davon.

    Schreibe den Teil mal so und poste dann was im Server Log steht, wenn du in das Fahrzeug, das abgeschleppt ist, einsteigst:
    printf("Vor GetFrakVehicleIdx: %d", GetPlayerVehicleID(playerid));
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    printf("i: %d", i);
    if(i != -1)
    {
    printf("Abgeschleppt: %d", VehInfo[i][Abgeschleppt]);
    if(VehInfo[i][Abgeschleppt] == 1)
    {
    new string[145];
    format(string, sizeof(string),"Preis %i€ \nGrund: %s",VehInfo[i][Preis],VehInfo[i][Grund]);
    printf("string: %s", string);
    ShowPlayerDialog(playerid,DIALOG_aPARK,DIALOG_STYLE_MSGBOX,"Strafzettel",string,"Freikaufen","Abbrechen") ;
    }
    }
    Falls gar nichts kommt, poste bitte das gesamte Callback (public) unter dem das steht.



    (Um das andere Problem kümmern wir uns danach.)

    Problem 1:
    Vergessen habe ich es nicht, ich habe nur einen Teil hinzugefügt, sollst ja das Prinzip lernen, damit du es in Zukunft alleine schaffst. :)
    GetPlayerPos(playerid,NeuX,NeuY,NeuZ,NeuR);
    zu:
    GetVehiclePos(GetPlayerVehicleID(playerid),NeuX,NeuY,NeuZ);
    GetVehicleZAngle(GetPlayerVehicleID(playerid),NeuR);
    Der Rest sollte passen.


    Problem 2:
    Was meinst du mit, dass es bei New spawnt? Wo/Wann?


    Problem 3:
    So:
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    if(i != -1)
    {
    if(VehInfo[i][Abgeschleppt] == 1)
    {
    new string[145];
    format(string, sizeof(string),"|Strafzettel| Preis %i€ Grund: %s",VehInfo[i][Preis],VehInfo[i][Grund],);
    SendClientMessage(playerid, Color_Green, string);
    }
    }


    Problem 4:
    Ist das bei Problem 2 gemeint? Bzw, steht das beim LoadVehicles? Wenn ja, dann so:
    if(VehInfo[i][Abgeschleppt] != 1)
    {
    VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
    }
    else
    {
    VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][NewX],VehInfo[i][NewY],VehInfo[i][NewZ],VehInfo[i][NewR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
    }