Beiträge von Sunny_Montana

    ocmd:setmoney(playerid,params[])
    {
    if(!IsPlayerAdmin(playeridm))return SendClientMessage(playerid,Rot,"Du bist kein FullAdmin!");
    new pID;
    new test[128];
    new string[128];
    new BETRAG;
    if(sscanf(params,"ui",pID,BETRAG))return SendClientMessage(playerid,Rot,"Verwendung: /setmoney [SpielerID] [Betrag]");
    SetPVarInt(pID,"Geld",BETRAG);
    GivePlayerMoney(playerid, BETRAG);
    User[playerid][Geld]+=BETRAG;
    format(string,sizeof(string),"AdmCmd: %s hat dein Geld auf %i$ gesetzt",User[playerid],BETRAG);
    format(test,sizeof(test),"AdmCmd: Du hast %s ein Geldbetrag von %i $ gesetzt!",User[playerid],BETRAG);
    SendClientMessage(pID,Rot,string);
    SendClientMessage(playerid,Rot,test);
    return 1;
    }


    Mal als Beispiel wie oben in meinem script zu sehen ist möchte ich nun einen OCMD Befehl erstellen habe aber Probleme dabei dies richtig umzusetzen, oben ist mein Script in einem Spoiler vorhanden. Desweiteren habe ich nicht einmal ein Adminsystem weil ich das nicht auf die Kette bekomme, da mir bisher noch immer kerine ein ordentliches Muster gegeben hat bedeutet:


    Hier hast du ein Beispiel so und so amcht man das, dann was muss angepasst werden, denn einige benutzern SpielerName, ich benutzer [playerid] und User all solche Sachen...

    Sehr geehrtes SA-MP.de Team,


    mein Vorschlag wäre, das ihr den Harken bei "Neue Antworten Moderieren" für einen Threadersteller im Marktplatz entfernt, da ich als Bieter / Käufer nachdem mein Thread freigeschalten wurde noch immer nach jeder neuen Antwort auf eine erneute Freischaltung der Antwort warten muss, und so zieht sich das ganze dann mal gerne über Stunden hin bis meine neue Antwort sichtbar ist. Kann man das ändern ist dies möglich ?

    Spoiler anzeigen
    // Enum's die genutzt werden //
    #define DIALOG_REGISTER 1
    #define DIALOG_LOGIN 2

    Spoiler anzeigen
    enum UserData
    {
    Username[MAX_PLAYER_NAME+1],
    Geld,
    Float:Leben,
    Admin,
    LastLogin[11],
    bool:Logged,
    LoginDataCacheID
    }

    Spoiler anzeigen
    // New's //
    new mycon;
    new User[MAX_PLAYERS][UserData];

    Spoiler anzeigen
    // Farb definitionen //
    #define Rot 0xFF0000FF
    #define Gelb 0xFFFF00FF
    #define Grün 0x00FF00FF
    #define Blau 0x0000FFFF
    #define Weis 0xFFFFFFFF

    Spoiler anzeigen
    // New Definitionen //
    #undef MAX_PLAYERS
    #define MAX_PLAYERS 100

    Spoiler anzeigen
    //Forwards

    Spoiler anzeigen
    forward LoadPlayerDataSequence(playerid, l_step);
    forward KickPlayer(playerid);
    forward onCountryDetect(playerid, ip[]);

    Spoiler anzeigen
    main()
    {
    print("\n----------------------------------");
    print("New San Fierro by Shøxx");
    print("----------------------------------\n");
    }

    Spoiler anzeigen
    public OnGameModeInit()
    {
    mycon = mysql_connect("127.0.0.1","root","samp","");
    SetGameModeText("New San Fierro");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    DisableInteriorEnterExits();

    Spoiler anzeigen
    AddStaticVehicle(411,2020.5170,1351.2760,9.7570,270.8903,125,125); // Start

    Spoiler anzeigen
    //Fahrschule San Fierro
    AddStaticVehicleEx(405,-2081.0000000,-83.8000000,35.2000000,0.0000000,255,255,15); //Sentinel
    AddStaticVehicleEx(405,-2076.8999000,-83.8000000,35.2000000,0.0000000,255,255,15); //Sentinel
    AddStaticVehicleEx(405,-2085.1999500,-83.9000000,35.2000000,0.0000000,255,255,15); //Sentinel
    AddStaticVehicleEx(560,-2072.8000500,-84.0000000,35.0000000,0.0000000,255,255,15); //Sultan
    AddStaticVehicleEx(560,-2064.3000500,-84.1000000,35.0000000,0.0000000,255,255,15); //Sultan
    AddStaticVehicleEx(560,-2068.5000000,-84.0000000,35.0000000,0.0000000,255,255,15); //Sultan
    AddStaticVehicleEx(403,-2081.0000000,-100.0000000,35.9000000,270.0000000,255,255,15); //Linerunner
    AddStaticVehicleEx(450,-2091.3999000,-100.1000000,35.8000000,270.2500000,255,255,15); //Trailer 2
    AddStaticVehicleEx(593,-2086.8999000,-114.5000000,35.9000000,181.2490000,255,255,15); //Dodo
    AddStaticVehicleEx(593,-2068.3999000,-114.0000000,35.9000000,181.2470000,255,255,15); //Dodo
    AddStaticVehicleEx(487,-2027.8000500,-189.0000000,35.6000000,270.0000000,255,255,15); //Maverick
    AddStaticVehicleEx(487,-2028.0999800,-215.8999900,35.6000000,270.0000000,255,255,15); //Maverick
    CreateObject(1215,-2091.6999500,-80.4000000,34.7000000,0.0000000,0.0000000,0.0000000); //object(bollardlight) (1)
    CreateObject(1215,-2087.6001000,-80.4000000,34.7000000,0.0000000,0.0000000,0.0000000); //object(bollardlight) (2)
    CreateObject(1215,-2083.3000500,-80.4000000,34.7000000,0.0000000,0.0000000,0.0000000); //object(bollardlight) (3)
    CreateObject(1215,-2079.1999500,-80.4000000,34.7000000,0.0000000,0.0000000,2.0000000); //object(bollardlight) (4)
    CreateObject(1215,-2074.8000500,-80.4000000,34.7000000,0.0000000,0.0000000,2.0000000); //object(bollardlight) (5)
    CreateObject(1215,-2070.6999500,-80.4000000,34.7000000,0.0000000,0.0000000,2.0000000); //object(bollardlight) (6)
    CreateObject(1215,-2066.3999000,-80.4000000,34.7000000,0.0000000,0.0000000,2.0000000); //object(bollardlight) (7)
    CreateObject(1215,-2062.3000500,-80.4000000,34.7000000,0.0000000,0.0000000,2.0000000); //object(bollardlight) (8)
    CreateObject(3934,-2027.4000200,-189.1000100,34.4000000,0.0000000,0.0000000,359.5000000); //object(helipad01) (1)
    CreateObject(3934,-2027.5000000,-215.8000000,34.4000000,0.0000000,0.0000000,0.0000000); //object(helipad01) (2)

    Spoiler anzeigen
    return 1;
    }

    Spoiler anzeigen
    public OnGameModeExit()
    {
    mysql_close();
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {
    GetPlayerName(playerid,User[playerid][Username],MAX_PLAYER_NAME);
    new query[60 + MAX_PLAYER_NAME];
    mysql_format(mycon, query, sizeof(query), "SELECT * FROM `User` WHERE `Name` = '%s'",User[playerid][Username]);
    mysql_function_query(mycon, query, true, "LoadPlayerDataSequence","dd",playerid,1);

    Spoiler anzeigen
    new szPlayerIP[16], iNumIP;
    GetPlayerIp(playerid, szPlayerIP, sizeof(szPlayerIP));
    iNumIP = IpToInteger(szPlayerIP);
    mysql_format(mycon, query, true, "SELECT `country_code`, `country_name` FROM `ip2c` WHERE \"%d\" BETWEEN `begin_ip_num` AND `end_ip_num` LIMIT 1", iNumIP);
    mysql_function_query(mycon, query, true, "onCountryDetect", "ds", playerid, szPlayerIP);

    Spoiler anzeigen
    new pName[MAX_PLAYER_NAME];
    new string[48];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(string, sizeof(string), "[Join] %s hat den Server betreten.", pName);
    SendClientMessageToAll(Grün, string);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerDisconnect(playerid, reason)
    {
    if(User[playerid][Logged])
    {
    SavePlayerData(playerid);
    }
    //ResetPlayerVariables(playerid);

    Spoiler anzeigen
    new pName[MAX_PLAYER_NAME];
    new string[56];
    GetPlayerName(playerid, pName, sizeof(pName));

    Spoiler anzeigen
    switch(reason)
    {
    case 0: format(string, sizeof(string), "[Leave] %s hat hat die Verbindung verloren. (Netzwerk Timeout)", pName);
    case 1: format(string, sizeof(string), "[Leave] %s hat den Server verlassen.", pName);
    case 2: format(string, sizeof(string), "[Leave] %s musste den Server verlassen. (Kick/ban)", pName);
    }

    Spoiler anzeigen
    SendClientMessageToAll(Rot, string);
    return 1;

    Spoiler anzeigen
    public OnPlayerSpawn(playerid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);

    Spoiler anzeigen
    RemoveBuildingForPlayer(playerid, 11372, -2076.4375, -107.9297, 36.9688, 0.25);
    RemoveBuildingForPlayer(playerid, 11099, -2056.9922, -184.5469, 34.4141, 0.25);
    RemoveBuildingForPlayer(playerid, 11014, -2076.4375, -107.9297, 36.9688, 0.25);
    RemoveBuildingForPlayer(playerid, 4516, -141.3359, 468.6484, 12.9141, 0.25);
    RemoveBuildingForPlayer(playerid, 4517, -193.8281, 269.5078, 12.8906, 0.25);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerText(playerid, text[])
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
    // Do something here
    return 0;
    }

    Spoiler anzeigen
    if(!strcmp(strget(cmdtext, 0), "/givemoney"))
    {
    if(!IsPlayerAdmin(playerid))
    {
    SendClientMessage(playerid, Rot, "Du bist kein Admin und kannst diesen Befehl deswegen nicht ausführen.");
    }
    else
    {
    new spielerid = strval(strget(cmdtext, 1));
    new geld = strval(strget(cmdtext, 2));
    GivePlayerMoney(spielerid, geld);
    return 1;
    }
    }
    return 0;
    }

    Spoiler anzeigen
    // Allgemeiner OCMD Bereich //

    Spoiler anzeigen
    // Allgemeiner OCMD Bereich Ende //

    Spoiler anzeigen
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnRconCommand(cmd[])
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerRequestSpawn(playerid)
    {
    if(!User[playerid][Logged]) return 0;
    return 1;
    }

    Spoiler anzeigen
    public OnObjectMoved(objectid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleMod(playerid, vehicleid, componentid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnRconLoginAttempt(ip[], password[], success)
    {
    if(!success) //If the password was incorrect
    {
    printf("FAILED RCON LOGIN BY IP %s USING PASSWORD %s",ip, password);
    new pip[16];
    for(new i=0; i<MAX_PLAYERS; i++) //Loop through all players
    {
    GetPlayerIp(i, pip, sizeof(pip));
    if(!strcmp(ip, pip, true)) //If a player's IP is the IP that failed the login
    {
    SendClientMessage(i, Rot, "Wrong Password. Bye!"); //Send a message
    Ban(i); //They are now banned.
    }
    }
    }
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerUpdate(playerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerStreamIn(playerid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerStreamOut(playerid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
    return 1;
    }

    Spoiler anzeigen
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(!response)
    {
    SendClientMessage(playerid,0xFF0000FF,"Bitte benutzen Sie /q, um das Spiel zu beenden!");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    new InputLength = strlen(inputtext);
    if(InputLength < 3 || InputLength > 25)
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Registrierung]","{FFFFFF}Bitte geben Sie Ihr gewünschtes Passwort ein!\n{FF0000}Bitte zwischen 3 & 25 Zeichen!","Register","Abbrechen");
    return 1;
    }
    new query[128+MAX_PLAYER_NAME], day, month, year;
    getdate(day, month, year);
    format(query, sizeof(query),"%i/%i/%i",day,month,year);
    mysql_format(mycon, query, sizeof(query), "INSERT INTO `User` (`Name`, `Passwort`, `Geld`, `Leben`, `Admin`, `LastLogin`) VALUES('%s','%s',0,100.0,0,'%s')", User[playerid][Username], inputtext, query);
    mysql_function_query(mycon, query, false, "", "");
    User[playerid][Logged] = true;
    SpawnPlayer(playerid);
    return 1;
    }
    case DIALOG_LOGIN:
    {
    if(!response)
    {
    SendClientMessage(playerid,0xFF0000FF,"Bitte benutzen Sie /q, um das Spiel zu beenden!");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    new InputLength = strlen(inputtext);
    if(InputLength < 3 || InputLength > 25)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr Passwort ein!\n{FF0000}Es hat mindestens 3 Zeichen!","Login","Abbrechen");
    return 1;
    }
    cache_set_active(User[playerid][LoginDataCacheID]);
    new UserPassword[64];
    cache_get_field_content(0, "Passwort", UserPassword);
    if(strcmp(UserPassword, inputtext) == 0) {
    User[playerid][Geld] = cache_get_field_content_int(0,"Geld",1);
    User[playerid][Leben] = cache_get_field_content_float(0,"Leben",1);
    User[playerid][Admin] = cache_get_field_content_int(0, "Admin",1);
    cache_get_field_content(0,"LastLogin",User[playerid][LastLogin],1);
    User[playerid][Logged] = true;
    SpawnPlayer(playerid);
    cache_delete(User[playerid][LoginDataCacheID]);
    User[playerid][LoginDataCacheID] = 0;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr richtiges Passwort ein!\n{FF0000}Die vorherige Eingabe war falsch!","Login","Abbrechen");
    return 1;
    }
    return 1;
    }
    }
    return 1;
    }

    Spoiler anzeigen
    public LoadPlayerDataSequence(playerid, l_step)
    {
    if(User[playerid][LoginDataCacheID] <= 0)
    User[playerid][LoginDataCacheID] = cache_save();
    User[playerid][Geld] = cache_get_field_content_int(0,"Geld");
    new Rows, Fields;
    cache_get_data(Rows, Fields);
    if(Rows)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr Passwort ein!","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort eingabe - Registrierung]","{FFFFFF}Bitte geben Sie Ihr gewünschtes Passwort ein!","Register","Abbrechen");
    }
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    return 1;
    }

    Spoiler anzeigen
    public KickPlayer(playerid)
    return Kick(playerid);

    Spoiler anzeigen
    public onCountryDetect(playerid, ip[])
    {
    if(IsPlayerConnected(playerid)) {
    new rows, fields, szPlayerName[MAX_PLAYER_NAME];
    cache_get_data(rows, fields);
    new country_name[30], country_code[30];
    #define FIELD_COUNTRYNAME 0
    #define FIELD_COUNTRYCODE 1
    cache_get_row(0, FIELD_COUNTRYNAME, country_name);
    cache_get_row(0, FIELD_COUNTRYCODE, country_code);
    GetPlayerName(playerid, szPlayerName, MAX_PLAYER_NAME);
    printf("Player %s (ID: %d, IP: %s, Country: %s, CountryCode: %s)", szPlayerName, playerid, country_name, country_code);
    }
    return 1;
    }

    Spoiler anzeigen
    stock SavePlayerData(playerid)
    {
    new query[100 + MAX_PLAYER_NAME];
    mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %i WHERE `Name` = %i ",User[playerid][Geld],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Leben` = %.1f WHERE `Name` = '%s' ",User[playerid][Leben],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Admin` = %i WHERE `Name` = %i ",User[playerid][Admin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    new day,month,year; getdate(day,month,year);
    format(User[playerid][LastLogin],11,"%i/%i/%i",day,month,year);
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `LastLogin` = '%s' WHERE `Name` = '%s' ",User[playerid][LastLogin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    return 1;
    }

    Spoiler anzeigen
    /*stock ResetPlayerVariables(playerid)
    {
    User[playerid][Geld] = 0;
    User[playerid][Leben] = 0.0;
    strdel(User[playerid][Username],0,MAX_PLAYER_NAME+1);
    strdel(User[playerid][LastLogin],0,1);
    User[playerid][Logged] = false;
    User[playerid][LoginDataCacheID] = 0;
    return 1;
    }*/

    Spoiler anzeigen
    stock IpToInteger(ip[])
    {
    new ipPart[4][4], iPart, cPos, idx;
    for(new a = strlen(ip);idx < a;idx++) {
    if(ip[idx] == '.') {
    strmid(ipPart[iPart], ip, cPos, idx, 4);
    cPos = idx + 1;
    iPart++;
    }
    }
    strmid(ipPart[3], ip, cPos, idx, 4);
    return (strval(ipPart[0]) << 24) | (strval(ipPart[1]) << 16) | (strval(ipPart[2]) << 8) | strval(ipPart[3]);
    }

    Spoiler anzeigen
    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }

    Guten Morgen,


    ich Suche einen Scripter für Heute und Sofort, ich biete 25€ PSC und möchte folgendes haben:


    - Admin System
    - 3 Fraktionen
    - 3 Berufe
    - 3 Gangs (Ballas, Vagos, usw...)
    - Hitman Agency


    - Dynamisches Biz System
    . Autohaus System


    Login / Register Vorhanden
    Bugfixxes am jetzigen Script


    [Folgendes muss im Thema enthalten sein und darf nicht entfernt werden:]
    ______
    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.

    Jo, habe das ganze einmal mit Hilfe nun angepasst und Fehler ausgebessert, nun habe ich das Problem, das Geld nicht geladen oder gespeichert wird ! Sprich wenn ich den Server Off nehme in der Datenbank 10K reinschreibe den Server starte und mich einlogge, wird das Geld nicht geladen, ich habe das Script noch mehrmals durchschaut und auch mal bei Google gesucht aber bisher bin ich Fundlos geblieben ! Hast du eine idee, wie ich mein Geld Abspeichern und Laden kann ?


    Mal ein Beispiel:


    Speichern:


    mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %i WHERE `Name` = %i ",User[playerid][Geld],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");


    Laden:


    public LoadPlayerDataSequence(playerid, l_step)
    {
    if(User[playerid][LoginDataCacheID] <= 0)
    User[playerid][LoginDataCacheID] = cache_save();
    new Rows, Fields;
    cache_get_data(Rows, Fields);
    if(Rows)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr Passwort ein!","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort eingabe - Registrierung]","{FFFFFF}Bitte geben Sie Ihr gewünschtes Passwort ein!","Register","Abbrechen");
    }
    return 1;
    }


    Daten Resett: (Frag mich nicht, es ist mit drin) !!!


    stock ResetPlayerVariables(playerid)
    {
    User[playerid][Geld] = 0;
    User[playerid][Leben] = 0.0;
    strdel(User[playerid][Username],0,MAX_PLAYER_NAME+1);
    strdel(User[playerid][LastLogin],0,1);
    User[playerid][Logged] = false;
    User[playerid][LoginDataCacheID] = 0;
    return 1;
    }

    Würde also bedeuten das dies hier einzig und alleine Korrekt wäre:


    stock SavePlayerData(playerid)
    {
    new query[100 + MAX_PLAYER_NAME];
    mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %i WHERE `Name` = '%i'",User[playerid][Geld],User[playerid][Username]);
    mysql_function_query(mycon,query,true,"","");
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Leben` = %.1f WHERE `Name` = '%d'",User[playerid][Leben],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    /*mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Admin` = '%i' WHERE `Name` = '%i'",User[playerid][Admin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");*/
    new day,month,year; getdate(day,month,year);
    format(User[playerid][LastLogin],11,"%d/%d/%d",day,month,year);
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `LastLogin` = '%i' WHERE `Name` = '%i'",User[playerid][LastLogin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    return 1;
    }


    Denke ich zumindest...

    Das Leben wird vom Spiel als Float-Value ausgegeben (Also Dezimalzahl), Geld wiederrum ist ein Integer-Value (Ganze Zahl)
    Der Unterschied ist auch relevant, wenn du keine Nachkommastelle siehst.


    100.0 ist beispielsweise zwar ein Float-Value, wird aber als 100 ausgegeben (weil überflüssige Nullen nunmal überflüssig sind)

    Also kann ich das nun so verstehen:


    %s = Strings, Bsp: Hans, Otto, Peter


    %d = Dezimal Zahlen Bsp: 100.0, 29743.0
    %i = Integer Zahlen Ganzzahlen, Bsp: 1, 2, 3, 1337


    %f - Fließkommazahlen, Bsp: 1,1; 1,5


    Leuchtet ein ! Nur wieso verwendet dann mein Script bei Leben ein %e im zweiten Parameter ? Hat das etwas mit dem MySQL zu tun oder irre ich mich da ?

    Dann habe ich nochmal 2 Fragen:


    Erstens wieso unterscheiden sich Leben und Geld untereinander in den kleinen Parametern ?


    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Leben` = %.1f WHERE `Name` = '%e'",User[playerid][Leben],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");


    /*mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Admin` = '%d' WHERE `Name` = '%i'",User[playerid][Admin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");*/


    Und zweitens ist dieser Unterscheid bei Zahlen egal ? Das Leben und das Geld haben beides keine Kommas, deswegen wunder ich mich jetzt ein wenig !

    SQL
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Admin` = '%e' WHERE `Name` = '%e'",User[playerid][Admin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");


    So, jetzt ist hier einmal die Definition '%e', meine Frage ist nun wiederrum, ist der Parameter %e als Zahl für den Adminrang gültig ? Und hast du eventuell ein Exampel für mich ?


    Und zudem wäre mir einmal ein Beispiel Befehl ganz wichtig...

    Die o.3e Objekte funktionieren deswegen nicht mehr, weil die Lua Scripts ungearbeitet wurden, da hilft nur eines, entweder die Lua Scripts selber erweitern und mit den alten vergleichen, oder das machen was [DT]Sniper sagte.


    Ja ich habe mir mit einem speziellen Programm den Inhalt vom Programm angesehen, habe meinen eigenen Test gemacht und darf erfreudigerweise feststellen das ich mir mein MTA geschossen habe !

    Guten Abend zusammen,


    ich habe nun soweit meinen Testserver mit Mysql am laufen, Login, Passwort, Geld und Leben werden in der Datenbank gespeichert. nun möchte ich noch ein kleines Adminsystem einbauen, mittels OCMD und MySQL R8 (R26). Kann mir Jemand sagen wie ich vorgehen muss ?


    Beispiel bis jetzt:



    stock SavePlayerData(playerid)
    {
    // Hier speichern wir noch die Daten ab
    new query[100 + MAX_PLAYER_NAME];
    mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %d WHERE `Name` = '%e'",User[playerid][Geld],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `Leben` = %.1f WHERE `Name` = '%e'",User[playerid][Leben],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    new day,month,year; getdate(year,month,day);
    format(User[playerid][LastLogin],11,"%d/%d/%d",day,month,year);
    mysql_format(mycon,query, sizeof(query),"UPDATE `User` SET `LastLogin` = '%e' WHERE `Name` = '%e'",User[playerid][LastLogin],User[playerid][Username]);
    mysql_function_query(mycon,query,false,"","");
    return 1;
    }


    Ich würde da gerne etwas einbauen, das ich einen Admin mit /makeadmin bestimme und dieser wird in die Tabelle Admin gespeichert. Es soll dazu zum Anfang 6 Admin / Team Ränge geben.

    Kann mir einmal Jemand erklären wieso ich folgenden MySQL Fehler bekomme ?


    cache_set_active(User[playerid][LoginDataCacheID]);
    new UserPassword[64];
    cache_get_field_content(0, "Passwort", UserPassword);
    if(strcmp(UserPassword, inputtext) == 0) { //[Passwort richtig]
    User[playerid][Geld] = cache_get_field_content_int(0,"Geld");
    User[playerid][Leben] = cache_get_field_content_float(0,"Leben");
    cache_get_field_content(0,"LastLogin",User[playerid][LastLogin], 11); //[ganz böse, wenn man Strings abrufen will die in ein enum-Array gespeichert werden sollen, immer selbst die Länge angeben!]
    User[playerid][Logged] = true;
    SpawnPlayer(playerid);
    cache_delete(User[playerid][LoginDataCacheID]);
    User[playerid][LoginDataCacheID] = 0;

    Zitat

    [19:26:44] [ERROR] "cache_get_field_content" - invalid connection handle. (ID = 11).
    [19:32:55] [ERROR] "cache_get_field_content" - invalid connection handle. (ID = 11).

    Vielen Dank !


    //Edit... Fixxed...


    Von:


    cache_get_field_content(0,"LastLogin",User[playerid][LastLogin], 11);


    zu:


    cache_get_field_content(0,"LastLogin",User[playerid][LastLogin],1);


    geändert :) Fehler behoben !

    MySQL Tutorial by Shøxx

    Hallo zusammen,
    heute möchte ich euch einmal ein kleines Tutorial zeigen, es geht darum wie man eine Verbindung zur Datenbank erstellt. Das ganze Schreibe ich hier aufgrund von folgendem Thread: MySQL Hostname herausfinden ?!


    Ja, eigentlich ist es ganz einfach, man nimmt ein Datenbank Tool wie beispielsweise Navicat und erstellt dort eine neue Verbindung, aber es ist nicht immer möglich sich auf jeden Host zu verbinden, gerade dann nicht wenn ein SSH Tunnel im Spiel ist. Der SSH Tunnel bewirkt das man nicht von außerhalb auf die Datenbank zugreifen kann, das macht man dann wenn man den Datenbankserver schützen möchte und den Zugriff von außen verbieten möchte. Ich persönlich bevorzuge ebenfalls einen gesicherten SSH Tunnel Zugriff, damit kann dann sichergestellt werden, das man nur Systemintern auf die datenbanken zugreifen kann.


    Allerdings gibt es auch Möglichkeiten das man Zugriff von außerhalb zulässt, das ist aber immer mit einem gewissen Risiko verbunden, zum beispiel wenn ihr eure Daten an jemand anderen gebt, dann hat der User der die Daten hat auch Zugriff auf eure Datenbank und einige Hoster schützen ihre Kunden indem sie einen SSH Tunnel bevorzugen, so das man nur systemintern Zugriff hat.


    Wie überwältige ich diese hürde nun ? Ganz einfach, wenn ihr der Admin vom angegebenen Datenbank Host seid, dann müsst ihr einfach nur einen Parameter setzen, das geht eigentlich ganz einfach. Ihr benutzt den Parameter "%" ("Dollar Zeichen"), damit wird die lokale Beschränkung aufgehoben und ihr könnt euch auf die Datenbank von jedem Host oder Ort der Welt verbinden und habt somit Zugriff ("Zugriff so wie es der angegebene Host erlaubt").


    Ansonsten erkläre ich einmal wie ihr euch auf die Datenbank verbinden könnt in 2 kleinen schritten.


    1.) ("Ohne SSH Tunnel") Ich benutze hier das Tool Navicat





    Wie zu sehen ist habe ich es einmal in roter Schrift markiert was man wo eingeben muss. Ist also sehr einfach und erfordert keinerlei kenntnisse.


    2.) ("Mit SSH Tunnel") Erfordert meistens den Hauptadmin vom Server !!!





    Wie zu sehen ist, benötigt ihr bei SSH den root Benutzer vom Server, dies ist vergleichbar mit einem Login wie bei Putty ("Putty ist das Hauptprogramm um auf Linux Server zu verbinden") ohne diesen extra Login, könnt oder braucht ihr eigentlich nicht weiter machen, denn nur so funktioniert der SSH Login. Solltet ihr dennoch die Rechte haben, könnt ihr dort eure Daten eingeben.


    Ja, damit das ganze auch bei externen Webseiten funktioniert muss ein extra Parameter angebeben werden, das ganze habe ich bereits weiter oben erwähnt. Hier dazu nochmal ein Beispiel:



    Wie zu sehen ist steht bei Host ein "%", dies bedeutet ich habe von überall aus Zugriff.


    So, freut mich das ihr Eeuch die Zeit genommen habt mein Tutorial zu Lesen und ich hoffe das es für einige einige Fragen beantwortet.