[SERVICE] Die Questkontrolle

04/28/2015 11:21 stenlykkk#11431
Quote:
Originally Posted by bastüh33 View Post
Code:
when 50814.use begin
			if pc.getqf("powerover9000") > get_time() then
				syschat("Der Effekt wirkt bereits")
			else
				affect.add_collect(1, 1000, 60*3)
				pc.setqf("powerover9000", get_time() +60*3)
				pc.remove_item(item.vnum, 1)
			end
item type 18 glaub ich sollte gehn
Thanks ! :) :handsdown:
04/28/2015 17:13 Zphr#11432
Der Fehler kommt wenn ich auf einen Punkt klicke

[Only registered and activated users can see links. Click Here To Register...]

der mich teleporten sollte :

[Only registered and activated users can see links. Click Here To Register...]

04/29/2015 01:32 .ℓт ოﻨօ〤™#11433
hallo com, habe hier ne quest warum bekommt man keine Coins zugeschrieben?
hier ist die quest bitte hilft mir .

PHP Code:
quest dr_gutschein begin
    state start begin
        when 80014.
use or 80015.use or 80016.use begin
            local p 
100
            
if item.get_vnum() == 80015 then
                p 
500
            
elseif item.get_vnum() == 80016 then
                p 
1000
            end    
            local accountid 
mysql_query("SELECT * FROM player.player WHERE name='"..pc.get_name().."'","root","DBPW","player","DEINEIP")
            
local coins mysql_query("SELECT * FROM account.account WHERE id='"..accountid.account_id[1].."'","root","DBPW","account","DEINEIP")
            
say_title("Drachenmünzen Gutschein")
            
say("Hallo "..pc.get_name()..".")
            
say("Möchtest du diesen Gutschein")
            
say("im Wert von "..p.." Drachenmünzen einlösen?")
            if 
select ("Ja","Nein") == 2 then return end
            local updatecoins 
mysql_query("UPDATE account.account SET coins='"..coins.coins[1]+p.."' WHERE id='"..accountid.account_id[1].."'","root","DBPW","account","DEINEIP")
            
chat("Deine Drachenmünzen wurden dir erfolgreich gutgeschrieben.")
        
end
    end
end 
04/29/2015 06:31 rollback#11434
Quote:
Originally Posted by .ℓт ოﻨօ〤™ View Post
hallo com, habe hier ne quest warum bekommt man keine Coins zugeschrieben?
hier ist die quest bitte hilft mir .

PHP Code:
quest dr_gutschein begin
    state start begin
        when 80014.
use or 80015.use or 80016.use begin
            local p 
100
            
if item.get_vnum() == 80015 then
                p 
500
            
elseif item.get_vnum() == 80016 then
                p 
1000
            end    
            local accountid 
mysql_query("SELECT * FROM player.player WHERE name='"..pc.get_name().."'","root","DBPW","player","DEINEIP")
            
local coins mysql_query("SELECT * FROM account.account WHERE id='"..accountid.account_id[1].."'","root","DBPW","account","DEINEIP")
            
say_title("Drachenmünzen Gutschein")
            
say("Hallo "..pc.get_name()..".")
            
say("Möchtest du diesen Gutschein")
            
say("im Wert von "..p.." Drachenmünzen einlösen?")
            if 
select ("Ja","Nein") == 2 then return end
            local updatecoins 
mysql_query("UPDATE account.account SET coins='"..coins.coins[1]+p.."' WHERE id='"..accountid.account_id[1].."'","root","DBPW","account","DEINEIP")
            
chat("Deine Drachenmünzen wurden dir erfolgreich gutgeschrieben.")
        
end
    end
end 
Die Abfrage ist unnötig:
Code:
local p = 100 
if item.get_vnum() == 80015 then 
	p = 500 
elseif item.get_vnum() == 80016 then 
	p = 1000 
end
Kann man viel simpler und leichter anpassbar machen

ebenso wie diese query:

