Jump to content

Quick help with quest


Recommended Posts

  • Former Staff

Hey I could use a litle help.

 

This is the quest

quest daily begin
	state start begin 
		when login or levelup with pc.get_level() > 74 begin
			if get_global_time()> pc.getqf(tempo) then
				set_state(info)
			end
		end
	end

	state info begin -- info about the mission
		when letter begin
			send_letter("")
		end -- letter sent
		
		when button or info begin
			say_title("")
			say("")
			say("")
			say("")
			say("")
			say("")
			local risp = select("","")
			if risp==2 then -- Cancel
				return
			elseif risp == 1 then -- Easy
				pc.setqf("dif",0) -- difficulty FLAG (0=pedra sangue)
				set_state(running)
			end
		end -- when closed
	end -- INFO closed

	state running begin
		
		pc.setqf("done",0) -- quest completed FLAG (0=not completed, 1=completed)
		
		if pc.getqf(dif)==0 then
			pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))
			-- how many kills
			local qta = {
						3, 4, 5, 6
						}
			pc.setqf("qta_to_kill",qta[math.random(1, 4)])
			-- recompensa pedra sangue
			pc.setqf("reward",30190)
		end

		when letter begin
			if pc.getqf(dif) == 0 then
			send_letter("")
			end
		end

		when button or info begin -- info about the quest
			if pc.getqf(done) == 0 then -- if he didn't complete the quest
				if pc.getqf(dif) == 0 then
				say_title("")
				say("")
				say("")
				say("")
				say("")
				say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))
				if pc.getqf(dif) == 0 then
					say_reward("" .. pc.getqf(reward) .. "")
				end
			else
				say_title("")
				say("" ..pc.get_name() .. "")
				say("")
				wait()
				if pc.getqf(dif)==0 then
				say_reward("" .. pc.getqf(reward) .. "")
				pc.give_item2(30190, 1)
				end
				-- timer FLAG, this quest is repeatable once per day (24h)
				pc.setqf("tempo", get_global_time()+86400) -- 60*60*24
				-- deleting FLAGS
				pc.delqf(mob_to_kill)
				pc.delqf(reward)
				pc.delqf(qta_to_kill)
				pc.delqf(dif)
				pc.delqf(done)
				set_state(__COMPLETE__)
			end
		end

		when pc.getqf(mob_to_kill).kill begin
			pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)
			if pc.getqf(qta_to_kill) == 0 then
				pc.setqf("done",1)
				send_letter("")
			end
		end
	end -- closed RUNNING

	state __COMPLETE__ begin
		when enter begin
			q.done()
		end
	end -- closed __COMPLETE__
end -- closed QUEST



And this is the error

ajgrf.png

Edited by Metin2 Dev
Core X - External 2 Internal
Link to comment
Share on other sites

  • Former Staff

