Ir para conteúdo

lucasprimolemos

Membro
  • Registro em

  • Última visita

Tudo que lucasprimolemos postou

  1. Olá Pessoal! No ano passado, tentei ter alguns otservers padrão, em diversas versões, porém é a mesmice de sempre. Dei início então à um projeto completamente novo, algo diferente do tibia, porém nos padrões tibia. Buscando fidelizar players que gostam de RPG e história, mas mantendo a magia do PVP. Vou explicar para vocês. Versão • 10.98 • Base (The Forgetten Server compilado TFS 1.3) - 98% perfeição • Site editado Gesior com base em MyAAC (sistema de pagamento e create account 100%) - Falta modelar a parte de SHOP/MOUNTS, etc Diferenciais. Inicia seu personagem em uma cidade inicial, com as vocações padrões inciais, do lvl 8 ao 35. Ao alcançar lvl 35 o personagem pode pegar um barco gratuito e definir dentro de sua vocação, como vai se especializar. Vocações: A ideia é ser uma EXP Fixa por todo leveling, onde as quests/tasks ajudarão muito no UP Level (muitas darão um level completo). - Berserker Knight (dano, ataque rápido e movimento rápido) - Guardian Knight (defesa, vida e capacidade) - Elder Wizard (cura e buffs de cura) - Trap Wizard (vida, debuf e trap spells) - Master Wizard (dano e mana) - Enchanted Wizard (regen, summon e running) - Swift Paladin (crítico, ataque rápido e movimento rápido) - Heavy Paladin (dano, capacidade e vida) Ao definir sua vocação nova com Oracle de sua profissão básica, ele é transportado para FantasyCity, uma cidade completa 100% editada. Nessa cidade o personagem pode começar a se aventurar, com quests missionárias e tasks. Conta com um sistema completamente novo (já está pronto, só falta definir como será adquirido cada profissão, se é por quest ou missão) JOBS, isso mesmo, o personagem pode trabalhar e CRAFTAR novos itens onde cada profissão consegue craftar ITENS únicos. JOBS Alfaiate (armors) Escultor (arcos e wands) Fabricante (shields) Forjador (helmets) Fazendeiro (foods especiais regen + buffs) Mineiro (minera pedras preciosas usadas para profissões, venda e enchant) Sapateiro (boots) Joalheiros (rings e amulets) Alquimista (poções especiais) Ferreiro (swords, axes e clubs) Um exemplo da profissão fazendeiro, que pode arar a terra, plantar, molhar, esperar a árvore crescer e colher frutas para fazer poções. Cada profissão tem uma ala de crafting, exclusiva. Mineiros onde podem mineirar e craftar Alas da profissões abaixo Exemplo de crafting fazendeiro (apenas cada JOB pode entrar em sua sala determinada) Sistema prontinho para uso. A ideia também é que aconteça livre comércio entre players, é por isso que o sistema de MARKET PLACE pelo DEPOT está ativado também. Exemplo: Muitas profissões precisam de pedras que apenas o mineiro consegue coletar, e por ai vai. --------------------- Conta também com um sistema de facções, foi ai onde parei, a ideia é que na história, tenha a facção a favor da cidade e do prefeito, e outra a favor do submundo...tem uma história pra quem quiser ler, senão só pular " FANTASY BR Parte 1 Em um passado não muito distante, diziam que o poder estava nas mãos dos mais ricos, donos de terra e escravos. Mas uma força nada comum e invisível acompanhava e protegia os menos favorecidos. Naquele tempo, só existiam 4 humanos capazes de acessar essa força: Thuman (cavalheiro espadachin), Satsofi (rainha das curas), Molinght (rei das flechas) e Balbuzor (mestre dos elementos), eles formaram a Legião Transcendente. Em seu antigo templo, que ficava localizado na montanha mais alta, se reuniam todas as noites para comer, beber e iluminar todas as regiões com bençãos. Seu objetivo era manter a Ordem e a Paz. Em suas aventuras desmistificando as leis universais, encontraram um livro acessando um portal, que continham sânscritos de magias com data desconhecida, e no dia em que foram testar a magia, houve um desastre. Thuman, Satsofi, Monlinght e Balbuzor com seus incríveis poderes falaram: -Quod alta fores aperire partum spiritus (Que as portas profundas abram o espírito criador) Porém não sabiam ao certo do que aquilo se tratava. Parte de seus poderes foi absorvido por uma força obscura, onde criaram uma permissão universal para uma nova dimensão, porém era a dimensão da obscuridade. A partir daquele dia conhecido como catárte, nada mais foi o mesmo, com seus poderes diminuídos já não podiam abençoar os povos. Balbuzor infeliz com essa situação, pegou o livro e foi embora em uma madrugada onde a Legião estava adormecida. Muito, muito longe, desceu nos menores níveis, onde se encontravam criaturas diabólicas, mas carregando o livro em suas mãos, elas não tinham permissão de atacá-lo. Uma voz murmurava para Balbuzor onde ele devia ir, e obcecado pela falta de poder, era isso o que ele buscava. Entrou em uma sala, onde continha um pilar para o Livro. Colocou lentamente o livro sobre o pilar, o livro se abriu e páginas começaram a virar com o vento, até que parou na única página vermelha. -Fac animum corpusque!!! Disse Balbuzor, invocando o espírito obscuro para dentro de seu corpo invólucro de muito poder. Daquele dia em diante, Balbuzor suprido de muita força e duas personalidades começou a propagar o caos pela terra, expandindo cada vez mais os portais do mundo dimensional para o mundo humano. O caos e destruição estavam por toda parte. Era o fim. Parte 2 A Legião Transcendente já não era mais forte, e agora tendo um inimigo que era mais forte que os três juntos, seu antigo parceiro Balbuzor. Thuman disse que não conseguiram controlar tanto poder e nem lutar, Satsofi disse que com o poder atual dela, não conseguiria curar todos os feridos, mas Monlinght com sua esperança e fé elevada disse: Nós somos a Legião, nós não desistimos. Se não temos o poder para lutar contra isso, então precisamos de uma solução, nós temos honra! Realmente, não podemos desistir. Disse Thuman. E se nós treinassemos magia para pessoas interessadas? Disse Satsofi. Você sabe que isso não é permitido, e você viu o que aconteceu com Balbuzor. Disse Thuman. Satsofi está certa, é a nossa única opção… Concluiu Monlinght. Todos os três da Legião concordaram, e não demorou muito para muitas pessoas com habilidades diferentes se interessarem no treinamento. No início eram 10, que passou a ser 100 e logo já haviam mais de 1.000 guerreiros alguns com facilidade magia, outros com precisão e velocidade e muitos com força física. Com o passar do tempo novas habilidades de luta e magias foram aprendidas e criou-se vocações que definem suas habilidades principais. Os guerreiros (knights) podem se formar em Guardian Warrior (mestre de defesa, com muita capacidade de resistência e vida) Berserker Warrior (mestre dos ataques, rápido com lâminas e em seu movimento mas pouca resistência e vida) Os arqueiros (paladins) podem se formar em Swift Archer (utiliza bows e arrows, normalmente os mais rápidos) Heavy Archer (utiliza crossbows e bolts, movimento e ataque lento, porém um ataque mais preciso e forte, defesa e vida maiores) Os magos (sorcerer) podem se formar em Master Wizard (são os magos com poder mágico mais forte) Enchanted Wizard (magos com alto poder de regeneração de mana e vida, focado em invocações de monstros e criação de runas) Os curandeiros (druids) podem se formar em Elder Wizard (Altos poderes de cura em massa e individual) Trap Wizard (Poderes mágicos focados em atordoar, silenciar e trapar) Parte 3 Com o auxílio desses novos guerreiros, muitos conseguiram destruir os monstros de outras dimensões, mas também muitos foram derrotados. Os anos se passaram e uma cidade chamada Fantasy cujo Prefeito Dunkherman (que tinha muito poder financeiro) foi construída para todos os que lutam com objetivo de manter a Ordem e Paz. Com auxílio do prefeito, um guerreiro muito forte chamado Mitswan fundou a Facção ALIANÇA, para que todos se unissem com o objetivo de proteger os cidadãos de qualquer mal. Era inevitável que outros guerreiros pudessem pender ao lado obscuro, então Katsui, que foi treinado pela Legião dos 3, queria mais poder, pois ele chegou ao nível de seus mestres, e então criou uma Facção dos REBELDES, que queriam ter poder sobre a cidade Fantasy e então criar uma ligação com Balbuzor em busca de poder. Desde então a luta pelo poder e pela ordem, derramou muito sangue, a única solução é criar guerreiros supremos, capazes de se conectar com a força maior para derrotar Balbuzor. Você consegue fazer isso por toda Fantasy? " Basicamente falando, o submundo foi aberto, gerando portais para o mundo real, e existem duas facções que batalham, uma a favor e outra conta o submundo (Balbuzor). A ideia era criar guerras diárias definidas por faixa de leveis, onde para cada faixa de level a facção que ganhar ganha bonus exp de um dia para o outro e premios. Enfim. A Base do otserver está criada, mas falta tudo ainda, DETALHE: QuestLog ativado e funcionando perfeitamente, testado também!. Para quem quer entrar de cabeça, da um bom trabalho, porém seria uma experiência bem diferente dos otservers comuns. Não queremos PAY 2 WIN, e sim compras aceitáveis. Hmmm, que mais? .... Fica ai algumas fotos Templo Fantasy City Futuro Tapete mágico após completar missão Task NPC Task System Points System (A cada level vc ganha um ponto, o uso de pontos para atribuição de habilidades) Site editado Por enquanto é isso, dei o primeiro ponta pé de criar até aqui, mas agora que estou trabalhando tempo pouquissimo tempo, e perdi bastante as skills para mexer. Quero agradecer o @Dwarfer por tirar milhares de dúvidas! hahahaha Quem se interessar pode entrar em contato, pois realmente não vai depender muito de mim OBS: TENHO 6 MESES DE HOSPEDAGEM WINDOWS SERVER 2003 QUALQUER CONFIGURAÇÃO.
  2. Pena que esse link postado redireciona pra 300 páginas e nunca chega no download
  3. Cara amei o site, porém qdo eu entro no 127.0.0.1 da error Esta página não está funcionando 127.0.0.1 não consegue atender a esta solicitação no momento. HTTP ERROR 500 Alguem pode ajudar?
  4. Não sei quantoi a players, pois é muito variável, e sinto pelo pouco que abri otserver, que temos os players voláteis e os players fiéis. Players voláteis : normalmente jogadores de high exp e easy loot, pega lvl 500 ou 10k em um dia e tem tudo na mão com itens donate melhor do platena tibia Players fiéis : players que buscam uma experiência em RPG, PVP, são aqueles que gostam de criar história em um servidor, então tendo um server de qualidade com as características que eles gostam, eles permanecem por bem mais tempo, caso o servidor tenha players para jogar. Agora quanto a versão é complicado, eu amo 7.4/6 pq é pvp na mão, muito bom! mas não sei quanto ao mercado em si. Fiz um teste recentemente, abri 3 baiaks 8.6, low exp, medium exp e high exp...todos entraram gente e dps sumiu tudo. Um colega abriu pagou propaganda e assim que lanço (8.6 baiak medium) bateu 200 players, durou 1 semana com esses players, ai foi diminuindo em 2 semanas era 0 players online... (players voláteis). É isso, um pouco de minha opinião, abraço!
  5. Obrigado @Mirkaan Resolvi da seguinte maneira, deixei que mages e pallys conseguissem +1 ml e kinas um percentual na média do 50% pra mais ml baixo e pra menos ml alto elseif (p2[2] == "magic") then if getPlayerVocation(cid) == 4 or getPlayerVocation(cid) == 11 or getPlayerVocation(cid) == 12 or getPlayerVocation(cid) == 9 or getPlayerVocation(cid) == 10 or getPlayerVocation(cid) == 3 then --doPlayerSendCancel(cid, "Only avaible for mages!") player:addManaSpent(math.ceil((Vocation(getPlayerVocation(cid)):getRequiredManaSpent(player:getBaseMagicLevel() + 1*2) - player:getManaSpent()) / configManager.getNumber(configKeys.RATE_MAGIC))) else player:addManaSpent(player:getVocation():getRequiredManaSpent(player:getBaseMagicLevel() + 1) - player:getManaSpent()) --player:addSkillTries(skillId, player:getVocation():getRequiredSkillTries(skillId, player:getSkillLevel(skillId) + 1) - player:getSkillTries(skillId)) end Obrigado de qlqr maneira! #offtopic @Mirkkan manja algo de mining system pra tfs 1.x +? to com 1.3 e nenhum q acho funciona, tem um que consegui pra 1.2 que parece perfeito, adicionei no action id do axe mas nao da bug, porém tb n funciona... kkkk
  6. Fui ver apenas depois, é que como de costume estava naqueles momentos que você não consegue ajeitar um problema, e como sempre pesquiso no TK ai abri esse tópico esperando informações, li tudo e nada (rs) Mas de fato, off tópic é isso ai. De acordo @KotZletY, fui um pouco desatento. Desisti de tentar arrumar meu Shop e voltei no scripting e mapping por enquanto, quem sabe mais pra frente acho solução... Abraços
  7. ué de que adianta fazer propaganda de algo que vc não compartilha? Se quer opinião peça pros seus 'amigos'... tópico inútil!
  8. Olá pessoal, estou usando um sistema de skill points bem simples, ta tudo certinho, adicionando corretamente todos os dados, porém Magic Level, ele da apenas uma quantidade pequena, quando multipliquei o valor por 22 ele deu o ML inteiro, ai fui testar em kina e deu 21 ml's kkkkkkkkkkkkkk Segue a parte do código onde creio que deve ser modificado elseif (p2[2] == "magic") then player:addManaSpent(math.ceil((Vocation(getPlayerVocation(cid)):getRequiredManaSpent(player:getBaseMagicLevel() + 1) - player:getManaSpent()) / configManager.getNumber(configKeys.RATE_MAGIC))) ---Player receives message on Skill Advance Abaixo o código completo (é claro apenas a parte do talkaction que já está incluído as ações onde está o problema) local SkillPoints = { [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1, [6] = 1, [7] = 1, [8] = 1, [9] = 1, [10] = 1, [11] = 1, [12] = 1, } function onSay(cid, words, param) local player = Player(cid) local vocation = Player(cid) local voc = getPlayerVocation(cid) if not (SkillPoints[getPlayerVocation(cid)]) then return false end local param = param:lower() local p2 = param:split(",") if (getPlayerStorageValue(cid, 14574) < 0) then setPlayerStorageValue(cid, 14574, 0) end local skillids = { ["shielding"] = 5, ["sword"] = 2, ["axe"] = 3, ["club"] = 1, ["fist"] = 0, ["distance"] = 4 } local attributes = { ["health"] = {np = 5, vl = 5, skn = "Hit Points"}, ["mana"] = {np = 5, vl = 5, skn = "Mana Points"}, ["magic"] = {np = 6, vl = 1 , skn = "Magic Percentual"}, ["shielding"] = {np = 20, vl = 1, skn = "Shielding Skill"}, ["sword"] = {np = 20, vl = 1, skn = "Sword Skill"}, ["axe"] = {np = 20, vl = 1, skn = "Axe Skill"}, ["club"] = {np = 20, vl = 1, skn = "Club Skill"}, ["fist"] = {np = 10, vl = 1, skn = "Fist Skill"}, ["distance"] = {np = 20, vl = 1, skn = "Distance Skill"}, } if (param == "check") then doPlayerPopupFYI(cid, " <> <> <> <> <> <> Attribute Points <> <> <> <> <> <> \n\nPoints Available: ".. getPlayerStorageValue(cid, 14574) .."\nPoints Per Level: ".. SkillPoints[getPlayerVocation(cid)]) elseif (p2[1] and p2[1] == "add") and (attributes[p2[2]]) and (tonumber(p2[3])) then local creature = Creature(cid) local cpos = creature:getPosition() if (getPlayerStorageValue(cid, 14574) < tonumber(p2[3]) * attributes[p2[2]].np) then doPlayerSendCancel(cid, "you need more attribute points go hunt!") return cpos:sendMagicEffect(CONST_ME_POFF) end if (p2[2] == "health") then player:setMaxHealth(player:getMaxHealth() + attributes[p2[2]].vl * tonumber(p2[3])) player:addHealth(attributes[p2[2]].vl * tonumber(p2[3])) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have been rewarded with ".. tonumber(p2[3]) * attributes[p2[2]].vl .. "Hit Points") elseif (p2[2] == "mana") then player:setMaxMana(player:getMaxMana() + attributes[p2[2]].vl * tonumber(p2[3])) player:addMana(attributes[p2[2]].vl * tonumber(p2[3])) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have been rewarded with ".. tonumber(p2[3]) * attributes[p2[2]].vl .. "Mana Points") elseif (p2[2] == "magic") then player:addManaSpent(math.ceil((Vocation(getPlayerVocation(cid)):getRequiredManaSpent(player:getBaseMagicLevel() + 1) - player:getManaSpent()) / configManager.getNumber(configKeys.RATE_MAGIC))) ---Player receives message on Skill Advance elseif(skillids[p2[2]]) then for a = 1, tonumber(p2[3]) do player:addSkillTries(skillids[p2[2]], player:getVocation():getRequiredSkillTries(skillids[p2[2]], player:getSkillLevel(skillids[p2[2]]) + 1 * 1) - player:getSkillTries(skillids[p2[2]])) --Player receives message on Level Advance end end setPlayerStorageValue(cid, 14574, getPlayerStorageValue(cid, 14574) - tonumber(p2[3]) * attributes[p2[2]].np) else local msgx = "" for i, v in pairs(attributes) do local add = (v.np > 1) and "" or "" msgx = msgx .. string.upper(i:sub(1,1)) .. i:sub(2, #i) .. " - ".. v.np .. " points".. add .. " -> " .. v.vl .. " ".. v.skn .. "\n" end doPlayerPopupFYI(cid, " <> <> <> <> <> <> Attribute Points <> <> <> <> <> <> \n\n Attribute Points are used to customize your character\n\nThe added points can not be recovered \n\n".. msgx .. "\nExample of Use: ".. words .." add,health, 1\n\nPoints available: ".. getPlayerStorageValue(cid, 14574)) end return true end REP+ Pra quem me ajudar! obrigado desde já
  9. UP! Tem só um detalhe, no !points add,magic,1 ele uma um percentual do ml.... Para upar o ML todo do mage eu tive que multiplicar 1*22, porém quando essa variavel funcionava em kina upava 21 ML's em Kina kkkkkkkkkkk Tentei fazer um if, else para a vocação mas acabou parando de funcionar, teria como alguém me ajudar???? (Para upar 1 ml de mage e um percentual apenas de ml de kina) ou (para funcionar apenas nas vocations 1,2,5,6,7,8 ? elseif (p2[2] == "magic") then player:addManaSpent(math.ceil((Vocation(getPlayerVocation(cid)):getRequiredManaSpent(player:getBaseMagicLevel() + 1) - player:getManaSpent()) / configManager.getNumber(configKeys.RATE_MAGIC))) ---Player receives message on Skill Advance
  10. Para TFS 1.x ??? Gostaria muito!!!
  11. Gostaria de pedir um Mining System atualizado, só encontrei de tfs 0.x em todos os lugares... se alguém puder fazer uma adaptação! Alguém? rs UP!
  12. Cara teria como editar para TFS 1.x? Uso tfs 1.3
  13. Parabéns @KotZletY muito bom mesmo! Uso tfs 1.3 porém eu coloco o nome do exemplo Rotworm ou Rotworms, mas ele não identifica quando falo com NPC e digo nome do monster task_monsters = { [1] = {nome = "Rotworms", storage = 30000, amount = 40, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}}, [2] = {nome = "Rotworm", storage = 30001, amount = 80, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 2}}}, Não sei qual problema, poderia me ajudar? EDIT (monsters ok) Eu coloquei o nome em letra minúscula e funcionou, vou continuar testando, por enquanto ok. EDIT2 (task rank + task points show) Percebi que o task points e rank não estão aparecendo no channel, como faço para ativa-los? EDIT3 (task rank + task points RESOLVIDO) Bom vi que no código tinha as funções que puxavam essas informações, portanto apenas modifiquei o lugar delas e agora esta aparecendo function onSay(player, words, param) local text = ' ****** Tasks System Information ****** \n\n[+] Pontos Task [+]: Voce tem '..taskPoints_get(player)..' pontos Task.\n[+] Pontos Task Rank [+]: Voce tem '..taskRank_get(player)..' pontos Task.\n[+] Task Rank [+]: '..getRankTask(player)..'\n' if param:lower() == "me" then text = text .. '[+] Pontos Task [+]: Voce tem '..taskPoints_get(player)..' pontos Task.\n[+] Pontos Task Rank [+]: Voce tem '..taskRank_get(player)..' pontos Task.\n[+] Task Rank [+]: '..getRankTask(player)..' ' return false, player:popupFYI(text) end if getTaskInfos(player) then local taskNormal = player:getStorageValue(getTaskInfos(player).storage) text = text .. '\n\n ****** [+] Task Normal [+] ****** \n \n\n[*] Task Atual [*]: '..getTaskInfos(player).nome..' - Voce precisa matar: '..getTaskInfos(player).amount..'.\n[*] Premios [*]: '..getItemsFromTable(getTaskInfos(player).items)..' - '..getTaskInfos(player).pointsTask[1]..' Pontos Task - '..getTaskInfos(player).pointsTask[2]..' Pontos Rank da Task. \n[*] Progresso [*]: ['..(player:getStorageValue(getTaskInfos(player).storage))..'/'..getTaskInfos(player).amount..']\n[*] Status da Task [*]: '..(taskNormal == getTaskInfos(player).amount and 'Completa' or 'Incompleta')..'!' else text = text .. '\n\n ****** [+] Task Normal [+] ****** \n \n\n- Voce nao esta fazendo Task nenhuma.' end if getTaskDailyInfo(player) then local taskDaily = player:getStorageValue(getTaskDailyInfo(player).storage) text = text .. '\n\n\n ****** [+] Task Diaria [+] ****** \n \n\n[*] Task Atual [*]: '..getTaskDailyInfo(player).nome..' - Voce precisa matar: '..getTaskDailyInfo(player).amount..'.\n[*] Premios [*]: '..getItemsFromTable(getTaskDailyInfo(player).items)..' - '..getTaskDailyInfo(player).pointsTask[1]..' Pontos Task - '..getTaskDailyInfo(player).pointsTask[2]..' Pontos Rank da Task. \n[*] Progresso [*]: ['..(player:getStorageValue(getTaskDailyInfo(player).storage))..'/'..getTaskDailyInfo(player).amount..']\n[*] Status da Task [*]: '..(taskDaily == getTaskDailyInfo(player).amount and 'Completa' or 'Incompleta')..'!' else text = text .. '\n\n\n ****** [+] Task Diaria [+] ****** \n \n\n- Voce nao esta fazendo nenhuma Task Diaria.' end return false, player:popupFYI(text) end Valeu tudo ok por enquanto!! rsrs
  14. Nossa amém! Testei todos que tinha no TK e OTLand para meu TFS 1.3 e só este funcionou perfeitamente!!!!!!
  15. @Everson Miranda pode ser sim! Já é um caminho andando, Mas se for no look vai ser essencial, mas se for antes do nome pode ser tb!!!! antes tendo do que não tendo nada, e vc ajudando o que vc ajudar eu já fico mto feliz! De qualquer maneira muitíssimo obrigado!!!!
  16. Seria possível adaptar para TFS 1.x? A minha TFS é 1.3 e seria muito muito relevante para o servidor, eu tinha a ideia para o projeto mas nao sabia que tinham postado, até que encontrei você! rsrs Eu coloquei tudo para fazer um teste, com 1 ou 2 pequenas alterações consegui fazer funcionar sem erro na distro, porém ele só abre mesmo o chat do !points, nao adiciona pontos quando upa e nao funciona nem da erro no !points add, vitalidade, 2 por exemplo ///////// EDIT Ignora, acabei de achar seu tutorial para 1.1x!!!!!!!!!!! MUITO OBRIGADO!
  17. Sim, eu entendi, mas eu não queria que fosse vocation, pois caso seja vocation ele vai mudar as vocations que já criei, Digo, eu não uso promotions no server... se o cara é Master Wzard não queria transformar ele em marceneiro por exemplo entende? Porque ele é um Master Wizard rsrs e não um marceneiro. Queria que digamos, uma vocação qualquer, pudesse ter uma profissão (não no sentido de vocation, acho que me expressei errado no post) mas no sentido de um JOB mesmo, tipo algo a parte da vocation. Exemplo 14:03 You see Aerosmith (Level 173) {Marceneiro} . He is a royal paladin.
  18. @Everson Miranda Olá Everson! primeiramente muito obrigado pela ideia! É realmente palpável, mas estou usando os sistemas de vocation de maneira que não posso misturar as profissões com as vocações, por exemplo, minhas vocações também são personalizadas e únicas, e é importante manter o nome delas, portanto precisaria que além da vocação em si, fosse possível através de NPC's ter uma profissão a parte da vocação
  19. Olá pessoal do TibiaKing, como na maioria das vezes estou tirando dúvidas e pedindo scripts, vi a oportunidade de fazer a postagem desse tutorial para inserir um Simple Crafting System dentro do seu otserver para TFS 1.2 / 1.3. De quem são os créditos? - Sistema retirado do otland Modal Window por Non Sequitur Simple Crafting System por strutZ Porque não pegar direto lá? - Porque a postagem no otland está picada em partes, eu mesmo demorei um bom tempo até juntar todas as partes, além dos items utilizados no script não estão 100% de acordo com alguns OTServers recentes, entao utilizei um padrão. Eu simplifiquei para o uso e escrevi o tutorial em português. Onde foi testado? - The Forgetten Base (TFS 1.3) fucionando 100% Imagens do sistema TUTORIAL Será dividido em duas partes. • Na primeira vamos instalar uma biblioteca de Janelas para seu otserver, pois não tem um padrão simples que possa ser utilizado. • Na segunda parte instalar o sistema de crafting. PARTE 1 Instalação da biblioteca de ModalWindow. (1.1) Segundo Non Sequitur, existe uma grande dificuldade em ter que criar diversos códigos para fazer as Modais de Janelas (ModalWindow) funcionarem nas versões mais recentes do tibia, e isso não é bom, porém é uma solução sem erros Ok. (1.2) Existem diversas funções para utilizar os Modais de Janela (ModalWindow) desde modalWindow:addButtons(...) ou modalWindow:addChoices(...), porém não vou me prolongar sobre o assunto da modal, pois o objetivo é que funcione o sistema de crafting. (2) INSTALAÇÃO (2.1) Na pasta data/lib/ abra o arquivo lib.lua (2.2) Insira o seguinte código -- Modal window dofile('data/lib/modalwindow.lua') (2.3) Na mesma pasta lib, crie um arquivo chamado modalwindow.lua e adicione o código abaixo no arquivo if not modalWindows then modalWindows = { modalWindowConstructor = ModalWindow, nextFreeId = 500, windows = {} } end local MT = {} MT.__index = MT function ModalWindow(...) local args = {...} if type(args[1]) == 'table' then local self = setmetatable(args[1], MT) local id = modalWindows.nextFreeId self.id = id self.buttons = {} self.choices = {} self.players = {} self.created = false modalWindows.nextFreeId = id + 1 table.insert(modalWindows.windows, self) return self end return modalWindows.modalWindowConstructor(...) end function MT:setDefaultCallback(callback) self.defaultCallback = callback end function MT:addButton(text, callback) local button = {text = tostring(text), callback = callback} table.insert(self.buttons, button) return button end function MT:addButtons(...) for _, text in ipairs({...}) do table.insert(self.buttons, {text = tostring(text)}) end end function MT:addChoice(text) local choice = {text = tostring(text)} table.insert(self.choices, choice) return choice end function MT:addChoices(...) for _, text in ipairs({...}) do table.insert(self.choices, {text = tostring(text)}) end end function MT:setDefaultEnterButton(text) self.defaultEnterButton = text end function MT:setDefaultEscapeButton(text) self.defaultEscapeButton = text end function MT:setTitle(title) self.title = tostring(title) end function MT:setMessage(message) self.message = tostring(message) end local buttonOrder = { [4] = {3, 4, 2, 1}, [3] = {2, 3, 1}, [2] = {1, 2}, [1] = {1} } function MT:create() local modalWindow = modalWindows.modalWindowConstructor(self.id, self.title, self.message) local order = buttonOrder[math.min(#self.buttons, 4)] if order then for _, i in ipairs(order) do local button = self.buttons[i] modalWindow:addButton(i, button.text) button.id = i if button.text == self.defaultEnterButton then modalWindow:setDefaultEnterButton(i) elseif button.text == self.defaultEscapeButton then modalWindow:setDefaultEscapeButton(i) end end end for _, choice in ipairs(self.choices) do modalWindow:addChoice(_, choice.text) choice.id = _ end self.modalWindow = modalWindow end function MT:sendToPlayer(player) if not self.modalWindow then self:create() end player:registerEvent('ModalWindowHelper') self.players[player:getId()] = true return self.modalWindow:sendToPlayer(player) end (2.4) Agora em data/creaturescript/creaturescript.xml adicione <event type="modalwindow" name="ModalWindowHelper" script="modalwindowhelper.lua" /> (2.5) Em data/creaturescript/scripts/ crie um arquivo lua chamado modalwindowhelper com o seguinte código function onModalWindow(player, modalWindowId, buttonId, choiceId) local modalWindow for _, window in ipairs(modalWindows.windows) do if window.id == modalWindowId then modalWindow = window break end end if not modalWindow then return true end local playerId = player:getId() if not modalWindow.players[playerId] then return true end modalWindow.players[playerId] = nil local choice = modalWindow.choices[choiceId] for _, button in ipairs(modalWindow.buttons) do if button.id == buttonId then local callback = button.callback or modalWindow.defaultCallback if callback then callback(button, choice) break end end end return true end (2.6) PRONTO, AS MODAIS DE JANELA ESTÃO INSTALADAS E PRONTAS PARA USO! VAMOS A PARTE 2 COM A INSTALAÇÃO DO SIMPLE CRAFTING SYSTEM! PARTE 2 Instalação do Simple Crafting System (1.1) Existem alguns sistemas de crafting porém são mais complexos. Este sistema feito por strutZ é super simples e altamente configurável baseado nas suas necessidades! Apenas adicionando os scripts de actions e os de lib. Não há necessidade de registrar nada em login.lua ou em creaturescript. (2) INFORMAÇÕES DO SISTEMA Tem uma seção de configuração bem simples onde você pode colocar os items que deseja que sejam craftados e também os items necessários para craftar. Também a personalização dos textos que aparecem nas janelas modais que já foram instaladas na Parte 1. • Abaixo alguma explicação sobre as configurações do código após ter instalado (para iniciar a instalação vamos ao (2.1) local config = { -- Configuracao da Janela Modal mainTitleMsg = "Crafting System", -- TITUTLO DA JANELA QUE ABRE mainMsg = "Welcome to the crafting system. Please choose a vocation to begin.", -- MENSAGEM DA JANELA craftTitle = "Crafting System: ", -- Titulo da tela de craft apos o player selecionar a vocacao destinada dos items craftMsg = "Here is a list of all items that can be crafted for the ", -- Mensagem na tela de craft após escolhas do jogador de vocação -- Fim da config Janela Modal -- Notificacoes ao player needItems = "You do not have all the required items to make ", -- Mensagem que aparece quando o player tenta craftar e nao tem todos os items -- Configuracoes de Crafting system = { [1] = {vocation = "Master Wizard", -- Isto e apenas uma categoria, nao influencia em nada items = { [1] = {item = "arcane staff", -- item name (O NOME TEM QUE SER EXATO, SENAO NAO FUNCIONA!) itemID = 2453, -- ID do item que sera feito, tem que ser compativel com o nome acima reqItems = { -- items e quantidade dos items necessarios para craftar [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, (2.1) Primeiramente vamos a pasta data/actions/actions.xml e adicionar a seguinte linha. O ITEMID é o ID do item que você deseja que seja utilizado para craftar. (no meu caso para teste das fotos usei o item id 8300, mas você pode colocar o que desejar) <action itemid="ITEMID" script="crafting.lua"/> (2.2) Ai em data/actions/scripts/ crie um arquivo lua chamado crafting com o seguinte código local config = { -- Configuracao da Janela Modal mainTitleMsg = "Crafting System", -- TITUTLO DA JANELA QUE ABRE mainMsg = "Welcome to the crafting system. Please choose a vocation to begin.", -- MENSAGEM DA JANELA craftTitle = "Crafting System: ", -- Titulo da tela de craft apos o player selecionar a vocacao destinada dos items craftMsg = "Here is a list of all items that can be crafted for the ", -- Mensagem na tela de craft após escolhas do jogador de vocação -- Fim da config Janela Modal -- Notificacoes ao player needItems = "You do not have all the required items to make ", -- Mensagem que aparece quando o player tenta craftar e nao tem todos os items -- Configuracoes de Crafting system = { [1] = {vocation = "Master Wizard", -- Isto e apenas uma categoria, nao influencia em nada items = { [1] = {item = "arcane staff", -- item name (O NOME TEM QUE SER EXATO, SENAO NAO FUNCIONA!) itemID = 2453, -- ID do item que sera feito, tem que ser compativel com o nome acima reqItems = { -- items e quantidade dos items necessarios para craftar [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, [2] = {item = "enchanted spear", itemID = 7367, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, }, }, [2] = {vocation = "Elder Wizard", items = { [1] = {item = "arcane staff", itemID = 2453, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, [2] = {item = "enchanted spear", itemID = 7367, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, }, }, [3] = {vocation = "Swift Archer", items = { [1] = {item = "arcane staff", itemID = 2453, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, [2] = {item = "enchanted spear", itemID = 7367, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, }, }, [4] = {vocation = "Guardian Warrior", items = { [1] = {item = "arcane staff", itemID = 2453, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, [2] = {item = "enchanted spear", itemID = 7367, reqItems = { [1] = {item = 9969, count = 1}, -- Black Skull [2] = {item = 5904, count = 30}, -- Magic Sulphur }, }, }, }, }, } local player = Player(cid) function onUse(player, item, fromPosition, itemEx, toPosition, isHotkey) player:sendMainCraftWindow(config) return true end OBS: Coloquei os mesmos items e matéria prima para todas as categorias, para facilitar a edição e compreensão do código. (2.3) Ai na pasta data/ abra o arquivo global.lua e adicionei no início o seguinte código, salve e mantenha o arquivo aberto. dofile('data/lib/crafting.lua') (2.3.1) No mesmo arquivo global.lua insira após o último end function capAll(str) local newStr = ""; wordSeparate = string.gmatch(str, "([^%s]+)") for v in wordSeparate do v = v:gsub("^%l", string.upper) if newStr ~= "" then newStr = newStr.." "..v else newStr = v end end return newStr end (2.4) Em data/lib/ crie um arquivo lua chamado crafting e adicione o seguinte código dentro -- Main Crafting Window -- This is the modal window that is displayed first function Player:sendMainCraftWindow(config) local function buttonCallback(button, choice) -- Modal Window Functionallity if button.text == "Select" then self:sendVocCraftWindow(config, choice.id) end end -- Modal window design local window = ModalWindow { title = config.mainTitleMsg, -- Title of the main craft modal window message = config.mainMsg.."\n\n" -- Message of the main craft modal window } -- Add buttons to the window (Note: if you change the names of these you must change the functions in the modal window functionallity!) window:addButton("Select", buttonCallback) window:addButton("Exit", buttonCallback) -- Add choices from the action script for i = 1, #config.system do window:addChoice(config.system[i].vocation) end -- Set what button is pressed when the player presses enter or escape. window:setDefaultEnterButton("Select") window:setDefaultEscapeButton("Exit") -- Send the window to player window:sendToPlayer(self) end -- End of the first modal window -- This is the modal window that displays all avalible items for the chosen vocation. function Player:sendVocCraftWindow(config, lastChoice) local function buttonCallback(button, choice) -- Modal Window Functionallity -- If the user presses the back button they will be redirected to the main window. if button.text == "Back" then self:sendMainCraftWindow(config) end -- If the user presses the details button they will be redirected to a text window with information about the item they want to craft. if button.text == "Details" then local item = config.system[lastChoice].items[choice.id].item local details = "In order to craft "..item.." you must collect the following items.\n\nRequired Items:" for i = 1, #config.system[lastChoice].items[choice.id].reqItems do local reqItems = config.system[lastChoice].items[choice.id].reqItems[i].item local reqItemsCount = config.system[lastChoice].items[choice.id].reqItems[i].count local reqItemsOnPlayer = self:getItemCount(config.system[lastChoice].items[choice.id].reqItems[i].item) details = details.."\n- "..capAll(getItemName(reqItems).." ["..reqItemsOnPlayer.."/"..reqItemsCount.."]") end self:showTextDialog(item, details) self:sendVocCraftWindow(config, lastChoice) end -- if the player presses the craft button then begin checks. if button.text == "Craft" then -- Check if player has required items to craft the item. If they dont send needItems message. for i = 1, #config.system[lastChoice].items[choice.id].reqItems do if self:getItemCount(config.system[lastChoice].items[choice.id].reqItems[i].item) < config.system[lastChoice].items[choice.id].reqItems[i].count then self:say(config.needItems..config.system[lastChoice].items[choice.id].item, TALKTYPE_MONSTER_SAY) return false end end -- Remove the required items and there count from the player. for i = 1, #config.system[lastChoice].items[choice.id].reqItems do self:removeItem(config.system[lastChoice].items[choice.id].reqItems[i].item, config.system[lastChoice].items[choice.id].reqItems[i].count) end -- Send effect and give player item. self:addItem(config.system[lastChoice].items[choice.id].itemID) self:getPosition():sendMagicEffect(CONST_ME_FIREATTACK) end end -- Modal window design local window = ModalWindow { title = config.craftTitle..config.system[lastChoice].vocation, -- The title of the vocation specific window message = config.craftMsg..config.system[lastChoice].vocation..".\n\n", -- The message of the vocation specific window } -- Add buttons to the window (Note: if you change the names of these you must change the functions in the modal window functionallity!) window:addButton("Back", buttonCallback) window:addButton("Exit") window:addButton("Details", buttonCallback) window:addButton("Craft", buttonCallback) -- Set what button is pressed when the player presses enter or escape window:setDefaultEnterButton("Craft") window:setDefaultEscapeButton("Exit") -- Add choices from the action script for i = 1, #config.system[lastChoice].items do window:addChoice(config.system[lastChoice].items[i].item) end -- Send the window to player window:sendToPlayer(self) end PRONTO! É apenas isso, seu sistema de crafting está 100% funcional se você fizer tudo corretamente. Ele está pronto para ser personalizado, onde você pode adicionar as categorias que quiser e os itens que quiser para craftar, tanto como as matérias primas. Espero ter ajudado, nada aqui é de minha autoria, apenas minha edição para facilitar a compreensão e junção de todos os scripts em um post único para ter o sistema 100% funcional. Fico a disposição e boa sorte!
  20. Bom resolvido, ao invés de usar o NPC, eu transformei as vocações que antes eram promotion em vocações normais e coloquei para o player passar pelo oracle mesmo. Ex: vocation id = 5 / fromvoc = 5 Resolvido, na gambiarra mas resolvido.
  21. Olá! Venho hoje ver se é possível a criação de um sistema que creio que seja simples, TFS 1.x (a minha é 1.3 mas normalmente 1.x funciona) Criar profissões (não no sentido de vocations, mas algo a parte) tipo marceneiro, pedreiro, etc etc, onde ao dar look aparece também a profissão. Exemplo: 14:03 You see Aerosmith (Level 373) {Joalheiro}. He is a royal paladin. Na criação da profissão conseguir criar um meio em código que eu possa atribuir aos meus itens de CRAFT (Já criado e configurado) algo desse tipo (if getJob == 4 then) É bem simples no geral, para quem manja bem creio que em 15 min da pra fazer! Se possível é claro. De qualquer maneira muito obrigado, fico a disposição e estou ai para qualquer coisa
  22. Olá! Venho a pedido de um script diferenciado e imagino que um tanto quanto complicado de ser feito. TFS 1.3 (creio que 1.x + funcione né?) É um sistema de facções, onde o player a partir de 1 npc pode ser ALIANÇA ou REBELDE a partir de outro npc. Se possível deixar no quest log. E aparecerá no Look do player Facção Rebeldes ou Facção Aliança. Todos os dias haverá guerra entre facções em um determinado horário as 19:30h e aos sábados as 16h Quando inicia a guerra, terá faixa de leveis, do 50-80 / 81 ao 120 / 121 ao 150 / 151 ao 200 e 201+ ou seja, áreas diferentes (porém iguais) para a guerra. Terá um anúncio da guerra que iniciará em 10 minutos, e o player poderá dar !accept confirmando sua presença. Faltando 5 minutos para a guerra começar quem já deu accept entra na guerra e quem der accept antes de iniciar a guerra também serão teleportados para suas respectivas áreas por faixas de leveis. Todos os presentes na área base da facção ganham BUFFS de aumento de skill, ml, velocidade, vida e mana durante a guerra. Ao iniciar a guerra a barreira da base ALIANÇA e REBELDES abre, e até terá caminhos inicialmente com as torres de sua faccao e a partir da metade as torres inimigas, o objetivo é destruir todas, ao destruir todas a torre principal fica VULNERÁVEL à ataques, aquele que destruir a torre central da facção inimiga vence, todos os players da facção que participaram da guerra ganham uma premiação item e dinheiro, e todos da facção vencedora, até mesmo aqueles que não ganharam a guerra ganham um bonus de 10% de exp Ao terminar a guerra é anunciado no servidor a facção vencedora para cada faixa de level e todos são teleportados novamente ou para o DP em locais variáveis dentro da área do DP. Quando a sua facção é vencedora, ao logar aparece se você perdeu ou ganhou a ultima guerra, e se ganhou qual seu bonus adicional (pode ser que do lvl 50-80 quem ganhou foi rebeldes e de 81 ao 120 quem ganhou foi aliança. Complexo, porém alguém que gostou do sistema poderia fazer não é mesmo?! Fico a disposição para ajudar no que for necessário!!!!!! Peço licença para marcar algumas pessoas da comunidade na qual admiro e tenho acompanhado ajudando membros e colaborando com scripts @Dwarfer @Alexy Brocanello@psychonaut @antharaz

Informação Importante

Confirmação de Termo