Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Monetarny Miszmasz


Rekomendowane odpowiedzi

Opublikowano

Ku promocji serwera, wszystko zawarte w opisie, w quescie, nie mam zastrzeżeń.

http://wklej.to/kjJlG

 

 

quest metin_weeklyEvent begin
	state start begin
		when 20011.chat."Monetarny Miszmasz!" begin
			if pc.getqf("metin_weeklyEvent") == 1 and game.get_event_flag("metin_weeklyEvent") <= get_time() and game.get_event_flag("metin_weeklyEvent_userCount") < 100 then
				pc.setqf("metin_weeklyEvent", 0)
			end
			npc.name()
			say("Co tydzień można wylosować ciekawe nagrody.")
			say("Jak to działa?")
			say("Przez Partię losowana jest liczba na dany tydzień.")
			say("Podając liczbę - od 1-10, możesz wylosować pewną nagrodę.")
			say("Haczykiem w tej całej zabawie, jest to, że do losowania")
			say("co tydzień może przystąpić tylko 100 osób.")
			say("Po wyczerpaniu limitu, nałożona jest blokada, na cały tydzień.")
			say("Po upłynięciu tygodnia, losowana jest nowa liczba i jest")
			say("zerowany licznik. Kto pierwszy tym lepszy!")
			if game.get_event_flag("metin_weeklyEvent") > get_time() and game.get_event_flag("metin_weeklyEvent_userCount") == 100 then
				say_reward("Wydarzenie jest aktualnie nieaktywne.")
				say_reward("Wróć kiedy będziesz mógł losować.")
				return
			elseif pc.getqf("metin_weeklyEvent") == 1 then
				say_reward("Losowałeś już w tej kolejce!")
				say_reward("Musisz wrócić za tydzień.")
			else
				wait()
				npc.name()
				say("Podaj liczbę od 1-10.")
				local i = tonumber(input())
				if string.find(i, "nan") or i < 1 or i == "" or i > 10 then
					npc.name()
					say_red("Wartość niepoprawna.")
					return
				elseif game.get_event_flag("metin_weeklyEvent") > get_time() and game.get_event_flag("metin_weeklyEvent_userCount") == 100 then
					say_reward("Wydarzenie jest aktualnie nieaktywne.")
					say_reward("Wróć kiedy będziesz mógł losować.")
					return
				end
				local metin_weeklyEvent_rewardTable = {
					[1] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[2] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[3] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[4] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[5] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[6] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[7] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[8] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[9] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
					[10] = {
						{25040, 1},
						{71084, 1},
						{72701, 1},
						{71095, 1},
						{80008, 1},
						{50300, 1},
					},
				}
				local n = math.random(table.getn(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][i]))
				if not pc.is_gm() then -- debug
					pc.setqf("metin_weeklyEvent", 1)
				end
				game.set_event_flag("metin_weeklyEvent_userCount", game.get_event_flag("metin_weeklyEvent_userCount")+1)
				if game.get_event_flag("metin_weeklyEvent_userCount") == 100 then
					server_timer("metin_weeklyEvent", 3)
					notice_all("<<Monetarny Miszmasz>> Wydarzenie zostało wyłączone!")
					notice_all("<<Monetarny Miszmasz>> Za chwilę zostanie nałożona blokada czasowa i liczba na następny tydzień.")
				end
				npc.name()
				say_reward("Wylosowano:")
				say_reward(item_name(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1]))
				say_item_vnum(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1])
				say_reward("x "..metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][2])
				say_reward("Jesteś "..game.get_event_flag("metin_weeklyEvent_userCount").." osobą.")
				say_reward("Miłego dnia!")
				pc.give_item2(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1], metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][2])
			end
		end
		when metin_weeklyEvent.timer begin
			game.set_event_flag("metin_weeklyEvent_number", math.random(10))
			game.set_event_flag("metin_weeklyEvent", get_time()+60*60*24*7)
		end
	end
end 

 

 

Opublikowano

-- Blejk oddawaj mi 200zł

 

 

20 k***a, za drogo sie cenisz.

 

 

