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

Aufgaben der Elite - Quests
http://anpera.homeip.net/phpbb3/viewtopic.php?f=25&t=4804
Seite 2 von 2

Autor:  Eliwood [ Fr 20 Feb, 2009 23:32 ]
Betreff des Beitrags:  Re: Aufgaben der Elite - Quests

Die battle.php wird 2x eingebunden. Das heisst, dass du wohl zwei "Kampf-s -Schlaufen" hast, eventuell aus verschiedenen Quests. Versuche, da eine Lösung zu finden.

Übrigens ist deine Methode nicht wirklich zu empfehlen. Besser wäre eine API, die bestimmte Funktionen aufruft - nach dem Schema quest_run(). Und die Queste in einzelne Dateien gebunden sind und die Funktionsdefinitionen den Dateinamen entsprechen. cedrics_run.quest.php könnte zur Funktion cedrics_run_questrun() führen. Also eine Art Modulsystem.

Autor:  halfen [ Sa 21 Feb, 2009 12:29 ]
Betreff des Beitrags:  Re: Aufgaben der Elite - Quests

bitte was?

hab grade mal nach API gegoogelt und nur verwirrendes Zeug rausgefunden.. dann habe ich mir das Hausskript von Chaosmaker angeschaut, welchse ja auch auf Module aufbaut.. heute abend werde ich mal versuchen den Aufbau mit Modulen, bzw Funktionen im LoGD Code umzugehen..

oder haette jmd von euch einen kurzen Rohling, um des besser zu verstehen?

Autor:  Eliwood [ Sa 21 Feb, 2009 13:30 ]
Betreff des Beitrags:  Re: Aufgaben der Elite - Quests

Hm. Eine Datenbank. Mit den installierten Questen.

Dann an beliebigen Orten im Dorf sowas wie ein "Hook".

$this->bbcode_second_pass_code('', 'qs_hook('village');')

Jedes Modul registriert ihre "Hacken", wo sie sich einhaken und ihre Ausgabe, Navigation etc. hinklatschen. qs_hook sucht in der Datenbank nach allen Modulen, welche sich dort einhacken und nimmt ihren Namen. Sagen wir, das Modul heisst dagbounty.quest.php, also ist der Name dagbount. Das .quest kann man auch weglassen, ich unterscheide so nur gerne zwischen bestimmten Dateien (.class.php, .lib.php, .mod.php). Der Dateiname selbst steht nicht in der Datenbank - sondern nur "dagbounty".
Er holt also den Datensatz mit dagbounty und ruft die Funktion von dagbounty auf für diesen Haken:

$this->bbcode_second_pass_code('', '$fname = $row['questname'].'_qs_runhook($hook);
$fname(); # dagbounty_qs_runhook('village');')

In der dagbounty.quest.php stehen nun verschiedene Funktionen, deren Namen strengen Richtlinien entsprechen:

$this->bbcode_second_pass_code('', 'function dagbounty_qs_getinfo() {}
function dagbounty_qs_install() {} (Eventuelle Datenbankänderungen oder Einträge in die "Hook"-Tabelle
function dagbounty_qs_runhook($hook) {} (Das Zeugs, was beim Hacken ausgeführt werden soll)
function dagbounty_qs_run() {} (Das, was beim eigentlichen Quest ablaufen soll. Also im Prinzip das, was in einer eigenen Datei stehen könnte. page_header() und _footer() sind hier erforderlich)
')

Der Quest hackt sich also zum Beispiel in der Taverne bei Dag ein und generiert dort einen Link, der ebenfalls einem Bestimmen Muster folgt:
$this->bbcode_second_pass_code('', 'runquest.php?quest=dagbounty&op=askdag')

In der dagbounty wird anhand des übergebenen "quest" die run-Funktion generiert:

$this->bbcode_second_pass_code('', '$fname = $_GET['quest'].'_qs_run';
$fname();')

Und in der dagbounty_qs_run steht halt, was dann gemacht wird. Sprachausgabe, weitere Navigation, einträge ins Questbuch, und so weiter, und so fort. MOdulsysteme sind etwas fortgeschrittener, aber ermöglichen es, ziemlich einfach Erweiterungen an beliebigen Orten auszuführen. Ich hab selbst mal sowas gemacht (Und es läuft perfekt), das Questsystem bei Dragonprime ist auch so aufgebaut (Das für die 097). Das Haussystem - und natürlich die "neue" Version.

Autor:  halfen [ Sa 21 Feb, 2009 13:54 ]
Betreff des Beitrags:  Re: Aufgaben der Elite - Quests

ok, dankeschön.. dann könnte man ja theoretisch die Quests so installieren, wie die einzelnen Hausmodule.. und es würde ordentlicher ausschauen.. aber löst es denn auch das oben genannte Problem

"Fatal error: Cannot redeclare activate_buffs() (previously declared in C:\xampp\htdocs\logd\battle.php:18) in C:\xampp\htdocs\logd\battle.php on line 143" ?

Da ja in der jetzigen Quest "Sklavenhändler" mehrmals die "battle.php" aufgerufen wird und das wohl antscheinend nicht wirklich funktioniert..

Autor:  Salator [ So 22 Feb, 2009 19:49 ]
Betreff des Beitrags:  Re: Aufgaben der Elite - Quests

Die battle.php gehört ja auch nur einmal eingebunden, üblicherweise wird das am Ende der Datei in einem Block if($battle){} gemacht. Im oberen Teil deines Scripts füllst du nur das $badguy-Array und setzt $battle=true
Wenn du mehrere Kämpfe in Folge realisieren willst kommt die Fallunterscheidung bei if($victory) rein und analog dazu bei if($defeat) wenn du unterschiedliche Todesmeldungen ausgeben willst.

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