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

Pisanie prostych questów NPC


rafaeru

Rekomendowane odpowiedzi

Opublikowano

data/npc tworzymy nowego NPC np. Quest.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Quest" script="quest.lua" walkinterval="0" floorchange="0">
	<health now="100" max="100"/>
	<look type="5" head="57" body="59" legs="40" feet="76" addons="0"/>
    <flags> 
      <flag attackable="1"/> 
      <flag pushable="1"/> 
    </flags>
	<parameters>
		<parameter key="message_greet" value="Witaj |PLAYERNAME|. Mam dla ciebie pewne {zadanie}." />
	</parameters>
</npc>

następnie w data/npc/scripts tworzymy quest.lua

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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)
local storagequest = 5555 -- storage questa
local item = 5946 -- item ktory trzeba oddac w ilosci 1, jesli chcemy zmienic ilosc itemow edytujemy 23 linijke
local reward = 2160 -- nagroda
local count = 10 -- ilosc nagrody
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
	if(msgcontains(msg, 'zadanie')) then
		if getPlayerStorageValue(cid,storagequest) == -1 then
			selfSay('Prosze cie, znajdz moj grzebien.', cid)
			setPlayerStorageValue(cid,storagequest,1)
		elseif getPlayerStorageValue(cid,storagequest) == 1 then
			if doPlayerRemoveItem(cid,item,1) == true then
				doPlayerAddItem(cid,reward,count)
				setPlayerStorageValue(cid,storagequest,2)
				selfSay('Dziekuje, oto twoja nagroda.', cid)
			else
				selfSay('Caly czas czekam na moj grzebien.', cid)
				return false
			end
		else
			selfSay('Nie mam dla ciebie wiecej zadan.', cid)
			return false
		end
	end
return true
end

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

Ostatni krok to dodać wszystko do quest logu, wchodzimy data/xml/quests.xml i dodajemy:

	<quest name="Poszukiwania Grzebienia" startstorageid="5555" startstoragevalue="1">
		<mission name="Gdzie jest grzebien" storageid="5555" startvalue="1" endvalue="2">
			<missionstate id="0" description="Znajdz grzebien"/>
			<missionstate id="1" description="Znalazles grzebien"/>
		</mission>
	</quest>

Oto efekty:

 

1SeYxjv.gif

 

6OzwMlk.gif

 

 

HyO6nBZ.png

Opublikowano

Potwierdzam skrypt działa ;)

(U mnie po małej przeróbce) ;p

 

 

 

 

Dodasz do tego swojego skrypta np żeby misja/zadanie było od któregoś lvl dopiero.

Opublikowano


local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

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)

local storagequest = 5555 -- storage questa

local item = 5946 -- item ktory trzeba oddac w ilosci 1, jesli chcemy zmienic ilosc itemow edytujemy 23 linijke

local reward = 2160 -- nagroda

local count = 10 -- ilosc nagrody

local level = 100 -- wymagany poziom do questa

if(not npcHandler:isFocused(cid)) then

return false

end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

if(msgcontains(msg, 'zadanie')) then

if getPlayerLevel(cid) >= 100 then

if getPlayerStorageValue(cid,storagequest) == -1 then

selfSay('Prosze cie, znajdz moj grzebien.', cid)

setPlayerStorageValue(cid,storagequest,1)

elseif getPlayerStorageValue(cid,storagequest) == 1 then

if doPlayerRemoveItem(cid,item,1) == true then

doPlayerAddItem(cid,reward,count)

setPlayerStorageValue(cid,storagequest,2)

selfSay('Dziekuje, oto twoja nagroda.', cid)

else

selfSay('Caly czas czekam na moj grzebien.', cid)

return false

end

else

selfSay('Nie mam dla ciebie wiecej zadan.', cid)

return false

end

else

selfSay('By wykonac to zadanie potrzeba '..level..' poziom', cid)

return false

end

end

return true

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Opublikowano

Ok dzięki 

 

Do końca mi nie działało,ale tak działa :

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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 creatureSayCallback(cid, type, msg)
function onThink() npcHandler:onThink() end
local storagequest = 5549 -- storage questa
local item = 12176 -- item ktory trzeba oddac w ilosci 
local count2 = 200 -- ilosc itemow do oddania
local reward = 11444 -- nagroda
local count = 1 -- ilosc nagrody
local level = 40 -- wymagany poziom do questa
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'zadanie')) then
   if getPlayerLevel(cid) < 40 then
            selfSay('Jesli przyniesiesz mi 200 elektrycznych pudelek, to wynagrodze Twoj trud!', cid)
setPlayerStorageValue(cid,storagequest,1)
elseif getPlayerStorageValue(cid,storagequest) == 1 then
if doPlayerRemoveItem(cid,item,count2) == true then
doPlayerAddItem(cid,reward,count)
setPlayerStorageValue(cid,storagequest,2)
selfSay('Dziekuje! Oto twoja nagroda.', cid)
else
selfSay('Caly czas czekam na elektryczne pudelka.', cid)
return false
end
else
selfSay('Nie mam dla Ciebie wiecej zadan.', cid)
return false
end
else
selfSay('By wykonac to zadanie potrzebujesz minimum '..level..' poziom', cid)
return false
end
return true
end


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

 

Mam taką misje i chciałbym ją tak przerobić,aby ten mój NPC w zamian za jakieś konkretne przedmioty dawał pokemony i za każdego pokemona inne przedmioty trzeba by było mu dostarczyć,oraz

aby tymi pokemonami szło by handlować,bo w obecnej chwili jest traktowany jako specjalny pokemon nie zdatny do handlu z innymi graczami.

Pomożesz ?

 



--//
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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
msg = string.lower(msg)
--\\


   ----
local need = {
--item id....quantidade
{id = 12152, qt = 500},
{id = 12162, qt = 500},
}
local storage = 83497
local pokemon = "Charizard" -- nazwa pokemona
   -----
if msgcontains(string.lower(msg), 'pomoc') or msgcontains(string.lower(msg), 'help') then
if getPlayerStorageValue(cid, storage) == 1 then
selfSay("Zostalo juz zakonczone moje zadanie !", cid)
return true
end
--//
selfSay("Witam, chcesz dostarczyc mi kilka przedmiotow , a w zamian daje Pokemona ? Wymagane przedmioty to { 500 garnki z lawy i 500 esencji ognia } {yes}!", cid)
 talkState[talkUser] = 2
   return true
 elseif msgcontains(msg, 'yes') and talkState[talkUser] == 2 then
         for i = 1, #need do
          if getPlayerItemCount(cid, need[i].id) <need[i].qt then
            selfSay("Nie masz wszystkich niezbedne elementow, ktore kazalem Ci przyniesc. Wroc kiedy bedziesz je wszystkie mial !", cid)
              talkState[talkUser] = 0
                return true
            end
        end     
            if not addPokeToPlayer(cid, pokemon, 0, -1, "normal", true) then
                selfSay("Masz 6 Pokemonow w plecaku , wroc z miejscem dla nowego pokemona !", cid)
             talkState[talkUser] = 0
             return true
          end
             for i = 1, #need do
                doPlayerRemoveItem(cid, need[i].id, need[i].qt)
            end
 selfSay("Masz, i dziekuje za pomoc. Zrob dobry uzytek z nowego Pokemona!", cid)
   setPlayerStorageValue(cid, storage, 1)
   talkState[talkUser] = 0
                    return true
                end
    return true
end


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

Opublikowano

Udajesz sie do NPC normalnie rozmowa hi/tak i NPC pyta sie nas którego pokemona chcemy dostac w zamian za jakies przedmioty.

 

Czyli

 

Ja: hi / tak

NPC: Witaj posiadam specjalne pokemony. Moge sie nimi podzielić.

Ja: yes / tak

NPC:Dobrze wiec którego pokemona potrzebujesz : Oddish,Gloom,Vileplume   [itp]

Ja: Oddish

NPC:Ok musisz mi w zamian dać 100 dolarów, item1 i item2   [przykład]

Ja: yes / tak

NPC:Trzymaj pokemona i dziękuje.Wróć jak bedziesz potrzebował innego pokemona.

 

 

O takie coś mi chodzi i zeby z NPC można było rozmawiać do woli.

Opublikowano


local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

local talkState = {}

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 item = 1234

local ilosc = 100

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

if(msgcontains(msg, 'yes')) then

selfSay('Dobrze wiec którego pokemona potrzebujesz : Oddish,Gloom,Vileplume.', cid)

elseif(msgcontains(msg, 'Oddish')) then

if doPlayerRemoveItem(cid,item,ilosc) == true then

-- funkcja od dostania pokemona

end

elseif(msgcontains(msg, 'Gloom')) then

if doPlayerRemoveItem(cid,item,ilosc) == true then

-- funkcja od dostania pokemona

end

elseif(msgcontains(msg, 'Vileplume')) then

if doPlayerRemoveItem(cid,item,ilosc) == true then

-- funkcja od dostania pokemona

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ę...