Brauche Hilfe mit Direct Play (Internet)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Apprauuuu

Betreff: Brauche Hilfe mit Direct Play (Internet)

BeitragSo, Sep 05, 2004 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich wollte in mein Spiel Einen Onlinemodus über Direct Play einbauen....
Aber irgendwie will das nicht alles nicht so ganz funktionieren....


Hier ist der Link:
http://home.arcor.de/nein2/weltraumspiel.exe

Der Link enthält eine exe-Datei der letzten Spielversion (somit auch das komplette Spiel) und den Code, wo ich versucht habe das Spiel internetkompatibel zu bekommen, was aber nicht ganz gelungen ist....
(die Datei mit dem Code heißt internet.bb)

Ich hoffe einer kann die Übersicht bei dem Code finden und mir zur Hilfe eilen....

PS: Die Spieler könenn connecten, aber irgendwie klappt das mit dem Nachrichten empfangen/senden nicht....
(er erkennt aber, wenn der andere Spieler raus geht...)
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)
 

Jaramia

BeitragSo, Sep 05, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
DirectPlay ist generell mist. Nimm für sowas lieber UDP
alu.art-FX.org

Hubsi

BeitragSo, Sep 05, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch eine schöne Antwort Smile

Ich habs mir gerade mal gesaugt (nimm wenigstens die Exe raus um den Download zu verkleinern), aber ohne eine größere Suchaktion werd ich wohl die Zeilen zum empfangen und senden einer Nachricht nicht finden können. Also bitte rauskopieren und hier ins Forum stellen. So werden sich auch sicher mehr Leute um Dein Problem bemühen und Du weißt ja: Viele Augen sehen mehr als zwei Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Apprauuuu

BeitragSo, Sep 05, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst ja die Suchfunktion benutzen Very Happy
Aber da ich ja will, dass mir einer hilft werde ich es euch mal so einfach wie möglich acmhen und cshreibe alles raus....
(habe nur den ganzen code zum DL gestellt, da es vileleicht irgendwie im Zusammenhang nen Fehler geben könnte oder so was Shocked )


Hier ersdt mal das erstellen einer Verbindung zum Gegenspieler (das ist ein 2-Spieler-spiel): (hab das unwichtige rausgestrichen, was man nicht für den internetmodus wissen muss, damit man schneller erkennt was sache ist...):

Code: [AUSKLAPPEN]
Function internetmenü()
Repeat
Cls
Text 400, 300, "(1) Spiel erstellen"
Text 400, 400, "(2) Einem erstellten Spiel beitreten"


If KeyHit(1) Then End
If KeyHit(2) Then
online=1
multiplayer = 1
Exit
EndIf
If KeyHit(3) Then
multiplayer = 1
online=2
Exit
EndIf
Delay 100

Flip
Until KeyHit(1)
Cls
If online=1
netgame=HostNetGame("LOL³-Fighters")
If netgame=2
myid=CreateNetPlayer("host")
Repeat
Cls
Text 50, 50, "warten...."
Flip
joined=RecvNetMsg()
If KeyHit(1)
StopNetGame
online=0
Exit
EndIf
If joined=True Then Exit
Forever
Else
Color 255,255,255
Text 3, 310, "Das Spiel konnte nicht erstellt werden."
Color 0,0,0
WaitKey
FlushKeys
online=0
EndIf
EndIf
If online=2
Color 255,255,255
HostIP$=Input("IP des Hosts: ")
Color 0,0,0
netgame=JoinNetGame ("LOL³-Fighters",HostIP$)
If netgame=1
myid=CreateNetPlayer("joiner")
Else
SetBuffer FrontBuffer()
Color 255,255,255
Text 3, 310, "Das Spiel konnte nicht erstellt werden."
Color 0,0,0
WaitKey
FlushKeys
online=0
EndIf
EndIf
Flip
multiplayer()
End Function

Es kann sein, dass es ein wernig umständlich geproggt ist, aber das kann ich ändern, wenn es mal funzt...



Hier jetzt, wo er alles empfängt (steht am anfang der function multiplayer und multiplayer ist die function, wo das komplette spiel abläuft...)

