Beiträge von ENEF

    SpielerInfo[playerid][pRank] = cache_get_field_content_float(0, "xKord");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_float(0, "yKord");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_float(0, "zKord");


    Es kommen 3 Warnings
    warning 213: tag mismatch


    Und wäre es richtig wenn ich bei pLeader und so '%i' nehme für Int?
    Und wenn ja, wo muss ich das alles dann machen? überall sind das doch eig Zahlen oder ?

    Jo geht, aber irgendwie werden meine XYZ Koordinaten nicht gespeichert und muss ich jetzt eine andere Admin abfrage machen? Weil irgendwie sagt er mir immer ich bin kein Admin..


    SpielerInfo[playerid][pRank] = cache_get_field_content_int(0, "xKord");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_int(0, "yKord");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "zKord");//Load


    Denke mal liegt an dem int? wenn ich float mache kommt warning..


    format(query, sizeof(query), "UPDATE Kassen SET Name = '%s', Level = '%d', Geld = '%d', Kills = '%d', Tode = '%d', Admin = '%d', Banned, Leader = '%d', Member = '%d', Team = '%d', Rank = '%d', Duty = '%d', Skin = '%d', Health = '%d', xKord = '%d', yKord = '%d', zKord, Interior = '%d' = '%d' = '%d' WHERE ID = '%d'",
    SpielerInfo[playerid][pName], SpielerInfo[playerid][pName], SpielerInfo[playerid][pLevel], SpielerInfo[playerid][pGeld], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pTode], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pBanned], SpielerInfo[playerid][pLeader], SpielerInfo[playerid][pMember], SpielerInfo[playerid][pTeam], SpielerInfo[playerid][pRank], SpielerInfo[playerid][pDuty], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pHealth], SpielerInfo[playerid][xKord], SpielerInfo[playerid][yKord], SpielerInfo[playerid][zKord], SpielerInfo[playerid][pInterior], playerid);


    Save

    Alles klar, erledigt.


    Pass auf, Checkaccount wird hier aufgerufen:
    public OnPlayerRequestClass(playerid, classid)
    if(GetPVarInt(playerid,"Eingeloggt") == 0)
    {
    if(mysql_CheckAccount(playerid) == 0)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte konnte nicht gefunden werden. Bitte Registrieren Sie sich!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gib dein Persöhnliches Passwort ein:","Register","Abbrechen");
    }
    else if(mysql_CheckAccount(playerid) == 1)
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________Herzlich Wilkommen auf San Francisco Reallife________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Datenbank: Akte wurde gefunden. Bitte Loggen Sie sich ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    }
    Das wars.


    CreateAccount/ReturnPassword hier:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])


    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Regestration","Datenbank: Das angegebene Passwort ist zu kurz!","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    SpawnPlayer(playerid);
    SetSpawnInfo(playerid, 0, 0, -1982.5010,140.7040,27.6875,89.0363, 0, 0, 0, 0, 0, 0 );
    return 1;
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das angegebene Passwort ist falsch!","Login","Abbrechen");
    return 1;
    }
    else
    {
    new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(PlayerName), true))
    {
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    SpawnPlayer(playerid);
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Einloggen","Datenbank: Das war das falsche Passwort!","Login","Abbrechen");
    return 1;
    }
    }
    }
    else
    {
    Kick(playerid);
    }
    }
    }


    Danke, für deine hilfe :)


    //Edit:
    Wie schaut es eigentlich mit
    mysql_GetString
    mysql_SetFloat
    mysql_SetString
    mysql_SetInt
    Float:mysql_GetFloat
    mysql_GetInt


    Aus, die kann ich löschen oder?

    Ich denke mal "Compile" ist einfach nur zum Testen OB es gehen würde bzw ob du Error / Warning bekommen würdest und "Compile/Run" ist dann das er Compilet und direkt übernimmt egal ob Error /Warning da sind?


    Keine ahnung wäre jetzt meine Theorie :D


    Mit freundlichen Grüßen


    TV

    Ok, gut ich hab es jetzt so gemacht


    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(playerid, "Level");


    So, nun zum Reg/Log System, die Verbindung zur Datenbank besteht und die FrakKasse wird erstellt.
    Aber wenn ich jetzt mein Login/Register System machen will überforder es mich etwas, da funktionen dabei sind die ich nicht mit deinem System gleichstellen kann wie bsp.
    stock mysql_CheckAccount(playerid)
    {
    new Query[128],Name[MAX_PLAYER_NAME],count;
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }
    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }
    stock mysql_ReturnPasswort(Name[])
    {
    new query[130], Get[130];
    mysql_real_escape_string(Name, Name);
    format(query, 128, "SELECT `passwort` FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    Wenn ich wüsste wie ich das umbaue, könnte ich weiter machen :)

    Das heisst, ich müsste statt source playerid machen?


    forward LoadPlayer(playerid);
    public LoadPlayer(playerid)//68
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//70
    {//71
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    cache_get_field_content(playerid-1, "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(playerid-1, "Level");
    SpielerInfo[playerid][pGeld] = cache_get_field_content_int(playerid-1, "Geld");
    SpielerInfo[playerid][pKills] = cache_get_field_content_int(playerid-1, "Kills");
    SpielerInfo[playerid][pTode] = cache_get_field_content_int(playerid-1, "Tode");
    SpielerInfo[playerid][pAdmin] = cache_get_field_content_int(playerid-1, "Admin");
    SpielerInfo[playerid][pBanned] = cache_get_field_content_int(playerid-1, "Banned");
    SpielerInfo[playerid][pLeader] = cache_get_field_content_int(playerid-1, "Leader");
    SpielerInfo[playerid][pMember] = cache_get_field_content_int(playerid-1, "Member");
    SpielerInfo[playerid][pTeam] = cache_get_field_content_int(playerid-1, "Team");
    SpielerInfo[playerid][pRank] = cache_get_field_content_int(playerid-1, "Rank");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_int(playerid-1, "Duty");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(playerid-1, "Skin");
    SpielerInfo[playerid][pRank] = cache_get_field_content_int(playerid-1, "xKord");
    SpielerInfo[playerid][pDuty] = cache_get_field_content_int(playerid-1, "yKord");
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(playerid-1, "zKord");

    }
    }

    return 1;
    }


    und SavePlayer


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    new query[512];
    format(query, sizeof(query), "UPDATE Kassen SET Name = '%s', Level = '%d', Geld = '%d', Kills = '%d', Tode = '%d', Admin = '%d', Banned, Leader = '%d', Member = '%d', Team = '%d', Rank = '%d', Duty = '%d', Skin = '%d', Health = '%d', xKord = '%d', yKord = '%d', zKord, Interior = '%d' = '%d' = '%d' WHERE ID = '%d'",
    SpielerInfo[playerid][pName], SpielerInfo[playerid][pName], SpielerInfo[playerid][pLevel], SpielerInfo[playerid][pGeld], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pTode], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pBanned], SpielerInfo[playerid][pLeader], SpielerInfo[playerid][pMember], SpielerInfo[playerid][pTeam], SpielerInfo[playerid][pRank], SpielerInfo[playerid][pDuty], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pHealth], SpielerInfo[playerid][xKord], SpielerInfo[playerid][yKord], SpielerInfo[playerid][zKord], SpielerInfo[playerid][pInterior], playerid);
    mysql_tquery(handle, query);
    }
    }
    return 1;
    }

    Mehr oder Weniger, ja :D



    Schau mal, muss ich da diese Case dinger weg machen ?
    oder kommt da was anderes rein?


    public LoadPlayer(secure)
    {
    new query[128], bool:added, rows = cache_num_rows();
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    if(i > rows || cache_get_field_content_int(i-1, "ID") != i) //i-1 bei den cache-Funktionen, da diese bei 0 anfangen zu zählen
    {
    switch(i)
    {
    case 1: format(KassenInfo[i][fName], 32, "Staatskasse");
    case 2: format(KassenInfo[i][fName], 32, "Test1");
    case 3: format(KassenInfo[i][fName], 32, "Test2");
    case 4: format(KassenInfo[i][fName], 32, "Test3");
    case 5: format(KassenInfo[i][fName], 32, "ADAC");
    }
    format(query, sizeof(query), "INSERT INTO accounts (ID, Name) VALUES ('%d', '%s')", i, SpielerInfo[i][pName]);
    mysql_tquery(handle, query);
    added = true;
    continue;
    }
    cache_get_field_content(i-1, "Name", SpielerInfo[i][pName]);
    SpielerInfo[i][pLevel] = cache_get_field_content_int(i-1, "Level");
    SpielerInfo[i][pGeld] = cache_get_field_content_int(i-1, "Geld");
    SpielerInfo[i][pKills] = cache_get_field_content_int(i-1, "Kills");
    SpielerInfo[i][pTode] = cache_get_field_content_int(i-1, "Tode");
    SpielerInfo[i][pAdmin] = cache_get_field_content_int(i-1, "Admin");
    SpielerInfo[i][pBanned] = cache_get_field_content_int(i-1, "Banned");
    SpielerInfo[i][pLeader] = cache_get_field_content_int(i-1, "Leader");
    SpielerInfo[i][pMember] = cache_get_field_content_int(i-1, "Member");
    SpielerInfo[i][pTeam] = cache_get_field_content_int(i-1, "Team");
    SpielerInfo[i][pRank] = cache_get_field_content_int(i-1, "Rank");
    SpielerInfo[i][pDuty] = cache_get_field_content_int(i-1, "Duty");
    SpielerInfo[i][pSkin] = cache_get_field_content_int(i-1, "Skin");
    SpielerInfo[i][pRank] = cache_get_field_content_int(i-1, "xKord");
    SpielerInfo[i][pDuty] = cache_get_field_content_int(i-1, "yKord");
    SpielerInfo[i][pSkin] = cache_get_field_content_int(i-1, "zKord");

    }
    if(added && secure < 10) mysql_tquery(handle, "SELECT * FROM accounts ORDER BY ID ASC", "LoadPlayer", "d", secure+1);
    //Ich habe diese secure Variable hinzugefügt, da eine theoretische Chance besteht, dass wir hier durch einen
    //Fehler in einer Endlosschleife enden. Unter normalen Voraussetzungen wird dies nie der Fall sein, und secure
    //wird maximal den Wert 1 erreichen, aber sicher ist sicher.
    return 1;
    }


    Hallo und herzlich Wilkommen zu meinem ersten Tutorial.
    Ich werde euch nun ein kleines "Adminsystem" vorstellen, dass folgt abläuft: Admin klickt Spieler in <TAB> an und es öffnet sich ein Dialog, wo es mehrere möglichkeiten gibt.
    Bsp Kick/Ban/Goto/Gethere(Das sind die Funktionen im Tutorial, kann ja von den Spielern noch ausgebaut werden oder ich Update bei Anfrage das Tutorial).
    Das ist zwar alles sehr simpel, aber manche können es bestimmt gebrauchen ! :)
    Fangen wir mal an, als erstes Definieren wir oben im Script
    #define DIALOG_ASYSTEM (123)
    new clickid[MAX_PLAYERS];


    Nun gehen wir zu dem Public
    public OnPlayerClickPlayer(playerid, clickedplayerid, source)


    und fügen da die Funktion ein, was passieren soll wenn man im <TAB> Menü auf einen Spieler klickt.


    clickid[playerid] = clickedplayerid;//Erstmal Definieren wir, dass "ClickID[playerid] -> clickedplayerid; sein soll und aus dem Grund weil wir sonst bei anderen Publics das Problem hätten das der Compiler sagt, dass es nicht definiert wurde
    ShowPlayerDialog(playerid, DIALOG_ASYSTEM, DIALOG_STYLE_LIST, "Adminsystem", "Kick\nBan\nZu Spieler teleportieren\nSpieler zu dir Teleportieren", "Ausführen", "Abbrechen");//Öffnet für den Spieler, der geklickt hat das Dialog "ASYSTEM"


    Nun gehen wir zu dem Public
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])


    Darein fügen wir


    if(dialogid == DIALOG_ASYSTEM)
    {
    if(response == 1)
    {
    if(listitem == 0)//Kick
    {
    new string [128];
    new namee[MAX_PLAYER_NAME];
    GetPlayerName(clickid[playerid], namee, sizeof(namee));
    format(string,sizeof string,"Du hast %s gekickt.",namee);
    SendClientMessage(clickid[playerid], Color_Red, string);
    Kick(clickid[playerid]);
    //Hier definieren wir zum einen ein neues New namens namee
    //Dann fragen wir nach dem Namen, des angeklickten
    //Erklärt sich von selbst, Spieler %s(Der angeklickte) wurde gekickt
    //clickid ist immer die ID des angeklickten
    return 1;
    }
    if(listitem == 1)//Ban
    {
    new string [128];
    new namee[MAX_PLAYER_NAME];
    GetPlayerName(clickid[playerid], namee, sizeof(namee));
    format(string,sizeof string,"Du hast %s gebannt.",namee);
    SendClientMessage(clickid[playerid], Color_Red, string);
    Ban(clickid[playerid]);
    return 1;
    //Das selbe wie oben
    }
    if(listitem == 2)//Goto
    {
    new string [128];
    new Float:x,Float:y,Float:z;
    new namee[MAX_PLAYER_NAME];
    GetPlayerName(clickid[playerid], namee, sizeof(namee));
    GetPlayerPos(clickid[playerid],x,y,z);
    SetPlayerPos(playerid,x,y,z);
    format(string,sizeof string,"Du hast dich zu %s geportet.",namee);
    SendClientMessage(clickid[playerid], Color_Red, string);
    //Hier definieren wir erstmal 3 Floats mit dem Namen XYZ
    //Definieren wieder "namee" damit wir den Namen des angeklickten raus finden können
    //GetPlayerPos (Findet die XYZ Kord. heraus, in unserem fall wieder von dem angeklickten Spieler)
    //SetPlayerPos(Teleportiert den, der auf den Spieler geklickt hat, zum ClickSpieler)
    return 1;
    }
    if(listitem == 3)//Gethere
    {
    new string [128];
    new Float:x,Float:y,Float:z;
    new namee[MAX_PLAYER_NAME];
    GetPlayerName(clickid[playerid], namee, sizeof(namee));
    GetPlayerPos(playerid,x,y,z);
    SetPlayerPos(clickid[playerid],x,y,z);
    format(string,sizeof string,"Admin %s hat dich zu sich geportet.",namee);
    SendClientMessage(playerid, Color_Red, string);
    //Das gleiche wie oben, blos damit wir den Clickspieler nun zu uns Porten
    return 1;
    }
    }
    if(response == 0)
    {
    //Was passieren soll, wenn man auf "Abbrechen klickt(Kann freigelassen werden)
    }
    }


    Das war es schon, so schnell ging es.
    Ich hoffe das kleine Tutorial hat euch gefallen und vorallem geholfen.
    Falls irgendwelche Fragen offen sind, oder Verbesserungsvorschläge & Wünsche sowie Kritik besteht, immer her damit :thumbup:


    Mit freundlichen Grüßen


    TV :thumbup:

    Ouuh, dann muss ich ja auch das Login/Register System neu machen :)?


    Hab alles mit /* */ auskommentiert.
    hab jetzt mit dem neuen System 3 Errors
    error 017: undefined symbol "handle"


    Sonst müsste alles passen denk ich..
    musste jetzt aber auch die Connect Funktion zur Datenbank auskommentiert..


    MfG und Danke :P

    Hier mal von den Kassen :)


    stock LoadKassen()
    {
    new string[3], query[128], bool:added;
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    format(string, sizeof string, "%d", i);
    format(KassenInfo[i][fName], 32, mysql_GetString("Kassen", "Name", "ID", string));
    if(!strlen(KassenInfo[i][fName]))
    {
    switch(i)
    {
    case 1: format(KassenInfo[i][fName], 32, "Staatskasse");
    case 2: format(KassenInfo[i][fName], 32, "Test1");
    case 3: format(KassenInfo[i][fName], 32, "Test2");
    case 4: format(KassenInfo[i][fName], 32, "Test3");
    case 5: format(KassenInfo[i][fName], 32, "ADAC");
    }
    format(query, sizeof(query), "INSERT INTO Kassen (ID) VALUES ('%d')", i);
    mysql_query(query);
    added = true;
    }
    KassenInfo[i][fGeld] = mysql_GetInt("Kassen", "Geld", "ID", string);
    KassenInfo[i][fDrogen] = mysql_GetInt("Kassen", "Drogen", "ID", string);
    KassenInfo[i][fWaffen] = mysql_GetInt("Kassen", "Waffen", "ID", string);
    }
    if(added) SaveKassen();
    return 1;
    }


    stock SaveKassen()
    {
    new string[3];
    for(new i=1; i < MAX_FRAKTION; i++)
    {
    format(string, sizeof string, "%d", i);
    mysql_SetString("Kassen", "Name", KassenInfo[i][fName], "ID", string);
    mysql_SetInt("Kassen", "Geld", KassenInfo[i][fGeld], "ID", string);
    mysql_SetInt("Kassen", "Drogen", KassenInfo[i][fDrogen], "ID", string);
    mysql_SetInt("Kassen", "Waffen", KassenInfo[i][fWaffen], "ID", string);
    }
    return 1;
    }



    Also bis jetzt nutze ich eigentlich alles über MySQL und das wird sich auch noch vermehren (Haussys, Bizsys und Carsys)
    Hab schon jetzt 3 Datenbanken..
    Klar, also wenn das an der geschwindigkeit was ändert gerne !


    Danke für die Mühe und Hilfe :)

    Das ist dann wohl auch der Grund wieso das laden bzw hochfahren vom Server so ewig dauert..
    Nein ich weiß leider nicht wie das geht :/
    Und bei den Kassen ist das genau so?
    Will ja das der Server mal schnell läuft :/

    Wie meinst du das, abstand nehmen ?
    //edit
    Es dauert noch ca 8 Sekunden, zwar bisschen nervig aber besser als davor, danke :)


    Pass auf, ich spawne per Befehl ein Auto(admincar)
    ich will da rein steigen dann sagt er mir du hast keinen Schlüssel :O?
    und wenn ich mein Autohaus mit einbaue ist da das gleiche Problem...


    if(GetVehicleFrak(vehicleid) != SpielerInfo[playerid][pTeam] && isinADAC[playerid] != 1 && ispassenger)
    {
    SendClientMessage(playerid,hinweis1,"Du hast keinen Schlüssel!");
    TogglePlayerControllable(playerid,false);
    TogglePlayerControllable(playerid,true);
    }

    Komischerweise bekomme ich 2 Warnings


    TextDrawShowForPlayer(playerid, ZoneADAC[playerid]);
    TextDrawShowForPlayer(playerid, ZoneADAC[playerid]);


    warning 213: tag mismatch


    Was ist daran falsch? Ist vom Wiki.
    Um den Textdraw handelt es sich um einen PlayerTextDraw.



    MfG

    Ich habe nichts am LoadVehicle verändert, immer noch das selbe.
    stock LoadVehicles()
    {
    new string[3], query[400], bool:added;//02
    for(new i=0; i < sizeof(FrakAutos); i++)
    {
    format(string, sizeof string, "%d", i);
    VehInfo[i][ModellID] = mysql_GetInt("Auto", "ModellID", "ID", string);
    if(VehInfo[i][ModellID] < 400 || VehInfo[i][ModellID] > 611)
    {
    format(query, sizeof(query), "INSERT INTO Auto (ID, ModellID, PosX, PosY, PosZ, PosR, Farbe1, Farbe2, Fraktion) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')", i,
    FrakAutos[i][ModellID],FrakAutos[i][PosX],FrakAutos[i][PosY],FrakAutos[i][PosZ],FrakAutos[i][PosR],FrakAutos[i][Farbe1],FrakAutos[i][Farbe2],FrakAutos[i][Fraktionp]);
    mysql_query(query);
    VehInfo[i][ModellID] = FrakAutos[i][ModellID];
    added = true;
    }
    format(VehInfo[i][Named], 32, mysql_GetString("Autos", "Name", "ID", string));
    format(VehInfo[i][Grund], 32, mysql_GetString("Autos", "Grund", "ID", string));
    VehInfo[i][Fraktion] = mysql_GetInt("Auto", "Fraktion", "ID", string);
    VehInfo[i][PosX] = mysql_GetFloat("Auto", "PosX", "ID", string);
    VehInfo[i][PosY] = mysql_GetFloat("Auto", "PosY", "ID", string);
    VehInfo[i][PosZ] = mysql_GetFloat("Auto", "PosZ", "ID", string);
    VehInfo[i][PosR] = mysql_GetFloat("Auto", "PosR", "ID", string);
    VehInfo[i][Abgeschleppt] = mysql_GetInt("Auto", "Abgeschleppt", "ID", string);
    VehInfo[i][inADAC] = mysql_GetInt("Auto", "inADAC", "ID", string);
    VehInfo[i][Preis] = mysql_GetInt("Auto", "Preis", "ID", string);
    VehInfo[i][NewX] = mysql_GetFloat("Auto", "NewX", "ID", string);
    VehInfo[i][NewY] = mysql_GetFloat("Auto", "NewY", "ID", string);
    VehInfo[i][NewZ] = mysql_GetFloat("Auto", "NewZ", "ID", string);
    VehInfo[i][Farbe1] = mysql_GetInt("Auto", "Farbe1", "ID", string);//18
    VehInfo[i][Farbe2] = mysql_GetInt("Auto", "Farbe2", "ID", string);//19
    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
    }
    }
    if(added) SaveVehicles();
    return 1;
    }


    prob 2:


    Für einfach alles, ich kann nicht mal mehr schreiben o.o
    Mein Server braucht auch viel länger zum hochfahren, und ich habe dort SaveVehicle, SaveVehicles und SaveKassen stehen, kann es sein das er dann nur einfach mega lange zum speichern braucht und deswegen nichts geht?


    if(dialogid == DIALOG_aPARK)
    {
    if(response == 0)
    {
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    new preis = VehInfo[i][Preis];
    VehInfo[i][Preis] = 0;
    VehInfo[i][inADAC] = 0;
    VehInfo[i][Abgeschleppt] = 0;
    VehInfo[i][NewX] = 00.00;
    VehInfo[i][NewY] = 00.00;
    VehInfo[i][NewZ] = 00.00;
    VehInfo[i][NewR] = 00.00;
    format(VehInfo[i][Grund], 32, "");
    format(VehInfo[i][Named], 32, "");
    GivePlayerMoney(playerid, -preis);
    KassenInfo[5][fGeld] += preis;
    TogglePlayerControllable(playerid,true);
    SendClientMessage(playerid, hinweis1, "Herzlichen Glückwunsch, du hast dein Auto freigekauft.");
    SendClientMessage(playerid, hinweis1, "Du kannst das Tor nun mit der Hupe öffnen.(Vorsicht: Nur 1 mal!)");
    SaveVehicle(i);
    SaveVehicles();
    SaveKassen();
    }
    if(response == 1)
    {
    RemovePlayerFromVehicle(playerid);
    TogglePlayerControllable(playerid,true);
    }
    }


    //Edit:
    Es gibt noch ein Problem, spawne ich mir per Adminbefehl ein neues Auto ist es für egal welche Fraktion ich bin gesperrt, ist dass überhaupt noch möglich mit CarID verschiebungen?

    Also wenn ich das mal so vergleichen darf, ich habe vor circa 7 Jahren angefangen SAMP zu spielen.
    Mein aller erster Server hatte ne Userzahl von circa (15) Stammspielern und es war ein schlecht Editierter GF.
    Das spielen auf diesem Server hat mir mehr spaß gemacht, als auf egal welchem Server ihr mir zeigen werdet.
    Das ist einfach der Unterschied, bsp damals auf Liberty Reallife 2009 war ich einer der aller ersten User und der letzte der von denen noch zockt.
    Und jetzt, hat sich alles verändert und ist scheiße geworden.
    Es ändert sich einfach mega viel wenn der Server an User zunimmt.



    Mein Fazit: Lieber weniger, als mehr. Stammspieler halten den Spielspaß und den Server oben :)

    Ja wenn ich mit meinem Auto so stehe ' | ' und oPark mache spawnt es nach einem Restart aber so '---' verstehst du :D?
    Achja und wenn ich es Freigekauft habe, muss ich erst relogen bevor ich irgendwas machen kann(befehle)


    if(dialogid == DIALOG_aPARK)
    {
    if(response == 0)
    {
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    new preis = VehInfo[i][Preis];
    VehInfo[i][Preis] = 0;
    VehInfo[i][inADAC] = 0;
    VehInfo[i][Abgeschleppt] = 0;
    VehInfo[i][NewX] = 00.00;
    VehInfo[i][NewY] = 00.00;
    VehInfo[i][NewZ] = 00.00;
    VehInfo[i][NewR] = 00.00;
    format(VehInfo[i][Grund], 32, "");
    format(VehInfo[i][Named], 32, "");
    GivePlayerMoney(playerid, -preis);
    KassenInfo[5][fGeld] += preis;
    TogglePlayerControllable(playerid,true);
    SendClientMessage(playerid, hinweis1, "Herzlichen Glückwunsch, du hast dein Auto freigekauft.");
    SendClientMessage(playerid, hinweis1, "Du kannst das Tor nun mit der Hupe öffnen.(Vorsicht: Nur 1 mal!)");
    SaveVehicle(i);
    SaveVehicles();
    SaveKassen();
    }
    if(response == 1)
    {
    RemovePlayerFromVehicle(playerid);
    TogglePlayerControllable(playerid,true);
    }
    }


    ocmd:opark(playerid, params[])
    {
    new preis, grund[34],named[34], string[128];
    GetPlayerName(playerid, named, sizeof(named));
    new Float:NeuX,Float:NeuY,Float:NeuZ, Float:NeuR;
    if(sscanf(params,"is",preis,grund))return SendClientMessage(playerid, Color_Green,"Benutzung: /opark [Preis][Grund]");
    if(SpielerInfo[playerid][pTeam] != 5) return SendClientMessage(playerid, hinweis1,"Du bist kein Mitglied des ADAC's!");
    if(isinADAC[playerid] != 1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in der ADAC Zone!");
    else if(preis < 0 || preis > 1000) return SendClientMessage(playerid, hinweis1,"Du kannst das Bußgeld nicht weniger als 0 und mehr als 1000 kosten lassen!");
    {
    new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
    if(i == -1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in einem abschleppbaren Auto!");
    format(VehInfo[i][Grund], 32, grund);
    format(VehInfo[i][Named], 32, named);
    GetVehiclePos(GetPlayerVehicleID(playerid),NeuX,NeuY,NeuZ);
    GetVehicleZAngle(GetPlayerVehicleID(playerid),NeuR);
    VehInfo[i][Preis] = preis;
    VehInfo[i][inADAC] = 1;
    VehInfo[i][Abgeschleppt] = 1;
    VehInfo[i][NewX] = NeuX;
    VehInfo[i][NewY] = NeuY;
    VehInfo[i][NewZ] = NeuZ;
    VehInfo[i][NewR] = NeuR;
    format(string, sizeof(string),"|Strafzettel| Preis %i€ Grund: %s",preis,grund);
    SendClientMessage(playerid, Color_Green, string);
    SaveVehicle(i);
    }
    return 1;
    }

    [00:59:50] Vor GetFrakVehicleIdx: 37
    [00:59:50] i: 36
    [00:59:50] inADAC: 1
    [00:59:50] string: Preis 123€
    Grund:


    Jo jetzt geht es, danke :)


    So, jetzt das mit den Fahrzeugen weil jeder jede fahren können..
    und wieso wenn ich /opark mach die Factingangel nie stimmt sondern das auto immer schief ist, dann bin ich fertig :)