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

Rekomendowane odpowiedzi

Opublikowano

Lecimy, nie śpimy. Kolejny quest, tym razem pisany 2 dni, a nie 1 xD

 

Na początek zasada działania:

  1. Gracze typują 6 liczb
  2. Za typowanie płacą ustaloną kwotę, która wpada do puli
  3. GM losuje 6 liczb (losuje, nie wybiera!)
  4. Gracze sprawdzają u NPC czy wygrali
  5. Po ustalonej ilości godzin GM może zamknąć sprawdzanie wygranych
  6. Po ustalonej ilości godzin GM może uruchomić typowanie liczb i mamy powrót do pierwszego punktu!

Na początek może trochę o konfiguracji. Możemy w łatwy sposób edytować następujące rzeczy:

  • Ilość typowanych i losowanych liczb (domyślnie 6)
  • Zakres powyższych liczb (domyślnie 1-56)
  • Koszt jednego zakładu (domyślnie 5.000 Yang)
  • Dodatek do puli nagród (domyślnie 500.000 Yang)
  • Minimalny czas trwania jednego losowania i typowania liczb (domyślnie 24h)

To wszystko edytujemy na górze w queście:

    state KONFIGURACJA begin
       -- Ilośc losowanych liczb
       function IloscLiczb() return 6 end

       -- Maksymalna liczba jaką można wytypować
       function MaxLiczba() return 56 end

       -- Koszt jednego zakładu
       function KosztZakladu() return 5000 end

       -- Dodatek do puli nagród
       function DodatekDoPuli() return 500000 end

       -- Minimalny czas trwania jednego losowania i typowania liczb (w godzinach)
       function CzasLosowania() return 24 end
   end

 

Po edycji (bądź też zostawieniu) powyższych konfiguracji wystarczy jedynie rozmawiać z NPC sterującym i zarządzać losowaniem. Czas teraz na kilka fotek z gry:

 


Na początku wita nas taki ładny obrazek (opcje z napisem "GM" na początku są tylko dla GM. Logiczne, nie?):

blun.jpg

Po wybraniu drugiej opcji:

zabg.jpgvrfx.jpgjsgn.jpgcdvb.jpg

Powyższe akcje wykonują się w dwóch pętlach. Pierwsza zapewnia nam wpisywanie określonej ilości liczb a druga sprawdza, czy rzeczy podane w inpucie są poprawne. Jeśli chcemy ponownie wytypować liczby to taki komunikat nas wita:

srlx.jpg

 

Po wybraniu pierwszej opcji losuje nam randomowe liczby, zamyka możliwość typowania i wyświetla tekst na czacie:

fkox.jpgrmoe.jpgeqkx.jpg

 

Po wylosowaniu liczb przez GM okno rozmowy nieco nam się zmienia:

qnvx.jpg

 

Po wybraniu pierwszej opcji po prostu wszystko nam zeruje.

Po wybraniu drugiej opcji jeśli pula ciągle nie została wygrana:

ptjs.jpg

 

Jeśli pula została już wygrana:

yshq.jpg

 

Dalsza część jest taka sama dla obu przypadków (jak coś to ręcznie zmieniałem liczby żeby zaprezentować jak to wygląda dla wszystkich przypadków, kwota za daną ilość trafień jest obliczana na podstawie dodatkowej puli):

jfzx.jpgcflv.jpgoqgf.jpgexum.jpgkikr.jpgjcmp.jpg

 

Jeśli nikt nie trafił jeszcze puli:

jtza.jpg

 

Jeśli pula została już przez kogoś wygrana:

auct.jpg

 

No i to w zasadzie tyle. Jeśli nikt nie wygra głównej nagrody a GM zakończy sprawdzanie liczb to pula przechodzi do następnego losowania (+ kwota ustalona w configu). Jeśli ktoś nie jest w stanie odebrać odrazu yang (suma wyniesie powyżej 2kkk) to wyskoczy o tym komunikat i będzie mógł odebrać yang jeśli tylko będzie miał więcej miejsca w eq.

 

Czas na najważniejsze, quest:

http://pastebin.com/iYy8qH6P

 

quest lotto begin
state KONFIGURACJA begin
	-- Ilośc losowanych liczb
	function IloscLiczb() return 6 end

	-- Maksymalna liczba jaką można wytypować
	function MaxLiczba() return 56 end

	-- Koszt jednego zakładu
	function KosztZakladu() return 5000 end

	-- Dodatek do puli nagród
	function DodatekDoPuli() return 500000 end

	-- Minimalny czas trwania jednego losowania i typowania liczb (w godzinach)
	function CzasLosowania() return 24 end