Code:
local accountid = mysql_query("SELECT * FROM player.player WHERE name='"..pc.get_name().."'","root","DBPW","player","DEINEIP")
wozu gibt es die questfunktion "pc.get_account_id()" ?

und diese query:

Code:
local coins = mysql_query("SELECT * FROM account.account WHERE id='"..accountid.account_id[1].."'","root","DBPW","account","DEINEIP")
ist ebenso unnötig, man kann im update den aktuellen wert nehmen + einen neuen wert dazurechnen

Dann kommt hinzu, was zwar egal ist aber trotzdem unnötig, dass den den Update in eine Variable gelegt hast. Das brauchst du nicht machen. Ausserdem hast du die coins (die in der DB den Datentyp int haben) mit '' gesetzt. In MySQL macht das zwar nichts aus, trotzdem sollte man sich daran nicht gewöhnen. In anderen DB-Systemen hätte das auch dadurch nicht geklappt ;) (das gleiche auch bei der Account-ID)

Dazu hast du 1. vergessen abzufragen, ob das item noch im Inventar ist wenn der Spieler auf Ja drückt (kann man einfach rüberhandeln während der Text kommt) und du hast es nicht removed.

Und warum es nicht geklappt hat:
Code:
"root","DBPW","account","DEINEIP"
an der Stelle muss natürlich was eingetragen werden, wenn nichts eingetragen wird, wird automatisch das aus der config genommen.


Hier die korrigierte Quest:
Code:
quest dr_gutschein begin 
	state start begin 
		when 80014.use or 80015.use or 80016.use begin 
			local coins = ({
				[80014] = 100,
				[80015] = 500,
				[80016] = 1000
			})[item.get_vnum()]
			say_title("Drachenmünzen Gutschein") 
			say("Hallo "..pc.get_name()..".") 
			say("Möchtest du diesen Gutschein") 
			say("im Wert von "..coins.." Drachenmünzen einlösen?") 
			if select("Ja","Nein") == 2 then return end
			if pc.count_item(item.get_vnum()) < 1 then
				syschat("Nice try ...")
				return
			end
			pc.remove_item(item.get_vnum(), 1)
			mysql_query("UPDATE account.account SET coins = coins+"..coins.." WHERE id = "..pc.get_account_id().." LIMIT 1;") 
			syschat("Deine Drachenmünzen wurden dir erfolgreich gutgeschrieben.") 
		end 
	end 
end
04/29/2015 12:31 .ℓт ოﻨօ〤™#11435
ich danke dir bin noch ein noob ;):handsdown:
04/29/2015 14:42 Toshiba22#11436
Tag, ich habe ein sd3 Problem , ich kann mich von dem Denkmal aus nicht in die Boss kammer von der BOSS Spinne im Sd3 Porten, obwohl ich einen schlüssel habe, und in der GRP bin.Wenn ich mich hin porte per /warp befehl geht der RUN aber über das denkmal nicht ( Besetzt , oder einfach nichts ist die fehlermeldung ... )


quest sdentry begin
state start begin
when 20355.chat."Zugang zur Bruthöhle" begin
if pc.count_item("30324") < 1 then
say("Dieses Tor lässt sich nur mit dem")
say("Arachnidenschlüssel öffnen. Diesen Schlüssel")
say("droppst du von der Königsspinne im Spinnendungeon 1.")
elseif pc.count_item("30324") >= 1 then
say("Ihr habt die Königsspinne besiegt und")
say("einen Arachnidenschlüssel ergattert?")
say("Ihr seid wahrlich bereit gegen die Baroness")
say("zu kämpfen!")
say("Doch leider seid nur ihr allein dazu auserwählt!")
say("Ich teleporte euch jetzt.")
pc.remove_item("30324",1)
d.new_jump_all(193, 881, 6149)
d.regen_file("/home/game/share/data/dungeon/sd3/eier.txt")
d.regen_file("/home/game/share/data/dungeon/sd3/boss.txt")
end
end
when 2092.kill begin
timer("bosskill", 10)
syschat("Ihr habt es wirklich geschafft die Baroness zu töten!")
syschat("Ihr seit ein wahrer Kämpfer!")
syschat("Ihr werdet in 10 Sekunden in euer Dorf teleportiert.")
end
when bosskill.timer begin
d.exit_all_to_start_position()
end
end
end
05/02/2015 15:36 Zphr#11437

