Ego Shooter Netzwerk Frage: Wie realisiert man das?
Übersicht

![]() |
GearTechDEehemals 'KillerJo96'Betreff: Ego Shooter Netzwerk Frage: Wie realisiert man das? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also,
ich habe vor einen Ego Shooter zu programmieren, bzw. hab ich das eigentlich schon gemacht, jedoch möchte ich dort jetz einen multiplayer mit UDP einbauen. Da ich UDP Jetzt ja ENDLICH verstanden habe, ist das auch nicht mehr mein Probem. Ich habe nur noch eine Fragen, wie realisiert man das mit den Schüssen? Wird von jeder Kugel immer die Koordinate übertragen oder wie? das würde ja ganz schönen traffic geben -.- oder macht man es so: Wenn ich auf jemand schiese und ihn getroffen habe, wird ein wenig leben abgezogen und sonst passiert nichts, sodass einfach übertragen wird, wie viel leben der jenige jetzt noch hat? Ich bin mir dabei noch nicht so ganz sicher und glaube das ich damit total falsch liege.. Lg GearTechDE |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lass die Clients ruhig die position der Projektile selbst berechnen, wichtig ist nur, dass ein Signal kommt, wenn jemand getroffen wurde und Hitpoints verliert. | ||
Starfare: Worklog, Website (download) |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. Ist ja nicht wirklich 3D-spezifisch ![]() Jede Methode hat Vor- und Nachteile. Überträgst du immer nur, wem du wie viel Leben abgezogen hast, eröffnet das Cheatern sehr viele Türen (man sendet dann einfach n paar zusätzliche ich-habe-dich-getroffen-Pakete). Überträgst du bei jedem Schuss die Koordinate (vom Erstellungspunkt + Richtung) und lässt den Server die Bewegung und Kollisionskontrolle durchführen, hat dieser am meisten Rechenaufwand. Ausserdem kann es dann sein, dass du (als Client) zwar denkst, einen Gegner getroffen zu haben, weil du auf ihn zieltest, die Nachricht aber so spät beim Server ankommt, dass der, mit den neuen Spieler +Schusskoordinaten keine Kollision feststellen kann und demnach keinen Treffer zählt. Ich würde trotzdem die zweite Variante vorziehen - je mehr man vom Server ausführt, umso mehr Kontrolle hat dieser und umso weniger cheatanfällig wird das Spiel. mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
also das sieht dann so aus:
Pseudo deutsch/Code sprach: Code: [AUSKLAPPEN] Client1: schiest eine kugel und sagt zu allen anderen Mitspielern das er jetzt geschossen hat. --> Dabei beschreibt er in welche richtung er geschossen hat, und mit welcher waffe usw. die anderen Clients: empfangen, dass client 1 geschossen hat. Lesen welche Munition und mit welcher wafffe. Erstellen nun an der Position des Client 1 einen neuen schuss und richten diesen nach dem gesendetem winkel aus. Schuss wird in flugrichtung bewegt. So funktioniert das im Prinzip. ich arbeite gerade an so einem Projekt. Vielleicht möchtest du ja mal in meinem Worklog in meiner Signatur vorbei sehen. Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Holzchopf: Ich mach mir ja auch gern so Gedanken und stimme dir ja inhaltlich zu... aber ich hab noch kein Spiel hier im Blitzforum gesehen das ernsthaft massiv mit Cheatern Probleme gehabt hätte *. Bzw. umgekehrt hab ich noch niemanden gesehen der seine Zeit damit verbringt BB-Spiele zu hacken... noch dazu wo es im Falle des Fragestellers um seinen ersten UDP-Shooter geht. Ja, jetzt könnte man wieder mit der neverending Diskussion kommen von wegen "nicht übertreiben" vs. "von grund auf gscheit lernen", aber mal ehrlich... ich nehme an das wird n Hobbyprojekt und wenn du (ehemaliger Joe) es hinkriegst, hast du schon genug Aufwand getrieben und genug gelernt ![]() (*) Alle Spiele die in die Größenordnung kommen wo die Versuchung bestehen würde zu cheaten haben auch dementsprechende Vorkehrungen, ich denke da aktuell an ChaosSpace + Nachfolger. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Eingeproggt
Ja da muss ich dir rechtgeben, es ist 1. nicht so, dass ich weiß wie ich mich vor hackern schütze. und zweitens, das spiel ist sowieso NOCH kein Spiel. Es werden lediglich bis jetzt koordinaten der einzelnen spieler übertragen, ausserdem finde ich nicht, dass etwas derartiges mit BB nötig ist, da mein spiel nicht jeder spielen wird, und 2. dann wahrscheinlich zu besseren ego shooter greift etc. ihr wisst was ich meine... @Topic Also die Koordinaten der Schüsse übertragen zu lassen wäre wahrscheinlich nicht so das problem, jedoch gibt das anscheinend verdammt viel Traffic. Ich denke ich mache es so, dass ein Client sendet wenn er einen Schuss schiesst, aus welcher richtung, höhe und das absenden. sonst wird es einfach zu viel traffic... Trotzdem danke schonmal für die vielen Antworten. Und sorry das ich mich so spät melde, ich habe den Thread aufgrund der Verschiebung nicht mehr gefunden ![]() |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das eigentliche Problem an UDP ist ja, dass nicht immer alle Nachrichten ankommen, bzw. in falscher Reihenfolge (unter normalen Umständen zwar schon, aber man sollte auf keinen Fall davon ausgehen)
Du fährst ganz gut damit, wenn nur der Host alles entscheidet und alle anderen nur nachfragen dürfen. Also in deinem Fall fragt der Client, ob er denn Schießen darf, geht gleichzeitig davon aus, dass er es darf und wartet auf die Antwort vom Host. Der Host entscheidet, ob alles seine Richtigkeit hat, und bestätigt im Normalfall, dass geschossen werden darf (evtl. kann man sich das sogar sparen, und nur antworten, wenn eigentlich nicht geschossen werden dürfte). Wenn nicht, muss der Client halt die entsprechenden Schüsse entfernen und wieder zur Gesamtmunition(?) hinzufügen. So oder so ähnlich haben die das z.B. bei Call of Duty 2 implementiert, man merkte das, wenn man mit einer hohen Ping spielt, dann kamen die Kugeln teilweise verzögert aus der Waffe. In jedem Fall solltest Du allen Nachrichten eine fortlaufende Nummer mitgeben, so dass Du bemerkst, wenn etwas vertauscht oder ausgelassen wurde. |
||
Starfare: Worklog, Website (download) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also hab die Kugel übertragung soweit erfolgreich abgeschlossen. Die kugeln fliegen dahin wo sie sollen, und es gibt ca. im lokalen netzwerk ne verspätung von 23ms.. ich hoffe mal das das gut ist-.- oder ich habs falsch berechnet... jedenfalls funktionierts ziemlich gut.
Jedoch hab ich jetzt ein Problem, ich habe eine Function UpdateCollisions() dort drin steht: BlitzBasic: [AUSKLAPPEN]
Sodass bei jedem Schuss immer 2 leben abgezogen werden... das findet im Client statt... So ich sende ja auch den byte damit der server weiß, dass jemand verletzt wurde. aber die leben werden nicht voneinander abgezogen... warum? |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich die drei zeilen code sehe, kann ich nur davon ausgehen dass deine Kollisonsabfrage nie True ergibt.
Nur so eine Anmerkung: Zudem sollte JEDER client also AUCH du selbst in einem Type/arry hinterlegt sein. Das betrifft dann natürlich auch alle dazugehörigen varriablen. So geht es auch ist aber unschön also... ergibt deine kollisionsabfrage über haupt true oder finden keine kollisionen statt ![]() Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Beispiel ist gerade voll für´n *** gewesen -.- xD hatte gerade i-wie nen Blackout...
Also ich habe mich selber momentan nur als Camera, und in den andren Clients werde ich als Cube dargestellt. Jeder cube bekommt bei der erstellung sofort EntityType c\Mesh,Type_OCube damit ich diese nachher auf collision überprüfen kann... So mach is momentan: BlitzBasic: [AUSKLAPPEN]
Beim Server: BlitzBasic: [AUSKLAPPEN]
hoffe jemand rafft mein problem, denn es funzt aus einem mir unbekannten Grund nicht, das leben wird einfach nicht abgezogen. Was ich jetzt probiere ist, ob die Kollision überhaupt stattfindet und es einfach an der variablenrunterzählung liegt, was ich eher weniger glaube -.- wenn niemand ein problem findet, poste ich gerne mal den source code... |
||
Mit freundlichen Grüßen: GearTechDE |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group