Fajny pomysł z tym questem... chyba go nwet niedługo wykorzystam, dzięki :rolleyes:

Opublikowano

-- Blejk oddawaj mi 200zł

 

 

20 k***a, za drogo sie cenisz.

 

 

Fajny pomysł z tym questem... chyba go nwet niedługo wykorzystam, dzięki :rolleyes:

@Endymion_ wie o co chodzi z blejkiem #askariel

Dzięki, dzięki.

Opublikowano
				if string.find(i, "nan") or i < 1 or i == "" then
					npc.name()
					say_red("Wartość niepoprawna.")
					return

Zamieniłbym to na while - wygodniejsze, bo nie zamyka dialogu i można wpisać ponownie poprawną wartość.

                if game.get_event_flag("metin_weeklyEvent_userCount") == 100 then
                    server_timer("metin_weeklyEvent", 3)
                    game.set_event_flag("metin_weeklyEvent", 0)
                    notice_all("<<Monetarny Miszmasz>> Wydarzenie zostało wyłączone!")
                    notice_all("<<Monetarny Miszmasz>> Za chwilę zostanie nałożona blokada czasowa i liczba na następny tydzień.")
                end

Zerowanie flaga metin_weeklyEvent jest zbędne tak samo jak ten timer, którego zawartość można spokojnie wrzucić w tego if'a.

 

Poza tym quest dobrze napisany i pewnie ktoś go użyje.

Opublikowano
				if string.find(i, "nan") or i < 1 or i == "" then
					npc.name()
					say_red("Wartość niepoprawna.")
					return

Zamieniłbym to na while - wygodniejsze, bo nie zamyka dialogu i można wpisać ponownie poprawną wartość.

                if game.get_event_flag("metin_weeklyEvent_userCount") == 100 then
                    server_timer("metin_weeklyEvent", 3)
                    game.set_event_flag("metin_weeklyEvent", 0)
                    notice_all("<<Monetarny Miszmasz>> Wydarzenie zostało wyłączone!")
                    notice_all("<<Monetarny Miszmasz>> Za chwilę zostanie nałożona blokada czasowa i liczba na następny tydzień.")
                end

Zerowanie flaga metin_weeklyEvent jest zbędne tak samo jak ten timer, którego zawartość można spokojnie wrzucić w tego if'a.

 

Poza tym quest dobrze napisany i pewnie ktoś go użyje.

 

Zerowanie flaga było po prostu moją osobistą inwencją, lubię wszystko mieć dopięte na ostatni guzik, no i służy mi to w panelu do uruchamiania eventów (przy czym też oczywiście czyści). A co do while, to muszę się temu bliżej przyjrzeć. Poza tym, na swoim serwerze oczywiście bym takowe rozwiązanie bym zastosował, to było pisane na szybkości z chwilą natchnienia.

Opublikowano

Zerowanie flaga było po prostu moją osobistą inwencją, lubię wszystko mieć dopięte na ostatni guzik, no i służy mi to w panelu do uruchamiania eventów (przy czym też oczywiście czyści). A co do while, to muszę się temu bliżej przyjrzeć. Poza tym, na swoim serwerze oczywiście bym takowe rozwiązanie bym zastosował, to było pisane na szybkości z chwilą natchnienia.

				while string.find(i, "nan") or i > 10 or i < 1 or i == "" do
					npc.name()
					say_red("Wartość niepoprawna. Wpisz ponownie liczbę 1 - 10.")
					local i = tonumber(input())
				end

Napisałem, że flag jest zbędny, bo w wyniku timera i tak po 3 sek owy flag przyjmuje nową wartość. Timer z kolei jest zbędny bo można to wrzucić w if'a - wtedy dobrze widać zbędność tego zerowania flaga.

 

Nie chce mi sie zbytnio wczytywać, ale wydaje mi się, że tu coś nie do końca przemyślałeś:

local n = math.random(table.getn(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][i]))

