Problem mit Direct Play - unknown hat die Sitzung verlassen
Übersicht

![]() |
NoobyBetreff: Problem mit Direct Play - unknown hat die Sitzung verlassen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moinmoin,
ich habe zu Übungszwecken angefangen ein Chatprogramm über per Direct Play zu programmieren. Es klappt auch ganz gut, bis auf ein ärgerliches, wichtiges Detail: Wenn ein Spieler die Session verlässt, wird nicht angezeigt, welcher es ist. Es steht lediglich da, dass "unknown" die Sitzung verlassen hat. ![]() Ich habe hier den Code für mein Programm: Code: [AUSKLAPPEN] Global hauptfenster = CreateWindow("Chatmaster",50,50,700,600,0,33)
DisableGadget hauptfenster Global senden_button = CreateButton("Senden",3,567,70,30,hauptfenster) Global ende_button = CreateButton("Ende",78,567,70,30,hauptfenster) Global chat_label = CreateLabel("",3,25,500,500,hauptfenster,3) Global senden_textfield = CreateTextField(50,530,400,20,hauptfenster) Global eingabefenster = CreateWindow("Name",50,50,175,65,hauptfenster,33) Global eingabe_textfield = CreateTextField(5,5,165,20,eingabefenster) ActivateGadget eingabe_textfield Global ok_button = CreateButton("OK",5,30,80,30,eingabefenster,65536) Global abbrechen_button = CreateButton("Ende",90,30,80,30,eingabefenster) timer = CreateTimer(10) PauseTimer timer Global name$ Global chat$ Global texteingabe Global identity Global spielercheck Type spieler Field nummer Field name End Type Repeat Delay 10 event=WaitEvent() Select event Case $101 Goto escape Case $803 StopNetGame End Case $401 Select EventSource() Case senden_button If TextFieldText(senden_textfield) <> "" senden SetGadgetText(senden_textfield,"") SetGadgetText(chat_label,chat$) EndIf Case ende_button StopNetGame End Case abbrechen_button .escape If GadgetText(abbrechen_button)="Ende" End Else EndIf Case ok_button If TextFieldText(eingabe_textfield) <> "" Then Goto ok Case eingabe_textfield If EventData() = 13 And TextFieldText(eingabe_textfield) <> "" .ok name = TextFieldText(eingabe_textfield) HideGadget eingabefenster EnableGadget hauptfenster ActivateWindow hauptfenster ActivateGadget senden_textfield check = StartNetGame() If Not check Then End identity = CreateNetPlayer (name$) ResumeTimer timer EndIf Case senden_textfield If EventData() = 13 And TextFieldText(senden_textfield) <> "" senden SetGadgetText(senden_textfield,"") SetGadgetText(chat_label,chat$) EndIf End Select Case $4001 If RecvNetMsg() abfrage SetGadgetText(chat_label,chat$) Else spielercheck=1 EndIf Case $804 ActivateGadget senden_textfield End Select Forever ;************************************************************************ Function abfrage() typ=NetMsgType() absendernr=NetMsgFrom() absender$=NetPlayerName(absendernr) neuenachricht$=NetMsgData() If typ > 99 Select typ Case 100 If spielercheck Then neuenachricht$ = absender$ + " ist der Sitzung beigetreten." neu.spieler = New spieler neu\nummer=absendernr neu\name=absender$ Case 101 neuenachricht$ = absender$ + " hat die Sitzung verlassen." Case 102 neuenachricht$ = "Damit sind sie nun der Host." ; Case 200 ; Cls ; Text 0,0,"Ein Fehler ist aufgetreten und die Sitzung musste beendet werden." ; Flip ; WaitKey ; Goto Ende End Select Else neuenachricht$ = "<" + absender$ + "> " + neuenachricht$ EndIf If chat$ = "" chat$ = neuenachricht$ Else chat$ = chat$ + Chr(13) + neuenachricht$ EndIf End Function ;************************************************************************ Function senden() SendNetMsg(1,TextFieldText(senden_textfield),identity) neuenachricht$ = "<" + name$ + "> " + TextFieldText(senden_textfield) If chat$ = "" chat$ = neuenachricht$ Else chat$ = chat$ + Chr(13) + neuenachricht$ EndIf End Function Es ist vielleicht ein bisschen unübersichtlich, aber es geht auch nur um die Funktion "Abfrage" und es soll ja auch nur zum testen sein. Ich habe trotzdem den ganzen code geschickt, damit es ausführbar ist. BITTE HELFT MIR! |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
hihi die sache ist die: wenn die message gesendet wird hat der spieler bereits das Spiel verlassen... danach fragst du den namen ab und natürlich ist der dann unbekannt(= unknown) was du machen musst ist alle spielertypes durchsuchen, da du sowieso den type des Spielers löschen musst, und dort den namen des spielers auslesen:
Code: [AUSKLAPPEN] For s.spieler = Each Spieler
if s\nummer=absendernr Exit;bei dem exit bleibt s erhalten Next neuenachricht$ = s\name + " hat die Sitzung verlassen.";den namen vom sspielertype nehmen da der andere "<unknown> ist" Delete s;Spielertype löschen da er sonst nur speicher blockiert.... |
||
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok klingt logisch...
Die adresse wird zwar gesendet, aber der Name existiert dann nicht mehr. Also muss ich den Namen für die Adresse selber speichern. So richtig? ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm der hat den Beitrag irgendwie 2 mal gesendet...
also bearbeite ich diesen hier einfach mal. So. |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie meinst du genau?
Du musst eigentlich wie oben erwähnt deine Spieler irgendwie verwalten die Online sind, am besten mit Types. Dort steht dann die Verbindungsnummer, Namen und vermutlich einige andere Dinge drin (zb position und so), damit diese Daten mit anderen mitspielern geteilt werden können vom server / host |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja damit hatte ich ja schon angefangen, aber ich wusste nicht, dass der Name beim verlassen verloren geht.
Also ich denke das ist jetz geklärt. Danke! ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group