end

state start begin
	when login with game.get_event_flag("lotto_Losowanie") == 1 and pc.getqf("lotto_LiczbaNr"..lotto.ilosc_liczb()) != 0 begin
		local pula = game.get_event_flag("lotto_PulaNagrod")
		notice("Maszyna losująca wybrała już liczby...")
		if pula != 0 then
			notice("Dzisiejsza pula nagród to "..pula.." Yang!")
		else
			notice("Pula nagród niestety została już zdobyta przez innego gracza.")
			notice("Niemniej jednak nadal możesz wygrać aż "..lotto.DodatekDoPuli().." Yang!")
		end
	end

	when 9003.chat."GM: Zakończ rozdawanie nagród" with pc.is_gm() and game.get_event_flag("lotto_Losowanie") == 1 begin
		local old_time = game.get_event_flag("lotto_CzasTrwania")
		local new_time = get_time()
		if old_time > new_time then
			say("Musisz poczekać jeszcze "..math.ceil((old_time-new_time)/3600).."h by móc zakończyć ")
			say("odbieranie nagród przez graczy.")
			say()
			return
		end
		say("Na pewno wyłączyć rozdawanie nagród?")
		if select("Tak", "Nie") == 1 then
			game.set_event_flag("lotto_CzasTrwania", get_time()+lotto.CzasLosowania()*60*60)
			game.set_event_flag("lotto_Losowanie", 0)
			for i = 1, 6 do
				game.set_event_flag("lotto_LiczbaNr"..i, 0)
			end
		end
	end

	when 9003.chat."GM: Wylosuj liczby" with pc.is_gm() and game.get_event_flag("lotto_Losowanie") == 0  begin
		local old_time = game.get_event_flag("lotto_CzasTrwania")
		local new_time = get_time()
		if old_time > new_time then
			say("Musisz poczekać jeszcze "..math.ceil((old_time-new_time)/3600).."h by móc zakończyć ")
			say("typowanie liczb przez graczy.")
			say()
			return
		end
		local max = lotto.MaxLiczba()
		local ilosc = lotto.IloscLiczb()
		say("Na pewno wylosować liczby?")
		local liczby
		local tab = {}
		local zakres = {}
		if select("Tak", "Anuluj") == 1 then
			for i = 1, max do
				table.insert(zakres, i)
			end
			for i = 1, ilosc do
				for j = 1, max do
					if tab[i-1] == j then
						table.remove(zakres, j)
						table.insert(zakres, j, 0)
					end
				end
				local a = zakres[number(1, table.getn(zakres))]
				while a == 0 do
					a = zakres[number(1, table.getn(zakres))]
				end
				if table.getn(tab) == 0 then
					liczby = tostring(a)
				else
					liczby = liczby..", "..tostring(a)
				end
				table.insert(tab, a)
				game.set_event_flag("lotto_LiczbaNr"..i, a)
			end
			local pula = game.get_event_flag("lotto_PulaNagrod")+lotto.DodatekDoPuli()
			say("Wylosowane liczby to "..liczby)
			game.set_event_flag("lotto_PulaNagrod", pula)
			game.set_event_flag("lotto_Losowanie", 1)
			game.set_event_flag("lotto_CzasTrwania", get_time()+lotto.CzasLosowania()*60*60)
			notice_all("Maszyna losująca zaczyna wybieranie liczb...")
			notice_all("Dzisiejsza pula nagród to "..pula.." Yang!")
		end
	end

	when 9003.chat."Typowanie liczb" with game.get_event_flag("lotto_Losowanie") == 0 begin
		local max = lotto.MaxLiczba()
		local ilosc = lotto.IloscLiczb()
		local koszt = lotto.KosztZakladu()
		say_title(delay(8).."Loteria")
		if pc.getqf("lotto_LiczbaNr"..ilosc) != 0 then
			say("Posiadasz już wytypowane liczby. Są to:")
			say(color256(0,255,0)..pc.getqf("lotto_LiczbaNr1")..", "..pc.getqf("lotto_LiczbaNr2")..", "..pc.getqf("lotto_LiczbaNr3")..", "..pc.getqf("lotto_LiczbaNr4")..", "..pc.getqf("lotto_LiczbaNr5")..", "..pc.getqf("lotto_LiczbaNr6")..color256(196, 196, 196))
			say("Aby móc wytypować nowe musisz poczekać ")
			say("do następnego losowania.")
			say()
			return
		elseif pc.get_gold() < koszt then
			say("Aby móc wziąć udział w losowaniu należy zapłacić ")
			say(koszt.." Yang, które powędrują do puli nagród.")
			say("Niestety nie posiadasz tyle pieniędzy.")
			say()
			return
		end
		say("Witaj w loterii stworzonej przez Sunushi!")
		say("Za chwilę zostaniesz poproszony o podanie sześciu")
		say("liczb. Liczby te będą brały udział w losowaniu.")
		say("Oto cztery najważniejsze zasady:")
		say("* Mistrz Gry nie wybiera liczb, są one losowe")
		say("* Można tylko raz typować liczby w danym losowaniu")
		say("* Liczby nie mogą się powtarzać ")
		say("* Koszt jednorazowego typowania to "..koszt.." Yang")
		say()
		say("Chcesz wziąć udział w typowaniu liczb?")
		say()
		if select("Tak", "Anuluj") == 1 then
			pc.change_gold(-koszt)
			game.set_event_flag("lotto_PulaNagrod", game.get_event_flag("lotto_PulaNagrod")+koszt)
			local tab = {}
			local liczby
			for i=1, ilosc do
				local a = 0
				while not tonumber(a) or a < 1 or a > max or a == "" do
					say_title("Loteria")
					local dlugosc = table.getn(tab)
					if dlugosc == 0 then
						say("Jeszcze nie wprowadzono żadnej liczby.")
					else
						say("Do tej pory wprowadzono następujące liczby:")
						say(color256(0,255,0)..liczby..color256(196, 196, 196))
					end
					say("Podaj liczbę nr "..i..":")
					say_reward("Zakres to 1-"..max)
					a = tonumber(input())
					if not tonumber(a) or a == "" then
						say_title("Loteria")
						say("Podany został niewłaściwy znak. Spróbuj ponownie.")
						say()
						wait()
					elseif a < 1 or a > max then
						say_title("Loteria")
						say("Liczba musi być z zakresu 1-"..max..". Spróbuj ponownie.")
						say()
						wait()
					else
						for j=1, dlugosc do
							if a == tab[j] then
								a = 0
								say_title("Loteria")
								say("Ta liczba została już podana. Spróbuj ponownie.")
								say()
								wait()
							end
						end
						if a != 0 then
							table.insert(tab, a)
							pc.setqf("lotto_LiczbaNr"..i, a)
							if i == 1 then
								liczby = tostring(a)
							else
								liczby = liczby..", "..tostring(a)
							end
						end
					end
				end
			end
			say_title("Loteria")
			say("Oto podane przez Ciebie liczby")
			say()
			say(color256(0,255,0)..liczby..color256(196, 196, 196))
			say()
			say("Aby poznać wynik typowania zgłoś się do mnie gdy")
			say("Mistrz Gry uruchomi maszynę losującą.")
			say()
		end
	end

	when 9003.chat."Sprawdź moje liczby" with game.get_event_flag("lotto_Losowanie") == 1 begin
		local ilosc = lotto.IloscLiczb()
		local koszt = lotto.KosztZakladu()
		local glowna = lotto.DodatekDoPuli()
		local pula = game.get_event_flag("lotto_PulaNagrod")
		say_title("Loteria")
		if pc.getqf("lotto_LiczbaNr6") == 0 then
			say("Przykro mi, nie masz wytypowanych liczb.")
			say("Może następnym razem Ci się uda!")
			say()
			return
		elseif pula == 0 then
			say("Dziś już ktoś trafił szóstkę! Szansa na wygranie")
			say("głównej nagrody przepadła. Możesz jednak wygrać ")
			say("nagrodę pocieszenia w wysokości "..glowna.." Yang!")
		else
			say("Pula dzisiejszego losowania wynosi "..pula.." Yang.")
		end
		say("Czas sprawdzić Twoje liczby.")
		say()
		wait()
		pc.setqf("lotto_LiczbaNr3", game.get_event_flag("lotto_LiczbaNr3"))
		say_title("Loteria")
		local trafione = {}
		local ilosc_trafionych = 0
		for i = 1, ilosc do
			table.insert(trafione, 0)
		end
		for i = 1, ilosc do
			local liczba = pc.getqf("lotto_LiczbaNr"..i)
			for j = 1, ilosc do
				if liczba == game.get_event_flag("lotto_LiczbaNr"..j) then
					table.remove(trafione, i)
					table.insert(trafione, i, 1)
				end
			end
			if trafione[i] == 1 then
				say(color256(0,255,0).."Liczba "..liczba..": trafiona!"..color256(196, 196, 196))
				ilosc_trafionych = ilosc_trafionych+1
			else
				say(color256(255,0,0).."Liczba "..liczba..": chybiona."..color256(196, 196, 196))
			end
		end
		say()
		say()
		local gold = pc.get_gold()
		local glowna = lotto.DodatekDoPuli()
		local nagrody = {koszt, math.floor(glowna/20), math.floor(glowna/10), math.floor(glowna/4), math.floor(glowna/2), glowna}
		if ilosc_trafionych == 0 then
			say("Przykro nam, dzisiaj Ci się nie powiodło.")
			say("Nie załamuj się, może następnym razem się uda!")
		elseif ilosc_trafionych == 6 and pula != 0 then
			say(color256(0,255,0).."Trafiłeś szóstkę! Wygrywasz "..pula.." Yang!"..color256(196, 196, 196))
			notice_all("Gracz "..pc.get_name().." trafił szóstkę! Dzięki temu wygrał "..pula.." Yang. Gratulujemy!")
			if gold + pula > 2000000000 then
				say()
				say_reward("Po wypłaceniu pieniędzy Twoje kont może ulec")
				say_reward("zbugowaniu. Aby otrzymać kwotę wróć do mnie")
				say_reward("gdy będziesz posiadać mniej Yang.")
				pc.setqf("lotto_Wyplata", pula)
			else
				pc.change_gold(pula)
			end
			game.set_event_flag("lotto_PulaNagrod", 0)
		else
			local liczb = "liczby."
			if ilosc_trafionych == 1 then
				liczb = "liczbę."
			elseif ilosc_trafionych >= 5 then
				liczb = "liczb."
			end
			local nagroda = nagrody[ilosc_trafionych]
			say("Udało Ci się trafić "..ilosc_trafionych.." "..liczb)
			say("W nagrodę otrzymujesz "..nagroda.." Yang. Gratulujemy!")
			if ilosc_trafionych == 6 then
				say("Niestety ktoś ubiegł Cię i zgarnął główną nagrodę.")
				say("Nie martw się, następnym razem Ty rozbijesz bank!")
			end
			if nagroda + gold > 2000000000 then
				say()
				say_reward("Po wypłaceniu pieniędzy Twoje kont może ulec")
				say_reward("zbugowaniu. Aby otrzymać kwotę wróć do mnie")
				say_reward("gdy będziesz posiadać mniej Yang.")
				pc.setqf("lotto_Wyplata", nagroda)
			else
				pc.change_gold(nagroda)
			end
		end
		say()
		for i = 1, 6 do
			pc.setqf("lotto_LiczbaNr"..i, 0)
		end
	end

	when 9003.chat."Wypłata pieniędzy" with pc.getqf("lotto_Wyplata") != 0 begin
		local wyplata = pc.getqf("lotto_Wyplata")
		local gold = pc.get_gold()
		say_title("Loteria")
		if wyplata + gold > 2000000000 then
			say("Nadaj posiadasz za dużo pieniędzy. Możesz posiadać ")
			say("maksymalnie "..2000000000-gold.." Yang a posiadasz "..gold..".")
			say("Wróć do mnie, gdy będzie możliwa wypłata.")
		else
			say("Proszę, oto Twoje "..wyplata.." Yang.")
			pc.change_gold(wyplata)
			pc.setqf("lotto_Wyplata", 0)
		end
	end
end
end

 

 

Pozdrawiam, o błędach pisać w temacie.

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Ciekaw byłem po co Ci te losowanie liczb. :P fajny pomysł, prawie jak motyw w trudnych sprawach dzisiaj.

Dwa dni z tym walczyłem ale się udało xD

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Ok Sun, ale co gdyby ktoś 'zdradził' te liczby innemu graczowi lub wykorzystał to na innych kontach? Moim zdaniem po tym, jak odgadnie się wszystkie liczby, powinno być losowanie NOWYCH. Reszta jest w porządku, chyba muszę napisać coś nowego dla tego działu... ;)

 

umarł

Opublikowano

Sunushi, świetna robota.

Tylko ja się cały czas zastanawiam, czy jest sens udostępniania takich nowości.

Pomysł i wykonanie w 100% Twoje, wydaję mi się, że jest mało osób, które byłoby w stanie napisać takiego quest w tak zoptymalizowanej formie..

Nawet Tobie, osobie, która nie ma najmniejszych problemów z żadnym questem, spędziłeś nad nim 2 dni.

Do czego zmierzam?

Większość teraz skopiuje to na swój komputer, a potem wykorzysta, bez jakiegoś podziekowania.

Nawet czasami zdarzają się tacy, którzy 'zasysają' czyjąś pracę, a pomimo tego hejtują, że dno itd.

NIe musisz też nic udowadniać, bo nie raz już pokazałeś swoje umiejętności.

Podziwiam! Jeszcze raz "gut dżob".

KONIEC


-----------------------------------------


2013-08-15

Opublikowano

Ok Sun, ale co gdyby ktoś 'zdradził' te liczby innemu graczowi lub wykorzystał to na innych kontach? Moim zdaniem po tym, jak odgadnie się wszystkie liczby, powinno być losowanie NOWYCH. Reszta jest w porządku, chyba muszę napisać coś nowego dla tego działu... ;)

Wpisujemy sobie swoje liczby, wtedy nie możemy ich sprawdzić. Możemy je sprawdzić dopiero wtedy, gdy GM wylosuje liczby. Po wylosowaniu liczb nie ma możliwości wybierania własnych liczb. Pozostaje jeszcze kwestia stawiania zakładów na 23298763 kontach. Z tym nie jestem w stanie sobie poradzić ale i tak szansa na trafienie 6 liczb jest przecież bardzo mała.

 

Sunushi, świetna robota.

Tylko ja się cały czas zastanawiam, czy jest sens udostępniania takich nowości.

Pomysł i wykonanie w 100% Twoje, wydaję mi się, że jest mało osób, które byłoby w stanie napisać takiego quest w tak zoptymalizowanej formie..

