anpera.net
http://anpera.homeip.net/phpbb3/

PvP-Arena: Rundenbasiertes PvP mit allen Fertigkeiten
http://anpera.homeip.net/phpbb3/viewtopic.php?f=43&t=369
Seite 1 von 1

Autor:  anpera [ Mo 05 Apr, 2004 13:59 ]
Betreff des Beitrags:  PvP-Arena: Rundenbasiertes PvP mit allen Fertigkeiten

Beschreibung:
Die PvP-Arena ermöglicht es den Spielern, ihre Kräfte im direkten Zweikampf gefahrlos zu messen. Dabei ist der Einsatz aller Fähigkeiten erlaubt.

Herausforderungen müssen durch den herausgeforderten Spieler angenommen (oder abgelehnt) werden. Das gibt ihm Zeit, sich auf den Kampf vorzubereiten. Ändert sich das Level des Herausgeforderten, verfällt die Herausforderung automatisch. Der Herausforderer kann aber auch jederzeit seine Herausforderung zurückziehen, solange sie nicht angenommen wurde.

Der Kampf findet online statt! Momentaufnahmen (Kopien) der Charakterwerte zum Zeitpunkt der Herausforderung und der Annahme dienen als Grundlage für den Zweikampf in der Arena. Alle Änderungen an den Charakterwerten, die ein Spieler woanders erfährt, solange er noch einen Zweikammpf offen hat, gehen nicht mehr in den Zweikampf ein. So können beide Kämpfer unabhängig voneinander weiter spielen, ohne immer auf den anderen Kämpfer warten zu müssen. Sobald ein Spieler an der Reihe ist, in der Arena einen Zug zu machen, hat er keine andere Wahl. Sind beide Spieler gleichzeitig online, kommt dieses System echtem Online-PvP sehr nahe. Nur den Drachen darf keiner der beiden Spieler töten, solange ein Duell nicht abgeschlossen ist, denn sonst würde das Duell vorzeitig beendet werden.

Als Belohunung für gewonnene Kämpfe gibt es ein paar wenige Erfahrungspunkte und abhängig vom Levelunterschied der Kämpfer ein paar Kampfpunkte. Der Gewinner kassiert ausserdem die Nutzungsgebühr, die beide Spieler gezahlt haben.
Verlierer sterben nicht und verlieren auch nichts, ausser etwas von ihrem Stolz (Charmepunkt).

Der Verlauf aller laufenden Zweikämpfe kann von Besuchern in der Arena mitverfolgt werden.

Eine Rangliste der besten Arenakämpfer ist in der (neuen!) Ruhmeshalle zu sehen.

Autor: anpera ( logd@anpera.de )

Version: 04.04.2004

Für LoGD Version: 0.9.7+jt

Einbauanleitung:
Code:
----- SQL:
CREATE TABLE pvp (
  acctid1 int(11) NOT NULL default '0',
  acctid2 int(11) NOT NULL default '0',
  name1 varchar(50) NOT NULL default '',
  name2 varchar(50) NOT NULL default '',
  lvl1 int(11) NOT NULL default '0',
  lvl2 int(11) NOT NULL default '0',
  hp1 int(11) NOT NULL default '1',
  hp2 int(11) NOT NULL default '1',
  maxhp1 int(11) NOT NULL default '1',
  maxhp2 int(11) NOT NULL default '1',
  att1 int(11) NOT NULL default '1',
  att2 int(11) NOT NULL default '1',
  def1 int(11) NOT NULL default '1',
  def2 int(11) NOT NULL default '1',
  weapon1 varchar(50) NOT NULL default '',
  weapon2 varchar(50) NOT NULL default '',
  armor1 varchar(50) NOT NULL default '',
  armor2 varchar(50) NOT NULL default '',
  darkartuses1 int(5) unsigned NOT NULL default '0',
  darkartuses2 int(5) unsigned NOT NULL default '0',
  magicuses1 int(5) unsigned NOT NULL default '0',
  magicuses2 int(5) unsigned NOT NULL default '0',
  thieveryuses1 int(5) unsigned NOT NULL default '0',
  thieveryuses2 int(5) unsigned NOT NULL default '0',
  bufflist1 text NOT NULL,
  bufflist2 text NOT NULL,
  turn tinyint(1) NOT NULL default '2',
  lastmsg text,
  KEY acctid1 (acctid1,acctid2)
) TYPE=MyISAM;

ALTER TABLE `accounts` ADD `battlepoints` INT( 11 ) DEFAULT '0' NOT NULL ;



----- Öffne:
dragon.php

----- Finde:
debuglog("slew the dragon and starts with {$session['user']['gold']} gold and {$session['user']['gems']} gems");

----- Füge danach ein:
   $sql = "DELETE FROM pvp WHERE acctid1=".$session[user][acctid]." OR acctid2=".$session[user][acctid];
   db_query($sql) or die(db_error(LINK));


