@ chriss
Inwiefern zugreifen? Soweit ich es verstanden habe muss sowohl client als auch Server erst bestimmte Sources des Spiel besitzen muss um darauf zugreifen zu können. Atm schwebt man nur über den Boden und die Sprung/Fallanimation wird übergeben. Warum kann ich jedoch nicht einmal genau sagen. Habe selbst einige "Bewegungselemente" angefügt, bis jetzt wurden diese aber nicht verwendet. Ziemlich kurios das Ganze. Zumal ich einige Funktionen die wohl mit der Bewegung zu tun haben geklont und verändert habe um zu sehen ob etwas passiert. Wär ja schon ein Erfolg wenn mein Gegner eine Sitzen Animation verwenden würde.
Das mit dem Event, ich denke mal du zielst damit auf dieses Coop ab, also das beide etwas zusammen tun, muss auch verschoben werden.
Ich habe heute (gestern war das Inet ja leider weg somit keine Möglichkeit zu testen was mich zum Punkt bringt das es wohl dann auch per Internet ging) mal etwas testen können. Bischen springen hier, laufen da, verkloppen, mit anderen npcs interagieren und natürlich das Problem des "Verschwindens".
Bin hier zu folgenden Schlüssen gekommen:
Verschwinden: Wenn man sich zu weit aus dem Sichtbaren Bereich (sightValue=WERT 1-14 möglich) entfernt, auch wenn man nur einen Berg hinunter läuft, ist nach der Grenze des eingestellten Sichtbaren Bereiches schluss mit lustig. Der Npc verschwindet gänzlich, nicht einmal eine art Geist bleibt zurück. Mit Geist meine ich eine Art durchsichtigen Npc, ich denke jedoch das das nur ein Bug ist, in dem Fall war der Gegner noch vorhanden nur ebend nicht mehr ganz so physisch wie sonst xD Das bedeutet für mich aber das der Spieler nie wirklich "ein Zustand" der Welt wurde.
schlafen:
Auch zb das Schlafen funktioniert nicht, ganz klar es verändert den einen Zustand des Spielers der schläft so enorm das das Spiel nicht mehr synchorn funktionieren kann. Bei Spieler A ist es nun schon Mittags, bei Spieler B natürlich noch Morgens. Ich glaube Schlafen ist demzufolge nicht mehr wenn es jemals zur Fertigstellung käme. Um das noch etwas zu definieren, wenn Spieler A schläft, verschwindet Spieler B bei ihm, des weiteren kommt ein Fehler und das Spiel stürtzt ab. Spieler B sieht nur noch die leere Hülle von Spieler A, kann diese aber auch nicht angreifen/verletzen.
Gespräche:
Wenn Spieler A mit einem Npc interagiert (zb Xardas) reagiert dieser nur bei Ihm, bei Spieler B steht dieser Npc wie gewohnt am Buchständer und blättert fleissig Seiten um. Auch beim Schaf vor dem Turm, wenn Spieler A es angreift und verletzt oder umbringt, dann ist bei Spieler B trotzdem das Schaf an gewohnter stelle und futtert grünes, oder läuft seine waypoints ab. (mähh) xD Man sieht auch keinerleih Verletzung wenn Spieler A angegriffen wurde, weiss das Spieler B garnicht da scheinbar nur der erste Zustand behandelt wird und dieser ist halt nach dem Spawn 100% Lebensenergie.
Der Zustand ist also immer gleichbleibend bis der Spieler A/B die Sichtweite verlässt, da er sowieso nie einen Platz in der Welt hatte, verschwindet er einfach wieder.
Der Knackpunkt liegt glaube ich schon an der Verarbeitung ganz am Anfang, es darf nicht einfach eine Positionsberechnung stattfinden um "spawnen" zu lassen, sondern müsste definitiv einen Start geben. Wie bei Counterstrike zb Info_player_start welches der Server dann bekommen müsste und auf was der Client dann wiederrum zugreift. Ich weiss nicht ob dies per insert "wert" (pc_hero) at x,y,z funktionieren könnte, gehe aber nicht davon aus da der Spieler erneut kein richtiger Zustand würde. Der Start für Gothic selbst = vobname: Start_Gothic2
im 3ds eingetragen als: visual: Invisible_zcvobstartpoint.3ds
Man kann Ihn im Grunde bedenkenlos verschieben, ich hatte vor einiger Zeit (ca Anfang des Jahres) ja einiges getestet und ging davon aus das Skripte überarbeitet werden müssten. Ich schätze also darum kommt man nicht herrum.
Aber noch en Problem kam im Laufe der Tests, die Fehlermeldung hierzu:
Auf das verworferne Objekt kann nicht zugegriffen werden.
Objektname: "System.Net.Sokets.NetworkStream".
Uminös und sehr Problematisch ist auch der Fall: Verliert man die Verbindung zum Server dann kann man nicht einfach reconnecten, um den Zustand wieder her zu stellen muss man das ganze Prozedere mit den beiden clienten erneut durchgehen, der server selbst ist egal, er arbeitet für sich und verarbeitet auch im Grunde nur diese Positionsabänderungen. Zb steht im Code dazu folgendes:
Classes auszug:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
Public Sub New(ByVal name As String, ByVal x As Single, ByVal y As Single, ByVal z As Single, ByVal bodystate As Integer, ByVal bs_flag_interruptable As Integer, ...
player.instance += 1
Me.name = name
Me.x = x
Me.y = y
Me.z = z
Me.bodystate = bodystate
'neu bstate
Me.BS_FLAG_INTERRUPTABLE = bs_flag_interruptable 'from bodystates.d
|
ircbot.vb
|
Quellcode
|
1
2
3
4
5
6
7
8
|
Sub OnPublicMsg(ByVal user As UserInfo, ByVal channel As String, ByVal message As String)
If message = "!serverinfo" Then
conny.Sender.PublicMessage(channel, "ServerInfo:")
conny.Sender.PublicMessage(channel, "Player1: " & player1.name)
conny.Sender.PublicMessage(channel, "X: " & player1.x & " Y: " & player1.y & " Z: " & player1.z)
conny.Sender.PublicMessage(channel, "Health: " & player1.health)
ElseIf message.Contains("!kick") And user.Nick = master Then
conny.Sender.PublicMessage(channel, "wtf kick? i would like 2 do it but DaRk didn't insert correct code!")
|
Mir ist gerade aufgefallen das ich einige übergaben übersehn habe, ggf funktionierte das gerade doch mit dem laufen, habe nur vergessen es per ircbot zu übergeben. Schaun wir doch mal.
Aber soviel erstmal dazu ich hoffe man konnte einigermassen folgen.
Bei Fragen, einfach fragen, antworte später!
Roland[/code]