Beiträge von ENEF

    Vergiss aber nicht es so zu machen(meines Wissens nach)



    new string[64];
    format(string, sizeof(string), "| AFK |\n00.00.00",Variable);
    afklabel = Create3DTextLabel(string, 0xFFAA00FF, 30.0, 40.0, 50.0, 40.0, 0);


    Und beim Public(für den Timer) den 3D Text dann genau so Updaten.


    Mit freundlichen Grüßen


    //Edit;


    Spoiler anzeigen
    new afktimer[MAX_PLAYERS], afktime[MAX_PLAYERS];
    ocmd:afk(playerid)
    {
    if(InAFK[playerid]==0)
    {
    new string[64];
    InAFK[playerid]=1;
    SendClientMessage(playerid,C_Blau,"Du bist nun im AFK Modus.");
    TogglePlayerControllable(playerid,0);
    format(string, sizeof(string), "| AFK |\n%d",afktime[playerid]);
    afklabel = Create3DTextLabel(string, 0xFFAA00FF, 30.0, 40.0, 50.0, 40.0, 0);
    Attach3DTextLabelToPlayer(afklabel, playerid, 0.0, 0.0, 0.7);
    afktimer[playerid] = SetTimerEx("isAFK",1000,true,"i",playerid);//Ruft den Public jede Sekunde auf
    }
    if(InAFK[playerid]==1)
    {
    InAFK[playerid]=0;
    SendClientMessage(playerid,C_Blau,"Du bist nun nicht mehr im AFK Modus.");
    TogglePlayerControllable(playerid,1);
    DeletePlayer3DTextLabel(playerid, PlayerText3D:afklabel);
    KillTimer(afktimer[playerid]);
    }
    return 1;
    }
    forward isAFK(playerid);
    public isAFK(playerid)
    {
    new string[64];
    afktime[playerid] ++;
    format(string, sizeof(string), "| AFK |\n%d",afktime[playerid]);
    Update3DTextLabelText(afklabel, 0xFFAA00FF, string);
    return 1;
    }


    So in der Art, soll nur zum denken anregen ^^
    Falls Fehler drin sind, schreib es hier rein.

    Hi,


    jetzt weiß ich was du meinst ^^
    Die Bäume vor der Fahrschule find ich zu viel, kleines gebüsch oder so hätte es auch getan^^


    Verkaufst du die Map?


    Mit freundlichen Grüßen

    Hi,


    ich kann dir Supernatural empfehlen, bei mir ist der Suchtfaktor mega hoch :D
    Da geht es um übernatürliche Wesen die von 2 Brüdern gejagt werden.
    Kennste bestimmt oder?
    Wikipedia Link


    Bin momentan Staffel 10 8o


    Mit freundlichen Grüßen

    Ich würde es nicht an eine Fraktion definieren.
    Mach es doch so, dass man das Pns Biz "ausrauben" kann und somit eine Random Summe vom Geldspeicher bekommt.
    Und halt dazu noch ein Besitzer, dem das Geld dann fest gehört.


    Mit freundlichen Grüßen

    Tag leute, ich habe mal ne komische Frage.
    Bei meinem Laptop sitzt der Textdraw perfekt, so wie er sein soll:


    Und bei meinem PC sehen die Textdraws eh alle so komisch langezogen und hässlich aus, jedoch sieht der Tacho beim PC so aus?


    Also eigentlich sollte der Schwarze Balken wo Tacho drauf steht, genau so breit sein wie der transperentere :/


    Schwarzer Balken
    Tacho2[playerid] = CreatePlayerTextDraw(playerid, 484.000000, 310.366668, "TACHO2");//Schwarzer Balken 311.366668
    PlayerTextDrawLetterSize(playerid, Tacho2[playerid], 0.000000, 0.932098);
    PlayerTextDrawTextSize(playerid, Tacho2[playerid], 635.000000, 0.000000);

    Transperenter Balken

    Tacho1[playerid] = CreatePlayerTextDraw(playerid, 639.000000, 320.699981, "TACHO");//Hintergrund(Transperenter)
    PlayerTextDrawLetterSize(playerid, Tacho1[playerid], 0.000000, 10.606792);
    PlayerTextDrawTextSize(playerid, Tacho1[playerid], 480.000000, 0.000000);


    Hab schon versucht die Größe anzupassen jedoch immer gescheitert.


    Woran liegt das?


    Mit freundlichen Grüßen

    Hi,


    Kleiner Tipp am Rande; du könntest auch new pns[4];


    pns[0] = ...


    Und immer soweiter machen, ist übersichtlicher und besser ^^



    Mit freundlichen Grüßen

    Spoiler anzeigen
    ocmd:createhouse(playerid, params[])
    {
    new Art, Inte, V, hLv, hPreis,text [128];
    if(sscanf(params,"ddddd",Art,Inte, V, hLv, hPreis))return SendClientMessage(playerid,info,"/Createhouse [IntID] [Virtuelle Welt] [Level] [Preis]");
    if(SpielerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, error, "Du bist kein Admin!");
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(strlen(hInfo[i][Besitzer])) continue; //Wenn das Haus existiert, gehe weiter.
    new Float:Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    hInfo[i][PosX] = Pos[0];
    hInfo[i][PosY] = Pos[1];
    hInfo[i][PosZ] = Pos[2];
    hInfo[i][IntID] = Inte;
    hInfo[i][VID] = V;
    hInfo[i][Level] = hLv;
    hInfo[i][Kaufpreis] = hPreis;
    hInfo[i][Mietpreis] = 0;
    hInfo[i][Gekauft] = 0;
    hInfo[i][Lock] = 0;
    //Hier dann das mit dem Interior und die Postion^^
    format(hInfo[i][Besitzer], 34, "Niemand");
    format(hInfo[i][Mieter1], 34, "");
    format(hInfo[i][Mieter2], 34, "");
    format(hInfo[i][Mieter3], 34, "");
    new query[1024];
    format(query, sizeof(query), "INSERT INTO House (ID, Besitzer, Level, PosX, PosY, PosZ, IntX,IntY,IntZ, IntID, VID, `Locked`, Mietpreis, Kaufpreis, Gekauft, Mieter1, Mieter2, Mieter3) VALUES ('%d','%s', '%d', '%f', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%s')",
    i, hInfo[i][Besitzer], hInfo[i][Level], hInfo[i][PosX], hInfo[i][PosY], hInfo[i][PosZ], hInfo[i][IntX], hInfo[i][IntY], hInfo[i][IntZ], hInfo[i][IntID], hInfo[i][VID], hInfo[i][Lock], hInfo[i][Mietpreis], hInfo[i][Kaufpreis], hInfo[i][Gekauft], hInfo[i][Mieter1], hInfo[i][Mieter2], hInfo[i][Mieter3], i);
    mysql_tquery(handle, query);
    hInfo[i][Pick_ID] = CreatePickup(1273,1,Pos[0],Pos[1],Pos[2],0);
    format(text, sizeof(text), "Besitzer: Niemand\nPreis: %d$\nLevel: %d\n\nDrücke 'ENTER' um einzutreten",hInfo[i][Kaufpreis],hInfo[i][Level]);
    hInfo[i][Houselable] = Create3DTextLabel(text,0x0FFF00FF,Pos[0],Pos[1],Pos[2],20.0,0,1);
    SaveAllHouses();
    return SendClientMessage(playerid, 0x00FF00FF, "Haus wurde erfolgreich gespeichert.");
    }
    return SendClientMessage(playerid, error, "Es können keine weiteren Häuser erstellt werden.");
    }


    So, jetzt hab ich da ja Art(Großes Haus/Mittel/Kleines
    Und dann Interior, also wenn ich bsp Createhouse 1(großes haus) 5 mache soll er dann bsp die Mad Dogg villa nehmen also als Koordinate.


    Mit dem Splitten weiß ich nicht genau was du meinst, sorry^^


    Jeffry:

    Okay, also ich hab jetzt mal so gemacht


    Spoiler anzeigen
    enum hIntDaten
    {
    Art,
    Int,
    Float:IntX,
    Float:IntY,
    Float:IntZ,
    Text[34]
    }
    new Houses[MAX_HOUSE][hIntDaten] =
    {
    {1, 5 , 1261.0065,-785.5643,1091.9063, "17 Zimmer"}//Ist die Art(Groß/Mittel/Klein) Interior XYZ vom Interior
    };


    Wird es da jetzt komplikationen geben wegen meinem HausDaten enum?
    Und wie lass ich das jetzt per befehl durchsuchen? ^^


    und beim Speichern in die Daten bank dann einfach hInfo[i][IntX] = hIntDaten...?


    Ich checks grad wenig ^^


    Jeffry:

    Perfekt, funktioniert 1A!


    Ich muss mich bei dir bedanken, dass du immer Hilfst :)
    Alleine hätte ich das niemals geschafft.^^


    Hab noch ne klitze kleine Frage undzwar geht es beim Befehl auch noch anders, die Koordinaten für das Interior festzulegen?
    Weil erstens wird der Command dann bestimmt unübersichtlich und ewig und zweitens gibt es bestimmt mehrere Häuser mit der gleichen Interior ID :/


    Vielleicht das man auswählen kann /Createhouse [HausID](1 = Großes Haus) (2 = Mittleres Haus) (3 = Kleines Haus) [IntID].....


    Und dann in einem Enum die HausID, InteriorID, Koordinaten fürs Interior.


    Damit er dann eigenständig dort sucht und einträgt?


    Wäre nämlich besser ^^


    Falls das nicht geht oder man zuviel umschreiben müsste sag das einfach.


    Mit freundlichen Grüßen :)


    Jeffry:


    //Edit:
    Momentan mach ich es mit switch & case

    Spoiler anzeigen
    switch(Inte)
    {
    case 5:
    {
    hInfo[i][IntX] =1261.0065;
    hInfo[i][IntY] =-785.5643;
    hInfo[i][IntZ] =1091.9063;
    }

    Danke für die Hilfe Jeffry ^^


    Zu dem Betreten wenn das Haus abgeschlossen ist nur als Mieter oder Besitzer hab ich ein kleines Problem.
    Besitzer können immer rein egal ob verschlossen oder nicht, aber Mieter können nicht rein :D


    Spoiler anzeigen
    if(hInfo[house][Gekauft] == 1)
    {
    if(hInfo[house][Lock] != 0 && (strcmp(SpielerName(playerid), hInfo[house][Mieter1]) && strlen(hInfo[house][Mieter1])) || (strcmp(SpielerName(playerid), hInfo[house][Mieter2]) && strlen(hInfo[house][Mieter2])) || (strcmp(SpielerName(playerid), hInfo[house][Mieter3]) && strlen(hInfo[house][Mieter3])) || (strcmp(SpielerName(playerid), hInfo[house][Besitzer]) && strlen(hInfo[house][Besitzer])))
    {
    return SendClientMessage(playerid, error, "Dieses Haus ist verschlossen. Zutritt nur für Mieter/Bezitzer");
    }
    SetPlayerPos(playerid, hInfo[house][IntX],hInfo[house][IntY],hInfo[house][IntZ]);
    SetPlayerInterior(playerid, hInfo[house][IntID]);
    SetPlayerVirtualWorld(playerid, hInfo[house][VID]);
    return 1;
    }


    Irgendwie verstehe ich das mit dem strcmp und strlen nicht so ganz :wacko:



    Jeffry:


    Mit freundlichen Grüßen

    Okey also ich bin doch etwas zu doof für ein Haus System :D
    Ich wollte jetzt ein Kündigen Befehl für Mieter machen^^
    Das mit der Miete einstellen hab ich gut hinbekommen, pass auf :D
    Zum Test hab ich mich in einem Haus das Niemand gehört als erster Mieter eingetragen, jedoch werde ich als Mieter2 festgelegt.
    Ich bekomme die Nachricht "Mieter2 bye" aber werde nicht von Mieter1 gelöscht :/


    Kündige Befehl
    ocmd:kuendigen(playerid, params[])
    {
    for(new i=0; i<MAX_HOUSE; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, hInfo[i][PosX],hInfo[i][PosY],hInfo[i][PosZ]))
    {
    if((!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) && strlen(hInfo[i][Mieter1])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter2]) && strlen(hInfo[i][Mieter2])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter3]) && strlen(hInfo[i][Mieter3])))
    {
    if(!strlen(hInfo[i][Mieter1])) return format(hInfo[i][Mieter1], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 1 bye"), SaveAllHouses();
    else if(!strlen(hInfo[i][Mieter2])) return format(hInfo[i][Mieter2], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 2 bye"), SaveAllHouses();
    else if(!strlen(hInfo[i][Mieter3])) return format(hInfo[i][Mieter3], 24, ""), SendClientMessage(playerid, erfolg, "Mieter 3 bye"), SaveAllHouses();
    return 1;
    }
    }
    }
    return 1;
    }


    Jeffry:


    Mit freundlichen Grüßen

    Ah, ich war verwirrt weil "CaZe" da noch was gepostet hat. Ich dachte das wärst du ^^


    Alles klar, ich versuch es mal.


    Das wäre dann beispielsweise so wenn ich jetzt das Dialog nur für Besitzer öffnen lassen will oder?
    if((!strcmp(SpielerName(playerid), hInfo[i][Besitzer]) && strlen(hInfo[i][Besitzer]))
    {
    //Dialog
    }


    Und im Dialog dann einfach mit der Schleife arbeiten und jenachdem die Werte in der DB ändern lassen?


    Mit freundlichen Grüßen

    Also soll ich jetzt dann Abfragen welches Haus welchem Spieler gehört am Name oder wie?
    Oder an der Virtuellen Welt?
    Sollte ich da dann beim Createhouse befehl das Virtuelle Welt raus nehmen?
    Und dann irgendwie mache n das bei jedem Haus das Interior um 1 hoch geht?


    Ich verstehs grad nicht ganz :/



    Mit freundlichen Grüßen

    Hi Jeffry.


    Nun funktioniert es endlich, danke !
    Woran lag es denn?


    Kleine Frage noch ^^
    Wenn ich jetzt bsp. ein Dialog machen will, wo Hausbesitzer ihre Miete ändern können und Mieter raus werfen können.
    Wie mach ich das dann, dass der Hausbesitzer nur sein Haus verändert?
    Und ich versuche immer Abzufragen(Falls das Haus gelockt ist) damit nur die nicht rein können, die nicht Mieten oder kein Besitzer sind.
    Leider krieg ich das nicht so auf die Reihe ^^


    Hast du vielleicht ein bsp. für mich?


    Mit freundlichen Grüßen

    Hi.


    Also, ich hab's jetzt noch mal intensiv getestet.
    Egal in welches Haus ich rein gehe, ich komme bei den erst erstellten Haus wieder raus.


    Ja habe ich, nur eine andere virtuelle Welt.
    Aber ist das deswegen? Es soll ja nicht nur 1 Haus mit dem Interior geben, sollte ja schon mehrere geben dürfen.


    Jeffry:


    Mit freundlichen Grüßen


    PS: in der Datenbank hat jeder seine richtige PosX/Y/Z(die Koord. an die er raus kommen soll)