Ir para conteúdo
  • Cadastre-se

(Resolvido)Promotion com 2 opções


Ir para solução Resolvido por MatCollier,

Posts Recomendados

tfs 0.4

 

Salve pessoal, eu estava procurando um script que tivesse mais opções de promotion, ja que meu server, o player pode se especializar. Eu achei um script assim, que quando voce fala com o npc, voce escolhe uma promotion e vira ela, até ai tudo certo, o problema é quando o player loga, pois ai reseta a vocação e ele volta a ser o que ele era antes.

Aqui esta o Script:

 


 

Spoiler

 

-- config by uotl£
config = {[2] = { -- [coloca vocation que tem que ser antes de escolher]
lvl = 20, -- level tem que ser maior que 50
id_da_vocation = 22,nome_da_vocation = "Elder Druid", -- id da primeira vocation que pode compra e o nome dela
id_da_vocation2 = 25,nome_da_vocation2 = "Elemental"} -- id da segunda vocation que pode compra e o nome dela
}
local fala_do_npc = "Voce ja deve ter escolhido." -- fala do npc se já tiver comprado e se não for vocation certa
local preco = 200 -- preço por platinum  100 que é 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 você quer ser [ "..voc.nome_da_vocation.." ] por "..preco.." crystal coin?", 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 você quer ser ["..voc.nome_da_vocation2.."] por "..preco.." moedas de platinum?", 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('Pois entao Druida, o que sera? [ '..voc.nome_da_vocation..' ] OU ['..voc.nome_da_vocation2..'] por '..preco..' moedas de platinum', 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 você é "..voc.nome_da_vocation.."", cid)
        talkState[talkUser] = 0
    else
        selfSay('volta aqui quando tiver dinheiro '..preco..' moedas de platinum', cid)
        talkState[talkUser] = 0
    end
    return true
end

function v2_check (cid,talkUser)
    if(doPlayerRemoveMoney(cid, (preco*100)) == true) then
      doPlayerAddOutfit(cid, getPlayerSex(cid) == 1 and 20 or 20, 0)
        doPlayerSetVocation(cid, voc.id_da_vocation2)
        selfSay("parabens agora você é "..voc.nome_da_vocation2.."", cid)
        talkState[talkUser] = 0
    else
        selfSay('volta aqui quando tiver dinheiro '..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

Qual o tfs que tu usa?

 

Eu tenho um sistema parecido no meu ot, TFS 1.2, posso compartilhar, mas funciona da seguinte forma:

 

O player é, digamos, "mage" (o sorcerer do meu ot). No level 35 ele pode promover pra "Master Sorcerer" ou pra "Wizard". Mas são 2 npcs diferentes. Se ele promover com um npc é pra master sorcerer, com o outro é pra wizard. Serve pra tu?

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

Posso passar o script, mas não sei como funciona a conversão infelizmente.

 

Spoiler

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 tabela = {1} -- aqui eu coloco a vocação inicial do player, no caso 1 é a minha vocação mage
local c = 0

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, 'promotion') or msgcontains(msg, 'promote') or msgcontains(msg, 'promover'))  then
        for x=1,#tabela do
            if getPlayerVocation(cid) == tabela[x] then
                if getPlayerLevel(cid) >= 35 then
                    if (getPlayerVocation(cid) == 1) then
                        npcHandler:say('Voce quer ser promovido para Master Sorcerer por 10.000gp?', cid)
                        talkState[talkUser] = 1
                        
                    elseif (getPlayerVocation(cid) == 5) then -- aqui no lugar do 5 tu coloca a vocação pra a qual ele será promovido
                        npcHandler:say('Voce ja esta na ultima promocao', cid)
                    else
                        npcHandler:say('Você não tem level suficiente para se promover.', cid)
                    end
                else
                    npcHandler:say('Me desculpe, mas eu só posso promover quando estiver level 35.', cid)
                end
                c = 1
                break
            end
        end
        if c == 0 then
            npcHandler:say("Voce tem que ser um Mage para ser promovido aqui.", cid)
        end
        
    elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
        if(getPlayerVocation(cid) == 1) then
            if(not doPlayerRemoveMoney(cid, 10000)) then
                npcHandler:say('Desculpe, mas voce nao tem dinheiro suficiente.', cid)
            else
                doPlayerSetVocation(cid, 5) -- aqui no lugar do 5 tu coloca a vocação pra a qual ele será promovido
                npcHandler:say('Voce foi promovido!', cid)
            end
            talkState[talkUser] = 0
            
        end
    
    elseif(msgcontains(msg, 'no')) then
        npcHandler:say('Ate mais, volte quando estiver preparado.', cid)
        talkState[talkUser] = 0
        
    end

    return true
end

function msgcontains(message, keyword)
    if(type(keyword) == "table") then
        return table.isStrIn(keyword, message)
    end

    local a, b = message:lower():find(keyword:lower())
    if(a ~= nil and b ~= nil) then
        return true
    end

    return false
end

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

 

No caso é só tu mudar o 5 pelo id da vocação que tu quer.

 

Aí pode fazer um script de npc desses pra cada promoção diferente (que foi o que eu fiz) ou tentar juntar eles em um só, o que é possível, acho eu.

Editado por MatCollier (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Das duas uma, ou tua vocations não tá sendo salva na database, ou tu tem um script onLogin que retorna a vocations do char pra a anterior. Eu acho que é a primeira opção, mas sou péssimo com essa história de dbQuery, update em database e tal. Posso tentar te ajudar quando eu chegar procurando onde fica o meu script que salva isso pra ver se conseguimos replicar ele pra vc, só que com tuas colunas e tabelas. 

 

Lembrando que tb n sou mt bom com isso, então posso estar errado. Mas n custa tentar acho, ja q n apareceu ngm mais experiente.

Link para o post
Compartilhar em outros sites

Cara, não achei de jeito nenhum onde dos scripts ele faz o update das vocations na database. Só pra confirmar, tu já criou a nova vocação no vocations.xml né?

 

Precisa dela lá configurada certinho (com uma vocation id diferente das demais) pra dar certo. Caso tu não tenha certeza de como ficou a configuração lá, tem uns tutoriais na net, posso encontrar um e te mandar.

 

Mas se tu ajeitou lá certinho, eu acho mesmo que deve estar faltando fazer o update na database da nova vocação (e não sei onde isso é feito, procurei muito aqui).

Link para o post
Compartilhar em outros sites

@MatCollier É mano, eu fiz tudo certin a voc nova. Eu vo tenta achar

 

Edit: Eu procurei em outro forum e tava falando que precisava colocar o fromvoc no vocations.xml para o mesmo da vocação nova, e não da "vocação passada".

Então se alguem tiver esse erro de a vocation não salvar, se sua nova vocation é id 20, por exemplo, coloca o fromvoc="20" tbm

Editado por Zazeros
Achei a solução (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo