[SERVICE] Die Questkontrolle

03/03/2014 01:04 Jоe#9781
Code:
quest user_panel begin
	state start begin
		when letter with pc.is_player() begin
			send_letter("User Panel by CrazyWorld2")
		end
		when button or info begin
			say_title("Willkommen im User Panel by CrazyWorld2")
			say("")
			say_reward("Bitte waehle deine Option")
			local head = select("Teleportieren", "Lager ", "Abbrechen")

			if main_set == 1 then
				say("Du willst dich also Teleportieren?")
				say("")
				local j = select("Ja","Nein")
			end	
			if j == 2 then
				return
			end
			if j == 1 then
				say_reward("Wo möchtest du hin:")
				local k = select("Map1-Rot","Map1-Blau","Map1-Gelb","Nirgens")
			end	
			if k == 4 then
				return
			end
			if k == 1 then
				pc.warp(469300, 964200)
			end
			if k == 2 then
				pc.warp(969600, 278400)
			end
			if k == 3 then
				pc.warp (55700, 157900)
			end 
			
			if head == 2 then
				say_title("Lager")
				say_reward("Waehle deine Option")
				local lager = select("Lager oeffnen", "Itemshop Lager oeffnen", "Abbrechen")
			end
			if lager ==1 then
				send_letter("User Panel by CrazyWorld2")
				game.open_safebox()
				setskin(NOWINDOW)
			
			elseif lager == 2 then
				send_letter("User Panel by CrazyWorld2")
				game.open_mall()
				setskin(NOWINDOW)
			
			else lager == 3 then
				send_letter("User Panel by CrazyWorld2")
				return
			end
			
			if head == 5 then
				send_letter("User Panel by CrazyWorld2")
				return
			end
		end
	end
end
03/03/2014 01:43 FedoraPro#9782
Hey, ich hab mal ne Quest erweitert und editiert bzw angepasst.

Mit der Quest kann ich mein Pet rufen: game 2089, inc Boni, inc korrekter Boni entfernung. das geht alles, aber wie kann ich machen das mein Pet beim Mapwechsel wieder automatisch erscheint ( der queststate wird richtig gespeichert, die PetBoni bleiben auch erhalten, bevor man aber das pet nochmal rufen kann werden aber die Boni entfernt.)

Also, wie kann ich machen das nicht nur die Boni vom pet sondern das Pet ansich nach einem relog/char/mapwechsel wieder kommt?.

Ich vermute ja mit "pc.get irgend nen quest state" bei "when Login or" hab aber noch nicht die wahre Lösung gefunden.


