No DM Zone

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
  • Hey Leute ich suche hier schon seit einiger Zeit nach einem Thema was das entspricht was ich genau Suche :D
    Aber ich habe kein Thema gefunden daher erstell ich mal hier ein Thema und frage euch mal:
    Wie erstell ich eine No-DM Zone ?
    Folgendes soll dann passieren/drin sein.
    Es soll einem Spieler "Unten Rechts am Bildschirm" angezeigt werden "No DM-Zone" und auf der Karte eine ROTE makierung sein ich selbst hab es nicht einfach nicht hingekriegt daher frage ich euch mal, ich hoffe das ihr mir weiter helfen könnt.


    MFG
    West_Coast


    PS: Habe meinen Namen zu "ViruzZ" umbennant.

  • Ich kriege das mit IsPlayerArea nicht hin, versteh ich irgendwie nicht..... :/
    Und wie mache ich das dann das der Textdraw so lange unten rechts angezeigt wird bis er die Zone verlässt ?
    Die Zone soll ja am Los Santos Krankenhaus sein.

  • new Text:NoDMZone
    In einen Timer:


    Code
    if(IsPlayerInRangeOfPoint(i, 80.0, 1191.4489,-1338.6504,12.9663))				    {				        TextDrawShowForPlayer(i, Text:NoDMZone);				    }				    else				    {						TextDrawHideForPlayer(i, Text:NoDMZone);					}


    und bei OngamemodeInit


    Code
    Text:NoDMZone= TextDrawCreate(215.000000, 420.000000, "No-DM Zone");	TextDrawBackgroundColor(Text:NoDMZone, 255);	TextDrawFont(Text:NoDMZone, 1);	TextDrawLetterSize(Text:NoDMZone, 0.689999, 1.85);	TextDrawColor(Text:NoDMZone, -16776961);	TextDrawSetOutline(Text:NoDMZone, 1);	TextDrawSetProportional(Text:NoDMZone, 1);


    hm, warum das nicht untereinander geht weis ich nicht xD bitte auch mir helfen :D

  • Das hast du schön Kopiert *LOB*


    Aber was bringt es ihm, wenn du ihm einfach nen Code ins Hirn wirfst, ohne ihm zu erklären warum was wo was wie was ist.


    Gleich kommt er an "Bahnhof - Versteh ich nicht"


    Also ich kann dir einen Tipp geben:


    Schau dir Tutorials über Gangzonen,Textdraws,Timer an.
    Tipp: Vllt haste die IsPlayerInArea Abfrage falsch gemacht. Es geht IsPlayerInArea(playerid,MinX,MinY,MaxX,MaxY);


    Also Hilfe was Groß und was Klein ist:


    http://gtamap.delux-host.com/live/
    x = Links klein , Rechts groß
    y = Oben klein , Unten groß


    MfG.
    Me

  • Ganz einfach eigentlich:


    Um eine Gangzone zu erstellen, musst du GangZoneCreate nutzen, ein Beispiel:
    Definiertes = GangZoneCreate(minX,minY,maxX,maxY); // Kommt unter GameModeInit


    Eine Definierung für eine GangZone ist optional, wie bei einem Pickup, aber wenn Du dennoch einen Namen definieren möchtest, damit Du die Stelle leicht wieder finden kannst, musst Du ganz oben im Script folgendes eingeben:
    [pwn]new Definiertes; // also ein Name für deine GangZone und dann vor GangZoneCreate der Name und ein = schreiben[/pwn]


    Und da Du ja ein Textdraw anzeigen möchtest, musst Du erstmal die Koordinaten rausfinden, dafür empfehle ich dir folgende Seite: (http://bsndesign.webs.com/tde.htm)


    Wie Du ein Textdraw erstellst, und was Du alles einfügen möchtest, steht ebenfalls auf der Seite. Einfach mal durchlesen.


    Jetzt wollen wir überprüfen, ob der Spieler eine NO-DM Zone betretet bzw. in einer ist, das machen so:
    stock IsPlayerInArea(playerid,Float:minX,Float:minY,Float:maxX,Float:maxY)
    {
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    if(pX >= minX && pX <= maxX && pY >= minY && pY <= maxY) return 1;
    else return 0;
    }


    Einen stock erstellen. Dieser überprüft, ob der Spieler sich in einer bestimmten Zone befindet, fast so wie IsPlayerInRangeOfPoint, hier ein Beispiel:
    if(strcmp(cmdtext,"/hallo",true)==0)
    {
    if(IsPlayerInArea(playerid,minX,minY,maxX,maxY)) // befindet sich der Spieler in Zone minX,minY,maxX,maxY?
    {
    SendClientMessage(playerid,FARBE,"Hallo!");
    }
    else // wenn er sich nicht dort aufhält, bekommt er ne fette message :D
    {
    SendClientMessage(playerid,FARBE,"Hau bloß ab für dich gibts kein hi!");
    }
    }


    So jetzt wollen wir den Spieler einen TextDraw anzeigen, wenn er sich in der Zone aufhält, dafür erstellen wir einen Timer, der dies, alle 10 Sekunden (oder dein gewünschtes Interval) überprüft:
    Wann soll der Timer gestartet werden? Sagen wir mal, wenn der Spieler sich einloggt, also unter OnPlayerConnect:
    SetTimer("NDMZoneCheck",10000,true); // SetTimer("timername",interval,wiederholung?); true = wiederholung, false = keine


    Und für den Timer erstellen wir jetzt einen public:
    forward NDMZoneCheck(playerid);
    public NDMZoneCheck(playerid)
    {
    for (new i = 0; i < MAX_PLAYERS; i++) // oder GetMaxPlayers wenn du paar Ressourcen sparen möchtest, damit bekommen wir jeden Spieler
    {
    if(IsPlayerInArea(i,minX,minY,maxX,maxY)) // Wenn er in der NO DM Zone ist, wenn du mehrere NO dm Zonen hast einfach ein || und mit IsPlayerInArea weiter machen
    {
    TextDrawShowForPlayer(i,"dein "textdrawname"); // dein textdraw wird angezeigt wenn er die no dm zone betritt
    }
    else // und wenn nicht verstecken wir den textdraw
    {
    TextDrawHideForPlayer(i, "textdrawname"); // und weg isser
    }
    }
    return 1;
    }


    Bei weiteren Fragen, pn, hab das jetzt auf die schnelle geschrieben ^^


    PS: Ein Gangzone zeigst du mit GangZoneShowForPlayer (nur für den Spieler) oder GangZoneShowForAll (für alle) ein.


    // geht auch anders, aber so find ich es am leichtesten xD //