quest daily begin
	state start begin 
		when login or levelup with pc.get_level() > 74 begin
			if get_global_time()> pc.getqf(tempo) then
				set_state(info)
			end
		end
	end

	state info begin -- info about the mission
		when letter begin
			send_letter("")
		end -- letter sent
		
		when button or info begin
			say_title("")
			say("")
			say("")
			say("")
			say("")
			say("")
			local risp = select("","")
			if risp==2 then -- Cancel
				return
			elseif risp == 1 then -- Easy
				pc.setqf("dif",0) -- difficulty FLAG (0=pedra sangue)
				set_state(running)
			end
		end -- when closed
	end -- INFO closed

	state running begin
	when login begin	
		pc.setqf("done",0) -- quest completed FLAG (0=not completed, 1=completed)
		
		if pc.getqf(dif)==0 then
			pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))
			-- how many kills
			local qta = {
						3, 4, 5, 6
						}
			pc.setqf("qta_to_kill",qta[math.random(1, 4)])
			-- recompensa pedra sangue
			pc.setqf("reward",30190)
		end

		when letter begin
			if pc.getqf(dif) == 0 then
			send_letter("")
			end
		end

		when button or info begin -- info about the quest
			if pc.getqf(done) == 0 then -- if he didn't complete the quest
				if pc.getqf(dif) == 0 then
				say_title("")
				say("")
				say("")
				say("")
				say("")
				say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))
				if pc.getqf(dif) == 0 then
					say_reward("" .. pc.getqf(reward) .. "")
				end
			else
				say_title("")
				say("" ..pc.get_name() .. "")
				say("")
				wait()
				if pc.getqf(dif)==0 then
				say_reward("" .. pc.getqf(reward) .. "")
				pc.give_item2(30190, 1)
				end
				-- timer FLAG, this quest is repeatable once per day (24h)
				pc.setqf("tempo", get_global_time()+86400) -- 60*60*24
				-- deleting FLAGS
				pc.delqf(mob_to_kill)
				pc.delqf(reward)
				pc.delqf(qta_to_kill)
				pc.delqf(dif)
				pc.delqf(done)
				set_state(__COMPLETE__)
			end
		end

		when pc.getqf(mob_to_kill).kill begin
			pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)
			if pc.getqf(qta_to_kill) == 0 then
				pc.setqf("done",1)
				send_letter("")
			end
		end
	end -- closed RUNNING

	state __COMPLETE__ begin
		when enter begin
			q.done()
		end
	end -- closed __COMPLETE__
end -- closed QUEST


 

W7V9d.png

Edited by Metin2 Dev
Core X - External 2 Internal
Link to comment
Share on other sites

  • Former Staff

It's already like that.

quest daily begin
	state start begin 
		when login or levelup with pc.get_level() > 74 begin
			if get_global_time()> pc.getqf(tempo) then
				set_state(info)
			end
		end
	end

	state info begin -- info about the mission
		when letter begin
			send_letter("")
		end -- letter sent
		
		when button or info begin
			say_title("")
			say("" .. pc.get_name() .. ".")
			say("")
			say("")
			say("")
			say("")
			local risp = select("","")
			if risp==2 then -- Cancel
				return
			elseif risp == 1 then -- Easy
				pc.setqf("dif",0) -- difficulty FLAG (0=pedra sangue)
				set_state(running)
			end
		end -- when closed
	end -- INFO closed

	state running begin
	when login begin
		pc.setqf("done",0) -- quest completed FLAG (0=not completed, 1=completed)
		
		if pc.getqf(dif)==0 then
			pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))
			-- how many kills
			local qta = {
						3, 4, 5, 6
						}
			pc.setqf("qta_to_kill",qta[math.random(1, 4)])
			-- recompensa pedra sangue
			pc.setqf("reward",30190)
		end
	end
		when letter begin
			if pc.getqf(dif) == 0 then
			send_letter("")
			end
		end

		when button or info begin -- info about the quest
			if pc.getqf(done) == 0 then -- if he didn't complete the quest
				if pc.getqf(dif) == 0 then
				say_title("")
				say("")
				say("")
				say("")
				say("")
				say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))
				if pc.getqf(dif) == 0 then
					say_reward("" .. pc.getqf(reward) .. "")
				end
			else
				say_title("")
				say("" ..pc.get_name() .. "")
				say("")
				wait()
				if pc.getqf(dif)==0 then
				say_reward("" .. pc.getqf(reward) .. "")
				pc.give_item2(30190, 1)
				end
				-- timer FLAG, this quest is repeatable once per day (24h)
				pc.setqf("tempo", get_global_time()+86400) -- 60*60*24
				-- deleting FLAGS
				pc.delqf(mob_to_kill)
				pc.delqf(reward)
				pc.delqf(qta_to_kill)
				pc.delqf(dif)
				pc.delqf(done)
				set_state(__COMPLETE__)
			end
		end

		when pc.getqf(mob_to_kill).kill begin
			pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)
			if pc.getqf(qta_to_kill) == 0 then
				pc.setqf("done",1)
				send_letter("")
			end
		end
	end -- closed RUNNING

	state __COMPLETE__ begin
		when enter begin
			q.done()
		end
	end -- closed __COMPLETE__
end -- closed QUEST

 

skYMe.png

Edited by Metin2 Dev
Core X - External 2 Internal
Link to comment
Share on other sites

  • Premium

Delete when login begin and end ftom state running and add these function in when letter begin

pc.setqf("done",0) -- quest completed FLAG (0=not completed, 1=completed)

if pc.getqf(dif)==0 then

pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))

-- how many kills

local qta = {

3, 4, 5, 6

}

pc.setqf("qta_to_kill",qta[math.random(1, 4)])

-- recompensa pedra sangue

pc.setqf("reward",30190)

end

Link to comment
Share on other sites

  • Premium

quest daily begin

state start begin

when login or levelup with pc.get_level() > 74 begin

if get_global_time()> pc.getqf(tempo) then

set_state(info)

end

end

end

state info begin -- info about the mission

when letter begin

send_letter("")

end -- letter sent

when button or info begin

say_title("")

say("")

say("")

say("")

say("")

say("")

local risp = select("","")

if risp==2 then -- Cancel

return

elseif risp == 1 then -- Easy

pc.setqf("dif",0) -- difficulty FLAG (0=pedra sangue)

set_state(running)

end

end -- when closed

end -- INFO closed

state running begin

when letter begin

if pc.getqf(dif) == 0 then

send_letter("")

end

pc.setqf("done",0) -- quest completed FLAG (0=not completed, 1=completed)

if pc.getqf(dif)==0 then

pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))

-- how many kills

local qta = {

3, 4, 5, 6

}

pc.setqf("qta_to_kill",qta[math.random(1, 4)])

-- recompensa pedra sangue

pc.setqf("reward",30190)

end

end

when button or info begin -- info about the quest

if pc.getqf(done) == 0 then -- if he didn't complete the quest

if pc.getqf(dif) == 0 then

say_title("")

say("")

say("")

say("")

say("")

say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))

if pc.getqf(dif) == 0 then

say_reward("" .. pc.getqf(reward) .. "")

end

else

say_title("")

say("" ..pc.get_name() .. "")

say("")

wait()

if pc.getqf(dif)==0 then

say_reward("" .. pc.getqf(reward) .. "")

pc.give_item2(30190, 1)

end

-- timer FLAG, this quest is repeatable once per day (24h)

pc.setqf("tempo", get_global_time()+86400) -- 60*60*24

-- deleting FLAGS

pc.delqf(mob_to_kill)

pc.delqf(reward)

pc.delqf(qta_to_kill)

pc.delqf(dif)

pc.delqf(done)

set_state(__COMPLETE__)

end

end

when pc.getqf(mob_to_kill).kill begin

pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)

if pc.getqf(qta_to_kill) == 0 then

pc.setqf("done",1)

send_letter("")

end

end

end -- closed RUNNING

state __COMPLETE__ begin

when enter begin

q.done()

end

end -- closed __COMPLETE__

end -- closed QUEST

Sorry i am on mobile

Link to comment
Share on other sites

  • Premium

Try :

