Hey Leute,
also ich habe 3 Probleme, ich benutze das Haussystem nach diesem Tutorial: simples Haussystem
Ich habe schon einiges editiert, bekomme aber den Haus spawn und Lock befehl nicht hin, und außerdem funktioniert mein einmiete Befehl nicht
1) Spawn Haus:
Ja wie gesagt, ich möchte, dass wenn man /spawn eingibt und ein Haus besitzt im Haus spawnen soll. Das hab ich auch schon hinbekommen und es funktioniert auch, aber man kommt nach dem Spawn nicht mehr aus dem Haus raus...
Hier mal der Befehl:
ocmd:spawn(playerid,params[])
{
SetPVarInt(playerid,"Spawn",2);
SendClientMessage(playerid,COLOR_GRÜN1,"Du spawnst ab jetzt in deinem Haus.");
return 1;
}
Okay der ist nicht schwer, die Abfrage ob der Spieler Hausbesitzer ist lasse ich erstmal weg.
Wenn er im Haus spawnen soll:
Bei OnPlayerSpawn:
if(GetPVarInt(playerid,"Spawn")==2)
{
for(new haus=1;haus<MAX_HAUS;haus++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(HausInfo[haus][haus_besitzer],name,false) == 0)
{
new innenraum = HausInfo[haus][haus_innenraum];
SetPlayerPos(playerid,HausInnenraum[innenraum][innen_x],HausInnenraum[innenraum][innen_y],HausInnenraum[innenraum][innen_z]);
SetPlayerInterior(playerid,HausInnenraum[innenraum][innen_interior]);
}
}
}
Das Problem ist nicht das Spawnen, ich komme nicht wieder raus aus dem Haus.... beim /enter & /exit Befehl funktioniert es aber:
ocmd:exit(playerid,params[])
{
if(inHaus[playerid] == -1)return SendClientMessage(playerid,COLOR_GRAU,"Du bist in keinem Haus!");
if(GetPVarInt(playerid,"ImHaus")==1)
{
new haus = inHaus[playerid];
new innenraum = HausInfo[haus][haus_innenraum];
if(!IsPlayerInRangeOfPoint(playerid,5,HausInnenraum[innenraum][innen_x],HausInnenraum[innenraum][innen_y],HausInnenraum[innenraum][innen_z]))return SendClientMessage(playerid,0x00FF00,"Du bist nicht am Ausgang!");
SetPlayerPos(playerid,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SendClientMessage(playerid,COLOR_WEISS,"Du hast das Haus verlassen!");
inHaus[playerid] = -1;
}
return 1;
}
ocmd:enter(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)
if(strcmp(HausInfo[haus][haus_mieter],name,false) == 0)
{
new innenraum = HausInfo[haus][haus_innenraum];
SetPlayerPos(playerid,HausInnenraum[innenraum][innen_x],HausInnenraum[innenraum][innen_y],HausInnenraum[innenraum][innen_z]); SetPlayerInterior(playerid,HausInnenraum[innenraum][innen_interior]);
SetPlayerVirtualWorld(playerid,HausInnenraum[innenraum][innen_virtualworld]);
inHaus[playerid] = haus;
}
else SendClientMessage(playerid,0x00FF00,"Du bist nicht der Besitzer! Du darfst hier nicht rein!");
}
}
return 1;
}
Das Problem ist, wenn ich im Haus spawne und dann raus gehe, spawne ich in dem dorf hinter Dillimore, also dort, wo man spawnt wenn keine Koordinaten angegeben werden.
Normal mit /enter und dann /exit funktioniert es aber...
2) Lock befehl
Okay, der Befehl funktioniert einfach gar nicht erst...
ocmd:lock(playerid,params[])
{
for(new haus=1;haus<MAX_HAUS;haus++)
{
new pfad[50];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(HausInfo[haus][haus_besitzer],name,false) == 1 || strcmp(HausInfo[haus][haus_mieter],name,false) == 1) {
if(IsPlayerInRangeOfPoint(playerid,5,HausInfo[haus][haus_x],HausInfo[haus][haus_y],HausInfo[haus][haus_z]))
{
if(HausInfo[haus][haus_locked], dini_Int(pfad,"locked") == 1)
{
GameTextForPlayer(playerid, "~g~Haus aufgeschlossen!", 3000, 6);
dini_IntSet(pfad,"locked",0);
return 1;
}
if(HausInfo[haus][haus_locked], dini_Int(pfad,"locked") == 1)
{
GameTextForPlayer(playerid, "~r~Haus abgeschlossen!", 3000, 6);
dini_IntSet(pfad,"locked",1);
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GRAU, "Du bist nicht bei deinem Haus!");
return 1;
}
}
}
return 1;
}
und 3) der einmiete Befehl:
Auch dieser Befehl funktioniert gar nicht erst, bzw er funktioniert nur wenn man auch der Besitzer des Hauses ist... abgefragt wird aber das aber nicht...
ocmd:einmieten(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]))
{
//if(GetPVarInt(playerid, "eingemietet")== 1)return SendClientMessage(playerid,COLOR_GRAU,"Du bist bereits woanders eingemietet!");
//{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof name);
if(strcmp(HausInfo[haus][haus_besitzer],name,false) == 0)return SendClientMessage(playerid,COLOR_GRAU,"Dieses Haus gehört dir bereits!");
if(strcmp(HausInfo[haus][haus_mieter],name,true))return SendClientMessage(playerid,COLOR_GRAU,"Du hast dich bereits in diesem Haus eingemietet!");
if(strcmp(HausInfo[haus][haus_besitzer],"Niemand",false)== 0)return SendClientMessage(playerid,COLOR_GRAU,"Du kannst dich nicht in das Haus einmieten, da es keinen Eigentümer gehört!");
//if(strcmp(HausInfo[haus][haus_mieter],"Niemand",false))
if(GetPlayerMoney(playerid) < HausInfo[haus][haus_mieter])return SendClientMessage(playerid,COLOR_GRAU,"Du hast nicht genug Geld bei dir!");
if(strcmp(HausInfo[haus][haus_mieter],"Niemand",true))
{
GivePlayerMoney(playerid,-100); // Geld abziehen
new pfad[50];
format(pfad,50,"/Haus/%d.txt",haus); // Pfad formatieren
dini_Set(pfad,"mieter",name); // Besitzer überschreiben
dini_IntSet(pfad,"mieteinnahmen",HausInfo[haus][haus_mieteinnahmen]+100);
SetPVarInt(playerid, "eingemietet", 1);
SendClientMessage(playerid,COLOR_GRÜN1,"Du hast dich erfolgreich in das Haus eingemietet.");
}
}
}
return 1;
}
Okay, ich bitte auch wirklich inständig mir zu helfen... ich verzweifle schon dadran... ihr seid meine letzte Hoffnung
Wenn ihr mehr Infos bracht sagt bescheid
MFG
Marco
//EDIT: Rechtschreibung
//EDIT: Enter-, Exit Befehl
//push Kann mir wirklich niemand helfen? Konnte das Problem immer noch nicht lösen