Jump to content
  • 0

Soul Stone Quest


Fliegex3

Question

Can someone change this Quest, so that the soul Stone has a 100% chance to be succesful?

quest training_grandmaster_skill begin
    state start begin
		when 50513.use begin
			say_title("Seelenstein")
			local seelicount = pc.count_item(50513)
			if pc.get_skill_group() == 0 then
				say("Du besitzt keine Fertigkeiten, die")
				say("gegroßmeistert werden können.")
				return
			end
			local result = training_grandmaster_skill.BuildGrandMasterSkillList(pc.get_job(), pc.get_skill_group())
			local vnum_list = result[1]
			local name_list = result[2]
			if table.getn(vnum_list) == 0 then
				say("Du besitzt keine Fertigkeiten, die")
				say("gegroßmeistert werden können.")
				return
			end
			say("Welche Fertigkeit möchtest du trainieren?")
			say("")
			local menu_list = {}
			table.foreach(name_list, function(i, name) table.insert(menu_list, name) end)
			table.insert(menu_list, "Abbrechen") 
			local s=select_table(menu_list)
			if table.getn(menu_list) == s then
				return
			end
			local skill_name=name_list[s]
			local skill_vnum=vnum_list[s]
			local skill_level = pc.get_skill_level(skill_vnum)
			local cur_alignment = pc.get_real_alignment()
			local need_alignment = 1000+500*(skill_level-30)
			test_chat("Momentaner Rang: "..cur_alignment)
			test_chat("Benötigter Rang: "..need_alignment)			
			local title=string.format("%s auf G%d trainieren", skill_name, skill_level-30+1)
			if skill_level-30+1==10 then
				title=string.format("%s auf P trainieren", skill_name)
			end
			pc.remove_item("50513", 1)
			say_title(title)
			say("Durch das Lesen von Seelensteinen müssen")
			say("dir als Zeichen des Opfers Rangpunkte")
			say("abgezogen werden.")
			say("")
			if cur_alignment<-19000+need_alignment then
				say_reward("Du hast zu wenig Rangpunkte!")
				return
			end
			if cur_alignment<0 then
				say_reward(string.format("Benötigter Rang: %d -> %d", need_alignment, need_alignment*2))
				say_reward("Beim erfolgreichen Einlesen des")
				say_reward("Seelensteines wird dir doppelt")
				say_reward("so viel Rangpunkte abgezogen.")
				need_alignment=need_alignment*2
			elseif cur_alignment<need_alignment then
				say_reward(string.format("Benötigter Rang: %d", need_alignment))
				say_reward("Beim erfolgreichen Einlesen des")
				say_reward("Seelensteines wird dir doppelt")
				say_reward("so viel Rangpunkte abgezogen.")
			else
				say_reward(string.format("Benötigter Rang: %d", need_alignment))
			end
			say("")
			local s=select("Lesen", "Abbrechen")	
			if s==2 then
				return
			end


		if cur_alignment>=0 and cur_alignment<need_alignment then
			say_title(string.format("%s bestätigen", title))
			say("Das Lesen eines Seelensteines kostet Rang,")
			say("wenn du diesen Seelenstein ließt,")
			say("kommst du in den negativen Bereich.")
			say("Bitte Bestätige das du diesen Seelenstein")
			say("wirklich lesen möchtest! Das tust du indem")
			say("du in den Textfeld das Wort")
			say_reward("trainieren")
			say("eingibst.")
			local s=input()
			if s!="trainieren" then
				return
			end
				if pc.is_skill_book_no_delay() then
					pc.remove_skill_book_no_delay()
				end
			end
			if need_alignment>0 and pc.count_item(50513)>0 then
				if pc.learn_grand_master_skill(skill_vnum) then
					pc.change_alignment(-need_alignment)
					say_title(string.format("%s erfolgreich", title))
					if 40 == pc.get_skill_level(skill_vnum) then
						say(string.format("%s ist nun perfeckt Gemeistert.", skill_name))
						say("Herzlichen Glückwunsch!")
						notice_all(string.format(""..pc.get_name().." hat den Skill ~ %s ~ auf Perfekt gelesen.", skill_name))
					else
						say(string.format("Das Großmeistern war erfolgreich!", skill_name, skill_level-30+1+1))
					end
					say("")
					say_reward("Erfolgreich!")
					say_reward(string.format("Es wurden %d Rangpunkte verbraucht", need_alignment))
					say("")
				else
					say_title(string.format("%s fehlgeschlagen", title))
					say("Das Großmeistern ist fehlgeschlagen.")
					say("")
					local rang = number(need_alignment/3, need_alignment/2)
					say_reward("Fehlgeschlagen! Es wurden "..rang.." Rangpunkte verbraucht")
					say("")
					pc.change_alignment(-rang)
				end
			end
		end
		function BuildGrandMasterSkillList(job, group)
			GRAND_MASTER_SKILL_LEVEL = 30
			PERFECT_MASTER_SKILL_LEVEL = 40
			local skill_list = special.active_skill_list[job+1][group]
			local ret_vnum_list = {}
			local ret_name_list = {}
			table.foreach(skill_list, 
			function(i, skill_vnum) 
			local skill_level = pc.get_skill_level(skill_vnum)
			if skill_level >= GRAND_MASTER_SKILL_LEVEL and skill_level < PERFECT_MASTER_SKILL_LEVEL then
				table.insert(ret_vnum_list, skill_vnum)
				local name=locale.GM_SKILL_NAME_DICT[skill_vnum]
				if name == nil then name=skill_vnum end
				table.insert(ret_name_list, name)
			end
			end)
			return {ret_vnum_list, ret_name_list}
		end
    end