----- Öffne:
index.php

----- Finde:
$sql = "UPDATE accounts SET sentnotice=1,house=0,housekey=0,marriedto=0 WHERE acctid='$row[acctid]'";

----- Füge davor ein:
   $sql = "DELETE FROM pvp WHERE acctid2=$row[acctid] OR acctid1=$row[acctid]";
   db_query($sql) or die(db_error(LINK));


----- Öffne:
prefs.php

----- Finde:
   $sql = "DELETE FROM accounts WHERE acctid='$HTTP_GET_VARS[userid]'";

-----Füge davor ein:
   $sql = "DELETE FROM pvp WHERE acctid2=$HTTP_GET_VARS[userid] OR acctid1=$HTTP_GET_VARS[userid]";
   db_query($sql) or die(db_error(LINK));


----- Öffne:
train.php

----- Finde:
increment_specialty();

---- Füge danach ein:
         $sql="SELECT acctid2,turn FROM pvp WHERE acctid1=".$session[user][acctid]." OR acctid2=".$session[user][acctid]."";
         $result = db_query($sql) or die(db_error(LINK));
         $row = db_fetch_assoc($result);
         if($row[acctid2]==$session[user][acctid] && $row[turn]==0){
            output("`n`6`bDu kannst die offene Herausforderung in der Arena jetzt nicht mehr annehmen.`b");
            $sql = "DELETE FROM pvp WHERE acctid2=".$session[user][acctid]." AND turn=0";
            db_query($sql) or die(db_error(LINK));
         }


----- Öffne:
user.php

----- Finde:
   $sql = "DELETE FROM accounts WHERE acctid='$_GET[userid]'";

----- Füge davor ein:
   $sql = "DELETE FROM pvp WHERE acctid2=$_GET[userid] OR acctid1=$_GET[userid]";
   db_query($sql) or die(db_error(LINK));


----- Öffne:
village.php

----- Find:
if (getsetting("automaster",1) && $session['user']['seenmaster']!=1){

----- Füge davor ein:
$sql="SELECT acctid1,acctid2,turn FROM pvp WHERE acctid1=".$session[user][acctid]." OR acctid2=".$session[user][acctid]."";
$result = db_query($sql) or die(db_error(LINK));
$row = db_fetch_assoc($result);
if(($row[acctid1]==$session[user][acctid] && $row[turn]==1) || ($row[acctid2]==$session[user][acctid] && $row[turn]==2)){
   redirect("pvparena.php");
}



----- OPTIONAL -----

----- Öffne:
hof.php (0.9.8 Version für 0.9.7)

----- Finde:
addnav("Geschwindigkeit", "hof.php?op=days&subop=$subop&page=$page");

----- Füge danach ein:
addnav("Arenapunkte","hof.php?op=battlepoints&subop=$subop&page=$page");

----- Finde:
} elseif ($_GET[op]=="resurrects"){

----- Füge davor ein:
} elseif ($_GET[op]=="battlepoints"){
   $sql = "SELECT name,battlepoints AS data1,dragonkills AS data2 FROM accounts WHERE locked=0 ORDER BY battlepoints $order, level $order, dragonkills $order, acctid $order LIMIT $limit";
   $adverb = "besten";
   if ($_GET[subop] == "least") $adverb = "schlechtesten";
   $title = "Die $adverb Arenakämpfer in diesem Land";
   $headers = array("Punkte","Drachenkills");
   display_table($title, $sql, false, false, $headers, false);


----- Speichern und schliessen


----- Hochladen:
pvparena.php

Bemerkung:
Falls das Feld "battlepoints" bereits durch die battlearena von lonnyl in der Datenbank vorhanden ist, muss kein neues Feld erstellt werden. Die PvP-Arena nutzt das gleiche Prinzip und wird - falls vorhanden - nahtlos in die PvP-Arena eingefügt.

pvparena.php enthält bereits Modifikationen für "hardest Punch". Wenn diese Modifikationen auf dem Zielserver nicht installiert ist, muss folgende Änderungen an der pvparena.php vorgenommen werden:
Code:
----- Öffne:
pvparena.php

----- Finde und lösche:
      // from hardest punch mod -- remove if not installed!!
      if ($creaturedmg>$session[user][punch]){
         $session[user][punch]=$creaturedmg;
         output("`@`b`c--- DAS WAR DEIN BISHER HÄRTESTER SCHLAG! ---`c`b`n");
      }
      // end hardest punch



Dateien:
pvparena.php (Source)
special/gladiator.php OPTIONAL (Source)

Modifizierte dragon.php (hier nicht verfügbar)
Modifizierte index.php (Source)
Modifizierte prefs.php (Source)
Modifizierte train.php (Source)
Modifizierte user.php (Source)
Modifizierte village.php (Source)
Modifizierte hof.php (Source)

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/