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

Witam.

Mam problem ze zrobionym przeze mnie questem.

Po odpaleniu w maszynie questa komendą ./qc dzikipies.quest wyskakuje:
Quest : dzikipies
state : start
When : login or
When : levelup
           with pc . get_level ( ) == 1
State : dziki_pies1
dzikipies.quest:7:state doesn't have begin-end clause.
Abort (core dumped)

Dopowiem, że to pierwszy quest napisany przeze mnie.

Proszę o wskazanie błędu przez który quest się nie chce uruchomić.
Prawdopodobnie gdzieś brakuje begin lub end tylko nie wiem gdzie ._.

Quest:

Spoiler

quest dziki_pies begin
    state start begin
        when login or levelup with pc.get_level() == 1 begin
        set_state(dziki_pies1)
        end
        end
        state dziki_pies1 start
        send_letter("Początki")
        end
            when button or into begin
                say_title("Początki")
                say("Witaj "..pc.get_name().." w świecie XentarisMT2")
                say("Na początku sprawdzimy twoje umiejętności")
                say("Idź i zabij 10 dzikich psów!")
            end
            clear_letter()
        set_state(dziki_pies2)
        end    
        state dziki_pies2 begin
        send_letter("Zabij 10 dzikich psów")
            when button or into begin
            say_title("Zabij 10 dzikich psów")
            say("Po zakończeniu misji otrzymasz nagrodę!")
            say("Do dzieła!")
            end
            when kill with npc.get_race() == 101 begin
                local count = pc.getqf("ile")+1
                    if count < 10 then
                        pc.setqf("ile", count)
                    elseif count == 10 then
                    set_state(koniec)
                    end
            end
        state koniec begin
        send_letter("Umiejętności sprawdzone")
            when button or into begin
                say_title("Umiejętności sprawdzone")
                say("Pokazałeś na co cię stać")
                say("Przyjmij oto nagrodę")
                say("Która pomoże ci w dalszych zadaniach")
                wait()
                say("Otrzymano:")
                say("Zbroja +5")
                say("Tarcza +5")
                say("10.000 yang")
                say("800 punktów doświadczenia")
                if pc.job == 0 then -- WOJOWNIK
                    pc.give_item2("11205" , 1)
                    pc.give_item2("13005" , 1)
                    pc.give_gold(10000)
                    pc.give_exp(800)
                if pc.job == 1 then -- NINJA
                    pc.give_item2("11405" , 1)
                    pc.give_item2("13005" , 1)
                    pc.give_gold(10000)
                    pc.give_exp(800)
                if pc.job == 2 then -- SURA
                    pc.give_item2("11605" , 1)
                    pc.give_item2("13005" , 1)
                    pc.give_gold(10000)
                    pc.give_exp(800)
                if pc.job == 3 then -- SZAMAN
                    pc.give_item2("11805" , 1)
                    pc.give_item2("13005" , 1)
                    pc.give_gold(10000)
                    pc.give_exp(800)
            end
        end
    end
end

 

Opublikowano

Przejrzałem twój quest i jak na pierwszy raz jest nieźle :p
Musisz pamiętać o tym że każdy rozpoczęty: quest, state, when oraz if musi mieć swój własny (!) end a także że nie możesz dawać kodu luzem w samym state kod musi być w bloku when. Questy mają swoją strukturę której należy się trzymać i najlepiej stosować tabulatory wtedy się tak łatwo nie pogubisz.

 

Proszę tutaj masz poprawiony quest

quest dziki_pies begin
	state start begin
		when login or levelup with pc.level == 1 begin
			set_state(dziki_pies1)
		end
	end
	
	state dziki_pies1 begin
		when letter begin
			send_letter("Początki")
		end
		when button or info begin
			say_title("Początki")
			say("Witaj "..pc.get_name().." w świecie XentarisMT2")
			say("Na początku sprawdzimy twoje umiejętności")
			say("Idź i zabij 10 dzikich psów!")
			clear_letter()
			set_state(dziki_pies2)
		end
	end
	
	state dziki_pies2 begin
		when letter begin
			send_letter("Zabij 10 dzikich psów")
		end
		when button or info begin
			say_title("Zabij 10 dzikich psów")
			say("Po zakończeniu misji otrzymasz nagrodę!")
			say("Do dzieła!")
		end
		when 101.kill begin
			local count = pc.getqf("ile")+1
			if count < 10 then
				pc.setqf("ile", count)
			elseif count == 10 then
				set_state(koniec)
			end
		end
	end
	
	state koniec begin
		when letter begin
			send_letter("Umiejętności sprawdzone")
		end
		when button or info begin
			say_title("Umiejętności sprawdzone")
			say("Pokazałeś na co cię stać ")
			say("Przyjmij oto nagrodę ")
			say("Która pomoże ci w dalszych zadaniach")
			wait()
			say("Otrzymano:")
			say("Zbroja +5")
			say("Tarcza +5")
			say("10.000 yang")
			say("800 punktów doświadczenia")
			if pc.job == 0 then -- WOJOWNIK
				pc.give_item2("11205" , 1)
				pc.give_item2("13005" , 1)
			elseif pc.job == 1 then -- NINJA
				pc.give_item2("11405" , 1)
				pc.give_item2("13005" , 1)
			elseif pc.job == 2 then -- SURA
				pc.give_item2("11605" , 1)
				pc.give_item2("13005" , 1)
			elseif pc.job == 3 then -- SZAMAN
				pc.give_item2("11805" , 1)
				pc.give_item2("13005" , 1)
			end
			-- wspolne niezaleznie od klasy
			pc.give_gold(10000)
			pc.give_exp(800)
		end
	end
