JachuPL

Cracking.quest

Oct 26th, 2013
1,039
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.44 KB | None | 0 0
  1. --[[TEN QUEST ZOSTAŁ STWORZONY PRZEZ JachuPL NA POTRZEBY MPC Modder Team'u]]--
  2. --[[Wszelkie próby sprzedaży proszę zgłaszać bezpośrednio do autora pod adresem]]--
  3. --[[ http://www.facebook.com/jachuplofficial] ]]--
  4. quest cracking begin
  5.     state start begin
  6.         function setting()          -- Dzięki tej funkcji mogę sobie przechować zmienne globalne, co nie jest 'normalnie' możliwe w Metin2
  7.             return {
  8.                 --[[ Tutaj wsadziłem kilka zbędnych opisów, jakby ktoś chciał dać to do NPC z informacjami ]]--
  9.                 ["crTytul"] = "Włamywacz",
  10.                 ["crOpis1"] = "W całej krainie, nawet tam, gdzie oko nie sięga, od wieków",
  11.                 ["crOpis2"] = "stoją ciężkie, metalowe skrzynie. Jest tylko jeden problem.",
  12.                 ["crOpis3"] = "Skrzyni nie da się otworzyć w żaden sposób. Możesz jednak spróbować ",
  13.                 ["crOpis4"] = "znaleźć do nich klucze. Niestety, nikt nie wie gdzie ich szukać.",
  14.                
  15.                 --[[ Tutaj musicie zmienić ID skilla pod siebie. My z Qentiniosem używaliśmy tego ID ]]--
  16.                 ["crSkillVnum"] = 132,
  17.                
  18.                 --[[ W tej tablicy przechowywane są ilości skrzyń jakie trzeba otworzyć (POMYŚLNIE!) by awansować na kolejny poziom oraz szanse na otworzenie skrzyni (POMYŚLNE!) ]]--
  19.                 ["crSkillTable"] =
  20.                 {
  21.                   --poziom_skilla = {ilość_pomyślnie_otw., szansa %},
  22.                     [0] = {["count_succ"] = 5, ["prob"] = 10},
  23.                     [1] = {["count_succ"] = 6, ["prob"] = 12},
  24.                     [2] = {["count_succ"] = 7, ["prob"] = 14},
  25.                     [3] = {["count_succ"] = 8, ["prob"] = 16},
  26.                     [4] = {["count_succ"] = 9, ["prob"] = 18},
  27.                     [5] = {["count_succ"] = 10, ["prob"] = 20},
  28.                     [6] = {["count_succ"] = 11, ["prob"] = 22},
  29.                     [7] = {["count_succ"] = 12, ["prob"] = 24},
  30.                     [8] = {["count_succ"] = 13, ["prob"] = 26},
  31.                     [9] = {["count_succ"] = 15, ["prob"] = 28},
  32.                     [10] = {["count_succ"] = 17, ["prob"] = 30},
  33.                     [11] = {["count_succ"] = 19, ["prob"] = 32},
  34.                     [12] = {["count_succ"] = 21, ["prob"] = 34},
  35.                     [13] = {["count_succ"] = 23, ["prob"] = 36},
  36.                     [14] = {["count_succ"] = 25, ["prob"] = 38},
  37.                     [15] = {["count_succ"] = 27, ["prob"] = 40},
  38.                     [16] = {["count_succ"] = 29, ["prob"] = 42},
  39.                     [17] = {["count_succ"] = 31, ["prob"] = 44},
  40.                     [18] = {["count_succ"] = 33, ["prob"] = 46},
  41.                     [19] = {["count_succ"] = 40, ["prob"] = 60},
  42.                     [20] = {["count_succ"] = 40, ["prob"] = 60},
  43.                 }, 
  44.                
  45.                 --[[ Kilka komunikatów, które pojawiają się na czacie ]]--
  46.                 ["crOpenSuccM"] = "Tak! Udało się! Jestem z siebie zadowolony.",
  47.                 ["crOpenSuccF"] = "Tak! Udało się! Jestem z siebie zadowolona.",
  48.                 ["crSkillUp1_M"] = "To dziwne, ale nagle czuję się mądrzejszy",
  49.                 ["crSkillUp1_F"] = "To dziwne, ale nagle czuję się mądrzejsza",
  50.                 ["crSkillUp2"] = "Poziom umiejętności zwiększony o 1 stopień.",
  51.                 ["crSkillWarnLvLimit50"] = "Wzrost poziomu umiejętności będzie możliwy dopiero po osiągnięciu 50 poziomu postaci.",
  52.                 ["crSkillWarnLvLimit70"] = "Wzrost poziomu umiejętności będzie możliwy dopiero po osiągnięciu 70 poziomu postaci.",
  53.                 ["crNotProperKey"] = "Hmmm... Ten klucz nie pasuje.",
  54.                 ["crOpenFail"] = "A niech to! Klucz się złamał!",
  55.                
  56.                 ["crBookFail"] = "Nie rozumiem tego tekstu... ",
  57.                 ["crBookSucc"] = "Nareszcie rozumiem!",
  58.                 ["crBookCannot"] = "Nie możesz jeszcze przeczytać tej książki.",
  59.                 ["crBookAnother"] = "Nie możesz trenować umiejętności tą książką.",
  60.                
  61.                 --[[ W tej tablicy przechowywane są ID skrzyń oraz przypisane do nich klucze ]]--
  62.                 ["crBoxKeysValue"] =
  63.                 {
  64.                     [18000] = {["key"] = 18000},
  65.                     [18001] = {["key"] = 18001},
  66.                     [18002] = {["key"] = 18002},
  67.                     [18003] = {["key"] = 18003},
  68.                     [18004] = {["key"] = 18004},
  69.                     [18005] = {["key"] = 18005},
  70.                     [18006] = {["key"] = 18006},
  71.                     [18007] = {["key"] = 18007},
  72.                     [18008] = {["key"] = 18008},
  73.                     [18009] = {["key"] = 18009},
  74.                 },
  75.                 --[[ W tej tablicy przechowywane są ID Książek oraz poziomy umiejętności (tzw. "widełki"), na których można trenować daną księgą ]]--
  76.                 ["crBooks"] =
  77.                 {
  78.                     --[id] = [skill_level_min, skill_level_max, count_per_level]
  79.                     [50514] = {["skill_level_min"] = 1, ["skill_level_max"] = 9},
  80.                     [50515] = {["skill_level_min"] = 10, ["skill_level_max"] = 19},
  81.                     [50516] = {["skill_level_min"] = 20, ["skill_level_max"] = 20},
  82.                 },
  83.                 --[[ Tutaj zaś jest szansa na pomyślne wejście danej księgi ]]--
  84.                 ["crBookProb"] = 25,
  85.                
  86.                 --[[ Ta opcja steruje pewną ciekawą funkcją. Mianowicie umiejętność powyżej 10 punktu można było szkolić od 50 poziomu postaci, a na poziom maksymalny dopiero od 70 poziomu postaci.
  87.                      Ten pomysł został zaproponowany przez Aviuz. Wybranie 1 włącza tę opcję, wybranie 0 wyłącza ją. ]]--
  88.                 ["crIsRestheaIdeaType"] = 0,
  89.                 ["crRewardTable"] =
  90.                 {
  91.                     [1] = {["reward_id"] = 50512, ["reward_count"] = 1},
  92.                     [2] = {["reward_id"] = 71095, ["reward_count"] = 1},
  93.                     [3] = {["reward_id"] = 72702, ["reward_count"] = 1},
  94.                     [4] = {["reward_id"] = 90001, ["reward_count"] = 100},
  95.                     [5] = {["reward_id"] = 90002, ["reward_count"] = 100},
  96.                     [6] = {["reward_id"] = 90003, ["reward_count"] = 100},
  97.                     [7] = {["reward_id"] = 8001, ["reward_count"] = 125},
  98.                     [8] = {["reward_id"] = 8002, ["reward_count"] = 125},
  99.                     [9] = {["reward_id"] = 8003, ["reward_count"] = 125},
  100.                     [10] = {["reward_id"] = 8004, ["reward_count"] = 125},
  101.                 },             
  102.             }
  103.         end
  104.        
  105.         when 18000.take
  106.         or 18001.take
  107.         or 18002.take
  108.         or 18003.take
  109.         or 18004.take
  110.         or 18005.take
  111.         or 18006.take
  112.         or 18007.take
  113.         or 18008.take
  114.         or 18009.take begin
  115.             local settings = cracking.setting()
  116.             local klucz = settings.crBoxKeysValue[npc.get_race()].key
  117.             --syschat(settings.crBoxKeysValue[npc.get_race()].key)  --tego używałem do debugu. Pokazuje na czacie ID klucza, który otwiera daną skrzynkę
  118.            
  119.             if item.vnum != klucz then                              --jeśli ID przedmiotu przeciągniętego na daną skrzynię nie jest odpowiednim kluczem
  120.                 syschat(settings.crNotProperKey)                    --pokazuje informację o tym na czacie
  121.                 return                                              --i kończy when'a
  122.             end
  123.             item.remove(klucz)                                      --usunięcie klucza
  124.            
  125.             local szansa = number(1, 100)                           --tutaj sobie losujemy liczbę z zakresu 1 do 100 (bo maksymalnie jest 100%)
  126.            
  127.             if settings.crIsRestheaIdeaType == 1 then
  128.                 if pc.get_level() < 50 and pc.get_skill_level(settings.crSkillVnum) == 9 then   --jeśli poziom postaci jest mniejszy od 50 a poziom skilla wynosi 9
  129.                     syschat(settings.crSkillWarnLvLimit50)                                      --pojawia się wiadomość o ograniczeniu
  130.                     return
  131.                 elseif pc.get_level() < 70 and pc.get_skill_level(settings.crSkillVnum) == 19 then  --j/w tylko poziom postaci < 70 a poziom skilla wynosi 19, czyli trening na maksymalny poziom um.
  132.                     syschat(settings.crSkillWarnLvLimit70)                                      --j/w
  133.                     return
  134.                 end
  135.             end
  136.            
  137.             if settings.crSkillTable[pc.get_skill_level(settings.crSkillVnum)].prob >= szansa then  --jeśli trafiamy w widełki procentowe
  138.  
  139.                 if pc.get_sex() == 0 then
  140.                     chat(settings.crOpenSuccM)                                                      --wiadomość o pomyślnym otworzeniu dla Pana
  141.                 else
  142.                     chat(settings.crOpenSuccF)                                                      --wiadomość o pomyślnym otworzeniu dla Pani
  143.                 end
  144.                
  145.                 if  pc.get_skill_level(settings.crSkillVnum) < 20 then
  146.                     pc.setqf("cracked", pc.getqf("cracked") + 1)                                        --zwiększona ilość otworzonych skrzyń
  147.                 end
  148.  
  149.                 if pc.getqf("cracked") >= settings.crSkillTable[pc.get_skill_level(settings.crSkillVnum)].count_succ then   --jeśli ilość otworzonych skrzyń jest większa lub równa ilości wymaganej do awansu
  150.                     pc.set_skill_level(settings.crSkillVnum, pc.get_skill_level(settings.crSkillVnum) + 1)                  --zwiększa się poziom umiejętności
  151.                     if pc.get_sex() == 0 then
  152.                         chat(settings.crSkillUp1_M)                                                     --wiadomość o awansie dla Pana
  153.                     else
  154.                         chat(settings.crSkillUp1_F)                                                     --wiadomość o awansie dla Pani
  155.                     end
  156.                     syschat(settings.crSkillUp2)                                                        --druga część wiadomości dla obu płci
  157.                     pc.setqf("cracked", 0)                                                              --reset ilości otworzonych skrzyń
  158.                 end
  159.                
  160.                 local numer = number(1,table.getn(settings.crRewardTable))
  161.                 game.drop_item_with_ownership(settings.crRewardTable[numer].reward_id, settings.crRewardTable[numer].reward_count)
  162.             else
  163.                 syschat(settings.crOpenFail)                                                            --wiadomość o niepomyślnym otworzeniu skrzyni
  164.             end
  165.            
  166.             --[[ Tego używałem do debugu. Pokazywało na czacie poziom skilla, widełki procentowe i ilość otworzonych z wymaganych do awansu skrzyń ]]--
  167.             test_chat(pc.get_skill_level(settings.crSkillVnum)..": prob: "..settings.crSkillTable[pc.get_skill_level(settings.crSkillVnum)].prob.." >= "..szansa.." (count_succ: "..pc.getqf("cracked").."/"..settings.crSkillTable[pc.get_skill_level(settings.crSkillVnum)].count_succ..")")
  168.             npc.purge() --znika NPC
  169.         end
  170.         when 50514.use or 50515.use or 50516.use begin      --czytanie KU
  171.             local itemz = tonumber(item.vnum)              
  172.             local settings = cracking.setting()
  173.             test_chat(item.vnum..":"..itemz..":"..tonumber(item.vnum))
  174.             test_chat(settings.crBooks[itemz].skill_level_min.." <=> "..settings.crBooks[itemz].skill_level_max)
  175.             test_chat(settings.crSkillVnum)
  176.            
  177.             if pc.get_skill_level(settings.crSkillVnum) == 20 then  --Tutaj sprawdzam poziom umiejętności. Jeśli jest maksymalny, nie trenuje dalej
  178.                 syschat(settings.crBookAnother)
  179.                 return
  180.             end
  181.            
  182.             if pc.getqf("cracking_next_read_time") > get_time() then    --Jeśli nie upłynęło 24h od ostatniego czytania
  183.                 syschat(settings.crBookCannot)                          --informacja, że nie możesz jeszcze czytać
  184.                 return
  185.             end
  186.             --[[ w dużym skrócie: jeśli określona książka służy do trenowania skilla w widełkach poziomowych obejmujących nasz poziom umiejętności ]]--
  187.             if settings.crBooks[itemz].skill_level_min <= pc.get_skill_level(settings.crSkillVnum) and pc.get_skill_level(settings.crSkillVnum) <= settings.crBooks[itemz].skill_level_max then
  188.                 --[[ tutaj powtarza się sytuacja z góry, czyli pomysł Aviuz ]]--
  189.                 if settings.crIsRestheaIdeaType == 1 then
  190.                     if pc.get_level() < 50 and pc.get_skill_level(settings.crSkillVnum) == 10 then
  191.                         syschat(settings.crSkillWarnLvLimit50)
  192.                         return
  193.                     elseif pc.get_level() < 70 and pc.get_skill_level(settings.crSkillVnum) == 19 then
  194.                         syschat(settings.crSkillWarnLvLimit70)
  195.                         return
  196.                     end
  197.                 end
  198.                
  199.                 local szansa = number(1, 100)
  200.                 if settings.crBookProb >= szansa then   --trafienie w widełki
  201.                     pc.set_skill_level(settings.crSkillVnum, pc.get_skill_level(settings.crSkillVnum)+1)    --zwiększenie poziomu umiejętności o 1
  202.                     pc.setqf("cracked", 0)                                                                  --reset ilości otworzonych skrzyń
  203.                     chat(settings.crBookSucc)                                                               --wiadomość na czacie
  204.                     if pc.get_sex() == 0 then
  205.                         chat(settings.crSkillUp1_M)                                                         --wiadomość dla pana
  206.                     else
  207.                         chat(settings.crSkillUp1_M)                                                         --wiadomość dla pani
  208.                     end
  209.                     syschat(settings.crSkillUp2)                                                            --wiadomość dla obydwu płci
  210.                 else
  211.                     syschat(settings.crBookFail)                                                            --wiadomość o niepowodzeniu
  212.                 end
  213.                 pc.setqf("cracking_next_read_time", get_time()+86400)                                       --ustawienie następnego czasu czytania (za 24h)
  214.                 item.remove(itemz)  --usunięcie KU z EQ
  215.             else
  216.                 syschat(settings.crBookAnother)                                                             --komunikat o nieprawidłowej książce
  217.                 return
  218.             end
  219.             test_chat(item.vnum..":"..itemz..":"..tonumber(item.vnum))
  220.         end
  221.     end
  222. end
Advertisement
Add Comment
Please, Sign In to add comment