end
Link to comment

11 answers to this question

Recommended Posts

  • 0
quest training_grandmaster_skill begin
    state start begin
        when 50513.use begin
            say_title("Seelenstein")
            local seelicount = pc.count_item(50513)
            if pc.get_skill_group() == 0 then
                say("Du besitzt keine Fertigkeiten, die")
                say("gegroßmeistert werden können.")
                return
            end
            local result = training_grandmaster_skill.BuildGrandMasterSkillList(pc.get_job(), pc.get_skill_group())
            local vnum_list = result[1]
            local name_list = result[2]
            if table.getn(vnum_list) == 0 then
                say("Du besitzt keine Fertigkeiten, die")
                say("gegroßmeistert werden können.")
                return
            end
            say("Welche Fertigkeit möchtest du trainieren?")
            say("")
            local menu_list = {}
            table.foreach(name_list, function(i, name) table.insert(menu_list, name) end)
            table.insert(menu_list, "Abbrechen") 
            local s=select_table(menu_list)
            if table.getn(menu_list) == s then
                return
            end
            local skill_name=name_list[s]
            local skill_vnum=vnum_list[s]
            local skill_level = pc.get_skill_level(skill_vnum)
            local cur_alignment = pc.get_real_alignment()
            local need_alignment = 1000+500*(skill_level-30)
            test_chat("Momentaner Rang: "..cur_alignment)
            test_chat("Benötigter Rang: "..need_alignment)          
            local title=string.format("%s auf G%d trainieren", skill_name, skill_level-30+1)
            if skill_level-30+1==10 then
                title=string.format("%s auf P trainieren", skill_name)
            end
            pc.remove_item("50513", 1)
            say_title(title)
            say("Durch das Lesen von Seelensteinen müssen")
            say("dir als Zeichen des Opfers Rangpunkte")
            say("abgezogen werden.")
            say("")
            if cur_alignment<-19000+need_alignment then
                say_reward("Du hast zu wenig Rangpunkte!")
                return
            end
            if cur_alignment<0 then
                say_reward(string.format("Benötigter Rang: %d -> %d", need_alignment, need_alignment*2))
                say_reward("Beim erfolgreichen Einlesen des")
                say_reward("Seelensteines wird dir doppelt")
                say_reward("so viel Rangpunkte abgezogen.")
                need_alignment=need_alignment*2
            elseif cur_alignment<need_alignment then
                say_reward(string.format("Benötigter Rang: %d", need_alignment))
                say_reward("Beim erfolgreichen Einlesen des")
                say_reward("Seelensteines wird dir doppelt")
                say_reward("so viel Rangpunkte abgezogen.")
            else
                say_reward(string.format("Benötigter Rang: %d", need_alignment))
            end
            say("")
            local s=select("Lesen", "Abbrechen")    
            if s==2 then
                return
            end
 
 
        if cur_alignment>=0 and cur_alignment<need_alignment then
            say_title(string.format("%s bestätigen", title))
            say("Das Lesen eines Seelensteines kostet Rang,")
            say("wenn du diesen Seelenstein ließt,")
            say("kommst du in den negativen Bereich.")
            say("Bitte Bestätige das du diesen Seelenstein")
            say("wirklich lesen möchtest! Das tust du indem")
            say("du in den Textfeld das Wort")
            say_reward("trainieren")
            say("eingibst.")
            local s=input()
            if s!="trainieren" then
                return
            end
                if pc.is_skill_book_no_delay() then
                    pc.remove_skill_book_no_delay()
                end
            end
            if need_alignment>0 and pc.count_item(50513)>0 then
                -- if pc.learn_grand_master_skill(skill_vnum) then
                    pc.change_alignment(-need_alignment)
                    say_title(string.format("%s erfolgreich", title))
                    if 40 == pc.get_skill_level(skill_vnum) then
                        say(string.format("%s ist nun perfeckt Gemeistert.", skill_name))
                        say("Herzlichen Glückwunsch!")
                        notice_all(string.format(""..pc.get_name().." hat den Skill ~ %s ~ auf Perfekt gelesen.", skill_name))
                    else
                        say(string.format("Das Großmeistern war erfolgreich!", skill_name, skill_level-30+1+1))
                    end
                    say("")
                    say_reward("Erfolgreich!")
                    say_reward(string.format("Es wurden %d Rangpunkte verbraucht", need_alignment))
                    say("")
					pc.set_skill_level(skill_vnum,pc.get_skill_level(skill_vnum)+1)
                -- else
                    -- say_title(string.format("%s fehlgeschlagen", title))
                    -- say("Das Großmeistern ist fehlgeschlagen.")
                    -- say("")
                    -- local rang = number(need_alignment/3, need_alignment/2)
                    -- say_reward("Fehlgeschlagen! Es wurden "..rang.." Rangpunkte verbraucht")
                    -- say("")
                    -- pc.change_alignment(-rang)
            end
        end
        function BuildGrandMasterSkillList(job, group)
            GRAND_MASTER_SKILL_LEVEL = 30
            PERFECT_MASTER_SKILL_LEVEL = 40
            local skill_list = special.active_skill_list[job+1][group]
            local ret_vnum_list = {}
            local ret_name_list = {}
            table.foreach(skill_list, 
            function(i, skill_vnum) 
            local skill_level = pc.get_skill_level(skill_vnum)
            if skill_level >= GRAND_MASTER_SKILL_LEVEL and skill_level < PERFECT_MASTER_SKILL_LEVEL then
                table.insert(ret_vnum_list, skill_vnum)
                local name=locale.GM_SKILL_NAME_DICT[skill_vnum]
                if name == nil then name=skill_vnum end
                table.insert(ret_name_list, name)
            end
            end)
            return {ret_vnum_list, ret_name_list}
        end
    end