Die quest ist gekürzt um es ein wenig übersichtlicher zu machen.
PS: es is das Pet system wo man das Horse level als Pet nützt, "Horse level old" wird nciht benötigt weil pferde auch via Mount system verwaltet werden ( so hab ich volle 30 plätze für Pets :D und das bei meinem Lieblingscore 2089

Code:
quest phoenix begin
    state start begin
		function set_pet_name(name)
            mysql_query("DELETE FROM player.horse_name WHERE id = \\'"..pc.get_player_id().."\\'")
            mysql_query("INSERT INTO player.horse_name(id, name) VALUES(\\'"..pc.get_player_id().."\\', \\'"..name.."\\')")
        end
		function get_pet_name()
            local pet_name = mysql_query("SELECT * FROM player.horse_name WHERE id = \\'"..pc.get_player_id().."\\'")
            return (pet_name.name or {"Pet"})[1]
        end
        when 53001.use begin
            akna = haustiere.get_pet_name()
			if string.len(akna) < 5 then
					say_reward("Dein Haustier besitzt bis jetzt keinen Namen.")
						say("")
						say("Kaufe ein Stück Petzucker,")
						say("und gib ihm einen persönlichen")
						say("Spitznamen, dieser gilt für alle")
						say("Deine Pets, kann aber geändert")
						say("werden.")
						say("")
						say("Benütze dafür Petzucker")
						
					local s=select("OK")
						if s==1 then
							return
						set_state(back)	
					end
				else
						chat("Dein Phönix wurde gerufen! +15% Exp")
						affect.add_collect(apply.EXP_DOUBLE_BONUS, 15, 60*60*12)
						horse.set_level(22)
						horse.set_name(haustiere.get_pet_name())
						horse.summon()horse.unride()
						set_state(back)
			               end

                     end
	state back begin
		when 53001.use or 53005.use or 53013.use or 53006.use or 53007.use or 53008.use or 53011.use or 53010.use or 53009.use begin
            chat("Dein Pet wurde weggeschickt!")
			affect.remove_collect(apply.EXP_DOUBLE_BONUS, 15, 60*60*12)		
			horse.unsummon()
                        horse.set_level ("0")
			set_state(start)
			horse.unsummon()
		end
	end
end
03/03/2014 19:30 rollback#9783
Habe ein Problem mit der DT-Quest.

PHP Code:
quest dt begin
    state start begin
        when login begin
            
if pc.get_map_index() == 66 then            
                
if pc.get_x() < 2048+88 or pc.get_y() < 6656+577 or pc.get_x() > 2048+236 or pc.get_y() > 6656+737 then
                    pc
.warp((5376+532)*100, (512+596+4)*10065)
                
end
                pc
.set_warp_location(655376+532512+596+4)
            elseif 
pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then
                pc
.set_warp_location(655376+532512+596+4)
            
end
        end
        when 20348.click begin
            
if pc.get_level() <=30 then 
                say_title
("Wächter des Dämonenturmes")
                
say("")
                
say("Du hast noch nicht genügend Kampferfahrung gesammelt!")
                
say("")
                
say_reward("Du kannst den Dämonenturm erst mit Level 30 betreten."
                return
            
end
            
if pc.get_level() >=30 then
                say_title
("Wächter des Dämonenturmes")
                
say("")
                
say("Der Dämonenturm ist die Heimat von schrecklichen Kreaturen,")
                
say("die nichts lieber machen würden, als dich zu töten.")
                
say("Die Boni "Stark gegen Untote" und "Pfeilwiderstand" könnten")
                
say("dir sehr hilfreich sein!")
                
say("")
                
say_reward("Ab Level 75 hast du die Möglichkeit den Dämonenturm")
                
say_reward("mit einer Gruppe zu betreten.")
                
say("")
                
say_reward("Möchtest du den Dämonenturm betreten?")
                
local betreten select("Dämonenturm normal betreten""Dämonenturm als Gruppe betreten""Abbrechen"
                if 
betreten == 1 then 
                    pc
.warp (216500727000)                 
                
end
                
if betreten == and pc.get_level() >=75 then
                    
if party.is_party() then
                        say_title
("Wächter des Dämonenturmes")
                        
say("")
                        
say("Bitte achte darauf, dass sich alle Gruppenmitglieder im Tempel befinden!")
                        
say("")
                        
say_reward("Möchtest du den Dungeon wirklich mit deiner Gruppe betreten?")
                        
local gruppe_betreten select("Dämonenturm betreten""Abbrechen")
                        if 
gruppe_betreten == 1 then
                            d
.new_jump_party(66special.devil_tower[1][1], special.devil_tower[1][2])
                            
timer("zeit_bis_port"20)
                            
d.notice("In 20 Sekunden geht es los!")
                        
end
                        
if gruppe_betreten == 2 then
                            
return
                        
end
                    end
                    
if not party.is_party() then
                        say_title
("Wächter des Dämonenturmes")
                        
say("")
                        
say_reward("Du bist in keiner Gruppe!")
                        
local keine_gruppe select("OK")
                        if 
keine_gruppe == 1 then
                            
return
                        
end
                    end
                end
                
if betreten == and pc.get_level() <=75 then
                    say_title
("Wächter des Dämonenturmes")
                    
say("")
                    
say_reward("Du kannst diese Option erst mit Level 30 nutzen.")
                    return
                
end
                
if betreten == 3 then
                    
return
                
end
            end
        end
        when 8015.kill begin
            timer
("zeit_bis_port"10)
            
d.notice("Ihr habt den Metin der Härte zerstört!")
            
d.notice("In 10 Sekunden werdet ihr in die nächste Ebene teleportiert.")
        
end
    when zeit_bis_port
.timer begin
        d
.new_jump_all(66special.devil_tower[1][1], special.devil_tower[1][2])
        
d.regen_file("data/dungeon/deviltower2_regen.txt")
        
d.set_warp_at_eliminate(4d.get_map_index(), special.devil_tower[2][1], special.devil_tower[2][2], "data/dungeon/deviltower3_regen.txt")
    
end
    
--when devil_stone2.kill begin
    
--d.jump_all_local(special.devil_tower[2][1], special.devil_tower[2][2])
    --
end
    when devil_stone3
.kill begin
        
--d.jump_all_local(special.devil_tower[3][1], special.devil_tower[3][2])
        --
d.set_exit_all_at_eliminate(6)
        --
d.set_warp_at_eliminate(6d.get_map_index(), 100100)
        --
d.set_warp_at_eliminate(4655376+532512+596+4)
        
d.set_warp_at_eliminate(4d.get_map_index(), special.devil_tower[3][1], special.devil_tower[3][2], "data/dungeon/deviltower4_regen.txt")
        
d.check_eliminated()
        --
d.exit_all()
    
end
    
function get_4floor_stone_pos()
        
local positions = {
        {
368629},
        {
419630},
        {
428653},
        {
422679},
        {
395689},
        {
369679},
        {
361658},
        }
        for 
1do
        
local j number(i7)
        if 
!= j then
            local t 
positions[i];
            
positions[i] = positions[j];
            
positions[j] = t;
        
end
        end
        
--for 1do
    --    
positions[i][1] = positions[i][1] * 100
    
--    positions[i][2] = positions[i][2] * 100
     
--   end
        
return positions
    end
    when 8016.kill with pc
.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
        d
.setf("level"4)
        -- 
¦A²{¤j¶q©Çª«¤Î»s³y¯u¥ÛÀY©M°²¥ÛÀY
        
--d.regen_file("data/dungeon/deviltower4_regen.txt")
        
local positions deviltower_zone.get_4floor_stone_pos()
        for 
1do
        
chat(positions[i][1], positions[i][2])
        
d.set_unique("fake" .. d.spawn_mob(8017positions[i][1], positions[i][2]))
        
end
        chat
(positions[7][1], positions[7][2])
        
local vid d.spawn_mob(8017positions[7][1], positions[7][2])
        
chat(vid)
        
d.set_unique("real"vid)
        
server_loop_timer('devil_stone4_update'10pc.get_map_index())
        
server_timer('devil_stone4_fail1'5*60pc.get_map_index())

        
d.notice("Findet den richtigen Metinstein und zerstört ihn.");
        
d.notice("Die falschen Metinsteine werden verschwinden!");
        
d.notice("Ihr habt 15 Minuten zeit!");
    
end

    when devil_stone4_fail1
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Verbleibende Zeit: 10 Minuten")
        
server_timer('devil_stone4_fail2'5*60get_server_timer_arg())
        
end
    end

    when devil_stone4_fail2
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Verbleibende Zeit: 5 Minuten")
        
server_timer('devil_stone4_fail'5*60get_server_timer_arg())
        
end
    end

    when devil_stone4_fail
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Die Zeit ist abgelaufen")
        
d.notice("Ihr werdet nun nach draußen teleportiert")
        
d.exit_all()
        
clear_server_timer('devil_stone4_update'get_server_timer_arg())
        
end
    end

    when devil_stone4_update
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        
if not d.is_unique_dead("real"then
            
for 1do
            if 
d.getf("fakedead" .. i) == 0 then
                
if d.unique_get_hp_perc("fake" .. i) < 50 then
                d
.purge_unique("fake" .. i)
                
d.setf("fakedead" .. i1)
                
d.notice("Der falsche Metinstein ist verschwunden..");
                
end
            end
            end
        
else
            --
d.clear_regen()
            --
d.regen_file("data/dungeon/deviltower5_regen.txt")
            
server_timer("devil_stone4_end"5get_server_timer_arg())
            
d.notice("Ihr habt den richtigen Metinstein zerstört.");
            
d.notice("Ihr werdet nun in die nächste Etage teleportiert")
            
clear_server_timer('devil_stone4_fail1'get_server_timer_arg())
            
clear_server_timer('devil_stone4_fail2'get_server_timer_arg())
            
clear_server_timer('devil_stone4_fail'get_server_timer_arg())
        
end
        
else
        
server_timer('devil_stone4_stop_timer'1get_server_timer_arg())
        
end
    end

    when devil_stone4_stop_timer
.server_timer begin
        clear_server_timer
('devil_stone4_update'get_server_timer_arg())
    
end

    when devil_stone4_end
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.setf("level"5)
        
d.setf("stone_count"5)
        
d.notice("Du bist nun in der 5. Ebene")
        
d.notice("Öffne alle Alten Siegel um in die nächste Ebene zu gelangen.")
        
d.notice("Du hast 20 Minuten Zeit um alle Siegel zu öffnen.")
        
d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])
        
server_timer('devil_stone5_fail1'5*60get_server_timer_arg())
        
clear_server_timer('devil_stone4_update'get_server_timer_arg())

        -- 
bla bla
        d
.set_regen_file("data/dungeon/deviltower5_regen.txt")

        -- 
bla bla 2
        d
.spawn_mob(20073421452)
        
d.spawn_mob(20073380460)
        
d.spawn_mob(20073428414)
        
d.spawn_mob(20073398392)
        
d.spawn_mob(20073359426)
        
end
    end
    when devil_stone5_fail1
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Verbleibende Zeit: 15 Minuten")
        
server_timer('devil_stone5_fail2'5*60get_server_timer_arg())
        
end
    end

    when devil_stone5_fail2
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Verbleibende Zeit: 10 Minuten")
        
server_timer('devil_stone5_fail3'5*60get_server_timer_arg())
        
end
    end

    when devil_stone5_fail3
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Verbleibende Zeit: 5 Minuten")
        
server_timer('devil_stone5_fail'5*60get_server_timer_arg())
        
end
    end

    when devil_stone5_fail
.server_timer begin
        
if d.select(get_server_timer_arg()) then
        d
.notice("Die Zeit ist abgelaufen")
        
d.notice("Ihr werdet nun nach draußen teleportiert")
        
d.exit_all()
        
end
    end

    
--when devil_stone4.kill begin
        
--d.setf("level"5)
        --
d.setf("stone_count"4)
        --
d.clear_regen()
        --
d.regen_file("data/dungeon/deviltower5_regen.txt")
        --
d.jump_all_local(special.devil_tower[4][1], special.devil_tower[4][2])
    --
end

    when 1062.kill with pc
.in_dungeon() and d.getf("level") == 5 begin
        local KILL_COUNT_FOR_DROP_KEY 
5
        
--if is_test_server() then
        
--KILL_COUNT_FOR_DROP_KEY 1
        
--end
        local n 
=d.getf("count") + 1
        d
.setf("count"n
        if 
== KILL_COUNT_FOR_DROP_KEY then
        
-- bla bla 3
        game
.drop_item(500841)
        
d.setf("count"0)
        
end
    end
    when devil_stone5
.take with item.vnum == 50084 begin
        npc
.purge()
        
item.remove()
        
d.setf("stone_count"d.getf("stone_count") - 1)
        if 
d.getf("stone_count") <= 0 then
        d
.setf("level"6)
        
d.clear_regen()
        
d.regen_file("data/dungeon/deviltower6_regen.txt")

        
d.notice("Ihr habt alle alten Siegel geöffnet. Ihr werdet nun")
        
d.notice("in die 6. Ebene teleportiert.")
        
d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])
        
clear_server_timer('devil_stone5_fail1'get_server_timer_arg())
        
clear_server_timer('devil_stone5_fail2'get_server_timer_arg())
        
clear_server_timer('devil_stone5_fail3'get_server_timer_arg())
        
clear_server_timer('devil_stone5_fail'get_server_timer_arg())
        else
        
d.notice("Ihr habt bis jetzt "..d.getf(5-("stone_count")).." Siegel geöffnet.")
        
end
    end

    when devil_stone6
.kill begin
        
-- bla bla 4
        
-- bla bla 5
        
--d.jump_all(special.devil_tower[6][1], special.devil_tower[6][2])
        
d.kill_all()
       -- 
d.set_warp_at_eliminate(3*60655376+532512+596+4)
        
d.check_eliminated()
        
d.spawn_mob(70074425216)
        
d.spawn_mob(70075430216)
        
d.spawn_mob(70076435216)
        
d.setqf("can_refine"1)
        
timer("zeit_bis_schmied_anklickbar"60)
        
d.notice("Die dämonischen Schmiede sind erschienen!")
        
d.notice("Ihr könnt nur einen Gegenstand verbessern und habt nun eine")
        
d.notice("Minute Zeit, bis die Schmiede anklickbar sind.")
    
end
    when zeit_bis_schmied_anklickbar
.timer begin 
        when 20074.click 
or 20075.click or 20076.click.with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            say_title
("Dämonischer Schmied")
            
say("")
            
say_title("Möchtest du in die höheren Etagen?")
            
say("Dort findest du weitere Gegner wie zum Beispiel den Sensenmann.")
            
say("")
            
say("Möchtest du wirklich fortfahren?")
            
local hoehere_etagen select("Ja!""Abbrechen")
            if 
hoehere_etagen == 1 then
                say_title
("Dämonischer Schmied")
                
say("")
                
say("Ihr werdet in 15 Sekunden in die 7. Etage teleportiert.")
                
timer("zeit_bis_etage7"15)
                return
                
d.notice("Ihr werdet in 15 Sekunden in die 7. Etage teleportiert.")
            
end
        end
        when zeit_bis_etage7
.timer begin
            d
.clear_regen()

            
d.spawn_mob(8018639658)
            
d.spawn_mob(8018611637)
            
d.spawn_mob(8018596674)
            
d.spawn_mob(8018629670)

            
d.setf("level"7)

            
d.jump_all(2048+5906656+638)
        
end
    
        when 8018.kill with pc
.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            local cont 
d.getf("7_stone_kill") + 1
            d
.setf("7_stone_kill"cont)

            if 
cont >= 4 then
                d
.setf("7_stone_kill"0)
                
d.set_regen_file("data/dungeon/deviltower7_regen.txt")
            
end    
        end

        when 8019.kill with pc
.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            game
.drop_item(303001)
        
end

        when 30300.
use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            pc
.remove_item("30300"1)

            
local pct number(1,10)
    
            if 
pct == 1 then
                
-- bla bla 7
                game
.drop_item(303021)
                
d.clear_regen()
            else
                -- 
bla bla 8
                game
.drop_item(303011)
            
            
end
        end

        when 30302.
use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            
-- bla bla 9
            say
("Die Karte wird euch alle in die nächste Ebene")
            
say("des Dämonenturms bringen.")
            
pc.remove_item("30302"1)
            
timer("devil_jump_8"6)
            
d.clear_regen()
        
end
                        
        
--------------------------------------------
        -- 
bla bla 10
        
--------------------------------------------
        
when devil_jump_8.timer begin
            d
.setf("level"8)
            
d.jump_all(2048+5906656+403)
            
d.set_regen_file("data/dungeon/deviltower8_regen.txt")
            
d.spawn_mob(20366640460)
            
local _countpc.count_item(30302)-- bla bla 11
            pc
.remove_item(30302,_count)
        
        
end

        when 1040.kill with pc
.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            local pct1 
number(15)
            if 
pct1 == 1 then
                local pct2 
number(110)
                if 
pct2 == 1 then
                    
-- bla bla 12
                    game
.drop_item(303041)
                else
                    -- 
bla bla 13
                    game
.drop_item(303031)
                
end
            
else
                return
            
end
        end

        when 20366.take with item
.vnum == 30304 begin
            
-- bla bla 14
            npc
.purge()
            
item.remove()
            
timer("devil_jump_9"6)
        
end

        
---------------------------------------------
        -- 
bla bla 15
        
---------------------------------------------
        
when devil_jump_9.timer begin
            d
.setf("level"9)
            
d.jump_all(2048+5906656+155)
            
d.regen_file("data/dungeon/deviltower9_regen.txt")
        
end

        when 1093.kill with pc
.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
            d
.kill_all()
            
timer("CMD1"3)
        
end

        when CMD1
.timer begin
            cmdchat
("CMD1")
            
d.notice("Ihr habt den Sensenmann getötet und damit den Dungeon abgeschlossen!")
            
d.notice("In 45 Sekunden könnt ihr euch entscheiden ob ihr hier bleiben möchtet,")
            
d.notice("oder euch in eure Heimatstadt teleportieren möchtet.")
            
timer("zurueckporten"45)
        
end
        when zurueckporten
.timer begin
            say_title
("Dungeonmeister")
            
say("")
            
say_reward("Möchtest du hier bleiben oder in deine Heimatstadt teleportiert werden?")
            
local ende select("Ich bleibe hier""Ich möchte in meine Heimatstadt")
            if 
ende == 1 then
                
return
            
end
            
if ende == 2 then
                
return
            
end
        end
    end
end 
Mache sie auch nochmal in den Anhang weil die ja etwas größer ist.
03/03/2014 21:17 nOa##9784

Es wäre nützlich, wenn du uns dein Problem nennen/beschreiben würdest.
03/03/2014 21:23 rollback#9785
Quote:
Originally Posted by 123Crusher123 View Post
Es wäre nützlich, wenn du uns dein Problem nennen/beschreiben würdest.
beim reloaden kommt:
syntax error : [string "start"]:35: `then' expected near `when'
error on compile dt.quest
03/03/2014 21:31 pserverzocker#9786
PHP Code:
quest piraten begin 
    state start begin 
        when login 
or levelup with pc.level >= 50 begin 
            set_state
(information
        
end 
    end 

    state information begin 
        when letter begin 
            send_letter
("Piraten-Auftrag"
        
end 

        when info 
or button begin 
            say
("Piraten-Auftrag"
            
say("Hallo "..pc.get_name().." ")
            
say("Unser Nachbardorf wird angegriffen."
            
say("Nur die besten Krieger kennen diesen platz"
            
say("Darum hab ich dich gerufen"
            
say("Bitte befrei uns von diesen Piraten"
            
say("Alles was du findest darfst du behalten"
            
say("Bitte hilf uns:")            
            
say(""
            
local a select("Ja","Nein")
            if 
== 1 then
            pc
.warp(83200,00000)
            
pc.setqf("state"30
            
q.set_counter("Piraten"30
            elseif 
== 2 then
            
return
        
end 

        when 5001.kill begin 
            local count 
pc.getqf("state") - 
            
if count <= 30 then 
                pc
.setqf("state"count
                
q.set_counter("Piraten"count
            
end 
            
if count == 0 then 
                warp_to_village
()
            
end 
        end  
    state __COMPLETE__ begin 
    end 
end
end 

Nachdem ich die quest reloade kommt der Fehler.

syntax error: [string "information"]:18: unexpected symbol near "when"
03/03/2014 22:31 nOa##9787
@pserverzocker:

So sollte es gehen:
PHP Code:
quest piraten begin 
    state start begin 
        when login 
or levelup with pc.level >= 50 begin 
            set_state
(information
        
end 
    end 

    state information begin 
        when letter begin 
            send_letter
("Piraten-Auftrag"
        
end 

        when button 
or info begin 
            say_title
("Piraten-Auftrag")
            
say("")
            
say("Hallo "..pc.get_name()..", ")
            
say("unser Nachbardorf wird angegriffen."
            
say("Nur die besten Krieger kennen diesen platz"
            
say("Darum hab ich dich gerufen"
            
say("Bitte befrei uns von diesen Piraten"
            
say("Alles was du findest darfst du behalten"
            
say("Bitte hilf uns:")            
            
say(""
            
local a select("Ja""Nein")
            if 
== 1 then
                pc
.warp(83200,00000)
                
pc.setqf("state"30
                
q.set_counter("Piraten"30
            elseif 
== 2 then
                
return
            
end
        end 

        when 5001.kill begin 
            local count 
pc.getqf("state") - 
            
if count <= 30 then 
                pc
.setqf("state"count
                
q.set_counter("Piraten"count
            
end 
            
if count == 0 then 
                warp_to_village
()
            
end 
        end
    end
    state __COMPLETE__ begin 
    end 
end 
Quote:
Originally Posted by [Sensenmann] View Post
beim reloaden kommt:
syntax error : [string "start"]:35: `then' expected near `when'
error on compile dt.quest
Hmm also ich habe jetzt erstmal keine Fehler in der Quest gefunden, der die Quest fehlerhaft werden lässt.
Hast du schon die Functions überprüft? Es scheint mir als wäre da etwas nicht richtig eingetragen.
03/03/2014 23:06 pserverzocker#9788
Quote:
Originally Posted by 123Crusher123 View Post
@pserverzocker:
So sollte es gehen:
PHP Code:
quest piraten begin 
    state start begin 
        when login 
or levelup with pc.level >= 50 begin 
            set_state
(information
        
end 
    end 

    state information begin 
        when letter begin 
            send_letter
("Piraten-Auftrag"
        
end 

        when button 
or info begin 
            say_title
("Piraten-Auftrag")
            
say("")
            
say("Hallo "..pc.get_name()..", ")
            
say("unser Nachbardorf wird angegriffen."
            
say("Nur die besten Krieger kennen diesen platz"
            
say("Darum hab ich dich gerufen"
            
say("Bitte befrei uns von diesen Piraten"
            
say("Alles was du findest darfst du behalten"
            
say("Bitte hilf uns:")            
            
say(""
            
local a select("Ja""Nein")
            if 
== 1 then
                pc
.warp(83200,00000)
                
pc.setqf("state"30
                
q.set_counter("Piraten"30
            elseif 
== 2 then
                
return
            
end
        end 

        when 5001.kill begin 
            local count 
pc.getqf("state") - 
            
if count <= 30 then 
                pc
.setqf("state"count
                
q.set_counter("Piraten"count
            
end 
            
if count == 0 then 
                warp_to_village
()
            
end 
        end
    end
    state __COMPLETE__ begin 
    end 
end 


Hmm also ich habe jetzt erstmal keine Fehler in der Quest gefunden, der die Quest fehlerhaft werden lässt.
Hast du schon die Functions überprüft? Es scheint mir als wäre da etwas nicht richtig eingetragen.
Also die quest funktioniert jetzt nur das problem ist wenn ich die 30Piraten töte werde ich nicht in die map1 geportet >_>.
03/03/2014 23:06 rollback#9789
Quote:
Originally Posted by 123Crusher123 View Post
@pserverzocker:
So sollte es gehen:
PHP Code:
quest piraten begin 
    state start begin 
        when login 
or levelup with pc.level >= 50 begin 
            set_state
(information
        
end 
    end 

    state information begin 
        when letter begin 
            send_letter
("Piraten-Auftrag"
        
end 

        when button 
or info begin 
            say_title
("Piraten-Auftrag")
            
say("")
            
say("Hallo "..pc.get_name()..", ")
            
say("unser Nachbardorf wird angegriffen."
            
say("Nur die besten Krieger kennen diesen platz"
            
say("Darum hab ich dich gerufen"
            
say("Bitte befrei uns von diesen Piraten"
            
say("Alles was du findest darfst du behalten"
            
say("Bitte hilf uns:")            
            
say(""
            
local a select("Ja""Nein")
            if 
== 1 then
                pc
.warp(83200,00000)
                
pc.setqf("state"30
                
q.set_counter("Piraten"30
            elseif 
== 2 then
                
return
            
end
        end 

        when 5001.kill begin 
            local count 
pc.getqf("state") - 
            
if count <= 30 then 
                pc
.setqf("state"count
                
q.set_counter("Piraten"count
            
end 
            
if count == 0 then 
                warp_to_village
()
            
end 
        end
    end
    state __COMPLETE__ begin 
    end 
end 


Hmm also ich habe jetzt erstmal keine Fehler in der Quest gefunden, der die Quest fehlerhaft werden lässt.
Hast du schon die Functions überprüft? Es scheint mir als wäre da etwas nicht richtig eingetragen.
hab den fehler schon gefunden :D
muss bei meiner game heissen "d.join()" und nicht "d.jump_party"
03/04/2014 00:00 nOa##9790
Quote:
Originally Posted by pserverzocker View Post
Also die quest funktioniert jetzt nur das problem ist wenn ich die 30Piraten töte werde ich nicht in die map1 geportet >_>.
Hier so sollte es gehen:
PHP Code:
quest piraten begin  
    state start begin  
        when login 
or levelup with pc.level >= 50 begin  
            set_state
(information)  
        
end  
    end  

    state information begin  
        when letter begin  
            send_letter
("Piraten-Auftrag")  
        
end  

        when button 
or info begin  
            say_title
("Piraten-Auftrag"
            
say(""
            
say("Hallo "..pc.get_name()..", "
            
say("unser Nachbardorf wird angegriffen.")  
            
say("Nur die besten Krieger kennen diesen platz")  
            
say("Darum hab ich dich gerufen")  
            
say("Bitte befrei uns von diesen Piraten")  
            
say("Alles was du findest darfst du behalten")  
            
say("Bitte hilf uns:")             
            
say("")  
            
local a select("Ja""Nein"
            if 
== 1 then 
                pc
.warp(83200,00000
                
pc.setqf("state"30)  
                
q.set_counter("Piraten"30)  
            elseif 
== 2 then 
                
return 
            
end 
        end  

        when 5001.kill begin  
            local count 
pc.getqf("state") - 1  
            
if count <= 30 then  
                pc
.setqf("state"count)  
                
q.set_counter("Piraten"count)  
            
end  
            
if count == 0 then  
                set_state
(back
            
end  
        end 
    end
    state back begin
        
if pc.get_empire() == 1 then
            pc
.warp(474300954800)
            
set_state(__COMPLETE__)
        elseif 
pc.get_empire() == 2 then
            pc
.warp(63800166400)
            
set_state(__COMPLETE__)
        elseif 
pc.get_empire() == 3 then
            pc
.warp(959900269200)
            
set_state(__COMPLETE__)
        
end
    end
    state __COMPLETE__ begin  
    end  
end 
03/04/2014 15:45 pserverzocker#9791
Quote:
Originally Posted by 123Crusher123 View Post
Hier so sollte es gehen:
PHP Code:
quest piraten begin  
    state start begin  
        when login 
or levelup with pc.level >= 50 begin  
            set_state
(information)  
        
end  
    end  

    state information begin  
        when letter begin  
            send_letter
("Piraten-Auftrag")  
        
end  

        when button 
or info begin  
            say_title
("Piraten-Auftrag"
            
say(""
            
say("Hallo "..pc.get_name()..", "
            
say("unser Nachbardorf wird angegriffen.")  
            
say("Nur die besten Krieger kennen diesen platz")  
            
say("Darum hab ich dich gerufen")  
            
say("Bitte befrei uns von diesen Piraten")  
            
say("Alles was du findest darfst du behalten")  
            
say("Bitte hilf uns:")             
            
say("")  
            
local a select("Ja""Nein"
            if 
== 1 then 
                pc
.warp(83200,00000
                
pc.setqf("state"30)  
                
q.set_counter("Piraten"30)  
            elseif 
== 2 then 
                
return 
            
end 
        end  

        when 5001.kill begin  
            local count 
pc.getqf("state") - 1  
            
if count <= 30 then  
                pc
.setqf("state"count)  
                
q.set_counter("Piraten"count)  
            
end  
            
if count == 0 then  
                set_state
(back
            
end  
        end 
    end
    state back begin
        
if pc.get_empire() == 1 then
            pc
.warp(474300954800)
            
set_state(__COMPLETE__)
        elseif 
pc.get_empire() == 2 then
            pc
.warp(63800166400)
            
set_state(__COMPLETE__)
        elseif 
pc.get_empire() == 3 then
            pc
.warp(959900269200)
            
set_state(__COMPLETE__)
        
end
    end
    state __COMPLETE__ begin  
    end  
end 

fehler : expectring "when" or " Function"
03/04/2014 16:01 nOa##9792
Quote:
Originally Posted by pserverzocker View Post
fehler : expectring "when" or " Function"
Mein Fehler ... hier:
PHP Code:
quest piraten begin   
    state start begin   
        when login 
or levelup with pc.level >= 50 begin   
            set_state
(information)   
        
end   
    end   

    state information begin   
        when letter begin   
            send_letter
("Piraten-Auftrag")   
        
end   

        when button 
or info begin   
            say_title
("Piraten-Auftrag")  
            
say("")  
            
say("Hallo "..pc.get_name()..", ")  
            
say("unser Nachbardorf wird angegriffen.")   
            
say("Nur die besten Krieger kennen diesen platz")   
            
say("Darum hab ich dich gerufen")   
            
say("Bitte befrei uns von diesen Piraten")   
            
say("Alles was du findest darfst du behalten")   
            
say("Bitte hilf uns:")              
            
say("")   
            
local a select("Ja""Nein")  
            if 
== 1 then  
                pc
.warp(83200,00000)  
                
pc.setqf("state"30)   
                
q.set_counter("Piraten"30)   
            elseif 
== 2 then  
                
return  
            
end  
        end   

        when 5001.kill begin   
            local count 
pc.getqf("state") - 1   
            
if count <= 30 then   
                pc
.setqf("state"count)   
                
q.set_counter("Piraten"count)   
            
end   
            
if count == 0 then
                send_letter
("Zurück in die Stadt")
                
set_state(back)
            
end   
        end  
    end 
    state back begin
        when button 
or info begin
            
if pc.get_empire() == 1 then 
                pc
.warp(474300954800
                
set_state(__COMPLETE__
            elseif 
pc.get_empire() == 2 then 
                pc
.warp(63800166400
                
set_state(__COMPLETE__
            elseif 
pc.get_empire() == 3 then 
                pc
.warp(959900269200
                
set_state(__COMPLETE__
            
end
        end
    end 
    state __COMPLETE__ begin   
    end   
end 
03/04/2014 17:10 Tiger121282#9793
Hallo, ich habe ein Problem mit meiner Pet Quest, ich habe den Boni Monster eingetragen, aber er geht Ingame nicht.
Ist da was falsch dran??
Danke euch.

Code:
		when 53006.use with pc.getqf("lion") == 0 and pc.getqf("pig") == 0 and pc.getqf("tiger") == 0 and pc.getqf("firephoenix") == 0 and pc.getqf("icephoenix") == 0 and pc.getqf("reindeer") == 0 and pc.getqf("pwahuang") == 0 begin
            if pc.getqf("dog_use") == 0 then
                local old_horse_name = horse.get_name() ;
                    if string.len(old_horse_name) == 0 then
                        chat("Dein Haustier hat noch keinen Namen!")
                    end
                chat("Dein Haustier wurde gerufen!")
                local your_horse_level = horse.get_level()
                pc.setqf("horse_level_save", your_horse_level)
                pc.setqf("dog_use", 1)
                pc.setqf("dog", 1)
                affect.add_collect(apply.ATT_BONUS_TO_MONSTER, 20, 60*60*8)
                affect.add_collect(apply.DEF_GRADE_BONUS, 150, 60*60*8)
                affect.add_collect(apply.MAX_HP, 6000, 60*60*8)
                horse.set_level("26")
				chat("Du erhälst 150 Deff, 6k Tp, 20 gegen Monster")
                horse.unsummon() horse.summon()
				
				local horse_settings = pc.getqf("horse_level_save")
                horse.set_level(horse_settings)
            else
                chat("Dein Haustier verabschiedet sich nun von dir!")
                affect.remove_collect(apply.ATT_BONUS_TO_MONSTER, 20, 60*60*8)
                affect.remove_collect(apply.DEF_GRADE_BONUS, 150, 60*60*8)   
                affect.remove_collect(apply.MAX_HP, 6000, 60*60*8)                   
                horse.unsummon()
                pc.setqf("dog_use", 0)
                pc.setqf("dog", 0)
                
                local horse_settings = pc.getqf("horse_level_save")
                horse.set_level(horse_settings)
            
            end
        end
03/04/2014 18:30 .yorliK#9794
Ich finde es unsinnig dafür einen Thread aufzumachen, deshalb:

Wie muss eine mysql_query aussehen damit man von zwei verschiedenen Tabellenorten zählen kann?
Beispiel: Zähle auf, Wie viele Level 105 und im Blauen Reich sind. Level bekommt man in player.player und Reich in player.player_index.

Ich habs mit einer query versucht, dennoch gibt es den Error, das die Tabelle empire nicht existiert.
PHP Code:
mysql_query("SELECT count(*) FROM player WHERE player.level=105 and player_index.empire=3;"

# Hab kein Thread mit solchen Mysqlbefehlen gefunden.
03/04/2014 23:00 FedoraPro#9795
Quote:
Originally Posted by FedoraPro View Post
Hey, ich hab mal ne Quest erweitert und editiert bzw angepasst.

Mit der Quest kann ich mein Pet rufen: game 2089, inc Boni, inc korrekter Boni entfernung. das geht alles, aber wie kann ich machen das mein Pet beim Mapwechsel wieder automatisch erscheint ( der queststate wird richtig gespeichert, die PetBoni bleiben auch erhalten, bevor man aber das pet nochmal rufen kann werden aber die Boni entfernt.)

Also, wie kann ich machen das nicht nur die Boni vom pet sondern das Pet ansich nach einem relog/char/mapwechsel wieder kommt?.

Ich vermute ja mit "pc.get irgend nen quest state" bei "when Login or" hab aber noch nicht die wahre Lösung gefunden.


Die quest ist gekürzt um es ein wenig übersichtlicher zu machen.
PS: es is das Pet system wo man das Horse level als Pet nützt, "Horse level old" wird nciht benötigt weil pferde auch via Mount system verwaltet werden ( so hab ich volle 30 plätze für Pets :D und das bei meinem Lieblingscore 2089

Code:
quest phoenix begin
    state start begin
		function set_pet_name(name)
            mysql_query("DELETE FROM player.horse_name WHERE id = \\'"..pc.get_player_id().."\\'")
            mysql_query("INSERT INTO player.horse_name(id, name) VALUES(\\'"..pc.get_player_id().."\\', \\'"..name.."\\')")
        end
		function get_pet_name()
            local pet_name = mysql_query("SELECT * FROM player.horse_name WHERE id = \\'"..pc.get_player_id().."\\'")
            return (pet_name.name or {"Pet"})[1]
        end
        when 53001.use begin
            akna = haustiere.get_pet_name()
			if string.len(akna) < 5 then
					say_reward("Dein Haustier besitzt bis jetzt keinen Namen.")
						say("")
						say("Kaufe ein Stück Petzucker,")
						say("und gib ihm einen persönlichen")
						say("Spitznamen, dieser gilt für alle")
						say("Deine Pets, kann aber geändert")
						say("werden.")
						say("")
						say("Benütze dafür Petzucker")
						
					local s=select("OK")
						if s==1 then
							return
						set_state(back)	
					end
				else
						chat("Dein Phönix wurde gerufen! +15% Exp")
						affect.add_collect(apply.EXP_DOUBLE_BONUS, 15, 60*60*12)
						horse.set_level(22)
						horse.set_name(haustiere.get_pet_name())
						horse.summon()horse.unride()
						set_state(back)
			               end

                     end
	state back begin
		when 53001.use or 53005.use or 53013.use or 53006.use or 53007.use or 53008.use or 53011.use or 53010.use or 53009.use begin
            chat("Dein Pet wurde weggeschickt!")
			affect.remove_collect(apply.EXP_DOUBLE_BONUS, 15, 60*60*12)		
			horse.unsummon()
                        horse.set_level ("0")
			set_state(start)
			horse.unsummon()
		end
	end
end
hab mein Problem mit setqf und getqf gelöst :D

andere Frage, warum wird mein Pet nicht zu mi geportet wenn ich zb mit 200 speed weit weg laufe? es fliegt nur mit maximal seiner eig mov speed nach. oder geht das nicht wenn mans über die pferde lvl macht?