Ir para conteúdo
  • Cadastre-se

(Resolvido)[NPC PROMOTION] Escolher entre uma e outra


Ir para solução Resolvido por lucasprimolemos,

Posts Recomendados

Olá, gostaria de um NPC que funcionasse em TFS 1.3, todos os que tentei do TK, xTibia, otland não funcionaram, ou deram erro de callback entre outros. O único que funcionou, montei os 4 npcs, tudo certinho, o script era o mesmo para todos, porém mudava a voc e o npc para kina, druid, sorc e pally, 

 

Mas ai não sei como, o primeiro NPC que vc fala, faz com que todos usem o mesmo script dele... ou seja, se vc fala com o King Wizard, qdo for falar com King Archer, Warrior etc, o script é do King Wizard...


OBS: As vocs estão OK, 

Seria assim (free pay)

Sorc lvl 35 {Master Wizard 5} ou {Enchanted Wizard 6}

Druid lvl 35 {Elder Wizard 7} ou {Trap Wizard 8}

Paladin lvl 35 {Swift Paladin 9} ou {Heavy Paladin 10}

Knight lvl 35 {Guardian Knight 11} ou {Berserker Knight 12}

 

Um Npc para cada vocação.

 

O único script que funcionou foi esse, mas aconteceu o erro dos conflitos, os outros que tentei (estou a dias 10 todos os dias tentando scripts de todos lugares para tfs 1.x) deram erro na distro de callback / OnCreatureSay / ou erros de fechamento de else/ifelse ou comunicação com player

-- config by uotl£
config = {[1] = { -- [coloca vocation que tem que ser antes de escolher]
lvl = 35, -- level tem que ser maior que 50
id_da_vocation = 5,nome_da_vocation = "Master Wizard", -- id da primeira vocation que pode compra e o nome dela
id_da_vocation2 = 6,nome_da_vocation2 = "Enchanted Wizard"} -- id da segunda vocation que pode compra e o nome dela
}
local fala_do_npc = "MAGE Desculpe, mas voce esta falando com a pessoa errada." -- fala do npc se ja tiver comprado e se não for vocation certa
local preco = 2 -- preço por platinum  100 que e igual 1 crystal
-- config by uotl£

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
voc = config[getPlayerVocation(cid)]
if(msgcontains(msg, 'promotion') or msgcontains(msg, 'promotions')) then
       check (cid,talkUser)
    elseif (msgcontains(msg, voc.nome_da_vocation) and talkState[talkUser] == 1) then
       talkState[talkUser] = 2
          selfSay("tem certeza que voce quer ser [ "..voc.nome_da_vocation.." ] ? [yes] ou [no]", cid)
    elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
        v1_check (cid,talkUser,numero_s)
    elseif (msgcontains(msg, 'no') and talkState[talkUser] == 2) then
       talkState[talkUser] = 0
        selfSay("ate mais volte quando decidir", cid)
    elseif (msgcontains(msg, voc.nome_da_vocation2) and talkState[talkUser] == 1) then
        talkState[talkUser] = 3
         selfSay("tem certeza que voce quer ser ["..voc.nome_da_vocation2.."] ? [yes] ou [no]", cid)
    elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 3) then
        v2_check (cid,talkUser,numero_s)
        talkState[talkUser] = 0
    elseif (msgcontains(msg, 'no') and talkState[talkUser] == 3) then
        talkState[talkUser] = 0
        selfSay("ate mais volte quando decidir", cid)
    end
end

function check (cid,talkUser)
    if voc then
        if getPlayerLevel(cid) >= voc.lvl then
		talkState[talkUser] = 1
		selfSay('Posso lhe conceder a promocao [ '..voc.nome_da_vocation..' ] OU ['..voc.nome_da_vocation2..'] ao atingir level 35', cid)
        else
            selfSay('volta aqui quando pegar level '..voc.lvl..'', cid)
			talkState[talkUser] = 0
        end
    else
        selfSay(fala_do_npc, cid)
		talkState[talkUser] = 0
        return true
    end
end

function v1_check (cid,talkUser)
    if(doPlayerRemoveMoney(cid, (preco*100)) == true)  then
        doPlayerSetVocation(cid, voc.id_da_vocation)
        selfSay("parabens agora voce e "..voc.nome_da_vocation.."", cid)
        talkState[talkUser] = 0
    else
        selfSay('volta aqui quando tiver dinheiro, o xerox da papelada custa '..preco..' moedas de platinum', cid)
        talkState[talkUser] = 0
    end
    return true
end

function v2_check (cid,talkUser)
    if(doPlayerRemoveMoney(cid, (preco*100)) == true) then
        doPlayerSetVocation(cid, voc.id_da_vocation2)
        selfSay("parabens agora voce e "..voc.nome_da_vocation2.."", cid)
        talkState[talkUser] = 0
    else
        selfSay('volta aqui quando tiver dinheiro, o xerox da papelada custa '..preco..' moedas de platinum', cid)
        talkState[talkUser] = 0
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

 

Link para o post
Compartilhar em outros sites
  • Solução

Bom resolvido, ao invés de usar o NPC, eu transformei as vocações que antes eram promotion em vocações normais e coloquei para o player passar pelo oracle mesmo.

 

Ex: vocation id = 5 / fromvoc = 5

 

Resolvido, na gambiarra mas resolvido.

Link para o post
Compartilhar em outros sites
  • 3 months later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo