Register for your free account! | Forgot your password?

You last visited: Today at 19:47

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Tutorial] Questing #1

Discussion on [Tutorial] Questing #1 within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1

 
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,446
[Tutorial] Questing #1

Nabend,

Da ich sehe, dass immer öfter einige Leute Probleme mit den (einfachsten) Quests haben, habe ich mich mal entschlossen, ein kleines Tutorial zu machen, in dem ich mal einfachere Sachen erkläre.
Hab mich dafür mal für eine Jagdquest entschieden.

Ich werde alle Zwischenschritte auch in einem Spoiler posten, falls es Unklarheiten o.ä geben sollte.

P.S: Ist mein erstes Tutorial mit Erklärung.. Kann also sein, dass es nicht allzu rosig ist. Verbesserungsvorschläge/Kritik sind immer erwünscht.

Zum Tutorial:

Man fängt grundsätzlich jede Quest in etwa so an:
Code:
quest jagdquest begin
Das quest und begin muss sein, aber den Namen kann man beliebig ändern.

Für Anfänger empfehle ich auch gleich ein end am Ende hinzusetzen, da sowas gerne mal vergessen wird.

Falls durch eine andere Quest kein anderer State eingeleitet wurde, sieht der nächste Schritt so aus:
Code:
state start begin
Hier ist es wieder, wie bei'm Anfang: state und begin muss geschrieben werden.
Den Namen kann man sich in der Regel am Anfang nicht aussuchen; nur, wenn ein neuer State eingeleitet wird.
Der State 'start' ist der State, den man am Anfang jeder Quest automatisch hat.

Der nächste Schritt sieht, wie folgt, aus:
Code:
when login or levelup with pc.get_level() >= 30 begin
Durch das when kann ein Ereignis (In diesem Fall: Login/Levelup), was an eine Bedingung (Level = oder größer als 30) geknüpft werden kann.

In dem folgenden Block wird dann geschrieben, was bei dem Ereignis mit der Erfüllung der Bedingung passieren soll.

Bei mir wäre es dann:
Code:
send_letter('Ein neuer Auftrag')
Es wird halt ein Brief (Questrolle) an den ausgewählten Spieler gesendet.

Nach dem end für das Ereignis wird dann der Block für den Brief festgelegt.
Das sieht dann so aus:
Code:
when button or info begin
Dadurch wird der Block für den Brief eingeleitet.

Dieser Block kann zwar alle möglichen Sachen oder Befehle enthalten, ich will aber mal einen kleinen Infotext machen.
Für die Textausgabe werden meistens nur drei Befehle benutzt (say_title(), say() und say_reward() )
Es gibt zwar noch Textausgaben, die farblich gestaltet werden können, das ist aber eigtl. (überflüssiger) Schnick Schnack.

Den Text dafür könnt ihr selbst bestimmen. Ich hab um diese Uhrzeit keinen Nerv mehr, mir dafür einen Text einfallen zu lassen.

Bei solchen Befehlen muss in die Klammern ein String gesetzt werden, welchen man mit " oder ' anfängt und auch beendet.
Beispiel: say("Text") / say('Text')
Achtung:Für eine Textausgabe muss kein end gesetzt werden.
Für diese Beispielquest nehme ich mal 10 Orks.

pc.setqf(): Setzt eine Questflag ein, welche generell sehr nützlich sein kann. Mit einer Questflag kann man alle Möglichen Werte abspeichern.
Aufbau: pc.setqf(name(als string), wert) - Der Name ist dabei völlig egal.

set_state(): Leitet einen neuen State ein.
Aufbau: set_state(name) - Der Name kann auch hier beliebig gewählt werden.

Für Zählungen kann zwar auch der Questcounter genutzt werden, ich habe es mir aber angewöhnt, es mit Questflags zu machen.


Den neuen State beginnt man dann nach dem end für den State 'start'.

Danach lasse ich mal gleich einen neuen Brief senden, in dem ausgegeben wird, wieviele Orks man schon getötet hat.

Dazu benutze ich:
Code:
when login begin
Da wird der Block beim nächsten Login und bei jedem darauffolgenden login eingeleitet.

Als nächstes wird wieder die Textausgabe des Briefes eingeleitet.

Dazu benutze ich wieder:
Code:
when button or info begin

Nun erklär ich euch, wie ihr ausgeben könnt, wieviele Orks schon getötet wurden.

Dies mache ich mit mit der say()-Funktion.
Variablen/Questflags oder auch Befehle, die einen String/eine Zahl aufrufen gibt man so aus:
Code:
"..pc.getqf('count').."
Das würde dann so aussehen:
Code:
say('Es wurden "..pc.getqf('count').." Schwarze Orks getötet.')

Mit pc.setqf() setzt man eine Questflag; mit
pc.getqf()
ruft man diese auf.

Den nächsten Schritt gestalte ich mal in der einfachsten Form; und das sieht, wie folgt, aus:
Code:
when kill begin
Dadurch wird das "Killereignis" sozusagen abgefragt.

Und mit folgendem Befehl kann man die Vnum von dem abfragen:
Code:
npc.get_race()
Das sieht dann so aus:
Code:
if npc.get_race() == 636 then
So wird abgefragt, ob die Vnum 636 (Schwarzer Ork) beträgt.
Falls dies der Fall ist, wird der if-Block eingeleitet.
Achtung: if-Abfragen müssen mit einem end abgeschlossen werden.

In diesem rechne ich die Kills auf die Questflag drauf.
Das mache ich so:
Code:
pc.setqf('count', pc.getqf('count')+1)

Als nächstes kommt die Abfrage, welchen Wert die Questflag besitzt bzw. ob die Questflag genau den Wert hat, den ich haben will.
Diese Abfrage wird bei jedem Killereignis gestellt.

Code:
if pc.getqf('count') == 10 then
Diese if-Abfrage wird mit einem end von der anderen Abfrage getrennt, da sie im Grunde nichts miteinander zu tun haben.

Nun kommt der Block, der eingeleitet wird, wenn die Questflag den Wert 10 hat.
Dies kann sich beliebig variieren; ich mach es mal so:
Code:
say('Glückwunsch, du hast es geschafft!')
	pc.give_item2(19, 1)
	set_state(__COMPLETE__)
Ich gebe halt aus, dass man fertig ist und gebe als Belohnung ein Schwert+9

pc.give_item(): Gibt dem ausgewählen Spieler ein Item
Aufbau: pc.give_item(vnum, anzahl)
Achtung: Sollte mehrere Items gegeben werden muss der Befehl pc.give_item2() benutzt werden, sonst bekommt man nur ein Yangstück im Inventar.

Durch das set_state(__COMPLETE__) leite ich einen State ein, in dem nichts mehr geschieht.

Fertige Quest:
Code:
quest jagdquest begin
	state start begin
		when login or levelup with pc.get_level() >= 30 begin
			send_letter('Ein neuer Auftrag')
		end
		when button or info begin
			say_title('Überschrift')
			say('Text')
			say_reward('Töte 10 Schwarze Orks!')
			pc.setqf('count',0)
			set_state(auftrag)
		end
	end
	state auftrag begin
		when login begin
			send_letter('Töte Orks')
		end
		when button or info begin
			say_title('Titel')
			say('Es wurden "..pc.getqf('count').." Schwarze Orks getötet.')
		end
		when kill begin
			if npc.get_race() == 636 then
				pc.setqf('count', pc.getqf('count')+1)
			end
			if pc.getqf('count') == 10 then
				say('Glückwunsch, du hast es geschafft!')
				pc.give_item2(19, 1)
				set_state(__COMPLETE__)
			end
		end
	end
	state __COMPLETE__ begin
	end
end

Ich hoffe, ich konnte euch in Sachen Questing etwas weiterhelfen.

Falls ich etwas schlecht gemacht/erklärt hab, schreibt es bitte.. Ist halt mein erstes Tutorial.
Und wenn ihr noch mehr Tutorials zu irgendwelchen Möglichkeiten/Befehlen wollt, lasst es mich wissen.


MfG .Remix
Lord iRemix is offline  
Thanks
38 Users
Old 04/02/2013, 02:49   #2
 
elite*gold: 0
Join Date: Nov 2010
Posts: 2,997
Received Thanks: 3,391
Joa das ist nützlich.


.Remix.
Wieso hatest du nen bann :O
CrystalPrime is offline  
Thanks
1 User
Old 04/02/2013, 02:52   #3
 
Stαgє6's Avatar
 
elite*gold: 0
Join Date: Jul 2011
Posts: 2,019
Received Thanks: 1,471
Nicht schlecht für die anfänger ^^
Stαgє6 is offline  
Thanks
1 User
Old 04/02/2013, 03:01   #4

 
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,446
Quote:
Originally Posted by CrystalPrime View Post
Joa das ist nützlich.


