SendNetMsg nur an andere Spieler, nicht an einen selbst ?
Übersicht

![]() |
YuenBetreff: SendNetMsg nur an andere Spieler, nicht an einen selbst ? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber sendet er in meinem Beispiel an alle andere Spieler ? - das "selbstempfangen" kann ich ja dann auch anders lösen.
MFG |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group