Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 02/13/18 em todas áreas

  1. (Resolvido)[Pedido] Npc que para quest

    kelvyn93 e um outro reagiu a SoulSarti por uma resposta no tópico

    2 pontos
    @Kyllini segue o script do npc. Espero que esteja funcional! Abraços! 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 config = { destino = {x=1553, y=1825, z=4}, -- para onde o player vai ser teleportado storage = 1111, -- storage da quest. lembre-se de por o mesmo storage da quest que voce fez permitir = {1,2,3,4}, --id das vocações que podem ir money = 100000000 -- dinheiro (aqui está custando 100kk) } playerVocInfo = getVocationInfo(getPlayerVocation(cid)) if msgcontains(msg, 'quest') or msgcontains(msg, 'promotion') then if(getPlayerStorageValue(cid, config.storage) ~= 1) and (isInArray(config.permitir, playerVocInfo.id)) then npcHandler:say("Eu posso te levar para a Quest Promotion. Eu cobrarei 100kk para a sua morte chegar! Diga {sim} caso queira desafiar seu destino, ou {nao}, se voce for um covarde!", cid) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, config.storage) >= 1 then -- caso ja tenha a quest feita npcHandler:say("Desculpe voce ja fez a Quest Promotion. Nao posso permitir que voce pise naquelas terras novamente.", cid) return true elseif not isInArray(config.permitir, playerVocInfo.id) then -- caso nao tenha a vocação permitida npcHandler:say("Desculpe, nao posso permitir que players com a sua voca\çao pisem nessas terras.", cid) return true end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then if doPlayerRemoveMoney(cid, config.money) then npcHandler:say("HAHAHA Ja vou preparando o seu caixao, entao!", cid) doTeleportThing(cid, config.destino) talkState[talkUser] = 0 else npcHandler:say("HAHAHAH! Quer enfrentar desafios mas nao tem nem um centavo no bolso? Saia daqui, charlatao!", cid) talkState[talkUser] = 0 end elseif(msgcontains(msg, 'no') or msgcontains(msg, 'nao')) and talkState[talkUser] > 0 then npcHandler:say("La nao \é lugar para covardes, mesmo! HAHAH", cid) talkState[talkUser] = 0 end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  2. Olá pessoal, resolvi criar um sistema de recompensa parecido com o sistema do tibia global para a versão 8.60, mas tie que fazer varias "gambiarras" para ele funcionar nesta versão. Para quem não conhece: http://www.tibiawiki.com.br/wiki/Loot#Sistema_de_Recompensas Basicamente meu sistema funciona da seguinte forma: • você determina as criaturas que irão funcionar com esse sistema (normalmente bosses). • durante a batalha com a criatura o sistema conta pontos aos jogadores por ataque, bloqueio e suporte ("healar" quem esta na batalha). • quando a criatura é morta o sistema cria um "loot" de acordo com os pontos e envia-o ao depot do jogador em uma bag determinada nas configurações. Primeiramente vamos criar o arquivo das configurações gerais, crie uma pasta dentro do "data" com o nome de sistemas e dentro cria um arquivo rewardchest.lua: Depois em creaturescript crie dois arquivos: rewardchest_boss.lua: e rewardchest_pontos.lua: Lembrando que em todas as criaturas que forem adicionadas ao sistema além de coloca-las no rewarchest.lua você deve add isso no xml do monstro: <script> <event name="RewardChestDeath"/> <event name="RewardChestMonster"/> </script> E isso no creaturescript.xml: <!-- Sistema de recompensa criado por luanluciano93 --> <event type="login" name="RewardChestLogin" event="script" value="rewardchest_pontos.lua"/> <event type="statschange" name="RewardChestStats" event="script" value="rewardchest_pontos.lua"/> <event type="death" name="RewardChestDeath" event="script" value="rewardchest_boss.lua"/> <event type="statschange" name="RewardChestMonster" event="script" value="rewardchest_boss.lua"/> Basicamente é isso, qualquer dúvida postem aqui ... abraços! LINK DO SCRIPT NO GITHUB: https://github.com/luanluciano93/ESTUDOS/tree/master/LUA/REWARD_SYSTEM_860
  3. 1 ponto
    The Ruby Server - Base Pokémon Ao olhar as diversas bases que podem ser encontradas aqui no fórum e em outros locais da internet, pude ver que todas elas carecem de qualidade. Todas estas bases são feitas utilizando gambiarras para diversos sistemas funcionarem, e com isso vários problemas surgem, como de sistemas que não funcionam direito, e o mais importante, com um desempenho extremamente baixo, gerando apenas servidores instáveis. Com isso eu decidi que iria começar a desenvolver uma base para servidores relacionados a Pokémon, com dois objetivos. Um dos objetivos é ganhar mais conhecimento em cima da linguagem de programação C++, o outro objetivo é disponibilizar uma base completamente estável, funcional e de fácil configuração e desenvolvimento para servidores de Pokémon, para que mais ótimos trabalhos possam surgir. Este projeto também irá incluir um cliente próprio e estável, junto com um website. Também planejo criar uma espécie de Wiki para o servidor, cliente e website, com o objetivo de auxiliar quem for desenvolver em cima deste servidor, e também aqueles que pouco entendem do assunto relacionando a criação de escripts, Pokémon, spells e etc. Alguns poucos sistemas foram implementados no servidor por ora. Sistemas como o de catch e de goback serão implementados mais para frente, quando outros sistemas forem completamente implementados, como o sistema de configuração de Pokeballs, criação de Pokémons e sistema de shinys. Estou visando a qualidade do servidor como um todo, por isso algumas coisas irão demorar para aparecer. O sistema de Pokeballs e de criação de Pokémon já está bem encaminhado, e um sistema de gêneros também já está pronto com fácil configuração, onde o spawn destes Pokémon com sexo será por % igual aos jogos da franquia. Um sistema de surgimento de Ditto aleatório já está praticamente implementado, onde um Pokémon aleatório pode ser um Ditto disfarçado. [+] Informações do Servidor Baseado em: TFS 1.3 Protocolo: 10.98 [+] Informações do Client Baseado em: otclient 0.6.6 [+] Informações do Website Baseado em: nenhum Desenvolvido em: PHP (por ser o mais comum na comunidade) Como contribuir? Eu gostaria muito que a comunidade ajudasse no desenvolvimento deste projeto, pois o mesmo será disponibilizado para todos, e para contribuir não necessariamente é preciso entender de programação. Você pode também ajudar testando e reportando os bugs encontrados no repositório do projeto no GitHub, assim como com sugestões e ideias de mudança/implementação no servidor através do próprio repositório ou através do Discord, ou ajudar na criação de guias para o website do projeto. Links [+] RubyServer - GitHub https://github.com/rubyserver/rubyserver [+] RubyClient - GitHub https://github.com/rubyserver/rubyclient [+] RubyServer - Website https://rubyserver.github.io/rubyserver/ [+] RubyServer - Discord https://discord.gg/XTrZGpy Algumas Imagens
  4. (3º) | [8.60] - Epic Server

    luiz.marsilio reagiu a jNo por uma resposta no tópico

    1 ponto
    TKs, Olá, hoje eu trago esse OTServer com o objetivo de mudar a perspectiva dos usuários e OT-Admins em relação aos baiaks, bom, tentar mudar... enfim, esse servidor foi basicamente construído do “0”, diferente dos demais OTServer disponibilizados no fórum que são versões, e mais versões modificadas da base do Yurots (GOD BON), não que seja uma crítica, afinal, eu mesmo já fiz isso 2x, mas, tudo nessa vida precisa mudar ou para pior, ou para melhor, certo? Nesse server eu tentei desenvolver algumas mudanças drásticas, mas sem perder muito a essência de um Baiak padrão, é claro, que em relação a cidade principal algumas coisas ficaram diferente, mas a jogabilidade, hunts, sistemas e quests (bem elaborados por sinal), ficaram bem shows. O Epic Server foi construído e auxiliado com algumas partes de mapping e scripts de contribuintes do fórum, portanto o crédito não e só meu quando se olha esse aspecto, é de todo o fórum. Todos os sistemas e partes que compõe o server são atualizados, até a maioria dos scripts, e a datapack fornecida pelo grande @Fir3element Por conta da faculdade estar me tomando muito tempo e o meu desempenho não tem sido muito bom, deixei alguns itens sem solução, mas estarei fazendo as atualizações assim que possível (no momento o server esta 99/100%), então por enquanto descreverei abaixo alguns avisos. ALGUNS AVISOS: 1 – O server foi produzido para SQL, dentro da pasta Others contém uma database já com as querrys instalada, e também a lista das mesmas, se quiser por em MYSQL, vai ter que achar uma database que funcione com um site, e inserir essas querrys que consta na pasta "querrys sql" e converter em mysql (algumas ja foram convertidas, e no próprio arquivo do ot tem um link que redireciona para uma database mysql+site). 2 – Sobre as Houses, eu não criei elas no RME, por motivos óbvios, vai facilitar que membros que tenham interesse em fazer algumas mudanças estéticas no mapa as façam facilmente. (Você vai perder no máximo 30 mins criando no mapa, só lembre de cria-las usando a town principal "epic city"). 3 – O Evento Six e Chest Bps estão incompletos por enquanto, ainda estou aguardando um auxílio do portal para finalizar, e quando isso acontecer eu vou atualizando o tópico aqui com esses eventos finalizados, mas você pode facilmente inserir outros no lugar. 4 – A senha do admin é tibiaking/juliano 5 – O server possui o bug do elfbot, o bug do fast attack, eu inseri nas sources os códigos que corrigem esse bug, porém eu não estava conseguindo recompilar o projeto, se você souber, facilmente corrigira esse bug. (Não que seja um problema, mas, é mais interessante você deixar um fast attack editável pelo ot e não por um bug de compilação) E o @fir3element quando voltar a ativa vai corrigir isso no tópico. 6.1 - Também possui o bug do openchat, ja modifiquei nas sources também, e no server ja tem os arquivos e codigos instalados, basta mesmo compilar novamente. http://www.tibiaking.com/forum/forums/topic/67233-860-the-forgotten-server-04-sqlite-e-mysql/ 7 – Eu não sou scripter, então vai ficar difícil eu resolver algumas dúvidas relacionadas, eu sei o básico, mas posso tentar auxiliar, basta postar a foto com o erro, ou criar um tópico na seção de suporte que é o mais indicado. 8 - Recomendo deixar o server com os avisos em english, até os comandos etc... pois pelo que andei observando, bastantes grigos tem jogado os servers BR. 9 - O Server ja possui um sistema de points donate, bastar usar o comando /addpoints Fulano, 15 (Caso insira site, não sei, acho que não tera conflito com esse sistema, só lembre de converter as querys sql para mysql necessárias do script) 10 - O Baiak foi desenvolvido para um padrão, low>middle>high, mas nada exagerado, podendo alcançar em média, level 1200 no max. Você pode editar isso também, como as experiências das criaturas são padronizadas, basta diminuir a exp stage no config.lua, ou, no arquivo xml você muda e coloca uns stages melhores. Qualquer bug demais não citados, ou critica/sugestões, comente aqui no tópico! Obrigado aos usuários @Dwarfer, @Vodkart, @MaXwEllDeN, @Sekk, @pablobion, @JcA, @KotZletY, @DboExplorer, @rogaforyn2 @joadson e a toda comunidade! É nós, sem mais delongas:
  5. Descrição Há MUITAS pessoas com esse tipo de dúvida sobre como abrir servidor atualmente, andei fuçando até que achei esse video e resolvi compartilhar com vocês. O tutorial é longo, possui mais de uma hora mas é completamente explicativo. No tutorial é utilizado a versão 10.8x, mas lembrando que serve para todas as versões atuais. Os downloads se encontram ao final do tópico! Agradecimentos à @hpjp, conteúdo feito totalmente por ele! Compatibilidade Windows e Linux. Video Aula Comandos uteis/necessários Downloads Máquina Virtual: http://www.oracle.com/technetwork/pt/server-storage/virtualbox/downloads/index.html xUbuntu Torrent: http://torrent.ubuntu.com/xubuntu/releases/trusty/release/desktop/xubuntu-14.04.3-desktop-amd64.iso.torrent Arquivo Install PHP: http://www.4shared.com/file/UH9Mtrd-ce/install.html Database (senha admin/admin e players 1/1): http://www.4shared.com/document/7mkM6cZxba/global.html Servidor: http://www.mediafire.com/download/f7jacdzac7w5a4w/server.rar Sources com cast system: http://www.mediafire.com/download/bt2b2kj6eblfz2j/sources.rar Website compativel: http://www.mediafire.com/download/ssmgo9ko8j354so/www.zip Database: http://www.mediafire.com/download/vn0gbf75qgbi5ge/global-8.sql
  6. EVENTO ILHAS TEMATICAS + PHP + MAPA

    Maniaco reagiu a Apache por uma resposta no tópico

    1 ponto
    Olá pessoal como falei irei postar alguns eventos sem bugs para vocês e GRÁTIS! Estarei também postando uma source OTX paga para vocês. Chega de enrolar vamos ao evento (Particularmente gosto muito desse) **SÓ CONFIGUREM NO MAPA DO EVENTO O LOCAL DE SAÍDA DAS ILHAS** **EVENTO NÃO É DE MINHA AUTORIA MAS COMO É MEU ESTOU POSTANDO** Vídeo mostrando como funciona o evento obs: link para o vídeo estava localizado dentro do script 5 bosses localizados nas ilhas temáticas Os jogadores deverão se unir para conseguir vencer todos os bosses das ilhas e atingir a última com o mais temido. Apenas os bravos guerreiros conseguem chegar ao final, como prêmio eles recebem a experiência dos bosses e loot. Vá em data/creaturescripts/scripts e crie um aquivo chamado IOE.lua e cole isso dentro agora na mesma pasta creaturescripts/scripts procure pela pasta login.lua e lá adicione o registro do evento após isso vá em data/creaturescripts abra o arquivo creaturescripts.xml e adicione a tag agora em data/globalevents/scripts crie um arquivo chamado IOE.lua e cole isso dentro em globalevents.xml adicione a tag agora na pasta LIB crie um arquivo chamado IOE.lua e cole isso dentro agora na pasta data/monsters crie uma pasta chamada IOE e dentro crie 5 arquivos .xml com os seguintes nomes (irei postar o nome do monstro e em seguida o script dele. island death.xml island earth.xml island energy.xml island fire.xml island ice.xml feito isso agora na pasta data/monsters procure por monster.xml vamos registras nossos novos monsters agora em data/movements/scripts crie um arquivo chamado IOE.lua e cole isso dentro agora em movements.xml adicione a tag pronto pessoal o evento já está registrado em seu servidor, agora vocês configurem a seu desejo na pasta data/LIB agora irei postar a query o php e o mapa SQL QUERY PARA REGISTRAR O EVENTO EM SUA DATABASE PAGINA PHP EM SEU SITE (LINDA) AGORA O MAPA (NÃO POSTAREI SCAN, QUEM QUISER BAIXAR É SÓ BAIXAR QUEM NÃO QUISER É SÓ CRIAR UM MAPA PARA SEU EVENTO!) É ISSO AE ESPERO QUE GOSTEM DEIXEM SEU REP+ QUEM PRECISAR DE AJUDA PARA INSTALAR É SÓ PEDIR!
  7. [System] Pontos "P" Points System

    NighteyeTV reagiu a AgaSsI por uma resposta no tópico

    1 ponto
    P Points System Nome do script : P Points system v1 Versão testada : TFS 0.4 (8.70 Funciona em versões anteriores) Creditos : LsM Como funciona : O sistema funciona como uma recompensa ao player por ficar online por um certo tempo. O player, ao ficar online por um certo intervalo de tempo programado no código, receberá uma quantidade de pontos "P" a qual também se pode alterar. O objetivo foi fazer com que os players se sintam incentivados a ficar online por um maior período de tempo para que recebam tais moedas. Essa é, definitivamente, uma forma fácil de se alcançar um número maior de players online, já que a ideia foi retirada de um MMORPG online de grande sucesso. Como utilizar : C omo o sistema tem como foco dar uma recompensa ao player, no caso pontos P , estes, podem ser utilizados no comercio, em npcs, ou até mesmo na entrada de locais. Sua sintaxe é muito maleável e se encaixa em quaquer requisito desejado. Instalação : Primeiramente, execute a seguinte QUERY em seu banco de dados : Código: ALTER TABLE `accounts` ADD `p_points` INTEGER NOT NULL DEFAULT 0 Em seguida, crie um arquivo com a extensão .lua chamado " points.lua " em " data/creaturescripts/scripts " e adicione o código abaixo : Código: --[[ P Points System by LsM. OTServ Brasil &#169; 2011 Version : v1.0 ]]-- function onLogin(cid) doCreatureSetStorage(cid, 1219, os.time()) return true end function onLogout(cid) doCreatureSetStorage(cid, 1219, 0) return true end Ainda em creaturescripts, abra o arquivo " creaturescripts.xml " e adicione a seguinte TAG : Código: <event type="login" name="PlayerAddPointsTimer" event="script" value="points.lua"/> <event type="logout" name="PlayerResetPointsTimer" event="script" value="points.lua"/> Agora, em " data/globalevents/script " crie um arquivo com a extensão .lua também chamado " points.lua " e cole o seguinte código : Código: --[[ P Points System by LsM. OTServ Brasil &#169; 2011 Version : v1.0 ]]-- local config = { p_time = 3600, -- Tempo em segundos para receber os pontos( 3600 = 1hora ) p_points = 1 -- Quantidade de pontos recebida a cada "p_time" }local function givePoints(cid, quant) if os.time() - getCreatureStorage(cid, 1219) >= config.p_time then doPlayerSendTextMessage(cid, 19, "Congratulations, you recieved ".. config.p_points .." p points. Now you have ".. config.p_points + getPoints(cid) .." p points in your account. Your timer was reseted.") doPlayerAddPoints(cid, quant) doCreatureSetStorage(cid, 1219, 0) doCreatureSetStorage(cid, 1219, os.time()) end return true end function onThink(interval) for i, v in pairs(getPlayersOnline()) do givePoints(v, config.p_points) end return true end E em " globalevents.xml " cole a seguinte TAG : Código: <globalevent name="points" interval="60" event="script" value="points.lua"/> Em seguida vá em " data/talkactions/scripts ", crie um arquivo com extensão .lua chamado " points.lua " e adicione o seguinte código : Código: function onSay(cid, words, param, channel) local getP = getPoints(cid) doPlayerPopupFYI(cid, "You have ".. getP .." P points.") return true end E em " talkactions.xml " adicione a TAG : Código: <talkaction words="!ppoints;/ppoints" event="script" value="points.lua"/> Para finalizar, vá em " data/lib/050-function.lua " e na última linha, adicione as funções abaixo : Código: function getPoints(cid) local res = db.getResult('select `p_points` from accounts where name = \''..getPlayerAccount(cid)..'\'') if(res:getID() == -1) then return false end local ret = res:getDataInt("p_points") res:free() return tonumber(ret) end function doPlayerAddPoints(cid, quant) return db.executeQuery("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) + quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'") end function doPlayerRemovePoints(cid, quant) return db.executeQuery("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) - quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'") end Fim, o sistema está instalado. Como configurar : A parte da configuração é a mais fácil, apenas edite : Código: [/size] [/font] local config = { p_time = 3600, -- Tempo em segundos para receber os pontos( 3600 = 1hora ) p_points = 1 -- Quantidade de pontos recebida a cada "p_time" } Quer utilizar o sistema em um npc, ou action, ou algum outro sistema e não sabe como? Simples, apenas use as seguintes funções : getPoints(cid) A função retorna a quantidade de pontos do player. doPlayerAddPoints(cid, quant) A função adiciona a quantidade(quant) de pontos ao player. doPlayerRemovePoints(cid, quant) A função remove a quantidade(quant) de pontos do player. Ilustração : Funcionamento do script Ilustração de !ppoints Creditos: LsM A í está galera, espero que gostem, e, para os preguiçosos, disponibilizei o download do sistema completo: http://www.4shared.c...nts_System.html
  8. (Resolvido)[Pedido] Npc que para quest

    kelvyn93 reagiu a Kyllini por uma resposta no tópico

    1 ponto
    Sim, é que esqueci de colocar que o ot é 8.60 kkk
  9. [PEDIDO] NPC Vocation 2

    Yamborghini reagiu a SoulSarti por uma resposta no tópico

    1 ponto
    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 x = {1,2} -- Ids das vocaçoes necessarias pra promote. para adicionar mais, basta por uma virgula dps do ultimo numero e adicionar a id da voc local sto = 4642 -- storage praq ele n faça a promotion novamente local lvl = 8 -- lvl ao resetar local lvlmin = 500 --lvl para resetar local health = 185 -- hp ao resetar local mana = 35 -- mana ao resetar local v = getVocationInfo(getPlayerVocation(cid)) if (msgcontains(msg, 'promotion')) then if getPlayerStorageValue(cid, sto) == -1 and getPlayerLevel(cid) >= lvlmin then if isInArray(x, getPlayerVocation(cid)) then local playerid = getPlayerGUID(cid) selfSay('Congratulations! You were promoted', cid) setPlayerStorageValue(cid, sto, 1) setPlayerPromotionLevel(cid, v.id + 4) -- aqui o sistema pega a vocação atual e adicona a proxima (v.id + 4). assim, basta adicionar a voc base na variavel x. setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) db.executeQuery("UPDATE `players` SET `level`="..lvl..",`experience`= 4200 WHERE `players`.`id`= ".. playerid .."") else selfSay('You do not have the required vocation', cid) end else selfSay('You have already been promoted or doesnt have the necessary experience', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) pronto só dar aquele rep, se possivel, pra mim e pro sttorm, por ter criado a base do script hahaha
  10. [PEDIDO] NPC Vocation 2

    Yamborghini reagiu a SoulSarti por uma resposta no tópico

    1 ponto
    voce pode fazer dessa forma: 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 x = {1,2} -- Ids das vocaçoes necessarias pra promote. para adicionar mais, basta por uma virgula dps do ultimo numero e adicionar a id da voc local sto = 4642 -- storage praq ele n faça a promotion novamente local lvl = 8 -- lvl ao resetar local health = 185 -- hp ao resetar local mana = 35 -- mana ao resetar local v = getVocationInfo(getPlayerVocation(cid)) if (msgcontains(msg, 'promotion')) then if getPlayerStorageValue(cid, sto) == -1 then if isInArray(x, getPlayerVocation(cid)) then local playerid = getPlayerGUID(cid) selfSay('Congratulations! You were promoted', cid) setPlayerStorageValue(cid, sto, 1) setPlayerPromotionLevel(cid, v.id + 4) -- aqui o sistema pega a vocação atual e adicona a proxima (v.id + 4). assim, basta adicionar a voc base na variavel x. setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) db.executeQuery("UPDATE `players` SET `level`="..lvl..",`experience`= 4200 WHERE `players`.`id`= ".. playerid .."") else selfSay('You do not have the required vocation', cid) end else selfSay('You have already been promoted', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) no outro codigo, nao havia a função para promover o jogador e seriam necessarios npcs diferentes pra cada voc. com esse, um unico npc pode promover qlqr personagem desde que a vocação dele seja guardada na variavel x.
  11. [PEDIDO] NPC Vocation 2

    Yamborghini reagiu a Storm por uma resposta no tópico

    1 ponto
    Criando um npc para cada promote.
  12. [PEDIDO] NPC Vocation 2

    Yamborghini reagiu a Storm por uma resposta no tópico

    1 ponto
    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 x = 2 -- Id da vocação necessaria pra promote local y = 3 -- Id da voc de promote local sto = 4642 -- storage praq ele n faça a promotion novamente local lvl = 8 -- lvl ao resetar local health = 185 -- hp ao resetar local mana = 35 -- mana ao resetar if (msgcontains(msg, 'promotion')) then if getPlayerStorageValue(cid, sto) == -1 then if getPlayerVocation(cid) == x then local playerid = getPlayerGUID(cid) selfSay('Congratulations! You were promoted', cid) setPlayerStorageValue(cid, sto, 1) setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) db.executeQuery("UPDATE `players` SET `level`="..lvl..",`experience`= 0 WHERE `players`.`id`= ".. playerid .."") else selfSay('You do not have the vocation', cid) end else selfSay('You have already been promoted', cid) end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  13. Como bloquear items para um certo ID item

    InsanityA reagiu a Crypter por uma resposta no tópico

    1 ponto
  14. 1 ponto
    Hehe marca la como melhor resposta e da aquele repzin maroto. Jaja vou trabalhar no script do npc. é rapido, mas eu to trabalhando nos meus projetos ao msm tempo, entao pode demorar um tiquin. mas sai ainda hoje hahaha
  15. 1 ponto
    UAHEUAHEUAHEUHA foi mal, eu corrigi o teleport mas eu usei uma versao antiga do script, onde eu n tinha modificado os items. onde tem o for i = 1, #config.items do doPlayerAddItem(cid, config.items[1], config.items[2]) end substitua por for i = 1, #config.items do doPlayerAddItem(cid, config.items[i][1], config.items[i][2]) end
  16. 1 ponto
    tenta assim (sono ta me atrapalhando.. aushausha) local config = { items = {{12714,1}}, -- aqui vc configura quais items vc quer dar de recompensa. caso for mais de 1, adicione uma virgula e ponha a id e qtd dentro de colchetes --{{2160,3},{2134,1}}, voc = {1}, -- aqui vc poe os ids das vocações que podem abrir o bau. caso sejam mais de 1, basta adicionar uma virgula dps do ultimo numero e por o outro. voc = {5,6}, storage = 5000, -- altere para o storage que você desejar gmessage = true, -- vai mandar mensagem global quando o jogar finalizar a quest? true = sim | false = nao unique = 1000, --uniqueid do bau. caso nao tenha, deixe 0, caso tenha, ponha o valor. teleport = {true, {x = 157, y = 51, z = 7}}, --vai teletransportar o jogar ao finalizar a quest? se sim, mude para true e dps da virgula mude o {} para a posição desejada, ex: --teleport = {true, {x = 2438, y = 2400, z = 9}} nome = "Hellraiser" -- aqui vc poe o nome da sua quest, se tiver. Na mensagem global, aparecerá da seguinte maneira: -- "O player (nomedochar) completou a quest Hellraiser!." Deixe em branco o nome para nao mostrar qual foi a quest feita (isso ainda vai gerar uma mensagem global!) } function onUse(cid, item, frompos, item2, topos) if item.uid == config.unique then if getPlayerStorageValue(cid, config.storage) ~= 1 and isInArray(config.voc, getPlayerVocation(cid)) then if config.gmessage and config.nome ~= "" then doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest ".. config.nome .. "!",MESSAGE_STATUS_WARNING) elseif config.gmessage and config.nome == "" then doBroadcastMessage("O player "..getCreatureName(cid).." completou uma quest!",MESSAGE_STATUS_WARNING) end setPlayerStorageValue(cid, config.storage, 1) for i = 1, #config.items do doPlayerAddItem(cid, config.items[1], config.items[2]) end if config.teleport[1] then tp = config.teleport[2] doTeleportThing(cid, tp) end elseif getPlayerStorageValue(cid, config.storage) == 1 then -- caso ja tenha feito a quest doPlayerSendCancel(cid, "Você já fez essa quest!") elseif not isInArray(config.voc, getPlayerVocation(cid)) then -- caso nao seja da vocação apropriada doPlayerSendCancel(cid, "Você não pode receber a recompensa porque não tem a vocação apropriada!") end end return true end
  17. 1 ponto
    vc n trocou o codigo, ou pelo menos n citou o correto: a alteração esta na funçao removeItem() -- item = id do item que vai ser criado na invasão -- time = tempo em segundos para o item em questao ser apagado -- para adicionar mais posições, basta copiar a posição e adicionar depois da ultima. -- lembrando de acrescentar a vírgula na penúltima e deixar a ultima sem, conforme está no modelo. local config = {monster = "fire soldier", item = 1487, time = 60, pos = { {x= 1012, y= 1034, z= 7}, {x= 1016, y= 1030, z= 7}, {x= 1016, y= 1038, z= 7}, {x= 1014, y= 1044, z= 7}, {x= 1012, y= 1047, z= 7}, {x= 1024, y= 1052, z= 7}, {x= 1028, y= 1056, z= 7}, {x= 1022, y= 1061, z= 7}, {x= 1028, y= 1065, z= 7}, {x= 1035, y= 1065, z= 7}, {x= 1040, y= 1058, z= 7}, {x= 1046, y= 1055, z= 7}, {x= 1052, y= 1056, z= 7}, {x= 1049, y= 1051, z= 7}, {x= 1058, y= 1059, z= 7}, {x= 1059, y= 1049, z= 7}, {x= 1059, y= 1044, z= 7}, {x= 1064, y= 1036, z= 7}, {x= 1056, y= 1031, z= 7}, {x= 1072, y= 1038, z= 7}, {x= 1079, y= 1039, z= 7}, {x= 1087, y= 1031, z= 7}, {x= 1092, y= 1038, z= 7}, {x= 1082, y= 1025, z= 7}, {x= 1086, y= 1014, z= 7}, {x= 1086, y= 1004, z= 7}, {x= 1097, y= 1002, z= 7}, {x= 1103, y= 998, z= 7}, {x= 1108, y= 994, z= 7}, {x= 1081, y= 996, z= 7}, {x= 1067, y= 993, z= 7}, {x= 1057, y= 995, z= 7}, {x= 1045, y= 996, z= 7}, {x= 1036, y= 1005, z= 7}, {x= 1034, y= 998, z= 7}, {x= 1021, y= 996, z= 7}, {x= 1015, y= 999, z= 7}, {x= 1008, y= 993, z= 7}, {x= 1008, y= 1009, z= 7}, {x= 1004, y= 1021, z= 7}, {x= 1005, y= 1045, z= 7}, {x= 1065, y= 1024, z= 7}, {x= 1053, y= 1015, z= 7}, {x= 1044, y= 1006, z= 7}, {x= 1048, y= 1024, z= 7}, {x= 1038, y= 1030, z= 7}, {x= 1044, y= 1043, z= 7} }} function removeItem() for k = 1, #config.pos do config.pos[k].stackpos = STACKPOS_TOP_FIELD local t = getThingFromPos(config.pos[k]) if t then doRemoveItem(t.uid, 1) end end end function onSay(cid, words, param) -- Monster for i = 1, #config.pos do doCreateItem(config.item, 1, config.pos[i]) doCreateMonster(config.monster, config.pos[i]) end addEvent(removeItem, config.time * 1000) return true end ponha esse codigo e me diga se o erro persiste.
  18. [TalkAction] Player Check System

    NighteyeTV reagiu a Bruno Carvalho por uma resposta no tópico

    1 ponto
    Versão: 4.0 Distro: 1.0+ Descrição: Existem muitos scripts que ajudam o administrador do servidor a cuidar dele, um deles é saber coisas sobre quem está jogando e se está sendo honesta. Eu peguei alguns scripts e estou juntando em um para diminuir o tamanho e ter uma fácil verificação. TAG: <talkaction log="yes" words="/p" separator=" " script="playercheck.lua" /> Script: Talkactions/scripts/playercheck.lua function getItemsInContainer(cont, sep) local text = "" local tsep = "" local count = "" for i=1, sep do tsep = tsep.."-" end tsep = tsep..">" for i=0, getContainerSize(cont.uid)-1 do local item = getContainerItem(cont.uid, i) if isContainer(item.uid) == FALSE then if item.type > 1 then count = " ("..item.type.."x)" end text = text.."\n"..tsep..getItemName(item.itemid)..""..count.." ("..item.itemid..")" else if getContainerSize(item.uid) > 0 then text = text.."\n"..tsep..getItemName(item.itemid).." ("..item.itemid..")" text = text..getItemsInContainer(item, sep+2).."" else text = text.."\n"..tsep..getItemName(item.itemid).." ("..item.itemid..")" end end end return text end function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return false end local slotName = {"Cabeça", "Amuleto", "Backpack", "Armor", "Mao Direita", "Mao Esquerda", "Legs", "Pés", "Ring", "Ammo Slot"} local t = param:split(', ') if(t[1] == 'check') then if getPlayerGroupId(cid) >= 2 then local p = Player(t[2]) if p then local text = p:getName().."'s Equipment: " for i=1, 10 do text = text.."\n\n" local item = getPlayerSlotItem(p:getName(), i) if item.itemid > 0 then count = '' if item.type > 1 then count = " ("..item.type.."x)" end if isContainer(item.uid) == TRUE then text = text..slotName[i]..": "..getItemName(item.itemid)..""..count.." ("..item.itemid..") "..getItemsInContainer(item, 1) else text = text..slotName[i]..": "..getItemName(item.itemid)..""..count.." ("..item.itemid..")" end else text = text..slotName[i]..": Empty" end end doShowTextDialog(cid, 6579, text) else doPlayerSendCancel(cid, "This player is not online or not exist.") end end elseif(t[1] == 'delete') then if getPlayerGroupId(cid) == 3 then local p = Player(t[2]) if p then count = t[4] if(not t[4]) then count = 1 end if getPlayerItemCount(p:getName(), t[3]) > 0 then if doPlayerRemoveItem(p:getId(), t[3], count) then doPlayerSendCancel(cid, "Deleted Item.") else doPlayerSendCancel(cid, "This player does not have this amount of item.") end else doPlayerSendCancel(cid, "This player does not have the item.") end else doPlayerSendCancel(cid, "This player is not online or not exist.") end end else if getPlayerGroupId(cid) == 3 then id = getItemIdByName(t[1]) if not id then doPlayerSendCancel(cid, "The "..t[1].." not exist. ") return false end local result = db.getResult("SELECT name FROM players WHERE id IN (SELECT player_id FROM player_items WHERE itemtype = ".. id ..");") local msg = "Search results by item ".. getItemName(id) .." in your database:\n\n" if result:getID() ~= -1 then while true do local name = result:getDataString("name") msg = msg .. name .."\n" if not result:next() then break end end else msg = msg .. "The item was not found in any player." end doShowTextDialog(cid, id, msg) end end return true end Explicação: Quando o god digita: /p check, (PNAME) - Ele verifica os items que o player tem. /p del, (ID), (PNAME), (COUNT) - Ele deleta o item de determinado player (Se não colocar o count ele irá remover somente 1). /p (ID) - Ele verifica quantos players tem tal item. Créditos: Oneshot CaioODemais Comedinha (Bruno Carvalho)
  19. Ao clicar em item ele realiza uma talkaction

    GM Kinagon reagiu a Wakon por uma resposta no tópico

    1 ponto
    Basta retirar a função doPlayerSendTextMessage: function onUse(cid, item) doCreatureExecuteTalkAction(cid, "/pos") return true end
  20. (Resolvido)Player passando dentro do outro

    KotZletY reagiu a Fir3element por uma resposta no tópico

    1 ponto
    player.cpp, função canWalkthrough: TFS 0.3.6: TFS 0.4:
  21. (Resolvido)[PEDIDO] Subir Mana Em PZ

    joaovitorbk9 reagiu a RenanPhellip por uma resposta no tópico

    1 ponto
    CONSEGUI PESSOAL! Hoje resolvi pensar numa forma da mana/life regenerar normalmente em protection zone. Então pensei que a solução estava na função manaGain/healthGain que é usado no items.xml. Dei uma fuçada nas sources e encontrei a função, localizada em condition.cpp Procure por esta função: bool ConditionRegeneration::executeCondition(Creature* creature, int32_t interval) Em seguida troque isso: bool ConditionRegeneration::executeCondition(Creature* creature, int32_t interval) { internalHealthTicks += interval; internalManaTicks += interval; if(creature->getZone() != ZONE_PROTECTION) { if(internalHealthTicks >= healthTicks) { internalHealthTicks = 0; creature->changeHealth(healthGain); } if(internalManaTicks >= manaTicks) { internalManaTicks = 0; creature->changeMana(manaGain); } } return ConditionGeneric::executeCondition(creature, interval); } Por isso: bool ConditionRegeneration::executeCondition(Creature* creature, int32_t interval) { internalHealthTicks += interval; internalManaTicks += interval; if(internalHealthTicks >= healthTicks) { internalHealthTicks = 0; creature->changeHealth(healthGain); } if(internalManaTicks >= manaTicks) { internalManaTicks = 0; creature->changeMana(manaGain); } return ConditionGeneric::executeCondition(creature, interval); } Em seguida é só compilar e já era, agora a mana e life irá regenerar em protection zone xd
  22. Manipulando arquivos através de LUA

    Lodus reagiu a Ryzor por uma resposta no tópico

    1 ponto
    Manipulando arquivos através de LUA Abrindo um arquivo Para começar, você terá que abrir o arquivo.Para isso, usamos a função io.open(arquivo[modo]), que também pode cria-lo caso não exista.Arquivo será o seu diretório,que caso não exista retornará nil, e modo são os seguintes: "r" - Modo de leitura. "rb" - Leitura em modo binário. "w" - Modo de escrita. "wb" - Escrita em modo binário. "a" - Adicionar ao arquivo. "r+" - Modo de atualização preservando os dados anteriores. "w+" - Modo de atualização apagando os dados anteriores. "a+" - Modo de adição e atualização, preservando os dados anteriores e adicionando ao final do arquivo. Por exemplo, quero abrir um arquivo que se chama Iuri.lua e está no disco rígido C:, uso: io.open("C://Iuri.lua") Caso o arquivo não exista, irá retornar nil. Escrevendo em arquivos Para fazer a escrita em um arquivo é muito simples, basta usar file:write(...), onde file é o arquivo que abrimos anteriormente.Em ... será colocada uma string que irá ser escrita conforme o modo de abertura do arquivo definido anteriormente. Ex.: local file = io.open("C://Iuri.lua") file:write('Este é um tutorial') file:close() Lendo arquivos Para fazermos a leitura do arquivo, usamos file:read(...).Se nenhum formato for especificado, ele usará o formato padrão("*l").Os outros formatos são: "*n" - Lê um número, este é o único formato que retorna um número ao invés de uma cadeia. "*a" - Irá ler o arquivo inteiro, iniciando da posição atual. number - Irá ler o arquivo até o número de caracteres definido. Ex.: local file = io.open("C://Iuri.lua") print(file:read()) file:close() Isso irá printar 'Este é um tutorial' no console , o que foi escrito anteriormente. file:lines() file:lines(), é usado em um laço for e sua sintaxe é a seguinte: for linha in file:lines do corpo end Isso criará uma repetição sobre todas as linhas do arquivo com linha retornando os caracteres da linha em questão. Ex.: local file = io.open("C://Iuri.lua") for linha in file:lines do print(linha) end file:close() Como só foi escrito uma linha no arquivo irá printar 'Este é um tutorial', se embaixo disso escrevessemos 'Teste' o for se repetiria 2 vezes e iria printar: 'Este é um tutorial' 'Teste' Finalizando o arquivo Por último, iremos finalizar o arquivo, usando o file:close(), que já foi mostrado nos exemplos anteriores. Deletando arquivos ou diretórios Para deletar arquivos e diretórios, usamos a função os.remove(file or directory), lembrando que o arquivo não pode estar em uso e o diretório vazio. Ex.: os.remove("C://Iuri.lua") Creditos Dean
  23. Real Map [8.60] + Quirefang + Gnomes

    Eddy2000 reagiu a Duda Lima por uma resposta no tópico

    1 ponto
    Real Map [8.60] + Quirefang + Gnomes Galera esse mapa é todo trackeado do tibia. É para a versão 8.60 apenas. Espero que gostem e seja útil também! Foto: Download: Scan: Credits: Duda Lima! Amy Azzkaban RaikØx TE ajudei? +REP
  24. Base Nto Ultra 8.60

    Malborus reagiu a Matwhrup por uma resposta no tópico

    0 pontos
    Eu levei um susto na parte "NTO ULTRA" no nome... mas foi a minha primeira base que liberei no facebook por favor me dê creditos Mateus Santos xD
  25. Sistema Akatsuki e Anbu

    claudenymg reagiu a Wakon por uma resposta no tópico

    0 pontos
    O tópico foi movido para a área correta, preste mais atenção da próxima vez! Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680 Este tópico foi movido: De: "OTServ → Scripting → Tutoriais de Scripting" Para: "OTServ → Suporte OTServ → Suporte de Scripts"
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo