Un quest pentru piatra spiritului mai complex.

Code:
quest training_grandmaster_skill begin 
    state start begin
   when 50513.use begin   
      say_title("Piatra spiritului")
      say("")
      local seelicount = pc.count_item(50513)
       if pc.get_skill_group() == 0 then   
      say("Nu aveți abilități care pot fi antrenate.")   
      say("")
      return
       end
       if get_time() < pc.getqf("next_time") then -- and not is_test_server() then
      if pc.is_skill_book_no_delay() then      
          say("Ai folosit pergamentul exorcizării. Acum poți")
         say("citi o piatră a spritiului.")
         say("")
      wait()         
         say_title("Piatra spiritului")            
      else         
          say("Trebuie să aștepți o zi pentru a putea citi")   
         say("o piatră a spiritului sau folosește")   
         say("pergamentul exorcizării.")   
         say("")
      return         
      end
      
       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("Nu aveți abilități care pot fi antrenate.")   
         say("")
      return
       end

       say("Selectați abilitatea care doriți să fie antrenată.")
      say("")
       local menu_list = {}
       table.foreach(name_list, function(i, name) table.insert(menu_list, name) end)
       table.insert(menu_list, "Renunță ") 
       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)

       local title=string.format("Antrenează %s", skill_name)
      if pc.count_item(50513) != seelicount then      
         say("Nu ai piatra spiritului!")      
      return
      end      
         say_title(title)
         say("")
         say("Pentru a citi o piatra a spritiului ai nevoie")
         say("de puncte de grad.")
         say("")
       if cur_alignment<-19000+need_alignment then      
         say_reward("Ai prea puține puncte de grad.")   
         say("")
         return
       end

       if cur_alignment<0 then
      
      say_reward("Punctele tale de grad vor scădea după ")
      say_reward("după citirea pietrei. Vei pierde")
      say_reward(string.format( "între %d și %d puncte de grad.", need_alignment, need_alignment*2))      
      
      need_alignment=need_alignment*2
       elseif cur_alignment<need_alignment then      
         say(string.format("Puncte de grad necesare: %d", need_alignment))      
         say_reward("Este posibil ca rangul tău să fie negativ")
         say_reward("după citirea pietrei.")   
       else
      say_orange(string.format("Puncte de grad necesare: %d", need_alignment))
       end
       say("")

       local s = select ("Învață ","Renunță ")
      
              if s == 2 then
         return
       end

       if cur_alignment>=0 and cur_alignment<need_alignment then
      say_title(string.format("%s ", title))
      say("")
      
      say("Pentru a citi piatra spiritului trebuie să ")
      say("introduci în caseta de mai jos cuvântul")
      say_reward("Antrenament")
      say("")
      say_reward("Este posibil ca după citirea pietrei, rangul")
      say_reward("tău să fie negativ.")

      local s=input()
      
      if s!="Antrenament" then
      
            return
         end
       end
       if get_time() < pc.getqf("next_time") then -- and not is_test_server() then
      if pc.is_skill_book_no_delay() then
          pc.remove_skill_book_no_delay()
         
         end   
       end
       pc.setqf("next_time", get_time()+time_hour_to_sec(number(8, 12)))
       if need_alignment>0 then
      if pc.learn_grand_master_skill(skill_vnum) then
          pc.change_alignment(-need_alignment)

          say_title(string.format("%s", title))
         say("")
          if 40 == pc.get_skill_level(skill_vnum) then
         
         say(string.format("%s este perfect antrenat.", skill_name))
         say("")
         pc.remove_item(50513, 1)           
          else      
         say(string.format ( "Antrenamentul a reușit.", skill_name, skill_level-30+1+1))            
            pc.remove_item(50513, 1)           
            end
          say_reward (string.format("Punctele de grad au scăzut cu: %d ", need_alignment))         
          say("")         
            else            
          say_title(string.format("%s", title))
         say("")         
          say_reward("Antrenamentul a eșuat.")
          say("")
          pc.change_alignment(-number(need_alignment/3, need_alignment/2))            
            pc.remove_item(50513, 1)           
               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

http://www.Shade-MT2.com - PVM-PVP .Vă aşteptăm !