[SERVICE] Die Questkontrolle

12/24/2010 19:28 .NoThx#1141
Danke Jedoch wenn du den code weiter verfolg hättest:
PHP Code:
mob.spawn(2291
                
notice(" Der Spieler "..b.." wollte einen GameMaster Töten!"
                
notice("Folge dessen ist, Wird Ein Roter Drache Gespawnt wurde"
                
notice("Solltet ihr durch den Roten Drachen sterben, bedankt"
                
notice(" bei spieler "..b.." -Ende Der Durchsage-! "
                
end 
Wird dort dann bei der person( von von ich dann ausgehe) ein roter drache gespawnt und der spieler im Global chat angekündigt^^ demnäch würde es dann so aussehen:
PHP Code:
quest funkill begin    
    state start begin    
        when item
.use begin    
            
if pc.getqf("kill") == 1 then   
                say
("Du musst 10 Sekunden warten..")   
                return   
            
end   
            say
("Das Töten kostet dich 3.000.000 Yang."
            
say("Zudem brauchst du mindestens Level 30."
            
say("Möchtest du jemanden töten?"
            
local abfrage select("Weiter""Abbrechen"
            if 
abfrage == 2 then 
                
return 
            
end 
            local a 
input()  
            
local b pc.get_name()  
            if 
"..a.." == pc.is_gm()    
                
say("Du Kannst Keinen GameMaster töten!")    
                
mob.spawn(2291)  
                
notice(" Der Spieler "..b.." wollte einen GameMaster Töten!")  
                
notice("Folge dessen ist, Das Ein Roter Drache Gespawnt wurde")  
                
notice("Solltet ihr durch den Roten Drachen sterben, bedankt")  
                
notice(" bei spieler "..b.." Ende Der Durchsage! ")  
                
end   
                
return   
            
end    
            
if pc.get_gold() <= 2999999 then 
                say
("Du hast nicht genug Yang."
                return 
            
end 
            
if pc.get_level() <= 29 then 
                say
("Dein Level reicht nicht aus."
                return 
            
end 
            pc
.give_gold(-3000000
            
command("kill "..a.."")     
            
say("Der Spieler Wurde Erfolgreich Umgebarcht")  
            
notice("Der Spieler "..a.." wurde von "..b.." umgebarcht")  
            
pc.setqf("kill"1)   
            
timer("killdelay"10)   
        
end    
if "..a.." == pc.is_gm() 
                
mob.spawn(2291
                
notice(" Der Spieler "..b.." wollte einen GameMaster Töten!"
                
notice("Folge dessen ist, Das Ein Roter Drache Gespawnt wurde"
                
notice("Solltet ihr durch den Roten Drachen sterben, bedankt"
                
notice(" bei spieler "..b.." Ende Der Durchsage! "
                
end         
    
        when 
"kill".timer begin   
            pc
.setqf("kill"2)   
        
end   
        when login with pc
.getqf("kill") == 1 then   
            timer
("killdelay"10)   
        
end   
    end    
end 
12/24/2010 20:54 .Alessa#1142
Du vergisst, dass ich genau deinen Block schon oben unter dem input gemacht habe:

PHP Code:
quest funkill begin     
    state start begin     
        when item
.use begin     
            
if pc.getqf("kill") == 1 then    
                say
("Du musst 10 Sekunden warten..")    
                return    
            
end    
            say
("Das Töten kostet dich 3.000.000 Yang.")  
            
say("Zudem brauchst du mindestens Level 30.")  
            
say("Möchtest du jemanden töten?")  
            
local abfrage select("Weiter""Abbrechen")  
            if 
abfrage == 2 then  
                
return  
            
end  
            local a 
input()   
            
local b pc.get_name()   
           if 
"..a.." == pc.is_gm()     
                
say("Du Kannst Keinen GameMaster töten!")     
                
mob.spawn(2291)   
                
notice(" Der Spieler "..b.." wollte einen GameMaster Töten!")   
                
notice("Folge dessen ist, Das Ein Roter Drache Gespawnt wurde")   
                
notice("Solltet ihr durch den Roten Drachen sterben, bedankt")   
                
notice(" bei spieler "..b.." Ende Der Durchsage! ")   
                
end    
                
return    
            
end    
usw
.... 

Ein zweites Mal dieselbe Abfrage zu starten ist also unsinnig. Zumal du die notice mit notice_all ersetzen solltest... Zumal der Block, den du da fälschlicherweise ein zweites Mal gesetzt hast, auch noch außerhalb eines whnes liegt.. Du willst ein if ohne ein vorheriges when reinschmeißen? Zähl' mal die ends durch, dann wirst du merken, dass der when schon kurz vor dem Block beendet wurde.
12/25/2010 00:23 Endless.#1143
Hallöchen und Frohe Weihnachten erstmal^.^

naja hier eine Quest.. diesmal möchte ich folgendes machen..

Quest fängt an..wenn man lv 70 oder höher ist..
bekommt ein kurze Say Nachricht wo man beauftragt ist den Tausendkämpfer
zu töten.. wenn man dies getan hat.. bekommt man eben die Belohnungen die da stehen.. nur ich möchte dafür sorgen das man diese Quest nur 1x hat..
und nicht immer wieder bekommt..sobald man sich einloggt

PHP Code:

quest tausend begin
    state start begin
        when login 
or levelup with pc.get_level() >= 70 begin
            say_title 
("Auftrag vom Schmied")
            
say ("Hallo "..pc.get_name().." !")
            
say ("Du scheinst nun so weit zu sein.")
            
say ("Wenn du weiterkommen möchtest, so ")
            
say ("stell dich den Kampf im Land der Riesen")
            
say ("und töte den Tausendkämpfer !")
            
say ("Wenn du dies geschafft hast, so ")
            
say ("wirst du hart belohnt !")
            
set_state(killen)
        
end
    end
    state killen begin
        when 1403.kill with pc
.get_level() >= 70 begin
            say_title 
("Tausendkämpfer")
            
say ("Verdammt "pc.get_name().."!!")
            
say ("Wie konntest du mich besiegen?!")
            
say ("ich war seid 1000 Kämpfe ungeschlagen")
            
say ("und aufeinmal wurde ich besiegt.")
            
say ("naja es war ein fairer Kampf, und du")
            
say ("hast eben gewonnen.. Glückwunsch! ")
            
say ("Du hast dein Test bestanden..")
            
say ("als Belohnung und nutze es gut")
            
pc.give_item2(50512)
            
pc.give_item2(180)
            
pc.give_exp2(100000000)
            
pc.change_money(50000000)
        
end
    end
end 
würde euch mit Thanks überschütten..wenn mir jemand zeigt..wie und wo ich
diese Questgrenze setze und vorallem.. das auch was passiert..wenn ich diesen
Mob kille..

naja Quest schreiben..ist für mich erst dann schwer..wenn ich mehrere States
setzen muss..oder local selects..oder input :S
eure Hilfe nehm ich desswegen gerne an


Mit freundlichen Grüßen Endless :>
12/25/2010 01:06 .Alessa#1144
Vor States musst du keine Angst haben, die beißen nicht.

PHP Code:
quest tausend begin
    state start begin
        when login 
or levelup with pc.get_level() >= 70 begin
            say_title 
("Auftrag vom Schmied")
            
say ("Hallo "..pc.get_name().." !")
            
say ("Du scheinst nun so weit zu sein.")
            
say ("Wenn du weiterkommen möchtest, so ")
            
say ("stell dich den Kampf im Land der Riesen")
            
say ("und töte den Tausendkämpfer !")
            
say ("Wenn du dies geschafft hast, so ")
            
say ("wirst du hart belohnt !")
            
set_state(killen)
        
end
    end
    state killen begin
        when 1403.kill with pc
.get_level() >= 70 begin
            say_title 
("Tausendkämpfer")
            
say ("Verdammt "pc.get_name().."!!")
            
say ("Wie konntest du mich besiegen?!")
            
say ("ich war seid 1000 Kämpfe ungeschlagen")
            
say ("und aufeinmal wurde ich besiegt.")
            
say ("naja es war ein fairer Kampf, und du")
            
say ("hast eben gewonnen.. Glückwunsch! ")
            
say ("Du hast dein Test bestanden..")
            
say ("als Belohnung und nutze es gut")
            
pc.give_item2(50512)
            
pc.give_item2(180)
            
pc.give_exp2(100000000)
            
pc.change_money(50000000)
            
setstate(finish)
        
end
    end
    state finish begin
    end
end 
Das sollte es gewesen sein. Bei x.kill begin gibt es eine kleine Klausel, die leider etwas einschränkend wirkt: Du darfst sie nur ein Mal verwenden. Sie wirkt also nur für eine einzige Quest. Wenn bei dir nichts passiert, dann ist irgendwo eine andere Quest aktiv, die dir da den Brei verdirbt.
Das heißt aber nicht, dass du die nicht in mehreren Quests einbauen kannst: Lediglich wenn sie gleichzeitig aktiv sind, stören sie sich. Vielleicht ist das ja bei dir so.
Zudem kannst du dir das "pc.get_level() >= 70" beim Kill sparen. Wenn du schon vorher so eine Abfrage beim Erhalten der Quest hast, ist die in dem Fall überflüssig.
12/25/2010 01:14 Endless.#1145
Vielen Dank ;)

Hoffe sie klappt :D

Oder soll ich dieses
PHP Code:
 1403.kill with pc.get_level() >= 70 begin 
wegmachen und nur 1403.kill begin machen?
12/25/2010 01:26 .Alessa#1146
Ist im Grunde egal, weil beides geht. Ist halt nur unnötig und sollte es doch Probleme geben, dann lass den with weg... Aber so sollte die Quest klappen und auch nur 1x machbar sein.
12/25/2010 01:29 Endless.#1147
okay.. aber jetz kommt da son Fehler -->


Da steht Synthax error

[String "killen"]2: `)´ expented near `pc´

quest:31 abort core dumped


was hab ich denn jetz falsch gemacht?=/
12/25/2010 10:38 .NoThx#1148
habe mal andere stats genommen:
kann man überhaupt eigene stats setzen?
set_state(killen) ---> gegen q.set_quest_state(killen)
ersetzt
ver such den quest mal:
PHP Code:
quest tausend begin 
    state start begin 
        when login 
or levelup with pc.get_level() >= 70 begin 
            say_title 
("Auftrag vom Schmied"
            
say ("Hallo "..pc.get_name().." !"
            
say ("Du scheinst nun so weit zu sein."
            
say ("Wenn du weiterkommen möchtest, so "
            
say ("stell dich den Kampf im Land der Riesen"
            
say ("und töte den Tausendkämpfer !"
            
say ("Wenn du dies geschafft hast, so "
            
say ("wirst du hart belohnt !"
            
q.set_quest_state(killen
        
end 
    end 
    state killen begin 
        when 1403.kill with pc
.get_level() >= 70 begin 
            say_title 
("Tausendkämpfer"
            
say ("Verdammt "pc.get_name().."!!"
            
say ("Wie konntest du mich besiegen?!"
            
say ("ich war seid 1000 Kämpfe ungeschlagen"
            
say ("und aufeinmal wurde ich besiegt."
            
say ("naja es war ein fairer Kampf, und du"
            
say ("hast eben gewonnen.. Glückwunsch! "
            
say ("Du hast dein Test bestanden.."
            
say ("als Belohnung und nutze es gut"
            
pc.give_item2(50512
            
pc.give_item2(180
            
pc.give_exp2(100000000
            
pc.change_money(50000000
            
q.set_quest_state(finish
        
end 
    end 
    state finish begin 
    end 
end 
12/25/2010 11:57 .Delta#1149
wozu hast du q.set_state geschrieben o.O :D
set_state reicht vollkommen aus.
Probiers mal damit:
PHP Code:
quest tausend begin 
    state start begin 
        when login 
or levelup with pc.get_level() >= 70 begin 
            say_title 
("Auftrag vom Schmied"
            
say ("Hallo "..pc.get_name().." !"
            
say ("Du scheinst nun so weit zu sein."
            
say ("Wenn du weiterkommen möchtest, so "
            
say ("stell dich den Kampf im Land der Riesen"
            
say ("und töte den Tausendkämpfer !"
            
say ("Wenn du dies geschafft hast, so "
            
say ("wirst du hart belohnt !"
            
set_state(killen
        
end 
    end 
    state killen begin 
        when 1403.kill with pc
.get_level() >= 70 begin 
            say_title 
("Tausendkämpfer"
            
say ("Verdammt "..pc.get_name().."!!"
            
say ("Wie konntest du mich besiegen?!"
            
say ("ich war seid 1000 Kämpfe ungeschlagen"
            
say ("und aufeinmal wurde ich besiegt."
            
say ("naja es war ein fairer Kampf, und du"
            
say ("hast eben gewonnen.. Glückwunsch! "
            
say ("Du hast dein Test bestanden.."
            
say ("als Belohnung und nutze es gut"
            
pc.give_item2(50512
            
pc.give_item2(180
            
pc.give_exp2(100000000
            
pc.change_money(50000000
            
set_state(finish
        
end 
    end 
    state finish begin 
    end 
end 
12/25/2010 12:19 .NoThx#1150
is dat ned egal???
12/25/2010 12:24 .Delta#1151
Quote:
Originally Posted by .NoThx View Post
is dat ned egal???
weiß net, wozu soll ich den anderen weg testen (wenn es denn einer ist) wenn set_state zu 100% funktioniert. Man muss es nur richtig machen :D
12/25/2010 13:35 .NoThx#1152
stimmt^^
naja da ich neu bin (kanne s erst seid ca 2tagen)
ist das richtig:
Erstest ist OX starten
. ist mobs spawen
3. ist server boni an amchen...
ich brauche noch ideen was ich einbauen soll..
und hat er noch Tankan event?
der link ist down :(
PHP Code:
quest gmarround begin     
    state start begin     
        when pc
.is_gm() npc.click begin
        say_title
("GM Komando Zentrale")
        
say("Möchtest du OX Starten?")
        
local ox select("Ja""Nein")
        if 
ox == 2 then
            
return
        
end
        
if ox == 1 then
        oxevent
.open()
        
command("go ox")
        
        
end
        say
("Möchtest du ein Spawn event starten?")
        
locale sp select("Ja""Nein")
        if 
"..sp.." 2 then
            
return
        
end
        
if "..sp.." 1 then
        say
("Welches Monster Soll Gespawnt werden?")
        
local how input()
        
say("Wie oft? bei 0 wird 1 monster gespwnt")
        
locale many input()
        
say(" Jetzt Spawn event beginnen?")
        
local bes select("Ja""Nein")
        if 
"..bes.." 2 then
            
return
        
end
        
if "..bes.." 1 then
        mob
.spawn("..how..""..many..")
        
end
        say
(" Server Boni Event")
        
say("")
        
say("Was Soll Erhöht werden?")
        
locale eboni select("Item""Yang""Exp""Nichts")
        
say("um Wv %?")
        
local emuch input()
        
say("Wie lange")
        
local elong input()
        if 
"..eboni.." 4 then
            
return
        
end
            
if "..eboni.." 1 then 
            command
("priv_empire 0 1:item_drop "..emuch.." "..elong.."")
            
end 
        
if "..eboni.." 2 then
        command
("priv_empire 0 2:gold_drop "..emuch.." "..elong.."")
        
end
            
if "..eboni.." 3 then
            command
("priv_empire 0 4:exp "..emuch.." "..elong.."")
            
end
        end
    end
end 
12/25/2010 14:53 Endless.#1153
Naja habe meine Code.quest neu geschrieben.. sie funktioniert..
nur ich möchte das man sie auch nur 1x machen kann.. doch das problem
ist: Sobald man Schmied anclickt..kann man sie immer wieder machen
trotz..das ich als state finish gemacht habe..:S

hier___
PHP Code:

quest code begin
    state start begin
        when 20016.chat
."Das Passwort"with pc.get_level() >= 1 begin
            say 
("Sei gegrüsst "..pc.get_name().." !")
            
say ("Ich wollte dich um ein Gefallen bitten.")
            
say ("Irgentwo liegt mein Zettel wo mein ")
            
say ("Passwort für mein Lager draufsteht")
            
say ("im Experten Affendungeon müsste es sein.")
            
say ("Wenn du es hast , so bringe es mir bitte")
            
local a select ("Ich habs!""Ich habs vergessen")
            if 
== 2 then
                
return
            
end
            
if == 1 then
                say 
("Gut, "..pc.get_name().." !")
                
say ("lies es mir bitte vor ")
                
local a input()
                if 
!= "1024" then
                    
return
                
end
            end
            say 
("Danke "..pc.get_name().." !!")
            
say ("Dafür bekommst etwas kleines von mir ")
            
say ("Hier bisschen Taschengeld :) ")
            
pc.change_money(25000000)
            
pc.give_exp2(12000000)
                        
pc.give_item2(50512)
            
setstate(finish)
        
end
    end
    state finish begin
    end
end 
wenn se 100% funktioniert.. haben die User mal was zu knabbern :D
naja..nen levellimit füge ich noch ein..da sich jeder sonst nen neuen
Char macht und sich die Kohle und den Regi abkassiert :D

gruß Endless :D
12/25/2010 20:12 [uLow]TheCraftingMan#1154
Hmm brauch ma hilfe:
funkil.quest:
PHP Code:
quest funkill begin     
    state start begin     
        when 70041.
use begin     
            
if pc.getqf("kill") == 1 then    
                say
("Du musst 10 Sekunden warten..")    
                return    
            
end    
            say
("Das Töten kostet dich 3.000.000 Yang.")  
            
say("Zudem brauchst du mindestens Level 30.")  
            
say("Möchtest du jemanden töten?")  
            
local abfrage select("Weiter""Abbrechen")  
            if 
abfrage == 2 then  
                
return  
            
end  
            local a 
input()   
            
local b pc.get_name()   
            if 
"..a.." == pc.is_gm()     
                
say("Du Kannst Keinen GameMaster töten!")     
                
mob.spawn(2291)   
                
notice(" Der Spieler "..b.." wollte einen GameMaster Töten!")   
                
notice("Folge dessen ist, Das Ein Roter Drache Gespawnt wurde")   
                
notice("Solltet ihr durch den Roten Drachen sterben, bedankt")   
                
notice(" bei spieler "..b.." Ende Der Durchsage! ")   
                
end    
                
return    
            
end     
            
if pc.get_gold() <= 2999999 then  
                say
("Du hast nicht genug Yang.")  
                return  
            
end  
            
if pc.get_level() <= 29 then  
                say
("Dein Level reicht nicht aus.")  
                return  
            
end  
            pc
.give_gold(-3000000)  
            
command("kill "..a.."")      
            
say("Der Spieler Wurde Erfolgreich Umgebarcht")   
            
notice("Der Spieler "..a.." wurde von "..b.." umgebarcht")   
            
pc.setqf("kill"1)    
            
timer("killdelay"10)    
        
end              
     
        when 
"kill".timer begin    
            pc
.setqf("kill"2)    
        
end    
        when login with pc
.getqf("kill") == 1 then    
            timer
("killdelay"10)    
        
end    
    end     
end 
Error:
syntax error:[string "start"]:15: 'then' extended near 'say'
funkill.quest:2 Abort tray (core dumped)
12/25/2010 21:00 CauTaRt#1155
Quote:
Originally Posted by xXMeTiNgAmErXx View Post
Hmm brauch ma hilfe:
funkil.quest:
PHP Code:
quest funkill begin     
    state start begin     
        when 70041.
use begin     
            
if pc.getqf("kill") == 1 then    
                say
("Du musst 10 Sekunden warten..")    
                return    
            
end    
            say
("Das Töten kostet dich 3.000.000 Yang.")  
            
say("Zudem brauchst du mindestens Level 30.")  
            
say("Möchtest du jemanden töten?")  
            
local abfrage select("Weiter""Abbrechen")  
            if 
abfrage == 2 then  
                
return  
            
end  
            local a 
input()   
            
local b pc.get_name()   
            if 
"..a.." == pc.is_gm()     
                
say("Du Kannst Keinen GameMaster töten!")     
                
mob.spawn(2291)   
                
notice(" Der Spieler "..b.." wollte einen GameMaster Töten!")   
                
notice("Folge dessen ist, Das Ein Roter Drache Gespawnt wurde")   
                
notice("Solltet ihr durch den Roten Drachen sterben, bedankt")   
                
notice(" bei spieler "..b.." Ende Der Durchsage! ")   
                
end    
                
return    
            
end     
            
if pc.get_gold() <= 2999999 then  
                say
("Du hast nicht genug Yang.")  
                return  
            
end  
            
if pc.get_level() <= 29 then  
                say
("Dein Level reicht nicht aus.")  
                return  
            
end  
            pc
.give_gold(-3000000)  
            
command("kill "..a.."")      
            
say("Der Spieler Wurde Erfolgreich Umgebarcht")   
            
notice("Der Spieler "..a.." wurde von "..b.." umgebarcht")   
            
pc.setqf("kill"1)    
            
timer("killdelay"10)    
        
end              
     
        when 
"kill".timer begin    
            pc
.setqf("kill"2)    
        
end    
        when login with pc
.getqf("kill") == 1 then    
            timer
("killdelay"10)    
        
end    
    end     
end 
Error:
syntax error:[string "start"]:15: 'then' extended near 'say'
funkill.quest:2 Abort tray (core dumped)
Da die Quest anscheinend immernoch nicht funktioniert was auch logisch ist, weil sie noch viele Fehler enthielt, hab ich sie mal umgescriptet:

Naja gebe keine Garantie darauf, dass sie 100% funktioniert.
Weil wenn ich ehrlich bin, hab ich eine derartige Quest noch nie gescriptet ;)


MfG CauTaRt