[BFX] Dynamisches Haus System PROBLEME

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • #include <a_samp>
    #include <bfx_iStream>


    #define MAX_HH 100 // Maximale Häuser Anzahl
    #define HAUS_DATEI "haus_daten.cfg" // Datei wo die Häuser gespeichert werden
    #define INFO_TAFEL // Informationen durch Pickup , einfach kommentieren oder löschen wenn nicht nötig
    #define MAX_SPIELER_HAUS 1 // Maximale Häuser Anzahl die der Spieler besitzen darf


    forward ZeitTimer();
    forward SaveCache();
    forward initSlot();
    new _cache_haus;
    enum haus
    {
    Float:ax,
    Float:ay,
    Float:az,
    Float:ix,
    Float:iy,
    Float:iz,
    interior,
    virtual_world,
    Besitzer[MAX_PLAYER_NAME],
    kosten,
    play_time,
    Text3D:lbl_haus,
    nicht_zum_kauf,
    verschlossen,
    #if defined INFO_TAFEL
    pickid,
    #endif
    icon_id
    }
    new HausDaten[MAX_HH][haus];


    enum haus_typ
    {
    interior,
    Float:haus_x,
    Float:haus_y,
    Float:haus_z
    }
    new Typen[][haus_typ] = { // Wenn nötig neue Haus Typen bzw. vorgegebene Räume hinzufügen...
    {3,235.508994,1189.169897,1080.339966},
    {2,225.756989,1240.000000,1082.149902},
    {1,223.043991,1289.259888,1082.199951},
    {7,225.630997,1022.479980,1084.069946},
    {15,295.138977,1474.469971,1080.519897},
    {15,328.493988,1480.589966,1084.449951},
    {15,385.803986,1471.769897,1080.209961},
    {1,244.411987,305.032989,999.148437},
    {2,271.884979,306.631988,999.148437},
    {3,291.282989,310.031982,999.148437},
    {4,302.180999,300.722991,999.148437},
    {3,1527.229980,-11.574499,1002.097106},
    {3,513.882507,-11.269994,1001.565307},
    {2,2454.717041,-1700.871582,1013.515197}
    };


    enum spieler_daten
    {
    haus_schau,
    Float:h_schaux,
    Float:h_schauy,
    Float:h_schauz,
    last_int,
    last_vw,
    haus_zahl
    }
    new Player[MAX_PLAYERS][spieler_daten];


    public OnFilterScriptInit()
    {
    iGameModeInit_X();
    new line[255],File:hausx = fopen(HAUS_DATEI,io_read),
    haus_index;
    if(hausx)
    {
    while(fread(hausx,line))
    {
    if(line[strlen(line)-2] == '\r')line[strlen(line)-2] = '\0';
    if(line[strlen(line)-1] == '\n')line[strlen(line)-1] = '\0';
    strmid(HausDaten[_cache_haus][Besitzer],strtok(line,haus_index,','),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HausDaten[_cache_haus][ax] = floatstr(strtok(line,haus_index,','));
    HausDaten[_cache_haus][ay] = floatstr(strtok(line,haus_index,','));
    HausDaten[_cache_haus][az] = floatstr(strtok(line,haus_index,','));
    HausDaten[_cache_haus][ix] = floatstr(strtok(line,haus_index,','));
    HausDaten[_cache_haus][iy] = floatstr(strtok(line,haus_index,','));
    HausDaten[_cache_haus][iz] = floatstr(strtok(line,haus_index,','));
    HausDaten[_cache_haus][interior] = strval(strtok(line,haus_index,','));
    HausDaten[_cache_haus][virtual_world] = strval(strtok(line,haus_index,','));
    HausDaten[_cache_haus][kosten] = strval(strtok(line,haus_index,','));
    HausDaten[_cache_haus][play_time] = strval(strtok(line,haus_index,','));
    HausDaten[_cache_haus][nicht_zum_kauf] = strval(strtok(line,haus_index,','));
    HausDaten[_cache_haus][verschlossen] = strval(strtok(line,haus_index,','));
    format(line,sizeof line,"Besitzer : %s\nScore : %d\nKosten : %d$",HausDaten[_cache_haus][Besitzer],HausDaten[_cache_haus][play_time],HausDaten[_cache_haus][kosten]);
    HausDaten[_cache_haus][lbl_haus] = Create3DTextLabel(line,(!HausDaten[_cache_haus][nicht_zum_kauf]) ? (0x00FF00FF) : (0xFF0000FF),HausDaten[_cache_haus][ax],HausDaten[_cache_haus][ay],HausDaten[_cache_haus][az],10.0,0,0);
    HausDaten[_cache_haus][pickid] = CreatePickup(1273,1,HausDaten[_cache_haus][ax],HausDaten[_cache_haus][ay],HausDaten[_cache_haus][az],0);
    HausDaten[_cache_haus][icon_id] = iAddStreamIcon(HausDaten[_cache_haus][ax],HausDaten[_cache_haus][ay],HausDaten[_cache_haus][az],(HausDaten[_cache_haus][nicht_zum_kauf]) ? (32) : (31),0);
    haus_index = 0;
    _cache_haus++;

    }
    fclose(hausx);
    }
    return 1;
    }
    public OnFilterScriptExit()
    {
    iGameModeExit_X();
    SaveCache();
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    iPlayerConnect_X(playerid);
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    Player[playerid][haus_schau] = 0;
    Player[playerid][h_schaux] = (0.0);
    Player[playerid][h_schauy] = (0.0);
    Player[playerid][h_schauz] = (0.0);
    Player[playerid][last_int] = 0;
    Player[playerid][last_vw] = 0;
    Player[playerid][haus_zahl] = 0;
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    for(new i = 0;i<_cache_haus;i++)
    {
    if(!strcmp(HausDaten[i][Besitzer],spielername(playerid)))
    {
    SetPlayerPos(playerid,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]);
    break;
    }
    }
    return 1;
    }
    spielername(playerid)
    {
    new xname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,xname,sizeof xname);
    return xname;
    }
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new idx,cmd[128];
    cmd = strtok(cmdtext,idx);
    if(!strcmp(cmd,"/enter",true))
    {
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,1.5,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]))continue;
    if(HausDaten[i][verschlossen]){SendClientMessage(playerid,0xFF0000FF,"Dieses Haus ist verschlossen!");break;}
    SetPlayerInterior(playerid,HausDaten[i][interior]);
    SetPlayerVirtualWorld(playerid,HausDaten[i][virtual_world]);
    SetPlayerPos(playerid,HausDaten[i][ix],HausDaten[i][iy],HausDaten[i][iz]);
    break;
    }
    return 1;
    }
    if(!strcmp(cmd,"/hlock",true))
    {
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,1.2,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]) && !(IsPlayerInRangeOfPoint(playerid,1.5,HausDaten[i][ix],HausDaten[i][iy],HausDaten[i][iz]) && GetPlayerInterior(playerid) == HausDaten[i][interior] && GetPlayerVirtualWorld(playerid) == HausDaten[i][virtual_world]))continue;
    if(strcmp(HausDaten[i][Besitzer],spielername(playerid))){SendClientMessage(playerid,0xFF0000FF,"Dieses Haus gehört nicht dir!");break;}
    if(!HausDaten[i][verschlossen])GameTextForPlayer(playerid,"~b~Haus ~r~verschlossen.",2000,3);
    else GameTextForPlayer(playerid,"~b~Haus ~g~aufgeschlossen.",2000,3);
    HausDaten[i][verschlossen] = (HausDaten[i][verschlossen]) ? (0) : (1);
    SaveCache();
    break;
    }
    return 1;
    }
    if(!strcmp(cmd,"/hkaufen",true))
    {
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,1.5,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]))continue;
    if(HausDaten[i][nicht_zum_kauf]){SendClientMessage(playerid,0xFF0000FF,"Haus kann nicht gekauft werden!");break;}
    if(Player[playerid][haus_zahl] >= MAX_SPIELER_HAUS){SendClientMessage(playerid,0xFF0000FF,"Du hast bereits die Maximale Anzahl der kaufbaren Häuser erreicht!");break;}
    if(GetPlayerScore(playerid) < HausDaten[i][play_time]){SendClientMessage(playerid,0xFF0000FF,"Du brauchst mehr Score!");break;}
    if(GetPlayerMoney(playerid) < HausDaten[i][kosten]){SendClientMessage(playerid,0xFF0000FF,"Du brauchst mehr Geld!");break;}
    strmid(HausDaten[i][Besitzer],spielername(playerid),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HausDaten[i][nicht_zum_kauf] = 1;
    format(cmd,sizeof cmd,"Besitzer : %s\nScore : %d\nKosten : %d$",spielername(playerid),HausDaten[i][play_time],HausDaten[i][kosten]);
    Update3DTextLabelText(HausDaten[i][lbl_haus],0xFF0000FF,cmd);
    iRemoveStreamIcon(HausDaten[i][icon_id]);
    HausDaten[i][icon_id] = iAddStreamIcon(HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az],32,0);
    GivePlayerMoney(playerid,-HausDaten[i][kosten]);
    Player[playerid][haus_zahl]++;
    SaveCache();
    break;
    }
    return 1;
    }
    if(!strcmp(cmd,"/setowner",true))
    {
    if(!IsPlayerAdmin(playerid))return 1;
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,0xFF0000FF,"Nutze /setowner [Besitzername]");
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,1.5,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]))continue;
    strmid(HausDaten[i][Besitzer],cmd,0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    format(cmd,sizeof cmd,"Besitzer : %s\nScore : %d\nKosten : %d$",cmd,HausDaten[i][play_time],HausDaten[i][kosten]);
    Update3DTextLabelText(HausDaten[i][lbl_haus],0xFF0000FF,cmd);
    SaveCache();
    break;
    }
    return 1;
    }
    if(!strcmp(cmd,"/hverkaufen",true))
    {
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,1.5,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]))continue;
    if(!HausDaten[i][nicht_zum_kauf]){SendClientMessage(playerid,0xFF0000FF,"Haus kann nicht verkauft werden!");break;}
    if(strcmp(HausDaten[i][Besitzer],spielername(playerid))){SendClientMessage(playerid,0xFF0000FF,"Dieses Haus gehört nicht dir!");break;}
    strmid(HausDaten[i][Besitzer],"Keiner",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HausDaten[i][nicht_zum_kauf] = 0;
    format(cmd,sizeof cmd,"Besitzer : Keiner\nScore : %d\nKosten : %d$",HausDaten[i][play_time],HausDaten[i][kosten]);
    Update3DTextLabelText(HausDaten[i][lbl_haus],0x00FF00FF,cmd);
    iRemoveStreamIcon(HausDaten[i][icon_id]);
    HausDaten[i][icon_id] = iAddStreamIcon(HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az],31,0);
    Player[playerid][haus_zahl]--;
    GivePlayerMoney(playerid,(HausDaten[i][kosten]/2));
    SaveCache();
    break;
    }
    return 1;
    }
    if(!strcmp(cmd,"/exit",true))
    {
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(IsPlayerInRangeOfPoint(playerid,5.0,HausDaten[i][ix],HausDaten[i][iy],HausDaten[i][iz]) && GetPlayerInterior(playerid) == HausDaten[i][interior] && GetPlayerVirtualWorld(playerid) == HausDaten[i][virtual_world])
    {
    if(HausDaten[i][verschlossen]){SendClientMessage(playerid,0xFF0000FF,"Dieses Haus ist verschlossen!");break;}
    SetPlayerPos(playerid,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    break;
    }
    }
    return 1;
    }
    if(!strcmp(cmd,"/hlöschen",true))
    {
    if(!IsPlayerAdmin(playerid))return 1;
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][interior] == 0)continue;
    if(!IsPlayerInRangeOfPoint(playerid,5.0,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]))continue;
    HausDaten[i][interior] = 0;
    DestroyPickup(HausDaten[i][pickid]);
    Delete3DTextLabel(HausDaten[i][lbl_haus]);
    SendClientMessage(playerid,0x00FF00FF,"Haus gelöscht.");
    iRemoveStreamIcon(HausDaten[i][icon_id]);
    HausDaten[i][ax] = (0.0);
    HausDaten[i][ay] = (0.0);
    HausDaten[i][az] = (0.0);
    HausDaten[i][play_time] = 0;
    HausDaten[i][kosten] = 0;
    HausDaten[i][interior] = 0;
    HausDaten[i][ix] = (0.0);
    HausDaten[i][iy] = (0.0);
    HausDaten[i][iz] = (0.0);
    HausDaten[i][virtual_world] = 0;
    HausDaten[i][verschlossen] = 0;
    strmid(HausDaten[i][Besitzer],"",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HausDaten[i][pickid] = -1;
    HausDaten[i][lbl_haus] = Text3D:-1;
    HausDaten[i][icon_id] = -1;
    HausDaten[i][nicht_zum_kauf] = 0;
    SaveCache();
    break;
    }
    return 1;
    }
    if(!strcmp(cmd,"/chaus",true))
    {
    if(!IsPlayerAdmin(playerid))return 1;
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,0xFF0000FF,"Nutze : /chaus [kosten] [spielzeit in h] [haus] [Virtual World]");
    new hkosten = strval(cmd);
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,0xFF0000FF,"Nutze : /chaus [kosten] [spielzeit in h] [haus] [Virtual World]");
    new spielzeit = strval(cmd);
    if(spielzeit < 0)return SendClientMessage(playerid,0xFF0000FF,"Die Spielzeit muss minimal bei 0 Stunden liegen!");
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,0xFF0000FF,"Nutze : /chaus [kosten] [spielzeit in h] [haus] [Virtual World]");
    new hhaus = strval(cmd);
    if(hhaus > sizeof(Typen) || hhaus < 0)return SendClientMessage(playerid,0xFF0000FF,"Ungültiges Haus!");
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,0xFF0000FF,"Nutze : /chaus [kosten] [spielzeit in h] [haus] [Virtual World]");
    new hvw = strval(cmd);
    new Float:nowPos[3];
    new slotid = initSlot();
    new fullid = (slotid==-1) ? (_cache_haus) : (slotid);
    GetPlayerPos(playerid,nowPos[0],nowPos[1],nowPos[2]);
    HausDaten[fullid][ax] = nowPos[0];
    HausDaten[fullid][ay] = nowPos[1];
    HausDaten[fullid][az] = nowPos[2];
    HausDaten[fullid][play_time] = spielzeit;
    HausDaten[fullid][kosten] = hkosten;
    HausDaten[fullid][interior] = Typen[hhaus][interior];
    HausDaten[fullid][ix] = Typen[hhaus][haus_x];
    HausDaten[fullid][iy] = Typen[hhaus][haus_y];
    HausDaten[fullid][iz] = Typen[hhaus][haus_z];
    HausDaten[fullid][virtual_world] = hvw;
    HausDaten[fullid][verschlossen] = 1;
    HausDaten[fullid][nicht_zum_kauf] = 0;
    strmid(HausDaten[fullid][Besitzer],"Keiner",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HausDaten[fullid][pickid] = CreatePickup(1273,1,nowPos[0],nowPos[1],nowPos[2],0);
    format(cmd,sizeof cmd,"Besitzer : Keiner\nScore : %d\nKosten : %d$",spielzeit,hkosten);
    HausDaten[fullid][lbl_haus] = Create3DTextLabel(cmd,0x00FF00FF,nowPos[0],nowPos[1],nowPos[2],10.0,0,0);
    HausDaten[fullid][icon_id] = iAddStreamIcon(nowPos[0],nowPos[1],nowPos[2],31,0);
    if(slotid==-1)_cache_haus++;
    SaveCache();
    return 1;
    }
    if(!strcmp(cmd,"/hvorschau",true))
    {
    if(!IsPlayerAdmin(playerid))return 1;
    if(Player[playerid][haus_schau])return SendClientMessage(playerid,0xFF0000FF,"Nutze vorher /evorschau um die derzeitige Vorschau zu beenden!");
    cmd = strtok(cmdtext,idx);
    if(!cmd[0])return SendClientMessage(playerid,0xFF0000FF,"Nutze /hvorschau [haustyp id]");
    new hhaus = strval(cmd);
    if(hhaus > sizeof(Typen) || hhaus < 0)return SendClientMessage(playerid,0xFF0000FF,"Ungültiges Haus!");
    GetPlayerPos(playerid,Player[playerid][h_schaux],Player[playerid][h_schauy],Player[playerid][h_schauz]);
    Player[playerid][last_int] = GetPlayerInterior(playerid);
    Player[playerid][last_vw] = GetPlayerVirtualWorld(playerid);
    SetPlayerInterior(playerid,Typen[hhaus][interior]);
    SetPlayerPos(playerid,Typen[hhaus][haus_x],Typen[hhaus][haus_y],Typen[hhaus][haus_z]);
    Player[playerid][haus_schau] = 1;
    return SendClientMessage(playerid,0x00FF00FF,"Nutze /evorschau um die Vorschau zu beenden.");
    }
    if(!strcmp(cmd,"/evorschau",true))
    {
    if(!IsPlayerAdmin(playerid))return 1;
    if(!Player[playerid][haus_schau])return SendClientMessage(playerid,0xFF0000FF,"Du bist derzeit in keinem Vorzeige Haus!");
    SetPlayerInterior(playerid,Player[playerid][last_int]);
    SetPlayerVirtualWorld(playerid,Player[playerid][last_vw]);
    SetPlayerPos(playerid,Player[playerid][h_schaux],Player[playerid][h_schauy],Player[playerid][h_schauz]);
    Player[playerid][h_schaux] = (0.0);
    Player[playerid][h_schauy] = (0.0);
    Player[playerid][h_schauz] = (0.0);
    Player[playerid][last_int] = 0;
    Player[playerid][last_vw] = 0;
    Player[playerid][haus_schau] = 0;
    return SendClientMessage(playerid,0x00FF00FF,"Vorschau wurde beendet.");
    }
    return 0;
    }
    strtok(const string[], &index, trenner = ' ')
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= trenner))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > trenner) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }
    public SaveCache()
    {
    new fm[255],File:hausx = fopen(HAUS_DATEI,io_write);
    for(new i = 0;i<_cache_haus;i++)
    {
    if(!HausDaten[i][interior])continue;
    format(fm,sizeof fm,"%s,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d\r\n",
    HausDaten[i][Besitzer],
    HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az],
    HausDaten[i][ix],HausDaten[i][iy],HausDaten[i][iz],
    HausDaten[i][interior],HausDaten[i][virtual_world],
    HausDaten[i][kosten],HausDaten[i][play_time],
    HausDaten[i][nicht_zum_kauf],HausDaten[i][verschlossen]);
    fwrite(hausx,fm);
    }
    fclose(hausx);
    return 1;
    }
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    #if defined INFO_TAFEL
    new showme[128];
    for(new i = 0;i<_cache_haus;i++)
    {
    if(pickupid!=HausDaten[i][pickid])continue;
    format(showme,sizeof showme,
    (!HausDaten[i][nicht_zum_kauf]) ? ("~w~Besitzer : ~b~%s~n~~w~Kosten : ~b~%d$~n~~w~Score : ~b~%dh~n~~w~Nutze ~g~ /hkaufen ~w~um es zu erwerben") :
    ("~w~Besitzer : ~b~%s~n~~w~Kosten : ~b~%d$~n~~w~Score : ~b~%d~n~"),
    HausDaten[i][Besitzer],HausDaten[i][kosten],HausDaten[i][play_time]);
    GameTextForPlayer(playerid,showme,3000,3);
    break;
    }
    #endif
    return 1;
    }
    public initSlot()
    {
    new foundx = -1;
    for(new i = 0;i<_cache_haus;i++)
    {
    if(HausDaten[i][Besitzer] == '\0'){foundx = i;break;}
    }
    return foundx;
    }


    Das ist das filterscript.

  • if(HausDaten[i][interior] == 0)continue; if(!IsPlayerInRangeOfPoint(playerid,1.5,HausDaten[i][ax],HausDaten[i][ay],HausDaten[i][az]))continue; strmid(HausDaten[i][Besitzer],cmd,0,MAX_PLAYER_NAME,MAX_PLAYER_NAME); format(cmd,sizeof cmd,"Besitzer : %s\nScore : %d\nKosten : %d$",cmd,HausDaten[i][play_time],HausDaten[i][kosten]); Update3DTextLabelText(HausDaten[i][lbl_haus],0xFF0000FF,cmd); SaveCache(); break; } return 1;


    Mach mal das Rot makierte so:

    return 0;


    Kp vlt gehts ja :D