Beiträge von Firerfan

    Es kann auch sein, dass die Parameter minX, minY, maxX und maxY bei PlayerInZone anders sind, als beim GangZoneCreate ^^ Schonmal daran gedacht? Ansonsten poste uns die Funktion PlayerInZone

    Genau dieser Fall trifft zu, wie ich gerade merken musste ;/
    Na großartig, meine ganzen Publics nochmal umschreiben^^
    Hoffentlich funktioniert es dann endlich.



    MfG Firer

    Hallo liebe Leser,
    In diesem Tutorial möchte ich euch kurz und übersichtlich die funktionen von DINI erklären will.



    Vorwort
    Was ist DINI eigentlich?
    DINI ist ein Include-System, das es ermöglicht Daten in Dateien zu speichern.
    Das kann zum Beispiel für ein Login & Register System, oder eine Fraktionskasse genutzt werden.
    Entwickelt wurde es von DracoBlue (http://www.dracoblue.net )
    Hinweis: Solltet ihr keine Ahnung von PAWN haben lasst besser erstmal die Finger von diesem Tutorial!



    Installation
    Die Installation folgt ganz einfach via Include.
    Sprich: Ihr benötigt die Include und verknüpft diese dann mit eurem GameMode.
    Dafür muss die Include in eurem PAWNO unterordner "Includes" liegen.
    Anschließend müsst ihr in den Head-Berreich eures Scriptes bzw. irgendwo ausserhalb eines Callbacks oder eines Publics bzw. stocks die Include via #include verknüpfen.
    Downloaden könnt ihr die Include Hier



    Anwendung
    Nach dem installieren haben wir nun erstmal einige funktionen zur Verfügung, die wir nutzen können um Inhalt zu Updaten, Dateien zu erstellen oder sonstiges. Folgende Funktionen stehen zur Verfügung:
    dini_Exists(filename[])
    dini_Remove(filename[])
    dini_Create(filename[])
    dini_Set(filename[],key[],value[])
    dini_IntSet(filename[],key[],value)
    dini_Int(filename[],key[])
    dini_FloatSet(filename[],key[],Float:value)
    dini_Float(filename[],key[])
    dini_Bool(filename[],key[])
    dini_BoolSet(filename[],key[],value)
    dini_Unset(filename[],key[])
    dini_Get(filename[],key[])
    dini_Isset(filename[],key[])
    Davon werden allerdings nur wenige verwendet.
    Auch wenn man sich davon nun erstmal erschlagen fühlt, mit der Zeit gewinnt man an übersicht.


    So, nun können wir eigentlich schon loslegen.
    Fangen wir ambesten einfach mal mit einem Script an, das beim Disconnect den Standort des Spielers speichert.
    new name[MAX_PLAYER_NAME],Float:pos_x,Float:pos_y,Float:pos_z,string[25];
    GetPlayerName(playerid,name,sizeof(name));//---------[Wir finden den Namen des Spielers herraus]
    GetPlayerPos(playerid,pos_x,pos_y,pos_z);//---------[Wir finden die Position des Spielers herraus]
    format(string,sizeof(string),"%s.ini",name);//---------[Wir erstellen einen String mit dem Namen des Spielers]
    dini_Create(string);//---------[Wir erstellen die Datei, falls diese nicht existiert]
    dini_FloatSet(string,"Alt-X",pos_x);//---------[Wir speichern die X-Koordinate]
    dini_FloatSet(string,"Alt-Y",pos_y);//---------[Wir speichern die Y-Koordinate]
    dini_FloatSet(string,"Alt-Z",pos_z);//---------[Wir speichern die Z-Koordinate]

    Natürlich müssen diese Daten nun auch noch bei "OnPlayerConnect" geladen werden.
    Dazu hier ein kleines Beispielscript:
    new name[MAX_PLAYER_NAME],Float:pos_x,Float:pos_y,Float:pos_z,string[25];
    GetPlayerName(playerid,name,sizeof(name));//---------[Wir finden den Namen des Spielers herraus]
    GetPlayerPos(playerid,pos_x,pos_y,pos_z);//---------[Wir finden die Position des Spielers herraus]
    format(string,sizeof(string),"%s.ini",name);//---------[Wir erstellen einen String mit dem Namen des Spielers]
    if(dini_Exists(string))
    {
    pos_x = dini_Float(string,"Alt-X");//---------[Wir übertragen die gespeicherte Koordinate in eine Variable]
    pos_y = dini_Float(string,"Alt-Y");//---------[Wir übertragen die gespeicherte Koordinate in eine Variable]
    pos_z = dini_Float(string,"Alt-Z");//---------[Wir übertragen die gespeicherte Koordinate in eine Variable]
    SetPlayerPos(playerid,pos_x,pos_y,pos_z);//---------[Wir setzen die Position des Spielers]
    }
    Und Fertig. Schon haben wir ein Script, welches es uns ermöglicht die letzte Position des Spielers zu speichern und anschließend wieder zu laden.
    Ich werde das Tutorial bei Nachfrage ggf. erweitern und noch einige Funktionen mehr erklären.



    MfG Firer
    //EDIT: Rechtschreibfehler verbessert
    //EDIT: Linkfehler bei DracoBlue behoben

    Moinsen, ich hab folgendes Problem:
    Bei mir kommt immer die Meldung "Du bist in keiner Gangzone".


    Code:


    public AtackZone(playerid)
    {
    new atackzone;
    if(PlayerInZone(playerid, -2521.439208, 707.875305, -2393.439208, 803.875305)){atackzone = 1; SendClientMessageToAll(COLOR_ORANGE,"[NEWS]: Es findet ein GangFight statt!");}
    else if(PlayerInZone(playerid, -2801.144042, -70.835403, -2705.144042, 33.164600)){atackzone = 2; SendClientMessageToAll(COLOR_ORANGE,"[NEWS]: Es findet ein GangFight statt!");}
    else if(PlayerInZone(playerid, -2410.999755, 59.794006, -2258.999755, 243.794006)){atackzone = 3; SendClientMessageToAll(COLOR_ORANGE,"[NEWS]: Es findet ein GangFight statt!");}
    else if(PlayerInZone(playerid, -2595.363281, 1174.781250, -2443.363281, 1262.781250)){atackzone = 4; SendClientMessageToAll(COLOR_ORANGE,"[NEWS]: Es findet ein GangFight statt!");}
    else if(PlayerInZone(playerid, -2201.540283, -295.914581, -2097.540283, -71.914581)){atackzone = 5; SendClientMessageToAll(COLOR_ORANGE,"[NEWS]: Es findet ein GangFight statt!");}
    else if(PlayerInZone(playerid, -1737.269042, -49.213462, -1625.269042, 126.786537)){atackzone = 6; SendClientMessageToAll(COLOR_ORANGE,"[NEWS]: Es findet ein GangFight statt!");}
    else{return SendClientMessage(playerid,COLOR_RED,"Du bist in keiner Gang-Zone!");}
    gangwar = atackzone;
    kills[0]=0;
    kills[1]=0;
    if(SpielerInfo[playerid][team]==4){GangZoneFlashForAll(zone[atackzone],COLOR_FAMILY);}
    if(SpielerInfo[playerid][team]==5){GangZoneFlashForAll(zone[atackzone],COLOR_ATZEN);}
    return 1;
    }


    MfG Firer

    Das ganze Scripttechnisch umzusetzen ist wirklich nicht sehr schwer.
    Allerdings ist die Idee an sich ganz gut - auch das mit der Musik ;)


    Deine Includes sind bis jetzt ganz okay.
    Von mir gibts 8/10




    MfG Firer

    Ungetestet:
    new kennzeichen[MAX_VEHICLES];//-----[Ganz oben ins Script]
    public OnVehicleSpawn(vehicleid)
    {
    new Text3D:vehicle3d[MAX_VEHICLES],string[20];
    kennzeichen[vehicleid] = vehicleid*10;
    format(string, sizeof(string), "SA-%s",kennzeichen[vehicleid]);
    vehicle3d[vehicleid] = Create3DTextLabel(string,COLOR_RED,30.0,30.0,5.0,30.0,0);
    Attach3DTextLabelToVehicle(vehicle3d[vehicleid],vehicleid, 0.0, 0.0, 0.0);
    }

    String und ne Random-Zahl zwischen 100 und 999
    Oder die VehicleID mal 10 ;)


    Könnte dann so aussehen:
    new kennzeichen[MAX_VEHICLES];
    kennzeichen[vehicleid] = vehicleid*10;


    Dann halt nen String und den 3D Text Attachen.
    wichtig: Musst irgendwie die Vehicle-ID rausfinden.
    Ambesten nit ner for-schleife bei OnGameModeInit




    Fertig.

    Wie währe es wenn du einfach nen stock nimmst und den mit "GivePlayerMoney" ersetzt.
    Dann dabei einfach ne Variable Updaten/Erweitern und Abfragen, ob die Variable NICHT mit "GetPlayerMoney" übereinstimmt.
    Würde dein System schon mal Resourcenschonender machen.


    Was das andere angeht:
    public OnVehicleRespray(playerid,vehicleid)


    Sollte funktionieren, bin mir aber nicht sicher.





    MfG Firer

    Hmm... Sehen eigentlich alle ganz gut aus.
    Aber einige sind etwas zu Groß für Signaturen.


    Ausserdem passen die 3D-Effekte für die Schrift nicht.
    Das sieht einfach nicht aus.




    MfG Firer