Häuser im GF einfügen - für jeden

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
  • Hallo liebe Community,


    da sich die fragen häufen, wie man ein Haus im GF hinzufügt, werde ich es hier mal erläutern.
    So ihr braucht folgendes um ein Haus hinzuzufügen:
    - property.cfg
    - Godfather (GM)
    - Auto Koords(Hausauto=
    - /enter point


    Also erste such ihr in eurem Script nach folgendem


    new HouseInfo[34][hInfo];


    und erhöht es um eure Anzahl von Häusern. z.b. um 1


    new HouseInfo[35][hInfo];


    Nun sucht ihr das


    new Float:HouseCarSpawns[34][4] =


    [4]
    Ist die anzahl der Variablen (KOORDS)


    Nur müsst ihr es erhöhen ([34]) um eure Anzahl von Häusern (autos)


    new Float:HouseCarSpawns[35][4] =
    {
    .......
    {-2616.1897,-108.4479,4.1693,269.8246}//Haus 35


    };


    So nun such ihr nach


    /enter


    und fügt das unten an


    else if (PlayerToPoint(3.0, playerid,1344.6765,2610.1416,11.2989))//Haus 35, WO das man /enter macht
    {
    if(PlayerToPoint(3.0, playerid,1344.6765,2610.1416,11.2989))//Wo man /enter macht
    {
    SetPlayerPos(playerid,2324.399902,-1147.500000,1050.699951);//Interior ID (Innen Koordianten)
    SetPlayerFacingAngle(playerid, 0.00);//Drehung des Spielers
    SetPlayerInterior(playerid,12);//Interior
    PlayerInfo[playerid][pInt] = 12;//interior
    SetPlayerVirtualWorld(playerid, 10);//Virtuele Welt
    }
    else
    {
    SetPlayerVirtualWorld(playerid, 10);//Virtuele Welt
    }
    }


    So das gleiche macht ihr bei


    /exit


    else if (PlayerToPoint(3.0, playerid,2324.399902,-1147.500000,1050.699951) && GetPlayerVirtualWorld(playerid) == 10)//Haus 35, Innen Koordianten und dann Virtuele Welt
    {
    SetPlayerInterior(playerid,0);//Interior
    SetPlayerPos(playerid,1344.6765,2610.1416,11.2989);//enter Koordinaten
    SetPlayerFacingAngle(playerid, 90.00);//Spieler drehung
    PlayerInfo[playerid][pInt] = 0;//Interior
    SetPlayerVirtualWorld(playerid,0);//Virtuelle Welt
    }
    So nun öffnet ihr die property.cfg und fügt unten das an


    Ändert den /buyhouse befehle mal so:


    if(strcmp(cmd, "/buyhouse", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    GetPlayerName(playerid, playername, sizeof(playername));
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    for(new h = 0; h < sizeof(HouseInfo); h++)
    {
    if(PlayerToPoint(2.0, playerid, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]) && HouseInfo[h][hOwned] == 0)
    {
    if(PlayerInfo[playerid][pLevel] < HouseInfo[h][hLevel])
    {
    format(string, sizeof(string), " Du musst Level %d sein, um das Haus zu kaufen !", HouseInfo[h][hLevel]);
    SendClientMessage(playerid, COLOR_GRAD5, string);
    return 1;
    }
    if(PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
    {
    SendClientMessage(playerid, COLOR_WHITE, " Du besitzt bereits ein Haus, benutze /sellhouse um das Haus zu kaufen !");
    return 1;
    }
    if(GetPlayerMoney(playerid) > HouseInfo[h][hValue])
    {
    PlayerInfo[playerid][pPhousekey] = h;
    HouseInfo[h][hOwned] = 1;
    GetPlayerName(playerid, sendername, sizeof(sendername));
    strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
    GivePlayerMoney(playerid,-HouseInfo[h][hValue]);
    PlayerPlayMusic(playerid);
    SetPlayerInterior(playerid,HouseInfo[h][hInt]);
    GameTextForPlayer(playerid, "~w~Willkommen zu Hause~n~Du kannst den Haus jederzeit mit /exit verlassen", 5000, 3);
    PlayerInfo[playerid][pInt] = HouseInfo[h][hInt];
    PlayerInfo[playerid][pLocal] = h;
    SendClientMessage(playerid, COLOR_WHITE, "Herzlichen Glückwunsch, zu deinem neuen Haus !");
    SendClientMessage(playerid, COLOR_WHITE, "Schreibe /househelp um deine neuen Befehle zu sehen !");
    DateProp(playerid);
    OnPropUpdate();
    OnPlayerStatsUpdate(playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, " Du hast nicht genug Geld !");
    return 1;
    }
    }
    }
    }
    return 1;
    }
    Un das bei SetPlayerSpawn


    public SetPlayerSpawn(playerid)


    das


    if(house !=255)
    {
    if(SpawnChange[playerid]) //If 1, then you get to your house, else spawn somewhere else
    {
    SetPlayerToTeamColor(playerid);
    SetPlayerPos(playerid, HouseInfo[house][hEntrancex], HouseInfo[house][hEntrancey],HouseInfo[house][hEntrancez]); // Warp the player
    return 1;
    }
    }
    1128.1053,-1021.3028,34.9922,234.199996,1064.900024,1084.199951,0,0,0,0,0,0,The State,5 Room House,2500000,0,0,6,1,0,0,0,0,0,418,-1,-1,131,4


    So die ersten Drei Koordinaten (x,y,z) sind die daten von /enter (Hausymbol) die anderen (x,y,z) sind die des Interiors (innen). Die "6" ist das Interior.


    So nun speicher ihr und fertig ist euer Haus.
    Ihr sollte euch das Tutorial von den Virtuelen Welten davor einmal anschauen.


    Helpsite:
    [ SCRIPTING ] Tutorial - Interios und Virtuel World Godfather


    http://wiki.sa-mp.de/Interior_ID%27s

    2 Mal editiert, zuletzt von Cardoso ()

  • Cool^^
    Nice :D
    Muss man das alles so mit jedem Haus machen?

  • Ja, es gibt aber noch andere systeme wo man nur in der Property.cfg was ändern muss. Aber das behalte ich erst mal für mich.^^

  • Ich hatte so ein Filerscript wo man vor'm Haus geht und /addprop2 glaub ich macht und man dann Interior auswählen kann und der das automatisch in der property Datei speichert.Man musste nur noch Preis und Level ändern^^
    Aber das Tutorial ist gut^^
    Werd ich nachher mal ausprobieren mache mir dann 1 bis 2 Häuser damit :D

  • hm...wenn du bei dem /enter befehl immer die Virtuale Welt 10setzt, werden sich die Leute auch immer sehen meiner meinung nach.
    Macht es doch einfach nach der HausID.


    hier /enter
    if (PlayerToPoint(3, playerid,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez]))
    {
    //printf("Found House :%d",i);
    if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLock] == 0)
    {
    SetPlayerInterior(playerid,HouseInfo[i][hInt]);
    SetPlayerVirtualWorld(playerid,i);//Gibt die Virtuele ID von dem Haus
    SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]);
    GameTextForPlayer(playerid, "~w~Willkommen zuhause", 5000, 1);
    PlayerInfo[playerid][pInt] = HouseInfo[i][hInt];
    PlayerInfo[playerid][pLocal] = i;
    }
    else
    {
    GameTextForPlayer(playerid, "~r~Abgeschlossen", 5000, 1);
    }
    }
    }


    hier /exit
    if (PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]))
    {
    if(GetPlayerVirtualWorld(playerid) == i)//Überprüft ob die Virtuelle ID der ID des Hauses entspricht
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
    SetPlayerVirtualWorld(playerid,0);
    PlayerInfo[playerid][pInt] = 0;
    PlayerInfo[playerid][pLocal] = 255;
    if(HouseInfo[i][hHel] == 1)
    {
    new Float:tempheal;
    GetPlayerHealth(playerid,tempheal);
    if(tempheal < 100.0)
    {
    SetPlayerHealth(playerid,100.0);
    }
    }
    }


    nun müsster aber noch bei /ram
    if(strcmp(cmd, "/ram", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(IsACop(playerid)||gTeam[playerid] == 2 || PlayerInfo[playerid][pLeader] == 6 || PlayerInfo[playerid][pLeader] == 10)
    {
    for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    if (PlayerToPoint(3, playerid,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez]))
    {
    SetPlayerInterior(playerid,HouseInfo[i][hInt]);
    SetPlayerVirtualWorld(playerid,i);//Wieder das hier reinmachen
    SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]);
    GameTextForPlayer(playerid, "~r~Tür eingebrochen", 5000, 1);
    PlayerInfo[playerid][pInt] = HouseInfo[i][hInt];
    PlayerInfo[playerid][pLocal] = i;
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du bist kein Cop !");
    return 1;
    }
    }
    return 1;
    }

    Einmal editiert, zuletzt von Kavkus ()

  • Was du postest, ist der reinste schwachsinn. Du setzt zwar die Virtuelle Welt, hast aber bei hinfo auch nichts gemacht, d.h. dein ding ist im prinzip sinnlos. Das gleiche muss bei /buyhouse /rentroom und paar anderen Sachen noch hin. Ist aber auch ne andere Methode.

  • Du musst wenn dann alles posten. Wenn man mal überlegt und es bei hinfo setzt muss man die hworld, nur noch in der Property.cfg dranhängen hinten.^^

  • ja aber dafür musst du 1.Den server Down setzten.
    2.Viel mehr getippt bzw. stressiger finde ich zumindest.


    bei meiner Methode, musst du es nur ins Script einfügen Compilen...nen gmx mache fertig

    Spoiler anzeigen
    Hier eben noch /buyhouse und /rentroom
    if(strcmp(cmd, "/buyhouse", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    GetPlayerName(playerid, playername, sizeof(playername));
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    for(new h = 0; h < sizeof(HouseInfo); h++)
    {
    if(PlayerToPoint(2.0, playerid, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]) && HouseInfo[h][hOwned] == 0)
    {
    if(PlayerInfo[playerid][pLevel] < HouseInfo[h][hLevel])
    {
    format(string, sizeof(string), " Du musst Level %d sein um dies zu kaufen !", HouseInfo[h][hLevel]);
    SendClientMessage(playerid, COLOR_GRAD5, string);
    return 1;
    }
    if(PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
    {
    SendClientMessage(playerid, COLOR_WHITE, " Du besitzt schon ein Haus, gib /sellhouse ein wenn dus verkaufen möchtest !");
    return 1;
    }
    if(GetPlayerMoney(playerid) > HouseInfo[h][hValue])
    {
    PlayerInfo[playerid][pPhousekey] = h;
    HouseInfo[h][hOwned] = 1;
    GetPlayerName(playerid, sendername, sizeof(sendername));
    strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
    GivePlayerMoney(playerid,-HouseInfo[h][hValue]);
    PlayerPlayMusic(playerid);
    SetPlayerInterior(playerid,HouseInfo[h][hInt]);
    SetPlayerVirtualWorld(playerid,h);
    SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);
    GameTextForPlayer(playerid, "~w~Willkommen zuhause~n~Mit /exit kannst du raus gehen", 5000, 3);
    PlayerInfo[playerid][pInt] = HouseInfo[h][hInt];
    PlayerInfo[playerid][pLocal] = h;
    SendClientMessage(playerid, COLOR_WHITE, "Herzlichen Glückwunsch zu deiner Wahl !");
    SendClientMessage(playerid, COLOR_WHITE, "Gib /help ein um die neue Kategorie einzusehen !");
    DateProp(playerid);
    OnPropUpdate();
    OnPlayerUpdate(playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, " Du hast nicht genug Geld !");
    return 1;
    }
    }
    }
    }
    return 1;
    }
    hier /rentroom
    if(strcmp(cmd, "/rentroom", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    GetPlayerName(playerid, playername, sizeof(playername));
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    for(new h = 0; h < sizeof(HouseInfo); h++)
    {
    if(PlayerToPoint(2.0, playerid, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]) && HouseInfo[h][hOwned] == 1 && HouseInfo[h][hRentabil] == 1)
    {
    if(PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0)
    {
    SendClientMessage(playerid, COLOR_WHITE, " Du hast bereits ein Haus wenn du hier einmieten möchtest musst du deins erst mit /sellhouse verkaufen.");
    return 1;
    }
    if(GetPlayerMoney(playerid) > HouseInfo[h][hRent])
    {
    PlayerInfo[playerid][pPhousekey] = h;
    GivePlayerMoney(playerid,-HouseInfo[h][hRent]);
    HouseInfo[h][hTakings] = HouseInfo[h][hTakings]+HouseInfo[h][hRent];
    PlayerPlayMusic(playerid);
    SetPlayerInterior(playerid,HouseInfo[h][hInt]);
    SetPlayerVirtualWorld(playerid,h);
    SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);
    GameTextForPlayer(playerid, "~w~Willkommen Zuhause~n~Du kannst das haus jederzeit mit /exit verlassen", 5000, 3);
    PlayerInfo[playerid][pInt] = HouseInfo[h][hInt];
    PlayerInfo[playerid][pLocal] = h;
    SendClientMessage(playerid, COLOR_WHITE, "Meine Glückwünsche du kannst hier jetzt jederzeit ein und aus gehen.");
    SendClientMessage(playerid, COLOR_WHITE, "gib /help um die neuen befehle zu begutachten.");
    OnPlayerUpdate(playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Du hast nicht genug geld");
    return 1;
    }
    }
    }
    }
    return 1;
    }[expander]

  • Jedem das seine. Ich mahgs so, und es geht auch mit gmx^^Man muss es nur richtig machen.

  • Mal ne Frage wieso muss man soviel verändern?
    Als ich das mit meinem Filterscript gemacht habe konnte man alle einfach so holen.Ich musste nur noch Preis und Level ändern.
    Das einzigste was bei mir das Problem war das wen man aus einem Haus raus geht man nicht an die Stelle kommt wo mein rein gegangen ist.

  • Eins Check ich nicht ganz:



    else if (PlayerToPoint(3.0, playerid,1344.6765,2610.1416,11.2989))//Haus 35, WO das man /enter macht
    {
    if(PlayerToPoint(3.0, playerid,1344.6765,2610.1416,11.2989))//Wo man /enter macht


    Haus 35, WO das man /enter macht und //Wo man /enter macht


    Das kapier ich nicht.Soll da das gleiche hin wie bei
    //Wo man /enter macht ? kapier ich nicht

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen