MY
npc

Como criar npc de missão

Por mylorc, 16 de out. de 2013 em Scripts

como criar npc de missão
resolvido
41
4.6k
mylorcM
16 de outubro de 2013 às 19:45

Não deu,e sim eu troquei. Estou postando os aequivos aqui para você olhar:

XML ->

 

<npc name="Force" script="data/npc/scripts/force.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">

<health now="150" max="150"/>

<look type="124" head="114" body="114" legs="114" feet="114" corpse="2212"/>

<parameters>

<parameter key="message_greet" value="Welcome to the beginning of the game, Sir |PLAYERNAME|. You would make the {MISSION}?" />

</parameters>

</npc>

Lua ->
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) end
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 talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local storage = 6058
local items = {8710, 8710, 8710}
if msgcontains(string.lower(msg), 'mission') or msgcontains(string.lower(msg), 'help') then
selfSay("Would you like to help me on a mission?", cid)
talkState[talkUser] = 1
elseif (msgcontains(string.lower(msg), 'yes') or msgcontains(string.lower(msg), 'sim')) and talkState[talkUser] == 1 then
if getPlayerStorageValue(cid, storage) <= 0 then
selfSay("Bring me these items:Cockroach leg, cockroach leg, cockroach leg and reward you with experience.", cid)
setPlayerStorageValue(cid, storage, 1)
talkState[talkUser] = 0
return true
elseif getPlayerStorageValue(cid, storage) == 1 then
for a, b in ipairs(items) do
if getPlayerItemCount(cid, b) >= 1 then
selfSay("Thank you!", cid)
doPlayerAddLevel(cid, 7)
doPlayerRemoveItem(cid, items, 1)
talkState[talkUser] = 0
return true
else
selfSay("You have not got the items, so go search them!", cid)
talkState[talkUser] = 0
return true
end
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
(Obs: O 1° arquivo xml sujerido não deu certo,não apareceu no rme e nem no jogo,porém esse usado por mim só aparece no rme,mas ja deu totalmente certo com outros npc,tipo travel)
OmegaO
16 de outubro de 2013 às 19:47

Essa seção não deve ser usada para pedidos ou dúvidas, temos uma seção específica para isso. Por favor, preste mais atenção da próxima vez.
Movido para Pedidos e Dúvidas - Scripting.


Como não é a primeira violação, tenho que avisar que na próxima será alertado.

mylorcM
16 de outubro de 2013 às 20:22

O.K

zipter98Z
16 de outubro de 2013 às 20:35

Sobre o xml que você postou, tente trocar por este aqui: -Pelo que eu saiba, após o 'script', deve-se colocar apenas o nome do arquivo.lua.

<npc name="Force" script="force.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="124" head="114" body="114" legs="114" feet="114" corpse="2212"/>
<parameters>
<parameter key="message_greet" value="Welcome to the beginning of the game, Sir |PLAYERNAME|. You would make the {MISSION}?" />
</parameters>
</npc>
E retire isso do script [suponho que seja desnecessário, já que seu servidor não é de pokémon e.e]
function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) end
Testou ambos os scripts, ou apenas o segundo? Se o primeiro funcionar, vou dar uma olhada novamente neste segundo. Se você testou os dois e não funcionou de vez, me desculpe de verdade, mas não sei como lhe ajudar mais :c
LumusL
16 de outubro de 2013 às 22:09

missao.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)
if(not npcHandler:isFocused(cid)) then
return false 
end 

-----------#Início das configurações#------------
local stg = 1425 -- storage da quest, para não fazer 2x.
local item1 = 9971 -- id do item
local qtd = 3 -- quantidade a ser removida.
local level = 7 -- quantidade de level a dar ao jogador.
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
-----------#Fim das configurações#------------
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) >= 1 then
	selfSay('Você já me ajudou, sou grato por isso!', cid)
	talkState[talkUser] = 0 
end 
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) <= 0 then 
	if getPlayerItemCount(cid, item1, qtd) then 
		setPlayerStorageValue(cid, stg, 1) 
		selfSay('Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!', cid) 
		doPlayerAddLevel(cid, level)
	else 
		selfSay('Você não tem '..qtd..' {"..getItemNameById(item1).."s}. Volte aqui quando tiver', cid)
	end 
end 
return true 
end  

XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<npc name="Oclahoma" script="data/npc/scripts/missao.lua" walkinterval="3000" floorchange="0">
	<health now="100" max="100"/>
	<look type="132" head="20" body="39" legs="45" feet="7" addons="0"/>
	<parameters>
		<parameter key="message_greet" value="Olá |PLAYERNAME|. Eu tenho uma {missão} para você." />
		<parameter key="message_farewell" value="Até mais, |PLAYERNAME|!"/>
	</parameters>
</npc>

Editado Outubro 17 por Fawz

zipter98Z
16 de outubro de 2013 às 22:36

Fawz, acho que você esqueceu de setar a storage no player quando ele entrega os items, não? Vai q é só impressão minha e.e

LumusL
16 de outubro de 2013 às 22:41

Fawz, acho que você esqueceu de setar a storage no player quando ele entrega os items, não? Vai q é só impressão minha e.e

eita, nem vi brigadãaao!

zipter98Z
16 de outubro de 2013 às 22:46

Nada :D

@topic

mylorc, testou o script do Fawz? Este, pelo visto, é impossível que não funcione.

Editado Outubro 16 por zipter98

markindootM
16 de outubro de 2013 às 22:49

já disse, na linha do Arquivo.lua tem que indicar a localização do NPC!

se não indicar, não ira aparecer o NPC.

zipter98Z
16 de outubro de 2013 às 23:03

/\ Essa localização que você falou é tipo data/npc/arquivo? Se for isso, só ocorre em servidores de Tibia, certo? É porque, por exemplo, no PDA (servidor de pokémon), não é necessário indicar a localização do NPC. Só colocar o nome do arquivo.lua, e pronto.

Se o que você comentou é algo totalmente diferente disso que eu disse, desconsidere, plz e.e

markindootM
16 de outubro de 2013 às 23:11

Desculpa mais nao curto PDA ^^

 

 

se o do Fawz funfo Duvida Sanada, agora é o membro ver o topic.

mylorcM
17 de outubro de 2013 às 10:34

Fawz esse script que me passou : coloquei tudo certo porem quando entro no jogo e falo hi para o npc,ele simplesmente não responde,sabe o que pode ser?

LumusL
17 de outubro de 2013 às 10:47

Editei meu post, veja se funciona agora.

mylorcM
17 de outubro de 2013 às 10:58

Nada :D

@topic

mylorc, testou o script do Fawz? Este, pelo visto, é impossível que não funcione.

Sim testei,porém quando falo hi para o npc,ele não responde.

Não sei identificar o problema.

Sabe resolver?

Editado Outubro 17 por mylorc

LumusL
17 de outubro de 2013 às 11:30

Já testou o que coloquei novamente?