What's new

-Średni Jak napisa? NPC z misj?.

Don Muha

Advanced User
Joined
Aug 27, 2008
Messages
403
Reaction score
34
Witam. Dzisiaj chcia?bym napisa? tutaj poradnik o NPC, a dok?adnie "Jak napisa? NPC z misj?."

1. ?rodowisko
1.1: Pierw nale?y zaopatrzy? si? o ?rodowisko pisania skrypt?w. Ja u?ywam programu Notepad ++, kt?ry mo?na pobra? z oficjalnej strony producenta ( ). To w?a?nie na nim b?dziemy teraz pracowa?.

1.2: Gdy ju? go pobrali?my w??czamy go. Poka?e si? okno:

notepad1.png

1.3: Zmieniamy kolorowanie sk?adnie naszego pliku, czyli wchodzimy do zak?adki J?zyk, nast?pnie z listy wybieramy liter? L, po czym, z wysuni?tej listy, klikamy w Lua:

notepad2.png

2. Skrypt
B?dziemy pracowa? na tym szkielecie. W komentarzach napisze, odsy?acz do punktu, w kt?rym b?dziemy uzupe?nia? dane miejsce:

PHP:
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

local storageKey = 30481 -- // Tutaj wpisujemy storage value, czyli klucz, z kt?rego npc b?dzie wiedzia?, ?e wykonali?my LUB niewykonali?my misji
local config = {
	itemId = 2160, -- // Tutaj id przedmiotu, ktory npc bedzie potrzebowal
	itemCount = 20, -- // Tutaj ilosc przedmiotow, z powyzszym ID
	reward = {2348, 1} -- // Tutaj nagroda (przed przecinkiem id a po ilo??)
}
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, 'mission')) then -- // S?owo "mission" zamieniamy na dowolne s?owo, na kt?re npc ma reagowa?.  
		if(getPlayerStorageValue(cid, storageKey) <= 0) then -- // Tutaj jest sprawdzane, czy gracz juz wykonal misje czy tez nie
			-- // Przekierowanie do punktu 2.1
		else
			-- // Przekierowanie do punktu 2.2
		end
	elseif(msgcontains(msg, 'yes')) then
		if(talkState[talkUser] == 1) then
			-- // Przekierowanie do punktu 2.3
		end
	end
	return true
end

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

2.1: Tutaj dodajemy funkcje, kt?re maj? by? wywo?ane, gdy gracz jeszcze nie wykona? misji. Najpierw wprowadzamy funkcje, przez kt?r? NPC wysy?a wiadomo?? do gracza, czyli:

PHP:
npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)

Nast?pnie dodajemy talkState aby gracz m?g? potwierd? m?wi?c "yes", czyli:

PHP:
talkState[talkUser] = 1

2.2: Tutaj dodajemy funkcje, kt?re maj? by? wywo?ane, gdy ju? wykonali?my misje. Funkcja, przez kt?r? NPC m?wi do gracza, gdy ju? wykona? misj?:

PHP:
npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)

2.3: Tutaj dodajemy kolejne funkcje, kt?re b?d? wywo?ane gdy gracz powie "yes". Jeszcze przed funkcjami dodamy warunek, kt?ry b?dzie zabiera? graczowi dany przedmiot:

PHP:
if(doPlayerRemoveItem(cid, config.itemId, config.itemCount)) then
	-- // Tutaj umieszczamy funkcje, jesli gracz oddal przedmiot npc
else
	-- // Tutaj umieszczamy funkcje, jesli gracz nie ma przedmiotu
end

Teraz umie?cimy funkcje, je?li gracz odda? przedmiot; najpierw oczywi?cie mowa npc:

PHP:
npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)

Teraz storage value:

PHP:
setPlayerStorageValue(cid, storageKey, 1)

Nagroda:

PHP:
doPlayerAddItem(cid, config.reward[1], config.reward[2])

Teraz umie?cimy funkcje, je?li gracz nie mia? przedmiot; w?a?ciwie, jest to jedna funkcja, mowa npc:

PHP:
npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)

Teraz pod tym warunkiem wstawiamy talkState na 0 czyli:

PHP:
talkState[talkUser] = 0

Ca?y skrypt b?dzie wygl?da? tak:

PHP:
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

local storageKey = 30481 -- Tutaj wpisujemy storage value, czyli klucz, z kt?rego npc b?dzie wiedzia?, ?e wykonali?my LUB niewykonali?my misji
local config = {
	itemId = 2160, -- // Tutaj id przedmiotu, ktory npc bedzie potrzebowal
	itemCount = 20, -- // Tutaj ilosc przedmiotow, z powyzszym ID
	reward = {2348, 1} -- // Tutaj nagroda (przed przecinkiem id a po ilo??)
}
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, 'mission')) then -- S?owo "mission" zamieniamy na dowolne s?owo, na kt?re npc ma reagowa?.  
		if(getPlayerStorageValue(cid, storageKey) <= 0) then -- Tutaj jest sprawdzane, czy gracz juz wykonal misje czy tez nie
			npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)  
			talkState[talkUser] = 1 
		else
			npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)  
		end
	elseif(msgcontains(msg, 'yes')) then
		if(talkState[talkUser] == 1) then
			if(doPlayerRemoveItem(cid, config.itemId, config.itemCount)) then 
				npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)  
				setPlayerStorageValue(cid, storageKey, 1) 
				doPlayerAddItem(cid, config.reward[1], config.reward[2])  
			else 
				npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)  
			end  
			talkState[talkUser] = 0  
		end
	end
	return true
end

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

Pozdrawiam, DonMuha. Mam nadziej?, ?e pomog?em.

Notka moderatorska:

Dodaj?
 

Xart Irok

Senior User
Joined
Sep 7, 2008
Messages
2,925
Reaction score
419
Age
32
Odp: Jak napisa? NPC z misj?.

Bardzo ciekawe, ale gdzie zaprzeczenie (czyt. NO lub NIE)?
 

Arts18

Signed...
Joined
May 7, 2009
Messages
2,888
Reaction score
231
Age
33
Odp: Jak napisa? NPC z misj?.

Poradnik ciekawy, ale nie ma tutaj zaprzeczenie, radzi?bym aby? to doda?, tak jak stwierdzi? Xart. Po za tym jemu nic nie brakuj? - wszystko jest na swoim miejscu.
 

Daarro

New User
Joined
May 30, 2009
Messages
3
Reaction score
0
Odp: Jak napisa? NPC z misj?.

Podoba si? ale opisz dok?adnie jak dodawa? np:

2.1: Tutaj dodajemy funkcje, kt?re maj? by? wywo?ane, gdy gracz jeszcze nie wykona? misji. Najpierw wprowadzamy funkcje, przez kt?r? NPC wysy?a wiadomo?? do gracza, czyli:

Kod PHP:
npcHandler:say("Tutaj tekst, kt?ry m?wi npc.", cid)
 

Lopus

Advanced User
Joined
Jun 17, 2011
Messages
206
Reaction score
9
Odp: Jak napisa? NPC z misj?.

??d, ?adnie nupkom si? przyda.
Wszystko czytelne, nale?a?o si? przeniesienie.
 
Top