quest daily begin
    state start begin
        when login or levelup with pc.get_level() > 74 begin
            if get_global_time() > pc.getqf(tempo) then
                set_state(info)
            end
        end
    end
 
    state info begin -- info about the mission
        when letter begin
            send_letter("")
        end -- letter sent
         
        when button or info begin
            say_title("")
            say("")
            say("")
            say("")
            say("")
            say("")
            local risp = select("","")
            if risp == 2 then return end -- Cancel
            pc.setqf("dif", 0) -- difficulty FLAG (0=pedra sangue)
            set_state(running)
        end -- when closed
    end -- INFO closed
 
    state running begin
        pc.setqf("done", 0) -- quest completed FLAG (0=not completed, 1=completed)
        if pc.getqf("dif") == 0 then
            pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))
            -- how many kills
            local qta = {
                        3, 4, 5, 6
                        }
            pc.setqf("qta_to_kill",qta[math.random(1, 4)])
            -- recompensa pedra sangue
            pc.setqf("reward", 30190)
        end
 
        when letter begin
            if pc.getqf("dif") == 0 then
                send_letter("")
            end
        end
 
        when button or info begin -- info about the quest
            if pc.getqf("done") == 0 then -- if he didn't complete the quest
                if pc.getqf("dif") == 0 then
                say_title("")
                say("")
                say("")
                say("")
                say("")
                say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))
                say_reward("" .. pc.getqf(reward) .. "")
                end
            else
                say_title("")
                say("" ..pc.get_name() .. "")
                say("")
                wait()
                if pc.getqf("dif") == 0 then
                    say_reward("" .. pc.getqf(reward) .. "")
                    pc.give_item2(30190, 1)
                end
                -- timer FLAG, this quest is repeatable once per day (24h)
                pc.setqf("tempo", get_global_time()+86400) -- 60*60*24
                -- deleting FLAGS
                pc.delqf("mob_to_kill")
                pc.delqf("reward")
                pc.delqf("qta_to_kill")
                pc.delqf("dif")
                pc.delqf("done")
                set_state(__COMPLETE__)
            end
        end
 
        when pc.getqf(mob_to_kill).kill begin
            pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)
            if pc.getqf(qta_to_kill) == 0 then
                pc.setqf("done", 1)
                send_letter("")
            end
        end
    end -- closed RUNNING
 
    state __COMPLETE__ begin
        when enter begin
            q.done()
        end
    end -- closed __COMPLETE__
end -- closed QUEST

If you're going to do something, then do it right.

Link to comment
Share on other sites

  • Former Staff

Try :

quest daily begin
    state start begin
        when login or levelup with pc.get_level() > 74 begin
            if get_global_time() > pc.getqf(tempo) then
                set_state(info)
            end
        end
    end
 
    state info begin -- info about the mission
        when letter begin
            send_letter("")
        end -- letter sent
         
        when button or info begin
            say_title("")
            say("")
            say("")
            say("")
            say("")
            say("")
            local risp = select("","")
            if risp == 2 then return end -- Cancel
            pc.setqf("dif", 0) -- difficulty FLAG (0=pedra sangue)
            set_state(running)
        end -- when closed
    end -- INFO closed
 
    state running begin
        pc.setqf("done", 0) -- quest completed FLAG (0=not completed, 1=completed)
        if pc.getqf("dif") == 0 then
            pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))
            -- how many kills
            local qta = {
                        3, 4, 5, 6
                        }
            pc.setqf("qta_to_kill",qta[math.random(1, 4)])
            -- recompensa pedra sangue
            pc.setqf("reward", 30190)
        end
 
        when letter begin
            if pc.getqf("dif") == 0 then
                send_letter("")
            end
        end
 
        when button or info begin -- info about the quest
            if pc.getqf("done") == 0 then -- if he didn't complete the quest
                if pc.getqf("dif") == 0 then
                say_title("")
                say("")
                say("")
                say("")
                say("")
                say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))
                say_reward("" .. pc.getqf(reward) .. "")
                end
            else
                say_title("")
                say("" ..pc.get_name() .. "")
                say("")
                wait()
                if pc.getqf("dif") == 0 then
                    say_reward("" .. pc.getqf(reward) .. "")
                    pc.give_item2(30190, 1)
                end
                -- timer FLAG, this quest is repeatable once per day (24h)
                pc.setqf("tempo", get_global_time()+86400) -- 60*60*24
                -- deleting FLAGS
                pc.delqf("mob_to_kill")
                pc.delqf("reward")
                pc.delqf("qta_to_kill")
                pc.delqf("dif")
                pc.delqf("done")
                set_state(__COMPLETE__)
            end
        end
 
        when pc.getqf(mob_to_kill).kill begin
            pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)
            if pc.getqf(qta_to_kill) == 0 then
                pc.setqf("done", 1)
                send_letter("")
            end
        end
    end -- closed RUNNING
 
    state __COMPLETE__ begin
        when enter begin
            q.done()
        end
    end -- closed __COMPLETE__
