EditObject/CancelEdit Mausfehler?

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
  • [Moin,
    wenn ich EditObject/CancelObject verwende habe ich ab und zu einen Mausfehler, aber nur bei diesem Code. Woran liegt das?


    Fehler in Reinfolge:
    - Objekt wird erstellt + Edit Object
    - OnPlayerEditObject: Ist Objekt außerhalb der vorgegebenen Zone -> CancelEdit -> DestroyObject -> CreateObject an alter Position
    - Die Maus wird nun nicht mehr angezeigt wenn man den Chat öffnet oder Dialoge anzeigt
    - Beim editieren des Objektes ist die Maus nun weg, wenn ich sie bewege "portet" sich das Objekt an die Position wo es gelöscht wurde (außerhalb der Zone)
    - Wenn ich aber beim neuen editieren die Maustaste drücke bevor ich die Maus bewege ist sie wieder da und alles funktioniert wieder.


    Ergänzung:
    Selbst wenn man NUR CancelEdit verwendet ohne DestroyObject etc. und danach ein neues Objekt erstellt mit EditObject funktioniert es nicht. Also liegt es nicht am direktem löschen, wohl an der Funktion CancelEdit, doch gibt es eine Behebung dafür?


    Video:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Direktlink: http://youtu.be/iUJ2vJy5Yjw


    Code:
    new AnyObject = CreateObject(ModelID,X,Y,Z,0,0,A,300);
    EditObject(playerid,AnyObject);


    public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
    {
    new Float:afX,Float:afY;
    afX=1102.456420;
    afY=-1247.102905;


    if(!IsObjectInArea(fX,fY,afX-6.72,afY-5,afX+6.83,afY+5))
    {
    if(response != EDIT_RESPONSE_CANCEL)CancelEdit(playerid);
    SendClientMessage(playerid,-1,"Das Objekt wurde an die Erstellungsposition zurückversetzt.");
    AnyObject =CreateObject(...);
    }
    }
    Positionen etc. stimmen alle, die Funktionen funktionieren auch alle ordnungsgemäß.



    Vielen Dank im Vorraus!

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

    2 Mal editiert, zuletzt von TPO ()

  • Nach ergiebigem Testen haben wir nun den Fehler gefunden:
    Wenn man beim editieren das Objekt gerade bewegt und in dem Moment CancelEdit(..); verwendet wird kommt der Fehler, liegt an SA:MP.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Darf man erfahren wie Ihr das Problem gelöst habt, bzw. wie ihr es jetzt macht ?
    Würde evtl. den Leuten helfen die die selbe Frage bzw. das selbe Problem haben :')
    Pablo Borsellino:

  • Habe es bereits im englischem Forum gepostet: http://forum.sa-mp.com/showthread.php?t=492574


    Eine Lösung haben wir nicht gefunden, denn das Problem ist folgendes:
    Wenn man im EditObject-Modus ist, der Spieler die linke Maustaste gedrückt hält und gerade am verschieben eines Objektes ist und in dieser Zeit während die Maustaste gedrückt ist CancelEdit verwendet wird gibt es den Mausfehler. Leider kann man die Maustasten nicht abfragen während EditObject, somit ist dies nicht zu beheben.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Heißt, währen das Object bewegt wird, führt CancelEdit(objectid); zum "Fehler".
    Dann würde ich das Object erstmal stoppen - StopObject(objectid); -, das Object
    an die alte Position schieben und wieder EditObject(objectid); anwenden.
    So funktioniert's bei mir :)

  • Nein, nicht bewegt per MoveObject. Es geht um die EditObject Funktion, dort bringt StopObject nichts. Wenn ein User das Objekt editiert durch EditObject und die linke Maustaste gedrückt hält und das Objekt dabei bewegt, und in dem Moment CancelEdit verwendet wird gibt es den Fehler.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Wozu machst du denn CancelEdit? Damit es nicht außerhalb der Zone sein kann?
    Mach die Abfrage ob das Objekt in der Zone ist doch erst wenn du auf speichern klickst?
    Während du das Objekt editierst sehen die anderen Spieler es ja eh an der Startposition.

  • Wie wäre es mit OnObjectMoved ?
    Ich weiß nicht ob die's beim editieren auch aufgerufen wird, aber wäre es denn damit möglich ?


    Andernfalls, wie wäre es, dem Spieler ein Dialog anzuzeigen, wärend der Aktion CancelEdit(objectid); anwenden ?


    //Nachtrag
    Der Mauszeiger wird ja auf den Dialog "fixiert" bzw. wird auf den Dialog drauf ausgerichtet.
    Somit stoppt man die "Bewegung" und kann dann ja CancelEdit(objectid); anwenden.

  • Wozu machst du denn CancelEdit? Damit es nicht außerhalb der Zone sein kann?
    Mach die Abfrage ob das Objekt in der Zone ist doch erst wenn du auf speichern klickst?
    Während du das Objekt editierst sehen die anderen Spieler es ja eh an der Startposition.


    Nein, ich habe gemacht das die Editierung global ist also das es jeder Spieler sehen kann. Und ja, das Objekt soll nicht aus der vorgegebenen Zone rauskommen dürfen. :)


    @Killuminati: Wird nicht aufgerufen aber die Idee mit dem Dialog muss ich mal ausprobieren, darauf kam ich noch nicht.


    Trotzdem ist es ein SA:MP Fehler, also hoffe ich das der allgemein behoben wird. :)


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Dann brauchst du ja trotzdem nicht CancelEdit ausführen du kannst das Objekt einfach an die letzte Position setzen wo es noch in der Zone war.


    Theoretisch vollkommen richtig, praktisch falsch. Der Spieler sieht das zurücksetzen der Position kaum, da er dieses noch bewegt und dann flackert es nur einmal kurz.


    Das mit dem Dialog hilft zwar nun ein wenig, aber es löst die Maus nun nicht. Bis der Spieler loslässt kann er das Objekt noch bewegen, aber werde es trotzdem verwenden und beim klicken auf den Dialog erst CancelObject sowie SetObjectPos an die Objekt Position innerhalb der Zone verwenden. Danke. :)


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.