Ir para conteúdo
  • 0

NPC muda de vocaçao


Duuhzinhow

Pergunta

Galera, preciso de um script de um npc que funcionaria da seguinte forma:



-Apenas uma vocaçao podera falar com ele, caso nao seja a vocaçao correta, ele mandara uma mensagem (tudo configuravel)



-Se for a vocaçao correta, tera duas opçoes, digamos... voce pode dar 15 itens de ID 1550 e mais 15 itens de ID 1290 (apenas exemplo) para se tornar uma vocaçao, e outros itens para se tornar a outra vocaçao, tem a escolha de uma das duas, após se transformar em uma das duas vocaçoes, nao podera voltar atras.. ou seja, ganhara uma storage que caso fale com o npc, o npc apenas mande uma msg e um "bye"



rep+ vlw gente :3 qualquer duvida pergunta ai


Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Ja tem tempo que não mecho com script então esqueci muita coisa :b

Eu fiz, saio meio poluído porque eu esqueci como usar tabela mas ta funcional (To estudando denovo) :/

 

 

.Xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome do npc" script="Local da Script.lua" walkinterval="0" floorchange="0" speed="900">
<health now="150" max="150"/>
<look type="128" head="0" body="0" legs="0" feet="0" addons="0"/>
<parameters>
<parameter key="message_greet" value="Ta Afim de ganha uma vocação?"/>
</parameters>
</npc>

.lua

-- By RigBy --
-- Xtibia.com --
 
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 vocation = 1 -- Vocação que precisa ter
 
-- Primeira Vocação 
local vocationnome1 = 'knight' -- Nome da primeira vocação que ira se torna
local vocationid1 = 3 -- id da vocação que vai ganha
local item1 = 7618 -- primeiro items da primeira vocação
local item2 = 7636 -- Segundo items da primeira vocação
local qnt1 = 15 -- quantidade do primeiro items
local qnt2 = 15 -- quantidade do segundo items
-- Segunda Vocação
local vocationnome2 = 'paladin' -- Nome da segunda vocação que ira se torna
local vocationid2 = 4 -- id da vocação que vai ganha
local items1 = 3333 -- primeiro items da segunda vocação
local items2 = 4444 -- Segundo items da segunda vocação
local qnts1 = 15 -- quantidade do primeiro items
local qnts2 = 15 -- quantidade do segundo items
 
 
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, 'yes') then
if getPlayerVocation(cid) == vocation then
selfSay('Você que ['..vocationnome1..'] ou ['..vocationnome2..'].', cid)
talkState[talkUser] = 1
else
selfSay('Você não ta com a vocação certa ou ja ganho a vocação.', cid)
end
end
 
if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome1..'') then
if getPlayerItemCount(cid, item1) >= qnt1 and getPlayerItemCount(cid, item2) >= qnt2 then
selfSay('Parabêns você acaba de se tornar '..vocationnome1..'', cid)
doPlayerSetVocation(cid, vocationid1)
doPlayerRemoveItem(cid, item1, qnt1)
doPlayerRemoveItem(cid, item2, qnt2)
else
selfSay('Você não tem os items que precisa para ganha a vocação.', cid)
end
end
 
if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome2..'') then
if getPlayerItemCount(cid, items1) >= qnts1 and getPlayerItemCount(cid, items2) >= qnts2 then
selfSay('Parabêns você acaba de ser torna '..vocationnome2..'', cid)
doPlayerSetVocation(cid, vocationid2)
doPlayerRemoveItem(cid, items1, qnts1)
doPlayerRemoveItem(cid, items2, qnts2)
else
selfSay('Você não tem os items que precisa para ganha a vocação.', cid)
end
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Ps. Depois posto um com a tabela feita

Bye

Editado por RigBy
Link para o comentário
Compartilhar em outros sites

  • 0

Ja tem tempo que não mecho com script então esqueci muita coisa :b

Eu fiz, saio meio poluído porque eu esqueci como usar tabela mas ta funcional (To estudando denovo) :/

 

 

.Xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome do npc" script="Local da Script.lua" walkinterval="0" floorchange="0" speed="900">
<health now="150" max="150"/>
<look type="128" head="0" body="0" legs="0" feet="0" addons="0"/>
<parameters>
<parameter key="message_greet" value="Ta Afim de ganha uma vocação?"/>
</parameters>
</npc>

.lua

-- By RigBy --
-- Xtibia.com --
 
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 vocation = 1 -- Vocação que precisa ter
 
