Skocz do zawartości
Opublikowano

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

image.png.dde87d767dadf3fb3015fe8514a2fdfd.png

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

 

 

Rozwiązane przez Sevence

Przejdź do rozwiązania

Featured Replies

Opublikowano

Nie wiem czy to prawda ale czytałem na jakimś forum, ze chatgpt wyśmienicie sobie radzi z questami

Opublikowano
  • 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?

image.png.560fc5833fa305a75f895bf86d0e1614.png

            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
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
  • 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
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 przez hehexde999

Opublikowano
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
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
  • 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

image.png.deee7887580528be889b80c9a5bc4c4a.png

Opublikowano
  • 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

Opublikowano
  • Autor

@Sevence No i działa bajecznie, pozostaje kwestia estetyki 😄

image.png.fb8f7509cca41ead87d5f54c0a147831.png

  • Januszek zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.