.Remix.
Wieso hatest du nen bann :O
Das 4. Mal 3 Infras.
Eigtl kriegt man beim 2. Mal schon perm. Bann.
Bin aber was Besonderes


Falls ihr Verbesserungsvorschläge habt, teilt sie mir mit.
Lord iRemix is offline  
Thanks
1 User
Old 04/02/2013, 03:24   #5
 
.Chaos™'s Avatar
 
elite*gold: 0
Join Date: Jan 2013
Posts: 119
Received Thanks: 152
Sehr gut, war ja von dir nicht anderst zu erwarten.

Kind Retards Chaos
.Chaos™ is offline  
Thanks
1 User
Old 04/02/2013, 03:28   #6


 
.Onlyx3's Avatar
 
elite*gold: 0
The Black Market: 100/0/1
Join Date: Jun 2011
Posts: 3,382
Received Thanks: 1,792
Gibts sowas nicht schon geschätzt 4 mal?
.Onlyx3 is offline  
Thanks
2 Users
Old 04/02/2013, 03:43   #7
 
elite*gold: 252
Join Date: Mar 2008
Posts: 3,111
Received Thanks: 3,912
Quote:
Originally Posted by .Remix. View Post
Kenne nur die von Alessa, die werden aber sofort gelöscht, weil er/sie/es nur auf Thx aus ist.


.Alessa is offline  
Thanks
6 Users
Old 04/02/2013, 03:47   #8

 
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,446
Okok, das kannte ich noch nicht.
Lord iRemix is offline  
Old 04/02/2013, 03:52   #9
 
elite*gold: 252
Join Date: Mar 2008
Posts: 3,111
Received Thanks: 3,912
Aber erst beleidigen. Naja, egal.

Das Tutorial ist an für sich eine gute Idee, aber leider nicht ganz ausgereift. Nehmen wir an wir haben hier jemanden, der frisch Lua lernen will... Glaubst du im Ernst, er wird es durch deine Guides verstanden haben? Er wird wissen "ja, da kommen halt quest, state und when... Warum? Tja, weiß ich nich, ist halt so".. Es ist wichtig, dass du nicht nur darauf eingehst, wie was gemacht wird, sondern dass du erklärst, warum es so getan wird. Die Leute sollten verstehen und nicht abkopieren können.
.Alessa is offline  
Thanks
1 User
Old 04/02/2013, 03:59   #10
 
DAS IST VEGAAZ's Avatar
 
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
Ich finde die Idee gut jedoch die Umsetzung nicht ganz so gut.
Begriffe wie "state" o.ä. sind mir Fremd, weshalb ich nicht wusste was du meinst.
Trotzdem danke für das Tutorial.

Mfg,
Vegaaz
DAS IST VEGAAZ is offline  
Thanks
1 User
Old 04/02/2013, 04:06   #11
 
Stαgє6's Avatar
 
elite*gold: 0
Join Date: Jul 2011
Posts: 2,019
Received Thanks: 1,471
Quote:
Originally Posted by Vegaaz View Post
Ich finde die Idee gut jedoch die Umsetzung nicht ganz so gut.
Begriffe wie "state" o.ä. sind mir Fremd, weshalb ich nicht wusste was du meinst.
Trotzdem danke für das Tutorial.

Mfg,
Vegaaz
Jo deiner meinung aber state gibts ^^ es gibt verschieden begriffe gibt auch neue ^^
Stαgє6 is offline  
Thanks
1 User
Old 04/02/2013, 05:15   #12
 
DAS IST VEGAAZ's Avatar
 
elite*gold: 10
Join Date: Jun 2012
Posts: 2,932
Received Thanks: 656
Ich meinte damit das man solche Begriffe erklären sollte.

Mfg,
Vegaaz
DAS IST VEGAAZ is offline  
Thanks
1 User
Old 04/02/2013, 07:53   #13
wild wild son




 
Nick's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 5,994
Received Thanks: 3,389
Netter Guide - ..für's Erste!

Allerdings gefällt mir von der Erklärungsmethodik & vom Aufbau her Alessa's Guide besser, da dieser eher für absolute Neulinge geeignet ist.

Geh' mehr auf die Commands ein! (kleiner Tipp, den ich dir für's Nächste mal auf den Weg mitgeben möchte)

@.Onlyx3™, von mir aus gibt's das auch 5 mal, Guides gelangen durch Releases in der Sektion eher in den Hintergrund - lieber 5 Guides, welche sich unterscheiden können, als 5 Releases, wo die Methodik dieselbe ist.


