Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[TEN QUEST ZOSTAŁ STWORZONY PRZEZ JachuPL NA POTRZEBY MPC Modder Team'u]]--
- --[[Wszelkie próby sprzedaży proszę zgłaszać bezpośrednio do autora pod adresem]]--
- --[[ http://www.facebook.com/jachuplofficial] ]]--
- quest cracking begin
- state start begin
- function setting() -- Dzięki tej funkcji mogę sobie przechować zmienne globalne, co nie jest 'normalnie' możliwe w Metin2
- return {
- --[[ Tutaj wsadziłem kilka zbędnych opisów, jakby ktoś chciał dać to do NPC z informacjami ]]--
- ["crTytul"] = "Włamywacz",
- ["crOpis1"] = "W całej krainie, nawet tam, gdzie oko nie sięga, od wieków",
- ["crOpis2"] = "stoją ciężkie, metalowe skrzynie. Jest tylko jeden problem.",
- ["crOpis3"] = "Skrzyni nie da się otworzyć w żaden sposób. Możesz jednak spróbować ",
- ["crOpis4"] = "znaleźć do nich klucze. Niestety, nikt nie wie gdzie ich szukać.",
- --[[ Tutaj musicie zmienić ID skilla pod siebie. My z Qentiniosem używaliśmy tego ID ]]--
- ["crSkillVnum"] = 132,
- --[[ 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!) ]]--
- ["crSkillTable"] =
- {
- --poziom_skilla = {ilość_pomyślnie_otw., szansa %},
- [0] = {["count_succ"] = 5, ["prob"] = 10},
- [1] = {["count_succ"] = 6, ["prob"] = 12},
- [2] = {["count_succ"] = 7, ["prob"] = 14},
- [3] = {["count_succ"] = 8, ["prob"] = 16},
- [4] = {["count_succ"] = 9, ["prob"] = 18},
- [5] = {["count_succ"] = 10, ["prob"] = 20},
- [6] = {["count_succ"] = 11, ["prob"] = 22},
- [7] = {["count_succ"] = 12, ["prob"] = 24},
- [8] = {["count_succ"] = 13, ["prob"] = 26},
- [9] = {["count_succ"] = 15, ["prob"] = 28},
- [10] = {["count_succ"] = 17, ["prob"] = 30},
- [11] = {["count_succ"] = 19, ["prob"] = 32},
- [12] = {["count_succ"] = 21, ["prob"] = 34},
- [13] = {["count_succ"] = 23, ["prob"] = 36},
- [14] = {["count_succ"] = 25, ["prob"] = 38},
- [15] = {["count_succ"] = 27, ["prob"] = 40},
- [16] = {["count_succ"] = 29, ["prob"] = 42},
- [17] = {["count_succ"] = 31, ["prob"] = 44},
- [18] = {["count_succ"] = 33, ["prob"] = 46},
- [19] = {["count_succ"] = 40, ["prob"] = 60},
- [20] = {["count_succ"] = 40, ["prob"] = 60},
- },
- --[[ Kilka komunikatów, które pojawiają się na czacie ]]--
- ["crOpenSuccM"] = "Tak! Udało się! Jestem z siebie zadowolony.",
- ["crOpenSuccF"] = "Tak! Udało się! Jestem z siebie zadowolona.",
- ["crSkillUp1_M"] = "To dziwne, ale nagle czuję się mądrzejszy",
- ["crSkillUp1_F"] = "To dziwne, ale nagle czuję się mądrzejsza",
- ["crSkillUp2"] = "Poziom umiejętności zwiększony o 1 stopień.",
- ["crSkillWarnLvLimit50"] = "Wzrost poziomu umiejętności będzie możliwy dopiero po osiągnięciu 50 poziomu postaci.",
- ["crSkillWarnLvLimit70"] = "Wzrost poziomu umiejętności będzie możliwy dopiero po osiągnięciu 70 poziomu postaci.",
- ["crNotProperKey"] = "Hmmm... Ten klucz nie pasuje.",
- ["crOpenFail"] = "A niech to! Klucz się złamał!",
- ["crBookFail"] = "Nie rozumiem tego tekstu... ",
- ["crBookSucc"] = "Nareszcie rozumiem!",
- ["crBookCannot"] = "Nie możesz jeszcze przeczytać tej książki.",
- ["crBookAnother"] = "Nie możesz trenować umiejętności tą książką.",
- --[[ W tej tablicy przechowywane są ID skrzyń oraz przypisane do nich klucze ]]--
- ["crBoxKeysValue"] =
- {
- [18000] = {["key"] = 18000},
- [18001] = {["key"] = 18001},
- [18002] = {["key"] = 18002},
- [18003] = {["key"] = 18003},
- [18004] = {["key"] = 18004},
- [18005] = {["key"] = 18005},
- [18006] = {["key"] = 18006},
- [18007] = {["key"] = 18007},
- [18008] = {["key"] = 18008},
- [18009] = {["key"] = 18009},
- },
- --[[ 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ą ]]--
- ["crBooks"] =
- {
- --[id] = [skill_level_min, skill_level_max, count_per_level]
- [50514] = {["skill_level_min"] = 1, ["skill_level_max"] = 9},
- [50515] = {["skill_level_min"] = 10, ["skill_level_max"] = 19},
- [50516] = {["skill_level_min"] = 20, ["skill_level_max"] = 20},
- },
- --[[ Tutaj zaś jest szansa na pomyślne wejście danej księgi ]]--
- ["crBookProb"] = 25,
- --[[ 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.
- Ten pomysł został zaproponowany przez Aviuz. Wybranie 1 włącza tę opcję, wybranie 0 wyłącza ją. ]]--
- ["crIsRestheaIdeaType"] = 0,
- ["crRewardTable"] =
- {
- [1] = {["reward_id"] = 50512, ["reward_count"] = 1},
- [2] = {["reward_id"] = 71095, ["reward_count"] = 1},
- [3] = {["reward_id"] = 72702, ["reward_count"] = 1},
- [4] = {["reward_id"] = 90001, ["reward_count"] = 100},
- [5] = {["reward_id"] = 90002, ["reward_count"] = 100},
- [6] = {["reward_id"] = 90003, ["reward_count"] = 100},
- [7] = {["reward_id"] = 8001, ["reward_count"] = 125},
- [8] = {["reward_id"] = 8002, ["reward_count"] = 125},
- [9] = {["reward_id"] = 8003, ["reward_count"] = 125},
- [10] = {["reward_id"] = 8004, ["reward_count"] = 125},
- },
- }
- end
- when 18000.take
- or 18001.take
- or 18002.take
- or 18003.take
- or 18004.take
- or 18005.take
- or 18006.take
- or 18007.take
- or 18008.take
- or 18009.take begin
- local settings = cracking.setting()
- local klucz = settings.crBoxKeysValue[npc.get_race()].key
- --syschat(settings.crBoxKeysValue[npc.get_race()].key) --tego używałem do debugu. Pokazuje na czacie ID klucza, który otwiera daną skrzynkę
- if item.vnum != klucz then --jeśli ID przedmiotu przeciągniętego na daną skrzynię nie jest odpowiednim kluczem
- syschat(settings.crNotProperKey) --pokazuje informację o tym na czacie
- return --i kończy when'a
- end
- item.remove(klucz) --usunięcie klucza
- local szansa = number(1, 100) --tutaj sobie losujemy liczbę z zakresu 1 do 100 (bo maksymalnie jest 100%)
- if settings.crIsRestheaIdeaType == 1 then
- 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
- syschat(settings.crSkillWarnLvLimit50) --pojawia się wiadomość o ograniczeniu
- return
- 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.
- syschat(settings.crSkillWarnLvLimit70) --j/w
- return
- end
- end
- if settings.crSkillTable[pc.get_skill_level(settings.crSkillVnum)].prob >= szansa then --jeśli trafiamy w widełki procentowe
- if pc.get_sex() == 0 then
- chat(settings.crOpenSuccM) --wiadomość o pomyślnym otworzeniu dla Pana
- else
- chat(settings.crOpenSuccF) --wiadomość o pomyślnym otworzeniu dla Pani
- end
- if pc.get_skill_level(settings.crSkillVnum) < 20 then
- pc.setqf("cracked", pc.getqf("cracked") + 1) --zwiększona ilość otworzonych skrzyń
- end
- 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
- pc.set_skill_level(settings.crSkillVnum, pc.get_skill_level(settings.crSkillVnum) + 1) --zwiększa się poziom umiejętności
- if pc.get_sex() == 0 then
- chat(settings.crSkillUp1_M) --wiadomość o awansie dla Pana
- else
- chat(settings.crSkillUp1_F) --wiadomość o awansie dla Pani
- end
- syschat(settings.crSkillUp2) --druga część wiadomości dla obu płci
- pc.setqf("cracked", 0) --reset ilości otworzonych skrzyń
- end
- local numer = number(1,table.getn(settings.crRewardTable))
- game.drop_item_with_ownership(settings.crRewardTable[numer].reward_id, settings.crRewardTable[numer].reward_count)
- else
- syschat(settings.crOpenFail) --wiadomość o niepomyślnym otworzeniu skrzyni
- end
- --[[ Tego używałem do debugu. Pokazywało na czacie poziom skilla, widełki procentowe i ilość otworzonych z wymaganych do awansu skrzyń ]]--
- 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..")")
- npc.purge() --znika NPC
- end
- when 50514.use or 50515.use or 50516.use begin --czytanie KU
- local itemz = tonumber(item.vnum)
- local settings = cracking.setting()
- test_chat(item.vnum..":"..itemz..":"..tonumber(item.vnum))
- test_chat(settings.crBooks[itemz].skill_level_min.." <=> "..settings.crBooks[itemz].skill_level_max)
- test_chat(settings.crSkillVnum)
- if pc.get_skill_level(settings.crSkillVnum) == 20 then --Tutaj sprawdzam poziom umiejętności. Jeśli jest maksymalny, nie trenuje dalej
- syschat(settings.crBookAnother)
- return
- end
- if pc.getqf("cracking_next_read_time") > get_time() then --Jeśli nie upłynęło 24h od ostatniego czytania
- syschat(settings.crBookCannot) --informacja, że nie możesz jeszcze czytać
- return
- end
- --[[ 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 ]]--
- 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
- --[[ tutaj powtarza się sytuacja z góry, czyli pomysł Aviuz ]]--
- if settings.crIsRestheaIdeaType == 1 then
- if pc.get_level() < 50 and pc.get_skill_level(settings.crSkillVnum) == 10 then
- syschat(settings.crSkillWarnLvLimit50)
- return
- elseif pc.get_level() < 70 and pc.get_skill_level(settings.crSkillVnum) == 19 then
- syschat(settings.crSkillWarnLvLimit70)
- return
- end
- end
- local szansa = number(1, 100)
- if settings.crBookProb >= szansa then --trafienie w widełki
- pc.set_skill_level(settings.crSkillVnum, pc.get_skill_level(settings.crSkillVnum)+1) --zwiększenie poziomu umiejętności o 1
- pc.setqf("cracked", 0) --reset ilości otworzonych skrzyń
- chat(settings.crBookSucc) --wiadomość na czacie
- if pc.get_sex() == 0 then
- chat(settings.crSkillUp1_M) --wiadomość dla pana
- else
- chat(settings.crSkillUp1_M) --wiadomość dla pani
- end
- syschat(settings.crSkillUp2) --wiadomość dla obydwu płci
- else
- syschat(settings.crBookFail) --wiadomość o niepowodzeniu
- end
- pc.setqf("cracking_next_read_time", get_time()+86400) --ustawienie następnego czasu czytania (za 24h)
- item.remove(itemz) --usunięcie KU z EQ
- else
- syschat(settings.crBookAnother) --komunikat o nieprawidłowej książce
- return
- end
- test_chat(item.vnum..":"..itemz..":"..tonumber(item.vnum))
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment