InRangeOfObject ?

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
  • @ Adnan dein stock erfüllt ganz und gar nicht die Funktion wie der Name lautet ^^ Schaus dir mal genauer an..


    B2T:


    Bitte schreib kurz wie du deine Tore Definiert hast, also was neben den Toren die mit CreateObject erstellt wurden sind daneben steht, bzw poste einfach alle CreateObject Zeilen wo du die Tore erstellst :P

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Ich habe Sie noch nicht als Tore definiert, da ich dachte, dass man das komplett über das Objekt-Model lösen könnte.
    Ich schreibe mal so, wie ich denke, und tötet mich nicht für die schlechte Umsetzung meines Gedankenbildes

    if (strcmp("/navi", cmdtext, true) == 0)
    {Die Distanz zu jeden Object prüfen und ein object, welches dichter als 30m an Spieler ist für 6 Sekunden um -2 in der z-Achse verschieben
    }
    naja, auf jeden Fall sind hier meine Objects(Schranken)

    CreateGameObject(1251, 1717.7799072266, 425.37832641602, 30.900001525879, 0, 0, 254);
    CreateGameObject(1251, 1700.2893066406, 431.04467773438, 30.900001525879, 0, 0, 253.99841308594);
    CreateGameObject(1251, 1691.5078125, 433.46618652344, 30.900001525879, 0, 0, 253.99841308594);
    CreateGameObject(1251, 523.55151367188, 474.46044921875, 18.734373092651, 0, 0, 304);
    CreateGameObject(1251, 517.67254638672, 470.43374633789, 18.900037765503, 0, 0, 305.99719238281);
    CreateGameObject(1251, -2677.1489257813, 1273.1268310547, 55.354370117188, 0, 0, 270);
    CreateGameObject(1251, -2667.7670898438, 1272.8217773438, 55.354370117188, 0, 0, 268);
    CreateGameObject(1251, -2686.1279296875, 1274.1986083984, 55.354370117188, 0, 0, 270);
    CreateGameObject(1251, -2694.7290039063, 1274.1037597656, 55.354370117188, 0, 0, 270);
    CreateGameObject(1251, -1116.1136474609, 1105.8375244141, 37.554386138916, 0, 0, 48);
    CreateGameObject(1251, -1122.5678710938, 1111.7468261719, 37.554386138916, 0, 0, 47.999267578125);
    CreateGameObject(1251, -1129.4816894531, 1118.0368652344, 37.554386138916, 0, 0, 49.999267578125);
    CreateGameObject(1251, -1135.8697509766, 1124.1706542969, 37.554386138916, 0, 0, 49.998779296875);
    CreateGameObject(1251, 51.13814163208, -1535.9937744141, 4.9114837646484, 0, 0, 352);
    CreateGameObject(1251, 52.875202178955, -1527.1124267578, 4.7114839553833, 0, 0, 351.99645996094);

  • Ich glaub so sollte es funktionieren.
    Kann fehler enthalten!
    Ungetestet!


    forward verschieben(playerid);


    if(strcmp................
    {
    for(new objectid,Float:x,Float:y,Float:z;objectid<254;objectid++)
    {
    GetObjectPos(objectid,x,y,z);
    if(IsPlayerInRangeOfPoint(playerid,30.0,x,y,z))
    {
    SetTimerEx("verschieben",6000,false,"d",objectid);
    SetObjectPos(objectid,x,y,z-2);
    }
    }
    return 1;
    }


    public verschieben(objectid)
    {
    SetObjectPos(objectid,x,y,z+2);
    return 1;
    }

  • Der obige code versetzt alle Objekte die in einem radius von 30.0 vom spieler entfernt sind um -2 in der Z Koordinate.


    Du kannst es auch nur für ein Objekt machen indem du eine ifAbfrage machst.

  • So hab meinen Befehl nun überschrieben ^^


    stock GetClosestObject(playerid, &objectid) //by Templer
    {
    new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, object = 0, Float:cdist = 0.000000;
    objectid = -1;
    for(; object < MAX_OBJECTS; object++)
    {
    if(!IsValidObject(object)) continue;
    GetObjectPos(object, X, Y, Z);
    dist = floatsqroot(floatpower(floatabs(floatsub(X,pX)),2)+floatpower(floatabs(floatsub(Y,pY)),2)+floatpower(floatabs(floatsub(Z,pZ)),2));
    if(dist > cdist)
    {
    cdist = dist;
    objectid = object;
    }
    }
    if(cdist > 0.000000) return cdist;
    else return false;
    }


    Und hier ein Beispiel für die Verwendung:


    new object; //Erstellt eine neue Integer-Datentyp mit dem Namen 'object'
    GetClosestObject(playerid, object); //Speichert den naheliegendste ObjectID in die Variable 'object'
    if(object == -1) return print("Ungültige Objekt ID!"); //Gibt Meldung aus, wenn 'object' die WertID -1 hat (Für Ungültig)
    SetObjectPos(object, 345.0, 345.0, 345.0); //Ausgedachter Name

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • stock IfDistanceToObject(playerid, objectid, Float:Distance)
    {
    new Float:X,Float:Y,Float:z;
    GetObjectPos(objectid,X,Y,Z);
    if(IsPlayerInRangeOfPoint(playerid, Distance,X,Y,Z)
    {
    if(objectid == 1251/*objektID*/)//was soll das für eine abfrage sein? Objectid ist falsch, da objectid das selbe is wie carid und somit nur sagt das wie viele object die ist! SetObjectPos ist richtig aber das andere mit der if abfrage sit nur lachhaft
    {
    SetObjectPos(objectid,X,Y,Z-2);
    }
    }
    return 1;
    }