Beiträge von Jeffry

    new Text3D:Businfo[MAX_VEHICLES];
    zu:
    new Text3D:Businfo[MAX_VEHICLES] = {Text3D:-1, ...};


    Und überall wo du:
    Delete3DTextLabel(Businfo[jobcar[playerid]]);
    hast (oder ähnlich, mit dem Label eben):
    if(Businfo[jobcar[playerid]] != Text3D:-1) Delete3DTextLabel(Businfo[jobcar[playerid]]);
    Businfo[jobcar[playerid]] = Text3D:-1;


    Das machst du bei allen Labels so, die irgendwo gelöscht werden. Ist die Variable nämlich ungesetzt, dann ist sie 0, sprich das erste Label wird dann gelöscht (ID 0).

    Bei OnGameModeInit:
    SetTimer("SpecInfo",1000,true);


    Das Callback:
    forward SpecInfo();
    public SpecInfo()
    {
    new info[128], Float:health, wp[2], pID;
    for(new i=0;i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(gSpectateID[i] != -1)
    {
    pID = gSpectateID[i];
    GetPlayerHealth(pID,health);
    format(info,sizeof(info),"Beobachtungsinformationen von: %s (%d)",SpielerName(pID),pID);
    PlayerTextDrawSetString(i,t_Name[i],info);
    format(info,sizeof(info),"HP: %.2f, Ping: %d, FPS: %d~n~~n~~n~",health,GetPlayerPing(pID),pFPS[pID]);
    PlayerTextDrawSetString(i,t_Stats[i],info);
    info = "Waffen: ";
    for(new x=0;x<6;x++)
    {
    GetPlayerWeaponData(pID,x,wp[0],wp[1]);
    if(wp[0] != 0)
    {
    format(info,sizeof(info),"%s%d: %s(%d) ",info,x,WaffenName[wp[0]],wp[1]);
    }
    }
    PlayerTextDrawSetString(i,t_WaffenInfo[i],info);
    }
    }
    return 1;
    }


    Und bei OnPlayerConnect und beim beenden des Spectator-Modus:
    gSpectateID[playerid] = -1;

    Versuche es mal ohne die direkten Zuweisungen bei der Deklaration:
    PUBLIC:UpdateHaus(HausID)
    {
    new string[350], hstate[5], hrentstate[5], str[50], str1[50];


    if(HausID < 0 || HausID >= sizeof(HausInfo)) return 0;


    if(HausInfo[HausID][hLocked]) hstate = "Ja";
    else hstate = "Nein";


    if(HausInfo[HausID][hRentable] == 1) hrentstate = "Ja";
    else hrentstate = "Nein";


    if(strcmp(HausInfo[HausID][hOwner], "Niemand", true) == 0) str = "\n\nNutze /buyhouse um das Haus zu kaufen!";


    if(HausInfo[HausID][hRentable] == 1) str1 = "\nNutze /einmieten um dich einzumieten!";


    format(string, sizeof(string), "%s\n\nHaus Nummer: %d\nBesitzer: %s\nVerschlossen: %s\nLevel: %d\nPreis: $%s\nMietpreis: $%s\nMietbar: %s%s%s", HausInfo[HausID][hName], HausInfo[HausID][hID], HausInfo[HausID][hOwner], hstate, HausInfo[HausID][hLevel], GetPoint(HausInfo[HausID][hPreis]), GetPoint(HausInfo[HausID][hMiete]), hrentstate, str, str1);


    if(IsValidDynamic3DTextLabel(HausInfo[HausID][hElement])) UpdateDynamic3DTextLabelText(HausInfo[HausID][hElement], COLOR_PICKUPS, string);
    else HausInfo[HausID][hElement] = CreateDynamic3DTextLabel(string,COLOR_PICKUPS,HausInfo[HausID][hausx],HausInfo[HausID][hausy],HausInfo[HausID][hausz],10,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0,0,-1,100);


    if(IsValidDynamicPickup(HausInfo[HausID][hPickup])) DestroyDynamicPickup(HausInfo[HausID][hPickup]);


    new pickupID = 1272;
    if(strcmp(HausInfo[HausID][hOwner], "Niemand", true) == 0) pickupID = 1273;


    HausInfo[HausID][hPickup] = CreateDynamicPickup(pickupID, 1, HausInfo[HausID][hausx], HausInfo[HausID][hausy], HausInfo[HausID][hausz], 0);
    return 1;
    }

    Das Callback OnPlayerTakeDamage das du eingefügt hast wird wohl über einen Hook schon definiert sein. Die Variablen die als undefined angezeigt werden scheinen dazuzugehören.
    Da ich weder die Include kenne noch habe ist es am sinnvollsten wenn du dich mit Slice in Verbindung setzt, der wird dir sagen können, was du machen musst, damit es klappt.


    Alternativ musst du eben mal suchen, ob du das irgendwo über einen Hook definiert findest, dann kannst du den entsprechenden Code ja dort einfügen.

    Das kannst du dann so machen:
    stock UpdateMieterName(playerid,HausID)
    {
    for(new i=0; i<30; i++)
    {
    if(!strcmp(GetName(playerid), HausMieter[HausID][i], true))
    {
    format(HausMieter[HausID][i], MAX_PLAYER_NAME, "-Niemand-");
    new SQL[128];
    format(SQL, sizeof(SQL), "UPDATE hauser SET Mieter%i = '-Niemand-' WHERE ID = '%d'", i+1, HausID);
    mysql_query(SQL);
    return 1;
    }
    }
    return 0;
    }


    Ich habe an der anderen Funktion noch etwas geändert (if-Abfrage), da hatte ich einen alten Code kopiert.
    Die muss so aussehen:
    stock CheckMieterDatenbank(playerid,HausID)
    {
    for(new i=0; i<30; i++)
    {
    if(!strcmp("-Niemand-", HausMieter[HausID][i], true))
    {
    format(HausMieter[HausID][i], MAX_PLAYER_NAME, GetName(playerid));
    new SQL[128];
    format(SQL, sizeof(SQL), "UPDATE hauser SET Mieter%i = '%s' WHERE ID = '%d'", i+1, GetName(playerid), HausID);
    mysql_query(SQL);
    return 1;
    }
    }
    return 0;
    }