Nawet Tobie, osobie, która nie ma najmniejszych problemów z żadnym questem, spędziłeś nad nim 2 dni.

Do czego zmierzam?

Większość teraz skopiuje to na swój komputer, a potem wykorzysta, bez jakiegoś podziekowania.

Nawet czasami zdarzają się tacy, którzy 'zasysają' czyjąś pracę, a pomimo tego hejtują, że dno itd.

NIe musisz też nic udowadniać, bo nie raz już pokazałeś swoje umiejętności.

Podziwiam! Jeszcze raz "gut dżob".

Robię to 4fun, nudzę się, a konta w banku nie mam by na tym zarabiać. I tak już pomysłów na jakieś fajne questy nie mam więc szybko raczej się nic ode mnie nie pojawi :P

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Czyli najpierw wpisujemy swoje liczby, potem dopiero 'maszyna' zostaje uruchomiona i mistrz gry losuje liczby?

 

umarł

Opublikowano

Czyli najpierw wpisujemy swoje liczby, potem dopiero 'maszyna' zostaje uruchomiona i mistrz gry losuje liczby?

Dokładnie tak, nie ma możliwości podejrzenia jakie liczby zostaną wylosowane ;)

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

Interesujące... chyba sobie to wgram na VPS'a, a potem nagram filmik z wszystkimi qestami. Już na start wyskakują mi 3 qesty ;D

Opublikowano

Quest świetny, mógłbyś zrobić tutorial o tablicach :)

ePc0b.jpg

mcn_cc.pl - banda złodziei

;)

Piszę questy na zamówienie - Zostanę questerem na serwerze dedykowanym - Na zlecenie napiszę questy - Zakoduję stronę HTML5/CSS3

Opublikowano

Super quest ,

Tylko jest bug jeden end za dużo na końcu chyba tylko mi się tak wydaje sprawcie !

Wszystko jest ok, nie ma za dużo endów.

 

umarł

Opublikowano

Ciekaw byłem po co Ci te losowanie liczb. :P fajny pomysł, prawie jak motyw w trudnych sprawach dzisiaj.

hahaha to było dobre i 4mil przepadły ;d

 

A co do questa to fajny :> przyda się :D

 

 

 

 

 

 

 

 

 

czego tu szukasz ?

 

 

 

 

 

 

 

 

Opublikowano

Witam Cie Sunushi wgrałem questa i przy wpisaniu komendy ./qc lotto.quest wyskakuje mi Abort (core dumped)

Oczywiście przed ./qc było cd /usr/.... itd.

Proszę o pomoc.

Opublikowano

Witam Cie Sunushi wgrałem questa i przy wpisaniu komendy ./qc lotto.quest wyskakuje mi Abort (core dumped)

Oczywiście przed ./qc było cd /usr/.... itd.

Proszę o pomoc.

Pokaż jak wygląda pełna zawartość błędu, albo najlepiej zdjęcie z konsoli

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Opublikowano

mi wlasnie wyskakuje ten blad... Jak go usunac?

Pokaż zdjęcie z terminala

Koniec z MPCForum.pl i ogółem z metinem

:D

 

sunp.png

Sygnatura wykonana przez

Isuribi aka Amelka.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...