b_GetPlayerPos -> Funktion zum auslesen der Objekt Position

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 Leute,


    ich benutze mom den BFX Objekt Streamer.
    Dieser Streamer hat mehr oder weniger die Funktion die Position von Objekten zu erkennen, jedoch funktioniert das nicht.
    Das normale SA:MP hat auch die Funktion um poitionen zu erkenne und die geht aber ich kann meine ganzen Tore nicht ohne zu Streamen erstellen daher bitte ich um hilfe.
    hier der Ganze Code von BFX wo ist der Fehler oder warum geht es nicht?


    Funktion im Streamer Corde:
    public GetStreamerObjectPos(stream_id,&Float:x,&Float:y,&Float:z)
    {
    if(stream_id > MAX_STREAM || stream_id < 0)return 0;
    if(!bfxobject[stream_id][exist])return 0;
    new foundno = 0;
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    if(ERSTELLT[i][stream_id])
    {
    GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
    foundno = 1;
    break;
    }
    }
    if(!foundno)
    {
    x = bfxobject[stream_id][ox];
    y = bfxobject[stream_id][oy];
    z = bfxobject[stream_id][oz];
    }
    return 1;
    }


    Definition um die Core Funktion nutzen zu können in der Include:
    stock b_GetPlayerPos(id,&Float:x,&Float:y,&Float:z)return CallRemoteFunction("GetStreamerObjectPos","ifff",id,x,y,z);


    Funktion im Script die immer die Coord 0 raus gibt:
    new Float:x, Float:y, Float:z;
    b_GetPlayerPos(feuerwehrtor,x,y,z);
    printf("%f X",x);
    printf("%f Y",y);
    printf("%f Z",z);


    Kann mir dabei einer helfen?


    mfg Tomi


    //edit: seit 3 Tagen keine Antworte hat jemand kein Interesse mir zu helfen oder wisst ihr es wirklich nicht?
    sry das ich so pushe aber was bleibt mir den anderes Übrig?



    Einmal editiert, zuletzt von Tomi93 ()

  • Ja schwer zu sagen :S
    Wie wäre es wenn du folgendes machst:


    public GetStreamerObjectPos(stream_id, &Float:x, &Float:y, &Float:z)
    {
    // Die Debug Meldungen dürfen NICHT wahr sein, wenn ja, dann ist das das Problem!
    new debugStr[128];
    format(debugStr, sizeof debugStr, "[ DEBUG ] stream_id (%d) > MAX_STREAM (%d) oder stream_id (%d) < 0", stream_id, MAX_STREAM, stream_id);
    printf(debugStr); // oder SendClientMessageToAll(COLOR_RED, debugStr);
    if(stream_id > MAX_STREAM || stream_id < 0)
    return 0;
    format(debugStr, sizeof debugStr, "[ DEBUG ] bfxobject[stream_id][exist] (%d) == 0", bfxobject[stream_id][exist]);
    printf(debugStr); // oder SendClientMessageToAll(COLOR_RED, debugStr);
    if(!bfxobject[stream_id][exist])
    return 0;
    new foundno = 0;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))
    continue;
    if(ERSTELLT[i][stream_id])
    {
    GetPlayerObjectPos(i, OBJ_ID[i][stream_id], x, y, z);
    foundno = 1;
    break;
    }
    }
    format(debugStr, sizeof debugStr, "[ DEBUG ] foundno (%d) == 1", foundno);
    printf(debugStr); // oder SendClientMessageToAll(COLOR_RED, debugStr);
    if(!foundno)
    {
    x = bfxobject[stream_id][ox];
    y = bfxobject[stream_id][oy];
    z = bfxobject[stream_id][oz];
    }
    return 1;
    }


    Wenn du das dann ingame hast (ich würde es mit SendClientMessageToAll machen) dann siehst du direkt woran es liegen könnte.
    Wenn eine Bedingung -> wahr <- ist, also stimmt.
    Dann ist das der Fehler!


    Wenn du nicht weißt was ich meine, für das o.g. Script einfach mal aus.
    Danach schickst du mir einen Screen von Ingame oder vom Server Log (je nachdem welche Methode).


    -> Das letzte Objekt mir dann schicken <-
    Weil der ja alle debuggt :O
    Hoffe das bringt was :wacko:

    Miete mich (nicht) :love:

  • Das habe ich schon probiert :D
    und schön wars nicht er hat sogar die Funktion "GetPlayerObjektPos" genutzt doch der Wert war 0.
    und versuch das zeug mal zu lesen wenn es sich nach 500 MS wieder aktualisiert :D
    bzw. jede 500 MS die ganzen Debug Meldungen kommen :D
    MEine log war so groß das ich die net mehr öffnen konnte

  • Ähm...
    ... kannste das vielleicht mit der ID machen?
    Das du die Debug Funktion per Command anschaltest.
    Mit dem Command bekommst du die Objekt ID.


    Dann würdest du nur das Objekt haben.


    Sonst...
    .... lass es doch genauer filter,


    if(stream_id > MAX_STREAM || stream_id < 0)
    return 0;
    mit
    if(stream_id > MAX_STREAM || stream_id < 0)
    return printf("[Debug] Objekt hat Fehler!");
    ersetzen
    vllt. noch formatieren o.ä.


    Sonst einfach mal MAX_STREAM erhöhen.



    eine der 3 MÖglichkeiten muss doch gehen :S

    Miete mich (nicht) :love:

  • Ich habe nun die "Objekt hat ein Fehler!" Meldung eingefügt und gesehen, es hat keinen Fehler hier der Ausschnitt mit dem obigen Debug



    [18:35:29] {00BFFF}[ DEBUG ] stream_id (705) > MAX_STREAM (16000) oder stream_id (705) < 0
    [18:35:29] {00BFFF}[ DEBUG ] bfxobject[stream_id][exist] (1) == 0
    [18:35:29] {00BFFF}[ DEBUG ] foundno (1) == 1

    Wert ist nach wie vor 0


    //edit:
    Ich steuere das doch mit einem CMD ich habe den ganzen Befehl nur nicht reinkopiert weils sinnlos ist^^
    die Funktion selber ist doch die wo mir ein Strich durch die Rechnung macht.



    Einmal editiert, zuletzt von Tomi93 ()

  • Ja aber da haben wir es doch!


    Alle Bedingungen müssen FALSCH sein.
    Also NICHT WAHR.


    Das bedeutet die ersten beiden sind nicht wahr.
    Die Dritte aber!


    Das bedeutet hier, wo die Position ausgegeben werden soll, hört er auf.
    if(!foundno)
    {
    x = bfxobject[stream_id][ox];
    y = bfxobject[stream_id][oy];
    z = bfxobject[stream_id][oz];
    }
    Das bedeutet es stimmt hiermit etwas nicht:
    new foundno = 0;
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    if(ERSTELLT[i][stream_id])
    {
    GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
    foundno = 1;
    break;
    }
    }



    Probiere mal bitte folgendes Script aus.
    public GetStreamerObjectPos(stream_id,&Float:x,&Float:y,&Float:z)
    {
    if(stream_id > MAX_STREAM || stream_id < 0)return 0;
    if(!bfxobject[stream_id][exist])return 0;
    new foundno = 0;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    if(ERSTELLT[i][stream_id])
    {
    GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
    foundno = 1;
    break;
    }
    }
    x = bfxobject[stream_id][ox];
    y = bfxobject[stream_id][oy];
    z = bfxobject[stream_id][oz];
    return 1;
    }

    Miete mich (nicht) :love:

  • Och menno.


    public GetStreamerObjectPos(stream_id,&Float:x,&Float:y,&Float:z)
    {
    if(stream_id > MAX_STREAM || stream_id < 0)return 0;
    if(!bfxobject[stream_id][exist])return 0;
    new foundno = 0;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    if(ERSTELLT[i][stream_id])
    {
    GetPlayerObjectPos(i,OBJ_ID[i][stream_id],x,y,z);
    foundno = 1;
    break;
    }
    }
    /*x = bfxobject[stream_id][ox];
    y = bfxobject[stream_id][oy];
    z = bfxobject[stream_id][oz];*/
    return 1;
    }


    Wenn das auch nicht geht empfehle ich dir auf den Streamer V4 umzusteigen:
    http://pastebin.com/mBqnTUgi

    Miete mich (nicht) :love:

  • Was glaubst du welchen ich bereits benutze?
    Ich habe den aktuellen V4.3
    wie auch der bei pastebin ist
    //edit:
    ich habe eine Debug Nachricht eingefügt eine ohne Variabeln nach "GetPlayerObjectPos" und diese print nachricht wird mir gezeigt doch, ich versteh
    nicht waurm er den Wert 0 Rausließt aus dem Objekt obwohl es eh erkennt wird von den vorherigen Abfragen.



    Einmal editiert, zuletzt von Tomi93 ()

  • der Public ist in einem FilterScript im Core Filterscript -> bfx_stream
    Der Public wird über eine Funktion in der Include CallRemoteFunction ausgefürt
    stock b_GetPlayerPos(id,&Float:x,&Float:y,&Float:z)return CallRemoteFunction("GetStreamerObjectPos","ifff",id,x,y,z);
    und die b_GetPlayerPos nutze ich im Objekt Filterscript


    Mein aktuelles Debug ergebnis
    [19:39:29] {00BFFF}[ DEBUG ] MOVE OBJ_ID (117) x = (897.309570) y = (1914.142089) z = (12.445266)//zum überprüfen ob die OBJ ID mit dem beim Get gleich ist und um zu wissen ob es korrekt die X Y Z animmit Funktion: b_MoveObject
    [19:39:29] {00BFFF}[ DEBUG ] stream_id (705) > MAX_STREAM (16000) oder stream_id (705) < 0 // siehe oben
    [19:39:29] {00BFFF}[ DEBUG ] bfxobject[stream_id][exist] (1) == 0// siehe oben
    [19:39:29] {00BFFF}[ DEBUG ] GET OBJ_ID (117) x = (12.445266) y = (12.445266) z = (12.445266)//Was die GetPlayerObjectPos wieder gibt
    [19:39:29] {00BFFF}[ DEBUG ] foundno (1) == 1 //siehe oben
    [19:39:29] 0.000000 X//was GetPlayerObjectPos an meine FS übergibt
    [19:39:29] 0.000000 Y//was GetPlayerObjectPos an meine FS übergibt
    [19:39:29] 0.000000 Z//was GetPlayerObjectPos an meine FS übergibt


    //edit:
    Hat sich erledigt ich habe mich entschlossen für diese Art von Objekten einfach den SA:MP Internen Streamer zu nutzen für den Rest nehme ich BFX



    Einmal editiert, zuletzt von Tomi93 ()