end -- closed QUEST

DGp4f.png Edited by Metin2 Dev
Core X - External 2 Internal
Link to comment
Share on other sites

  • Premium

ah right right

 

try this :

 

quest daily begin
    state start begin
        when login or levelup with pc.get_level() > 74 begin
            if get_global_time() > pc.getqf(tempo) then
                set_state(info)
            end
        end
    end
 
    state info begin -- info about the mission
        when letter begin
            send_letter("")
        end -- letter sent
         
        when button or info begin
            say_title("")
            say("")
            say("")
            say("")
            say("")
            say("")
            local risp = select("","")
            if risp == 2 then return end -- Cancel
            pc.setqf("dif", 0) -- difficulty FLAG (0=pedra sangue)
            set_state(running)
        end -- when closed
    end -- INFO closed
 
    state running begin
        when login or enter begin
            pc.setqf("done", 0) -- quest completed FLAG (0=not completed, 1=completed)
            if pc.getqf("dif") == 0 then
                pc.setqf("mob_to_kill",math.random(691, 1901, 791, 1304, 2206, 1093, 2091))
                -- how many kills
                local qta = {
                            3, 4, 5, 6
                            }
                pc.setqf("qta_to_kill",qta[math.random(1, 4)])
                -- recompensa pedra sangue
                pc.setqf("reward", 30190)
            end
        end

        when letter begin
            if pc.getqf("dif") == 0 then
                send_letter("")
            end
        end
 
        when button or info begin -- info about the quest
            if pc.getqf("done") == 0 then -- if he didn't complete the quest
                if pc.getqf("dif") == 0 then
                say_title("")
                say("")
                say("")
                say("")
                say("")
                say_reward("" .. qta_to_kill .. mob_name(pc.getqf(mob_to_kill)))
                say_reward("" .. pc.getqf(reward) .. "")
                end
            else
                say_title("")
                say("" ..pc.get_name() .. "")
                say("")
                wait()
                if pc.getqf("dif") == 0 then
                    say_reward("" .. pc.getqf(reward) .. "")
                    pc.give_item2(30190, 1)
                end
                -- timer FLAG, this quest is repeatable once per day (24h)
                pc.setqf("tempo", get_global_time()+86400) -- 60*60*24
                -- deleting FLAGS
                pc.delqf("mob_to_kill")
                pc.delqf("reward")
                pc.delqf("qta_to_kill")
                pc.delqf("dif")
                pc.delqf("done")
                set_state(__COMPLETE__)
            end
        end
 
        when pc.getqf(mob_to_kill).kill begin
            pc.setqf("qta_to_kill",(pc.getqf(qta_to_kill))-1)
            if pc.getqf(qta_to_kill) == 0 then
                pc.setqf("done", 1)
                send_letter("")
            end
        end
    end -- closed RUNNING
 
    state __COMPLETE__ begin
        when enter begin
            q.done()
        end
    end -- closed __COMPLETE__
end -- closed QUEST

If you're going to do something, then do it right.

Link to comment
Share on other sites

  • Premium

the problem now in this line :

when pc.getqf(mob_to_kill).kill begin

 

i dont have server now to test which way it can work

but try ;

        when pc.getqf("mob_to_kill").kill begin
            pc.setqf("qta_to_kill",(pc.getqf("qta_to_kill"))-1)
            if pc.getqf("qta_to_kill") == 0 then
                pc.setqf("done", 1)
                send_letter("")
            end
        end
    end -- closed RUNNING

If you're going to do something, then do it right.

Link to comment
Share on other sites

when kill with npc.get_race() == pc.getf("quest_name", "mob_to_kill") begin
  -- all the kill code
end

This is more or less what you want, I suppose. Make sure to use pc.getf and not getqf, because getqf does not work properly in when conditions (Due to how they are evaluated). Ah, and replace "quest_name" with your quest name :P

  • Love 2
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.