Beiträge von Jeffry

    Hast du "eingeloggt" in das enum von sInfo geschrieben? Oder "level", je nach dem welches die Zeile 270 ist?
    Poste ggf. mal das enum das zu sInfo gehört.

    So ist es richtig:
    ocmd:tote(playerid)
    {
    if(!isPlayerInFrakt(playerid,3)) return SendClientMessage(playerid,ROT,"Du bist Kein Notarzt!");
    new bool:einerTot, string[145];
    if(sInfo[playerid][mduty] == 1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(sInfo[i][PTot] == 1)
    {
    if(!einerTot) SendClientMessage(playerid,ROT,".:Tote Spieler:.");
    format(string,sizeof(string),"%s || ID %i",getPlayerName(i),i);
    SendClientMessage(playerid,GELB,string);
    einerTot = true;
    }
    }
    }
    if(!einerTot)
    {
    SendClientMessage(playerid,ROT,"Es gibt zu Zeit keine Toten User");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du bist nicht als Notarzt Onduty!");
    return 1;
    }
    return 1;
    }

    Ok, aber das sieht doch schon wesentlich besser aus.
    Poste bitte mal dein enum, das zu PrivateVehicle gehört, sowie einen Screenshot von der Struktur der Tabelle "script_vehicles", damit wir sehen können, welche Spalte was ist (Float, Integer, String...).

    Sorry für die späte Antwort und Danke für den Push. Ich habe deine Antwort völlig übersehen.


    Ich sehe grade das Problem im Log. Du hast mysql_query gar nicht umdefiniert, sodass man darin Parameter verwenden kann.
    mysql_query("SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'",SpielerInfo[playerid][pName], slot);


    zu:
    new query[256];
    format(query, sizeof(query), "SELECT * FROM script_vehicles WHERE vehBesitzer='%s' AND Slot = '%d'", SpielerInfo[playerid][pName], slot);
    mysql_query(query);


    Wie sieht es dann aus?

    Generell einfach dort wo du es abfragen willst.
    Sagen wir mal, du hast einen Personalausweis und eine Behörde an der man den Perso verlängern kann, dann kannst du an der Behörde folgendes machen:


    if(ablaufDatum[playerid] < gettime())
    {
    //Er kann den Perso für etwas Geld verlängern...
    }
    else return SendClientMessage(playerid, 0xFF0000FF, "Dein Perso ist nicht abgelaufen!");

    Das Problem ist die Abfrage in der while Schleife. Die wird beendet, sobald eine Pflanze nicht existiert. Es wurde zwar alles richtig gespeichert, aber nur bis zu einer Pflanze die nicht existiert.
    Gut, dass es Logs gibt. :)


    Schreibe es so:
    new drg=1;
    while(drg<MAX_DRUGS)
    {
    if(DrugInfo[drg][drgfraktid] != 0)
    {
    format(string, sizeof(string), "SELECT * FROM `drogenpflanzen` WHERE `pflanze` = '%d'", drg);
    self_mysql_queryEx(string);
    mysql_store_result(MySQLConnection);
    if(mysql_num_rows(MySQLConnection) == 0)
    {
    format(string, sizeof(string), "INSERT INTO `drogenpflanzen` (`pflanze`) VALUES ('%d')", drg);
    self_mysql_queryEx(string);
    }
    mysql_free_result(MySQLConnection);
    new var[526];
    format(var, sizeof var, "UPDATE `drogenpflanzen` SET `drgfraktid`='%d', `drgArt`='%d' , `drgXpos`='%f', `drgYpos`='%f', `drgZpos`='%f', `drginterior`='%d', `drgvirtualworld`='%d', `drgProduceDrugs`='%d', `drgNextDrugsIn`='%d', `drgWasserzustand`='%d' WHERE `pflanze`='%d'",
    DrugInfo[drg][drgfraktid],DrugInfo[drg][drgArt],DrugInfo[drg][drgXpos],DrugInfo[drg][drgYpos],DrugInfo[drg][drgZpos],DrugInfo[drg][drginterior],DrugInfo[drg][drgvirtualworld],DrugInfo[drg][drgProduceDrugs],DrugInfo[drg][drgNextDrugsIn],DrugInfo[drg][drgWasserzustand],drg);
    self_mysql_queryEx(var);
    }
    drg++;
    }

    Arbeite mit dem Timestamp. Beispiel für ein Ablaufdatum:


    new ablaufDatum[MAX_PLAYERS];


    Beim Kauf:
    ablaufDatum[playerid] = gettime() + 86400*ANZAHL_TAGE;


    Bei der Abfrage ob abgelaufen:
    if(ablaufDatum[playerid] < gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Abgelaufen!");


    Den Wert von ablaufDatum[playerid] speicherst du als Integer (Ganze Zahl) in deine Datenbank/Spielerdatei.

    Es ist besser, wenn du hier mit PlayerTextDraws arbeitest:
    new PlayerText:PayDayTD[MAX_PLAYERS];


    public OnGameModeInit()
    {
    SetTimer("PayDayTDTimer",1000,true);
    return 1;
    }
    forward PayDayTDTimer();
    public PayDayTDTimer()
    {
    new string[32];
    format(string,sizeof(string),"%02d/60",SpielerInfo[playerid][pPayDay]+1);
    PlayerTextDrawSetString(PayDayTi[playerid],string);

    //Ich weiß nicht ob du das woanders machst, aber du kannst es hier so machen:
    SpielerInfo[playerid][pPayDay]++;
    if(SpielerInfo[playerid][pPayDay] == 60)
    {
    //PayDay geben
    SpielerInfo[playerid][pPayDay] = 0;
    }
    return 1;
    }
    public OnPlayerSpawn(playerid)
    {
    PlayerTextDrawShow(playerid, PayDayTi[playerid]);
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    PayDayTi[playerid] = CreatePlayerTextDraw(playerid, 556.000000, 425.000000, "--/--");
    PlayerTextDrawBackgroundColor(playerid, PayDayTi[playerid], 255);
    PlayerTextDrawFont(playerid, PayDayTi[playerid], 1);
    PlayerTextDrawLetterSize(playerid, PayDayTi[playerid], 0.360000, 1.100000);
    PlayerTextDrawColor(playerid, PayDayTi[playerid], -1);
    PlayerTextDrawSetOutline(playerid, PayDayTi[playerid], 0);
    PlayerTextDrawSetProportional(playerid, PayDayTi[playerid], 1);
    PlayerTextDrawSetShadow(playerid, PayDayTi[playerid], 1);
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    PlayerTextDrawDestroy(playerid, PayDayTi[playerid]);
    return 1;
    }

    new bool:onDuty[MAX_PLAYERS];
    new oldName[MAX_PLAYERS][MAX_PLAYER_NAME];
    new oldColor[MAX_PLAYERS];


    ocmd:aduty(playerid,params)
    {
    if(IsPlayerAdmin(playerid))
    {
    new str[145];
    if(!onDuty[playerid])
    {
    format(oldName[playerid], MAX_PLAYER_NAME, SpielerName(playerid));
    oldColor[playerid] = GetPlayerColor(playerid);
    format(str,sizeof(str),"[XYZ]%s",SpielerName(playerid));
    SetPlayerName(playerid,str);
    format(str,sizeof(str),"%s ist jetzt Aduty.", oldName[playerid]);
    SendClientMessageToAll(0xFFFFFFFF,str);
    SetPlayerColor(playerid,0xFF00FFFF);
    onDuty[playerid] = true;
    }
    else
    {
    SetPlayerName(playerid,oldName[playerid]);
    format(str,sizeof(str),"%s ist nicht mehr Aduty.", oldName[playerid]);
    SendClientMessageToAll(0xFFFFFFFF,str);
    SetPlayerColor(playerid,oldColor[playerid]);
    onDuty[playerid] = false;
    }
    }
    else SendClientMessage(playerid,0xFFFFFFFF,"Du bist Kein Admin!");
    return 1;
    }


    stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    EDIT:
    Slash™: Es bringt nur nichts wen der Code im Ansatz schon falsch aufgebaut ist, das hilft keinem. ;)


    Prepaid: Code hinzugefügt. Willkommen auf Breadfish! :)


    EDIT2:
    Hab eine Zeile vergessen zu kopieren. Jetzt passt es.

    Steht etwas bei anderen Menus im Log, bzw. klappt es da?
    Hast du zufällig eine mehrzeilige Meldung mit vielen Zahlen im Compiler?


    Wenn weder noch, dann poste bitte mal dein OnPlayerSelectedMenuRow, das Ganze.

    Kannst du mal den MySQL Debug Modus einschalten (sodass alles geprintet wird)?
    Dann gehst du genau dein Beispiel durch und postest dazu den Log, darin markierst du, wann du was gemacht hast.


    An dem Code den du gepostet hast ist eigentlich nichts falsch, möglicherweise liegt es am Löschen, aber ich denke anhand der Logs kommen wir dem Problem sicherlich näher.

    Kommt der print, wenn du ENTER drückst? Wenn nicht, dann wird das callback gar nicht aufgerufen, sprich es liegt an etwas anderem, möglicherweise an einem Filterscript, der auch Menus beinhaltet?


    :rolleyes:



    Hast du noch andere Menus in anderen Codes?

    Naja, ich merk mir nicht jeden Code an dem ich mal was gemacht habe, das wäre viel. :D


    new query[256];
    format(query, sizeof(query), "SELECT banID FROM spielertimebanned WHERE Name = '%s'", name);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    format(query, sizeof(query), "DELETE FROM spielertimebanned WHERE banID = %d", mysql_fetch_int());
    mysql_query(query);
    SendClientMessage(playerid, 0xFFFFFFFF, "Spieler entbannt.");
    }
    mysql_free_result();


    "name" wird im Befehls-Parameter eingelesen.

    Lade dir das MySQL Plugin nochmal herunter, dort findest du dann im Ordner eine mysql_static.so. Nimm das, da dort diese Library bereits eingebaut ist.