Beiträge von Jeffry

    derzeit wird das Tanklabel nicht runtergezählt

    if(tanktimer == 1)
    {
    tanktimer = 0;
    //Tanks reduzieren
    for(new i=1; i<sizeof(cInfo); i++)
    {
    if(!hatAutoMotor(i))continue;
    if(!isMotorOn(i))continue;
    cInfo[i][tankinhalt]--;
    if(cInfo[i][tankinhalt]>0)continue;
    stopMotor(i);
    }
    }


    hinzu, wie speichere ich am sinnvollsten den Tankstand wenn der Spieler das Fahrzeug verlässt ?

    Rufe bei OnPlayerStateChange (newstate != PLAYER_STATE_DRIVER && oldstate == PLAYER_STATE_DRIVER) die Speicherung für das Fahrzeug auf.

    Das sieht mir nach dem Null-Punkt aus.
    Hast du deine AddPlayerClass in OnGameModeInit alle auf 0,0,0 angelegt?


    Falls ja, dann wird dieses Problem durch den Lag zwischen dir und dem Server (extern?) erzeugt, da die Kommandos von OnPlayerSpawn nicht sofort bei dir sind, sondern mit etwas Verzögerung, daher spawnst du zuerst dort, wo unter AddPlayerClass definiert ist. Das ist normalerweise auch so, nur fällt es nicht auf, wenn es schnell genug geht.

    new vID=GetPlayerVehicleID(playerid);
    format(string, sizeof(string), "Tanke: %i%%", cInfo[vID][tankinhalt]);
    zu:
    new id=GetCInfoIndex(GetPlayerVehicleID(playerid));
    if(id == -1) continue;
    format(string, sizeof(string), "Tanke: %i%%", cInfo[id][tankinhalt]);


    Mit:
    stock GetCInfoIndex(vID)
    {
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x] == vID) return i;
    }
    return -1;
    }

    new pID;
    new pFrak;
    Zu
    new pID=strval(strget(cmdtext,1));
    new pFrak=strval(strget(cmdtext,2));


    Und das am besten nach die Prüfung ob alle Parameter eingegeben worden sind stellen.

    ocmd:macheck(playerid, params[])
    {
    if(!IsAdmin(playerid,1))return noaccess
    new pid;
    if(sscanf(params,"u",pid))return SendClientMessage(playerid,WEIß,"Verwendung: /macheck (Player/ID)");
    if(!PlayerOnline(pid))return SendClientMessage(playerid, GRAU, "Der Spieler ist nicht online!");

    new bool:findings;
    new huan[512];


    //Check für offline accounts
    new query[256];
    format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetIP(pid), PlayerName(pid));
    mysql_query(query);
    mysql_store_result();
    new rows = mysql_num_rows(), name[MAX_PLAYER_NAME];
    format(huan,sizeof(huan),"[MULTIACCOUNT] Der Spieler %s betreibt Multiaccounting!\nIP: %s\nÜbereinstimmung mit:", PlayerName(pid), GetIP(pid));
    for(new i=0; i<rows; i++)
    {
    mysql_retrieve_row();
    /*
    mysql_fetch_field_row(huan,"id"); id = strval(huan);
    */
    mysql_fetch_field_row(name,"name");
    format(huan,sizeof(huan),"%s - %s\n", huan, name);
    findings=true;
    }
    mysql_free_result();
    print(huan);
    ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "Multiaccounting", huan, "Ok", "");
    if(!findings)return SendClientMessage(playerid, GRAU, "Keine Multiaccounts gefunden bzw. vorhanden.");
    return 1;
    }

    Das Waffen-Auslesen muss aus der Schleife raus.
    ocmd:frisk(playerid,params[])
    {
    if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
    new pID, str[128], weapons[13][2];
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    if(PlayerInfo[playerid][pMember]==1 || PlayerInfo[playerid][pMember]==2 || PlayerInfo[playerid][pMember]==3 || PlayerInfo[playerid][pMember]==4 || PlayerInfo[playerid][pMember]==5)
    {
    if(OnDuty[playerid] == 0) return SendClientMessage(playerid,COLOR_RED,"Du bist nicht OnDuty");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_RED,"[Benutze]: /frisk [Name/ID]");
    if(!IsPlayerInRangeOfPoint(pID,5,x,y,z)) return SendClientMessage(playerid,COLOR_RED,"Der Spieler ist nicht in deiner Nähe.");
    format(str,sizeof(str),"* %s untersucht %s nach Gegenständen.",getPlayerName(playerid),getPlayerName(pID));
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i, 10.0,X, Y, Z))
    {
    SendClientMessage(i, COLOR_GREEN, str);
    }
    }
    for(new is = 0; is < 13; is++)
    {
    GetPlayerWeaponData(pID, is, weapons[is][0], weapons[is][1]);
    format(str, sizeof(str), "Waffe_%i: %s",is,WeaponName(weapons[is][0]));
    SendClientMessage(playerid, COLOR_RED, str);
    }
    }
    return 1;
    }

    Das macht ja auch durchaus Sinn, man schließt sich selbst aus der Suche aus.

    Nö, der User-Name der überprüft wird soll ausgeschlossen werden, sonst wird sein Konto selbst als Multiaccount erkannt.



    leider kommt trotzdem nur 1x Clientmessage.

    Poste bitte mal einen Screenshot deiner Datenbank zum Zeitpunkt als du den Befehl ausführst und schreibe dazu, mit welchem Benutzer du den Befehl eingibst.

    Du kannst es so schreiben, dann kannst du nach Zeile 10 immer wie in Zeile 10 den Code weiterführen:
    Speichern(playerid)
    {
    if(sDaten[playerid][eingeloggt]==0)return 1;
    new query[256], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(query,sizeof(query),"UPDATE user SET ");
    format(query,sizeof(query),"%slevel='%i'",query,sDaten[playerid][level]);
    format(query,sizeof(query),"%s,geld='%i'",query,GetPlayerMoney(playerid));
    format(query,sizeof(query),"%s,alevel='%i'",query,sDaten[playerid][alevel]);
    format(query,sizeof(query),"%s,wasanderes='%i'",query,sDaten[playerid][wasanderes]);
    //...
    format(query,sizeof(query)," WHERE name = '%s'",name);
    mysql_function_query(sqlhandle,query,false,"","");
    return 1;
    }

    format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetIP(pid), PlayerName(playerid));
    zu:
    format(query, sizeof(query), "SELECT id, name FROM spieler WHERE last_ip = '%s' AND name != '%s' ORDER BY id DESC;", GetIP(pid), PlayerName(pid));


    Sonst wird ja der Name des eingebenden Spielers genommen.

    format(query,sizeof(query),"UPDATE user SET level='%i',geld='%i',alevel'%i'",sDaten[playerid][level],GetPlayerMoney(playerid),sDaten[playerid][alevel]);
    zu:
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(query,sizeof(query),"UPDATE user SET level='%i',geld='%i',alevel='%i' WHERE name = '%s'",sDaten[playerid][level],GetPlayerMoney(playerid),sDaten[playerid][alevel], name);

    Was genau habe ich nun vergessen?

    In der ersten Zeile musst du Index 0 nehmen:
    if(strcmp(strget(cmdtext,0),"/gotoxyz",true)==0)
    {
    if(!strlen(strget(cmdtext,3))) return SendClientMessage(playerid,COLOR_ROT,"Benutze /gotoxyz [xcords] [ycords] [zcords]");
    new Float:X, Float:Y, Float:Z;
    X = floatstr(strget(cmdtext,1));
    Y = floatstr(strget(cmdtext,2));
    Z = floatstr(strget(cmdtext,3));
    SetPlayerPos(playerid,X,Y,Z);
    return 1;
    }