explager
Wenn ich exp einzahle bekomme ich unmenegen an erfahrung und etliche lvl ups
05/02/2015 21:41 Shimao#11438
Nach dem ersten Login ist das Pferd Lvl. 30 aber nach einem Relog ist es wieder auf 0 uns bleibt auch dort, kann das Pferd dann trtz rufen aber keine Reitkünste ausüben.. will das man nach dem ersten Login permanent das Pferdelvl 30 hat..

Code:
quest pferdsofort begin
	state start begin
		when login begin
			horse.set_level(30)
			setstate(_COMPLETE_)
		end
	end
	state _COMPLETE_ begin
	end
end
05/02/2015 21:44 rollback#11439
Geht nur wenn man eine Lehre hat. Am besten in die Ausbildungsquest reinsetzen
05/03/2015 15:06 .yorliK#11440
Ich bin da auf ein Problem gestoßen, und zwar habe ich diese Quest:
Code:
quest Dadada begin
	state start begin
		when 35002.use begin
			game.set_event_flag("TestFlag", game.get_event_flag("TestFlag")+1)
			chat("Flag: "..game.get_event_flag("TestFlag"))
		end
	end
end
Diese setzt beim Aktiveren den TestFlag immer einen höhe und gibt dann den, so sollte es jedenfalls sein aktuellen Wert des Flags im Chat wieder. Da stimmt allerdings etwas nicht.
Im Chat ist immer der vorherige Wert des Flags zu sehen. Das heißt der Flag ist 4 und wird auf 5 gesetzt, im Chat wird allerdings 4 angezeigt. Warum ist das so?
05/03/2015 15:13 rollback#11441
Quote:
Originally Posted by Kilroy. View Post
Ich bin da auf ein Problem gestoßen, und zwar habe ich diese Quest:
Code:
quest Dadada begin
	state start begin
		when 35002.use begin
			game.set_event_flag("TestFlag", game.get_event_flag("TestFlag")+1)
			chat("Flag: "..game.get_event_flag("TestFlag"))
		end
	end
end
Diese setzt beim Aktiveren den TestFlag immer einen höhe und gibt dann den, so sollte es jedenfalls sein aktuellen Wert des Flags im Chat wieder. Da stimmt allerdings etwas nicht.
Im Chat ist immer der vorherige Wert des Flags zu sehen. Das heißt der Flag ist 4 und wird auf 5 gesetzt, im Chat wird allerdings 4 angezeigt. Warum ist das so?
Sieht eigentlich richtig aus, es kann natürlich sein, dass der set-Befehl noch nicht fertig ist wenn der chat ausgeführt wird.
05/03/2015 15:33 Rofelmau#11442
Das ganze kann man ja sogar noch witziger machen
PHP Code:
quest Dadada begin
    state start begin
        when 35002.
use begin
            local test 
game.get_event_flag("TestFlag")+1
            game
.set_event_flag("TestFlag"test)
            
chat("Flag: "..game.get_event_flag("TestFlag"))
            
chat("Test: "..test)
        
end
    end
end 
hier ist TestFlag nicht nur 1 hinterher, witzigerweise ist die variable Test richtig....
05/04/2015 08:46 stenlykkk#11443
Hello people,
I could ask about how to set up a reward for a boy char and a girl char?

