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

Problem z NPC i questem


Rekomendowane odpowiedzi

Opublikowano

Siemka. Czy byłby ktoś tak dobry i pomógł mi? 

 

Zrobiłem npc'ka który daje misję do wykonania.

 

Rozmowa wygląda następująco:

Hi>runa>yes>ancient rune

 

Jak zrobić żeby po ponownym porozmawianiu z npc'kiem nie zaczynał od nowa rozmowy, tylko od razu mówił "Nie moge sie doczekac kiedy przyniesiesz mi ancient rune" jeśli owej runy nie mamy, natomiast jeśli ją mamy to "Czy przyniosłeś mi ancient rune?" i po wpisaniu ancient rune dał nagrodę.

 

Silnik jest pod 8.60 Tibie.

 

npc/scripts/arro.lua

------STORAGE-------
------100 do 104-------
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local item1 = 2348
local item2 = 2400
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'runa')) then
selfSay('Bardzo mi na tej runie zalezy. Czy moglbys mi pomoc ja zdobyc?', cid)
end
---------------------------------------------------------

if(msgcontains(msg, 'yes')) then
selfSay('To wspaniale!! Przynies mi {ancient rune} a srogo Cie wynagrodze. Podobno mozna ja zdobyc od mumii. Spiesz sie nie moge sie juz doczekac az ja zobacze!', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'ancient rune') and talkState[talkUser] == 1) then
if (getPlayerStorageValue(cid,101) > 0) then
selfSay('Wykonales juz ta misje.', cid)
else
if(doPlayerRemoveItem(cid, item1, 1) == TRUE) then
setPlayerStorageValue(cid,101,1)
doPlayerAddExperience(cid,1000000)
doPlayerAddItem(cid, item2, 1)
selfSay('Dziekuje Ci za pomoc. O to Twoja nagroda.', cid)
else
selfSay('Jeszcze nie zdobyles runy.', cid)
end
end
return true
end
----------------------------------------------------------

 
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

npc/arro.xml

<npc name="Arro" script="data/npc/scripts/arro.lua" walkinterval="1" floorchange="0" access="5" level="1" maglevel="1">
<health now="100" max="100"/>
<look type="132" head="57" body="59" legs="40" feet="76" addons="3"/>
<parameters>
<parameter key="message_greet" value="Witaj |PLAYERNAME|. Jestem archeologiem. Interesuje mnie pewna stara {runa}. Jednak nie jest latwo ja zdobyc." />
</parameters>
</npc>

A dla tych bardziej doświadczonych.

 

Jak zrobić żeby po wpisaniu yes czyli przyjęciu questa, quest dodawał się do Quest Log?

 

Z góry dziękuję i przepraszam jeśli założyłem temat w złym miejscu. 

 

Opublikowano

nie wiem czy o to ci chodziło:

------STORAGE-------
------100 do 104-------
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local item1 = 2348
local item2 = 2400
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'runa')) and getPlayerStorageValue(cid,101) == -1 then
	selfSay('Bardzo mi na tej runie zalezy. Czy moglbys mi pomoc ja zdobyc?', cid)
else
	selfSaY('Nie moge sie doczekac kiedy przyniesiesz mi ancient rune', cid)
end
---------------------------------------------------------
 
if(msgcontains(msg, 'yes')) then
	selfSay('To wspaniale!! Przynies mi {ancient rune} a srogo Cie wynagrodze. Podobno mozna ja zdobyc od mumii. Spiesz sie nie moge sie juz doczekac az ja zobacze!', cid)
	setPlayerStorageValue(cid,101,1)
	talkState[talkUser] = 1
end

if(msgcontains(msg, 'ancient rune') and talkState[talkUser] == 1) then
	if (getPlayerStorageValue(cid,101) == 2) then
		selfSay('Wykonales juz ta misje.', cid)
	else
	if(doPlayerRemoveItem(cid, item1, 1) == TRUE) then
		setPlayerStorageValue(cid,101,2)
		doPlayerAddExperience(cid,1000000)
		doPlayerAddItem(cid, item2, 1)
		selfSay('Dziekuje Ci za pomoc. O to Twoja nagroda.', cid)
	else
		selfSay('Jeszcze nie zdobyles runy.', cid)
	end
	end
end
return true
end
----------------------------------------------------------
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

bo jeśli chcesz żeby jego pierwsza wiadomość była inna to trzeba to zrobić jakoś inaczej.

 

Co do Quest Loga to wchodzisz w data/XML/quests.xml

 

i dodajesz coś takiego:

<quest name="Ancient Rune Quest" startstorageid="101" startstoragevalue="1">
    <mission name="W poszukiwaniu runy" storageid="101" startvalue="1" endvalue="2">
	<missionstate id="0" description="bla bla bla"/>
        <missionstate id="1" description="koniec"/>
	</mission>
</quest>
Opublikowano

Problem jest jeszcze w tym ze za każdym razem czy wpiszę runa, yes czy ancient rune to npc pisze ze nie może się doczekać kiedy przyniesiesz mu runę.

 

//EDIT//

 

Wyjaśnię dokładnie.

 

Rozmowa z npc ma wyglądać następująco:

 

Rozmawiamy z npc po raz pierwszy:

 

Trybek: Hi

Arro: Witaj Trybek. Jestem archeologiem. Interesuje mnie pewna stara runa. Jednak nie jest latwo ja zdobyc.

Trybek: runa

Arro: Bardzo mi na tej runie zalezy. Czy moglbys mi pomoc ja zdobyc?

Trybek: yes (w tym momencie dodaje quest do Quest Log (i jak da radę to pokazuje się biały napis że quest został dodany do Quest Log))

Arro: To wspaniale!! Przynies mi ancient rune a srogo Cie wynagrodze. Podobno mozna ja zdobyc od mumii. Spiesz sie nie moge sie juz doczekac az ja zobacze!

Trybek: ancient rune

Arro: Jeszcze nie zdobyles runy.

 

Po odejściu od NPC i ponownym porozmawianiu ma wyglądać następująco:

 

Gdy nie posiadamy owej runy w plecaku:

 

Trybek: Hi

Arro: Witaj Trybek. Jestem archeologiem. Interesuje mnie pewna stara runa. Jednak nie jest latwo ja zdobyc.

Trybek: runa

Arro: Nie moge sie doczekac kiedy przyniesiesz mi ancient rune

lub gdy napiszemy

Trybek: yes

Arro: Nie moge sie doczekac kiedy przyniesiesz mi ancient rune

lub

Trybek: ancient rune

Arro: Nie moge sie doczekac kiedy przyniesiesz mi ancient rune

 

Gdy posiadamy runę w plecaku:

 

Trybek: Hi

Arro: Czy przyniosles mi rune?

Trybek: yes

Arro: Dziekuje Ci za pomoc. O to Twoja nagroda.

 

Po oddaniu questa i ponownym porozmawianiu ma wyglądać tak:

 

Trybek: Hi

Arro: Witaj Trybek. Jestem archeologiem. Interesuje mnie pewna stara runa. Jednak nie jest latwo ja zdobyc.

Trybek: runa lub ancient rune lub yes

Arro: Wykonales juz ta misje.

Opublikowano

Nie wiem jak zrobić to:

 

Gdy posiadamy runę w plecaku:

 

Trybek: Hi

Arro: Czy przyniosles mi rune?

Trybek: yes

Arro: Dziekuje Ci za pomoc. O to Twoja nagroda.

------STORAGE-------
------100 do 104-------
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local item1 = 2348
local item2 = 2400
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'runa')) and getPlayerStorageValue(cid,101) == -1 then
	selfSay('Bardzo mi na tej runie zalezy. Czy moglbys mi pomoc ja zdobyc?', cid)
else
	selfSaY('Nie moge sie doczekac kiedy przyniesiesz mi {ancient rune}', cid)
end
---------------------------------------------------------
 
if(msgcontains(msg, 'yes')) and getPlayerStorageValue(cid,101) == -1 then
	selfSay('To wspaniale!! Przynies mi {ancient rune} a srogo Cie wynagrodze. Podobno mozna ja zdobyc od mumii. Spiesz sie nie moge sie juz doczekac az ja zobacze!', cid)
	setPlayerStorageValue(cid,101,1)
	talkState[talkUser] = 1
	else
	selfSaY('Nie moge sie doczekac kiedy przyniesiesz mi {ancient rune}', cid)
end

if(msgcontains(msg, 'ancient rune') and talkState[talkUser] == 1) then
	if (getPlayerStorageValue(cid,101) == 2) then
		selfSay('Wykonales juz ta misje.', cid)
	else
	if(doPlayerRemoveItem(cid, item1, 1) == TRUE) then
		setPlayerStorageValue(cid,101,2)
		doPlayerAddExperience(cid,1000000)
		doPlayerAddItem(cid, item2, 1)
		selfSay('Dziekuje Ci za pomoc. O to Twoja nagroda.', cid)
	else
		selfSay('Jeszcze nie zdobyles runy.', cid)
	end
	end
end
return true
end
----------------------------------------------------------
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...