Hallo
Ich habe das problem, dass mein Dynamisches Hausystem nicht funktioniert.
Ich habe es nach diesem Tutorial gescripted: Klick Mich
Ich habe im Script keine Errors aber man kann kein haus an einen anderen Spieler verkaufen man bekommt zwar Geld und dem anderen wird es abgezogen aber das Haus bleibt beim eigentlich Besitzer. Noch dazu bekommst man nicht soviel wie man angegeben hat sondern zum Teil unterschiedliche Summen
und als letztes Problem dazu wenn sich ein haus "updated" z.B durch Hauskaufen wird ab und zu kein textlabel oder Pickup geladen(Immer beim Befehl /haussell?!?)
enum Hausinfo
{
Besitzer[128],
HausNR,
Kaufpreis,
Float:hx,
Float:hy,
Float:hz,
Eisenlager,
Holzlager,
Schwarzpulver,
Drogenlager,
haus_innenraum,
Abgeschlossen,
hpickup,
Text3D:hlabel
};
new hInfo[MAX_Haus][Hausinfo];
OnGameModeInit()
CreatePickup(1273,23,0,0,1000,99); // damit es keine ID verschiebung gibt
for(new haus=1;haus<MAX_Haus;haus++)
{
LoadHaus(haus);
}
ocmd:hauskaufen(playerid,params[])
{
for(new haus=1;haus<MAX_Haus;haus++)
{
if(IsPlayerInRangeOfPoint(playerid,10,hInfo[haus][hx],hInfo[haus][hy],hInfo[haus][hz]))
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(hInfo[haus][Besitzer],name,false) == 0)return SendClientMessage(playerid,hellrot,"Dieses Haus gehört dir bereits!");
if(strcmp(hInfo[haus][Besitzer],"Staat",false))return SendClientMessage(playerid,hellrot,"Dieses Haus steht nicht zum Verkauf!");
if(GetPlayerMoney(playerid) < hInfo[haus][Kaufpreis])return SendClientMessage(playerid,hellrot,"Du hast nicht genug Geld!");
GivePlayerMoney(playerid,-hInfo[haus][Kaufpreis]);
new pfad[100];
format(pfad,100,"/Häuser/%d.txt",haus);
dini_Set(pfad,"Besitzer",name);
KillHaus(haus);
LoadHaus(haus);
}
}
return 1;
}
ocmd:haussell(playerid,params[])
{
for(new haus=1;haus<MAX_Haus;haus++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(hInfo[haus][Besitzer],name,false) == 0)
{
GivePlayerMoney(playerid,hInfo[haus][Kaufpreis]/2);
new pfad[100];
format(pfad,100,"/Häuser/%d.txt",haus);
dini_Set(pfad,"Besitzer","Staat");
KillHaus(haus);
LoadHaus(haus);
}
}
return 1;
}
ocmd:sellhaus(playerid,params[])
{
new pID,preis,string1[128],string2[128],string3[128],Float:x,Float:y,Float:z;
for(new haus=1;haus<MAX_Haus;haus++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(hInfo[haus][Besitzer],name,false) == 0)
{
if(sscanf(params,"ui",pID,preis))return SendClientMessage(playerid,rot,"Benutze /sellhaus [ID] [Preis]");
if(pID == playerid)return SCM(playerid,rot,"Du kannst dir selbst kein Haus verkaufen");
GetPlayerPos(playerid,x,y,z);
if(!IsPlayerInRangeOfPoint(pID,20,x,y,z))return SCM(playerid,hellrot,"Der Spieler ist nicht in deiner Nähe");
format(string1,sizeof(string1),"%s bietet dir sein Haus %i für %i€ an.",Spielername(playerid),hInfo[haus][HausNR],preis);
format(string2,sizeof(string2),"Benutze /accepthaus um das Angebot anzunehmen oder /cancel um es abzulehnen");
format(string3,sizeof(string3),"Du hast %s dein Haus für %i€ angeboten",Spielername(pID),preis);
Anfrage[pID] = 3;
AnfrageID[pID] = playerid;
Ueberweiser[pID] = preis;
}
}
SCM(pID,orange2,string1);
SCM(pID,orange2,string2);
SCM(playerid,orange2,string3);
return 1;
}
ocmd:accepthaus(playerid,params[])
{
if(Anfrage[playerid] == 3)
{
new string1[128],string2[128];
for(new haus=1;haus<MAX_Haus;haus++)
{
if(strcmp(hInfo[haus][Besitzer],Spielername(AnfrageID[playerid]),false) == 0)
{
if(GetPlayerMoney(playerid) >= Ueberweiser[playerid])
{
Anfrage[playerid] = 0;
format(string1,sizeof(string1),"Du hast das Angebot von %s angenommen und sein Haus für %i€ gekauft",Spielername(AnfrageID[playerid]),Ueberweiser[playerid]);
format(string2,sizeof(string2),"%s hat dein Angebot angenommen und dein Haus für %i€ gekauft",Spielername(playerid),Ueberweiser[playerid]);
GivePlayerMoney(AnfrageID[playerid],Ueberweiser[playerid]);
GivePlayerMoney(playerid,-Ueberweiser[playerid]);
new pfad[100];
format(pfad,100,"/Häuser/%d.txt",haus);
dini_Set(pfad,"Besitzer",Spielername(AnfrageID[playerid]));
KillHaus(haus);
LoadHaus(haus);
}
}
}
SCM(playerid,orange2,string1);
SCM(AnfrageID[playerid],orange2,string2);
Ueberweiser[playerid] = 0;
AnfrageID[playerid] = 0;
Anfrage[playerid] = 0;
}
else
{
SCM(playerid,hellrot,"Du hast kein Angebot erhalten");
}
return 1;
}
ocmd:enter(playerid,params[])
{
for(new haus=1;haus<MAX_Haus;haus++)
{
if(IsPlayerInRangeOfPoint(playerid,15,hInfo[haus][hx],hInfo[haus][hy],hInfo[haus][hz]))
{
if(hInfo[haus][Abgeschlossen] == 0)
{
GetPlayerPos(playerid,xx,yy,zz);
switch(hInfo[haus][haus_innenraum])
{
case 1:{SetPlayerInterior(playerid,1);SetPlayerPos(playerid,223.043991, 1289.259888, 1082.199951);SetPlayerVirtualWorld(playerid,1+playerid);}
case 3:{SetPlayerInterior(playerid,3);SetPlayerPos(playerid,235.508994, 1189.169897, 1080.339966);SetPlayerVirtualWorld(playerid,1+playerid);}
case 7:{SetPlayerInterior(playerid,7);SetPlayerPos(playerid,225.630997, 1022.479980, 1084.069946);SetPlayerVirtualWorld(playerid,1+playerid);}
case 12:{SetPlayerInterior(playerid,12);SetPlayerPos(playerid,2324.33, -1144.79, 1050.71);SetPlayerVirtualWorld(playerid,1+playerid);}
case 15:{SetPlayerInterior(playerid,15);SetPlayerPos(playerid,295.138977, 1474.469971, 1080.519897 );SetPlayerVirtualWorld(playerid,1+playerid);}
}
}
else
{
SCM(playerid,rot,"Das Haus ist abgeschlossen");
}
}
}
return 1;
}
ocmd:exit(playerid,params[])
{
if(GetPlayerInterior(playerid) == 3 || 1 || 7
|| 15 || 12)
{
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,xx,yy,zz);
SetPlayerVirtualWorld(playerid,0);
}
return 1;
}
ocmd:hlock(playerid,params[])
{
for(new haus=1;haus<MAX_Haus;haus++)
{
if(IsPlayerInRangeOfPoint(playerid,35,hInfo[haus][hx],hInfo[haus][hy],hInfo[haus][hz]))
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(hInfo[haus][Besitzer],name,false) == 0)
{
if(hInfo[haus][Abgeschlossen] == 0)
{
hInfo[haus][Abgeschlossen] = 1;
SCM(playerid,gelb,"Du hast dein Haus abgeschlossen");
}
else if(hInfo[haus][Abgeschlossen] == 1)
{
hInfo[haus][Abgeschlossen] = 0;
SCM(playerid,gelb,"Du hast dein Haus aufgeschlossen");
}
}
}
}
return 1;
}
stock CreateHaus(Float:x,Float:y,Float:z,besitzer[64],nummer,preis)
{
new pfad[100];
for(new haus=1;haus<MAX_Haus;haus++)
{
format(pfad,100,"/Häuser/%d.txt",haus);
if(!fexist(pfad))
{
dini_Create(pfad);
dini_FloatSet(pfad,"Pos X",x);
dini_FloatSet(pfad,"Pos Y",y);
dini_FloatSet(pfad,"Pos Z",z);
dini_IntSet(pfad,"Kaufpreis",preis);
dini_Set(pfad,"Besitzer",besitzer);
dini_IntSet(pfad,"Innenraum",1);
dini_IntSet(pfad,"Hausnummer",nummer);
dini_IntSet(pfad,"Eisenlager",0);
dini_IntSet(pfad,"Holzlager",0);
dini_IntSet(pfad,"Schwarzpulver",0);
dini_IntSet(pfad,"Drogenlager",0);
dini_IntSet(pfad,"Abgeschlossen",0);
return LoadHaus(haus);
}
}
return 0;
}
stock LoadHaus(hausid)
{
new pfad[100],string1[128];
format(pfad,100,"/Häuser/%d.txt",hausid);
if(!fexist(pfad))return 0; //überprüft ob die Datei existiert, wenn nicht wird 0 zurückgegeben
hInfo[hausid][hx] = dini_Float(pfad,"Pos X"); // hier laden wir die Werte
hInfo[hausid][hy] = dini_Float(pfad,"Pos Y");
hInfo[hausid][hz] = dini_Float(pfad,"Pos Z");
hInfo[hausid][Kaufpreis] = dini_Int(pfad,"Kaufpreis");
format(hInfo[hausid][Besitzer],64,"%s",dini_Get(pfad,"Besitzer"));
hInfo[hausid][HausNR] = dini_Int(pfad,"Hausnummer");
hInfo[hausid][Eisenlager] = dini_Int(pfad,"Eisenlager");
hInfo[hausid][Holzlager] = dini_Int(pfad,"Holzlager");
hInfo[hausid][Schwarzpulver] = dini_Int(pfad,"Schwarzpulver");
hInfo[hausid][Drogenlager] = dini_Int(pfad,"Drogenlager");
hInfo[hausid][haus_innenraum] = dini_Int(pfad,"Innenraum");
hInfo[hausid][Abgeschlossen] = dini_Int(pfad,"Abgeschlossen");
hInfo[hausid][hpickup] = CreatePickup(1273 ,1,hInfo[hausid][hx],hInfo[hausid][hy],hInfo[hausid][hz],0);
format(string1,sizeof(string1),"Hausnummer: %i\nBesitzer: %s\nKaufpreis: %i€",hInfo[hausid][HausNR],hInfo[hausid][Besitzer],hInfo[hausid][Kaufpreis]);
hInfo[hausid][hlabel] = Create3DTextLabel(string1,weiß,hInfo[hausid][hx],hInfo[hausid][hy],hInfo[hausid][hz],15,0,0);
return print("Das Haus wurde erfolgreich geladen");
}
stock KillHaus(hausid)
{
DestroyPickup(hInfo[hausid][hpickup]);
Delete3DTextLabel(hInfo[hausid][hlabel]);
}
So das war eigentlich der ganze Code
nochmal die probleme^^
-->Beim verkaufen des hauses an andere Spieler behält man das Haus
-->Man bekommt unterschiedliche Geldsummen
-->TextLabels und Pickups updaten sich nicht immer /edit: Also es ändert sich nur beim Befehl haussell nicht bzw es wird nicht mehr geladen
-->und beim Haus verkaufen an andere Spieler wird immer angezeigt "Spieler xyz" möchte dir sein haus 999 verkaufen
Ich weiß das ist wegen Max_haus aber wie kann ich das umgehen?
Ich hoffe ihr könnt mir helfen