Beiträge von Jeffry

    if(strcmp(cmd,"/rac",true) == 0)
    {
    if(sDatei[playerid][pAdmin] >= 4)
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    if(!IsPlayerInVehicle(playerid,v))
    {
    SetVehicleToRespawn(v);
    }
    }
    SetTimer("SetAllFrakVehiclesAngle",1000,false);
    }
    else SendClientMessage(playerid,COLOR_GRAU," Fehler: Du bist kein Admin!");
    return 1;
    }



    forward SetAllFrakVehiclesAngle();
    public SetAllFrakVehiclesAngle()
    {
    for(new i = 0; i < sizeof(LSPDcar); i++)
    {
    if(LSPDcar[i])
    {
    new bool:inside;
    for(new p=0; p<MAX_PLAYERS; p++) if(IsPlayerInVehicle(p, LSPDcar[i])) inside = true;
    if(!inside) SetVehicleZAngle(LSPDcar[i],Fraktautos[i][1][fposa]);
    }
    }
    return 1;
    }


    Schreibe es mal so.

    Nimm den "root" Benutzer ohne Passwort.


    #define MYSQL_HOST "localhost"
    #define MYSQL_USER "root"
    #define MYSQL_PASS ""
    #define MYSQL_DATA "DATENBANKNAME"


    Das ist in 99% aller Fälle standardmäßig so eingestellt.
    Dein user "samp" wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner) so eingestellt, standardmäßig zumindest.
    Deshalb benutze, wie ich oben geschrieben habe, den root - User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben.


    Falls das nicht klappt, poste bitte den Log der gespeichert wird, wenn du die Verbindung aufbaust.

    mal angenommen, ich würde nen Timer benutzen.. wie erstell ich den am besten? ich versuchs grad mit 750 Milliseconds, aber es kommt glaube kein effekt.
    wiegesagt, es geht ja um die ZAngle.


    Kannst es ja mal noch höher setzen, dann neben das Auto laufen und warten bis der Timer aufgerufen wird (lass dir eine Nachricht ausgeben).


    Falls es nicht klappt, steige mal ein und teste dann ob es geht.
    => Wenn ja: Dann kannst das mit dem Timer vergessen, da die Funktion dann nicht aufgerufen werden kann, wenn kein Spieler im Auto war, nach dem Respawn.


    Ich würde dir trotzdem raten, es einfach mit den paar Funktionen zu machen, und auf SetVehicleToRespawn zu verzichten, gibt weniger Fehler und schont die CPU.

    Da kürzlich in einem Thread angesprochen, hier einen für alle User funktionsfähigen "Mixer".


    stock MixString(string[]) //©Jeffry
    {
    new mixed[256], len = strlen(string), rand;
    for(new i=0; i<len; i++)
    {
    rand = random(len-i);
    mixed[i] = string[rand];
    strdel(string, rand, rand+1);
    }
    return mixed;
    }


    Beispiel zur Nutzung:

    Spoiler anzeigen
    for(new i=0; i<5; i++) print(MixString("abcdefghijklmnopqrstuvmxyz"));

    Spoiler anzeigen
    Ausgabe:

    Zitat
    Spoiler anzeigen

    [13/10/2014 19:33:22] hlaobizfyptqjdkgnrxvcmmesu
    [13/10/2014 19:33:22] cugdfkjpanmhrzeoivmtsxbyql
    [13/10/2014 19:33:22] drftmqoixklhzsbuanjmgyecpv
    [13/10/2014 19:33:22] gfkusdpryaneojbmqzmiclhxtv
    [13/10/2014 19:33:22] ckpyidtnvfrahejzmlgxmqbsou


    Keywords: MixString, StringMix, Mixer, durcheinander, mischen, mix, random, zufällige Reihenfolge, Buchstabensalat.

    So habe ich dir den Code aber nicht gegeben. 8|


    forward CheckGas();
    public CheckGas()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerNPC(i)) continue;
    new veh = GetPlayerVehicleID(i), string[32];
    if(veh)
    {
    new Float:ST[4];
    GetVehicleVelocity(veh,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) / 1000.0;
    Kilometer[veh] += ST[3];
    format(string, sizeof string, "Kilometer: %d Km", floatround(Kilometer[veh]));
    TextDrawSetString(Tacho7[i],string);
    }
    }
    new engine,lights,alarm,doors,bonnet,boot,objective;
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine)
    {
    if(!MotorSystemMotor[veh]) continue;
    Gas[i]--;
    if(Gas[veh] <= 0)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    MotorSystemMotor[veh] = false;
    for(new p=0; p<MAX_PLAYERS; p++) if(GetPlayerVehicleID(p) == veh) SendClientMessage(p, COLOR_YELLOW, "Boardcomputer: Tank leer, der Motor ist abgestorben.");
    }
    }
    }
    return 1;
    }

    Hier zeigt er mir error 017: undefined symbol "dialogid" an, da "dialogid" in UpdateUtemInDialog ja nicht definiert ist.


    COMMAND:dm1(playerid, params[])
    {
    new Random = random(sizeof(RandomSpawnsDM1)),
    pName[MAX_PLAYER_NAME],
    stringDE[128],
    stringEN[128];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(stringDE, sizeof(stringDE), "»DEATHMATCH« {%06x}%s "#C_DM_E"hat das DM1 betreten! [/DM1]", GetPlayerColor(playerid) >>> 8, pName);
    format(stringEN, sizeof(stringEN), "»DEATHMATCH« {%06x}%s "#C_DM_E"has joined DM1! [/DM1]", GetPlayerColor(playerid) >>> 8, pName);
    AddToDM(playerid, stringDE, stringEN, RandomSpawnsDM1[Random][0], RandomSpawnsDM1[Random][1], RandomSpawnsDM1[Random][2], RandomSpawnsDM1[Random][3], DESERT_EAGLE, 5000, SHOTGUN, 5000, SNIPER_RIFLE, 5000, 0, 0, 1, 0);
    DM1_Counter++;


    new olditem[128],
    newitem[128];
    format(olditem, sizeof(olditem), GetItemFromDialog(U_DIALOG_DM_DE, 0)); //DM ID 1 = Listitem 0
    format(newitem, sizeof(newitem), "[%d] DM1 [Sniper, Desert Eagle, Shotgun]", DM1_Counter);
    UpdateItemInDialog(U_DIALOG_DM_DE, olditem, newitem);
    format(olditem, sizeof(olditem), GetItemFromDialog(U_DIALOG_DM_EN, 0));
    format(newitem, sizeof(newitem), "[%d] DM1 [Sniper, Desert Eagle, Shotgun]", DM1_Counter);
    UpdateItemInDialog(U_DIALOG_DM_EN, olditem, newitem);
    return 1;
    }

    Du musst das alte Zeug mit der [Meter] Variable natürlich weg machen, das überschreibt dir ja den neuen Code.


    format(string3,sizeof(string3),"~r~KM:~g~ %i.%i",Fahrzeug[VID][Meter]/1000,Fahrzeug[VID][Meter]00);


    Nimm den Tacho7 komplett aus dem anderen Timer raus.



    Schau dir nochmal meinen Code oben an, ich habe dort nochmal etwas geändert, während du mich zitiert hast.

    Was machst du, wenn ein Spieler nicht in einem Auto sitzt und der Motor an ist?


    Heutige Autos gehen im Stand ja eigentlich aus, selbst an der Ampel.


    Dann eben so:
    forward CheckGas();
    public CheckGas()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerNPC(i)) continue;
    new veh = GetPlayerVehicleID(i), string[32];
    if(veh)
    {
    new Float:ST[4];
    GetVehicleVelocity(veh,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) / 1000.0;
    Kilometer[veh] += ST[3];
    format(string, sizeof string, "Kilometer: %d Km", floatround(Kilometer[veh]));
    TextDrawSetString(Tacho7[playerid],string);
    }
    }
    new engine,lights,alarm,doors,bonnet,boot,objective;
    for(new i=0; i<MAX_VEHICLES; i++)
    {
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine)
    {
    if(!MotorSystemMotor[veh]) continue;
    Gas[i]--;
    if(Gas[veh] <= 0)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    MotorSystemMotor[veh] = false;
    for(new p=0; p<MAX_PLAYERS; p++) if(GetPlayerVehicleID(p) == veh) SendClientMessage(p, COLOR_YELLOW, "Boardcomputer: Tank leer, der Motor ist abgestorben.");
    }
    }
    }
    return 1;
    }


    Corvus:
    Ich habe den Code getestet, der funktioniert.
    Hast du Kilometer als Integer definiert? Poste mal alles von dem Code.

    enum vehEnum {
    id,
    besitzer,
    erlaubnis[10]
    };
    new Fahrzeuge[100][vehEnum];


    OnPlayerEnterVehicle:
    new allowed;
    for(new v=0; v<100; v++)
    {
    if(vehicleid == Fahrzeuge[v][id])
    {
    for(new i=0; i<10; i++)
    {
    if(Fahrzeuge[v][erlaubnis][i] == SpielerInfo[playerid][DB_ID])
    {
    //darf einsteigen.
    allowed = 1;
    }
    }
    }
    }
    if(!allowed)
    {
    //Spieler darf nicht einsteigen!!
    }

    Was macht ihr da eigentlich??
    Eine Schleife durch alle Fahrzeuge ist doch total sinnlos.


    new Float:Kilometer[MAX_VEHICLES];
    OnGameModeInit:
    SetTimer("CheckGas", 1000, 1);
    forward CheckGas();
    public CheckGas()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerNPC(i)) continue;
    new veh = GetPlayerVehicleID(i), string[32];
    if(veh)
    {
    if(!MotorSystemMotor[veh]) continue;
    if(Gas[veh] <= 0)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(veh,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    MotorSystemMotor[veh] = false;
    continue;
    }
    new Float:ST[4];
    GetVehicleVelocity(veh,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) / 1000.0;
    Kilometer[veh] += ST[3];
    //if(IsAPlane(veh) || IsABoat(veh) || IsAFahrrad(veh)) Gas[veh] += 2; //Das hier macht keinen Sinn!! Der Tank wird immer mehr dadurch.
    Gas[veh]--; // TANK
    format(string, sizeof string, "Kilometer: %d Km", floatround(Kilometer[veh]));
    TextDrawSetString(Tacho7[playerid],string);
    if(Gas[veh] <= 0) SendClientMessage(i, COLOR_YELLOW, "Boardcomputer: Tank leer, der Motor ist abgestorben.");
    }
    }
    return 1;
    }

    PutPlayerInVehicle(person, playerVehicle, 3);
    zu:
    if(GetVehicleModelSeats(GetVehicleModel(playerVehicle)) == 2)
    {
        PutPlayerInVehicle(person, playerVehicle, 1);
    }
    else
    {
        PutPlayerInVehicle(person, playerVehicle, 3);
    }


    Du brauchst dafür dieses Include:
    http://forum.sa-mp.com/showthread.php?t=486060


    So wie du if Abfrage oben ist, kannst du ja auch abfangen, ob das Fahrzeug nur einen Sitzplatz hat, und dann eine Nachricht ausgeben, dass man mit diesem Fahrzeug keinen Spieler grabben kann.

    if(PlayerCuffed[giveplayerid] != 1)
    {             
        SendClientMessage(playerid, COLOR_GREY, "Der Spieler muss getazert sein!");
        return 1;
    }
    zu:
    if(PlayerCuffed[giveplayerid] != 1 && (GetPlayerState(giveplayerid) != PLAYER_STATE_PASSENGER || GetPlayerVehicleID(playerid) != GetPlayerVehicleID(giveplayerid)))
    {             
        SendClientMessage(playerid, COLOR_GREY, "Der Spieler muss getazert sein, oder in deinem Fahrzeug sitzen!");
        return 1;
    }

    Dieser Teil muss in den Befehl mit dem der Spieler in das DM beitritt. Du hast doch sicher einen Befehl der irgendwie so aussieht:
    /dm [id]


    Die id die du dann eingibst wäre die, die in den switch muss. Ansonsten poste mal den Befehl mit dem du einem DM beitrittst.

    Dann versuche bitte mal die beiden Vorschläge die ich dir gegeben habe:


    1.) Debugge dein OnPlayerConnect und schaue nach warum nur die ID 0 die Ehre hat aktualisiert werden zu dürfen.
    2.) Erstelle einen Timer für alle Spieler, anstatt einen Timer für jeden Spieler.



    Bei Fragen zum Code einfach nachfragen und das posten was du bis dahin hast.