Die wird doch direkt in die Funktion mit übergeben.
Also window_type und slotindex sind zsm TITemPos
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Die wird doch direkt in die Funktion mit übergeben.
Also window_type und slotindex sind zsm TITemPos
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Ich würde dir empfehlen für sowas Official Clip Masking [Reversed] von blackdragon zu nutzen.
Nutze es mittlerweile auch in allen meinen Systemen und es ist super praktisch und übersichtlich.
Du musst auf das Element das clippen soll einfach nur das Targetwindow setzen. Ist immer nur 1 Zeile in Python und clipped auch direkt alle Childs des Elements mit.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
To understand that piece of code you can read:
Bitte melden Sie sich an, um diesen Link zu sehen.
To get the opposite of what you are getting now you just write if not item.IsAntiFlag(flag)
da finde ich auch nach dieser langen zeit das Auktionshaus/handelcenter von Ente ansprechender als so ne billow lua/quest
ach du, irgendwo muss man ja anfangen, bevor man direkt an der source arbeitet und systeme entwickelt. kann man erst mit quests alles umsetzen ^^, wenn die basis gelegt ist, kommen dann weitere systeme die erweitert und mit gui sind
Es ist ja nichts falsch daran mit dem Questen zu beginnen und Spaß zu haben, aber dein Questen führt halt Sourcecode aus wofür ich zitiere "die Basis nicht gelegt ist". Ergo deine ganzen Behauptungen zum System sind hinfällig weil du gar nicht weißt was überhaupt im Detail ausgeführt wird, was ja erstmal nicht schlimm ist weil es ein Lernprozess ist, aber das hier ist halt ein Verkaufsthread.
Das ist als würdest du Fahrrad mit Stützrädern fahren und dann einen Radkurs für Rennsport Fahrer anbieten, wo deine Kunden dann offensichtlich mit High Speed gegen nen Baum fahren weil sie dachten sie können jetzt bedenkenlos loslegen.
Kein Ding, was genau meinst du mit "über Packets machen" ?
Eine EventFunc ist ja kein Networking. Du kannst Packets daraus an deinen Char senden um z.b. dann die UI clientside zu aktualisieren, aber die EventFunc brauchst du ja trotzdem weil du Code in bestimmten Zeitintervallen ausführen willst.
Ich würde ein eigenes Event für Playtime auf den PC Charactern erstellen, das in deinem gewünschten Zeitintervall die Playtime updated und auch deinen Rewardcode ausführt, wenn es dir wirklich so wichtig ist, dass es schneller geupdated und auf Reward gecheckt wird.
Performancemäßig ist es natürlich ein Mehraufwand für jeden Char, aber ich sag mal so es gibt z.b. auch das Speedhack Check Event, das auf jedem Char liegt und jede Minute auf Speedhack checkt.
Du könntest das Event sogar für deine Zwecke "missbrauchen" und dort auch deine Playtime und Rewards updaten, wenn du kein neues Event erstellen wolltest und mit den 60 Sekunden zufrieden wärst.
Ansonsten machst du dir ein ordentliches eigenes Event für Playtime und Rewards und kannst dich dabei auch am Speedhack Event orientieren, weil es sich eigentlich 1zu1 so verhält wie du es brauchst, nur das es auf Speedhack checkt anstatt die Playtime und Rewards zu updaten.
Du suchst am besten nach
Dann solltest du gut überschauen können wie es funktioniert und dein eigenes Event daraus ableiten und schreiben können.
Lad am besten noch deine chr also PythonCharacterModule.cpp hoch, vielleicht ist dort etwas falsch bei den Module Funktionen oder Konstanten, weil das ist das erste was er in introselect tut, also sich die zu holen. (Ist dort auch doppelt importiert kannst einen löschen)
Also es sind keine Spieler mehr im Dungeon, das dead event wird created und nach 10 Sekunden ausgeführt und daraufhin die Private Map destroyed. Das sieht ja gut aus.
Was mich aber stutzig macht ist der FPurgeStones Operator der daoben ausgeführt wird. Das ergibt keinen Sinn warum der ausgeführt werden soll, weil sowieso alle Entities auch Stones zu diesem Zeitpunkt gerade ordentlich destroyed wurden.
Ich würde sagen FPurgeStones ist für den Crash verantworlich, weil es wahrscheinlich versucht einen Stone zu purgen und dann zu destroyen der bereits destroyed wurde.
Also der character den PurgeStones destroyen will ist dann ein Dangling Pointer und deshalb crasht er im char Destruktor als er ein event von dem char clearen wollte und deshalb passiert der crash auch so sporadisch.
Am besten guckst du mal ganz genau was in den Zeilen passiert und warum und wann FPurgeStones aufgerufen wird ich kann das nicht vergleichen weil ich das alles anders geschrieben habe, aber ich glaube nicht das die Funktion bei dir dort ausgeführt werden sollte.
Also bei mir destroye ich die Private Map (was alle Entities und Items destroyed), dann den Dungeon (was alle Dungeon internen events und regens cleared) und dann ist Schluss.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Wow the graphics look great!
Plechito event content for private servers is always being made with more dedication to the game experience than countless private servers as a whole
Gerne, ja das hatte den Grund, dass die InstanceBase Funktion ja sowieso schon eine Instanz von Python Background aufgerufen hat, da hat es sich angeboten den funktionalen Teil auch dorthin zu verfrachten, damit TestActorCollision sie auch verwenden kann, und eventuelle zukünftige Szenarios auch.
Denn jetzt kannst du auf SafeZone checken wenn du nur die ActorInstance hast:
Aber auch nach wie vor wenn du nur die InstanceBase instance hast:
ohne doppelten funktionalen Code zu haben.
Außerdem musst du dich nicht jetzt und zukünftig um jeden TestActorCollision Aufruf und dessen Funktionsparameter kümmern, wie es bei den anderen Varianten der Fall gewesen wäre. Die Änderung war einmalig und bringt dir für die Zukunft mehr Handlungsspielraum.
Kein Problem, ich zeig dir mal als Beispiel wie ich es in dem Fall machen würde.
Ich würde die Funktion IsInSafe aus InstanceBase nach PythonBackground verlagern.
So hast du den Code auch nicht mehr doppelt.
Also deine InstanceBase Funktion IsInSafe wird jetzt zu:
In PythonBackground.h fügst du hinzu:
In PythonBackground.cpp fügst du hinzu:
Und in TestActorCollision() fügst du hinzu:
So hast du den funktionalen Teil des Codes an einer Stelle und kannst von überall drauf zugreifen sofern du die ActorInstance hast.
Bitte melden Sie sich an, um diesen Link zu sehen.
Du musst schon sagen welche InstanceBase du willst. Es gibt ja nicht nur eine, jede Entity hat eine.
In deinem Fall willst du die InstanceBase von der ActorInstance (victim) die du in TestActorCollision übergibst.
Da du bei jedem Aufruf von TestActorCollision auch den InstanceBase Pointer hast könntest du den mit in TestActorCollision übergeben und dann dort über den Pointer checken.
Du könntest auch bei jedem Aufruf von TestActorCollision in InstanceBaseBattle direkt dort über den InstanceBase Pointer auf Safezone checken. (außerhalb von TestActorCollision )
Du könntest sogar die Funktion IsInSafe fast komplett aus InstanceBase kopieren und in CActorInstance einfügen und ihr die ActorInstance vom victim aus TestActorCollision übergeben und die als m_GraphicThingInstance nehmen.
Und noch viel mehr, hoffe das verdeutlicht das Prinzip.
Very cool idea especially directly with the CRCs, it makes everything look so much better, makes me want to move from Shinsoo to Chunjo and get old there
Bitte melden Sie sich an, um diesen Anhang zu sehen.
For me I used a vector of lantern CRCs to also support some of my custom lanterns, maybe thats also something for your version to consider for GetLanternCRC()
Bitte melden Sie sich an, um diesen Anhang zu sehen.
If you are using your code to give instructions to another entity you could also pass its current coords and then std::sort() the vector of the found npcs (if there were multiple) by distance to that entity.
So you could easily pick the closest .front() npc of them for your entity if needed.
There is a source function "DISTANCE_APPROX", which you can use for this sorting.
Alles anzeigenAlles anzeigenIch glaub er suchte nach diesen hier. Hab ich irgendwo aus einem anderen Forum her. Musst sie dir übersetzen. Aber sind vollständig.
Sind paar Schicke dabei. Viel Spaß damit.
Bitte melden Sie sich an, um diesen Link zu sehen.
Bitte melden Sie sich an, um diesen Link zu sehen.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Lg Shirodie keule is sooo legende
Und mit ciftel1.tga hat man meistens immer auf irgend so ner komplett random überfüllten farmmap gefarmt weil das teil irgendwie x tausend mob hatte und tekel32.tga hatte immer so komplett op viel halbis und man hat alles geonehitted pvp
Du hast die Zeile warum auch immer 2mal, die erste wird zu früh aufgerufen, da gibt es self.wndInventory noch gar nicht, deshalb der Fehler, die 2te wird richtig aufgerufen. Du kannst die erste also löschen.Bitte melden Sie sich an, um diesen Anhang zu sehen.
Alles anzeigenWo sind das gute Argumente? Wenn man nicht mal liest was ich schreibe. Es kann an keinem Windows liegen was crasht. Es haben ja nicht alle.
Du. Löschst. Ohne. Nachzudenken.
Wenn ich das richtig verstanden habe, werden in m_ReserveDeleteWindowList alle destroyed Window -Instanzen eingefügt, welche beim nächsten Window Update zerstört werden. del löscht die Objekte auf die der Pointer zeigt, .clear() dann die Pointer selbst. Bei dir werden aber nur die Pointer gelöscht und die Objekte bleiben bestehen, was zu einem Memory Leak führt. Das ist also so oder so erstmal ein sehr unüberlegter "Fix".
Der Client crasht wahrscheinlich, weil er mit del versucht einen ungültigen Pointer zu löschen. Vielleicht sind auch mehrere gleiche Pointer in dem Vektor. Raupy meinte wahrscheinlich, dass du nach den Windows oder den Code suchen sollst, der diesen ungültigen Pointer erzeugt, statt einfach gar keinen (auch gültige Pointer) zu löschen.
Ich glaube, so dürfte das richtig sein:
Alles anzeigenCodeHier überprüfe ich, ob der Pointer ein gültiger Pointer ist, bevor ich ihn lösche. Wenn dein Problem durch diesen Code kam, ist es wahrscheinlich hiermit gefixt. Ich bin aber kein C++ Experte, vielleicht sollte da jemand das Ok geben.
Das erklärt aber trotzdem nicht, warum du ungültige Pointer in deinem Vektor hast.
Ungültiger Pointer trifft es gut, ich denke das irgendein window im vektor ein dangling pointer ist der auf junk zeigt, und wenn delete den Destruktor von diesem window aufrufen will er dann crasht. Dein Code wird das aber nicht erkennen, er weiß ja nicht ob der pointer auf junk zeigt, für ihn ist so alles was im vektor steht ein window pointer der destroyed werden muss.
In der Situation hilft dann nur debugen, sonst ist es die Nadel im Heuhaufen (milde gesagt). Solche Pointer sind mit die aufwendigsten Fehler die man haben kann.
Übrigens für einen nullptr check mit anschließendem nullptr setzen bei delete gibt es is der source auch ein Macro das man nutzen kann, dann entstehen schonmal keine neuen dangling pointer, weil man das nullptr setzen vielleicht mal vergisst.
Bitte melden Sie sich an, um diesen Anhang zu sehen.
Aber vor dangling pointern die schon entstanden sind schützt das natürlich nicht, da muss man dann debugen, da kommt man nicht drum rum.
wieso fühlst du dich so angegriffen, als hätte jemand deine Eltern ermordet? Raupy hat gute Argumente geliefert wieso man es nicht machen soll und du bist direkt beleidigt wie ein kleines Mädchen.
Wo sind das gute Argumente? Wenn man nicht mal liest was ich schreibe. Es kann an keinem Windows liegen was crasht. Es haben ja nicht alle.
Dir ist anscheinend nicht mehr zu helfen, wenn man diesen AntiFix einbaut dann hat man größere Probleme als vorher, jeder der das einbaut fickt sich die Source. Darum geht es mir, dass du sowas einfach als Fix verbreitest. Das ist einfach nur Sabotage an jeden der es nicht besser weiß.
Wtf der comment killt auch alles "The above code not need, cause is cleaning it anyway from the vector i think."
Das cleared nur den Vektor aber freed nicht den memory den du allokiert hast.
Dafür hat man ja dort den Vektor, damit du weißt was du freen musst und Zugang dazu hast.
Das kannst du nur machen wenn du z.b. unique_ptr oder andere smart pointer nutzt die sich selbst darum kümmern. Dann hätte man es so machen können aber so ist das Memory Leak des Grauens und wer weiß was sonst noch so passiert, wird auf jeden Fall nicht langweilig werden
Bitte melden Sie sich an, um dieses Medienelement zu sehen.
Ich würd mal lieber schauen welche windows dort crashen, und mich um die kümmern.
Wer die delete Zeile löscht ist auch komplett durch "Have Fun"