Beiträge von Syneroz

    In Ordnung, ich habe gerade festgestellt, dass Pickups und Label im Interior nicht gestreamt werden.


    LSbizSkinShopInfo[i][bLSbizSkinShop_Label2] = CreateDynamic3DTextLabel("Kasse", COLOR_YELLOW, LSbizSkinShopInfo[i][bLSbizSkinShop_BuyX], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyY], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyZ], 12, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, LSbizSkinShopInfo[i][bLSbizSkinShop_World], LSbizSkinShopInfo[i][bLSbizSkinShop_Interior], -1);
    LSbizSkinShopInfo[i][bLSbizSkinShop_Pickup2] = CreateDynamicPickup(1274, 1, LSbizSkinShopInfo[i][bLSbizSkinShop_BuyX], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyY], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyZ], -1);
    printf("BuyPickup geladen: X = %f | Y = %f | Z %f", LSbizSkinShopInfo[i][bLSbizSkinShop_BuyX], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyY], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyZ]);


    Was über "printf" gepostet wird, stimmt mit den Koordinaten in der Datenbank überein, die Koordinaten sind auch richtig.
    Es wird also soweit alles aus der Datenbank geladen, aber das Pickup und das Label wird nicht angezeigt.

    Vielen Dank, ich denke mal so habe ich das richtig gemacht:


    forward CheckLSbizSkinShopForBuySS(playerid, i, Spielername[]);
    public CheckLSbizSkinShopForBuySS(playerid, i, Spielername[])
    {
    if(cache_get_row_count() == 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 0)
    {


    if(SpielerInfo[playerid][pGeld] < LSbizSkinShopInfo[i][bLSbizSkinShop_Preis]) return SendClientMessage(playerid, COLOR_GREY, "Du hast nicht genügend Geld um diesen Skin Shop zu kaufen!");
    if(ReturnPlayerID(LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]) != INVALID_PLAYER_ID)
    {
    SpielerInfo[LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]][pGeld] += LSbizSkinShopInfo[i][bLSbizSkinShop_Preis];
    UpdateLSbizSkinShopBesitzer(i, Spielername);
    LSbizSkinShopWirdUnkauflich(i);
    SetTimer("ReloadLSbizSkinShop", 1000, false);
    }
    else if(ReturnPlayerID(LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]) == INVALID_PLAYER_ID)
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "UPDATE accounts SET Geld += %i WHERE Name = '%s'",LSbizSkinShopInfo[i][bLSbizSkinShop_Preis], LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]);
    mysql_pquery(handle, query);
    UpdateLSbizSkinShopBesitzer(i, Spielername);
    LSbizSkinShopWirdUnkauflich(i);
    SetTimer("ReloadLSbizSkinShop", 1000, false);
    }
    }
    }
    else return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits Besitzer eines Skin-Shop's!");
    return 1;
    }

    Okay, nun habe ich die beiden Filterscripts zusammengepackt.


    Jetzt stehe ich hier vor den Problem, dass ich überprüfen will, ob der Besitzer des Skin-Shops online ist.
    Der Besitzer ist hierbei nicht derjenige, der den Befehl eingegeben hat.



    ocmd:buyss(playerid, params[])
    {
    new Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForBuySS", "dds", playerid, i, Spielername);
    return 1;
    }
    }
    return 1;
    }


    forward CheckLSbizSkinShopForBuySS(playerid, i, Spielername[]);
    public CheckLSbizSkinShopForBuySS(playerid, i, Spielername[])
    {
    if(cache_get_row_count() == 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 0)
    {


    if(SpielerInfo[playerid][pGeld] < LSbizSkinShopInfo[i][bLSbizSkinShop_Preis]) return SendClientMessage(playerid, COLOR_GREY, "Du hast nicht genügend Geld um diesen Skin Shop zu kaufen!");
    new query[256]; mysql_format(handle, query, sizeof(query), "UPDATE accounts SET Geld = %i WHERE Name = '%s'",LSbizSkinShopInfo[i][bLSbizSkinShop_Preis], LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]);
    mysql_pquery(handle, query);
    UpdateLSbizSkinShopBesitzer(i, Spielername);
    LSbizSkinShopWirdUnkauflich(i);
    SetTimer("ReloadLSbizSkinShop", 1000, false);
    }
    }
    else return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits Besitzer eines Skin-Shop's!");
    return 1;
    }

    Okay, das funktioniert nun.


    Jetzt habe ich nur das Problem, dass der Spieler im 1 Filterscript geladen wird und dort auch das SpielerUpdate stattfindet.
    Nun gibt es aber im 2. Filterscript den /buyss Befehl, wo dem Käufer Geld abgezogen und den Verkäufer Geld gut geschrieben soll.
    Dies muss über "SpielerInfo[playerid][pGeld]" passieren, da es ja sonst nicht im 1. Filterscript geupdatet usw. wird.


    Und den Verkäufer müsste das Geld so gesehen auch gut geschrieben werden, wenn er
    offline ist, was natürlich nicht über "SpielerInfo[playerid][pGeld]" möglich ist.



    Wie mache ich das nun?

    Etwa so?



    forward SpielerUpdate();
    public SpielerUpdate()
    {
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pLoggedIn] == true)
    {
    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT Geld FROM accounts WHERE Name = '%e'", SpielerInfo[i][pName]);
    mysql_pquery(handle, query, "SpielerGeldUpdate", "d", i);
    }
    }
    }


    forward SpielerGeldUpdate(playerid);
    public SpielerGeldUpdate(playerid)
    {
    if(cache_get_row_count() != 0)
    {
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, SpielerInfo[playerid][pGeld]);
    }
    return 1;
    }

    Vielen Dank, das funktioniert jetzt. - Timer sollen doch an Performance zerren, oder irre ich mich da?


    Ich habe da gerade ein weiteres Problem, denn ich möchte nun den Spieler alle 5 Sekunden updaten.


    forward SpielerUpdate();
    public SpielerUpdate()
    {
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pLoggedIn] == true)
    {
    SpielerInfo[i][pGeld] = cache_get_field_content_int(0, "Geld", handle);
    ResetPlayerMoney(i);
    GivePlayerMoney(i, SpielerInfo[i][pGeld]);
    }
    }
    }


    Bei OnFilterscriptInit:

    SetTimer("SpielerUpdate",5000,true);


    Nun Funktioniert das aber nicht, auch nach dem einloggen wird 0$ im Hud angezeigt.


    forward CheckPasswortForLogin(playerid);
    public CheckPasswortForLogin(playerid)
    {
    if(cache_get_row_count() != 0)
    {
    SpielerInfo[playerid][pdb_id] = cache_get_field_content_int(0, "id", handle);
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(0, "Level", handle);
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "Skin", handle);
    SpielerInfo[playerid][pGeld] = cache_get_field_content_int(0, "Geld", handle);
    SpielerInfo[playerid][pKills] = cache_get_field_content_int(0, "Kills", handle);
    SpielerInfo[playerid][pTode] = cache_get_field_content_int(0, "Tode", handle);
    SpielerInfo[playerid][pbdaytag] = cache_get_field_content_int(0, "bdaytag", handle);
    SpielerInfo[playerid][pbdaymonat] = cache_get_field_content_int(0, "bdaymonat", handle);
    SpielerInfo[playerid][pbdayjahr] = cache_get_field_content_int(0, "bdayjahr", handle);
    SpielerInfo[playerid][pSex] = cache_get_field_content_int(0, "Sex", handle);
    SpielerInfo[playerid][pSkins] = cache_get_query_string("Skins", handle);
    SpielerInfo[playerid][pSecAntwort] = cache_get_query_string("SecAntwort", handle);
    SpielerInfo[playerid][pSecFrage] = cache_get_field_content_int(0, "SecFrage", handle);
    SpielerInfo[playerid][pLoggedIn] = true;
    GivePlayerMoney(playerid, SpielerInfo[playerid][pGeld]);
    //etc


    Wenn ich mir selbst in der Datenbank Geld gebe, wird dies also scheinbar nicht geladen.
    Fest steht aber, dass beim disconnect in der Datenbank das Geld wieder auf 0 gesetzt wird.

    Ja, ich muss die Befehle doppelt angeben, damit es in der Datenbank umgeschrieben wird.


    /sellss [Preis]
    Wenn man in Reichweite des Labels seines Skin-Shops ist und seinen Skin-Shop verkaufen möchte, kann man den Skin-Shop
    mit diesen Befehl zum verkauf anbieten, in der Datenbank wird dann "Kaufbar" auf 1 gesetzt und in den Label steht dann zusätzlich "Zu Verkaufen" und der Kaufpreis.


    /unsellss
    Wenn man sein Skin-Shop zum verkauf angeboten hat und sein Skin-Shop dann doch nicht mehr verkaufen möchte, kann man mit diesen Befehl das Angebot zurücksetzen.
    In der Datenbank wird dann "Kaufbar" auf 0 gesetzt.


    /buyss
    Wenn man in Reichweite eines Skin-Shops ist, welcher zum Verkauf angeboten wird, kann man den Skin-Shop mit diesen Befehl kaufen.
    In der Datenbank wird dann der Name des Käufers als Besitzer eingetragen und "Kaufbar" auf 0 gesetzt.

    Okay, das scheint funktioniert mehr oder weniger..


    Nur wird bei /buyss nicht abgefragt ob der Spieler bereits einen Skin-Shop besitzt, also kann ein Spieler alle Skin-Shops kaufen.
    Jeder Spieler soll aber nur einen Skin-Shop besitzen können. Des weiteren muss ich '/sellss [Preis]' und '/unsellss'
    zweimal eingeben, damit dar Eintrag in der Datenbank und somit das Label geändert wird.



    So sieht das bei mir aus:

    Spoiler anzeigen
    ocmd:buyss(playerid, params[])
    {
    new Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForBuySS", "dds", playerid, i, Spielername);
    return 1;
    }
    }
    return 1;
    }

    Spoiler anzeigen
    ocmd:sellss(playerid, params[])
    {
    new BizPreis, Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    if(sscanf(params,"i",BizPreis))return SendClientMessage(playerid,COLOR_GREY,"Benutze: '/sellss [Preis]");
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForSellSS", "ddd", playerid, i, BizPreis);
    return 1;
    }
    }
    return 1;
    }

    Spoiler anzeigen
    ocmd:unsellss(playerid, params[])
    {
    new Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForUnSellSS", "dd", playerid, i);
    return 1;
    }
    }
    return 1;
    }

    Spoiler anzeigen
    forward CheckLSbizSkinShopForSellSS(playerid, i, BizPreis);
    public CheckLSbizSkinShopForSellSS(playerid, i, BizPreis)
    {
    if(cache_get_row_count() != 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] == 0)
    {
    LSbizSkinShopWirdKauflich(i, BizPreis);
    ReloadLSbizSkinShop();
    }
    }
    else return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Besitzer dieses Skin-Shop's!");
    return 1;
    }

    Spoiler anzeigen
    forward CheckLSbizSkinShopForBuySS(playerid, i, Spielername[]);
    public CheckLSbizSkinShopForBuySS(playerid, i, Spielername[])
    {
    if(cache_get_row_count() != 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 0)
    {
    new SpielerGeld = CallRemoteFunction("FS1_GetPlayerMoney", "d", playerid);
    if(SpielerGeld < LSbizSkinShopInfo[i][bLSbizSkinShop_Preis]) return SendClientMessage(playerid, COLOR_GREY, "Du hast nicht genügend Geld um diesen Skin Shop zu kaufen!");
    UpdateLSbizSkinShopBesitzer(i, Spielername);
    LSbizSkinShopWirdUnkauflich(i);
    ReloadLSbizSkinShop();
    }
    }
    else return SendClientMessage(playerid, COLOR_GREY, "Du bist bereits Besitzer eines Skin-Shop's!");
    return 1;
    }

    Spoiler anzeigen
    forward CheckLSbizSkinShopForUnSellSS(playerid, i);
    public CheckLSbizSkinShopForUnSellSS(playerid, i)
    {
    if(cache_get_row_count() != 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 0)
    {
    LSbizSkinShopWirdUnkauflich(i);
    ReloadLSbizSkinShop();
    }
    }
    else return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Besitzer dieses Skin-Shop's!");
    return 1;
    }

    Spoiler anzeigen
    stock LSbizSkinShopWirdUnkauflich(LSbizSkinShopID)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE lsbizskinshop SET LSbizSkinShop_Kaufbar = '0' WHERE LSbizSkinShop_ID = %i ", LSbizSkinShopInfo[LSbizSkinShopID][bLSbizSkinShop_ID]);
    mysql_pquery(handle, query);
    return 1;
    }

    Spoiler anzeigen
    stock LSbizSkinShopWirdKauflich(LSbizSkinShopID, BizPreis)
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE lsbizskinshop SET LSbizSkinShop_Kaufbar = '1', LSbizSkinShop_Preis = %i WHERE LSbizSkinShop_ID = %i", BizPreis, LSbizSkinShopInfo[LSbizSkinShopID][bLSbizSkinShop_ID]);
    mysql_pquery(handle, query);
    return 1;
    }

    Spoiler anzeigen
    stock UpdateLSbizSkinShopBesitzer(LSbizSkinShopID, Besitzer[])
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE lsbizskinshop SET LSbizSkinShop_Besitzer = '%s' WHERE LSbizSkinShop_ID=%i", Besitzer, LSbizSkinShopInfo[LSbizSkinShopID][bLSbizSkinShop_ID]);
    mysql_pquery(handle, query);
    return 1;
    }

    Spoiler anzeigen
    stock ReloadLSbizSkinShop()
    {
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    DestroyDynamic3DTextLabel(LSbizSkinShopInfo[i][bLSbizSkinShop_Label]);
    DestroyDynamicPickup(LSbizSkinShopInfo[i][bLSbizSkinShop_Pickup]);
    }
    mysql_pquery(handle, "SELECT * FROM lsbizskinshop", "LoadLSbizSkinShop");
    return 1;
    }

    Da hast Du was falsch verstanden. Die Frage war, ob es so wie ich es gemacht habe in Ordnung ist oder ob es da eine bessere Möglichkeit gibt.



    Ich habe da mittlerweile ein weitere Problem, die Abfrage ob der Spieler in Besitz eines Skins-Shops
    ist und ob der Spieler der Besitzer eines bestimmten Skin-Shops ist funktioniert nicht.


    Hier soll abgefragt werden, ob der Spieler, der den Befehl sendet um den Skin-Shop zum verkauf anzubieten, der Besitzer vom Skin-Shop ist.
    Es funktioniert nicht und ich habe keine Ahnung wie ich das machen soll, ich habe halt experimentiert.

    ocmd:sellss(playerid, params[])
    {
    new BizPreis, Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    if(sscanf(params,"i",BizPreis))return SendClientMessage(playerid,COLOR_GREY,"Benutze: '/sellss [Preis]");
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForSellSS", "d", "d", "d", playerid, i, BizPreis);
    }
    }
    return 1;
    }


    forward CheckLSbizSkinShopForSellSS(playerid, i, BizPreis);
    public CheckLSbizSkinShopForSellSS(playerid, i, BizPreis)
    {
    if(cache_get_row_count() != 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 0) return 1;
    LSbizSkinShopWirdKauflich(i, BizPreis);
    ReloadLSbizSkinShop();
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Besitzer dieses Skin-Shop's!");
    }
    return 1;
    }



    Hier soll abgefragt werden, ob der Spieler, der den Befehl sendet um den Skin-Shop zum kaufen, der Besitzer vom Skin-Shop ist.
    Es funktioniert nicht und ich habe keine Ahnung wie ich das machen soll, ich habe halt experimentiert.

    ocmd:buyss(playerid, params[])
    {
    new Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForBuySS", "d", "i", "s", playerid, i, Spielername);
    }
    }
    return 1;
    }


    forward CheckLSbizSkinShopForBuySS(playerid, i, Spielername[]);
    public CheckLSbizSkinShopForBuySS(playerid, i, Spielername[])
    {
    if(cache_get_row_count() != 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 1) return 1;
    new SpielerGeld = CallRemoteFunction("FS1_GetPlayerMoney", "d", playerid);
    if(SpielerGeld < LSbizSkinShopInfo[i][bLSbizSkinShop_Preis]) return SendClientMessage(playerid, COLOR_GREY, "Du hast nicht genügend Geld um diesen Skin Shop zu kaufen!");
    LSbizSkinShopWirdUnkauflich(i);
    UpdateLSbizSkinShopBesitzer(i, Spielername);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Besitzer dieses Skin-Shop's!");
    }
    return 1;
    }



    Hier soll abgefragt werden, ob der Spieler, der den Befehl sendet um den Skin-Shop nicht mehr zum verkauf anzubieten, der Besitzer vom Skin-Shop ist.
    Es funktioniert nicht und ich habe keine Ahnung wie ich das machen soll, ich habe halt experimentiert.

    ocmd:unsellss(playerid, params[])
    {
    new Spielername[24];
    GetPlayerName(playerid, Spielername, sizeof(Spielername));
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM lsbizskinshop WHERE LSbizSkinShop_Besitzer = '%e'", Spielername);
    mysql_pquery(handle, query, "CheckLSbizSkinShopForUnSellSS", "d", "d", playerid, i);
    }
    }
    return 1;
    }


    forward CheckLSbizSkinShopForUnSellSS(playerid, i);
    public CheckLSbizSkinShopForUnSellSS(playerid, i)
    {
    if(cache_get_row_count() != 0)
    {
    if(LSbizSkinShopInfo[i][bLSbizSkinShop_Kaufbar] != 0) return 1;
    LSbizSkinShopWirdUnkauflich(i);
    ReloadLSbizSkinShop();
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du bist nicht der Besitzer dieses Skin-Shop's!");
    }
    return 1;
    }

    Hallo,


    ich habe vor Skin-Shops zu erstellen, mit den passenden Interior und den ganzen pipapo.


    Da mir bisher Skins und Skin-Shops relativ egal waren, würde ich gerne wissen wie ihr die die folgenden GTA:SA Kleidungsgeschäfte von billig bis teuer auflisten würdet.
    Sub Urban - Zip - ProLabs -Victim - Dider Sachs - Binco


    Es wäre nett, wenn ihr mir da weiterhelfen könntet.



    Gruß

    Es funktioniert, danke!


    Jetzt habe ich gerade einfach mal einen zweiten Skin-Shop erstellt um was zu testen,
    dazu habe ich einfach die EnterX womit auch das Label und Pickup erstellt wird um 10 verschoben.


    Code
    DROP TABLE IF EXISTS `lsbizskinshop`;CREATE TABLE `lsbizskinshop` (  `LSbizSkinShop_ID` int(11) NOT NULL,  `LSbizSkinShop_Name` varchar(24) NOT NULL,  `LSbizSkinShop_Preis` int(11) NOT NULL,  `LSbizSkinShop_Besitzer` varchar(24) NOT NULL,  `LSbizSkinShop_Interior` int(11) NOT NULL,  `LSbizSkinShop_World` int(11) NOT NULL,  `LSbizSkinShop_EnterX` float(10,5) NOT NULL,  `LSbizSkinShop_EnterY` float(10,5) NOT NULL,  `LSbizSkinShop_EnterZ` float(10,5) NOT NULL,  `LSbizSkinShop_EnterA` float(10,5) NOT NULL,  `LSbizSkinShop_ExitX` float(10,5) NOT NULL,  `LSbizSkinShop_ExitY` float(10,5) NOT NULL,  `LSbizSkinShop_ExitZ` float(10,5) NOT NULL,  `LSbizSkinShop_ExitA` float(10,5) NOT NULL,  `LSbitSkinShop_Kasse` int(11) NOT NULL,  `LSbizSkinShop_Kaufbar` int(11) NOT NULL,  PRIMARY KEY (`LSbizSkinShop_ID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;-- ------------------------------ Records of lsbizskinshop-- ----------------------------INSERT INTO `lsbizskinshop` VALUES ('0', 'Los Santos Binco', '1300', 'Syneroz', '15', '1', '1959.68286', '-2510.81152', '13.53910', '0.00000', '207.57610', '-107.91510', '1005.13281', '0.00000', '0', '0');INSERT INTO `lsbizskinshop` VALUES ('1', 'Los Santos Binco', '13000', 'Syneroz', '15', '2', '1949.68286', '-2510.81152', '13.53910', '0.00000', '207.57610', '-107.91510', '1005.13281', '0.00000', '0', '1');


    Nun gehe ich zum Eingang des Skin-Shops mit der ID 0, betrete den Skinshop mit '/enter', verlasse ihn mit '/exit' und werde am Eingang des Skin-Shops mit der ID 1 gespawnt.
    Genauer gesagt betrete ich diesen Skin-Shop:

    SQL
    INSERT INTO `lsbizskinshop` VALUES ('0', 'Los Santos Binco', '1300', 'Syneroz', '15', '1', '1959.68286', '-2510.81152', '13.53910', '0.00000', '207.57610', '-107.91510', '1005.13281', '0.00000', '0', '0');


    Und komme beim verlassen an diesen Skin-Shop raus:

    SQL
    INSERT INTO `lsbizskinshop` VALUES ('1', 'Los Santos Binco', '13000', 'Syneroz', '15', '2', '1949.68286', '-2510.81152', '13.53910', '0.00000', '207.57610', '-107.91510', '1005.13281', '0.00000', '0', '1');


    Die beiden Skin-Shops teilen sich das gleiche Interior, es werden auch noch weitere Skin-Shops mit diesen Interior dazukommen.



    Jetzt habe ich das folgendermaßen gelöst und es funktioniert, allerdings frage ich mich ob es da nicht eine bessere Lösung gibt.


    ocmd:enter(playerid, params[])
    {
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ]))
    {
    SetPVarInt(playerid,"SpielerIstInSkinShopIDPVar",i);
    SetPlayerVirtualWorld(playerid, LSbizSkinShopInfo[i][bLSbizSkinShop_World]);
    SetPlayerInterior(playerid, LSbizSkinShopInfo[i][bLSbizSkinShop_Interior]);
    SetPlayerPos(playerid, LSbizSkinShopInfo[i][bLSbizSkinShop_ExitX], LSbizSkinShopInfo[i][bLSbizSkinShop_ExitY], LSbizSkinShopInfo[i][bLSbizSkinShop_ExitZ]);
    SetPlayerFacingAngle(playerid, LSbizSkinShopInfo[i][bLSbizSkinShop_ExitA]);
    SetCameraBehindPlayer(playerid);
    }
    }
    return 1;
    }
    ocmd:exit(playerid, params[])
    {
    new SpielerIstInSkinShopID = GetPVarInt(playerid,"SpielerIstInSkinShopIDPVar");
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_ExitX], LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_ExitY], LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_ExitZ]))
    {
    SetPlayerVirtualWorld(playerid, 0);
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_EnterZ]);
    SetPlayerFacingAngle(playerid, LSbizSkinShopInfo[SpielerIstInSkinShopID][bLSbizSkinShop_EnterA]);
    SetCameraBehindPlayer(playerid);
    }
    return 1;
    }

    Es funktioniert, vielen Dank!


    Nun habe ich da aber mal eine andere Frage.


    Ich habe bisher 2 Filterscripts geschrieben.


    1. Login/Register Filterscript
    2. LSSkinshop Filterscript


    Im 1. Filterscript wird der Account des Spielers geladen, im 2. Filterscript will ich nun für den kauf eines Skinshops eine Abfrage machen, ob und wie viel Geld der Spieler hat.
    Genauer: Das ob und wie viel Geld der Spieler hat wird im 1. Filterscript geladen, der ob der Skinshop zu verkaufen ist und der Kaufpreis des Skinsshops wird im 2. Filterscript geladen.



    Wie mache regel ich das nun am besten?



    Gruß

    Bei den beiden kommt folgender Fehler: error 035: argument type mismatch (argument 1)


    cache_get_field_content("LSbizSkinShop_Name", string, handle);
    cache_get_field_content("LSbizSkinShop_Besitzer", string, handle);

    Ich hab jetzt erst einmal alles auf die neuste MYSQL-Version umgeändert:



    public OnFilterScriptInit()
    {
    MySQL_SetupConnection();
    LoadLSbizSkinShop();
    return 1;
    }



    forward LoadLSbizSkinShop();
    public LoadLSbizSkinShop()
    {
    for(new i = 0; i < MAX_LSbizSkinShop; i++)
    {
    new string[186];
    LSbizSkinShopInfo[i][bLSbizSkinShop_ID] = cache_get_field_content_int(0, "LSbizSkinShop_ID", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_Name] = cache_get_query_string("LSbizSkinShop_Name", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_Preis] = cache_get_field_content_int(0, "LSbizSkinShop_Preis", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer] = cache_get_query_string("LSbizSkinShop_Besitzer", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_Interior] = cache_get_field_content_int(0, "LSbizSkinShop_Interior", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_World] = cache_get_field_content_int(0, "LSbizSkinShop_World", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX] = cache_get_field_content_float(0, "LSbizSkinShop_EnterX", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY] = cache_get_field_content_float(0, "LSbizSkinShop_EnterY", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ] = cache_get_field_content_float(0, "LSbizSkinShop_EnterZ", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_ExitX] = cache_get_field_content_float(0, "LSbizSkinShop_ExitX", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_ExitY] = cache_get_field_content_float(0, "LSbizSkinShop_ExitY", handle);
    LSbizSkinShopInfo[i][bLSbizSkinShop_ExitZ] = cache_get_field_content_float(0, "LSbizSkinShop_ExitZ", handle);
    if(!strcmp(LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer], "Niemand", false))
    {
    format(string, sizeof(string), "%s\n[Zu Verkaufen!]\nPreis: %i\nBenutze '/enter' oder drücke 'F' zum das Gebäude zu betreten!", LSbizSkinShopInfo[i][bLSbizSkinShop_Name], LSbizSkinShopInfo[i][bLSbizSkinShop_Preis]);
    }
    else
    {
    format(string, sizeof(string), "%s\nBesitzer: %s\nBenutze '/enter' oder drücke 'F' zum das Gebäude zu betreten!", LSbizSkinShopInfo[i][bLSbizSkinShop_Name], LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]);
    }
    LSbizSkinShopInfo[i][bLSbizSkinShop_Label] = CreateDynamic3DTextLabel(string, COLOR_YELLOW, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ], 12, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1);
    LSbizSkinShopInfo[i][bLSbizSkinShop_Pickup] = CreateDynamicPickup(1272, 1, LSbizSkinShopInfo[i][bLSbizSkinShop_EnterX], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterY], LSbizSkinShopInfo[i][bLSbizSkinShop_EnterZ], -1);
    printf("Hallo :%i", LSbizSkinShopInfo[i][bLSbizSkinShop_ID]);
    if(IsBusinessOwned(i))
    {
    printf("LSbizSkinShop %i wurde geladen; Name: %s", i, LSbizSkinShopInfo[i][bLSbizSkinShop_Name]);
    }
    }
    return 1;
    }



    Warum Screenshot, ist der Text aus der SQL-File nicht besser?


    Code
    /*Navicat MySQL Data TransferSource Server         : SynerozSource Server Version : 50625Source Host           : localhost:3306Source Database       : gta_dbTarget Server Type    : MYSQLTarget Server Version : 50625File Encoding         : 65001Date: 2015-08-16 19:28:54*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `lsbizskinshop`-- ----------------------------DROP TABLE IF EXISTS `lsbizskinshop`;CREATE TABLE `lsbizskinshop` (  `LSbizSkinShop_ID` int(11) NOT NULL AUTO_INCREMENT,  `LSbizSkinShop_Name` varchar(24) NOT NULL,  `LSbizSkinShop_Preis` int(11) NOT NULL,  `LSbizSkinShop_Besitzer` varchar(24) NOT NULL,  `LSbizSkinShop_Interior` int(11) NOT NULL,  `LSbizSkinShop_World` int(11) NOT NULL,  `LSbizSkinShop_EnterX` float NOT NULL,  `LSbizSkinShop_EnterY` float NOT NULL,  `LSbizSkinShop_EnterZ` float NOT NULL,  `LSbizSkinShop_ExitX` float NOT NULL,  `LSbizSkinShop_ExitY` float NOT NULL,  `LSbizSkinShop_ExitZ` float NOT NULL,  PRIMARY KEY (`LSbizSkinShop_ID`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;-- ------------------------------ Records of lsbizskinshop-- ----------------------------INSERT INTO `lsbizskinshop` VALUES ('1', 'Los Santos Skins', '100000', 'Syneroz', '2', '1', '1959', '-2510', '14', '0', '0', '0');


    Es wird anscheinend nichts aus der Datenbank geholt und in
    LSbizSkinShopInfo[i][bLSbizSkinShop_ID]
    usw.
    überschrieben.

    Soweit so gut.. :D


    Nun habe ich noch das Problem, dass ich bei 3 Skins habe, die jeder Spieler nach der Registrierung im Besitz haben soll:



    SpielerInfo[playerid][pSkins][303] = '1';
    SpielerInfo[playerid][pSkins][304] = '1';
    SpielerInfo[playerid][pSkins][305] = '1';


    Egal wie ich es drehe und wende, die 3 Skins bleiben in der Datenbank auf 0.


    Hiermit wird der Account erstellt:
    new query[768];
    for(new i=0; i<39; i++) format(SpielerInfo[playerid][pSkins], 313, "%s00000000", SpielerInfo[playerid][pSkins]);
    mysql_format(handle, query, sizeof(query), "INSERT INTO accounts (Name, Passwort, Skins) VALUES ('%e', MD5('%e'), '%e')", SpielerInfo[playerid][pName], inputtext, SpielerInfo[playerid][pSkins]);
    mysql_pquery(handle, query, "CreateAccount", "d", playerid);


    Das dazugehörige Piblic:


    forward CreateAccount(playerid);
    public CreateAccount(playerid)
    {
    SpielerInfo[playerid][pdb_id] = cache_insert_id();
    return 1;
    }

    So ich habe das ganze jetzt auf die Publics umgeschrieben. - Von ca. 4000 Zeilen im Login/Register-System sind nur noch ca. 3300 übrig.. :D


    Und da ist gleich das nächste Problem:



    new query[256]; mysql_format(handle, query, sizeof(query), "UPDATE accounts SET SecAntwort = '%s' WHERE id = '%i'",inputtext, SpielerInfo[playerid][pdb_id]);
    mysql_pquery(handle, query);


    Nun würde ich gerne anstelle dessen das ganze so speichern, dass der inputtext so abgespeichert wird:



    SpielerInfo[playerid][pSecAntwort] = ??



    Des weiteren wird nichts gespeichert:
    stock SavePlayer(playerid)
    {
    if(SpielerInfo[playerid][pLoggedIn])
    {
    new query[256];
    if(!strlen(SpielerInfo[playerid][pSkins]))
    {
    for(new i=0; i<39; i++) format(SpielerInfo[playerid][pSkins], 313, "%s00000000", SpielerInfo[playerid][pSkins]);
    }
    mysql_format(handle, query, sizeof(query), "UPDATE accounts SET Level = '%i', Skin = '%i', Geld = '%i', Kills = '%i', Tode = '%i', bdaytag = '%i', bdaymonat = '%i', bdayjahr = '%i', Sex = '%i', SecFrage = '%i',Fraktion = '%i', Skins = '%s' WHERE id = '%s'",
    SpielerInfo[playerid][pLevel], SpielerInfo[playerid][pSkin],SpielerInfo[playerid][pGeld], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pTode], SpielerInfo[playerid][pbdaytag], SpielerInfo[playerid][pbdaymonat], SpielerInfo[playerid][pbdayjahr], SpielerInfo[playerid][pSex], SpielerInfo[playerid][pSecFrage], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pSkins], SpielerInfo[playerid][pdb_id]);
    mysql_pquery(handle, query);
    }
    return 1;
    }

    Man sollte vielleicht hinten ein "(MTA SA)" und "(SAMP)" dranhängen, in der eile verwechselt man das schon einmal.. :S



    Ich habe mir natürlich dein Tut angeschaut, allerdings muss ich so wie Du es machst
    bei meinen Script viele publics schreiben. Daher wollte ich es eigentlich so lösen.

    Hallo,


    ich bin gerade dabei auf MySQL R39-3 umzusatteln, allerdings habe ich da einige Probleme.


    Es fängt bei der Abfrage beim Login, ob das Passwort richtig ist an. Ich kann das richtige Passwort
    eingeben und bin eingeloggt, aber auch das falsche Passwort und bin dann ebenfalls eingeloggt.


    Hier mal der Auszug, wo und wie die Abfrage stattfindet:

    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Anmeldung","Das Angegebene Passwort war Falsch!","Anmelden","Abbrechen");
    return 1;
    }
    else
    {
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT id FROM accounts WHERE Name = '%e' AND Passwort = MD5('%e')", SpielerInfo[playerid][pName], inputtext);
    if(cache_get_row_count() == 0)
    {
    SpielerInfo[playerid][pdb_id] = cache_get_field_content_int(0, "id", handle);
    SpielerInfo[playerid][pLevel] = cache_get_field_content_int(0, "Level", handle);
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "Skin", handle);
    SpielerInfo[playerid][pGeld] = cache_get_field_content_int(0, "Geld", handle);
    SpielerInfo[playerid][pKills] = cache_get_field_content_int(0, "Kills", handle);
    SpielerInfo[playerid][pTode] = cache_get_field_content_int(0, "Tode", handle);
    SpielerInfo[playerid][pbdaytag] = cache_get_field_content_int(0, "bdaytag", handle);
    SpielerInfo[playerid][pbdaymonat] = cache_get_field_content_int(0, "bdaymonat", handle);
    SpielerInfo[playerid][pbdayjahr] = cache_get_field_content_int(0, "bdayjahr", handle);
    SpielerInfo[playerid][pSex] = cache_get_field_content_int(0, "Sex", handle);
    SpielerInfo[playerid][pSkins] = cache_get_query_string("Skins", handle);
    SpielerInfo[playerid][pSecAntwort] = cache_get_query_string("SecAntwort", handle);
    SpielerInfo[playerid][pSecFrage] = cache_get_field_content_int(0, "SecFrage", handle);
    SpielerInfo[playerid][pLoggedIn] = true;
    if(SpielerInfo[playerid][pSecFrage] != 0)
    {