Das liegt daran, dass das Pickup und das Label die ID 0 haben, und somit immer das vorherige gelöscht wird.
Schreibe es so:
updateHaus(id)
{
new string[128];
if(hInfo[id][h_pickup] != -1)
{
DestroyPickup(hInfo[id][h_pickup]);
}
if(hInfo[id][h_text] != Text3D:-1)
{
Delete3DTextLabel(hInfo[id][h_text]);
}
if(!strlen(hInfo[id][h_besitzer]))
{
hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
format(string,sizeof(string), "Zum Verkauf\nKosten: %i$\n/hauskaufen", hInfo[id][h_preis]);
hInfo[id][h_text]=Create3DTextLabel(string, COLOR_RED, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
}
else
{
hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
format(string,sizeof(string), "Besitzer: %s\n/enter", hInfo[id][h_besitzer]);
hInfo[id][h_text]=Create3DTextLabel(string, COLOR_BUSBLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
}
return 1;
}
Füge bei OnGameModeInit das ein:
for(new i = 0; i < sizeof(hInfo); i++)
{
hInfo[i][h_pickup] = -1;
hInfo[i][h_text] = Text3D:-1;
}
Und setze die Variablen auch genau so zurück, wenn das Haus gelöscht wird, also überall dort, wo DestroyPickup und Delete3DTextLabel verwendet wird (außer in updateHaus, da es dort ja direkt danach neu erstellt wird).