przynajmniej dla takiej postaci tablicy jak podałeś. Jeśli użytkownik wpisze wartość 7 / 8 / 9 / 10 to wyjdzie poza tablice chyba, że się mylę.

				say_reward(item_name(metin_weeklyEvent_rewardTable[n][1]))
				say_item_vnum(metin_weeklyEvent_rewardTable[n][1])
				say_reward("x "..metin_weeklyEvent_rewardTable[n][2])

Tutaj także chyba jest błąd, bo ta tablica zagęszcza się jeszcze bardziej czyli:

				say_reward(item_name(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1]))
				say_item_vnum(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1])
				say_reward("x "..metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][2])

No chyba, że coś źle patrzę na kod.

 

Ale tego typu rzeczy każdy sobie poprawi jak będzie chciał to wprowadzić.

Opublikowano
				while string.find(i, "nan") or i > 10 or i < 1 or i == "" do
					npc.name()
					say_red("Wartość niepoprawna. Wpisz ponownie liczbę 1 - 10.")
					local i = tonumber(input())
				end

Napisałem, że flag jest zbędny, bo w wyniku timera i tak po 3 sek owy flag przyjmuje nową wartość. Timer z kolei jest zbędny bo można to wrzucić w if'a - wtedy dobrze widać zbędność tego zerowania flaga.

 

Nie chce mi sie zbytnio wczytywać, ale wydaje mi się, że tu coś nie do końca przemyślałeś:

local n = math.random(table.getn(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][i]))

przynajmniej dla takiej postaci tablicy jak podałeś. Jeśli użytkownik wpisze wartość 7 / 8 / 9 / 10 to wyjdzie poza tablice chyba, że się mylę.

				say_reward(item_name(metin_weeklyEvent_rewardTable[n][1]))
				say_item_vnum(metin_weeklyEvent_rewardTable[n][1])
				say_reward("x "..metin_weeklyEvent_rewardTable[n][2])

Tutaj także chyba jest błąd, bo ta tablica zagęszcza się jeszcze bardziej czyli:

				say_reward(item_name(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1]))
				say_item_vnum(metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][1])
				say_reward("x "..metin_weeklyEvent_rewardTable[game.get_event_flag("metin_weeklyEvent_number")][n][2])

No chyba, że coś źle patrzę na kod.

 

Ale tego typu rzeczy każdy sobie poprawi jak będzie chciał to wprowadzić.

 

chyba źle trochę patrzysz, bo n to zdeklarowany już wyżej warunek, albo się mylę. quest pisany naprawdę na szybkości, co trzeba to poprawię.

@Edit

No i faktycznie, miałeś rację, flag był nieprzemyślany, z tablicą były małe animozje. Dzięki wielkie, jak mówiłem, pisałem go zupełnie na szybkości.

Opublikowano

chyba źle trochę patrzysz, bo n to zdeklarowany już wyżej warunek, albo się mylę. quest pisany naprawdę na szybkości, co trzeba to poprawię.

@Edit

No i faktycznie, miałeś rację, flag był nieprzemyślany, z tablicą były małe animozje. Dzięki wielkie, jak mówiłem, pisałem go zupełnie na szybkości.

Co do tego N, to zawsze zwroci wartosc 1, 2 lub wyrzuci blad. Tam z kolei zbyt gleboko sie zagniezdziles jak do takiego warunku. Brakuje tez jakis warunkow sprawdzajacych czy wybrana liczba przez uzytkownika odpowiada tej wylosowanej przez system. Tak prawde mowiac to trzebaby tego questa wrzucic do kompilatora, bo w kodzie chyba juz nie widze bledow.
Opublikowano
Brakuje tez jakis warunkow sprawdzajacych czy wybrana liczba przez uzytkownika odpowiada tej wylosowanej przez system

Zostało to w międzyczasie poprawione, losuje z zakresu 1-10, więc liczba nie może być większa, ani mniejsza niż 1. Ale szczerze dziękuję za wkład w temat.

Opublikowano

^Dzięki, pogratulować to można co najwyżej pomysłu. @Inkscape bardzo dobrze powiedział - Najtrudniejsze jest wymyślenie pomysłu, realizacja jest banalna.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...