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:
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:
2. Skrypt
B?dziemy pracowa? na tym szkielecie. W komentarzach napisze, odsy?acz do punktu, w kt?rym b?dziemy uzupe?nia? dane miejsce:
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:
Nast?pnie dodajemy talkState aby gracz m?g? potwierd? m?wi?c "yes", czyli:
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?:
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:
Teraz umie?cimy funkcje, je?li gracz odda? przedmiot; najpierw oczywi?cie mowa npc:
Teraz storage value:
Nagroda:
Teraz umie?cimy funkcje, je?li gracz nie mia? przedmiot; w?a?ciwie, jest to jedna funkcja, mowa npc:
Teraz pod tym warunkiem wstawiamy talkState na 0 czyli:
Ca?y skrypt b?dzie wygl?da? tak:
Pozdrawiam, DonMuha. Mam nadziej?, ?e pomog?em.
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:
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:
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? |