# Quest



## Titan2 (26. Sep 2007)

Hallo,

ich bin dabei ein Rollenspiel zu bauen. Dies soll möglichst nicht allzu statisch sein und platz zum weiter verwenden oder hinzufügen habe. Nun frage ich mich wie ich das mit denn Quest realisieren möchte? Hat vllt jemand schonmal einblicke bei derartigen Vorgängen bekommen?

Ich habe mir das erstmal vereinfacht so vorgestellt.

Tabelle: NPC

nr
gebiet
x
y

Tabelle: Quest 

nr
level
name
start npc
.
.


Nur das problem ist, es sind nicht nur "Laufequest" sondern auch Monster haue quest...quest die viele npc's ansprechen, wo man mal was suchem muss etc...

Wie macht man sowas am geschicksten, ohne ifiifiififiiiffififffi...


----------



## SlaterB (26. Sep 2007)

ifiifiififiiiffififffi steht für irgendein Schnaufen im Spiel oder das Programmiersprachenkonzept if-Abfrage?
im letzteren Fall: echt toll erklärt,
ähnlich ausführliche Antwort: benutze Schleifen


----------



## tuxedo (26. Sep 2007)

Wieso schaust du nicht einfach wie andere das gemacht haben? Google mal nach L2J, der freien Lineage2 Serverimplementierung. Ist alles in Java geschrieben. 

- Alex


----------



## LoN_Nemesis (30. Sep 2007)

Titan2 hat gesagt.:
			
		

> Nur das problem ist, es sind nicht nur "Laufequest" sondern auch Monster haue quest...quest die viele npc's ansprechen, wo man mal was suchem muss etc...
> 
> Wie macht man sowas am geschicksten, ohne ifiifiififiiiffififffi...



Ich weiss nicht genau was du mit ifififififif meinst, aber du wirst wahrscheinlich nicht drum herum kommen. Prinzipiell gibt es ja zwei Möglichkeiten:

1. Du gibst deiner Quest Klasse eine Variable der Art 'typeOfQuest'. Dann machst du eine enum oder consts mit allen möglichen Questarten (Monster töten, Gegenstand finden, NPCs anquatschen, etc). Natürlich wird dann irgendwo der von dir genannte 'ifififififif Code' sein um zu überprüfen um welchen Quest-Typ es gerade geht. Alternativ kannst du auch für jede Art von Quest eine eigene Klasse machen, die von einer gemeinsamen Klasse erben. Das hängt stark von deinem Spiel ab.

2. Du schränkst die Questarten nicht ein und lässt prinzipiell beliebige Ziele für eine Quest zu. Dann musst du dir aber überlegen wie du das implementierst. Zum Beispiel indem die Klasse Quest abstrakt ist (oder ein Interface), und eine Methode 
	
	
	
	





```
boolean solved(){...}
```
 oder so anbietet, die für jede Quest verschiedenen sein kann. Allerdings hast du dann andere Probleme, nämlich dass du jede Quest im Code implementieren musst. Es sei denn du entwickelst/benutzt eine Scriptsprache für deine Questziele, aber das könnte eventuell Overkill sein.

Ohne dein Projekt genau zu kennen, würde ich dir zu der ersten Methode raten, denn realistisch gesehen wird es nicht mehr als ein dutzend verschiedene Questarten geben. Und ich weiss nicht was ungeschickt daran sein soll, einen etwas grösseren 'If' oder 'Switch' Block im Code zu haben


----------

