Filterscript wird nicht geladen.

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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.

  • Hmm, versuche mal, ob es per Timer geht. Möglicherweise führt er den SELECT zuerst aus.
    Den stock zu einem public ändern:
    forward ReloadLSbizSkinShop();
    public 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;
    }


    Und:
    ReloadLSbizSkinShop();
    zu:
    SetTimer("ReloadLSbizSkinShop", 1000, false);


    Wenn das geht, dann kannst du ja den Timer kleiner als 1000 machen.

  • 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.

  • 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;
    }

  • Bei CheckPasswortForLogin lädst du das Geld ja aus der Datenbank.


    Heißt der Timer kann so sein:
    forward SpielerUpdate();
    public SpielerUpdate()
    {
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
    if(SpielerInfo[i][pLoggedIn] == true)
    {
    ResetPlayerMoney(i);
    GivePlayerMoney(i, SpielerInfo[i][pGeld]);
    }
    }
    return 1;
    }


    Wenn das immer 0 ist, dann zeige bitte wie du CheckPasswortForLogin aufrufst (mysql_pquery?).

  • 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?

  • 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;
    }

  • stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }


    if(ReturnPlayerID(LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]) != INVALID_PLAYER_ID)
    {
    //Besitzer online
    }

  • 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;
    }

  • Hier muss die ID des Spielers rein, nicht der Name:
    SpielerInfo[LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer]][pGeld] += LSbizSkinShopInfo[i][bLSbizSkinShop_Preis];
    zu:
    SpielerInfo[ReturnPlayerID(LSbizSkinShopInfo[i][bLSbizSkinShop_Besitzer])][pGeld] += LSbizSkinShopInfo[i][bLSbizSkinShop_Preis];

  • 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.

  • Lass es dir mal so ausgeben. Was wird dann angezeigt?
    Bist du im richtigen Interior und der richtigen virtuellen Welt?
    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]);
    printf("Label: %d | Pickup: %d | World: %d | Interior: %d", _:LSbizSkinShopInfo[i][bLSbizSkinShop_Label2], LSbizSkinShopInfo[i][bLSbizSkinShop_Pickup2], LSbizSkinShopInfo[i][bLSbizSkinShop_World], LSbizSkinShopInfo[i][bLSbizSkinShop_Interior]);