SimpleUDP - NetzwerkLib 1.25
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn ich das richtig verstehe ist der Server nichtmehr dedicated, sondern kann mitspielen, und das ist direkt in der Lib implementiert?
cool! |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jop das ist richtig ^^ aber du kannst trotzdem einen Dezidierten Server drauf machen ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
MeikBetreff: Falscher Link? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich weiss ja nicht ob das normal ist aber ich bekomme auf dem Downloadlink nur ein weißes Fenster mit einem vll 300x300px großes Werbefenster drinne und dann noch das (jetzt leider schon fast alltägliche) "Ich-schiebe-mich-von-jeder-richtung-ins-fenster-und-verstecke-meinen-x-button" Werbepopup.
Kann nichts runterladen nur arme 5 Handys umballern oder mich bei nem webbrowser Spaceschießmichtot spielchen anmelden. Schade :/ p.s. Benutze Firefox 3.5.3 mit abgestelltem popupblocker Edit: Code: [AUSKLAPPEN] <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> .. bplaced.net </title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Language" content="en" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="Robots" content="INDEX, FOLLOW" /> <meta name="Copyright" content="miro" /> <meta name="Revisit-after" content="5 days" /> <link rel="shortcut icon" href="http://www.bplaced.net/favicon.ico" /> <style type="text/css"> a:link, a:visited { color : #000; text-decoration : none; } a:hover { color : #495796; text-decoration : underline; } a:active { color : #333399; text-decoration : none; } </style> </head> <body> <div style="margin: 250px auto 120px auto; width: 350px; height: 250px;"> <!-- Begin: AdShopping Ad --> <script type="text/javascript"> // <![CDATA[ if (typeof adshoppingParams == "undefined"){var adshoppingParams=new Object();} adshoppingParams.zone_4292 = [{ "color_border" : "#F8F8F8", "color_bg" : "#FFFFFF", "color_link" : "#C40000", "color_text" : "#000000", "color_title" : "#2F59AD", "end_of_params" : "true" // Ende Variablen }]; function loadAdShopping4292(){s=document.createElement("script");s.charset="utf-8";s.type="text/javascript";s.src="http://ads.adshopping.com/view/?zid=4292&code";if(!document.getElementsByTagName("head")){h=document.createElement("head");document.getElementsByTagName("html")[0].appendChild(h);}document.getElementsByTagName("head")[0].appendChild(s);}if(window.addEventListener){window.addEventListener("load",loadAdShopping4292, false);}else if(window.attachEvent){window.attachEvent("onload",loadAdShopping4292);}else{} // ]]> </script> <div id="AdShoppingZone_4292"></div> <!-- End: AdShopping Ad --> </div> <div style="margin: 120px auto 0 auto; width: 750px; text-align: center;"> <!-- Begin: AdShopping Ad --> <script type="text/javascript"> // <![CDATA[ if (typeof adshoppingParams == "undefined"){var adshoppingParams=new Object();} adshoppingParams.zone_5617 = [{ "color_border" : "#F8F8F8", "color_bg" : "#FFFFFF", "color_link" : "#C40000", "color_text" : "#000000", "color_title" : "#2F59AD", "end_of_params" : "true" // Ende Variablen }]; function init5617(){s=document.createElement("script");s.charset="utf-8";s.type="text/javascript";s.src="http://ads.adshopping.com/view/?zid=5617&code";if(!document.getElementsByTagName("head")){h=document.createElement("head");document.getElementsByTagName("html")[0].appendChild(h);}document.getElementsByTagName("head")[0].appendChild(s);}init5617(); // ]]> </script> <div id="AdShoppingZone_5617"></div> <!-- End: AdShopping Ad --> <div style="font: 9px/1.2em Arial, Verdana, sans-serif;"> <br /> <a href="http://www.bplaced.net/"><span style="color: #0b5fb4;">b</span>placed.net</a> Diese Seite ist leider nicht mehr verfügbar, Fehler 404. Sorry, this page is not available any more, error 404. - <a href="http://www.bplaced.net/?location=contact">Impressum</a> </div> </div> <script type="text/javascript"> document.write ('<scr' + 'ipt Language="JavaScript" src="http://www.euros4click.de/showme.php?id=15749&rnd=' + Math.random() + '&popup=false&layer=true"></scr' + 'ipt>'); </script> </body> </html> Keine Ahnung aber sieht mir irgendwie nach 404 aus? Kenne mich mit Html nicht aus ^^ Achso, weiss auch nicht ob ich hier den Html code zeigen darf :/ Wenn nicht bitte bescheid sagen dann nehm ich den wieder raus. Vielleicht wird ja jemand draus schlau ![]() Nochwas: dieses " Diese Seite ist leider nicht mehr verfügbar, Fehler 404." Wird mir auf der Seite auch nicht angezeigt. |
||
- Zuletzt bearbeitet von Meik am Di, Okt 13, 2009 18:35, insgesamt einmal bearbeitet
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mhm komisch... ich überprüf das.
Aber der aktuelle Download ist noch der Alte, also der mit der vorgänger version. mfg ToeB Edit : Ich weiß worans lag : Ich habe das auf einem Bplaced webspace hochgeladen aber der exestiert gar nicht mehr ![]() Also hier der neue Download (Ohne fehler, versprochen) : http://www.toebproductions.de/Blitz/SimpleUDP.rar Edit : Hehe lag am schreibfehler ^^ Have fun ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
- Zuletzt bearbeitet von ToeB am Di, Okt 13, 2009 20:16, insgesamt einmal bearbeitet
Meik |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmm ^^
Header: Alice Suche - Fehler: 500 Unbekannter Server. Code: [AUSKLAPPEN] Die von Ihnen eingegebene Internetadresse www.toebprodutcions.de/Bl... konnte nicht gefunden werden. Hier sind einige Vorschläge: Funktioniert den der Code wenn ich ihn einfach von dir hierraus kopiere? Brauch ich den dringend den download? Beispiele währen schon toll aber würde mich dann auch so durchbeißen. MFG Edit: Fehler gefunden. http://www.toebprodutcions.de/Blitz/SimpleUDP.rar -> Falsch http://www.toebproductions.de/Blitz/SimpleUDP.rar -> Richtig c und t vertauscht ![]() Danke nochmal ![]() MFG |
||
marcelm |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sieht echt gut aus.
funktioniert's auch außerhalb des eig. netzwerks, wenn ports etc. offen sind? |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja tut es ! Ist ja UDP, nur die "UDP_CountServers" - Function wird im Internet nicht klappen ![]() Und : Der Code würde auch ohne Download Functionieren ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
der link geht nicht .. gibts dafür nen grund? gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja sry der Vertrag bei 1&1 war abgelaufen und die Domain geküdigt. Link erneuert. Hier der neue Link :
Download : SimpleUDP(*.rar / ~3,5Mb) mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
danke gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
So eine kleine neue Version ist da : Version 1.30
Mir ist beim Schreiben der Onlinehilfe (ja sie schreitet laangsam voran ![]() Hier die Lib : Code: [AUSKLAPPEN] Const UDP_ServerPort = 8000 Const UDP_PingTime = 1000 Const UDP_Msg_nom = 1 Const UDP_Msg_new = 2 Const UDP_Msg_not = 3 Const UDP_Msg_pg1 = 4 Const UDP_Msg_pg2 = 5 Const UDP_Msg_kik = 6 Const UDP_Msg_end = 7 Const UDP_Msg_ask = 8 Const UDP_Msg_att = 9 Const UDP_Msg_at2 = 10 Const UDP_CommandSign$ = "§" Const UDP_EnCodeNumber = 4 Global UDP_Server,UDP_ServerStream,UDP_ServerName$ Global UDP_ServerMsg$ Global UDP_ServerPass$ Global UDP_PingMS Global UDP_PlayerNumber,UDP_PlayerID Global UDP_CommandLine$ = "" Global UDP_Command$,UDP_ParameterNumber Global UDP_SendNewMsg = 0,UDP_RecvMsg = 0 Global UDP_MsgID Global UDP_EventID Global UDP_PingTimeOut = 10000 Dim UDP_Player_Online(0),UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0),UDP_Player_Name$(0) Dim UDP_Player_local(0) Dim UDP_Player_TMsg.UDP_Msg(0),UDP_Player_SendNewMsg(0),UDP_Player_RecvMsg(0) Dim UDP_Player_Ping(0),UDP_Player_PingMs(0) Dim UDP_Player_Event(0) Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg$(0) Dim UDP_Servertmp_pass(0) Dim UDP_Server_name$(0) Dim UDP_Server_ip$(0) Dim UDP_Server_port(0) Dim UDP_Server_pl1(0) Dim UDP_Server_pl2(0) Dim UDP_Server_msg$(0) Dim UDP_Server_pass(0) Type UDP_Msg Field msg$ Field ms Field ID Field From Field it End Type Type UDP_RecvMsg Field msg$ Field From Field att End Type Type UDP_Event Field typ Field ID End Type Dim UDP_Parameter$(0) ;---------- Function UDP_HostGame(GameName$,PlayerName$,PlayerNumber=1) UDP_Server = 1 UDP_ServerStream = CreateUDPStream(UDP_ServerPort) UDP_NewPlayerNumber(PlayerNumber) UDP_PlayerID = 0 UDP_ServerName = GameName UDP_Player_Online(0) = 1 If PlayerName <> "" UDP_Player_Name$(0) = PlayerName$ Else UDP_Player_Name$(0) = "unnamed" Return (UDP_ServerStream <> 0) End Function Function UDP_JoinGame(GameIP$,PlayerName$,ServerPass$="",WaitTime=100) UDP_Server = 0 If Instr(GameIp,":") > 0 GameIp = Mid(GameIP,1,Instr(GameIP,":")-1) If Instr(GameIp,".") > 0 GameIP = UDP_IntIP(GameIP) UDP_ServerStream = CreateUDPStream() If UDP_ServerStream = 0 Return 0 If PlayerNAme$ = "" PlayerName$ = "unnamed" WriteByte(UDP_ServerStream,UDP_Msg_new) WriteString(UDP_ServerStream,PlayerName$) WriteString(UDP_ServerStream,UDP_Encode(ServerPass)) SendUDPMsg(UDP_ServerStream,GameIP,UDP_ServerPort) Connection = 0 WaitMs = MilliSecs() + WaitTime While WaitMs > MilliSecs() If RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) If byte = UDP_Msg_new If UDPMsgIP(UDP_ServerStream) = GameIP UDP_PlayerID = ReadInt(UDP_ServerStream) UDP_PlayerNumber = ReadInt(UDP_ServerStream) UDP_NewPlayerNumber(UDP_PlayerNumber) UDP_Player_Port(0) = UDP_ServerPort UDP_Player_IP(0) = GameIP UDP_ServerMsg$ = ReadString(UDP_ServerStream) While Not Eof(UDP_ServerStream) TmpPlayerID = ReadInt(UDP_ServerStream) UDP_Player_Online(tmpPlayerID) = 1 UDP_Player_Name$(tmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = ReadByte(UDP_ServerStream) Wend UDP_Player_Online(UDP_PlayerID) = 1 If PlayerName <> "" UDP_Player_Name$(UDP_PlayerID) = PlayerName$ Else UDP_Player_Name$(UDP_PlayerID) = "unnamed" Connection = 1 Exit EndIf EndIf EndIf Wend If Connection UDP_Player_Stream(0) = CreateUDPStream() If UDP_Player_Stream(0) = 0 Return 0 Return Connection End Function Function UDP_SetServerMsg(ServerMsg$) If UDP_Server = 1 UDP_ServerMsg$ = ServerMsg$ EndIf End Function Function UDP_SetServerPass(ServerPass$) If UDP_Server = 1 UDP_ServerPass = ServerPass EndIf End Function Function UDP_SendMsg(Msg$,ID=-1) If UDP_Server = 1 If ID < 0 Or ID > UDP_PlayerNumber For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),0) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next Else WriteByte(UDP_Player_Stream(ID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ID),0) WriteString(UDP_Player_stream(ID),Msg$) SendUDPMsg(UDP_Player_stream(ID),UDP_Player_IP(ID),UDP_player_Port(ID)) EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 If ID < 0 Or ID > UDP_PlayerNumber WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),-1) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) Else WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),ID) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf EndIf EndIf End Function Function UDP_SendMsg_Att(msg$,ID=-1) If UDP_Server = 1 If ID < 0 Or ID > UDP_PlayerNumber For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = 0 If c = 0 UDP_Player_SendNewMsg(i) = 1 EndIf Next Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = ID c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = 0 If c = 0 UDP_Player_SendNewMsg(ID) = 1 EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 If ID < 0 Or ID > UDP_PlayerNumber c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = -1 tmp\From = UDP_PlayerID If c = 0 UDP_Player_SendNewMsg(0) = 1 Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = UDP_PlayerID If c = 0 UDP_Player_SendNewMsg(ID) = 1 EndIf EndIf EndIf End Function Function UDP_SendLocalMsg(msg$,LocalID) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),LocalID) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf End Function Function UDP_SendLocalMsg_att(msg$,LocalID) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = LocalID If c = 0 UDP_Player_SendNewMsg(i) = 1 EndIf Next EndIf End Function Function UDP_Update(LoginBlock=0) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 If UDP_Player_SendNewMsg(i) = 1 get = 0 tmp.UDP_Msg = Null For tmp_.UDP_Msg = Each UDP_Msg If tmp_\ID = i tmp = tmp_ : Exit Next If tmp <> Null WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(i) = 0 UDP_Player_TMsg(i) = tmp UDP_Player_RecvMsg(i) = 1 Else UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf EndIf If UDP_Player_RecvMsg(i) = 1 tmp.UDP_Msg = UDP_Player_TMsg(i) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Delete tmp UDP_Player_SendNewMsg(i) = 1 UDP_Player_RecvMsg(i) = 0 EndIf EndIf EndIf Else For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then Delete tmp Next UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf Next If UDP_PingMs <= MilliSecs() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_PingMs(i) = 0 And UDP_Player_Local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_pg1) For j = 1 To UDP_PlayerNumber If UDP_Player_Online(j) = 1 WriteInt(UDP_Player_Stream(i),j) WriteInt(UDP_Player_Stream(i),UDP_PLayer_Ping(j)) EndIf Next SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) UDP_Player_PingMs(i) = MilliSecs() EndIf Next UDP_PingMs = MilliSecs() + UDP_PingTime EndIf For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i > 0 And UDP_Player_Local(i) = 0 If UDP_Player_PingMs(i) > 0 If (MilliSecs()-UDP_Player_PingMs(i)) > UDP_PingTimeOut Then UDP_KickPlayer(i) EndIf EndIf EndIf Next While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) ToID = ReadInt(UDP_serverStream) If ToID = -1 Or ToID = 0 tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 If toID = -1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> TmpID WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),TmpID) WriteString(UDP_Player_stream(i),tmpr\msg) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf Else WriteByte(UDP_Player_Stream(ToID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ToID),TmpID) WriteString(UDP_Player_stream(ToID),tmpr\msg) SendUDPMsg(UDP_Player_stream(toID),UDP_Player_IP(ToID),UDP_player_Port(toID)) EndIf Case UDP_Msg_new place = UDP_GetFreePlace() New_Name$ = ReadString(UDP_ServerStream) New_Pass$ = ReadString(UDP_ServerStream) New_Port% = UDPMsgPort(UDP_ServerStream) New_IP% = UDPMsgIP(UDP_ServerStream) New_Pass = UDP_DeCode(New_Pass) If LoginBlock = 0 And New_Pass = UDP_ServerPass Then If place > 0 player_accept = UDP_CreateNewPlayer(place,New_Name$,New_IP,New_Port) If player_accept > 0 WriteByte(UDP_Player_Stream(place),UDP_Msg_new) WriteInt(UDP_Player_Stream(place),place) WriteInt(UDP_Player_Stream(place),UDP_PlayerNumber) WriteString(UDP_Player_Stream(place),UDP_ServerMsg$) For i = 0 To UDP_PlayerNumber If place <> i If UDP_Player_Online(i) = 1 WriteInt(UDP_Player_Stream(place),i) WriteString(UDP_Player_Stream(place),UDP_Player_Name(i)) WriteByte(UDP_Player_Stream(place),UDP_Player_Local(i)) EndIf EndIf Next SendUDPMsg(UDP_Player_Stream(place),UDP_Player_IP(place),UDP_Player_Port(place)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),0) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = place EndIf EndIf EndIf Case UDP_Msg_pg1 TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 UDP_Player_Ping(TmpID) = MilliSecs() - UDP_Player_PingMs(TmpID) UDP_Player_PingMs(TmpID) = 0 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_pg2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_PLayer_Port(TmpID)) EndIf Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID CloseUDPStream(UDP_Player_Stream(TmpID)) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),TmpID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next EndIf Case UDP_Msg_ask IP = UDPMsgIP(UDP_ServerStream) Port = UDPMsgPort(UDP_ServerStream) count = UDP_CountPlayers() WriteByte(UDP_ServerStream,UDP_Msg_ask) WriteString(UDP_ServerStream,UDP_ServerName$) WriteInt(UDP_ServerStream,count) WriteInt(UDP_ServerStream,UDP_PlayerNumber) WriteString(UDP_ServerStream,UDP_ServerMsg) WriteByte(UDP_ServerStream,(UDP_ServerPass<>"")) SendUDPMsg(UDP_ServerStream,Ip,Port) Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) toID = ReadInt(UDP_ServerStream) ;UDP_Player_Msg(TmpID) = ReadString(UDP_ServerStream) If toID = -1 Or ToID = 0 tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_ServerStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" And toID = -1 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And tmpID <> i c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = TmpID If c = 0 UDP_Player_SendNewMsg(i) = 1 UDP_Player_TMsg(i) = tmp EndIf Next EndIf Else If tmpr\msg <> "" WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = toID c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = toID tmp\From = TmpID If c = 0 UDP_Player_SendNewMsg(toID) = 1 UDP_Player_TMsg(toID) = tmp EndIf EndIf Case UDP_Msg_at2 TmpID = ReadInt(UDP_ServerStream) Delete UDP_Player_TMsg(tmpID) UDP_Player_SendNewMsg(TmpID) = 1 UDP_Player_RecvMsg(TmpID) = 0 End Select Wend ElseIf UDP_Server = 0 If UDP_Player_SendNewMsg(0) = 1 tmp.UDP_Msg = First UDP_Msg If tmp <> Null WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(0) = 0 UDP_Player_TMsg(0) = tmp UDP_Player_RecvMsg(0) = 1 Else UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf If UDP_Player_RecvMsg(0) = 1 tmp.UDP_Msg = UDP_Player_TMsg(0) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Delete tmp UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf EndIf While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 Case UDP_Msg_new TmpPlayerID = ReadInt(UDP_ServerStream) LocalPlayer = ReadByte(UDP_serverStream) UDP_Player_Online(TmpPlayerID) = 1 UDP_Player_Name$(TmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = LocalPlayer tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = tmpPlayerID Case UDP_Msg_pg1 While Not Eof(UDP_ServerStream) TmpID = ReadInt(UDP_ServerStream) UDP_Player_Ping(TmpID) = ReadInt(UDP_ServerStream) Wend WriteByte(UDP_Player_Stream(0),UDP_Msg_pg1) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) UDP_Player_pingms(0) = MilliSecs() Case UDP_Msg_pg2 UDP_Player_ping(0) = MilliSecs() - UDP_Player_pingms(0) Case UDP_Msg_kik TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_kik tmpe\ID = tmpID Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) ;UDP_Player_Msg(TmpID) = ReadString(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" WriteByte(UDP_Player_Stream(0),UDP_Msg_at2) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf Case UDP_Msg_at2 Delete UDP_Player_TMsg(0) UDP_Player_SendNewMsg(0) = 1 UDP_Player_RecvMsg(0) = 0 End Select Wend EndIf End Function Function UDP_GetMsg$() tmp.UDP_RecvMsg = First UDP_RecvMsg If tmp <> Null UDP_MsgID= tmp\From tmpMsg$ = tmp\msg Delete tmp Return tmpmsg$ EndIf Return "" End Function Function UDP_KickPlayer(ID) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 WriteByte(UDP_Player_Stream(i),UDP_Msg_Kik) WriteInt(UDP_Player_Stream(i),ID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next UDP_Player_Online(ID) = 0 UDP_Player_Port(ID) = 0 UDP_Player_IP(ID) = 0 UDP_Player_PingMs(ID) = 0 CloseUDPStream(UDP_Player_Stream(ID)) tmp.UDP_Event = New UDP_Event tmp\typ = UDP_Msg_kik tmp\ID = ID EndIf End Function Function UDP_End() If UDP_Server = 1 For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),0) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next Delay 50 If UDP_ServerStream <> 0 CloseUDPStream(UDP_ServerStream) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 CloseUDPStream(UDP_Player_Stream(i)) EndIf Next Else If UDP_ServerStream <> 0 And UDP_Player_Stream(0) <> 0 WriteByte(UDP_Player_Stream(0),UDP_Msg_End) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) Delay 50 CloseUDPStream(UDP_Player_Stream(0)) CloseUDPStream(UDP_ServerStream) EndIf EndIf End Function Function UDP_GetEvent() tmp.UDP_Event = First UDP_Event If tmp <> Null UDP_EventID = tmp\ID typ = tmp\typ Delete tmp Return typ EndIf Return 0 End Function Function UDP_CountServers(MaxServer=100,WaitTime=500) Dim UDP_Servertmp_name$(MaxServer) Dim UDP_Servertmp_ip$(MaxServer) Dim UDP_Servertmp_port(MaxServer) Dim UDP_Servertmp_pl1(MaxServer) Dim UDP_Servertmp_pl2(MaxServer) Dim UDP_Servertmp_msg(MaxServer) Dim UDP_Servertmp_pass(MaxServer) IP = UDP_IntIP(UDP_BroadcastIP()) UDP_ServerStream = CreateUDPStream() WriteByte(UDP_ServerStream,UDP_Msg_ask) SendUDPMsg(UDP_ServerStream,IP,UDP_ServerPort) ms = MilliSecs() serv = 0 Repeat If RecvUDPMsg(UDP_ServerStream) If ReadByte(UDP_ServerStream) = UDP_Msg_ask UDP_Servertmp_name$(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_ip(serv) = DottedIP(UDPMsgIP(UDP_ServerStream)) UDP_Servertmp_port(serv) = UDPMsgPort(UDP_ServerStream) UDP_Servertmp_pl1(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_pl2(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_msg(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_pass(serv) = ReadByte(UDP_ServerStream) serv = serv + 1 If serv > MaxServer Exit EndIf EndIf Until ms <= MilliSecs() - WaitTime MaxServer = serv-1 Dim UDP_Server_name$(MaxServer) Dim UDP_Server_ip$(MaxServer) Dim UDP_Server_port(MaxServer) Dim UDP_Server_pl1(MaxServer) Dim UDP_Server_pl2(MaxServer) Dim UDP_Server_msg(MaxServer) Dim UDP_Server_pass(MaxServer) For i = 0 To MaxServer UDP_Server_name$(i) = UDP_Servertmp_name(i) UDP_Server_ip$(i) = UDP_Servertmp_ip(i) UDP_Server_port(i) = UDP_Servertmp_port(i) UDP_Server_pl1(i) = UDP_Servertmp_pl1(i) UDP_Server_pl2(i) = UDP_Servertmp_pl2(i) UDP_Server_msg(i) = UDP_Servertmp_msg(i) UDP_Server_pass(i) = UDP_Servertmp_pass(i) Next Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg(0) Dim UDP_Servertmp_pass(0) CloseUDPStream(UDP_ServerStream) Return MaxServer+1 End Function Function UDP_GetServerName$(ID) Return UDP_Server_name$(ID-1) End Function Function UDP_GetServerIP$(ID) Return UDP_Server_IP$(ID-1)+":"+UDP_Server_Port(ID-1) End Function Function UDP_GetServerPlayerNumber$(ID) Return UDP_Server_pl1(ID-1)+"/"+UDP_Server_pl2(ID-1) End Function Function UDP_GetServerMsg$(ID) Return UDP_Server_msg$(ID-1) End Function Function UDP_GetServerPass(ID) Return UDP_Server_pass(ID-1) End Function Function UDP_CountPlayers() count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 Next Return count End Function Function UDP_GetPlayerName$(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 If count = ID Return UDP_Player_Name(i) Next Return "" End Function Function UDP_GetPlayerPing(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 If count = ID Return UDP_Player_Ping(i) Next Return 0 End Function Function UDP_GetPlayerID(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 If count = ID Return i Next Return "" End Function Function UDP_IntIP(IP$) If Instr(IP$,".") <> 0 a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) If Instr(IP$,".") <> 0 a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) If Instr(IP$,".") <> 0 a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a4=Int(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4 End Function Function UDP_BroadcastIP$() CountHostIPs("") Local IP$ = DottedIP(HostIP(1)) Local Subnetmask$ = "255.255.255.0" Local IPDigits[3], SubnetDigits[3] Local pos, i For i = 0 To 3 pos = Instr( IP$, "." ) If pos > 0 IPDigits[i] = Left( IP$, pos -1 ) IP$ = Mid( IP$, pos +1 ) Else IPDigits[i] = IP$ EndIf Next For i = 0 To 3 pos = Instr( Subnetmask$, "." ) If pos > 0 SubnetDigits[i] = Left( Subnetmask$, pos -1 ) Xor $FF Subnetmask$ = Mid( Subnetmask$, pos +1 ) Else SubnetDigits[i] = Subnetmask$ Xor $FF EndIf Next For i = 0 To 3 IPDigits[i] = IPDigits[i] Or SubnetDigits[i] Next Return IPDigits[0] +"." +IPDigits[1] +"." +IPDigits[2] +"." +IPDigits[3] End Function Function UDP_AddCommand$(Name$) UDP_CommandLine = UDP_CommandLine$+Name$+UDP_CommandSign$ End Function Function UDP_GetCommand$() txt$ = Mid(UDP_CommandLine,1,Instr(UDP_CommandLine,UDP_CommandSign)-1) lentxt = Len(txt) UDP_Command = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Mid(txt$,Len(UDP_Command)+2,Len(txt$)) count = 0 oldPos = 1 intr = Instr(txt$,",") While intr > 0 count = count + 1 oldpos = intr + 1 intr = Instr(txt$,",",oldpos) Wend Dim UDP_Parameter(count) komma = 0 While Instr(txt$,",") > 0 UDP_Parameter(komma) = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Right(txt$,Len(txt$)-Len(UDP_Parameter(komma))-1) komma = komma + 1 Wend UDP_Parameter(komma) = txt$ UDP_ParameterNumber = count UDP_CommandLine = Mid(UDP_CommandLine,Instr(UDP_CommandLine,UDP_CommandSign)+1,Len(UDP_CommandLine)) End Function Function UDP_CreateLocalPlayer(Name$) place = UDP_GetFreePlace() If place = 0 Return 0 UDP_CreateNewPlayer(place,Name$,0,0,1) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place And UDP_Player_local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),1) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next Return place End Function ;---------- Function UDP_CreateNewPlayer(place,Name$,IP,Port,LocalPlayer=0) If loacalPlayer = 0 UDP_Player_Stream(place) = CreateUDPStream() If UDP_Player_Stream(place) = 0 Return 0 UDP_Player_Online(place) = 1 UDP_Player_Name$(place) = Name$ UDP_Player_Port(place) = Port UDP_Player_IP(place) = IP UDP_Player_Local(place) = localplayer Return 1 End Function Function UDP_GetFreePlace() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 0 Return i Next Return 0 End Function Function UDP_NewPlayerNumber(Anzahl) UDP_PlayerNumber = Anzahl Dim UDP_Player_Online(Anzahl),UDP_Player_Stream(Anzahl),UDP_Player_IP(Anzahl),UDP_Player_Port(Anzahl),UDP_Player_Name$(Anzahl) Dim UDP_Player_Local(Anzahl) Dim UDP_Player_TMsg.UDP_Msg(Anzahl),UDP_Player_SendNewMsg(Anzahl),UDP_Player_RecvMsg(Anzahl) Dim UDP_Player_Event(Anzahl) Dim UDP_Player_Ping(Anzahl),UDP_Player_PingMs(Anzahl) End Function Function UDP_EnCode$(txt$) Local ntxt$ For i = 1 To Len(txt) num = Asc(Mid(txt,i,1)) + UDP_EnCodeNumber ntxt$ = ntxt$ + Chr(num) Next Return ntxt End Function Function UDP_DeCode$(txt$) Local ntxt$ For i = 1 To Len(txt$) num = Asc(Mid(txt$,i,1)) - UDP_EnCodeNumber ntxt$ = ntxt$ + Chr(num) Next Return ntxt$ End Function ;---------- Und hier der Download : SimpleUDP.rar (~3,4 MB) mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
~Sry wegen DoppelPost, wenns da probleme gibt bitte den oberen Eintrag löschen, der war eh nicht so wichtig wie der heir ! ~
SimpleUDP - 1.5 ist nun da !!! Was ist neu ? Auch wenn es sich nicht viel anhört, steckte doch einiges an arbeit dahinter, an den "kleinigkeiten" sas ich gestern den ganzen tag und heute den ganzen mittag. Aber nun ist es Fertig, und die SimpleUDP ist jetzt in einem (fast) finalen zustand. Natürlich Wird es noch weitere änderungen geben, wenn mir was einfällt ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Das ganze was neu hinzugekommen ist ist nur im Beispiel "SimpleUDP, Chat.bb" zu finden, die anderen funktionieren zwr immer noch habe ich aber noch nicht bearbeitet ! So hier die Lib : Code: [AUSKLAPPEN] Const UDP_ServerPort = 8000 Const UDP_PingTime = 1000 Const UDP_Msg_nom = 1 Const UDP_Msg_new = 2 Const UDP_Msg_not = 3 Const UDP_Msg_pg1 = 4 Const UDP_Msg_pg2 = 5 Const UDP_Msg_kik = 6 Const UDP_Msg_end = 7 Const UDP_Msg_ask = 8 Const UDP_Msg_att = 9 Const UDP_Msg_at2 = 10 Const UDP_Msg_nam = 11 Const UDP_Msg_snc = 12 Const UDP_Msg_ban = 13 Const UDP_CommandSign$ = "§" Const UDP_EnCodeNumber = 4 Global UDP_Server,UDP_ServerStream,UDP_ServerName$ Global UDP_ServerMsg$ Global UDP_ServerPass$ Global UDP_PingMS Global UDP_PlayerNumber,UDP_PlayerID Global UDP_CommandLine$ = "" Global UDP_Command$,UDP_ParameterNumber Global UDP_SendNewMsg = 0,UDP_RecvMsg = 0 Global UDP_MsgID Global UDP_EventID,UDP_EventMsg$ Global UDP_Player_ChangeName Global UDP_BanTime Global UDP_PingTimeOut = 10000 Dim UDP_Player_Online(0),UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0),UDP_Player_Name$(0) Dim UDP_Player_local(0) Dim UDP_Player_TMsg.UDP_Msg(0),UDP_Player_SendNewMsg(0),UDP_Player_RecvMsg(0) Dim UDP_Player_Ping(0),UDP_Player_PingMs(0) Dim UDP_Player_Event(0) Dim UDP_Parameter$(0) Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg$(0) Dim UDP_Servertmp_pass(0) Dim UDP_Server_name$(0) Dim UDP_Server_ip$(0) Dim UDP_Server_port(0) Dim UDP_Server_pl1(0) Dim UDP_Server_pl2(0) Dim UDP_Server_msg$(0) Dim UDP_Server_pass(0) Type UDP_Msg Field msg$ Field ms Field ID Field From Field it End Type Type UDP_RecvMsg Field msg$ Field From Field att End Type Type UDP_Event Field typ Field ID Field msg$ End Type Type UDP_Ban Field IP$ Field time,ms End Type ;---------- Function UDP_HostGame(GameName$,PlayerName$,PlayerNumber=1) UDP_Server = 1 UDP_ServerStream = CreateUDPStream(UDP_ServerPort) UDP_NewPlayerNumber(PlayerNumber) UDP_PlayerID = 0 UDP_ServerName = GameName UDP_Player_Online(0) = 1 If PlayerName <> "" Then UDP_Player_Name$(0) = PlayerName$ Else UDP_Player_Name$(0) = "unnamed" EndIf dat = ReadFile("Banlist.ban") If dat <> 0 While Not Eof(dat) newban.UDP_ban = New UDP_ban newban\IP$ = ReadLine(dat) DebugLog newban\IP$ Wend EndIf Return (UDP_ServerStream <> 0) End Function Function UDP_JoinGame(GameIP$,PlayerName$,ServerPass$="",WaitTime=100) UDP_Server = 0 If Instr(GameIp,":") > 0 Then GameIp = Mid(GameIP,1,Instr(GameIP,":")-1) If Instr(GameIp,".") > 0 Then GameIP = UDP_IntIP(GameIP) UDP_ServerStream = CreateUDPStream() If UDP_ServerStream = 0 Then Return 0 If PlayerNAme$ = "" Then PlayerName$ = "unnamed" WriteByte(UDP_ServerStream,UDP_Msg_new) WriteString(UDP_ServerStream,PlayerName$) WriteString(UDP_ServerStream,UDP_Encode(ServerPass)) SendUDPMsg(UDP_ServerStream,GameIP,UDP_ServerPort) Connection = 0 WaitMs = MilliSecs() + WaitTime While WaitMs > MilliSecs() If RecvUDPMsg(UDP_ServerStream) Then byte = ReadByte(UDP_ServerStream) If byte = UDP_Msg_new Then If UDPMsgIP(UDP_ServerStream) = GameIP Then UDP_PlayerID = ReadInt(UDP_ServerStream) UDP_PlayerNumber = ReadInt(UDP_ServerStream) UDP_NewPlayerNumber(UDP_PlayerNumber) UDP_Player_Port(0) = UDP_ServerPort UDP_Player_IP(0) = GameIP UDP_ServerMsg$ = ReadString(UDP_ServerStream) While Not Eof(UDP_ServerStream) TmpPlayerID = ReadInt(UDP_ServerStream) UDP_Player_Online(tmpPlayerID) = 1 UDP_Player_Name$(tmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = ReadByte(UDP_ServerStream) tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = tmpPlayerID Wend UDP_Player_Online(UDP_PlayerID) = 1 UDP_Player_Name$(UDP_PlayerID) = PlayerName$ Connection = 1 Exit EndIf EndIf If byte = UDP_Msg_ban Then Connection = UDP_Msg_ban UDP_BanTime = ReadInt(UDP_ServerStream) EndIf EndIf Wend If Connection Then UDP_Player_Stream(0) = CreateUDPStream() If UDP_Player_Stream(0) = 0 Then Return 0 Return Connection End Function Function UDP_Update(LoginBlock=0) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then If UDP_Player_SendNewMsg(i) = 1 Then get = 0 tmp.UDP_Msg = Null For tmp_.UDP_Msg = Each UDP_Msg If tmp_\ID = i Then tmp = tmp_ : Exit Next If tmp <> Null Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(i) = 0 UDP_Player_TMsg(i) = tmp UDP_Player_RecvMsg(i) = 1 Else UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf EndIf If UDP_Player_RecvMsg(i) = 1 Then tmp.UDP_Msg = UDP_Player_TMsg(i) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Then Delete tmp UDP_Player_SendNewMsg(i) = 1 UDP_Player_RecvMsg(i) = 0 EndIf EndIf EndIf Else For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then Delete tmp Next UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf Next For ban.UDP_Ban = Each UDP_ban If ban\time > 0 Then If MilliSecs()-ban\ms => ban\time Then Delete ban EndIf EndIf Next If UDP_PingMs <= MilliSecs() Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_PingMs(i) = 0 And UDP_Player_Local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_pg1) For j = 1 To UDP_PlayerNumber If UDP_Player_Online(j) = 1 Then WriteInt(UDP_Player_Stream(i),j) WriteInt(UDP_Player_Stream(i),UDP_PLayer_Ping(j)) EndIf Next SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) UDP_Player_PingMs(i) = MilliSecs() EndIf Next UDP_PingMs = MilliSecs() + UDP_PingTime EndIf For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then If i > 0 Then If UDP_Player_PingMs(i) > 0 Then If (MilliSecs()-UDP_Player_PingMs(i)) > UDP_PingTimeOut Then UDP_KickPlayer(i) EndIf EndIf EndIf EndIf Next While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) ToID = ReadInt(UDP_serverStream) If ToID = -1 Or ToID = 0 Then tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 If toID = -1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> TmpID Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),TmpID) WriteString(UDP_Player_stream(i),tmpr\msg) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf Else WriteByte(UDP_Player_Stream(ToID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ToID),TmpID) WriteString(UDP_Player_stream(ToID),tmpr\msg) SendUDPMsg(UDP_Player_stream(toID),UDP_Player_IP(ToID),UDP_player_Port(toID)) EndIf Case UDP_Msg_new place = UDP_GetFreePlace() New_Name$ = ReadString(UDP_ServerStream) New_Pass$ = ReadString(UDP_ServerStream) New_Port% = UDPMsgPort(UDP_ServerStream) New_IP% = UDPMsgIP(UDP_ServerStream) New_Pass = UDP_DeCode(New_Pass) If LoginBlock = 0 And New_Pass = UDP_ServerPass Then If place > 0 Then banned.UDP_ban = Null For ban.UDP_ban = Each UDP_ban If ban\IP$ = DottedIP(New_IP) Then banned = ban : Exit Next If banned = Null player_accept = UDP_CreateNewPlayer(place,New_Name$,New_IP,New_Port) If player_accept > 0 Then WriteByte(UDP_Player_Stream(place),UDP_Msg_new) WriteInt(UDP_Player_Stream(place),place) WriteInt(UDP_Player_Stream(place),UDP_PlayerNumber) WriteString(UDP_Player_Stream(place),UDP_ServerMsg$) For i = 0 To UDP_PlayerNumber If place <> i Then If UDP_Player_Online(i) = 1 Then WriteInt(UDP_Player_Stream(place),i) WriteString(UDP_Player_Stream(place),UDP_Player_Name(i)) WriteByte(UDP_Player_Stream(place),UDP_Player_Local(i)) EndIf EndIf Next SendUDPMsg(UDP_Player_Stream(place),UDP_Player_IP(place),UDP_Player_Port(place)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place Then WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),0) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = place UDP_CheckNames() EndIf Else If banned\time > 0 Then MS = banned\time - (MilliSecs()-banned\ms) Else MS = 0 EndIf WriteByte(UDP_ServerStream,UDP_Msg_ban) WriteInt(UDP_ServerStream,MS) SendUDPMsg(UDP_ServerStream,New_IP,New_Port) EndIf EndIf EndIf Case UDP_Msg_pg1 TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 Then UDP_Player_Ping(TmpID) = MilliSecs() - UDP_Player_PingMs(TmpID) UDP_Player_PingMs(TmpID) = 0 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_pg2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_PLayer_Port(TmpID)) EndIf Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 Then UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID CloseUDPStream(UDP_Player_Stream(TmpID)) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),TmpID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next EndIf Case UDP_Msg_ask IP = UDPMsgIP(UDP_ServerStream) Port = UDPMsgPort(UDP_ServerStream) count = UDP_CountPlayers() WriteByte(UDP_ServerStream,UDP_Msg_ask) WriteString(UDP_ServerStream,UDP_ServerName$) WriteInt(UDP_ServerStream,count) WriteInt(UDP_ServerStream,UDP_PlayerNumber) WriteString(UDP_ServerStream,UDP_ServerMsg) WriteByte(UDP_ServerStream,(UDP_ServerPass<>"")) SendUDPMsg(UDP_ServerStream,Ip,Port) Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) toID = ReadInt(UDP_ServerStream) ;UDP_Player_Msg(TmpID) = ReadString(UDP_ServerStream) If toID = -1 Or ToID = 0 Then tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_ServerStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" And toID = -1 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And tmpID <> i Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = TmpID If c = 0 Then UDP_Player_SendNewMsg(i) = 1 UDP_Player_TMsg(i) = tmp EndIf Next EndIf Else If tmpr\msg <> "" Then WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = toID Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = toID tmp\From = TmpID If c = 0 Then UDP_Player_SendNewMsg(toID) = 1 UDP_Player_TMsg(toID) = tmp EndIf EndIf Case UDP_Msg_at2 TmpID = ReadInt(UDP_ServerStream) Delete UDP_Player_TMsg(tmpID) UDP_Player_SendNewMsg(TmpID) = 1 UDP_Player_RecvMsg(TmpID) = 0 Case UDP_Msg_nam tmpPlayerID = ReadInt(UDP_ServerStream) oldNam$ = UDP_Player_Name(tmpPlayerID) UDP_Player_Name(tmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_ChangeName = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 And i <> tmpPlayerID Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nam) WriteInt(UDP_Player_Stream(i),tmpPlayerID) WriteString(UDP_Player_Stream(i),UDP_Player_Name(tmpPlayerID)) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_nam tmpe\ID = tmpPlayerID tmpe\msg = oldNam$ UDP_CheckNames() End Select Wend ElseIf UDP_Server = 0 If UDP_Player_SendNewMsg(0) = 1 Then tmp.UDP_Msg = First UDP_Msg If tmp <> Null Then WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(0) = 0 UDP_Player_TMsg(0) = tmp UDP_Player_RecvMsg(0) = 1 Else UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf If UDP_Player_RecvMsg(0) = 1 Then tmp.UDP_Msg = UDP_Player_TMsg(0) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Then Delete tmp UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf EndIf While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 Case UDP_Msg_new TmpPlayerID = ReadInt(UDP_ServerStream) LocalPlayer = ReadByte(UDP_serverStream) UDP_Player_Online(TmpPlayerID) = 1 UDP_Player_Name$(TmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = LocalPlayer tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = tmpPlayerID Case UDP_Msg_pg1 While Not Eof(UDP_ServerStream) TmpID = ReadInt(UDP_ServerStream) UDP_Player_Ping(TmpID) = ReadInt(UDP_ServerStream) Wend WriteByte(UDP_Player_Stream(0),UDP_Msg_pg1) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) UDP_Player_pingms(0) = MilliSecs() Case UDP_Msg_pg2 UDP_Player_ping(0) = MilliSecs() - UDP_Player_pingms(0) Case UDP_Msg_kik TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_kik tmpe\ID = tmpID Case UDP_Msg_ban TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_ban tmpe\ID = tmpID tmpe\msg = ReadInt(UDP_ServerStream) Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" Then WriteByte(UDP_Player_Stream(0),UDP_Msg_at2) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf Case UDP_Msg_at2 Delete UDP_Player_TMsg(0) UDP_Player_SendNewMsg(0) = 1 UDP_Player_RecvMsg(0) = 0 Case UDP_Msg_Nam,UDP_Msg_snc tmpPlayerID = ReadInt(UDP_ServerStream) oldNam$ = UDP_Player_Name(tmpPlayerID) UDP_Player_Name(tmpPlayerID) = ReadString(UDP_ServerStream) tmpe.UDP_Event = New UDP_Event tmpe\typ = byte tmpe\ID = tmpPlayerID tmpe\msg = oldNam$ End Select Wend EndIf End Function Function UDP_SendMsg(Msg$,ID=-1) If UDP_Server = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),0) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next Else WriteByte(UDP_Player_Stream(ID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ID),0) WriteString(UDP_Player_stream(ID),Msg$) SendUDPMsg(UDP_Player_stream(ID),UDP_Player_IP(ID),UDP_player_Port(ID)) EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),-1) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) Else WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),ID) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf EndIf EndIf End Function Function UDP_SendMsg_Att(msg$,ID=-1) If UDP_Server = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = 0 If c = 0 Then UDP_Player_SendNewMsg(i) = 1 EndIf Next Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = ID Then c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = 0 If c = 0 Then UDP_Player_SendNewMsg(ID) = 1 EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = -1 tmp\From = UDP_PlayerID If c = 0 Then UDP_Player_SendNewMsg(0) = 1 Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = UDP_PlayerID If c = 0 Then UDP_Player_SendNewMsg(ID) = 1 EndIf EndIf EndIf End Function Function UDP_SendLocalMsg(msg$,LocalID) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),LocalID) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf End Function Function UDP_SendLocalMsg_att(msg$,LocalID) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = LocalID If c = 0 Then UDP_Player_SendNewMsg(i) = 1 EndIf Next EndIf End Function Function UDP_GetMsg$() tmp.UDP_RecvMsg = First UDP_RecvMsg If tmp <> Null Then UDP_MsgID= tmp\From tmpMsg$ = tmp\msg Delete tmp Return tmpmsg$ EndIf Return "" End Function Function UDP_KickPlayer(ID) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Kik) WriteInt(UDP_Player_Stream(i),ID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next UDP_Player_Online(ID) = 0 UDP_Player_Port(ID) = 0 UDP_Player_IP(ID) = 0 UDP_Player_PingMs(ID) = 0 CloseUDPStream(UDP_Player_Stream(ID)) tmp.UDP_Event = New UDP_Event tmp\typ = UDP_Msg_kik tmp\ID = ID EndIf End Function Function UDP_BanPlayer(flag$,ms=0) If UDP_Server <> 1 Then Return Local banIP$ = "" Local banID = 0 If DottedIP(UDP_IntIP(flag$)) = flag$ Then For i = 1 To Len(flag$) B$ = Mid(Flag$,i,1) count = count + 1 If B$ = "." Then count = 0 If count => 4 Exit banIP$ = banIP$ + B$ Next ElseIf Int(flag$) = Flag$ If flag$ => 1 And Flag$ <= UDP_PlayerNumber Then BanIP$ = DottedIP(UDP_Player_IP(Int(flag))) BanID = Int(Flag) EndIf Else For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then If Lower(UDP_Player_Name(i)) = Lower(flag$) Then BanIP$ = DottedIP(UDP_Player_IP(i)) BanID = Int(flag) Exit EndIf EndIf Next EndIf If BanIP$ = "" Then Return newban.UDP_ban = New UDP_ban newban\IP$ = BanIP$ If ms > 0 Then newban\time = ms newban\ms = MilliSecs() Else dat = WriteFile("Banlist.ban") SeekFile(dat,FileSize("Banlist.ban")) WriteLine(dat,BanIP$) EndIf If BanID > 0 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_ban) WriteInt(UDP_Player_Stream(i),BanID) WriteInt(UDP_Player_Stream(i),ms) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next UDP_Player_Online(banID) = 0 UDP_Player_Port(banID) = 0 UDP_Player_IP(banID) = 0 UDP_Player_PingMs(banID) = 0 CloseUDPStream(UDP_Player_Stream(BanID)) tmp.UDP_Event = New UDP_Event tmp\typ = UDP_Msg_ban tmp\ID = BanID tmp\msg = ms EndIf End Function Function UDP_End() If UDP_Server = 1 Then For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),0) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next Delay 50 If UDP_ServerStream <> 0 CloseUDPStream(UDP_ServerStream) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 Then CloseUDPStream(UDP_Player_Stream(i)) EndIf Next Else If UDP_ServerStream <> 0 And UDP_Player_Stream(0) <> 0 Then WriteByte(UDP_Player_Stream(0),UDP_Msg_End) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) Delay 50 CloseUDPStream(UDP_Player_Stream(0)) CloseUDPStream(UDP_ServerStream) EndIf EndIf End Function Function UDP_GetEvent() tmp.UDP_Event = First UDP_Event If tmp <> Null Then UDP_EventID = tmp\ID UDP_EventMsg$ = tmp\msg$ typ = tmp\typ Delete tmp Return typ EndIf Return 0 End Function Function UDP_ChangeName(Name$,ID=0) If UDP_Server = 1 Then oldNam$ = UDP_Player_Name(ID) UDP_Player_Name$(ID) = Name$ UDP_CheckNames() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nam) WriteInt(UDP_Player_Stream(i),ID) WriteString(UDP_Player_Stream(i),Name$) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_nam tmpe\ID = ID tmpe\msg = oldNam$ Else oldNam$ = UDP_Player_Name(UDP_PlayerID) UDP_Player_Name$(UDP_PlayerID) = Name$ WriteByte(UDP_ServerStream,UDP_Msg_nam) WriteInt(UDP_ServerStream,UDP_PlayerID) WriteString(UDP_ServerStream,Name$) SendUDPMsg(UDP_ServerStream,UDP_Player_IP(0),UDP_ServerPort) tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_nam tmpe\ID = UDP_PlayerID tmpe\msg = oldNam$ EndIf End Function Function UDP_AddCommand$(Name$) UDP_CommandLine = UDP_CommandLine$+Name$+UDP_CommandSign$ End Function Function UDP_GetCommand$() txt$ = Mid(UDP_CommandLine,1,Instr(UDP_CommandLine,UDP_CommandSign)-1) lentxt = Len(txt) UDP_Command = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Mid(txt$,Len(UDP_Command)+2,Len(txt$)) count = 0 oldPos = 1 intr = Instr(txt$,",") While intr > 0 count = count + 1 oldpos = intr + 1 intr = Instr(txt$,",",oldpos) Wend Dim UDP_Parameter(count) komma = 0 While Instr(txt$,",") > 0 UDP_Parameter(komma) = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Right(txt$,Len(txt$)-Len(UDP_Parameter(komma))-1) komma = komma + 1 Wend UDP_Parameter(komma) = txt$ UDP_ParameterNumber = count UDP_CommandLine = Mid(UDP_CommandLine,Instr(UDP_CommandLine,UDP_CommandSign)+1,Len(UDP_CommandLine)) End Function Function UDP_CreateLocalPlayer(Name$) If UDP_Server = 1 Then place = UDP_GetFreePlace() If place = 0 Return 0 UDP_CreateNewPlayer(place,Name$,0,0,1) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place And UDP_Player_local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),1) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next Return place EndIf Return -1 End Function Function UDP_SetServerMsg(ServerMsg$) If UDP_Server = 1 Then UDP_ServerMsg$ = ServerMsg$ EndIf End Function Function UDP_SetServerPass(ServerPass$) If UDP_Server = 1 Then UDP_ServerPass = ServerPass EndIf End Function Function UDP_CountServers(MaxServer=100,WaitTime=500) Dim UDP_Servertmp_name$(MaxServer) Dim UDP_Servertmp_ip$(MaxServer) Dim UDP_Servertmp_port(MaxServer) Dim UDP_Servertmp_pl1(MaxServer) Dim UDP_Servertmp_pl2(MaxServer) Dim UDP_Servertmp_msg(MaxServer) Dim UDP_Servertmp_pass(MaxServer) IP = UDP_IntIP(UDP_BroadcastIP()) UDP_ServerStream = CreateUDPStream() WriteByte(UDP_ServerStream,UDP_Msg_ask) SendUDPMsg(UDP_ServerStream,IP,UDP_ServerPort) ms = MilliSecs() serv = 0 Repeat If RecvUDPMsg(UDP_ServerStream) Then If ReadByte(UDP_ServerStream) = UDP_Msg_ask Then UDP_Servertmp_name$(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_ip(serv) = DottedIP(UDPMsgIP(UDP_ServerStream)) UDP_Servertmp_port(serv) = UDPMsgPort(UDP_ServerStream) UDP_Servertmp_pl1(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_pl2(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_msg(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_pass(serv) = ReadByte(UDP_ServerStream) serv = serv + 1 If serv > MaxServer Then Exit EndIf EndIf Until ms <= MilliSecs() - WaitTime MaxServer = serv-1 Dim UDP_Server_name$(MaxServer) Dim UDP_Server_ip$(MaxServer) Dim UDP_Server_port(MaxServer) Dim UDP_Server_pl1(MaxServer) Dim UDP_Server_pl2(MaxServer) Dim UDP_Server_msg(MaxServer) Dim UDP_Server_pass(MaxServer) For i = 0 To MaxServer UDP_Server_name$(i) = UDP_Servertmp_name(i) UDP_Server_ip$(i) = UDP_Servertmp_ip(i) UDP_Server_port(i) = UDP_Servertmp_port(i) UDP_Server_pl1(i) = UDP_Servertmp_pl1(i) UDP_Server_pl2(i) = UDP_Servertmp_pl2(i) UDP_Server_msg(i) = UDP_Servertmp_msg(i) UDP_Server_pass(i) = UDP_Servertmp_pass(i) Next Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg(0) Dim UDP_Servertmp_pass(0) CloseUDPStream(UDP_ServerStream) Return MaxServer+1 End Function Function UDP_GetServerName$(ID) Return UDP_Server_name$(ID-1) End Function Function UDP_GetServerIP$(ID) Return UDP_Server_IP$(ID-1)+":"+UDP_Server_Port(ID-1) End Function Function UDP_GetServerPlayerNumber$(ID) Return UDP_Server_pl1(ID-1)+"/"+UDP_Server_pl2(ID-1) End Function Function UDP_GetServerMsg$(ID) Return UDP_Server_msg$(ID-1) End Function Function UDP_GetServerPass(ID) Return UDP_Server_pass(ID-1) End Function Function UDP_CountPlayers() count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 Next Return count End Function Function UDP_GetPlayerName$(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 If count = ID Then Return UDP_Player_Name(i) Next Return "" End Function Function UDP_GetPlayerPing(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 If count = ID Then Return UDP_Player_Ping(i) Next Return 0 End Function Function UDP_GetPlayerID(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 If count = ID Then Return i Next Return "" End Function Function UDP_IntIP(IP$) If Instr(IP$,".") <> 0 Then a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) If Instr(IP$,".") <> 0 Then a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) If Instr(IP$,".") <> 0 Then a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a4=Int(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4 End Function Function UDP_BroadcastIP$() CountHostIPs("") Local IP$ = DottedIP(HostIP(1)) Local Subnetmask$ = "255.255.255.0" Local IPDigits[3], SubnetDigits[3] Local pos, i For i = 0 To 3 pos = Instr( IP$, "." ) If pos > 0 Then IPDigits[i] = Left( IP$, pos -1 ) IP$ = Mid( IP$, pos +1 ) Else IPDigits[i] = IP$ EndIf Next For i = 0 To 3 pos = Instr( Subnetmask$, "." ) If pos > 0 Then SubnetDigits[i] = Left( Subnetmask$, pos -1 ) Xor $FF Subnetmask$ = Mid( Subnetmask$, pos +1 ) Else SubnetDigits[i] = Subnetmask$ Xor $FF EndIf Next For i = 0 To 3 IPDigits[i] = IPDigits[i] Or SubnetDigits[i] Next Return IPDigits[0] +"." +IPDigits[1] +"." +IPDigits[2] +"." +IPDigits[3] End Function Function UDP_EnCode$(txt$) Local ntxt$ For i = 1 To Len(txt) num = Asc(Mid(txt,i,1)) + UDP_EnCodeNumber ntxt$ = ntxt$ + Chr(num) Next Return ntxt End Function Function UDP_DeCode$(txt$) Local ntxt$ For i = 1 To Len(txt$) num = Asc(Mid(txt$,i,1)) - UDP_EnCodeNumber ntxt$ = ntxt$ + Chr(num) Next Return ntxt$ End Function ;---------- Function UDP_CreateNewPlayer(place,Name$,IP,Port,LocalPlayer=0) If loacalPlayer = 0 Then UDP_Player_Stream(place) = CreateUDPStream() If UDP_Player_Stream(place) = 0 Then Return 0 UDP_Player_Online(place) = 1 UDP_Player_Name$(place) = Name$ UDP_Player_Port(place) = Port UDP_Player_IP(place) = IP UDP_Player_Local(place) = localplayer Return 1 End Function Function UDP_GetFreePlace() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 0 Then Return i Next Return 0 End Function Function UDP_NewPlayerNumber(Anzahl) UDP_PlayerNumber = Anzahl Dim UDP_Player_Online(Anzahl),UDP_Player_Stream(Anzahl),UDP_Player_IP(Anzahl),UDP_Player_Port(Anzahl),UDP_Player_Name$(Anzahl) Dim UDP_Player_Local(Anzahl) Dim UDP_Player_TMsg.UDP_Msg(Anzahl),UDP_Player_SendNewMsg(Anzahl),UDP_Player_RecvMsg(Anzahl) Dim UDP_Player_Event(Anzahl) Dim UDP_Player_Ping(Anzahl),UDP_Player_PingMs(Anzahl) End Function Function UDP_CheckNames() For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then count = 1 If Instr(UDP_Player_Name(i),"(") And Instr(UDP_Player_Name(i),")") Then txt2$ = Left(UDP_Player_Name(i),Instr(UDP_Player_Name(i),"(")-1) Else txt2$ = UDP_Player_Name(i) EndIf For j = i To UDP_PlayerNumber If UDP_Player_Online(j) = 1 And UDP_Player_Local(j) = 0 And i <> j Then If Instr(UDP_Player_Name(j),"(") And Instr(UDP_Player_Name(j),")") Then txt$ = Left(UDP_Player_Name(j),Instr(UDP_Player_Name(j),"(")-1) Else txt$ = UDP_Player_Name(j) EndIf If txt = txt2 Then count2 = Int(Mid(UDP_Player_Name(j),Instr(UDP_Player_Name(j),"(")+1,Instr(UDP_Player_Name(j),")")-1)) If count2 > count Then count = count2 If UDP_Player_Name(j) <> txt+"("+count+")" Then oldNam$ = UDP_Player_Name(j) UDP_Player_Name(j) = txt+"("+count+")" UDP_Player_ChangeName = 1 For k = 1 To UDP_PlayerNumber If UDP_Player_Online(k) = 1 And UDP_Player_Local(k) = 0 Then WriteByte(UDP_Player_Stream(k),UDP_Msg_snc) WriteInt(UDP_Player_Stream(k),j) WriteString(UDP_Player_Stream(k),UDP_Player_Name(j)) SendUDPMsg(UDP_Player_Stream(k),UDP_Player_IP(k),UDP_Player_Port(k)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_snc tmpe\ID = j tmpe\msg = oldNam$ EndIf count = count + 1 EndIf EndIf Next EndIf Next End Function ;---------- Und der Download : SimpleUDP.rar Hier nochmal einen kleinen Screen von einer sitzung : ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich finde dein Lib cool. leider wollen die server Demos bei mir nicht recht. Ich bekomme immer ein out of bone. Irgen ein Arry das nicht funktioniert. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mhm... Kannst du das Beispiel, bei dem der Fehler auftritt mal in Blitzbasic mit dem Debugger ausführen und mir villeicht sagen in welcher zeile der Fehler auftritt ?
Ich habe alle Beispiele hier bei meiner Freundin auf dem pc getestet, aber bei keinem hatte ich einen fehler... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
ja das iss nu ja komisch. Heute morgen nochmal alle demos durchprobiert. Alle laufen. Der einzige unterschied iss , das ich gestern den ganzen Tag lang schon mit UDP uns TCP rumgemacht habe. Ich werde Heute abend nochmal versuchen. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
habe jetzmal wider versucht, und tada ...... ich habe den Lobby Server gestartet........ danach auf dem gleichen rechner einen Client und als IP 127.0.0.1 angegeben. Die Funktion UDP_JoinGame() verusacht einen fehler. BlitzBasic: [AUSKLAPPEN] Function UDP_JoinGame(GameIP$,PlayerName$,ServerPass$="",WaitTime=100) Jetzt wo ich mir das ganze nochmal anschaue ... iss ja die Falsche funktion ..... irgendwie nicht die die zurm Denmo Verzeichniss gehört. |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ja daran lag es , die Simple UDP.bb war älter als die Demos. Ich habe jetzt ein UDP_Verion angehängt und gebe es vorsichtshalber aus. gruss tft PS: Warum kann ich mit diesem (%&*ç"*ç(/ç Bei Texten die länger werden nie richtig editieren. nach jedem Buchstaben scrollt das Fenster hoch. Und ich sehe nicht mer was ich schreibe. |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
@tft : Gut das Problem scheint gelöst zu sein...
Und das mit dem Hochscrollen hatte ich auch schonmal... was hatte ich da nochmal gemacht ? Ich glaub cookies gelöscht oder so... Musste mal ausprobieren ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Passiert afaik nur mit IE ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Apollo30 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich habe das ganze bei mir zum laufen gebracht und es geht einmal sogar bei mir.
Nur habe ich jetzt ein Problem ich habe von dem Code her das Beispiel SimpleUDP, Action.exe genommen. Das ganze ging mit 60 frames auch bei mir (localhost) wenn ich das nun über Hamachi laufen lasse bekomme ich allerdings nur etwa 3Frames Liegt das nun an Hamachi oder ist das ganze immer so langsam. |
||
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group