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.
|