-- Primeira Vocação 
local vocationnome1 = 'knight' -- Nome da primeira vocação que ira se torna
local vocationid1 = 3 -- id da vocação que vai ganha
local item1 = 7618 -- primeiro items da primeira vocação
local item2 = 7636 -- Segundo items da primeira vocação
local qnt1 = 15 -- quantidade do primeiro items
local qnt2 = 15 -- quantidade do segundo items
-- Segunda Vocação
local vocationnome2 = 'paladin' -- Nome da segunda vocação que ira se torna
local vocationid2 = 4 -- id da vocação que vai ganha
local items1 = 3333 -- primeiro items da segunda vocação
local items2 = 4444 -- Segundo items da segunda vocação
local qnts1 = 15 -- quantidade do primeiro items
local qnts2 = 15 -- quantidade do segundo items
 
 
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, 'yes') then
if getPlayerVocation(cid) == vocation then
selfSay('Você que ['..vocationnome1..'] ou ['..vocationnome2..'].', cid)
talkState[talkUser] = 1
else
selfSay('Você não ta com a vocação certa ou ja ganho a vocação.', cid)
end
end
 
if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome1..'') then
if getPlayerItemCount(cid, item1) >= qnt1 and getPlayerItemCount(cid, item2) >= qnt2 then
selfSay('Parabêns você acaba de se tornar '..vocationnome1..'', cid)
doPlayerSetVocation(cid, vocationid1)
doPlayerRemoveItem(cid, item1, qnt1)
doPlayerRemoveItem(cid, item2, qnt2)
else
selfSay('Você não tem os items que precisa para ganha a vocação.', cid)
end
end
 
if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome2..'') then
if getPlayerItemCount(cid, items1) >= qnts1 and getPlayerItemCount(cid, items2) >= qnts2 then
selfSay('Parabêns você acaba de ser torna '..vocationnome2..'', cid)
doPlayerSetVocation(cid, vocationid2)
doPlayerRemoveItem(cid, items1, qnts1)
doPlayerRemoveItem(cid, items2, qnts2)
else
selfSay('Você não tem os items que precisa para ganha a vocação.', cid)
end
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Ps. Depois posto um com a tabela feita

Bye

Rep+ , ate ai funcionando tudo certinho, tem como acrescentar mais uma opçao de vocaçao? valeu mano kkkkk

Link para o comentário
Compartilhar em outros sites

  • 0

Para adicionar mais vocações :

 

Em baixo de

-- Segunda Vocação
local vocationnome3 = 'archer' -- Nome da segunda vocação que ira se torna
local vocationid2 = 4 -- id da vocação que vai ganha
local items1 = 3333 -- primeiro items da segunda vocação
local items2 = 4444 -- Segundo items da segunda vocação
local qnts1 = 15 -- quantidade do primeiro items
local qnts2 = 15 -- quantidade do segundo items

adicione :

-- NÚMERO  Vocação
local vocationnome2 = 'nome' -- Nome da segunda vocação que ira se torna
local vocationid2 = ID -- id da vocação que vai ganha
local items1 = x -- primeiro items da segunda vocação
local items2 = x -- Segundo items da segunda vocação
local qnts1 = x -- quantidade do primeiro items
local qnts2 = x -- quantidade do segundo items

Onde esta :

if msgcontains(msg, 'yes') then
if getPlayerVocation(cid) == vocation then
selfSay('Você que ['..vocationnome1..'] ou ['..vocationnome2..'].', cid)
talkState[talkUser] = 1
else
selfSay('Você não ta com a vocação certa ou ja ganho a vocação.', cid)
end
end

Edite a 3° linha para isso :

selfSay('Você que ['..vocationnome1..'] ou ['..vocationnome2..'] ou ['..vocationnome3..'].', cid)

E em baixo de :

if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome2..'') then
if getPlayerItemCount(cid, items1) >= qnts1 and getPlayerItemCount(cid, items2) >= qnts2 then
selfSay('Parabêns você acaba de ser torna '..vocationnome2..'', cid)
doPlayerSetVocation(cid, vocationid2)
doPlayerRemoveItem(cid, items1, qnts1)
doPlayerRemoveItem(cid, items2, qnts2)
else
selfSay('Você não tem os items que precisa para ganha a vocação.', cid)
end
end

Dê duas quebras de linha (enter) e adicione isso :

if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome3..'') then
if getPlayerItemCount(cid, items1) >= qnts1 and getPlayerItemCount(cid, items2) >= qnts2 then
selfSay('Parabêns você acaba de ser torna '..vocationnome3..'', cid)
doPlayerSetVocation(cid, vocationid2)
doPlayerRemoveItem(cid, items1, qnts1)
doPlayerRemoveItem(cid, items2, qnts2)
else
selfSay('Você não tem os items que precisa para ganha a vocação.', cid)
end
end

Pronto acho que é isso , testa ai ..

Não estou podendo testar no momento.

Para adicionar além de 3 é so seguir a lógica.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...