Beiträge von Kaliber

    Das ist so nicht möglich, es gibt zwar ein Plugin mit dem das möglich wäre, aber ich glaube du meinst etwas anderes.


    Du kannst mit SetPlayerCameraPos und SetPlayerCameraLookAt den Spieler zwingen genau dieses Bild quasi zu haben, welches du möchtest.


    Hintergrund Bilder (inform von TextDraws also 2D) nennt man Sprites, kannst du ja mal in Verbindung mit SA:MP googlen :)


    mfg. :thumbup:

    Also im Wiki kannst du doch nachlesen, was die einzelnen Attribute bedeuten, zudem ist dort ein Beispiel.


    Aber wenn du es konkreter haben willst, dann hier ein weiteres:


    new obj = CreateObject(7606,0,0,3,0,0,0),tmp[128];


    format(tmp,sizeof tmp, "{FF0000}Server: {00BFFF}German Reallife\n\n\
    {FF0000}Ts³: {00BFFF}127.0.0.1\n\n\
    {FF0000}Forum: {00BFFF}http://www.gidf.de");


    SetObjectMaterialText(obj,tmp,0,OBJECT_MATERIAL_SIZE_256x128,"Arial",24,1,-1,0xFF000000);


    Sieht dann am Ende so aus:



    Du kannst das auf alle Objekte anwenden, musst halt immer den Index beachten.


    Wenn du es kleiner Skalieren willst, nimm eine andere Schriftgröße oder zentrier es dann anders...schau dir halt die einzelnen Attribute nochmal genau an und les dir alles in Ruhe durch :)


    mfg. :thumbup:

    abe da noch eine frage wie kann ich es machen das an dem roller ein text ist ach ja es sin 12 roller das fukt nur bei 1 roller


    Naja...und wo ist das Problem? :huh:


    Du kannst es doch einfach so machen:


    //Für 4 Autos:
    SetVehicleNumberPlate(veh1,"German Reallife");
    SetVehicleNumberPlate(veh2,"German Reallife");
    SetVehicleNumberPlate(veh3,"German Reallife");
    SetVehicleNumberPlate(veh4,"German Reallife");


    Oder du machst es in einem Array bzw in einer Schleife:


    for(new i; i<sizeof roller; i++) SetVehicleNumberPlate(roller[i],"German Reallife");


    PS: Eventuell Auto noch respawnen lassen, damit das Nummernschild wirklich gesetzt wird :)

    Und wie kann ich diese durchzählen ?


    Naja, einfach so:


    new ids[MAX_PLAYERS],counter;
    for(new i,l=GetPlayerPoolSize()+1; i<l; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,x,y,z)) //Hier halt deine Position angeben
    {
    ids[counter++] = i;
    }
    }
    //Naja und counter hat jetzt die Anzahl der Personen die da sind und in ids sind die Playerids aufgelistet:
    //Wenn du die nun alle an eine Position setzen willst, machst du das z.B. so:
    for(new i; i<counter; i++)
    {
    SetPlayerPos(ids[i],x,y,z); //Hier setzt du dann alle Spieler die da standen an eine gewisse Position
    }


    mfg. :thumbup:

    Kann mir jemand ein beispiel für eine Abfrage schicken ob sich drei leute an einen gewissen ort befinden wenn Sie einen Befehl eingebeN ?


    Naja...da gibt es mehrere Möglichkeiten das zu realisieren.


    Entweder du lässt sie einen Command eingeben, dann setzt du einen boolean für die playerid auf true und freezt sie.


    Dann kannst du ja ganz einfach dadurch loopen und schauen wer alles an dem Ort ist und noch connected ist.


    Oder du machst einfach eine Schleife durch alle Spieler und schaust ob diese Spieler an diesem Punkt sind.


    /sit und möchte ihn in einem Timer benutzen


    Schau dir am besten nochmal den Wiki eintrag dazu an, besonders den "time" Parameter: ApplyAnimation


    Für sit selbst gibt es mehrere Animationen, ich geb dir einfach mal 2:


    "BEACH", "ParkSit_M_loop"
    //oder
    "PED","SEAT_IDLE"


    mfg. :thumbup:

    Nutze dafür folgende Funktion:


    stock GetIDByName(const name[])
    {
    new n[MAX_PLAYER_NAME];
    for(new i,l=GetPlayerPoolSize()+1; i<l; i++) if(GetPlayerName(i,n,MAX_PLAYER_NAME) && !strcmp(n,name)) return i;
    return -1;
    }


    //Dann in deinem Dialog:
    new id = GetIDByName(inputtext);
    if(id == -1) return SendClientMessage(playerid,-1,"Dieser Admin ist nicht mehr online!");


    mfg. :thumbup:

    Kaliber


    Also ich kenne das Problem mit dem sscanf Plugin nicht ^^, deshalb bin ich davon ziemlich überrascht.


    Ich auch nicht...aber in solchen Fällen verwende ich es auch nie :D


    Deshalb...war das nur vermutet...was da passieren kann ^^


    Das überschreiben wäre nicht wirklich denkbar und zwar wird der Speixher dynamisch bei localen variablen frei gegeben jedoch nur die große , welche auch beansprucht wird,


    Beim Stack (Lokalen Variablen) kann man das NULL Byte überschreiben...es folgt zwar ein Runtime Error, dennoch geht es:


    #include <a_samp>


    main() {
    new test[2];
    func(test);
    print(test); //->Gibt Hallo aus
    }


    func(...) {
    setarg(0,0,'H');
    setarg(0,1,'a');
    setarg(0,2,'l');
    setarg(0,3,'l');
    setarg(0,4,'o');
    }


    Bei globalen Variablen wird es begrenzt, sprich da kommt nur Ha raus...ohne Error :)


    mfg. :thumbup:

    Mal kurz nebenbei, es ist total redundant hier sscanf zu nutzen, schreibe es einfach so:


    if(strlen(params) > 64)return SendClientMessageEx(playerid, COLOR_WHITE, "%d Zeichen.", strlen(params));
    //Und text = params...


    Doch du kannst keine 128 Zeichen in einen string packen der auf 64 Zeichen limitiert ist


    Nun, ich weiß nicht genau wie das verarbeitet ist...aber es kann doch gut sein, dass das NULL Byte überschrieben wird...somit kann der String dadurch natürlich größer werden...


    Naja, wie dem auch, es ist in der Doku beschrieben, dass man sscanf nicht nutzen soll für diesen Fall, also mach es einfach nur so ;)

    Andere Lösung?


    Nun, da gibt es mehrere, das kommt auf die Deklaration an.


    Angenommen du machst es so:


    static const array[][] = {
    "String1",
    "String2",
    "String3"
    };


    printf("Anzahl der Strings: %d",sizeof array); //->Gibt 3 aus


    Das was du aber willst, ist viel mehr eine Liste an Elementen.


    new string[30][128];
    string[0] = "String1";
    string[1] = "String2";
    string[3] = "String4";


    So jetzt können wir nicht mehr mit sizeof oder strlen arbeiten.
    Zusätzliches Problem ist, dass Lücken entstehen können wie z.B. in diesem Fall cell 2 leer ist.
    Lösung ist eine Funktion:


    stock CountStrings(const str[][],len=sizeof str)
    {
    new counter;
    for(new i; i<len; i++)
    {
    switch(str[i][0])
    {
    case '\0','\1': continue;
    default: counter++;
    }
    }
    return counter;
    }


    //Nutzen können wir sie in unserem Beispiel so:
    new string[30][128];
    string[0] = "String1";
    string[1] = "String2";
    string[3] = "String4";
    printf("Anzahl der Strings: %d",CountStrings(string)); //->3


    mfg. :thumbup:

    Kannst du mir das Bitte erleutern, Ich möchte das wenn man Enter drückt das die die Animation die man ausführt aufhört.


    //Edit:


    Obwohl nimm lieber einen Befehl dafür:


    //Irgendein Command:
    if(GetPlayerAnimationIndex(playerid)) ClearAnimations(playerid);


    Da du sonst die Animation selbst abbrichst die ein Spieler ausführen würde...