Code: [AUSKLAPPEN]
Function internet_nachrichtenempfang()
If online>0
nachricht=RecvNetMsg()
If nachricht=1 Then
typ=NetMsgType()
Select typ
Case 2    ; Hauptschiff y
y_koordinate = NetMsgData()
Case 3    ; Schuss feuer
schiessen = NetMsgData()
Case 4    ; Schuss y
schuss = First schuss
schuss\y=NetMsgData()
Case 5    ; Schiff bauen
bauknopf=NetMsgData()
Case 6    ; Schiff y
schiff_1 = First raumschiffe
schiff_1\y = NetMsgData()
Case 7    ; Hauptschiff y 2
y_koordinate_2 = NetMsgData()
Case 8    ; Schuss feuer 2
schiessen_2 = NetMsgData()
Case 9    ; Schuss y 2
schuss_2 = First schuss_2
schuss_2\y = NetMsgData()
Case 10   ; Schiff bauen 2
bauknopf_2 = NetMsgData()
Case 11   ; Schiff y 2
schiff_2 = First raumschiffe_2
schiff_2\y = NetMsgData()
Case 101
StopNetGame
Print "Ihr Gegner hat das Spiel verlassen."
Delay 1000
End
End Select
EndIf
EndIf
FlushKeys
End Function





Und hier ist einfach mal ein Fall, wo was gesendet werden muss:
Code: [AUSKLAPPEN]
Function bewegung()
If multiplayer = 1 Or singleplayer = 1 Then
If online <> 2 Then
unten = KeyDown(31)
oben = KeyDown(17)
EndIf
EndIf

If oben = True Then
y_koordinate = y_koordinate - 5
If online=1 Then SendNetMsg 2, y_koordinate, myid, 0, 0
EndIf
If unten = True Then
y_koordinate = y_koordinate + 5
If online=1 Then SendNetMsg 2, y_koordinate, myid, 0, 0
EndIf
DrawImage held, x_koordinate, y_koordinate
End Function


Ich weiß, dass das bier wieder schlecht gecodet ist und ich werde es auch ändern, dass der die Position bei jedem Durchlauf schickt, aber das änder ich auch erst mal, wenn es mal funktionieren will....



Zu guter letzt noch die einiegermaßen unnötig zu zeigende funvtion multiplayer, nur um zu zeigen, dass das Nachrichten empfangen am Start steht....
Code: [AUSKLAPPEN]
Function multiplayer()
Repeat
Cls
If online > 0 Then internet_nachrichtenempfang()

bewegung()
bewegung2()
aussenwaende()
aussenwaende2()
schüsse()
schüsse_fliegen
schüsse_fliegen2()
schüsse2()
zielsuchschuss_bewegung()
zielsuchschuss_bewegung_2()
lebensanzeige_spieler1()
lebensanzeige_spieler2()
geld2()
geld()
raumschiffe_fliegen2()
türme()
türme_2()
raumschiffe_bauen()
raumschiffe_fliegen()
raumschiffe_bauen2()
kollission()
update_explosion()
update_explosion_2()
Flip
If KeyHit(1) Then End
Until KeyHit(1)
End Function


Ich hoffe mir kann jemand helfen Smile
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Hubsi

BeitragMo, Sep 06, 2004 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Puh, eine ganze Menge Code Very Happy

Bin mir nicht sicher ob solche Sonderzeichen hier funzen:Code: [AUSKLAPPEN]
...HostNetGame("LOL³...
Mehr kann ich des Chaos nicht ersehen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Apprauuuu

BeitragMo, Sep 06, 2004 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm....
Schade...
Ist halt nen einiegermaßen fast fertiges Spiel..... Sad


Aber connecten kann der ja, weshalb meiner Meinung nach die Sopnderzeichen funktionieren sollten, nur der hat Probleme beim Senden und empfangen....

Oder kann der Spielname auch das beinträchigen....


Mal ne Frage bei Rande: (oder auch 2 Shocked )
Hat Cs2d einen Server oder gibt es einen Befehl, dass der alle Spiele anzeigt ??
Wenn ja welchen??

2.) Bei deinem Spiel Bastard kann ja die Score ins Internet geschickt werdenb, sodass die auf die Highscore deiner Seite kommt....