Code:
quest ukol_kopani begin
        state start begin
					when levelup with pc.get_level() >= 30 begin 
		set_state( information )
                end
        end

        state information begin
                when letter begin

                        local v = find_npc_by_vnum(20015)

                        if v != 0 then
                                target.vid("__TARGET__", v, "Najdi Dřevorubce.")
                        end
                end


                when __TARGET__.target.click or
                        20015.chat."Těžení Rud " with pc.level >= 30 begin
                        target.delete("__TARGET__")
                        say_title("Dřevorubec:")
                        say("")
                        ----"123456789012345678901234567890123456789012345678901234567890"|
                        say("Hele ty!... Jo ty!... pojd ke mě. ")
                        say("")
                        say("Vidím že jsi našel tuto oblast zde tu projde málo lidí  ")
                        say("ale mám pro tebe lákavou nabídku. ")
                        say("")
                        say("Nechtěl by jsi mi pomoc?   ")
                        say("")
                        say("")
                        wait()
                        say_title("Dřevorubec:")
                        say("")
                        ----"123456789012345678901234567890123456789012345678901234567890"|
                        say("Já ti vyrobím oblek kopáče  ")
                        say("ale chci aby jsi mi na to přinesl nějaký material.")
                        say("")
                        say("Já nejsem moc dobrý v kopání já spíše kácím stromy.")
                        say("A určitě ti to půjde lépe než mě. ")
                        say("")
                        wait()
                        say_title("Dřevorubec :")
                        say("")
                        ----"123456789012345678901234567890123456789012345678901234567890"|
                        say("Na kostým potřebuji 10x Měď a 10x Nefrit")
                        say("a 10x Diamant.")
                        say("")
                        say("Popravdě ti chci říci že potřebuji jen 5kusů od každého")
                        say("ale rád bych z toho také něco měl když už si stím dám tu práci.")
                        say("ease.")
                        say("")
                        say("Je to velice těžký úkol.")
                        say("Přeješ si ho přijmout?!")
                        say("")
                        local s=select("Ano chci","Ne nechci")
                        if 2==s then
                                say_title("Dřevorubec:")
                                say("")
                                say("Opravdu nechceš přijmout tento úkol?")
                                say("možnost nepujde vrátit...")
                                local a=select("Ano","Ne")
                                if  2==a then
                                        say_title("Dřevorubec:")
                                        say("")
                                        say("Nemusíš se bát!")
                                        say("")
                                        say("Můžeš se ke mě kdykoliv vrátit.")
                                        say("")
                                        return
                                end
                                say_title("Dřevorubec:")
                                say("")
                                say("Jak chceš....")
                                say("ta námaha by za to opravdu stála..")
                                say("srabe..")
                                say("")
                                set_state(__GIVEUP__)
                                return
                        end
                        say_title("Dřevorubec:")
                        say("")
                        say("Ano vážně!?")
                        say("")
                        say("Díky ti kamaráde. :) ")
                        say("")
                        set_state(to_gain_material)
                end
        end

        state to_gain_material begin

                when letter begin
                        send_letter("Těžení Rud")

                        local gold=pc.count_item(50627)
                        local silver=pc.count_item(50621)
                        local ebony=pc.count_item(50624)

                        if        gold>=10  and silver>=10 and ebony>=10 then
                                local v = find_npc_by_vnum(20015)

                                if v != 0 then
                                        target.vid("__TARGET__", v, "Dřevorubec")
                                end
                                return
                        end

                end

                when info or button begin
                        local gold=pc.count_item(50627)
                        local silver=pc.count_item(50621)
                        local ebony=pc.count_item(50624)

                        if        gold>=10  and silver>=10 and ebony>=10 then

                                say_title("Mám všechen material na oblek!")
                                say("")
                                ----"123456789012345678901234567890123456789012345678901234567890"|
                                say("Mám všechen material pro výrobu")
                                say("toho obleku.")
                                say("")
                                say("Měl bych mu to přinést!")
                                say("")
                                return
                        end

                        say_title("Dát material!")
                        say("")
			----"123456789012345678901234567890123456789012345678901234567890"|
                        say("Dřevorubec potřebuje pro výrobu obleku.")
                        say("")
                        say("10x Měd , 10x Diamant , 10x Nefrit ")
                        say("")
                        say("")
                        say("Potřebné věci seženeš vytavením z rud.")
                        say("u alchemistů! ")
                        say("")
                        say("")
                        say("")
                        say("")
                end

                when __TARGET__.target.click or
                        20015.chat."Oblek kopáče." begin
                        target.delete("__TARGET__")

                        local gold = pc.count_item(50627)
                        local silver = pc.count_item(50621)
                        local ebony = pc.count_item(50624)


                        if        gold<10 or silver<10 or ebony<10 then

                                say_title("Dřevorubec:")
                                say("")
                                say("Nemáš toho dostatek!!")
                                say("")

                                local s=select("Zkusím to znovu","Kašlu na to")
                                if 2==s then
                                  say_title("Dřevorubec")
                                say("")
                                say("Opravdu chceš úkol ukončit?")
                                say("")
                                        local a=select("Ano","Ne")
                                        if  2==a then
                                                say_title("Dřevorubec")
                                                say("")
						----"123456789012345678901234567890123456789012345678901234567890"|
                                                say("Asi je to pro tebe velice těžký úkol.")
                                                say("")
                                                say("Když uvažuješ o ukončení  ")
                                                return
                                        end
                                say_title(":")
                                say("")
                                ----"123456789012345678901234567890123456789012345678901234567890"|
                                  say("Bude to chviličku trvat...")
                                  say("")
                                  say("It was a breakthrough idea... A true shame.")
                                  say("")
                                        set_state(__GIVEUP__)
                                        return
                                end
                                say_title("Dřevorubec:")
                                say("")
                                ----"123456789012345678901234567890123456789012345678901234567890"|
                                say("Přesně tak nevzdávej to!")
                                say("")
                                say("Hodně štěstít kamaráde")
                                say("")
                                return
                end

                if        gold>=10  and silver>=10 and ebony>=10 then

                        say_title("Dřevorubec:")
                        say("")
                        ----"123456789012345678901234567890123456789012345678901234567890"|
                        say("Ty máš opravdu všechen material?!")
                        say("")
                        say("Nějaký(á) rychlý(á)...,")
                        say("Dej mi ho a nestůj tam tak.")
                        say("")
                        wait()
                        say_title("Dřevorubec:")
                        say("")
                        ----"123456789012345678901234567890123456789012345678901234567890"|
                        say("Velice ti děkuji!")
		             
                        say("")
                        say("Tak zde máš svůj oblek.")
                        say("")
                        say("Snad se ti bude líbit..")
                        say("")
                        pc.remove_item(50627,10)
                        pc.remove_item(50621,10)
                        pc.remove_item(50624,10)

                        say_reward("Zde máš 3.000.000 BZK")
                        pc.give_exp2(3000000)

                        say_reward("a zde 20.000.000 Yang.")
                        pc.change_money(20000000)

			if pc.job == 0 then
				pc.give_item2(Costume man ID)
				pc.give_item2(Hair Man ID)
				say_reward("costume Man ")
			elseif pc.job == 1 then
				pc.give_item2(costume woman id)
				pc.give_item2(hair woman ID)

				say_reward("costume woman")
			end
			say("")
                        clear_letter()
                        set_state(__COMPLETE__)
                end

                end
        end
state __GIVEUP__ begin
end
state __COMPLETE__ begin
        when enter begin
        end
end
end
05/04/2015 09:27 timiich12#11444
ich brauche einmal hilfe die quest klappt nicht und ich finde den Fehler nicht wäre nett wenn jemand mal drüber schaut
05/04/2015 09:29 rollback#11445
Quote:
Originally Posted by stenlykkk View Post
Hello people,
I could ask about how to set up a reward for a boy char and a girl char?
Its pretty simple: pc.get_sex() (0 = male, 1 = female)

use this:
Code:
pc.give_item2(({vnumMale, vnumFemale})[pc.get_sex()+1], 1)
replace "vnumMale" with the item a male should get as reward and "vnumFemale" for the female reward