anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Di 19 Feb, 2019 16:01

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do 25 Mär, 2010 17:58 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
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.

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do 25 Mär, 2010 18:30 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
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

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr 26 Mär, 2010 17:45 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1594
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
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.

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum