Opublikowano 2 Stycznia2 Sty Dzień dobry, nowy rok, nowy ja no to i nowy temat z pytaniem o pomoc XD Prosto z zakątków internetu pozyskałem questa na polowanie który jest rozpisany w tablicy. Quest działa fajnie ALE mam lekutką prośbę o edycje questa: Zliczanie zabitych potworów pod zakładką misji (N) ✅ Po ukończeniu misji otrzymać od razu okno zamykające polowanie i nadanie nagrody (normalnie otrzymamy to po otworzeniu zadania) ✅ Ilość potworów do zabicia od razu po otrzymaniu misji ✅ Aktywacja misji od razu po otrzymaniu bez potrzeby otwierania jej ✅ Nadawanie bonusów za każdą misje ❌ Z rzeczy poza edycją to czy ten quest ma prawo działać czy jednak mogą być problemy? Pytam bo dopiero wkraczam w erę questów. Za pomoc mega dziękuje i na pewno pomożemy też nowym na przyszłość z gotowym już questem na polowanie. Quest: Spoiler -- -- Created by IntelliJ IDEA. -- User: asparte -- Date: 7/21/15 -- Time: 10:44 AM -- To change this template use File | Settings | File Templates. -- quest myslistwo begin state start begin function settings() return{ ["huntTable"] = { --[1] = {["level"] = , ["mobvnums"] = {}, ["mobcounts"] = {}, ["rewardvnums"] = {},["rewardcount"] = {}, ["gold"] = }, [1] = {["level"] = 1, ["mobvnums"] = {101}, ["mobcounts"] = {5}, ["rewardvnums"] = {76013, 76014},["rewardcount"] = {10, 10}, ["gold"] = 100000}, [2] = {["level"] = 12, ["mobvnums"] = {110}, ["mobcounts"] = {10}, ["rewardvnums"] = {71044, 71045},["rewardcount"] = {10, 10}, ["gold"] = 100000}, [3] = {["level"] = 18, ["mobvnums"] = {301}, ["mobcounts"] = {20}, ["rewardvnums"] = {27989, 76014, 50034},["rewardcount"] = {1, 5, 3}, ["gold"] = 200000}, [4] = {["level"] = 24, ["mobvnums"] = {503}, ["mobcounts"] = {10}, ["rewardvnums"] = {76013, 76014, 76015},["rewardcount"] = {10, 10, 10}, ["gold"] = 500000}, [5] = {["level"] = 30, ["mobvnums"] = {5161}, ["mobcounts"] = {3}, ["rewardvnums"] = {108005, 79010, 72001, 39008, 39030},["rewardcount"] = {3, 5, 1, 1, 1}, ["gold"] = 3000000}, [6] = {["level"] = 34, ["mobvnums"] = {634}, ["mobcounts"] = {30}, ["rewardvnums"] = {108005, 27987, 76014, 76022},["rewardcount"] = {3, 3, 20, 1}, ["gold"] = 3000000}, [7] = {["level"] = 38, ["mobvnums"] = {2108}, ["mobcounts"] = {30}, ["rewardvnums"] = {108005, 39032, 76011, 50034},["rewardcount"] = {3, 3, 1, 3}, ["gold"] = 3000000}, [8] = {["level"] = 43, ["mobvnums"] = {903}, ["mobcounts"] = {50}, ["rewardvnums"] = {108005, 71084, 71081},["rewardcount"] = {3, 15, 1}, ["gold"] = 3000000}, [9] = {["level"] = 47, ["mobvnums"] = {5126}, ["mobcounts"] = {50}, ["rewardvnums"] = {108005, 50109, 25041, 39008},["rewardcount"] = {3, 1, 1, 1}, ["gold"] = 3000000}, [10] = {["level"] = 52, ["mobvnums"] = {776}, ["mobcounts"] = {100}, ["rewardvnums"] = {108005, 85000},["rewardcount"] = {3, 1}, ["gold"] = 5000000}, [11] = {["level"] = 55, ["mobvnums"] = {993}, ["mobcounts"] = {3}, ["rewardvnums"] = {108005, 50109, 71084, 72001, 39008},["rewardcount"] = {3, 1, 20, 1, 1}, ["gold"] = 5000000}, [12] = {["level"] = 59, ["mobvnums"] = {1031}, ["mobcounts"] = {50}, ["rewardvnums"] = {108005, 39031, 76009, 72725},["rewardcount"] = {3, 3, 3, 1}, ["gold"] = 5000000}, [13] = {["level"] = 61, ["mobvnums"] = {1402}, ["mobcounts"] = {50}, ["rewardvnums"] = {108005, 71084, 39023},["rewardcount"] = {3, 15, 3}, ["gold"] = 5000000}, [14] = {["level"] = 64, ["mobvnums"] = {2301}, ["mobcounts"] = {30}, ["rewardvnums"] = {108005, 39030, 50034},["rewardcount"] = {3, 1, 3}, ["gold"] = 10000000}, [15] = {["level"] = 66, ["mobvnums"] = {2303}, ["mobcounts"] = {100}, ["rewardvnums"] = {108005, 31143},["rewardcount"] = {3, 1}, ["gold"] = 5000000}, [16] = {["level"] = 68, ["mobvnums"] = {2513}, ["mobcounts"] = {50}, ["rewardvnums"] = {108005, 25041, 85000},["rewardcount"] = {3, 1, 1}, ["gold"] = 10000000}, [17] = {["level"] = 70, ["mobvnums"] = {2204}, ["mobcounts"] = {200}, ["rewardvnums"] = {108006, 50109, 25041},["rewardcount"] = {3, 1, 1}, ["gold"] = 5000000}, [18] = {["level"] = 72, ["mobvnums"] = {1601}, ["mobcounts"] = {50}, ["rewardvnums"] = {108006, 172000}, ["rewardcount"] = {3, 3}, ["gold"] = 10000000}, [19] = {["level"] = 75, ["mobvnums"] = {1603}, ["mobcounts"] = {50}, ["rewardvnums"] = {108006, 172001},["rewardcount"] = {3, 3}, ["gold"] = 5000000}, [20] = {["level"] = 77, ["mobvnums"] = {1137}, ["mobcounts"] = {100}, ["rewardvnums"] = {108006, 172002},["rewardcount"] = {3, 3}, ["gold"] = 10000000}, [21] = {["level"] = 80, ["mobvnums"] = {2311}, ["mobcounts"] = {50}, ["rewardvnums"] = {108006, 171000, 71084},["rewardcount"] = {3, 1, 20}, ["gold"] = 5000000}, [22] = {["level"] = 83, ["mobvnums"] = {1502}, ["mobcounts"] = {50}, ["rewardvnums"] = {108006, 72001, 171000},["rewardcount"] = {3, 1, 1}, ["gold"] = 10000000}, [23] = {["level"] = 85, ["mobvnums"] = {2403}, ["mobcounts"] = {250}, ["rewardvnums"] = {108006, 25041, 76008},["rewardcount"] = {3, 1, 3}, ["gold"] = 5000000}, [24] = {["level"] = 88, ["mobvnums"] = {2414}, ["mobcounts"] = {50}, ["rewardvnums"] = {108006, 39031, 31143},["rewardcount"] = {3, 3, 1}, ["gold"] = 3000000}, [25] = {["level"] = 91, ["mobvnums"] = {3004}, ["mobcounts"] = {250}, ["rewardvnums"] = {108006, 76005, 76022, 71084},["rewardcount"] = {3, 1, 1, 30}, ["gold"] = 8000000}, [26] = {["level"] = 94, ["mobvnums"] = {3005}, ["mobcounts"] = {250}, ["rewardvnums"] = {108006, 79001, 50814},["rewardcount"] = {3, 3, 20}, ["gold"] = 5000000}, [27] = {["level"] = 97, ["mobvnums"] = {3203}, ["mobcounts"] = {250}, ["rewardvnums"] = {108006, 76005, 76022},["rewardcount"] = {3, 1, 1}, ["gold"] = 10000000}, [28] = {["level"] = 100, ["mobvnums"] = {3603}, ["mobcounts"] = {300}, ["rewardvnums"] = {108006, 25041, 39013},["rewardcount"] = {3, 3, 20}, ["gold"] = 1500000}, [29] = {["level"] = 102, ["mobvnums"] = {3605}, ["mobcounts"] = {300}, ["rewardvnums"] = {108006, 31143, 71084},["rewardcount"] = {3, 1, 50}, ["gold"] = 12000000}, [30] = {["level"] = 104, ["mobvnums"] = {6006}, ["mobcounts"] = {100}, ["rewardvnums"] = {108006, 81017, 79001, 72725},["rewardcount"] = {3, 1, 3, 1}, ["gold"] = 17000000}, [31] = {["level"] = 106, ["mobvnums"] = {3403}, ["mobcounts"] = {300}, ["rewardvnums"] = {108006, 31143, 39031},["rewardcount"] = {3, 1, 3}, ["gold"] = 22000000}, [32] = {["level"] = 108, ["mobvnums"] = {6008}, ["mobcounts"] = {100}, ["rewardvnums"] = {108006, 85000, 71084},["rewardcount"] = {3, 1, 50}, ["gold"] = 35000000}, [33] = {["level"] = 110, ["mobvnums"] = {3103}, ["mobcounts"] = {400}, ["rewardvnums"] = {108006, 39023, 31143},["rewardcount"] = {3, 3, 1}, ["gold"] = 20000000}, [34] = {["level"] = 112, ["mobvnums"] = {6108}, ["mobcounts"] = {200}, ["rewardvnums"] = {108006, 85000, 71084},["rewardcount"] = {3, 1, 100}, ["gold"] = 20000000}, [35] = {["level"] = 114, ["mobvnums"] = {3804}, ["mobcounts"] = {400}, ["rewardvnums"] = {108006, 39023, 81017},["rewardcount"] = {3, 3, 1}, ["gold"] = 50000000}, [36] = {["level"] = 116, ["mobvnums"] = {3303}, ["mobcounts"] = {500}, ["rewardvnums"] = {108006, 50109, 39013},["rewardcount"] = {3, 1, 20}, ["gold"] = 50000000}, [37] = {["level"] = 118, ["mobvnums"] = {6107}, ["mobcounts"] = {200}, ["rewardvnums"] = {108006, 50109, 39031, 71084},["rewardcount"] = {3, 3, 20, 200}, ["gold"] = 50000000}, }, } end when login or levelup or letter begin local settings = myslistwo.settings() local idx local old_idx = pc.getqf("idx") if old_idx < table.getn(settings.huntTable) then if settings.huntTable[old_idx+1].level <= pc.get_level() then pc.setqf("idx", old_idx+1) set_state("abc") end end end end state abc begin when letter begin send_letter("Polowanie #"..pc.getqf("idx")) end when button or info begin local setting = myslistwo.settings() say_title("Polowanie #"..pc.getqf("idx")) local idx = pc.getqf("idx") if idx == 1 then say("Witaj "..pc.get_name().."!") say_size(350, 370) say("Zgodnie z poleceniami Kapitana, musisz") say("zabijac potwory na terenach przylegających") say("do wioski, aby nie podesły zbyt blisko") say("i zaczeły zagrażać mieszkańcom.") say() say("Twoje pierwsze zadanie to..") say() say_reward("Zabij 5x Nieb. Wilk") say("Nie zwlekaj!") say() else say("Zgodnie z poleceniami Kapitana, musisz") say("zabijac potwory na terenach przylegających") say("do wioski, aby nie podesły zbyt blisko") say("i zaczeły zagrażać mieszkańcom.") say() say("Twoje kolejne zadanie to..") say_reward("Zabij:") local mobsamount = table.getn(setting.huntTable[idx].mobvnums) for num = 1,mobsamount do say_reward(setting.huntTable[idx].mobcounts[num].."x "..mob_name(setting.huntTable[idx].mobvnums[num])) end end set_state(hunting) end end state hunting begin when letter begin send_letter("Polowanie #"..pc.getqf("idx")) end when button or info begin say_title("Polowanie #"..pc.getqf("idx")) say("Pozostało do zabicia:") local setting = myslistwo.settings() local idx = pc.getqf("idx") local mobsamount = table.getn(setting.huntTable[idx].mobvnums) for num=1,mobsamount do local amount = setting.huntTable[idx].mobcounts[num] local left = amount - pc.getqf(setting.huntTable[idx].mobvnums[num]) if left < 0 then left = 0 end say(left.."x "..mob_name(setting.huntTable[idx].mobvnums[num])) end end when kill with not npc.is_pc() begin local setting = myslistwo.settings() if table_is_in(setting.huntTable[pc.getqf("idx")].mobvnums, npc.get_race()) then pc.setqf(npc.get_race(), pc.getqf(npc.get_race())+1) local count = 0 for i = 1, table.getn(setting.huntTable[pc.getqf("idx")].mobvnums) do if pc.getqf(setting.huntTable[pc.getqf("idx")].mobvnums[i]) >= setting.huntTable[pc.getqf("idx")].mobcounts[i] then count = count + 1 end end char_log(0, "HUNTING", "level ("..pc.getqf("idx")..") count ("..pc.getqf(npc.get_race())..")") if count == table.getn(setting.huntTable[pc.getqf("idx")].mobvnums) then char_log(0, "HUNTING_FINISH", "level ("..pc.getqf("idx")..") count ("..pc.getqf(npc.get_race())..")") set_state(finish) end end end end state finish begin when letter begin send_letter("Polowanie #"..pc.getqf("idx")) end when button or info begin say_title("Polowanie #"..pc.getqf("idx")) say() local setting = myslistwo.settings() local idx = pc.getqf("idx") say() if idx == 1 then say("Doskonale! Sytuacja została") say("opanowana, potwory nie powinny") say("już zagrażać mieszkańcom.") say() else say("Doskonale! Sytuacja została") say("opanowana, potwory nie powinny") say("już zagrażać mieszkańcom.") say() end say_reward("Otrzymano:") local itemamount = table.getn(setting.huntTable[idx].rewardvnums) for num=1,itemamount do say_reward(setting.huntTable[idx].rewardcount[num].."x "..item_name(setting.huntTable[idx].rewardvnums[num])) pc.give_item2(setting.huntTable[idx].rewardvnums[num], setting.huntTable[idx].rewardcount[num]) end say_reward(setting.huntTable[idx].gold.." Yang") pc.change_money(setting.huntTable[idx].gold) char_log(0, "HUNTING_DONE", "level ("..pc.getqf("idx")..")") set_state(start) end end end
Opublikowano 2 Stycznia2 Sty Nie wiem czy to prawda ale czytałem na jakimś forum, ze chatgpt wyśmienicie sobie radzi z questami
Opublikowano 2 Stycznia2 Sty Autor 2 godziny temu, bo_ss napisał(a): Jeżeli chcesz się czegoś nauczyć to wzrouj się na queście od szkolenia konia 😉 Masz tam wszystko co potrzebujesz A jeżeli chcesz być tłukiem to weź sobie gotowy quest z plików Egori Egoria ma zrobione to na tablice czy 1 polowanie = 1 plik txt? pc.setqf("kill_count", pc.getqf("kill_count")+1) q.set_counter("Pustynny Zawadiaka", 20-pc.getqf("kill_count")) Teraz jak to przestawić pod zczytywanie z tabeli a nie na sucho podanej wartości w tym wypadku "20"
Opublikowano 3 Stycznia3 Sty 10 godzin temu, ExoCarossa napisał(a): Teraz jak to przestawić pod zczytywanie z tabeli a nie na sucho podanej wartości w tym wypadku "20" Spróbuj tak: myslistwo.settings().huntTable[pc.getqf("idx")].mobcounts - pc.getqf("kill_count"))
Opublikowano 4 Stycznia4 Sty Autor W dniu 3.01.2025 o 10:03, Bartosz napisał(a): Spróbuj tak: myslistwo.settings().huntTable[pc.getqf("idx")].mobcounts - pc.getqf("kill_count")) Licznik dodany, Twój kodzik zadziałał. Pytanie czy jest sens robić to w takowej tabeli czy jednak pisać jakąś na nowo/każde polowanie ma swój plik .txt bo co w przypadku gdy dodam kolejne misje? Nie będzie buga z podwojeniem ich czy coś? Robiąc polowanie = quest to będzie z 40 samych txt
Opublikowano 4 Stycznia4 Sty 41 minut temu, ExoCarossa napisał(a): Licznik dodany, Twój kodzik zadziałał. Pytanie czy jest sens robić to w takowej tabeli czy jednak pisać jakąś na nowo/każde polowanie ma swój plik .txt bo co w przypadku gdy dodam kolejne misje? Nie będzie buga z podwojeniem ich czy coś? Robiąc polowanie = quest to będzie z 40 samych txt Według mnie w takim formacie jak jest w temacie jest okej. Jest przede wszystkim kilka powodów - porządek w questach, łatwość w utrzymaniu tego poprzez łatwą edycję / dodanie czegoś czy chociażby poprawy wszystkich questów / opisów za jednym zamachem. Nie rozumiem obaw o błąd z podwajaniem. Edytowane 4 Stycznia4 Sty przez hehexde999
Opublikowano 4 Stycznia4 Sty 2 godziny temu, hehexde999 napisał(a): Według mnie w takim formacie jak jest w temacie jest okej. Jest przede wszystkim kilka powodów - porządek w questach, łatwość w utrzymaniu tego poprzez łatwą edycję / dodanie czegoś czy chociażby poprawy wszystkich questów / opisów za jednym zamachem. Nie rozumiem obaw o błąd z podwajaniem. Jeśli chodzi o porządek w Questach to akurat ja mam posegregowane w folderach odpowiednio od misji. Polowania mam osobno, każdy quest to jedno polowanie. Ścieżka /home/share/locale/poland/quest/polowania/polowanie_1.lua
Opublikowano 6 Stycznia6 Sty W dniu 4.01.2025 o 15:41, ExoCarossa napisał(a): Licznik dodany, Twój kodzik zadziałał. Pytanie czy jest sens robić to w takowej tabeli czy jednak pisać jakąś na nowo/każde polowanie ma swój plik .txt bo co w przypadku gdy dodam kolejne misje? Nie będzie buga z podwojeniem ich czy coś? Robiąc polowanie = quest to będzie z 40 samych txt Zostaw tak jak jest, przynajmniej jak znajdziesz buga, to fixniesz go w każdym polowaniu od razu.
Opublikowano 6 Stycznia6 Sty Autor Godzinę temu, Bartosz napisał(a): Zostaw tak jak jest, przynajmniej jak znajdziesz buga, to fixniesz go w każdym polowaniu od razu. Spoiler when button or info begin say_title(" Polowanie #"..pc.getqf("idx")) say() local setting = potworologia.settings() local idx = pc.getqf("idx") local mobsamount = table.getn(setting.huntTable[idx].mobvnums) say_zloto(" Nadszedł moment aby szkolić umiejętność: ") say() say_pistacja(" Potworologia ") say() say_zloto(" W tym zadaniu musisz pokonać jeszcze: ") say() for num=1,mobsamount do local amount = setting.huntTable[idx].mobcounts[num] local left = amount - pc.getqf(setting.huntTable[idx].mobvnums[num]) if left < 0 then left = 0 end say_pistacja(left.."x "..mob_name(setting.huntTable[idx].mobvnums[num])) end say() end Nie mogę wyśrodkować pozostałej ilości potworów do zabicia, wiecznie mi to z lewej czyta. Chyba że w tym wypadku to ma być inaczej sformuowane Spoiler
Opublikowano 6 Stycznia6 Sty Rozwiązanie Moim zdaniem ręczne dodawanie spacji w ten sposób jest średnim rozwiązaniem. Można zrobić to prościej tworząc dedykowaną funkcję do centrowania tekstu, którą podepniesz sobie do say_color przykładowe rozwiązanie: 📁Lokalizacja: 'share -> locale -> pl -> quest -> questlib.lua' 🔎Szukaj function say_title(name) say(color256(255, 230, 186) .. name .. color256(196, 196, 196)) say() end ➕Dodaj (gdzie 70 to szerokość dialogu) function center_text(text) local padding = math.floor((70 - string.len(text)) / 2) return string.rep(" ", math.max(0, padding)) .. text end 🔎Szukaj function say_pistacja(name) ♻️Zamień: function say_pistacja(name) say(color256(159, 251, 136) .. center_text(name) .. color256(196, 196, 196)) end 🆕Czy po prostu nowa: function say_newcolor_center(name) say(color256(100, 149, 237) .. center_text(name) .. color256(196, 196, 196)) end W ten sposób możesz zrobić sobie również nowe funkcje do centrowania typowo zamiast bawić się w spacje. ❗Pamiętaj żeby użyć nowych funkcji musisz je dodać do pliku quest_functions