Hey
Habe einem Problem mit meinem Haus&Bizsystem.
Problem 1: [GEKLÄRT]
Undzwar , wenn man zB /hauskaufen macht , und in keinem Hauspunkt steht , wird die Nachricht 30x gespammt (Oben definiert , sprich #define MAX_HAUS 30)
Das gleiche auch beim Bizsystem , nur dass da die Nachricht 5x kommt (#define BIZZ_FILES 5)
ocmd:hauskaufen(playerid,params[])
{
for(new haus=1;haus<MAX_HAUS;haus++)
{
if(IsPlayerInRangeOfPoint(playerid,5,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(HausInfo[haus][haus_besitzer],name,false) == 0)return SendClientMessage(playerid,Rot,"Dieses Haus gehört dir bereits!");
if(strcmp(HausInfo[haus][haus_besitzer],"Niemand",false))return SendClientMessage(playerid,Rot,"Dieses Haus steht nicht zum Verkauf!");
// wenn das Haus frei ist dann kaufen:
if(GetPlayerMoney(playerid) < HausInfo[haus][haus_preis])return SendClientMessage(playerid,Rot,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid,-HausInfo[haus][haus_preis]); // Geld abziehen
new Hausstring[50];
format(Hausstring,50,"/haus/%d.txt",haus); // Pfad formatieren
dini_Set(Hausstring,"besitzer",name); // Besitzer überschreiben
SendClientMessage(playerid,Gelb,"Du hast das Haus erfolgreich gekauft!");
KillHaus(haus); // Hauspickup löschen
LoadHaus(haus); // Haus laden
}
else
{
SendClientMessage(playerid,Rot,"Du bist in keinem Hauspickup!");
}
}
return 1;
}
ocmd:bizkaufen(playerid,params[])
{
new string[256];
for(new b = 1; b < BIZ_FILES; b++)
{
format(string, sizeof(string), "/Biz/biz%d.txt", b);
if(IsPlayerInRangeOfPoint(playerid,5,bInfo[b][PossX],bInfo[b][PossY],bInfo[b][PossZ]))
{
if(bInfo[b][Besetzt] == 0)
{
if(strcmp(bInfo[b][Besitzer],PlayerName(playerid),false) == 0)return SendClientMessage(playerid,0xFFFF00FF,"Dieses Biz gehört dir bereits!");
if(GetPlayerMoney(playerid) >= bInfo[b][Preis]) //Bizz Preis
GivePlayerMoney(playerid,-bInfo[b][Preis]);
format(string,64,"/Biz/biz%d.txt",b); //öffnet die Datei
dini_IntSet(string,"Besetzt",1); //setzt Besetzt auf 1
bInfo[b][Besetzt] = 1;
dini_Set(string,"Besitzer",PlayerName(playerid)); //Hier wird der Besitzer name gesetzt
SendClientMessage(playerid,0xFFFF00FF,"Du hast erfolgreich das Bizz gekauft!");
KillBizz(b); //stock wird aufgerufen
LoadBizz(b); //Stock wird aufgerufen
}
else
{
SendClientMessage(playerid,Rot,"Das Biz steht nicht zum Verkauf!");
}
}
else
{
SendClientMessage(playerid,Rot,"Du bist in keinem Biz-Kaufpunkt.");
}
}
return 1;
}
Problem 2: [GEKLÄRT]
Ich kann nur 1 Biz erstellen!
Ich habe oben #define BIZZ_FILES 5 gemacht , aber ich kann immer nur 1 Biz erstellen.
Sprich wenn 1 Biz erstellt ist , kann ich /createbiz machen , aber es passiert ingame garnichts, es wird aber die Datei erstellt.
Wenn ich das Biz aus dem Ordner lösche und den Server neustarte , kann ich wieder ein neues Biz erstellen , aber immer nur 1 !
stock LoadBizz(bizid)
{
for(new b = 1; b <BIZ_FILES; b++)
{
new Biz[64];
format(Biz,sizeof(Biz),"Biz/biz%d.txt",b);
if(!fexist(Biz))return 0;
{
bInfo[bizid][PossX] = dini_Float(Biz,"PosX");
bInfo[bizid][PossY] = dini_Float(Biz,"PosY");
bInfo[bizid][PossZ] = dini_Float(Biz,"PosZ");
bInfo[bizid][Bizkasse] = dini_Int(Biz,"Bizkasse");
format(bInfo[bizid][Namme],64,"%s",dini_Get(Biz,"Name"));
bInfo[bizid][Preis] = dini_Int(Biz,"Preis");
bInfo[bizid][Besetzt] = dini_Int(Biz,"Besetzt");
format(bInfo[bizid][Besitzer],64,"%s",dini_Get(Biz,"Besitzer"));
if(bInfo[bizid][Besetzt] == 0)
{
bInfo[bizid][Pickup] = CreatePickup(1238 ,23,bInfo[bizid][PossX],bInfo[bizid][PossY],bInfo[bizid][PossZ],0);
new string[196];
format(string,196,"*[BIZINFO]*\nName: %s\nBesitzer: Staat\nPreis: %i\n***",bInfo[bizid][Namme],bInfo[bizid][Preis]);
bInfo[bizid][Label] = Create3DTextLabel(string,0xFFFF00FF,bInfo[bizid][PossX],bInfo[bizid][PossY],bInfo[bizid][PossZ],20,0,0);
return print("Das Biz wurde erfolgreich geladen");
}
if(bInfo[bizid][Besetzt] == 1)
{
bInfo[bizid][Pickup] = CreatePickup(1238 ,23,bInfo[bizid][PossX],bInfo[bizid][PossY],bInfo[bizid][PossZ],0);
new string[196];
format(string,196,"*[BIZINFO]*\nName: %s\nBesitzer: %s\n***",bInfo[bizid][Namme],bInfo[bizid][Besitzer]);
bInfo[bizid][Label] = Create3DTextLabel(string,0xFFFF00FF,bInfo[bizid][PossX],bInfo[bizid][PossY],bInfo[bizid][PossZ],20,0,0);
return print("Das Biz wurde erfolgreich geladen");
}
}
}
return 1;
}
stock CreateBizz(Float:x,Float:y,Float:z,namme[64],besitzer[64],preis)
{
new Biz[64];
for(new b = 1; b < BIZ_FILES; b++)
{
format(Biz,64,"/Biz/biz%d.txt",b);
if(!fexist(Biz))
{
dini_Create(Biz);
dini_FloatSet(Biz,"PosX",x);
dini_FloatSet(Biz,"PosY",y);
dini_FloatSet(Biz,"PosZ",z);
dini_Set(Biz,"Name",namme);
dini_IntSet(Biz,"Preis",preis);
dini_IntSet(Biz,"Besetzt",0);
dini_Set(Biz,"Besitzer",besitzer);
dini_IntSet(Biz,"Bizkasse",0);
return LoadBizz(b);
}
}
return 1;
}
ocmd:createbiz(playerid,params[])
{
new Float:x,Float:y,Float:z,preis;
new namme[64];
if(sscanf(params,"s[64]d",namme,preis))return SendClientMessage(playerid,Rot,"Fehler: /createbiz [Name] [Preis]");
{
GetPlayerPos(playerid,x,y,z);
CreateBizz(x,y,z,namme,"Staat",preis);
}
Problem 3:
Wenn ich /hausverkaufen mache , kommt, dass ich kein Haus habe , obwohl ich eins habe
Wenn ich /bizverkaufen mache , kommt das gleiche wie bei /hausverkaufen !
ocmd:hausverkaufen(playerid,params[])
{
for(new haus=1;haus<MAX_HAUS;haus++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
new Spieler[50];
format(Spieler,50,"/Spieler/%s.txt",name);
if(strcmp(HausInfo[haus][haus_besitzer],name,false) == 0)
{
GivePlayerMoney(playerid,HausInfo[haus][haus_preis]/2);
new Hausstring[50];
format(Hausstring,50,"/haus/%d.txt",haus);
SendClientMessage(playerid,Gelb,"Du hast dein Haus verkauft.");
dini_Set(Hausstring,"besitzer","Niemand");
dini_IntSet(Spieler,"Haus",0);
dini_IntSet(Hausstring,"Besetzt",0);
KillHaus(haus);
LoadHaus(haus);
return true;
}
else
{
return SendClientMessage(playerid,Rot,"Du hast kein Haus!");
}
}
return 1;
}
ocmd:bizverkaufen(playerid,params[])
{
new string[256];
for(new b= 1; b< MAX_BIZ; b++)
{
format(string,sizeof(string),"/Biz/biz%d.txt", b);
if(strcmp(bInfo[b][Besitzer],PlayerName(playerid),false) == 0)
{
GivePlayerMoney(playerid,bInfo[b][Preis]/2);
format(string,64,"/Biz/biz%d.txt",b);
dini_IntSet(string,"Besetzt",0);
bInfo[b][Besetzt] = 0;
dini_Set(string,"Besitzer","Staat");
SendClientMessage(playerid,0xFFFF00FF,"Du hast das Biz erfolgreich verkauft!");
KillBizz(b);
LoadBizz(b);
return true;
}
else
{
return SendClientMessage(playerid,Rot,"Du hast kein Biz!");
}
}
return 1;
}