Kind regards,
.JαyZoN
Nick is offline  
Thanks
1 User
Old 04/02/2013, 11:46   #14
 
.CHHorny's Avatar
 
elite*gold: 168
The Black Market: 146/0/0
Join Date: Feb 2010
Posts: 4,333
Received Thanks: 2,640
Und wer hat dich auf die Idee gebracht?

Sehr schön und auch ausführlich geschrieben, gefällt mir.

Achja 2x Bann = Permanenter Bann? Nur noch eine Infra dann habe ich's auch
.CHHorny is offline  
Thanks
1 User
Old 04/02/2013, 12:06   #15
 
.Risan.'s Avatar
 
elite*gold: 30
Join Date: Jul 2010
Posts: 1,627
Received Thanks: 1,450
Nene... Geht schöner und sauberer

PHP Code:
quest jagdquest begin
    state start begin
        when login 
or levelup with pc.get_level() >= 30 begin
            send_letter
("Ein neuer Auftrag")
        
end
        when button 
or info begin
            say_title
("Überschrift")
            
say("Text")
            
say_reward("Töte 10 Schwarze Orks!")
            
set_state(_auftrag_)
        
end
    end
    state _auftrag_ begin
        when enter begin
            pc
.setqf("count",0)
        
end
        when letter begin
            send_letter
("Töte Orks")
        
end
        when button 
or info begin
            say_title
("Titel")
            
say("Es wurden "..pc.getqf("count").." Schwarze Orks getötet.")
        
end
        when kill begin
            
if npc.get_race() == 636 then
                local count 
pc.getqf("count") + 1
                pc
.setqf("count"count)
                if 
count >= 10 then
                    say
("Glückwunsch, du hast es geschafft!")
                    
pc.give_item2(191)
                    
set_state(__COMPLETE__)
                
end
            end
        end
        when leave begin
            pc
.delqf("count")
        
end
    end
    state __COMPLETE__ begin
    end
end 
mfg Risan

ps. Wir haben mehr als genug Anleitungen...

EDIT:
Obwohl ich zugeben muss das pc.setqf("count",0) auch unnötigt ist, wenn keine gesetzt wird bekommt man automatisch den return wert 0 .. Naja egal ^^
.Risan. is offline  
Thanks
1 User
Reply

Tags
how to, quest, questing, quests, tutorial


Similar Threads Similar Threads
Questing or grinding rdf
09/03/2012 - World of Warcraft - 4 Replies
Hey guys, im wondering , which way is fastest to get 85 ASAP (as soon as possible with 35% looms+ guild10%) obviously spamming rdf as tank
so far the questing has been really lame
07/26/2012 - Guild Wars 2 - 4 Replies
I hope it gets better than what i have seen so far. In last weeks beta i was turned in a cat and hunted rabbits, i had to feed cows, i had to follow some wolf around to get credit for quest, and i had to pick up eggs off the ground and put them in a nest. these are just the stupid ass quest that i remember, there were many more. please tell me that this isnt it, these are some of the most care bear quest i have ever seen in a game. most of them i didnt even have to kill anything..... ...
[Tutorial] Questing Hacks
07/05/2011 - GunZ - 4 Replies
Questing with Witch Prooo Tutorial by DArgo2006 What you will need: Latest Witch hack Winrar http://t0.gstatic.com/images?q=tbn:ANd9GcRwwsgrhQ Gx6mxiOOCRodN19I3TXA0frz3Df2iAPOWGk-icGrua&t=1 Ok so let's get started
Questing in NA
06/14/2008 - Cabal Online - 1 Replies
for some reason in mercury for cabal NA i cant turn in my quest...like it go to the corresponding npc and when i click on the last screen...nothing happens anyone have any idea y? bug maybe? i didnt do any of the quest and im lvl 50+ and now im trying to do them to get the port lux map piece and the very first quest "something about a missing expedition"..and when i try to turn in nothing happens...
Questing Vs Botting
06/06/2008 - Cabal Online - 4 Replies
i have a question...since alot of stuff evolves around questing in this game like getting combo lvl1 and people (like me) like to bot to have more free time how would we be able to get the required quests done......(not trying to be lazy) but is there a site i can go to or anyone have the important quests that need to be done like the combo level 1...i cant seem to be able to find combo lvl 2 since i bot and level quickly and have IRL stuff to do



All times are GMT +1. The time now is 19:48.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.