lol legal amigo muito interessante
- Fórum
- OTServ
- Recursos
- Scripting
- NPCs, monsters e raids
- [Npc] Vende Vocação Que Só Dura Até Deslogar
[Npc] Vende Vocação Que Só Dura Até Deslogar
Por Newtonnotwen, 17 de ago. de 2012 em NPCs, monsters e raids
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

Adicionei para o npc falar pelo defaut além do private com o player.
info
Grupo: Banidos
Registrado: 30/07/12
Posts: 279
Reputação: +16
Char no Tibia: Raidou

Hmm.Muito interessante este npc.
Eu gosto mais da função que ele fala por private é mais legal e organizado.rsrs
Abraços.
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

Hmm.Muito interessante este npc.
Eu gosto mais da função que ele fala por private é mais legal e organizado.rsrs
Abraços.
Ele fala pelos 2, tipo:
Player (private): Hi
Npc (Private): Hello
Npc (defaut): Hello
Ao mesmo tempo...
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

@Newtonnotwen
Pelo que eu vi, esse NPC não é exatamente um NPC que dá vocation só até o player deslogar. Isso só funcionaria se a vocation possuísse o fromvoc diferente do ID dela mesma. Por exemplo, se colocar pra virar Druid, a vocation continuaria mesmo deslogando. Para seu NPC ficar 100% igual você diz, teria que usar uma storage e um creaturescript. Gostaria que eu fizesse para você?
E dica, esse trecho:
if(getPlayerItemCount(cid, 2160) >= 100) then doPlayerRemoveItem(cid, 2160, 100)
Poderia ser reduzido para isso:
if doPlayerRemoveMoney(cid, 1000000) then
Editado Agosto 19 por LuckOake
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

@Newtonnotwen
Pelo que eu vi, esse NPC não é exatamente um NPC que dá vocation só até o player deslogar. Isso só funcionaria se a vocation possuísse o fromvoc diferente do ID dela mesma. Por exemplo, se colocar pra virar Druid, a vocation continuaria mesmo deslogando. Para seu NPC ficar 100% igual você diz, teria que usar uma storage e um creaturescript. Gostaria que eu fizesse para você?
E dica, esse trecho:
if(getPlayerItemCount(cid, 2160) >= 100) then doPlayerRemoveItem(cid, 2160, 100)
Poderia ser reduzido para isso:
if doPlayerRemoveMoney(cid, 1000000) then
eu qria ver vc fazer sim
se puder posta aqui mesmo
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

@Vodkart
Não sei por quê, mas to com impressão de que falei alguma bobeira e você vai usar isso para me zoar .-.
Please, se falei algo errado apenas me corrija, não me maltrate haehuaeh
Mas ok, vou tentar fazer aqui. Se falei algo sem sentido, edito depois.
NPC:
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
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) then
selfSay('Diga newvoc.', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'newvoc') and talkState[talkUser] == 1) then
if doPlayerRemoveMoney(cid, 1000000) then
voc = getPlayerVocation(cid)
setPlayerStorageValue(cid, 7123, voc)
doPlayerSetVocation(cid, 10)
selfSay('Agora você possui a nova vocação!', cid)
else
selfSay('Você não tem dinheiro!', cid)
end
talkState[talkUser] = 0
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
voclogin.lua:
function onLogin(cid)
voc = getPlayerStorageValue(cid, 7123)
if voc ~= -1 then
doPlayerSetVocation(cid, voc)
end
return true
end
Editado Agosto 19 por LuckOake
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

Obs: Então testa, pra você ver se perde a vocação...
Perde sim, na verdade não era pra perde, só que quando tava editando percebi que perde. Testa antes de confirmar algo.
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

@Newtonnotwen
Eu testei e a vocation continuou. Teste ai também, crie um char sem promotion Knight, coloque o NPC pra dar vocation 3, compre e logue.
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

@Vodkart
Não sei por quê, mas to com impressão de que falei alguma bobeira e você vai usar isso contra mim .-.
Please, se falei algo errado apenas me corrija, não me maltrate haehuaeh
Mas ok, vou tentar fazer aqui. Se falei algo sem sentido, edito depois.
NPC:
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
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) then
selfSay('Diga newvoc.', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'newvoc') and talkState[talkUser] == 1) then
if doPlayerRemoveMoney(cid, 1000000) then
voc = getPlayerVocation(cid)
setPlayerStorageValue(cid, 7123, voc)
doPlayerSetVocation(cid, 10)
selfSay('Agora você possui a nova vocação!', cid)
else
selfSay('Você não tem dinheiro!', cid)
end
talkState[talkUser] = 0
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
voclogin.lua:
function onLogin(cid)
voc = getPlayerStorageValue(cid, 7123)
if voc ~= -1 then
doPlayerSetVocation(cid, voc)
end
return true
end
como eu imaginei, usou o mesmo método que eu, salvou a voc em uma storage e deu qndo logou
é isso ai cara
parabens
n tenho rep agr pra te da
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80





Editado Agosto 19 por Newtonnotwen
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

@Vodkart
Ui, me senti especial. Um Deus dos scripts me elogiando ou me zoando através de palavras com sentido subentendido
@Newtonnotwen
Tenta usar as vocations originais do Tibia (Druid, Knight, Pally, Sorc).
info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80

As vocações possuem o mesmo id, não vai mudar nada.
info
Grupo: Marquês
Registrado: 22/07/12
Posts: 1.1k
Reputação: +400
Gênero: Masculino
Char no Tibia: Luck Oake

@Newtonnotwen
Hm... Estranho. Bom, no fim isso não importa muito. Ai sumiu, aqui não, ok, cada server é diferente. Mas pra quem tiver o problema da vocation não sumir, igual eu, basta usar o fix que postei ali em cima.
Editado Agosto 19 por LuckOake






info
Grupo: Conde
Registrado: 04/08/12
Posts: 762
Reputação: +80
Esse npc da uma vocação que só dura até o player deslogar.
Pode ser usado como uma vocação especial ou seja se o player deslogar perde ela e terá que comprar novamente.
Em data/npc crie um arquivo.xml nomeie para newvoc e adicione:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Newvoc" script="data/npc/scripts/newvoc.lua" walkinterval="1000" floorchange="1">
<health now="100" max="100"/>
<look type="302" head="114" body="114" legs="200" feet="114" addons="3"/>
<parameters>
<parameter key="message_greet" value="Deseja virar nova prof? "/>
</parameters>
</npc>
Em data/npc/scripts crie um arquivo.lua nomeie para newvoc e adicione:
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
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) then
selfSay('Diga newvoc.', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'newvoc') and talkState[talkUser] == 1) then
if(getPlayerItemCount(cid, 2160) >= 100) then
doPlayerRemoveItem(cid, 2160, 100)
doPlayerSetVocation(cid, 10)
selfSay('Agora você possui a nova vocação!', cid)
else
selfSay('Você não tem dinheiro!', cid)
end
talkState[talkUser] = 0
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Editando:
-Roxo: Looktype
-Verde escuro: Mensagem após falar hi
-Dourado: Mensagem que o player precisara dizer para o npc continuar
-Vermelho: Próxima mensagem do npc
-Verde claro: Próxima mensagem do player
-Marrom: Id do item a ser removido
-Violeta: Quantidade do item a ser removido
-Cinza: Id da vocação
-Azul Turco: Mensagem de confirmação
-Teal: Mensagem de cancelamento
Créditos:
Autor desconhecido ----- Pelo script
Newtonnotwen ----- Pela edição e pelo tutorial
Imagens:
-------------------Ouça uma musica enquanto instala o npc
Editado Agosto 19 por Newtonnotwen