end

I will add pc.set_skill_level() for upgrade your skill level ;)

 

Best Regards

Aveline

  • Love 1

Plain logic saves lives.

Link to comment
  • 0

Shogun already told you what to do.. just comment that function on your quest.

 

            if need_alignment>0 and pc.count_item(50513)>0 then
            --    if pc.learn_grand_master_skill(skill_vnum) then
                    pc.change_alignment(-need_alignment)
                    say_title(string.format("%s erfolgreich", title))
                    if 40 == pc.get_skill_level(skill_vnum) then
                        say(string.format("%s ist nun perfeckt Gemeistert.", skill_name))
                        say("Herzlichen Glückwunsch!")
                        notice_all(string.format(""..pc.get_name().." hat den Skill ~ %s ~ auf Perfekt gelesen.", skill_name))
                    else
                        say(string.format("Das Großmeistern war erfolgreich!", skill_name, skill_level-30+1+1))
                    end
                    say("")
                    say_reward("Erfolgreich!")
                    say_reward(string.format("Es wurden %d Rangpunkte verbraucht", need_alignment))
                    say("")
                -- else
                    -- say_title(string.format("%s fehlgeschlagen", title))
                    -- say("Das Großmeistern ist fehlgeschlagen.")
                    -- say("")
                    -- local rang = number(need_alignment/3, need_alignment/2)
                    -- say_reward("Fehlgeschlagen! Es wurden "..rang.." Rangpunkte verbraucht")
                    -- say("")
                    -- pc.change_alignment(-rang)
            --    end
            end
        end

when you return 0 and server doesn't boot:

unknown.png

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • 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.