Posta o script
- Fórum
- OTServ
- Suporte
- Resolvidos
- [Resolvido] [8.60] Erro na troca de vocação
info
Grupo: Colaborador
Registrado: 27/12/10
Posts: 271
Reputação: +87
Gênero: Masculino

info
Grupo: Campones
Registrado: 29/01/08
Posts: 12
Reputação: +1
Gênero: Masculino
Char no Tibia: Nao tenho

13 minutos atrás, Kuro o Shiniga disse:Posta o script
-- 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 = 2 -- Vocação que precisa ter
-- Primeira Vocação
local vocationnome1 = 'Feiticeiro' -- Nome da primeira vocação que ira se torna
local vocationid1 = 5 -- id da vocação que vai ganha
-- Segunda Vocação
local vocationnome2 = 'Sacerdote' -- Nome da segunda vocação que ira se torna
local vocationid2 = 6 -- id da vocação que vai ganha
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, 'promover') then
if getPlayerVocation(cid) == vocation then
selfSay('Deseja se tornar um {'..vocationnome1..'} ou um {'..vocationnome2..'}?', cid)
talkState[talkUser] = 1
else
selfSay('Você precisar ser um {Mago} para que eu possa te promover.', cid)
end
end
if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome1..'') then
selfSay('Parabêns, agora você é um {'..vocationnome1..'!}', cid)
doPlayerSetVocation(cid, vocationid1)
doPlayerAddItem(cid, 2189, 1)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_GREEN)
end
if talkState[talkUser] == 1 and msgcontains(msg, ''..vocationnome2..'') then
selfSay('Parabêns, agora você é um {'..vocationnome2..'}!', cid)
doPlayerSetVocation(cid, vocationid2)
doPlayerAddItem(cid, 8912, 1)
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_GREEN)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Editado Fevereiro 20 por jeriposcleide
info
Grupo: Colaborador
Registrado: 27/12/10
Posts: 271
Reputação: +87
Gênero: Masculino

6 horas atrás, jeriposcleide disse:
Não vai funcionar seu script, não esta mudando no banco de dados !
doPlayerSetVocation só muda in game, depois que ele logar vai voltar como era antes por conta do banco de dados, tenta assim :
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 local vocacao = getPlayerVocation(cid) if msgcontains(msg, "trocar") and vocacao == 1 then doPlayerSetVocation(cid, 3) db.executeQuery('UPDATE `players` SET `vocation` = 3 WHERE `id` = '.. getPlayerGUID(cid)) selfSay("So be it!", cid) elseif msgcontains(msg, "trocar") and vocacao == 2 then doPlayerSetVocation(cid, 4) db.executeQuery('UPDATE `players` SET `vocation` = 4 WHERE `id` = '.. getPlayerGUID(cid)) selfSay("So be it!", cid) end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
info
Grupo: Campones
Registrado: 29/01/08
Posts: 12
Reputação: +1
Gênero: Masculino
Char no Tibia: Nao tenho

Em 20/02/2019 em 18:16, Kuro o Shiniga disse:Não vai funcionar seu script, não esta mudando no banco de dados !
doPlayerSetVocation só muda in game, depois que ele logar vai voltar como era antes por conta do banco de dados, tenta assim :
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 local vocacao = getPlayerVocation(cid) if msgcontains(msg, "trocar") and vocacao == 1 then doPlayerSetVocation(cid, 3) db.executeQuery('UPDATE `players` SET `vocation` = 3 WHERE `id` = '.. getPlayerGUID(cid)) selfSay("So be it!", cid) elseif msgcontains(msg, "trocar") and vocacao == 2 then doPlayerSetVocation(cid, 4) db.executeQuery('UPDATE `players` SET `vocation` = 4 WHERE `id` = '.. getPlayerGUID(cid)) selfSay("So be it!", cid) end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
amigo desculpe a demora pra responder, tive uns imprevistos mas enfim:
não deu certo, ele troca a vocaçao tambem, mas acontece a mesma coisa, ao deslogar ele volta a ser o que era antes me ajuda pf
e da o seguinte erro
Citar[13:28:25.829] data/npc/scripts/promote mago2.lua:29: attempt to call field 'executeQuery' (a nil value)
[13:28:25.829] stack traceback:
[13:28:25.829] data/npc/scripts/promote mago2.lua:29: in function 'callback'
[13:28:25.830] data/npc/lib/npcsystem/npchandler.lua:390: in function 'onCreatureSay'
[13:28:25.830] data/npc/scripts/promote mago2.lua:8: in function <data/npc/scripts/promote mago2.lua:8>
Editado Fevereiro 22 por jeriposcleide
info
Grupo: Colaborador
Registrado: 27/12/10
Posts: 271
Reputação: +87
Gênero: Masculino

2 minutos atrás, jeriposcleide disse:amigo desculpe a demora pra responder, tive uns imprevistos mas enfim:
não deu certo, ele troca a vocaçao tambem, mas acontece a mesma coisa, ao deslogar ele volta a ser o que era antes me ajuda pf
Estranho aqui funcionou, testei com um sorcerer ele virou paladin, você colocou o script no local correto e deu reload?
Editado Fevereiro 22 por Kuro o Shiniga
info
Grupo: Campones
Registrado: 29/01/08
Posts: 12
Reputação: +1
Gênero: Masculino
Char no Tibia: Nao tenho

16 minutos atrás, Kuro o Shiniga disse:
Estranho aqui funcionou, testei com um sorcerer ele virou paladin, você colocou o script no local correto e deu reload?
sim, e ele deu o erro que postei acima, erro em "ExecuteQuery".
Amigo seguinte, troquei db.executequery por "db.query" e parou de dar o erro
mas mesmo assim eu relogo e volta pra vocaçao antiga.
EDIT: Consegui, seu script estava perfeito amigo, so precisei substituir por db.query mesmo... o erro estava persistindo pq meu "fromvoc" no vocations.xml tava errado! Rep+
Editado Fevereiro 22 por jeriposcleide
info
Grupo: Diretor
Registrado: 12/05/12
Posts: 818
Reputação: +578
Gênero: Masculino
Char no Tibia: [ADM] Night




info
Grupo: Campones
Registrado: 29/01/08
Posts: 12
Reputação: +1
Gênero: Masculino
Char no Tibia: Nao tenho
Bom dia/tarde/noite Galera.
Seguinte, estou montando um OT 8.60 que funciona da seguinte maneira
Todos os players começam com a vocaçao aprendiz, no level 30 eles falam com um npc e podem escolher entre Mago, Guerreiro e Paladino. No level 200, em outro NPC, o player tem o seguinte leque de vocações:
Mago - Feiticeiro / Sacerdote
Guerreiro - Gladiador / Barbaro / Brutamontes
Paladino - Arqueiro / Bestista
Eu ja criei todas as classes e numerei certinho no Vocations.Xml
Os npcs estão entregando as classes normalmente, o problema é que quando o player desloga, ele volta 1 classe para tras, e se deslogar novamente, volta outra vez... Já procurei em tudo aqui mas ninguem conseguiu me ajudar.... Alguem pfv?