end

 

Opublikowano
4 godziny temu, Rimmero napisał:

Przejrzałem twój quest i jak na pierwszy raz jest nieźle :p
Musisz pamiętać o tym że każdy rozpoczęty: quest, state, when oraz if musi mieć swój własny (!) end a także że nie możesz dawać kodu luzem w samym state kod musi być w bloku when. Questy mają swoją strukturę której należy się trzymać i najlepiej stosować tabulatory wtedy się tak łatwo nie pogubisz.

 

Proszę tutaj masz poprawiony quest


quest dziki_pies begin
	state start begin
		when login or levelup with pc.level == 1 begin
			set_state(dziki_pies1)
		end
	end
	
	state dziki_pies1 begin
		when letter begin
			send_letter("Początki")
		end
		when button or info begin
			say_title("Początki")
			say("Witaj "..pc.get_name().." w świecie XentarisMT2")
			say("Na początku sprawdzimy twoje umiejętności")
			say("Idź i zabij 10 dzikich psów!")
			clear_letter()
			set_state(dziki_pies2)
		end
	end
	
	state dziki_pies2 begin
		when letter begin
			send_letter("Zabij 10 dzikich psów")
		end
		when button or info begin
			say_title("Zabij 10 dzikich psów")
			say("Po zakończeniu misji otrzymasz nagrodę!")
			say("Do dzieła!")
		end
		when 101.kill begin
			local count = pc.getqf("ile")+1
			if count < 10 then
				pc.setqf("ile", count)
			elseif count == 10 then
				set_state(koniec)
			end
		end
	end
	
	state koniec begin
		when letter begin
			send_letter("Umiejętności sprawdzone")
		end
		when button or info begin
			say_title("Umiejętności sprawdzone")
			say("Pokazałeś na co cię stać ")
			say("Przyjmij oto nagrodę ")
			say("Która pomoże ci w dalszych zadaniach")
			wait()
			say("Otrzymano:")
			say("Zbroja +5")
			say("Tarcza +5")
			say("10.000 yang")
			say("800 punktów doświadczenia")
			if pc.job == 0 then -- WOJOWNIK
				pc.give_item2("11205" , 1)
				pc.give_item2("13005" , 1)
			elseif pc.job == 1 then -- NINJA
				pc.give_item2("11405" , 1)
				pc.give_item2("13005" , 1)
			elseif pc.job == 2 then -- SURA
				pc.give_item2("11605" , 1)
				pc.give_item2("13005" , 1)
			elseif pc.job == 3 then -- SZAMAN
				pc.give_item2("11805" , 1)
				pc.give_item2("13005" , 1)
			end
			-- wspolne niezaleznie od klasy
			pc.give_gold(10000)
			pc.give_exp(800)
		end
	end
end

 

Dziękuję ci dobry człowieku. Tylko tam gdzie jest tekst (say) to w grze nie ma polskich liter np. "ó". Wiesz może jak to naprawić?

@Rimmero

A i jeszcze jedno. Wiesz jak zrobić żeby liczyło te zabite dzikie psy? Taki licznik w queście np 0/10 itd.

Opublikowano
13 minut temu, Drodix napisał:

Tylko tam gdzie jest tekst (say) to w grze nie ma polskich liter np. "ó"

Plik z questem powinien mieć kodowanie ANSI.

13 minut temu, Drodix napisał:

Wiesz jak zrobić żeby liczyło te zabite dzikie psy? Taki licznik w queście np 0/10 itd.

Tak, w miejscu w którym zliczasz zabicie psa dodaj coś takiego

syschat("Zabiłeś "..count.."/10 dzikich psów.")

Ogólnie to aby dodać do ciągu znaków tekst z zmiennej w tym przypadku zawartość count musisz umieścić ją w "..zmienna.."
Jednak zgodnie z sztuką powinno się robić tak czyli dokonać konwersji zmiennej na string

syschat("Zabiłeś "..tostring(count).."/10 dzikich psów.")

chociaż ten pierwszy sposób też zadziała w przypadku metina.

Opublikowano

@Rimmero

syschat("Zabiłeś "..count.."/10 dzikich psów.") dałem pod elseif count == 10 i nie działa.

Dałem kodowanie na ANSI, poprawiłem na polskie litery i nie działa.

Ostatni błąd jest taki że gdy wykonałem misję, odebrałem nagrodę, wyszedłem z gry. Po chwili zalogowałem się ponownie i wyskoczyła mi drugi raz wiadomość z nagrodą, gdy jeszcze raz się wylogowałem i zalogowałem, znów mogłem odebrać nagrodę... O co chodzi?

Wiem, że cię męczę trochę, ale chcę się nauczyć pisania questów.

Opublikowano
10 minut temu, Drodix napisał:

syschat("Zabiłeś "..count.."/10 dzikich psów.") dałem pod elseif count == 10 i nie działa.

I dobrze że nie działa bo jak tam dałeś to wyświetli się jak zabijesz 10 psów dopiero powinieneś dać to tutaj (syschat wyświetla się na chacie tak btw nie w okienku)

when 101.kill begin
			local count = pc.getqf("ile")+1
			if count < 10 then
				pc.setqf("ile", count)
  				syschat("Zabiłeś "..count.."/10 dzikich psów.")
			elseif count == 10 then
				set_state(koniec)
			end
		end

 

13 minut temu, Drodix napisał:

Ostatni błąd jest taki że gdy wykonałem misję, odebrałem nagrodę, wyszedłem z gry. Po chwili zalogowałem się ponownie i wyskoczyła mi drugi raz wiadomość z nagrodą, gdy jeszcze raz się wylogowałem i zalogowałem, znów mogłem odebrać nagrodę... O co chodzi?

Quest działa poprawnie bo tak jest oskryptowany :D jak rozpocznie się state o nazwie "koniec" to za każdym razem on się wywoła gdy się zalogujesz lub zmienisz mapkę. Z tego state nie ma żadnego wyjścia i serwer uznaje że ciągle ma wykonywać state "koniec" musisz zrobić jeszcze jednego putego state

state koniecquesta begin
end

a na końcu state "koniec" dać set_state(koniecquesta)

16 minut temu, Drodix napisał:

Dałem kodowanie na ANSI, poprawiłem na polskie litery i nie działa.

Hmm dziwna sprawa powinno działać jak wszystko robisz dobrze. U mnie działa poprawnie z Polskimi znakami.

Opublikowano
55 minut temu, Rimmero napisał:

I dobrze że nie działa bo jak tam dałeś to wyświetli się jak zabijesz 10 psów dopiero powinieneś dać to tutaj (syschat wyświetla się na chacie tak btw nie w okienku)


when 101.kill begin
			local count = pc.getqf("ile")+1
			if count < 10 then
				pc.setqf("ile", count)
  				syschat("Zabiłeś "..count.."/10 dzikich psów.")
			elseif count == 10 then
				set_state(koniec)
			end
		end

 

Quest działa poprawnie bo tak jest oskryptowany :D jak rozpocznie się state o nazwie "koniec" to za każdym razem on się wywoła gdy się zalogujesz lub zmienisz mapkę. Z tego state nie ma żadnego wyjścia i serwer uznaje że ciągle ma wykonywać state "koniec" musisz zrobić jeszcze jednego putego state


state koniecquesta begin
end

a na końcu state "koniec" dać set_state(koniecquesta)

Hmm dziwna sprawa powinno działać jak wszystko robisz dobrze. U mnie działa poprawnie z Polskimi znakami.

@Rimmero

Dałem ten state jak mówiłeś i nie działa: (tam na dole jest i jest dodany na końcu state koniec)
 

state koniec begin
        when letter begin
            send_letter("Umiejętności sprawdzone")
        end
        when button or info begin
            say_title("Umiejętności sprawdzone")
            say("Pokazałeś na co cię stać")
            say("Przyjmij oto nagrodę ")
            say("która pomoże ci w dalszych zadaniach")
            wait()
            say("Otrzymano:")
            say("Zbroja +5")
            say("Tarcza +5")
            say("10.000 yang")
            say("800 punktów doświadczenia")
            if pc.job == 0 then -- WOJOWNIK
                pc.give_item2("11205" , 1)
                pc.give_item2("13005" , 1)
            elseif pc.job == 1 then -- NINJA
                pc.give_item2("11405" , 1)
                pc.give_item2("13005" , 1)
            elseif pc.job == 2 then -- SURA
                pc.give_item2("11605" , 1)
                pc.give_item2("13005" , 1)
            elseif pc.job == 3 then -- SZAMAN
                pc.give_item2("11805" , 1)
                pc.give_item2("13005" , 1)
            end
            -- wspolne niezaleznie od klasy
            pc.give_gold(10000)
            pc.give_exp(800)
            set_state(konieccc)
        end
    end
    state konieccc begin
    end
end

 

@Rimmero

Tak wg w maszynie jak dodam juz quest do folderu to wpisuje ./qc dziki_pies.quest i wyskakuje nazwa itp i po kolei state'y. Jest State:start, dzikipies1 dzikipies2 koniec a konieccc nie ma. O co kurde chodzi? 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...