Ir para conteúdo

lucasprimolemos

Membro
  • Registro em

  • Última visita

Tudo que lucasprimolemos postou

  1. 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())
  2. Estou usando uma base forgettenserver cru, compilei em TFS 1.3 versão 10.98
  3. Opa! fiz o teste e deu um errinho, creio que referente ao Focus e Distance do personagem e NPC, vc deve entender melhor, veja
  4. Entendo...Obrigado de qualquer maneira!!! Bom fico no aguardo de uma boa alma que possa ajudar rsrs
  5. Olá, venho por meio desta Recrutar uma pessoa com conhecimentos e habilidades gerais relacionadas a OTServer para me ajudar com um Projeto de Open Tibia Server inovador. É fugir dos padrões dentro do padrão tibia, mais focado em inovações de sistemas e histórias. Necessário ter noções gerais de site, segurança e scripting assim como eu, Porém se tiver bastante conhecimento para edições e criações de sistemas baseado em áreas, efeitos, etc. Melhor ainda. Meu contato: (11) 97380 8399 entrar em contato comigo falando seus conhecimentos e experiência já adquirida
  6. A sim perdão @RobotTurto, então, eu verifiquei inclusive fico mexendo nele para testar os NPC's Quando eu coloco voc 4 e ele vira kina, falo com o npc King Warrior e consigo me promover para berserk ou guardian, mas quando coloco voc 3 de pally e falo com NPC King Archer ou voc 2 de mage e falo com NPC King Wizard não da certo, ele manda a msg "desculpe mas vc está falando com a pessoa errada" que é o ELSEIF quando ele não compreende a voc, ou a voc não é correspondente com a definida no arquivo lua
  7. Os samples estão normais padrão, só modifiquei o sorc para vocation 2 e druid tb voc 2, o sorc em si fica inútil então nao interfere...seria mais para cadastro do site. Eu to testando direto no admin, eu modifico apenas o player admin que estou usando, então creio que não tenha a ver com o BD nesse primeiro momento
  8. Olá a todos. É o seguinte, estou abrindo um ot 10.98 ok TFS 1.3. A situação é essa, eu tirei a vocação Sorc e coloquei a do druid como Mage. O mage pode ter 2 promos, o knight 2 promos e o pally 2 promos. Segue o vocations.xml <?xml version="1.0" encoding="UTF-8"?> <vocations> <vocation id="0" clientid="0" name="None" description="none" gaincap="10" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="1" manamultiplier="4.0" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="0"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="2.0" /> <skill id="2" multiplier="2.0" /> <skill id="3" multiplier="2.0" /> <skill id="4" multiplier="2.0" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="2" name="Mage" clientid="4" description="a mage" gaincap="10" gainhp="5" gainmana="30" gainhpticks="6" gainhpamount="5" gainmanaticks="3" gainmanaamount="5" manamultiplier="1.1" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="1.8" /> <skill id="2" multiplier="1.8" /> <skill id="3" multiplier="1.8" /> <skill id="4" multiplier="1.8" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="3" clientid="2" name="Paladin" description="a paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="4" gainhpamount="5" gainmanaticks="4" gainmanaamount="5" manamultiplier="1.4" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.2" /> <skill id="1" multiplier="1.2" /> <skill id="2" multiplier="1.2" /> <skill id="3" multiplier="1.2" /> <skill id="4" multiplier="1.1" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="4" clientid="1" name="Knight" description="a knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="3" gainhpamount="5" gainmanaticks="6" gainmanaamount="5" manamultiplier="3.0" attackspeed="2000" basespeed="220" soulmax="100" gainsoulticks="120" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.1" /> <skill id="1" multiplier="1.1" /> <skill id="2" multiplier="1.1" /> <skill id="3" multiplier="1.1" /> <skill id="4" multiplier="1.4" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="5" clientid="4" name="Master Wizard" description="a master wizard" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="10" gainmanaticks="2" gainmanaamount="10" manamultiplier="1.1" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="2.0" /> <skill id="2" multiplier="2.0" /> <skill id="3" multiplier="2.0" /> <skill id="4" multiplier="2.0" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="6" clientid="4" name="Elder Wizard" description="an elder druid" gaincap="10" gainhp="5" gainmana="30" gainhpticks="4" gainhpamount="10" gainmanaticks="2" gainmanaamount="10" manamultiplier="1.1" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="2"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.5" /> <skill id="1" multiplier="1.8" /> <skill id="2" multiplier="1.8" /> <skill id="3" multiplier="1.8" /> <skill id="4" multiplier="1.8" /> <skill id="5" multiplier="1.5" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="7" clientid="2" name="Swift Paladin" description="a swift paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="3" gainhpamount="10" gainmanaticks="3" gainmanaamount="10" manamultiplier="1.4" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.2" /> <skill id="1" multiplier="1.2" /> <skill id="2" multiplier="1.2" /> <skill id="3" multiplier="1.2" /> <skill id="4" multiplier="1.1" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="8" clientid="1" name="Guardian Knight" description="an guardian knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="2" gainhpamount="10" gainmanaticks="4" gainmanaamount="10" manamultiplier="3.0" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.1" /> <skill id="1" multiplier="1.1" /> <skill id="2" multiplier="1.1" /> <skill id="3" multiplier="1.1" /> <skill id="4" multiplier="1.4" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="9" clientid="2" name="Heavy Paladin" description="a heavy paladin" gaincap="20" gainhp="10" gainmana="15" gainhpticks="3" gainhpamount="10" gainmanaticks="3" gainmanaamount="10" manamultiplier="1.4" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="3"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.2" /> <skill id="1" multiplier="1.2" /> <skill id="2" multiplier="1.2" /> <skill id="3" multiplier="1.2" /> <skill id="4" multiplier="1.1" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> <vocation id="10" clientid="1" name="Berserk Knight" description="an berserk knight" gaincap="25" gainhp="15" gainmana="5" gainhpticks="2" gainhpamount="10" gainmanaticks="4" gainmanaamount="10" manamultiplier="3.0" attackspeed="2000" basespeed="220" soulmax="200" gainsoulticks="15" fromvoc="4"> <formula meleeDamage="1.0" distDamage="1.0" defense="1.0" armor="1.0" /> <skill id="0" multiplier="1.1" /> <skill id="1" multiplier="1.1" /> <skill id="2" multiplier="1.1" /> <skill id="3" multiplier="1.1" /> <skill id="4" multiplier="1.4" /> <skill id="5" multiplier="1.1" /> <skill id="6" multiplier="1.1" /> </vocation> </vocations> Certo. Ai para cada vocação (Mage, Knight e Paladin) criei um NPC, no qual apenas funcionou para o Knight ter as 2 promos King warrior.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="King Warrior" script="promotionKina.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100" /> <look type="133" head="20" body="39" legs="45" feet="7" addons="0" /> <parameters> <parameter key="module_travel" value="1"/> <parameter key="message_greet" value="Olá |PLAYERNAME|. Eu Vendo Promotions Quer comprar alguma {promotion} ?" /> </parameters> </npc> promotionKina.lua -- config by uotl£ config = {[4] = { -- [coloca vocation que tem que ser antes de escolher] lvl = 35, -- level tem que ser maior que 50 id_da_vocation = 8,nome_da_vocation = "Guardian Knight", -- id da primeira vocation que pode compra e o nome dela id_da_vocation2 = 10,nome_da_vocation2 = "Berserk Knight"} -- id da segunda vocation que pode compra e o nome dela } local fala_do_npc = "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 = 0 -- 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 '..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 '..preco..' moedas de platinum', cid) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Já testei e está funcionando. Tive que tirar do login.lua uma parte do script de promotion para funcionar. login.lua function onLogin(player) local loginStr = "Welcome to " .. configManager.getString(configKeys.SERVER_NAME) .. "!" if player:getLastLoginSaved() <= 0 then loginStr = loginStr .. " Please choose your outfit." player:sendOutfitWindow() else if loginStr ~= "" then player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr) end loginStr = string.format("Your last visit was on %s.", os.date("%a %b %d %X %Y", player:getLastLoginSaved())) end player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr) -- Stamina nextUseStaminaTime[player.uid] = 0 -- Promotion local vocation = player:getVocation() --local promotion = vocation:getPromotion() --if player:isPremium() then -- local value = player:getStorageValue(STORAGEVALUE_PROMOTION) -- if not promotion and value ~= 1 then -- player:setStorageValue(STORAGEVALUE_PROMOTION, 1) -- elseif value == 1 then -- player:setVocation(promotion) -- end --elseif not promotion then -- player:setVocation(vocation:getDemotion()) --end --> -- Events player:registerEvent("PlayerDeath") player:registerEvent("DropLoot") return true end Porém com ou sem essa alteração no login.lua O NPC para promoções de pally e mage não estão reconhecendo a vocação do personagem... quero dizer, eles falam a parte do script como se não fosse a voc correta. Segue NPC King Wizard.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="King Wizard" script="promotionMage.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100" /> <look type="133" head="20" body="39" legs="45" feet="7" addons="0" /> <parameters> <parameter key="module_travel" value="1"/> <parameter key="message_greet" value="Olá |PLAYERNAME|. Eu Vendo Promotions Quer comprar alguma {promotion} ?" /> </parameters> </npc> promotionMage.lua -- config by uotl£ config = {[2] = { -- [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 = "Elder Wizard"} -- id da segunda vocation que pode compra e o nome dela } local fala_do_npc = "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 = 0 -- 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 '..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 '..preco..' moedas de platinum', cid) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) NPC King Archer.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="King Archer" script="promotionPally.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100" /> <look type="133" head="20" body="39" legs="45" feet="7" addons="0" /> <parameters> <parameter key="module_travel" value="1"/> <parameter key="message_greet" value="Olá |PLAYERNAME|. Eu Vendo Promotions Quer comprar alguma {promotion} ?" /> </parameters> </npc> promotionPally.lua -- config by uotl£ config = {[3] = { -- [coloca vocation que tem que ser antes de escolher] lvl = 35, -- level tem que ser maior que 50 id_da_vocation = 7,nome_da_vocation = "Swift Paladin", -- id da primeira vocation que pode compra e o nome dela id_da_vocation2 = 9,nome_da_vocation2 = "Heavy Paladin"} -- id da segunda vocation que pode compra e o nome dela } local fala_do_npc = "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 = 0 -- 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 '..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 '..preco..' moedas de platinum', cid) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Obrigado desde já! é de grande importância arrumar isso, não sei pq o Knight consegue promover para Berserk ou Guardian mas quando falo sendo Mage no NPC King Mage ou Paladin no NPC King Archer aparece a frase do script "Desculpe, mas voce esta falando com a pessoa errada." Segue uma imagem que da na distro quando sou Mage Voc 2 e tento comprar promotion
  9. Verifica se o seu GOD ta com acess maior que 4. Tenta o código do @rogaforyn2 quem sabe da certo
  10. Opa Amigo! Beleza, Bom vamos lá, uma coisa que me ajudou muito e ajudou alguns amigos foi seguir os passos desse site. Port Forward (Open Routers) Nesse site, você procura primeiramente qual o nome do seu Modem (Exemplo: TP LINK) e clica lá. Ai vai aparecer uma página, dentro do seu MODEM com todos os modelos, e você procura exatamente o modelo do seu modem, e clica nele. Lá vai explicar exatamente como deve ser feito ok. (Da pra vc clicar com botão direito na página para traduzir caso nao entenda inglês) No caso você tem que liberar a porta de entrada 7171/7172 (alguns abrem a 3336 também) É bem tranquilo, é só ver com calma e associar, lá vai estar já algumas portas, é só fazer para as que citei em negrito acima. Boa sorte!
  11. Olá @Leomonti não sei qual a versão do seu ot, mas o meu funcional 8.60 TFS 0.4 ta assim No Talkaction.xml <talkaction log="yes" words="/kick" access="4" event="script" value="kick.lua"/> E no script function onSay(cid, words, param, channel) local pid = 0 if(param == '') then pid = getCreatureTarget(cid) if(pid == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return TRUE end else pid = getPlayerByNameWildcard(param) end if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.") return TRUE end if(isPlayer(pid) and getPlayerAccess(pid) >= getPlayerAccess(cid)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You cannot kick this player.") return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(pid) .. " has been kicked.") doRemoveCreature(pid) return TRUE end Ai no game é só dar /kick NOME Veja se funciona! Mas faça um backup antes! abraço
  12. Opa @Messe! como o @KotZlety falou já tem no fórum, mas como estou de bobeira vou te explicar. PASSO 1 Primeiro de tudo você copia e cola o arquivo Hellgorak.xml localizado na pasta Monters, e edita ele nas suas preferências... Salva o arquivo com o nome Hellgorak1. Ai depois na pasta monsters ainda você procura o arquivo monsters.xml e abre ele, e copia uma linha de monstro e cola Exemplo: No meu caso ele está na pasta monsters > Bosses... Você tem que por o caminho de onde está o seu Hellgorak (basta copiar a linha do seu hellgorak e mudar o nome do xml. No caso "Bosses/hellgorak1.xml" <monster name="Hellgorak" file="Bosses/hellgorak1.xml"/> ----------- PASSO 2 Vai na pasta creaturescript > scripts e cria um arquivo.lua com isso aqui dentro (coloque o nome que quiser, de preferencia por organização o nome do monstro que você criou. Ex: hellgorak1.lua) local tpId = 1387 local tps = { ["Hellgorak"] = {pos = {x=1929, y=1386, z=0}, toPos = {x=1969, y=1410, z=0}, time = 200}, } function removeTp(tp) local t = getTileItemById(tp.pos, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(tp.pos, CONST_ME_POFF) end end function onDeath(cid) local tp = tps[getCreatureName(cid)] if tp then doCreateTeleport(tpId, tp.toPos, tp.pos) doCreatureSay(cid, "O teleport foi criado, ele irá sumir em "..tp.time.." segundos.", TALKTYPE_ORANGE_1) addEvent(removeTp, tp.time*1000, tp) end return TRUE end O que você vai alterar disso? ["Hellgorak"] -> Aqui é o nome do monstro, no caso o que você editou {pos = {x=1929, y=1386, z=0}, -> Aqui é a posição onde seu portal vai aparecer depois que esse monstro morrer ok toPos = {x=1969, y=1410, z=0}, -> Aqui é onde o portal criado vai levar o player time = 200}, -> Aqui é o tempo que o portal vai ficar aberto, dependendo da versão do TFS muda o jeito, ai você vai testando. doCreatureSay(cid, "O teleport foi criado, ele irá sumir em "..tp.time.." segundos.", TALKTYPE_ORANGE_1) -> Aqui é a mensagem que irá aparecer Pronto, agora é só salvar esse arquivo. Depois disso, você abre o arquivo creaturescript.xml na pasta creaturescript e coloca isso <event type="death" name="hellgorak" event="script" value="hellgorak1.lua"/> Salvar e beleza! ------------------------- PASSO 3 Agora é a parte mais simples! Va na pasta monsters, onde você criou o arquivo Hellgorak1.xml e abra ele. Abaixo da linha: </immunities> Você coloca: <script> <event name="hellgorak1"/> </script> Salvar e beleza! E ai ele vai pegar aquele codigo que você criou em creaturescript e quando morrer vai acionar o portal. POR FIM Porém tem um detalhe de extrema importância. No Remeres Map Editor, você tem que importar o monstro Hellgorak1.xml (que é exatamente um hellgorak, porém é em outro arquivo para que apenas esse hellgorak crie o portal ao morrer, pois se você colocasse o código no hellgorak padrão, sempre que um hellgorak morre iria aparecer o portal) ->>> Ai é após importar ele, é só colocar ele onde você deseja!, salvar e pronto!!!! Qualquer dúvida fico a disposição.
  13. Olá @Vodkart que prazer poder falar aqui em sua publicação! A algum tempo venho me dedicando com OT e muitas vezes vi sua ajuda, dei os rep + haha Estou com o mesmo problema do @IceWar Quero resolver esse problema enquanto o server ainda está com poucos players, onde eu deveria focar? Os 2 estão matando demon vip e behemoth vip, seus corpos respectivos são de dead demon e dead behemoth... Obrigado desde já!
  14. Olá @Alexy Brocanello, estou na seguinte situação, tenho um OT que peguei do @thiagobji e fiz muitas edição ja faz mais de 1 mês. Porém recentemente eu descobri esse erro dos monstros não passarem em cima do corpo do monstro que foi morto, até que alguém passe por cima. A sugestão de membros foi trocar a distro, porém tentei mais de 10 distros 3777, 3884, inclusive tentei compilar e até outras, mas sem êxito. Também não tenho o TRUNK para compilar desse hollister, queria saber se existe alguma alternativa de resolver esse problema. Também postei no fórum mas está difícil achar uma real solução. Trocar distro não funcionou. (Deu MySql cannot connect database, arrumei no phpmyadmin, no conf.lua e outras distros davam não respondendo na hora que iniciava, enfim fiz todas tentativas...pelo acc manager a tfs 3777 funcionou, mas não é meu objetivo usar acc manager.) Teria como me ajudar, caso exista algum jeito de solucionar isso? Fico a disposição...
  15. Beleza Enzo Baixei aqui, só o Distro com os dll.... baixei tb o trunk, porém como ta muito editado por enquanto nao vou alterar nada, só a distro mesmo, te aviso se der certo! 1º tentativa deu errado, nao conectava mysql, ai coloquei sqlite e deu bug infinito de invalid position 2º tentativa tb deu errado... baixei pelo TibiaKing do administrador com foto do bob marley, mas não funcionou... 3º tentativa (eu mesmo to compilando os arquivos vamos ver no que da)... tb n funcionou @Enzo Caue Observação, meu ot é o LINK DO OT NO TK, porém fiz muitaaaas edições. Só existe essa solução será?
  16. Funcionou!!!!!!!!!!!!!!!! Muto obrigado!!!!!!
  17. OIá, já houve um tópico desses porém sem resolução TibiaKing Topic<< A situação é o seguinte, usando o seguinte exemplo: quando vc ta num lugar onde só tem 1sqm e mata o monstro, até que alguém passe por cima desse monstro, os monstros ao redor não vêem como espaço livre, e não avançam no Player. Exemplo2 Digamos que o GOD é player, ele matou 2 hydras ali e a outra hydra nao veio, porque é como se ainda existisse monstros ou alguma barreira. Porém quando o player passa por cima dos monstros mortos, ai novamente volta a funcionar. Alguém pode me ajudar?
  18. Criei um char coloquei lvl 200 ml 25 nada ainda, Bom, vou tentar alguns testes hoje a noite, qlqr coisa aviso... por enquanto nada... Eu nao ligaria de recriar, desde que funcionasse kkkkkk n sie pq ta assim, De qlqr forma mt mt mt Obrigado Enzo pela disposição!
  19. weapons ta assim <wand id="6534" level="200" mana="100" event="script" value="poseidon.lua"> <vocation id="1"/> <vocation id="5"/> <vocation id="2"/> <vocation id="6"/> </wand> o poseidon.lua local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, false) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGY) setCombatParam(combat, COMBAT_PARAM_EFFECT, 1) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -250, 0, -450) function onUseWeapon(cid, var) return doCombat(cid, combat, var) end q loucura né... tipo se eu nao usar o script, só colocar como vc falo ali shootType funciona, porém nao o efeito que quero.... foda
  20. Sim, a ideia é eu criar o monstro Poseidon boss e dele dropar o trident que da dano parecido com água... só que nao o bubbles, o energyball é o que mais combina, mas só consegui na Distance effect... Até consegi fazer ele ir em energyball e bater com o efeito /z que é aquelas ondas azuis, porém nao hita kkkkkkk Sim, a ideia é eu criar o monstro Poseidon boss e dele dropar o trident que da dano parecido com água... só que nao o bubbles, o energyball é o que mais combina, mas só consegui na Distance effect... Até consegi fazer ele ir em energyball e bater com o efeito /z 1 que é aquelas ondas azuis, porém nao hita kkkkkkk, só bate Olha como está
  21. Certo @Enzo Caue, primeiramente obrigado por estar ajudando. Isso foi a primeira coisa que fiz eu coloquei o efeito energyball, mas ai quando chegava no monstro aparecia o efeito holly.... Vou testar novamente colocar energyball no items e weapons...
  22. Opa enzo, quando eu inicio o server ta escrito TFS 0.4DEV Compiled GNU C++ v 4.4.0 É tfs 0.4 entao né?
  23. Olá pessoal! Criei uma nova Wand porém ela não ta hitando nada... Tentei diferentes códigos dentro da wand e nada. Segue os códigos Items.xml <item id="6534" article="an" name="Poseidon Trident"> <attribute key="weight" value="2900" /> <attribute key="weaponType" value="wand" /> <attribute key="range" value="6" /> </item> Weapons.xml <wand id="6534" level="200" mana="100" event="script" value="poseidon.lua"> <vocation id="1"/> <vocation id="5"/> <vocation id="2"/> <vocation id="6"/> </wand> poseidon.lua local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, false) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGY) setCombatParam(combat, COMBAT_PARAM_EFFECT, 1) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -250, 0, -450) function onUseWeapon(cid, var) return doCombat(cid, combat, var) end Movements.xml <movevent type="Equip" itemid="6534" slot="hand" event="function" value="onEquipItem"/> <vocation id="1"/> <vocation id="2"/> <vocation id="5"/> <vocation id="6"/> <movevent type="DeEquip" itemid="6534" slot="hand" event="function" value="onDeEquipItem"/> A única coisa que quero manter é os efeitos, e que ela hite de 350 a 550. Obrigado desde já!!!
  24. Poxa @Dwarfer, vc não cansa de emocionar as pessoas? kkkkkkkkk funcionou perfeitamente. Mehor impossível!
  25. Olá! Criei um item na qual ele teleporta para um local... Porém queria colocar um exaustion para ele não usar toda hora, alguém pode me ajudar? Código itemtp.lua function onUse(cid, item, frompos, item2, topos) if (isPlayerPzLocked(cid)) then return doPlayerSendCancel(cid, "Voce nao pode Teletransportar com PZ!") end local msg = "A magia foi feita." pos = {x=1803, y=1455, z=7} doTeleportThing(cid, pos) doPlayerSendTextMessage(cid,22, msg) return doRemoveItem(item.uid, 1) end obrigado desde já!

Informação Importante

Confirmação de Termo