mein netzwerk spiel
Übersicht

![]() |
MrJoneyBetreff: mein netzwerk spiel |
![]() Antworten mit Zitat ![]() |
---|---|---|
hallo ich habe ein problemm ich habe ein kelines probespeil gebaut in dem mann mit einer figur in einem risigen raum durch die gegend sich bewegt
damm habe ich ein netzwerk spiel daraus geschriebn dan einigen code schnipseln die ich so hir udn da fand 8) funktionirt ganz gut soweit jetzt habe ich es geschaft beim hosten das der host sich 1 von 2 maps laden kann aber wie kann ihc dem client sagen das der host die map gewält hat und der client dann auch die map gewählt hat ? könnt ihr mir mall bitte da wieter helfen hir mein code 8) mehr oder wenniger Code: [AUSKLAPPEN] loca = Input("Local Game?(1 - Yes,0 - No) ") host = Input("Hosting Or Joining:(0 = Join,1 = Host) ") If host = 0 And loca = 0 ip$ = Input("Select IP: ") port = Input("Select Port: ") ElseIf host = 0 And loca = 1 port = Input("Select Port: ") ip = "" ElseIf host = 1 And loca = 0 ip = "" port = 80 ElseIf host = 1 And loca = 1 ip = "" port = 80 EndIf Include "nb.bb" Global mainstream = startnbgame(port) If mainstream = 0 Then RuntimeError("Port Occupied") : End name$ = Input("Enter Name: ") Graphics3D 800,600,0,2 If host = 1 Print "Welchen Spiel Modus möchtest du Spielen " modus = Input("1 - Arena,2 - Derby,3 - Rennen) ") EndIf If modus = 1 Print "Welchen Level möchtest du ? " Print "Arena 1 = 1 ,Arena 2 = 2,Arena 3 = 3 " map = Input("Level nummer") Print "Wieviel Zeit möchtest du ? " Print "10min = 1,20min = 2,30min = 3" zeit = Input("zeit") EndIf If modus = 2 Print "Welchen Level möchtest du ? " Print "Derby 1 = 1 ,Derby 2 = 2,Derby3 = 3,Derby4 =4,Derby5 = 5" map1 = Input("Level nummer") Print "Wieviel Zeit möchtest du ? " Print "endlos = 0,10min = 1,20min = 2,30min = 3" zeit = Input("zeit") EndIf If modus = 3 Print "Welchen Level möchtest du ? " Print "Rennen 1 = 1 ,Rennen 2 = 2, map2 = Input("Level nummer") Print "Wieviel Runden willst du ? " Print "1 = 1,2 = 2,3 = 3,4 = 4,5 = 5,6 = 6 Runden = Input("Runden") EndIf Print "Welchen Fahrzeug möchtes du wählen" auto = Input("1 - Buggy,2 - Motorad,3 - Panzer,4 - LKW) ") If map = 1 level = LoadMesh("boden.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map = 2 level = LoadMesh("boden1.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map = 3 level = LoadMesh("boden2.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map1 = 1 level = LoadMesh("boden.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map1 = 2 level = LoadMesh("boden1.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map1 = 3 level = LoadMesh("boden2.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map1 = 4 level = LoadMesh("boden.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map1 = 5 level = LoadMesh("boden1.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map2 = 1 level = LoadMesh("boden.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf If map2 = 2 level = LoadMesh("boden1.b3d") EntityFX level,1 : MoveEntity level,-120,-3,300 : ScaleMesh level,8,8,8 CreateLight() EndIf und die nb.bb Code: [AUSKLAPPEN] Type nbplayer
Field name$,id$ Field host,ip,port End Type Global serverip,nbmessage$,nbname$,serverport,nbuserid$ Function StartNBGame(port=80) c = CreateUDPStream(port) dport = UDPStreamPort(c) If dport <> port Then CloseUDPStream(c):c = 0 DebugLog "Created New NetBlitz Game" Return c End Function Function CreateNBPlayer$(name$,sip$,udpstream,hosting=0) DebugLog "Created NetBlitz Player: "+name go = CountHostIPs(sip) ip = HostIP(1) nbname = name n.nbplayer = New nbplayer n\name = name:n\port=nbgameport(udpstream) If hosting = 1 serverip = ip:n\host= 1 serverport = nbgameport(udpstream) EndIf If hosting = 0 serverip = ip WriteString(udpstream,"100:"+name) SendUDPMsg(udpstream,ip,80) ;Delay 1000 CheckNBDataBase(udpstream,0) EndIf CountHostIPs("") n\id= converttoid(HostIP(1),nbgameport(udpstream)) n\ip=HostIP(1) nbuserid = converttoid(HostIP(1),nbgameport(udpstream)) Return nbuserid End Function Function DeleteNBPlayer(udpstream) DebugLog "Deleted NetBlitz Player" For i.nbplayer = Each nbplayer If i\id <> nbuserid WriteString(udpstream,"101:") SendUDPMsg(udpstream,i\ip,i\port) EndIf Next End Function Function StopNBGame(udpstream) DebugLog "NetBlitz Game Stopped" CloseUDPStream(udpstream) End Function Function NBPlayerName$(id$) For n.nbplayer= Each nbplayer If n\id = id Then Return n\name Next End Function Function NBPlayerLocal(ip) CountHostIPs("") If HostIP(1) = ip Return 1 Else Return HostIP(1) EndIf End Function Function RecvNBMsg(udpstream,readm=1) g = RecvUDPMsg(udpstream) If g <> 0 DebugLog "Recieved NetBlitz Message" If readm = 1 nbmessage = ReadString(udpstream) EndIf Return 1 EndIf Return 0 End Function Function NBMsgType(udpstream) typ = Left(nbmessage,3) Return typ End Function Function NBMsgFrom$(udpstream) ip = UDPMsgIP(udpstream) port = UDPMsgPort(udpstream) tempid$=converttoid(ip,port) For n.nbplayer = Each nbplayer If n\id = tempid Then Return n\id Next End Function Function NBMsgData$(udpstream) msg$ = nbmessage index=Instr( msg,":" ) msg = Mid(msg$,index+1) Return msg End Function Function SendNBMsg(typ,msg$,idto$,udpstream) If idto = 0 For i.nbplayer = Each nbplayer If i\id <> nbuserid WriteString(udpstream,typ+":"+msg) SendUDPMsg(udpstream,i\ip,i\port) EndIf Next Else For i.nbplayer = Each nbplayer If i\id = idto WriteString(udpstream,typ+":"+msg) SendUDPMsg(udpstream,i\ip,i\port) EndIf Next EndIf DebugLog "Sent Message: "+msg End Function ;Extra NetBlitz Commands To Make The Internet Easier Function NBMsgTimeOut(milliseconds) UDPTimeouts(milliseconds) End Function Function WriteNBString(typ,texts$,udpstream) WriteString(udpstream,typ+":"+texts) End Function Function SendNBPacket(idto$,udpstream) If idto = 0 For i.nbplayer = Each nbplayer If i\id <> nbuserid SendUDPMsg(udpstream,i\ip,i\port) EndIf Next Else For i.nbplayer = Each nbplayer If i\id = idto SendUDPMsg(udpstream,i\ip,i\port) EndIf Next EndIf DebugLog "Sent Message Packet" End Function Function NBCopyPacket(udpstream,deststream,buffer) CopyStream udpstream,deststream,buffer End Function Function CheckNBDatabase(udpstream,msgtype=1) If msgtype = 0 time = MilliSecs() Repeat x = recvnbmsg(udpstream,1) If x > 0 If nbmsgtype(udpstream) <> 102 x = 0 EndIf EndIf If MilliSecs() - time > 10000 RuntimeError "Timeout Error"+Chr(10)+"Could Not Connect To Server" EndIf Until x > 0 If nbmsgtype(udpstream) = 102 serverport = nbmsgport(udpstream) serverip = nbmsgip(udpstream) ;i.nbplayer = New nbplayer ;i\ip = nbmsgfrom(udpstream) ;i\port = nbmsgport(udpstream) ;readnbpacket(udpstream) ;i\name = nbmsgdata(udpstream) ;i\id = Int(Str$(serverip)+Str$(serverport)) serverid$=converttoid(serverip,serverport) n.nbplayer = New nbplayer n\name = nbmsgdata(udpstream) n\ip = ReadInt(udpstream) n\port = ReadInt(udpstream) n\id = converttoid(n\ip,n\port) While Not Eof(udpstream) n.nbplayer = New nbplayer msg$ = ReadString(udpstream) index=Instr( msg,":" ) msg = Mid(msg$,index+1) n\name = msg n\ip = ReadInt(udpstream) n\port = ReadInt(udpstream) n\id = converttoid(n\ip,n\port) Wend For i.nbplayer = Each nbplayer If i\id = serverid Then i\host=1 : Exit Next For n.nbplayer = Each nbplayer If n\host = 0 And n\id <> nbuserid WriteString(udpstream,"100:"+nbname) SendUDPMsg(udpstream,n\ip,n\port) EndIf Next DebugLog countnbplayers()+" Playing" Return 1 EndIf ElseIf msgtype = 1 ;WriteString(udpstream,"102:TempMessage") ;WriteString(udpstream,"102:"+nbplayerlocal()) Experimenting ;WriteString(udpstream,"102:"+nbname) ;WriteString(udpstream,"102:"+nbgameport(udpstream)) For i.nbplayer = Each nbplayer WriteString(udpstream,"102:"+i\name) WriteInt(udpstream,i\ip) WriteInt(udpstream,i\port) Next i.nbplayer = New nbplayer i\name = nbmsgdata(udpstream) i\ip = nbmsgip(udpstream) i\port = nbmsgport(udpstream) i\id = converttoid(i\ip,i\port) sendnbpacket(i\id,udpstream) Return 1 EndIf End Function Function CountNBPlayers() For i.nbplayer = Each nbplayer bcount = bcount + 1 Next Return bcount End Function Function ReadNBPacket(udpstream) nbmessage = ReadString(udpstream) Return nbmessage End Function Function NBGamePort(udpstream) port = UDPStreamPort(udpstream) Return port End Function Function NBMsgPort(udpstream) port = UDPMsgPort(udpstream) Return port End Function Function NBMsgIP(udpstream) ip = UDPMsgIP(udpstream) Return ip End Function Function CheckAvailPorts() For br = 1 To 10000 c = CreateUDPStream(br) If c <> 0 Exit EndIf Next CloseUDPStream(c) Return br End Function Function NBPlayerPort(id$) For i.nbplayer = Each nbplayer If i\id = id Return i\port EndIf Next End Function Function NBPlayerIP(id$) For i.nbplayer = Each nbplayer If i\id = id Return i\ip EndIf Next End Function Function ConvertToID$(ip,port) s$ = Str$(ip)+"-"+Str$(port) Return s End Function |
||
DerSatanGast |
![]() Antworten mit Zitat |
|
---|---|---|
So ich habe eine Idee: der client schickt eine Anfrage nach spieldaten (kann ja irgendein wert u. typ von variable sein, sollte sich nur nicht mit anderen überschneiden). Der Host checkt in jedem Hauptschleifendurchlauf ob so eine Message angekommen ist und schickt dann seinerseits eine Message mit allen Infos zum laufenden Spiel (also Level, art des spiels usw...). Der Client lädt darauf die passenden meshes. | ||
![]() |
MeoqanBetreff: mein vorschlag: |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi! ich programiere zurzeit selber ein netzwerk spiel und habe das so gelöst:
der server läuft und checkt jedes mal ob eine nachricht vorhanden ist und wertet diese dann aus: Code: [AUSKLAPPEN] ; nachrichten abrufen! If RecvUDPMsg(udp_in)<>0 Then While Not Eof(udp_in) nachricht$=ReadLine$(udp_in) udip$=UDPMsgIP(udp_in) dip$=DottedIP$(udip$) ip=INT_IP(dip$) port=UDPMsgPort(udp_in) port=Int(port)-1 g=0 ;LOGIN ABARBEITEN If Left$(nachricht$,6)="&LOGIN" Then ;wichtig die zahl entspricht der zahl der buchtaben des befehls ergebnis2$=Right$(nachricht$,Len(nachricht$)-6) ; und hier auch pos=Instr(ergebnis2$,"!") ;das trenn zeichen ist ! und kann geändert werden name$=Right$(ergebnis2$,Len(ergebnis2$)-pos) passw$=Left$(ergebnis2$,pos-1) Print "LOGON: NEW - IP: "+dip$+":"+port+" NAME: "+name$ g=1 l=1 For player.Player = Each Player If name$=player\system\name$ And passw$=player\system\passw$ Then l=0 player\system\activ=6 player\system\ip=ip player\system\port=port WriteLine udp_out,"&LOGINRIGHT" SendUDPMsg udp_out,player\system\ip,player\system\port Exit EndIf Next If l=1 Then WriteLine udp_out,"&LOGINFAIL" SendUDPMsg udp_out,ip,port EndIf EndIf ;LOGIN ENDE ;nachrichten abrufen ende Wend EndIf die nachricht wäre: &LOGINname!passwort die nachrichten werden abgerufen und solange nicht Eof erreicht wird verarbeitet. so könnte man folgenden aufbaunehmen: WriteLine udp_out,"&LOGIN"+name$+"!"+passw$ WriteLine udp_out,"&GET" SendUDPMsg udp_out,ip,port so könnte man auch in einem rutsch alle spiel wichtigen daten übertragen: WriteLine udp_out,"&MAP"+mapname$+"!"+playeronmap$ WriteLine udp_out,"&PLAYER"+playername$+"!"+playerID+"!"+playerX+"!"+playerY+"!"+playerZ+"!"+playerscore SendUDPMsg udp_out,ip,port nun ich hab einen code geschrieben dan man dan einfach in die schleife reinkopieren kann und dieser unterstützt bis zu 20 Variablen in einer nachricht, getrennt durch ein ! (das änderbar ist): Code: [AUSKLAPPEN] Dim inna$(20) Dim anna$(20) nachricht$="%BEFEHL"+"test1"+"!"+"test2"+"!"+"test3"+"!"+"test4"+"!"+"test5"+"!"+"test6" If Left$(nachricht$,7)="%BEFEHL" Then g=1 inna(0)=Right$(nachricht$,Len(nachricht$)-7) uno=-1 Repeat uno=uno+1 pos=Instr(inna$(uno),"!") inna$(uno+1)=Right$(inna$(uno),Len(inna$(uno))-pos) anna$(uno)=Left$(inna$(uno),pos-1) Until Not Instr(inna$(uno+1),"!") name5$=inna$(uno+1) ;int(): xxx=anna$(0) : xxx=anna$(1) :...: NAME5$ ist der letzte wert For e=0 To 20 Print anna$(e) Next Print name5$ EndIf WaitKey() ich hoffe das bringt dich weiter... |
||
![]() |
MrJoney |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi vielen dank ich teste es sofort aus | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group