SendNetMsg nur an andere Spieler, nicht an einen selbst ?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Yuen

Betreff: SendNetMsg nur an andere Spieler, nicht an einen selbst ?

BeitragSo, Aug 27, 2006 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

nachdem das mit den Types funktioniert, arbeite ich an einer Kommunikation zwischen den Spielern. Ich nutze DirectPlay.

Ich möchte nun eine Nachricht von einem Spieler an alle anderen Spieler senden. Dazu nutze ich die SendNetMsg Funktion. Der Spieler der die Nachricht schickt, soll sie ebenfalls erhalten, dafür nutze ich RecvNetMsg.
Allerdings kommt die Nachricht nicht an(zumindest beim Spieler der sie abgeschickt hat).

Code: [AUSKLAPPEN]
; Type
Type player
   Field id
   Field name$
   Field pc$
   Field px
   Field py
   Field pz
End Type

; Abfragen ob Host oder Join
If art$ = "0" And host$ = "0" Then
   ; Spiel erstellen
   Print "Erstelle Spiel ..."
   Delay 1000
   game = HostNetGame(servname$)
   If game=2 Then
      Print "Spiel erstellt."
      spieler.player = New player
      spieler\id = CreateNetPlayer(name$)
      If spieler\id <> 0 Then
         spieler\name$ = name$
         spieler\pc$ = pc$
         spieler\px = 0
         spieler\py = 0
         spieler\pz = 0
      EndIf
      SendNetMsg Rnd(1,99),"Spieler: "+spieler\name$+" ist beigetreten",spieler\id,0
   Else
      Print "Spiel konnte nicht erstellt werden !"
   EndIf
ElseIf art$ = 1 Then
; Spiel beitreten
Print "lal"
EndIf

While Not KeyHit(1)
If RecvNetMsg() Then
msgType=NetMsgType()
If msgType>0 And msgType<100 Then
Print "(Nachricht zugeschickt von: "+ NetMsgFrom() + ")"
Print "(Nachricht zugeschickt an: "+ NetMsgTo() + ")"
Print "Nachricht: "+NetMsgData$()
End If
End If
Wend
End


Testweise ist nur ein Spieler im Spiel, der sendet die Nachricht an alle und soll sie selbst auch erhalten.
 

Dreamora

BeitragSo, Aug 27, 2006 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht nicht
Wenn er sie selbst auch erhalten soll, musst du die nachricht halt entsprechend in eine Datenstruktur speichern die beim abrufen der receive auch überprüft wird.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Yuen

BeitragMo, Aug 28, 2006 9:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber sendet er in meinem Beispiel an alle andere Spieler ? - das "selbstempfangen" kann ich ja dann auch anders lösen.

MFG
 

Dreamora

BeitragMo, Aug 28, 2006 9:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Sofern er der Server ist, sollte das kein Problem sein.
Aber DP hat allgemein so seine Tücken, sei also nicht frustriert wenns beim ersten Testlauf nicht so möchte wie du ... für was anderes als Chatprogramme taugts nicht.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Yuen

BeitragMo, Aug 28, 2006 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Bisher bin ich mit DP sehr zufrieden, läuft alles sehr gut.

Nun habe ich ein neues Problem.

Als Gui nutze ich Ngui_Epsilon.

Es ist momentan ein einfacher Chat mit einem Input und einem MultiInput.
Alles funktioniert soweit recht gut, nur wenn ich chatten will, erreicht die erste Nachricht die Empfänger, aber sobald ich eine zweite abschicke hängt sich das Game auf.

Das Aufhängen liegt an "&&", damit wird bei Ngui_Epsilon in die nächste Zeile gesprungen. Entferne ich "&&", kommen alle Nachrichten an, jedoch stehen sie dann hintereinander anstatt untereinander.

Kennt sich da jemand aus ? - wie bekomme ich es hin das die Nachrichten untereinander stehen und alle Nachrichten ankommen ?

Das Problem tritt auch nur auf wenn ich was in den Chat schreibe, beim Empfangen von Nachrichten ob ein neuer Spieler beigetreten ist, gibts keine Probleme.

Code: [AUSKLAPPEN]
; Includes
Include "ngui.bb"

; GUI
NG_SetStyle 3
NG_ActiveMouse (1)
NG_Initialize ()

chatWindow = NG_CreateWindow(0,480,300,120,"",1+2+4+8)
chatfenMuInp = NG_CreateMultiInput(chatWindow,5,15,250,70,"",4,"","")
chatinInp = NG_CreateInput(chatWindow,10,90,250,20,"",1,"","")

; Type
Type player
   Field id
   Field name$
   Field pc$
   Field px
   Field py
   Field pz
End Type

; Abfragen ob Host oder Join
If art$ = "0" And host$ = "0" Then
   ; Spiel erstellen
   Print "Erstelle Spiel ..."
   Delay 1000
   gamehost = HostNetGame(servname$)
   If gamehost=2 Then
      Print "Spiel erstellt."
      spieler.player = New player
      spieler\id = CreateNetPlayer(name$)
      If spieler\id <> 0 Then
         spieler\name$ = name$
         spieler\pc$ = pc$
         spieler\px = 0
         spieler\py = 0
         spieler\pz = 0
      EndIf
      NG_SetMultiInput(chatfenMuInp,"System: "+spieler\name+" ist beigetreten")
   Else
      Print "Spiel konnte nicht erstellt werden !"
      Delay 3000
   EndIf
ElseIf art$ = 0 And host$ = 1 Then
   ; Spiel beitreten
   Print "Trete Spiel bei ..."
   Delay 1000
   gamejoin = JoinNetGame(servname$,"localhost")
   If gamejoin = 1 Then
      spieler.player = New player
      spieler\id = CreateNetPlayer(name$)
      If spieler\id <> 0 Then
         spieler\name$ = name$
         spieler\pc$ = pc$
         spieler\px = 0
         spieler\py = 0
         spieler\pz = 0
      EndIf
      SendNetMsg 10,spieler\name$+" ist beigetreten",spieler\id,0
      NG_SetMultiInput(chatfenMuInp,"System: "+spieler\name+" ist beigetreten")
   Else
      Print "Konnte Spiel nicht beitreten."
      Delay 3000
   EndIf
EndIf

While Not KeyHit(1)
If RecvNetMsg() Then
   msgType=NetMsgType()
   If msgType = 10 Then
      NG_SetMultiInput(chatfenMuInp,NG_ReturnMultiInput$(chatfenMuInp)+"&&"+"System: "+NetMsgData$())
   End If
   If msgType = 20 Then
      NG_SetMultiInput(chatfenMuInp,NG_ReturnMultiInput$(chatfenMuInp)+"&&"+NetMsgData$())
   EndIf
End If
If KeyHit(28) = True Then
   SendNetMsg 20,spieler\name$+": "+NG_ReturnInput$(chatinInp),spieler\id,0
   NG_SetMultiInput(chatfenMuInp,NG_ReturnMultiInput$(chatfenMuInp)+"&&"+spieler\name+": "+NG_ReturnInput$(chatinInp))
EndIf
; 2D Update
NG_Update ()
Flip
Wend


Hoffe jemand kann mir helfen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group