Postado Setembro 4, 2019 5 anos 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: Mostrar conteúdo oculto -- 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())
Postado Setembro 4, 2019 5 anos 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?
Postado Setembro 4, 2019 5 anos Autor @MatCollier Cara, serviria sim, mas meu TFS é 0.4 Voce sabe as coisas pra converter? Pode me passar o script fazendo o favor?
Postado Setembro 4, 2019 5 anos Solução Posso passar o script, mas não sei como funciona a conversão infelizmente. Mostrar conteúdo oculto 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 Setembro 4, 2019 5 anos por MatCollier (veja o histórico de edições)
Postado Setembro 4, 2019 5 anos Autor @MatCollier Cara, até que funcionou sem fazer uma adaptação, o problema é que continua com o mesmo erro. Quando o player desloga, ele volta para a vocação anterior
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.