Netzwerk - Logik Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: Netzwerk - Logik Problem

BeitragSa, Jan 02, 2010 2:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich habe ein Netzwerk Problem bezüglich der Player-Namen-Übertragung.
Am Anfang meines Codes wird der Name des Players zum Server übertragen der diesen dann an alle Player überträgt.
Wenn ich jetzt aber mehrere Player online habe, wird der Name des zuvor Online gegangenen, nicht angezeigt, da dieser ja nicht neu hinzugekommen ist.
Wie kann ich jetzt aber trotzdem die Namen der Player die Bereits Online sind übertragen?

Server:
Code: [AUSKLAPPEN]
Function UDP()
      readsvr = RecvUDPMsg(svr)
      If readsvr <> 0 Then
         readav = ReadAvail(svr)
         If readav <> 0 Then
            port = UDPMsgPort(svr)
            ip = UDPMsgIP(svr)   
            rbyte = ReadByte(svr)
         Select rbyte
               Case 1
              name$ = ReadString(svr)
                  For p.Player = Each Player
                     WriteByte svr,1
                     WriteInt svr,ip
                     WriteInt svr,port
                WriteString svr,name$
                     SendUDPMsg svr,p\ip,p\port
                     WriteByte svr,1
                     WriteInt svr,p\ip
                     WriteInt svr,p\port
                     SendUDPMsg svr,ip,port
                  Next
                  p.Player = New Player
                  p\ip$ = ip
                  p\port = port
                  Print "Player Connected... "+name$
               Case 2
                  For p.Player = Each Player
                     If ip = p\ip And port = p\port Then
                        Delete p
                     End If
                  Next
                  For p.Player = Each Player
                     WriteByte svr,2
                     WriteInt svr,ip
                     WriteInt svr,port
                     SendUDPMsg svr,p\ip,p\port
                  Next
                  Print "Player Disconnected..."
               Case 3
            While ReadAvail(svr)
                  For p.Player = Each Player
                     If p\port = port And p\ip = ip Then
                        p\x = ReadFloat(svr)
                        p\y = ReadFloat(svr)
                  p\name$ = ReadString(svr)
                     End If
                  Next
            Wend
            End Select
           
         End If
      End If
      read_milli = MilliSecs()+64

   If send_milli < MilliSecs() Then
      For s.Player = Each Player
         For p.Player = Each Player
            If p\port <> s\port Then
               WriteByte svr,3
               WriteInt svr,s\ip
               WriteInt svr,s\port
               WriteFloat svr,s\x
               WriteFloat svr,s\y
            WriteString svr,s\name$
               SendUDPMsg svr,p\ip,p\port
            End If
         Next
      Next
      send_milli = MilliSecs()+64
   End If
End Function


Client:
Code: [AUSKLAPPEN]
WriteByte o_udp,1
WriteString o_udp,name$
SendUDPMsg o_udp,Ip,7142

Function UDP()
   readsvr = RecvUDPMsg(o_udp)
     If readsvr <> 0 Then
         readav = ReadAvail(o_udp)
        If readav <> 0 Then
            rbyte = ReadByte(o_udp)
            Select rbyte
               Case 1
                  ;con
                  p.Player = New Player
                  p\ip = ReadInt(o_udp)
                  p\port = ReadInt(o_udp)
              p\name$ = ReadString(o_udp)
                  p\gfx = chha
              ;p\id = ReadInt(o_udp)
               Case 2
                  ;dis
                  rIp = ReadInt(o_udp)
                  port = ReadInt(o_udp)
                  For p.Player = Each Player
                     If p\ip = rIp And p\port = port Then
                        ;FreeImage p\gfx
                        Delete p
                     End If
                  Next
               Case 3
            While ReadAvail(o_udp)
                  rIp = ReadInt(o_udp)
                  port = ReadInt(o_udp)
                  For p.Player = Each Player
                     If p\ip = rIp And p\port = port Then
                        p\x# = ReadFloat(o_udp)
                        p\y# = ReadFloat(o_udp)
                     End If
                  Next
            Wend
            End Select
           
        End If
     End If
     read_milli = MilliSecs()+64

   ;Send
   If send_milli < MilliSecs() Then
      WriteByte o_udp,3
      WriteFloat o_udp,ppx
      WriteFloat o_udp,ppy
      SendUDPMsg o_udp,Ip,7142
      send_milli = MilliSecs()+64
   End If
End Function


Mfg,
N0X

(Das sind nur Code-Ausschnitte, Stream usw. sind erstellt ^^)
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

robotx

BeitragSa, Jan 02, 2010 3:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sendest an den neuen Client nach dem joinen zusätzlich alle bisherigen Daten der vorhandene Clienten (z.B. Namen) und liest sie beim neuen Clienten wieder aus.

mfg
www.botbomb.robotzgames.de
www.robotzgames.de

Pummelie

BeitragSa, Jan 02, 2010 5:03
Antworten mit Zitat
Benutzer-Profile anzeigen
du speicherst alle clienten in einem dim ab, und schreibst sie dann in einer for ... next schleife
It's done when it's done.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group