Könntest du auch mal nen kleines Überblick geben, wie das funktioniert ??
Würde so was ähnliches gerne bei meinem Spiel machen, da wenn der Onlinemodus funt, die Stats (Siege und Niederlagen...) auf dem Rechner gespeichert werden sollen und dann nach jedem Onlinespiel an den Server geschickt werden sollen, sodass es ne Highscore der besten Spieler gibt....
Ich finde nämlich, dass das ne gute alternative zu nem Spielserver ist, da der einfach zu teuetr für mich wäre.... Confused
(ist das teilweise mit my SQL gemacht??)
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Hubsi

BeitragMo, Sep 06, 2004 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist diese Funktion:Code: [AUSKLAPPEN]
Function ShareScore(url$,script$,par$,port=80)
   is_online=OpenTCPStream(url$,port)
   If is_online
      req$=script$+par$
      ; Request an das Serverscript schicken
      WriteLine is_online,"GET /"+req$+" HTTP/1.1"
      WriteLine is_online,"Host: "+url$
      WriteLine is_online,"User-Agent: score"
      WriteLine is_online,"Accept: */*"
      WriteLine is_online,""   
      CloseTCPStream is_online
      Return 1
   Else
      Return 0
   EndIf
End Function
Ist von BruZard, soweit ich das noch im Kopf habe (Bannt mich wenn ich falsch liege Very Happy )
Auf dem Server benötigst Du noch folgendes php-Script:Zitat:
<?
$newname=$HTTP_GET_VARS["user"];
$newpoint=$HTTP_GET_VARS["score"];
$newname.="\n";
$newpoint.="\n";
$name=array();
$point=array();
$tempp=0;
settype($newpoint,"integer");
settype($tempp,"integer");
$count=0;
$file=fopen("highscores.txt","r");
while ($count<999)
{
$tempn=fgets($file);
$tempp=fgets($file);
if ($tempp==0)
{
$count=999;
}
else
{
array_push($name,$tempn);
array_push($point,$tempp);
$count++;
}
}
fclose($file);
array_push($name,$newname);
array_push($point,$newpoint);
$count=count($name);
$count--;
$tempcount=$count;
$writecount=count($name);
while ($tempcount>0)
{
if ($point[$count]>$point[($count-1)])
{
$temp=$point[$count-1];
$point[$count-1]=$point[$count];
$point[$count]=$temp;
$temp=$name[$count-1];
$name[$count-1]=$name[$count];
$name[$count]=$temp;
$count--;
}
$tempcount=$tempcount-1;
}
$tempcount=$count;
$count=0;
$file=fopen("highscores.txt","w+");
while ($count<$writecount)
{
if ($count==$tempcount)
{
$point[$count].="\n";
}
fputs($file,$name[$count]);
fputs($file,$point[$count]);
$count++;
}
fclose($file);
?>
Viel Spaß damit Very Happy

Edit: Ganz vergessen, den Source von Bastard kannst Du downloaden. Das arbeitet auch mit DirectPlay Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Apprauuuu

BeitragMo, Sep 06, 2004 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh danke sehr !
Den Php-Code werde ich dann ein wenig meinen Ansprüchen nach umschreiben Very Happy (ich denke meine PHP-Kentnisse werden für reichen....)


Das mit Direct Play ist einfach das Problem, dass ich es verstehe, aber sich in meienm Code ein fehler eingeschlichen hat....
The Yeti hat auch sein Spiel mit Direct Play (Er will es aber abschaffen...) und er konnte auch nicht helfen....

Vielleicht sollte ich es auch einfach mit UDP versuchen, da ich dafür auch ein ausreichendes Tut. gefunden hab und vielleicht schaffe ich das ohne Fehler, der mir verborgen bleiben will.....
(UDP ist meiens Wissens nach eh VIEL besser...)
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Hubsi

BeitragMo, Sep 06, 2004 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup, UDP hat nur 8 Byte Header. Wie groß der Header von DirectPlay ist, weiß ich nicht auswendig (gibt auch glaube ich verschiedene Größen, je nachdem ob als wichtig gesendet oder nicht), er ist aber auf alle Fälle größer. Soviel hab ich noch im Kopf Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

The Yeti

BeitragDi, Sep 07, 2004 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Verdammt! In meinen Code passt UDP leider nicht (müsste zu viel ändern, Bomberman ist eh nur´n Übungsgame gewesen ^^).
Aber für dich, Apprauuuu ist das so ziemlich perfekt! Und ich finde es nicht viel schwerer als DP!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group