anpera.net https://anpera.dyndns.org/phpbb3/ |
|
Spieler bt./vs Spieler: leicht gemacht! https://anpera.dyndns.org/phpbb3/viewtopic.php?f=43&t=5123 |
Seite 1 von 1 |
Autor: | Kevz [ Do 25 Mär, 2010 17:58 ] |
Betreff des Beitrags: | Spieler bt./vs Spieler: leicht gemacht! |
Hallo beisammen, und zwar möchte ich gerne erklären oder habe es nun zumindest vor, wie man Spieler gegen Spieler leicht handhaben kann - das Schema lässt sich durchaus auch auf weitere Mitstreiter ausbauen. Es ist somit also nicht ausschließlich auf zwei Personen beschränkt. In der PvP Arena gibt es z. B. auch Spielerkämpfe gegeneinander, aber das Ganze finde ich ist aufwendiger gestaltet, wie man es hätte umsetzen können - siehe dazu das Beispiel unten. Aber nun zum eigentlichen Thema: Wir haben in der Datenbank zuvor eine Tabelle mit dem Namen "_pvp" angelegt. Die Tabelle beinhaltet die Felder/Werte: _pvpId (INT 10) auto_increment, _pvpIdUserP (INT 10) unsigned, _pvpIdUserS (INT 10) unsigned, _pvpLastActivity (INT 10) unsigned. Und in der Tabelle "accounts" haben wir ein Tabellenfeld mit dem Namen "_pvp" hinzugefügt, der Typ ist (INT 10) unsigned. $this->bbcode_second_pass_code('', '// Textausgabe Variable deklarieren $windowOutput = ''; // Bevor wir zu der eigentlichen Navigationshandlung uebergehen, // wird zunaechst Ueberprueft ob der Benutzer sich im "Aktiven" // PvP-Kampf befindet. (siehe $currentUser) if (!$session['user']['_pvp']) { // Falls die PvP-Id in der Tabelle vorhanden ist, wird der Benutzer // darueber Informiert, ob er nun am Zug ist, oder sein Gegner. $res = db_query('SELECT `_pvpLastActivity` AS `acctid` FROM `_pvp` WHERE `_pvp` = "'.($currentUser).'"'); if (db_num_rows($res)) { // Zunaechst beziehen wir die Tabellendaten, bevor ein weiteres // vorrangehen geschieht! (siehe $row) $row = db_fetch_assoc($res); if ($session['user']['acctid'] == $row['acctid']) $windowOutput = 'Du musst warten! Dein gegner ist Momentan noch am Zug!'; else $windowOutput = 'Du bist am Zug! Und kannst nun frei waehlen!'; } // Falls die PvP-Id nicht in der Tabelle gefunden wurde, hat sich // ein Bug in das System eingeschlichen?! Dem Spieler wird geholfen! ;-) else { // Textausgabe an den Browser $windowOutput = 'Es gibt anscheinend ein Fehler im System! Bitte Informiere den Administrator ueber diesen Vorfall!'; // PvP-Id vom Spieler bereinigen $session['user']['_pvp'] = 0; } } // Diese Navigationshandlung erscheint dann, wenn der Benutzer // nicht im Kampf aktiv ist oder vielleicht jemanden herausfordern // möchte oder anderes. else { // Textausgabe an den Browser $windowOutput = 'Du befindest Dich derzeit nicht im Kampf! Und kannst Dich also hiermit frei herum bewegen.'; } output($windowOutput);') Es macht den Eindruck nach viel Wirrwarr aber dabei ist das eher weniger. Denn das meiste daran machen wohl die Kommentare im Ganzen. Wie man im obigen Codestück sieht, wird die Handlung mit den Texten gegeben, aber es findet keine eigentlichen Interaktion statt. Dazu kommen wir aber nun, in einer eher Text gehaltenen Fassung! Das Tabellenfeld "_pvpLastActivity" legt den Benutzer fest, der zuletzt eine Aktion durchgeführt hat. Sprich: Wenn ich als Benutzer, meinen Gegner nun gerade angegriffen habe, wird dort meine Benutzer-Id eingetragen. Und ich bin somit als gezwungen zu warten, bis mein Gegner eine Aktion durchgeführt hat, denn ich werde in der If-Abfrage überprüft ob meine Benutzer-Id im Feld ist. Ich möchte aber nun noch eine kleine Erklärung zu den weiteren Tabellenfeldern etwas sagen, die bisher nicht erklärt worden sind. Bei dem Feld "_pvpId" handelt es sich um die Id- für die Spieler, um den aktuellen Kampf schneller zu lokalisieren. Und um auf die Felder "_pvpIdUserP" und " _pvpIdUserS" zurückzukommen, die stehen jeweils für erstrangig oder zweitrangig. (auf den Gegner bezogen) Vorab möchte ich dem Thema noch hinzufügen, dass alles Weitere nur Verschönerung im Ganzen ist. Ich wollte lediglich nur die Handlung hier erklären und wie es durchaus machbar wäre, es umzusetzen! Das Ganze muss man auch nicht auf einen Kampf beziehen, sondern kann es auch für den Item Tausch benutzen, oder zum Handel unter Spielern etc. pp. Das bleibt aber natürlich jedem Selbst überlassen. Ich stehe für weitere Fragen gerne noch offen und man kann mich auch gerne privat kontaktieren. Dem sollte eigentlich auch nichts im Wege stehen. Zudem hoffe ich das nun vielleicht mehr Interesse an solchen Erweiterungen auf dieser Basis oder zumindest Idee angeregt wurde. |
Autor: | Auric [ Do 25 Mär, 2010 18:30 ] |
Betreff des Beitrags: | Re: Spieler bt./vs Spieler: leicht gemacht! |
Hm, irgendwie werde ich aus deinem Text nicht ganz schlau. Er ist zwar umfassend und detailliert beschrieben, aber effektiv passiert noch nichts anderes als folgender Ablauf: Zustandswert (LastActivity) aus der DB lesen, mit der eigenen ID vergleichen und demnach unterscheiden. Ehrlich gesagt sehe ich dabei nicht den Vorteil gegenüber dem aktuellen System. Zudem unterstützt dein Beispiel nicht wie angekündigt mehrere Teilnehmer, da aus dem Faktum "Der Andere handelte zuletzt"=>"Ich bin dran" geschlossen wird, was nur bei zwei beteiligten richtig ist. Für ein Gefecht mit mehreren Beteiligten würde ich ohnehin ein Stack-Aufbau anbieten, bei dem vom System alle Teilnehmer eingetragen werden und diese, wenn sie an der Reihe (also "oben") sind, ihre Handlung durchführen und dann vom Stack entfernen. Damit ließen sich zusätzlich auch noch Initiative-Systeme implementieren, wie man sie aus gängigen Rollenspielen kennt. Wenn ich hier etwas übersehen habe bitte ich um Nachsicht, aber so sehe ich nur einen langen Text mit wenig Inhalt. Auric |
Autor: | anpera [ Fr 26 Mär, 2010 17:45 ] |
Betreff des Beitrags: | Re: Spieler bt./vs Spieler: leicht gemacht! |
So ganz versteh ich das auch nicht. Wo genau finden diese Abfragen statt? Ist das eine Ergänzung des vorhandenen Systems oder ein Ersatz? Vorausgesetzt ich verstehe das richtig, hat dieses System nämlich 2 gravierende Schwachstellen, die das aktuelle System nicht hat: 1) Beide Spieler müssen gleichzeitig online sein. Ist einer der beiden nicht online, oder verlässt das Spiel vor Kampfende, kann der andere nicht mehr spielen. Und da bei diesem System der PvP-Kampf offenbar mit den selben Lebenspunkten und Werten gespielt wird, wie die Waldkämpfe, MÜSSEN Waldkämpfe während eines PvP-Kampfs unterbunden werden. 2) Der andere Spieler erfährt nicht, womit ihm wieviel Schaden gemacht wurde. Das vorhandene PvP-System ist nicht perfekt (und immer noch nicht ganz fertig - einige Buffs funktionieren nicht vollständig *seufz*), stimmt, aber ich glaube nicht, dass es sich sehr viel einfacher gestalten lässt, ohne unerwünschte Nebeneffekte reinzubekommen. Oder hab ichs tatsächlich falsch verstanden? Die Idee, mehrere Gegner gleichzeitig herausfordern zu können gefällt mir. Das sollte mit dem aktuellen System eigentlich auch ohne allzu tiefgreifende Änderungen umsetzbar sein. |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |