• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

NPC do dialogów

Status
Not open for further replies.

Kuzyn

Excellent OT User
Joined
Dec 19, 2009
Messages
1,763
Solutions
3
Reaction score
920
Location
pl?
Witam!
Na jednym z for poprosiłem o pomoc w sprawie NPCka do dialogów, skrypter ze mnie nijaki (co najwyżej quest na skrzynke zrobie xd) więc mam prośbę.
Otrzymałem taki o to kod:
Code:
[quote="krauzja, post: 0"][B]data/npc/[/B]
Tworzysz npc o nazwie[B] Npc Pomoc[/B] wklejasz do niego :
[PHP]
<npc name="Npc Pomoc" script="data/npc/scripts/pomoc.lua" walkinterval="5000" floorchange="0" access="5" level="1" maglevel="1">
<health now="100" max="100"/>
<look type="268" head="0" body="0" legs="0" feet="94" addons="3"/>
<parameters>
<parameter key="message_greet" value="Witaj napisz {pomoc} aby sprawdzic dostepne slowa." />
</parameters>
</npc>  
[/PHP]
[B]data/npc/scripts/pomoc.lua[/B]
[PHP]
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
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, 'pomoc')) then
selfSay('Dostepne zapytania to (z1, z2, z3.)', cid)
end
if(msgcontains(msg, 'z1')) then
selfSay('Cos tam', cid)
end
if(msgcontains(msg, 'z2')) then
selfSay('Cos tam2', cid)
end
if(msgcontains(msg, 'z3')) then
selfSay('Cos tam3', cid)
end
-----------------------------------------------------
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())  
[/php]
jeśli czegoś nierozumiesz wytłumaczę. ale jeśli wklepiesz do notatnika to zczaisz wszystko ;)
[mod]OT Expert +1[/mod][/QUOTE]

A potrzebowałem NPC, który przynajmniej w 8.1 działał tylko w pliku XML. Czyli gdy gracz podawał dane słowo i było ono w liście po przecinkach to NPC rzucał tekstem według odpowiedniej kolejności. Czy mógłby ktoś mi owego npcka napisać?

W sensie npc blabla wszystko obojętne
i parametry tu coś było ze słowami słowo1, słowo2, słowo3
i odpowiedzi odp1. na słowo1,
odp2. na słowo2

i tak dalej.
 
Masz, napisalem takie cos:
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
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
msgcont = {"z1", "z2", "z3", "ile masz lat"}
msgodp = {"odp do z1", "odp do z2", "odp do z3", "mam 4 lata"}
for i in pairs(msgcont,msgodp) do

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'pomoc')) then
selfSay('Dostepne zapytania to (z1, z2, z3.)', cid)
end
if(msgcontains(msg, msgcont[i])) then
selfSay(''..msgodp[i]..'', cid)
end
end
-----------------------------------------------------
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Odpowiednio:
Code:
msgcont = {"z1", "z2", "z3", "ile masz lat"}
Odpowiada za to co gracz ma powiedziec
Code:
msgodp = {"odp do z1", "odp do z2", "odp do z3", "mam 4 lata"}
To sa odpowiedzi.
 
Masz, napisalem takie cos:
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
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
msgcont = {"z1", "z2", "z3", "ile masz lat"}
msgodp = {"odp do z1", "odp do z2", "odp do z3", "mam 4 lata"}
for i in pairs(msgcont,msgodp) do

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'pomoc')) then
selfSay('Dostepne zapytania to (z1, z2, z3.)', cid)
end
if(msgcontains(msg, msgcont[i])) then
selfSay(''..msgodp[i]..'', cid)
end
end
-----------------------------------------------------
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Odpowiednio:
Code:
msgcont = {"z1", "z2", "z3", "ile masz lat"}
Odpowiada za to co gracz ma powiedziec
Code:
msgodp = {"odp do z1", "odp do z2", "odp do z3", "mam 4 lata"}
To sa odpowiedzi.

Po co się tak męczyć?
W każdym silniku jest coś takiego jak plik .lua o nazwie "DEFAULT".
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)

Dodaj ścieżkę do Niego w swoich NPC i teraz używaj owego schematu w XML, mianowicie...

XML:
<?xml version="1.0" encoding="UTF-8"?> 
<npc name="Kuzyn" script="data/npc/scripts/default.lua" walkinterval="2000" floorchange="0"> 
    <health now="100" max="100"/> 
    <look type="22" head="0" body="0" legs="0" feet="0"/> 
    <parameters> 
        <parameter key="message_greet" value="Hum Humm! Welcume |PLAYERNAME|." /> 
        <parameter key="message_decline" value="Alright then. Come back when you got the neccessary items." />         
        <parameter key="message_walkaway" value="Farewell, human." /> 
        <parameter key="module_keywords" value="1" /> 
        <parameter key="keywords" value="ethan;otland" /> 
        <parameter key="keyword_reply1" value="On mi pomógł!" /> 
        <parameter key="keyword_reply2" value="Tak, to rzeczywiscie zajebiste forum." /> 
    </parameters>

Zdecydowanie wystarczy!

NPC System by Jiddo, niektóre skrypty nie działają bez liborgów!

Na marginesie temat napisałeś trochę nieczytelnie, więc nie wiem czy o to dokładnie Ci chodziło.
Jeżeli chodziło Ci o .lua file, to Pan up napisał to dobrze, aczkolwiek zoptymalizowane chujowo.
 
Last edited:
Ethan, chodziło mi właśnie o plik XML, dzięki wielkie i dla ciebie Ziomer też! Dam reputa jeśli mogę.
 
Status
Not open for further replies.
Back
Top