Typeinträge fehlen in Functions [gelöst]
Übersicht

![]() |
NightPhoenixBetreff: Typeinträge fehlen in Functions [gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also entweder ich seh den Wald vor lauter Bäumen nicht, oder irgendwas stimmt da im Speicher nicht.
Also ich habe eine Typliste mit dem Namen "NPC" bzw "pp.NPC" Dieser Liste sind neben den Spielern auch alle Planeten & Basen zugeordnet, also dind nach dem Laden des Spiels auch schon 20 Einträge drin. Geht man jetzt alle diese Einträge über eine Function durch so findet er noch alle. Aber nachdem ich einen neuen Spieler erstellt habe (weil sich einer einloggt) muss ein neuer Eintrag erstellt werden. Doch sobald ich diesen gerade erstellten Eintrag über die vorher noch erfolgreiche Funktion suche, so findet er ihn nicht! Verfolgt man das Durchblättern der Typeliste in Debugger so sieht man, dass der neue Eintrag garnicht existiert, denn sobald er auf ihn blättert zeigt er "Null" an. Wenn ich den Inhalt der Function "PPid2GAME(ID)" zum suchen des Types in die Hauptschleife kopiere, anstatt ihn über den Funktionsnamen aufzurufen, dann funktioniert es. Der Type ist Global, also sollte er doch in der Function vollkommen verfügbar sein? Hier der Code: Code: [AUSKLAPPEN] pp.NPC = New NPC
pp\Pilotname$=tcpinh2$ pp\Taufe$=NextTCPKomma$() pp\PosX#=NextTCPKomma$() pp\PosY#=NextTCPKomma$() pp\PosZ#=NextTCPKomma$() pp\active=NextTCPKomma$() pp\TypID=NextTCPKomma$() pp\Mark=NextTCPKomma$() pp\ColR=NextTCPKomma$() pp\ColG=NextTCPKomma$() pp\ColB=NextTCPKomma$() pp\Rep=NextTCPKomma$() pp\HP#=NextTCPKomma$() pp\SP#=NextTCPKomma$() pp\ID=2 pp\Gamer=1 CreatePlayer(BerMoveX#+EntityX(SIPI),BerMoveY#+EntityY(SIPI),BerMoveZ#+EntityZ(SIPI)) PPid2GAME(pp\ID) Function PPid2GAME (ID) If ID<>0 Then pp.NPC = First NPC While pp\ID<>ID pp = After pp Wend EndIf End Function Ich habe neben dem Client wo dieser Code drin steht auch den Server über blitzcc.exe laufen, sozusagen beide Programme mit debugger über Blitz. Kann es vielleicht daran liegen? Verheddern sich die Programme im Speicher? |
||
- Zuletzt bearbeitet von NightPhoenix am Di, Jan 05, 2010 16:55, insgesamt einmal bearbeitet
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
liegt es vielleicht daran weil du in der Funktion die pp\ID und pp\Gamer zuweist? Sollte da nicht auch eine Variable übergeben werden?
lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der Funktion wird nichts der beiden verändert. (Der Code der Function steht übrigens untem im Code dabie ![]() Die variable pp\ID wird übergeben, aber selbst wenn nicht könnte ich sie erst dann dort lokal speichern um es zu vergleichen, da die Types global sind, folglich sind sie auch überall verfügbar, nur irgendwie nicht in der Function. Alle neuen Einträge fehlen dort, in der Hauptschleife hingegen existieren sie. Die alten Einträge gibt es überall. |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja das ist mir eh klar aber pp\ID hat immer den Wert 2. Der kommt da ja gar nicht drüber. pp\ID kann niemals 3 oder höher werden auch nicht mit deinem Code unterhalb!
Sollte ich mich irren, dann tut es mir leid. Aber wenn ich in einer Funktion einen Wert FIX zuweise, dann ist der Wert immer der FIX ZUGEWIESENE!! Kannst ein wenig mehr Code reinstellen? lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du das Problem in einem kurzen Testcode isolieren? Wenn du nicht noch zwischen drin was anderes mit pp.NPC anstellst, ist es sehr sonderbar.
Hilft es was, wenn du die Funktion direkt die Instanz zurückgeben lässt? |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im geposteten Code sehe ich nun keinen Fehler. In einem Testprogramm funktioniert das auch problemlos Code: [AUSKLAPPEN] Type TTest
Field ID Field Value# End Type Global Test.TTest For I = 0 To 10 Test = New TTest Test\ID = I Test\Value# = Rnd( 0, 10 ) Next Test = New TTest Test\ID = 20 Test\Value# = Pi FindTestByID( Test\ID ) Print Test\Value# WaitKey End Function FindTestByID( ID ) Test = First TTest While Test\ID <> ID Test = After Test Wend End Function Schwer zu sagen, was hier schiefläuft. Nur am geposteten Code liegt es aber vermutlich nicht. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich suche fieberhaft nach dem Problem, weil es ja irgendwas sein muss was ich in den letzten 1,2 Tagen integriert habe. Vorher funktionierten all diese Funktionen und es wurde auch jeder Typeeintrag gefunden. ![]() |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Viel. hilft es wenn du alles was du seit dem letzten einwandfreien Start deines Programmes integriert hast, mal abschaltest und dann nochmals Schritt für Schritt dazuschaltest?
lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hört sich ziemlich seltsam an...
Ich würde an deiner Stelle mal eine Liste aller Type-Einträge erstellen lassen. (Debuglog, Textdatei etc.) Denn wenn der gesuchte Eintrag wirklich existiert, dann würde er auch gefunden werden. (dein gezeigter Code ist ja korrekt) Schreibe dir am Besten eine Debug-Funktion, die das macht, und platziere sie an geeignete Stellen... mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich vermute ich hab mir Blitz zerschossen, da es auf meinem Laptop funktioniert.
Die UDP Daten kommen zwar (obwohl es LAN ist) mit ca. 3-4 Sekunden Verspätung an, aber es funktioniert auf einem Computer. Bevor ich es mit einer Neuinstallation versuche schreib ich mal einen Debuglog für die Typliste innerhalb der Function und außerhalb. Ich melde mich gleich mit den Daten. *edit* Ich verzweifel gleich... der Debug aus Funktion und Mainloop ergab selbes Ergebnis: alle Daten vorhanden?! ich installiere Blitz mal neu |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich konnte noch etwas komisches beobachten:
Code: [AUSKLAPPEN] ;empfangen UDP
UDP_input=RecvUDPMsg(UDP_write) If UDP_input <> 0 Then While ReadAvail(UDP_write) > 0 inhalt$=ReadString(UDP_write) vor=pp\O If Instr(inhalt$,"!/spd1~") > 0 Then inh2$=Mid$(inhalt$,8,Instr(inhalt$,";")-1) Stop inhalt$=Mid$(inhalt$,Instr(inhalt$,";")+1,-1) If PPidExist(Int(inh2$))=1 Then PPid2GAME(Int(inh2$)) pp\PosX#=NextUDPKomma$() pp\PosY#=NextUDPKomma$() pp\PosZ#=NextUDPKomma$() pp\RotX#=NextUDPKomma$() pp\RotY#=NextUDPKomma$() pp\RotZ#=NextUDPKomma$() pp\SystemID=pl\SystemID EndIf EndIf If Instr(inhalt$,"!/spd2~") > 0 Then inh2$=Mid$(inhalt$,8,Instr(inhalt$,";")-1) inhalt$=Mid$(inhalt$,Instr(inhalt$,";")+1,-1) If PPidExist(Int(inh2$))=1 Then PPid2GAME(Int(inh2$)) pp\TurX#=NextUDPKomma$() pp\TurY#=NextUDPKomma$() pp\TurZ#=NextUDPKomma$() pp\MovX#=NextUDPKomma$() pp\MovY#=NextUDPKomma$() pp\MovZ#=NextUDPKomma$() pp\SystemID=pl\SystemID EndIf EndIf If Instr(inhalt$,"!/spd3~") > 0 Then inh2$=Mid$(inhalt$,8,Instr(inhalt$,";")-1) inhalt$=Mid$(inhalt$,Instr(inhalt$,";")+1,-1) If PPidExist(Int(inh2$))=1 Then PPid2GAME(Int(inh2$)) pp\fire=NextUDPKomma$() pp\zielID=NextUDPKomma$() ;User ID zu pp\o ID umwandeln If PPidExist(pp\zielID)=1 Then vor=pp\ID pp\zielID=pp\O PPid2GAME(vor) Else If EntityExist(pp\zielID)=0 Then pp\fire=0 EndIf EndIf pp\SystemID=pl\SystemID EndIf EndIf PP2GAME(vor) Wend EndIf betreffende Zeile: Code: [AUSKLAPPEN] If Instr(inhalt$,"!/spd1~") > 0 Then
inh2$=Mid$(inhalt$,8,Instr(inhalt$,";")-1) Stop Inhalt ist inhalt$="!/spd1~2;0.0;0.0;0.0;0.0;0.0;0.0 Aus inh2$ ergibt sich aber inh2$="2;0.0;0. Das ist auch sehr seltsam, da Instr immer nach dem ersten Zeichen in dem Fall ";" sucht, dort findet er aber das 3. als erstes? Ich glaube einfach irgendwie, dass die Server.exe auf dem Computer hier mit dem Client Speicherkonflikte hat. Auf dem alten Laptop funktioniert es nämlich einwandfrei. Er empfängt dort die Daten und findet auch die Typeinträge. Setup: Server.exe läuft auf diesem Computer, sowie eine Client.exe Eine zweite Client.exe läuft auf meinem Laptop über LAN. Auf meinem Computer gibt es diese seltsamen Probleme, auf dem Laptop hingegen nicht. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
NightPhönix... Ich hab dasselbe Problem... und kann es mir noch weniger erklären als du... Speicherkonflikte könnens nicht sein, weil ich hab lediglich diesen Code ausgeführt:
Code: [AUSKLAPPEN] inhalt$="!/spd1~2;0.0;0.0;0.0;0.0;0.0;0.0
If Instr(inhalt$,"!/spd1~") > 0 Then inh2$=Mid$(inhalt$,8,Instr(inhalt$,";")-1) EndIf DebugLog inhalt$ DebugLog inh2$ WaitKey() End und bekomme für inh2 2;0.0;0. ![]() mit verwirrten Grüßen, Christoph. EDIT: Hey wir sind beide so blind ![]() Mid ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das sollte ja auch so heissen Code: [AUSKLAPPEN] inh2$=Mid$(inhalt$,8,Instr(inhalt$,";")-8)
Mal davon abgesehen rate ich dir wirklich, WriteInt ![]() ![]() ![]() Die Befehle haben durchaus einen Zweck und sollten dementsprechend auch genutzt werden. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok ^^ Ja stimmt Mid$ funktioniert ja bisschen anders ![]() Wenn es auch mit WriteFloat geht klingt das super ![]() Trotzdem findet er den entspreche4nden Typeintrag in der Funktion nicht und das ist immernoch seltsam, da er die ID zur Funktion, nach der gesucht werden soll, sauber übergibt. Welche möglichen Erklärungen gibt es denn dafür, dass ein Rechner beim selben Code keine Probleme hat und ein anderer da total spinnt? *edit 05.01.2010* Problem konnte durch eine komplette Formatierung der Festplatten gelöst werden. Es war offensichtlich doch ein sehr verwinkeltes Softwareproblem. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group