Jump to content
Close

Search the Community

Showing results for tags 'sistema'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Rules
    • Portal
    • Resources
    • Commerce
    • Clubs
  • OTServers
    • Discussion
    • Support
    • Tutorial
    • Download
    • Code Development
    • Contests and Events
    • Form Team
    • Advertise your Server
  • Tibia Bots
    • Discussion
  • League of Legends's Geral
  • League of Legends's Suporte
  • Jogos Gerais's Geral
  • Nto New Season's Tópicos
  • Fakes's Fakes
  • Tibia's Geral
  • Tibia's Notícias
  • Tibia's Media
  • Tibia's Life Thread
  • Gráficos's Geral
  • Gráficos's Tutoriais
  • Gráficos's Recursos
  • Gráficos's Aprendizagem & Recursos
  • Gráficos's Galeria
  • Gráficos's Duelos & Batalhas
  • Gráficos's Suporte
  • Desenvolvimento e Programação's Geral
  • Desenvolvimento e Programação's Tutoriais
  • Desenvolvimento e Programação's Trabalhos
  • Desenvolvimento e Programação's Suporte
  • Computação's Geral
  • Computação's Dicas e Tutoriais
  • Computação's Suporte
  • Roleplaying's Roleplaying
  • Playground's (Off-topic)
  • Divulgações's Tópicos

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Product Groups

  • Advertisements in Top
  • Advertisements In Signatures
  • Advertisements in Topics
  • Others Advertisements

Categories

  • Sales Section
    • Scripting Sales
    • Codes Sales
    • Mapping Sales
    • Websites Sales
    • Design/Sprites Sales
    • Bots Sales
  • Look Jobs
  • Looking for Freelancers
  • Team Formation

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 124 results

  1. Explicação: Este sistema proporciona ao jogador a compra de determinada cave por "X" tempo, cada conta poderá comprar somente 1 cave por vez... Lá o jogador poderá upar livremente. Também poderá chamar um amigo para upar na sua cave!! O sistema é o mais completo do mercado, vou estar falando do mesmo abaixo. OBS: Não esqueça de executar a query para funcionar!! Exclusive Cave System Features Dentro do pacote terá duas versões: versão 1 : É para vendar as caves em money(Gold's) Versão 2: É para vender as caves por items, por exemplo por moedas especiais como scarab coins(ID 2159) O sistema é feito por banco de dados O tempo da cave é mostrado em tempo real Você poderá chamar um amigo para sua cave e também remove-lo quando quiser. Existe um globalevents especifico para mostrar no default quando uma cave ficou disponível para venda! (Irá informar o nome da cave o preço dela!) Você poderá configurar a cave para vender por exemplo: - Level minimo e máximo! - Tempo de duração da cave - Se precisa ser premium account para comprar a cave! Quando o tempo da cave expira tanto o dono da cave como o friend invitado são removidos da cave, mesmo estando offline ou online! Comandos exclusivos: Comando para dono da cave: /mycave - Mostra informações da sua cave, como: - Nome da cave - Nome do seu amigo de cave(caso tiver invitado) - Quando tempo falta para expirar o tempo da sua cave /addcavefriend - Adiciona um amigo seu para que ele possa entrar e sai da sua cave quando quiser... Obs: Tem um exhausted de 1 hora(configurável) para não ficar toda hora tirando e colocando amigo na cave. /removecavefriend - Remove o seu amigo da sua cave(caso ele esteja dentro da cave tanto offline quanto online, ele é removido) /cavetime - Mostra quando tempo falta para expirar a sua cave Comando para amigo invitado da cave: /cavefriendtime - Mostra quando tempo falta para expirar a cave que ele invitado. /caveleave - Comando para ele se kikar da cave que está invitado. Comandos adicionais importante para todos: /cavelist -- Mostra em uma janela todas as caves do servidor /cave ID -- Neste comando você terá que usar o ID da cave que deseja saber as infor,ações, por exemplo: /cave 1 -- Irá mostrar em uma janela todas as informações desta cave, como: -Nome da cave -Preço da cave -Level Minimo e Level Maximo para comprar a cave -Se nesta cave precisa ser Premium Account para comprar ou não. /cavepurchase -- Filtra em uma janela somente as caves que estão disponíveis para compra. ---------------------------------------------------------------------------------------------------------------------------------------------------- Configurações: Vá na lib e irá se deparar com duas tabelas... Esta primeira tabela é onde você irá adicionar novas caves e atribuir as configurações, exemplo: exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}} } [1] -- Entre os colchetes é o ID da cave, favor colocar e ordem. name = "Demon Hunter" -- Entre as aspas "" Você atribui o nome da cave price = 1000 -- Preço em gps da sua cave(caso use a versão que vende em gps) level = {min = 8, max =30} -- Aqui voce coloca o level min e max que o jogador tem que ser para comprar a cave time = 4 -- Tempo em horas que o jogador poderá ficar na cave premium = false -- Se para comprar a cave terá que ser premium (false ou true) enter = {x = 284, y = 223, z = 7} -- Pos de entrada da cave from = {x = 275, y = 219, z = 5}, -- Aqui você deverá pegar a pos do começa da cave to = {x = 302, y = 240, z = 7} - - -- Aqui você deverá pegar a pos final da cave!(como se fosse um quadrado. e como adicionar mais caves por exemplo? Assim: exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}}, [3] = {name = "Ciclops Cave", price = 5000, level = {min = 20, max = 50}, time = 2, premium = true, enter = {x = 198, y = 320, z = 7}, from = {x = 200, y = 340, z = 7}, to = {x = 250, y = 390, z = 7}} } ---------------------------------------------------------------------------------------------------------------------------------------------------- explicando a segunda tabela: exclusives_caves_config = { storage = 547575, check = 547576, comand_add_exaust = {hours = 1, storage = 547577}, -- tempo para nao ficar toda hora tirando e colocando amigo mensagem = "[Exclusive Cave System] Você foi removido ou o tempo da %s cave expirou!", serve_mensagem = "[Exclusive Cave System] A cave %s acabou de ficar liberada para venda por %d Gold's, aproveitem para compra-la no NPC!" } storage -- nao mexer! check -- não mexer!! comand_add_exhausted -- é o tempo que jogador poderá voltar a invitar outro jogador, está configurado para 1 hora!! mensagem -- não mexa serve_mensagem -- não mexa tbm kkk Só baixar e executar as querys!! Cave System.rar
  2. Olá pessoal, vi que muitos estavam tentando resolver o problema de um "CityWar Anti-Entrosa".de tal Empresa... "O script só roda uma vez a war e depois ele TRAVA, ." Estava olhando o script aonde ocorria o problema e consegui resolver fiz vários testes e está rodando 100% sem erros! No arquivo tem o tutorial que ensina a instalar, se ajudei deixa um rep+ File:Link Scan: Link -- EDIT--- Summon que matava os player na war fazia cair o servidor, agora está 100% estável o script. Substituir o arquivo diretório talkactions/lib/war.lua @Way20 Créditos pela ajuda.
  3. 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
  4. Olá pessoa, hoje vim trazer pra vocês um script bem requisitado que inclusive é vendido por alguns scripters. Algumas versões "pioradas" dessse script podem ser encontradas em servidores cópias do Fox World porém nenhum desses scripts chegará aos pés desse daqui que foi arrumado por mim. Eu não sou o criador do Script, eu peguei qualquer um na internet e só fui arrumando e adicionando coisas que as pessoas reclamavam que não tinha. O cara que criou a versão que eu editei é esse daqui: Não vou me prolongar e nem falar mal da versão do Roksas, apenas saibam que eu editei ela praticamente inteira e que agora está 100%. Aqui tem um pequeno vídeo de como funciona o evento: Explicação: Gran Castle é um evento para ser feito sozinho ou com a guild, há um limite configurável no script de membros que podem entrar da mesma guild. Em dias determinados é aberto o evento e os players podem entrar ao falar com o NPC Melkrapo. Uma vez dentro do castelo os players batalharão para subir os andares e chegar até a Gran Tower, um monstro lendário que dará glória para aqueles que o derrotarem. Será que você é capaz? Instale no seu server e descubra! Um evento para redefinir o conceito de PVP e onde o seu maior inimigo serão seus semelhantes. Sem mais delongas vamos começar a instalar esse monstrinho.. porque ele é grande pra caralho. Agora crie um arquivo em creaturescripts\scripts chamado Gran Tower.lua e adicione o seguinte: em data\lib crie um arquivo chamado 046-Gran Tower.lua e adicione o seguinte dentro dele: Agora voltando aos creaturescripts crie um arquivo em scripts chamado Gran Aura.lua e adicione: E um arquivo chamado Barrier.lua na mesma pasta com o seguinte conteúdo: Agora em globalevents\globalevents.xml adicione a seguinte linha: <globalevent name="Gran Tower" interval="60" event="script" value="Gran Tower.lua"/> E adicione o script associado em globalevents\scripts com o nome de Gran Tower.lua: Agora na pasta monster procure o seu monsters.xml e adicione essas duas linhas: <monster name="Gran Tower" file="8.4/Gran Tower.xml"/> <monster name="Barrier" file="8.4/barrier.xml"/> Feito isso crie os monstros na pasta data\monster\8.4: O primeiro se chama barrier.xml e deverá conter: O segundo se chamará Gran Tower.xml e deverá conter: Agora vamos para NPC, vá em data\npc e crie um arquivo chamado Melkrapo.xml com o seguinte conteúdo: Agora em npc\scripts crie um arquivo chamado Melkrapo.lua e adicione o seguinte: Agora partindo pra spells vá em data\spells e adicione no spells.xml essas linhas: local function atk(cid) doSendDistanceShoot(pos5, pos6, 3) doSendDistanceShoot(pos7, pos8, 3) end local function atkself(cid) doSendDistanceShoot(pos9, selfpos, 3) doSendDistanceShoot(pos10, selfpos, 3) doSendDistanceShoot(pos11, selfpos, 3) doSendDistanceShoot(pos12, selfpos, 3) doSendDistanceShoot(pos13, selfpos, 3) doSendDistanceShoot(pos14, selfpos, 3) doSendDistanceShoot(pos15, selfpos, 3) doSendDistanceShoot(pos16, selfpos, 3) end local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, -500, -7000, -300, -9000, 200, 200, 100, 400) --- formula de dano que tira o ataque da gran tower local area = createCombatArea(AREA_TOWER) setCombatArea(combat, area) function onCastSpell(cid, var) selfpos = getCreaturePosition(cid) pos1 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos2 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos3 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos4 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos5 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos6 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos7 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos8 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos9 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos10 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos11 = {x=getCreaturePosition(cid).x + 1, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos12 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} pos13 = {x=getCreaturePosition(cid).x+ 1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} pos14 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} pos15 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} pos16 = {x=getCreaturePosition(cid).x + 1, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} doSendDistanceShoot(pos1, pos2, 3) doSendDistanceShoot(pos3, pos4, 3) addEvent(atkself, 350) addEvent(atk, 350) return doCombat(cid, combat, var) end Feito isso vá em spells\lib e no seu arquivo spells.lua adicione a seguinte area: AREA_TOWER = { {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 3, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1} } Agora nós vamos criar a talkaction que vai te permitir ligar o evento a hora que vc quiser. Vá em data\talkactions\talkactions.xml e adicione a seguinte linha: <talkaction hide="yes" words="/grantower" access="5" event="script" value="cleargrantower.lua"/> e em talkactions\scripts adicione o arquivo cleargrantower.lua com o seguinte conteúdo dentro: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, " ") if (tonumber(t[1]) == 1) then doPrepareGranTower() doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 0) then doCloseGranTower() doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 2) then print(getGlobalStorageValue(GRANTOWER.SAVELASTWINNER)) doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 3) then print(getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID)) doSendMagicEffect(getCreaturePosition(cid), 14) end return true end Agora vá em data\creaturescripts\scripts\login.lua e adicione essas linhas antes do ultimo return true: -----------GRAN CASTLE ----------- registerCreatureEvent(cid, "Gran Tower") registerCreatureEvent(cid, "Gran Aura") registerCreatureEvent(cid, "Gran Aura Stats") registerCreatureEvent(cid, "Gran Aura Logout") registerCreatureEvent(cid, "Gran Tower Target") Por último eu acho que eu usei uma das funções da minha lib nesse script, então se der qualquer erro eu recomendo que vcs instalem ela antes de me mandar o print do erro do servidor haha. (Pra instalar é só criar um arquivo em data.lib e coloca aquilo dentro, veja o tópico no meu perfil) Eu testei o script e tá funcionando perfeitamente, a única coisa que não consegui testar foi as guilds e como fica a aura qnd alguém da guild ganha mas acho que vcs podem fazer esse trabalhinho de testar pra mim... Pra finalizar gostaria de dizer que um membro do fórum pagou por esse script e ele não estava funcionando, não comprem scripts, venham ao fórum e peçam por eles. Que fique de lição. Todas as configurações são feitas pelo arquivo 046- Gran Aura que está na LIB (exceto as coisas relacionadas aos monstros/spells que eles tiram) mas está tudo bem explicadinho nos scripts e acho que vocês já sabem editar um monstro, não é mesmo? haha Espero que façam bom proveito, pretendo lançar uma versão 1.0 em breve juntamente com a versão 1.0 do Magnus Challenger. Fiquem ligados! e claro, se você gostou não faz mal clicar em "Gostei". Abraços do lobo. NOTA FINAL: Sei que a maioria dos caras que queriam esse script queriam pra servers 8.4 porém a forma de fazer a barreira ter essa modificação na outfit qnd estiver quebrando é só por statschange. É só modificar a source e adicionar a function onStatsChange do creaturescripts que vai pegar no seu server 8.4. Já vi server 7.6 com statschange então não creio que seja algo dificil.
  5. Salve salve galera do TK. Venho pedir ajuda para meu ot server... É um sistema de POINTS! aonde o player pode comprar itens vip com esses points. A versão que utilizo é do 8.60 TFS 0.3.6 Desde já muito obrigado! DOU +REP pra quem me der essa força ae
  6. Eai pessoal, criei esse tópico para postar o script do heal e do teleport do Gaz, em breve complemento com a magia (avisa e depois solta uma magia que da hs em qualquer um). HEAL - Se o life dele chega a 50k, ele solta um aviso, e depois de 5 segundos heala 300k. Crie um arquivo em creaturescripts/scripts/ com o nome heal_gaz.lua e coloque esse código: -- <event type="healthchange" name="HealGaz" script="heal_gaz.lua"/> local config = { life_ative = 50000, life_add = 300000, seconds_ative = 5, gStorage = 90702, } local function Uheal(cid) local gaz = Monster(cid) gaz:addHealth(config.life_add) gaz:say("Gaz'haragoth HEALS himself!", TALKTYPE_MONSTER_SAY) gaz:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED) Game.setStorageValue(config.gStorage, 0) end function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if attacker then if creature:getHealth() < config.life_ative and Game.getStorageValue(config.gStorage) < 1 then creature:say("Gaz'haragoth beginns to draw on the nightmares to HEAL himself!", TALKTYPE_MONSTER_SAY) addEvent(Uheal, 1000 * config.seconds_ative, creature.uid) Game.setStorageValue(config.gStorage, 1) end end return primaryDamage, primaryType, secondaryDamage, secondaryType end A tag que deve add ao creaturescript.xml esta como comentário no script, é só add. Depois para funcionar no Gaz, vá até o xml dele em monster e coloque em seu código: <script> <event name="HealGaz" /> </script> TELEPORT - Quem passa em cima do corpo dos summons do boss é teleportado para perto dele. Crie um arquivo em movements/scripts/ com o nome tp_gaz.lua e coloque esse código: -- <movevent event="StepIn" itemid="22455" script="teleport_gaz.lua"/> function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if player == nil then return false end local monster = Creature("Gaz'Haragoth") if monster then player:teleportTo(monster:getPosition()) else player:teleportTo(fromPosition) end return true end A tag que deve add ao movements.xml esta como comentário no script, é só add. Em breve a ultima atualização.
  7. Salve geral, recentemente fiz um Task System para meu servidor, então gostaria de compartilha ele com vocês, assim como outros scripts que fiz e gostaria de compartilhar. Bom, vamos ao que interessa. Informações!! Task Normal - Você 1x por vez, quantas vezes quiser, repetindo a task se também quiser. Task Diaria - Você faz uma vez por dia, não podendo repeti em quanto as 24 horas não terminar. Task Rank - É mostrado na descrição do player qual rank task ele possui. Task Rank Quest - Um extra desse task system é o piso task, será explicado na parte do script, leiam com atenção. Task Comandos - Comandos task, 1 para ver o progresso das suas task e outro para mostrar informações do seu personagem, como uma consulta, os comandos são: !task que mostra quais task você ta fazendo, tanto diaria quanto normal e !task me que mostrar informações do seu personagem, como rank, quantidade de pontos task e quantidade de pontos task rank. Well, o resto é surpresa, cabe você descobrir! xD Para não ficar só nas palavras, mostrarei algumas imagens, várias no caso: Removida, colocarei novas! Instalação!! Muito bem, chega de conversa, como instalar logo essa bagaça. Primeiramente vá em data/lib e abra o arquivo lib.lua e adicione: dofile('data/lib/task system.lua') Ainda na pasta lib crie um arquivo.lua chamado task system.lua e adicione esse code dentro: No final do tópico, ensinarei a configurar a lib. Agora vai em, data/npc e crie um arquivo.xml chamado task.xml e coloque esse code dentro: <?xml version="1.0" encoding="UTF-8"?> <npc name="NPC Task" script="task system.lua" walkinterval="0" floorchange="0"> <health now="150" max="150"/> <look type="430"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. I'm in charge of delivering missions to the players. Would you like to do a {normal} task, {daily} task, {receive} your reward from a task or {abandon} a task ? You can also see the {normal task list} and the {daily task list}."/> <parameter key="message_farewell" value="See you later." /> <parameter key="message_walkaway" value="See you later." /> </parameters> </npc> Ainda na pasta npc, entre na pasta scripts e crie um arquivo.lua chamado task system.lua e adicione esse code dentro: Agora vá em data/talkactions e abra o arquivo talkactions.xml e adicione a seguinte tag: <talkaction words="!task" separator=" " script="task system.lua" /> Ainda na pasta talkactions entre na pasta scripts e crie um arquivo.lua chamado task system.lua e adicione esse code dentro dele: Agora vá em data/creaturescripts e abra o arquivo creaturescripts.xl e adicione a seguinte tag: <event type="kill" name="tasksystem" script="task system.lua"/> Ainda na pasta creaturescripts entre na pasta scripts e crie um arquivo.lua chamado task system.lua e adicione esse code dentro dele: Ainda na pasta script abra o login.lua e adicione dentro: player:registerEvent("tasksystem") Agora vá em data/events/scripts e abra o arquivo player.lua, depois de aberto, antes de: self:sendTextMessage(MESSAGE_INFO_DESCR, description) adicione: if thing:isCreature() then if thing:isPlayer() then description = string.format("%s\nTask Rank: "..getRankTask(thing), description) end end Extra(Opcional)!! Extra, vá em data/movements/scripts e crie um arquivo chamado tile task.lua, depois de aberto, antes de: Vá em data/movements/movements.xml adicione: <movevent event="StepIn" actionid="XXXX" script="tile task.lua"/> Explicação: Com esse movements acima, você só poderá passar por o piso caso tenha pontos task necessário para passar, se ativar a opção, removePoints então a mesma quantidade de pontos necessária para passar, será removida, ao passar, caso esteja desativada, então apenas será necessário ter os pontos task para passar. Em XXXX coloque o actionid, e o actionid coloque no piso desejado! New Extra: Vá em data/movements/scripts e crie um arquivo chamado tile task2.lua e adicione o seguinte scripts: Vá em data/movements/movements.xml adicione: <movevent event="StepIn" actionid="XXXX" script="tile task2.lua"/> Explicação: Ao adicionar esse movements acima, você só poderá passar pelo piso caso seu rank task seja igual ou superior ao rank definido na variável, caso não seja igual e nem superior, não será possível passar. Configure na lib, a sequência de ranks de acordo com a sequência de rank da tabela de pontos, assim: A sequência precisa está igual e numeradas. Configurando!! task_monsters = { [1] = {name = "monster1", mons_list = {"monster_t2", "monster_t3"}, storage = 30000, amount = 20, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}}, [2] = {name = "monster2", mons_list = {"", ""}, storage = 30001, amount = 10, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 5}}}, [3] = {name = "monster3", mons_list = {"", ""}, storage = 30002, amount = 10, exp = 18000, pointsTask = {1, 1}, items = {{id = 2195, count = 1}, {id = 2160, count = 8}}}, [4] = {name = "monster4", mons_list = {"", ""}, storage = 30003, amount = 10, exp = 20000, pointsTask = {1, 1}, items = {{id = 2520, count = 1}, {id = 2160, count = 10}}} } task_daily = { [1] = {name = "monsterDay1", mons_list = {"monsterDay1_t2", "monsterDay1_t3"}, storage = 40000, amount = 10, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}}, [2] = {name = "monsterDay2", mons_list = {"", ""}, storage = 40001, amount = 10, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 5}}}, [3] = {name = "monsterDay3", mons_list = {"", ""}, storage = 40002, amount = 10, exp = 18000, pointsTask = {1, 1}, items = {{id = 2195, count = 1}, {id = 2160, count = 8}}}, [4] = {name = "monsterDay4", mons_list = {"", ""}, storage = 40003, amount = 10, exp = 20000, pointsTask = {1, 1}, items = {{id = 2520, count = 1}, {id = 2160, count = 10}}} } nome - Nome do monstro. mons_list - Nome dos monstro que são semelhantes e que matando eles também contará. Exemplo: name = "troll", mons_list = {"troll","frost troll","island troll"} e assim matando, troll, frost troll e island troll contará na task também. storage - É a storage que salva a quantidade de monstros já matados. amount - É a quantidade necessária de monstros matados para finalizar a task. exp - É a quantidade de Experiência que vai ganhar ao finalizar a task, caso não queira dar experiência, basta deixar em 0. pointsTask = {Task Points Que vai ganhar(Pontos usado no piso e etc..), Pontos Rank, que irá ganhar e aumentar seu rank.} items - Itens que o player vai ganhar, devem está tabelados, dentro da tabela item, adicione das tabelas contendo o id do item e count, quantidade de items que irá ganhar. Ex: items = {{id = 2157, count = 1}, {id = 2160, count = 3}} -- Aqui contém 2x tipos de itens, o 2157 e o 2160, e suas devidas quantidades que irá ganhar. items = {{id = 2157, count = 1}} -- Aqui só tem 1 tipo de item e a quantidade que vai ganhar. Adicione quantos itens quiser. O mesmo vale para as task diarias! Bom, é isso ae, qualquer duvida, crítica, sugestões, deixem ae, se precisa de suporte na instalação ou está com erro em algo estarei dando suporte, abraços e bom uso do sistema. É totalmente proibido leva meu sistema para outro site, blog ou fórum!
  8. TFS 0.4 TIBIA 8.6 você tenta jogar o item {VIP} é aparece essa mensagem alguém pra tentar criar esse sistema ??? obg:se estiver na área errada só mover obrigado ! ! !
  9. Olá pessoal, estou desenvolvendo esse sistema vip para TFS 1.3, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos. É só ir no arquivo data/lib/core/player.lua e adicionar esse código no começo do script: -- ALTER TABLE `accounts` ADD `vip_time` BIGINT(20) NOT NULL DEFAULT 0; -- player:getVipTime() function Player.getVipTime(self) local resultId = db.storeQuery("SELECT `vip_time` FROM `accounts` WHERE `id` = '".. self:getAccountId() .."';") local time = resultId ~= false and result.getNumber(resultId, "vip_time") or 0 result.free(resultId) return time end -- player:isVip() function Player.isVip(self) return self:getVipTime() > os.time() and true or false end -- player:addVipDays(days) function Player.addVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVipDays(days) function Player.removeVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:setVipDays(days) function Player.setVipDays(self, days) return db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVip() function Player.removeVip(self) db.query("UPDATE `accounts` SET `vip_time` = '0' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:sendVipDaysMessage() function Player.sendVipDaysMessage(self) if self:isVip() then local vipTime = self:getVipTime() - os.time() local vipDays = 1 + (math.floor(vipTime / 86400)) return self:getVipTime() ~= false and self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'You have '.. vipDays .. ' vip day(s) in your account.') end end -- player:checkVipLogin() function Player.checkVipLogin(self) if self:getVipTime() > 0 and not self:isVip() then return self:removeVip() and self:teleportTo(self:getTown():getTemplePosition()) end end As funções são: • player:getVipTime() - Retorna o valor da tabela vip_time (igual esta na database). • player:isVip() - Retorna se o player é vip ou não. • player:addVipDays(days) - Usa-se em algum script para para adicionar dias de vip ao player (parâmetro de entrada "days"). • player:removeVipDays(days) - Usa-se em algum script para para remover dias de vip do player (parâmetro de entrada "days"). • player:setVipDays(days) - Usa-se em algum script para para mudar os dias de vip do player (parâmetro de entrada "days"). • player:removeVip() - Usa-se em algum script para para remover todo tempo de vip do player. • player:sendVipDaysMessage() - Retorna uma mensagem no player mostrando os dias de vip que ainda restam ao player. • player:checkVipLogin() - Checa se a vip do player acabou, se sim teleporta ele para o templo. Qualquer dúvida ou erro/bug poste aqui.
  10. Olá, tudo bom? Peguei um sistema que o lobão criou e modifiquei para TFS 1.x (eu uso o 1.3 e funcionou certinho). Lembrando que todos os créditos são do @xWhiteWolf. Explicação: O sistema escolhe automáticamente, entre todas as salas de trainers, aquela que está vazia pra te alocar. Fiz em dois scripts de movements, um o action id no teleport para entrar na sala e outro no teleport para sair: trainer_entrar.lua: trainer_sair.lua: É isso pessoal, para melhor entendimento de como funciona ou como instalar veja o tópico do lobão: http://www.tibiaking.com/forum/forums/topic/68031-novo-sistema-de-trainer-036~04/
  11. Removido: *Boss Room *Rank Task *Prêmios para os 10 primeiros a terminar todas as tasks Adicionado: *Daily Task System (Sistema exclusivo de Task diario, podendo pegar 1x a cada 24 hrs, irei explicar mais depois.) *Task agora é por progresso, você não pode sair e voltar, terá que terminar a task 1 para avançar para a task 2, assim sucessivamente. *Task Points *Level para realizar a task *Nova talkaction que mostra uma janela de informações sobre o level da task, premios que irá receber, progresso, etc... *Items para entrega(Se o jogador deverá levar algum item junto com a quantidade de monstro morta) para finalizar a task *Sistema de look Task (Varia de acordo com a sua quantidade de Task Points, podendo ficar por exemplo como "Huntsman", "Ranger", etc...(alterável) *Mods e npc mais "clean", várias linhas removidas e o sistema está mais rápido *Vou Adicionar "scripts extras" Como: --> Tile que só passa quem tiver permissão depois de finalizar determinada quest --> Npc de Boss Room para entrar e enfrentar o monstro quem fez determinada quest [+] Resumo do Task system + Daily Task System [+] Task System: É o sistema de task "original", onde consiste em matar determinada quantidade de monstros(E entregar certo itens <- é configurável), para receber recompensas como Exp, Money e Items. Algumas mudanças do simple task 3.0 para o 4.0 foram: [+] O sistema agora é por progresso, isso quer dizer que você terá que ir terminando a quest para avançar para a seguinte. [+] O sistema Também recebeu uma alteração, fazendo com que as Tasks precisem que o jogador tenha um level determinado [+] A tabela para edição está mais fácil, fazendo com que você adicione ou remova monstros com mais tranquilidade, inclusive alterações das Rewards da Task. Daily Task System: É um sistema que desenvolvi para que os jogadores sempre estejam se comunicando com o npc de Task, no caso da Task Diaria, vária de acordo com o level do jogador, por exemplo: Jogadores entre level 6 ao 49 poderá cair em uma dessas 3 Task Diarias: Orcs, Tarantulas ou Wyverns Jogadores entre level 50 ao 79 poderá cair em uma dessas 3 Task Diarias: Dragons, Wailing Widows ou Ancient Scarabs E por ai vai, claro que você poderá aumentar as Task Diarias dependendo do level, eu fiz 3 para cada level que é pra postar, mas tudo isso você pode aumentar! Dependendo do seu servidor. E sim, você pode fazer a TASK "ORIGINAL" e a TASK "DIARIA" ao mesmo tempo! Ambas são distintas e possuem Rewards diferenciadas! No caso da Task diaria, levando em conta que você começou a fazer ela no dia 08/01 ás 20:00 Hrs, você tem até o dia 09/01 ás 20:00Hrs para termina-la e receber a recompensa, caso termine antes, a Task diaria só irá ficar disponível para repetição a partir desta mesma data 09/01 20:00 Hrs; [+] Caso você não termine a tempo, não tem problema, basta esperar este horário e começar uma nova Task. [+] Caso você começou a Daily Task e terminou antes desta data. mas por algum motivo esqueceu de entregar e a mesma passou do prazo, não tem importância, caso você tenha matado todos os monstros até 09/01 20:00 Hrs, você poderá entregar está Task em qualquer horário para receber suas Rewards e começar uma task a partir do momento em que você entregou! (INJUSTIÇA AQUI NÃO CARALHO). [+] Comandos Adicionais [+] /task -- Mostra as informações da sua Task Atual, como Nome da Task, Level, Rewards, Monstros que você poderá matar, Se tem que entregar algum Item junto, etc... /task daily -- É basicamente mostra a mesma informação da Task Principal, porém mostra também qual o prazo limite para entrega da task. /task counter -- É um comando que ATIVA ou DESATIVA o contador de monstros mortos na task no seu Channel. [+] Imagens [+] Cline neste link para ver algumas imagens da Task : http://imgur.com/a/eLIY3 ------------------------------------------------ // -------------------------------------------------------------- [+] Instalação do Sistema [+] Requisitos: Nível Médio de conhecimento em scripting LUA Pasta Mods Simple Task.xml https://pastebin.com/raw/P5hqMC3j NPC: Ludger.xml https://pastebin.com/raw/R56yLWHw simple_task.lua https://pastebin.com/raw/1mRzJ6aJ ---------------------------------------------- // ---------------------------------- [+] configuração [+ ] Task System Principal task_sys = { [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000} } [1] --> O número entre os colchetes [] significa a ordem da Task, como a Task é por progresso sempre começará no 1 e irá pro [2], assim sucessivamente. name --> É o nome da task que o jogador irá fazer. start --> é a storage que indicará se o jogador começou a Task monster_list ={} --> É o nome dos monstros em que o jogador deverá caçar para completar a Task level --> É o level necessário para dar inicio á Task count --> É o número de monstros que o jogador tem que matar para completar a Task points --> Aqui determinada quantos Task points o jogador irá receber ao completar a Task items = {} --> Aqui determinada se além de matar os monstros, o jogador terá que entregar item também! Caso tenha só colocar o {ITEM_ID, QUANTIDADE} EX: items = {{2173,1}{2160,10},{2493,2}} rewad --> Aqui determinada se o jogador irá receber itens ao terminar a Task, mesma formula do items /\ reward = {{2520,1},{2173,1}} exp --> Se o jogador irá receber Exp ao terminar a task. 0 ou quantidade de exp Money --> Se o jogador irá receber dinheiro ao terminar a task. 0 ou quantidade de dinheiro Daily Task System daily_task = { [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000} } Segue o padrão da Task original, exceto que não precisa entregar items para o npc! Como funciona A randomização de level de acordo com a Daily task? Procure por está tabela em MODS local t = { [{6,49}] = {1,3}, [{50,79}] = {4,6}, [{80,129}] = {7,9}, [{130,math.huge}] = {10,12} } entre as chaves e colchetes é o level do jogador para as Daily Task, Você pode adicionar quantas você quiser! Digamos que: [{6,49}] = {1,3} --> Quer dizer que entre o level 6 ao 49 o jogador poderá cair na Daily Task número 1(Orcs), 2(Tarantulas) ou 3(Wyvern)! [{50,79}] = {4,6} --> Quer dizer que entre o level 50 ao 79 o jogador poderá cair na Daily Task número 4(Dragons), 5(Wailing Widows) ou 6(Ancient Scarabs)! ... [{130,math.huge}] = {10,12} --> Quer dizer que o jogador level 130 ou MAIS poderá cair na Daily Task número 10(Undead Dragons), 11(HydraS) ou 12(Ghastly Dragons)! Look Rank System Procure por está tabela em MODS local ranks = { [{1, 20}] = "Huntsman", [{21, 50}] = "Ranger", [{51, 100}] = "Big Game Hunter", [{101, 200}] = "Trophy Hunter", [{201, math.huge}] = "Elite Hunter" } Entre 1-20 Task points o Rank será Huntsman Entre 21-50 Task posints o Rank será Ranger Entre 51-100 Task Points o rank será Big Game Hunter etc... Altere como quiser!
  12. TFS 0.4 / TIBIA 8.60 Exemplo Tenho o item x ID [123] ao da use é por em alguma parte do set exemplo [helmet,armor,legs,boots,armas,staff,shield] ele deixa +1 podendo deixar até +6 caso falhe volta 1 nível é o item ainda continua com o player [SEM CHANCE DE QUEBRAR O ITEM] o segundo item x ID [321] ao da use ele deixa do +7 até o +9 agora oque eu quero é que quando os items subir do +1 até o +9 se for item de Knight & Paladin ele vai subir [HP] se for item de Sorcerer & Druid vai subir [MANA] [AVISO] Não pode Usar o item 321, Primeiro no item só vai poder usar quando o item estiver +6
  13. Atualizado: 04/02/2017 Agora é por onKill ao invés de onDeath(estava bugando) Arrumado Stacking Item(vale quando começar a pegar o item) Max Slots de acordo com free ou premium Comandos adicionados: !autoloot --> Mostra uma janela com as informações do sistema !autoloot item name --> para adicionar ou remover itens na lista. !autoloot money --> Vai começar a coletar os gold automaticamente !autoloot clear --> limpar os slots da lista !autoloot on/off --> para ativar ou desativar o sistema obs: aconselho a usar no máximo 8 Slots para não bugar a storage. Credits: MatheusMkalo & Vodkart versão testada: 8.6, 9.1 Auto Loot.xml <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Loot System" version="1.0" author="Vodkart And Mkalo" contact="none.com" enabled="yes"> <config name="Loot_func"><![CDATA[ info = { AutomaticDeposit = true, BlockMonsters = {}, BlockItemsList = {2123,2515}, Max_Slots = {free = 2, premium = 5}, Storages = {27000,28001,28002} } function setPlayerStorageTable(cid, storage, tab) local tabstr = "&" for i,x in pairs(tab) do tabstr = tabstr .. i .. "," .. x .. ";" end setPlayerStorageValue(cid, storage, tabstr:sub(1, #tabstr-1)) end function getPlayerStorageTable(cid, storage) local tabstr = getPlayerStorageValue(cid, storage) local tab = {} if type(tabstr) ~= "string" then return {} end if tabstr:sub(1,1) ~= "&" then return {} end local tabstr = tabstr:sub(2, #tabstr) local a = string.explode(tabstr, ";") for i,x in pairs(a) do local b = string.explode(x, ",") tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2] end return tab end function isInTable(cid, item) for _,i in pairs(getPlayerStorageTable(cid, info.Storages[1]))do if tonumber(i) == tonumber(item) then return true end end return false end function addItemTable(cid, item) local x = {} for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i]) end if x ~= 0 then table.insert(x,tonumber(item)) setPlayerStorageTable(cid, info.Storages[1], x) else setPlayerStorageTable(cid, info.Storages[1], {item}) end end function removeItemTable(cid, item) local x = {} for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i]) end for i,v in ipairs(x) do if tonumber(v) == tonumber(item) then table.remove(x,i) end end return setPlayerStorageTable(cid, info.Storages[1], x) end function ShowItemsTabble(cid) local n,str = 0,"[+] Auto Loot Commands [+]\n\n!autoloot item name --> To add ou Remove item from list.\n!autoloot money --> To collect gold automatically.\n!autoloot clear --> To clear the list.\n!autoloot on/off --> To enable or disable the collecting of items in the system.\n\n[+] Auto Loot Info [+]\n\nSystem: "..(getPlayerStorageValue(cid, info.Storages[3]) <= 0 and "Activated" or "Disabled")..".\nGold Collecting: "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Activated" or "Disabled")..".\nBalance Total: ["..getPlayerBalance(cid).."] gp's.\nMaximum Slots: ["..#getPlayerStorageTable(cid, info.Storages[1]).."/"..(isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free).."]\n\n[+] Auto Loot Slots [+]\n\n" for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do n = n + 1 str = str.."Slot "..n.." - "..getItemNameById(getPlayerStorageTable(cid, info.Storages[1])[i]).."\n" end return doPlayerPopupFYI(cid, str) end function getContainerItems(containeruid) local items = {} local containers = {} if type(getContainerSize(containeruid)) ~= "number" then return false end for slot = 0, getContainerSize(containeruid)-1 do local item = getContainerItem(containeruid, slot) if item.itemid == 0 then break end if isContainer(item.uid) then table.insert(containers, item.uid) end table.insert(items, item) end if #containers > 0 then for i,x in ipairs(getContainerItems(containers[1])) do table.insert(items, x) end table.remove(containers, 1) end return items end function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function doPlayerAddItemStacking(cid, itemid, amount) -- revisado local item, _G = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid), 0 if #item > 0 then for _ ,x in pairs(item) do local ret = getThing(x) if ret.type < 100 then doTransformItem(ret.uid, itemid, ret.type+amount) if ret.type+amount > 100 then doPlayerAddItem(cid, itemid, ret.type+amount-100) end break else _G = _G+1 end end if _G == #item then doPlayerAddItem(cid, itemid, amount) end else return doPlayerAddItem(cid, itemid, amount) end end function AutomaticDeposit(cid,item,n) local deposit = item == tonumber(2160) and (n*10000) or tonumber(item) == 2152 and (n*100) or (n*1) return doPlayerDepositMoney(cid, deposit) end function corpseRetireItems(cid, pos) local check = false for i = 0, 255 do pos.stackpos = i tile = getTileThingByPos(pos) if tile.uid > 0 and isCorpse(tile.uid) then check = true break end end if check == true then local items = getContainerItems(tile.uid) for i,x in pairs(items) do if isInArray(getPlayerStorageTable(cid, info.Storages[1]), tonumber(x.itemid)) or getPlayerStorageValue(cid, info.Storages[2]) > 0 and isInArray({2148,2152,2160},tonumber(x.itemid)) then if isItemStackable(x.itemid) then doPlayerAddItemStacking(cid, x.itemid, x.type) if info.AutomaticDeposit == true and isInArray({2148,2152,2160}, tonumber(x.itemid)) then AutomaticDeposit(cid,x.itemid,x.type) end else doPlayerAddItem(cid, x.itemid) end doRemoveItem(x.uid) end end end end ]]></config> <event type="login" name="LootLogin" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "LootEventKIll") if isPremium(cid) and getPlayerStorageValue(cid, 27001) <= 0 then setPlayerStorageValue(cid, 27001, 1) elseif getPlayerStorageValue(cid, 27001) > 0 and not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Auto Loot] You premium is Over, Start a new list!") setPlayerStorageValue(cid, 27001, -1) setPlayerStorageValue(cid, info.Storages[1], -1) end return true end]]></event> <event type="kill" name="LootEventKIll" event="script"><![CDATA[ domodlib('Loot_func') function onKill(cid, target, lastHit) if isPlayer(cid) and getPlayerStorageValue(cid, info.Storages[3]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then addEvent(corpseRetireItems, 0, cid ,getThingPos(target)) end return true end]]></event> <talkaction words="!autoloot;/autoloot" event="buffer"><![CDATA[ domodlib('Loot_func') local param, slots = param:lower(), isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free if not param or param == "" then ShowItemsTabble(cid) return true elseif tonumber(param) then doPlayerSendCancel(cid, "enter commands: !autoloot item name [+] !autoloot clean [+] !autoloot money [+] !autoloot on/off") return true elseif isInArray({"clean","limpar", "clear"}, param) then setPlayerStorageValue(cid, info.Storages[1], -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Your list has been cleaned.") return true elseif isInArray({"start","stop","on","off"}, param) then setPlayerStorageValue(cid, info.Storages[3], getPlayerStorageValue(cid, info.Storages[3]) <= 0 and 1 or 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] "..(getPlayerStorageValue(cid, info.Storages[3]) > 0 and "Stopped" or "Started")..".") return true elseif isInArray({"money","gold","gps","dinheiro"}, param) then setPlayerStorageValue(cid, info.Storages[2], getPlayerStorageValue(cid, info.Storages[2]) <= 0 and 1 or 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Gold Colleting "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Activated" or "disabled")..".") return true end local item = getItemIdByName(param, false) if not item then doPlayerSendCancel(cid, "This item does not exist.") return true end local var = isInTable(cid, item) if isInArray({2148,2152,2160},item) then doPlayerSendCancel(cid, "Enter !autoloot money to add money in your list!") return true elseif isInArray(info.BlockItemsList, item) then doPlayerSendCancel(cid, "You can not add this item in the list!") return true elseif not var and #getPlayerStorageTable(cid, info.Storages[1]) >= slots then doPlayerSendCancel(cid, "max "..slots.." from auto loot") return true end if not var then addItemTable(cid, item) else removeItemTable(cid, item) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,not var and "you added the item "..param.." in the list" or "you removed the item "..param.." from the list") return true]]></talkaction> </mod> Configurações: versão que vende itens automaticamente
  14. Ola Amigos, Eu vi que ninguém ainda publicou o sistema Shiny Charm. Muitos servidores já o possuem. Eu crio um para o meu. Eu os compartilho. Voces precisam da função onSpawn em creaturescript, na atualidade axo que devem ter todos em seu servidor. Tambem precisa a funcao getSpectators, eu tenia adicionada nas sources default do meu distro (TFS 0.4) Edite seu spawn.lua. nas primeras lineas local shinysSpawn = { "Dodrio", "Rhydon", "Ariados", "Politoed", "Espeon", "Umbreon", "Stantler", "Mr. Mime", "Crobat", "Magmar", "Venusaur", "Charizard", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate" } local function doShiny(cid) if not isCreature(cid) then return true end local name2, pos2 = "Shiny ".. getCreatureName(cid), getThingPos(cid) doRemoveCreature(cid) doSendMagicEffect(pos2, 18) local shi = doCreateMonster(name2, pos2, false, true) setSto(shi, 74469, 1) end function onSpawn(cid) local name = getCreatureName(cid) if not isSummon(cid) and pokes[name] then if isInArray(shinysSpawn, name) then if getSto(cid, 74469)<=0 and getSto(cid, 22546)<=0 and getSto(cid, 637500)<=0 and getSto(cid,"golden")<=0 then if math.random(1, 120) == 1 then local list = getSpectators(getThingPos(cid), 20, 20, false) for i = 1, #list do if isPlayer(list[i]) and (getSto(list[i],13081)>=1 or getSto(list[i],13082)>=1) then sendMsg(list[i],27,"[Shiny Charm] Acaba de nacer un Shiny "..name.."! No fue por causa de Shiny Charm!") end end doShiny(cid) return true else --check for Charms local ch=1 local list = getSpectators(getThingPos(cid), 20, 20, false) for i = 1, #list do if isPlayer(list[i]) and (getSto(list[i],13081)>=1 or getSto(list[i],13082)>=1) then ch = ch + 1 if getSto(list[i],13082)>=1 then ch = ch+1 end--2x super if math.random(1, 120) <=ch then doShiny(cid) sendMsg(list[i],27,"[Shiny Charm] Felicidades grande aventurero! Nacio un Shiny "..name.." cerca tuyo por causa de tu Shiny Charm!") return true end end end ------ end end end Explicação: Basicamente, esta edição é o que está perguntando se há jogadores ao redor do Pokemon selvagem no nascimento. Se houver algum, peça para cada um deles se eles tiverem um feitiço brilhante Normal ou Especial. Se houver algum, então existe a possibilidade de que, se falhar na primeira vez que fique brilhante, ele pede novamente para cada jogador que encontrar. O encanto brilhante dos jogadores pode ser acumulado, se houver 3 jogadores ao redor de um Charizard (exemplo), haverá mais chances de ele se tornar Brilhante (já que ele passa pelo ciclo 3 vezes). Eu espero que você entenda. Edits: voce pode mudar aki no siguiente texto, 20, 20 e a distancia em SQM que o pokemon vai procurar jogadores (no mesmo andar na uma hunt). 13081 e 13082 sao storages do shiny charm e shiny charm Especial (doble chance do normal) (1, 120) o rate do aparicao do Shiny selvagem. local ch = 1 e rate extra do shiny charm normal, e ch=ch+1 sumaria o doble do normal (2). Se o random do 1,120 e menor o iguai que ch, entao shiny selvagen aparece. local ch=1 local list = getSpectators(getThingPos(cid), 20, 20, false) for i = 1, #list do if isPlayer(list[i]) and (getSto(list[i],13081)>=1 or getSto(list[i],13082)>=1) then ch = ch + 1 if getSto(list[i],13082)>=1 then ch = ch+1 end--2x super if math.random(1, 120) <=ch then Peço desculpas pelo meu português, a verdade é que não sou Br, sou chileno. Eu envio uma saudação a todos! Créditos: Chavoz (eu) Voce pode publicar o sistema no outros forum, mais lembre dos Creditos pfv! Eu convido você a experimentar meu servidor do Pokemon, ta Online. O site é Pokexmortal.com. Tenho sistemas varios como Market, Pokebar, Cast, Etc.
  15. O sistema é feito por Item que adiciona dias de "auto loot time" para a conta e só com esse "auto loot time" para funcionar o sistema. Também: Max Slots de acordo com free ou premium Dias de auto loot são acumulativos Tudo em único MODS! Fácil instalação! Comandos adicionados: !autoloot --> Mostra uma janela com as informações do sistema !autoloot item name --> para adicionar ou remover itens na lista. !autoloot money --> Vai começar a coletar os gold automaticamente !autoloot clear --> limpar os slots da lista !autoloot on/off --> para ativar ou desativar o sistema obs: aconselho a usar no máximo 8 Slots para não bugar a storage. execute no seu banco de dados: ALTER TABLE `accounts` ADD loot_time INT(15) NOT NULL DEFAULT 0; AutoLootItem.xml <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Loot System" version="1.0" author="Vodkart And Mkalo" contact="none.com" enabled="yes"> <config name="Loot_func"><![CDATA[ info = { AutomaticDeposit = true, BlockMonsters = {}, BlockItemsList = {2123,2515}, Max_Slots = {free = 2, premium = 5}, Storages = {27000,28001,28002} } function getAutoLootTime(cid) return db.getResult("SELECT `loot_time` FROM `accounts` WHERE `id` = "..getPlayerAccountId(cid)):getDataInt("loot_time") end function setAutoLootTime(cid, time) return db.executeQuery("UPDATE `accounts` SET `loot_time` = "..time.." WHERE `id` = "..getPlayerAccountId(cid)) end function getAutoLootDays(cid) local days = math.ceil((getAutoLootTime(cid) - os.time())/(86400)) return days <= 0 and 0 or days end function addAutoLootDays(cid, days) local add = (days <= 0 and 1 or days)*86400 local time = getAutoLootDays(cid) == 0 and (os.time() + add) or (getAutoLootTime(cid) + add) return setAutoLootTime(cid, time) end function setPlayerStorageTable(cid, storage, tab) local tabstr = "&" for i,x in pairs(tab) do tabstr = tabstr .. i .. "," .. x .. ";" end setPlayerStorageValue(cid, storage, tabstr:sub(1, #tabstr-1)) end function getPlayerStorageTable(cid, storage) local tabstr = getPlayerStorageValue(cid, storage) local tab = {} if type(tabstr) ~= "string" then return {} end if tabstr:sub(1,1) ~= "&" then return {} end local tabstr = tabstr:sub(2, #tabstr) local a = string.explode(tabstr, ";") for i,x in pairs(a) do local b = string.explode(x, ",") tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2] end return tab end function isInTable(cid, item) for _,i in pairs(getPlayerStorageTable(cid, info.Storages[1]))do if tonumber(i) == tonumber(item) then return true end end return false end function addItemTable(cid, item) local x = {} for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i]) end if x ~= 0 then table.insert(x,tonumber(item)) setPlayerStorageTable(cid, info.Storages[1], x) else setPlayerStorageTable(cid, info.Storages[1], {item}) end end function removeItemTable(cid, item) local x = {} for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do table.insert(x,getPlayerStorageTable(cid, info.Storages[1])[i]) end for i,v in ipairs(x) do if tonumber(v) == tonumber(item) then table.remove(x,i) end end return setPlayerStorageTable(cid, info.Storages[1], x) end function ShowItemsTabble(cid) local n,str = 0,"[+] Auto Loot Commands [+]\n\n!autoloot item name --> To add ou Remove item from list.\n!autoloot money --> To collect gold automatically.\n!autoloot clear --> To clear the list.\n!autoloot on/off --> To enable or disable the collecting of items in the system.\n\n[+] Auto Loot Info [+]\n\nSystem: "..(getPlayerStorageValue(cid, info.Storages[3]) <= 0 and "Activated" or "Disabled")..".\nTime: "..(getAutoLootTime(cid) > 0 and "you have ["..getAutoLootDays(cid).."] days --> ends in "..os.date("%d/%m/%y %X", getAutoLootTime(cid)).."." or "no have Auto Loot time.").."\nGold Collecting: "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Activated" or "Disabled")..".\nBalance Total: ["..getPlayerBalance(cid).."] gp's.\nMaximum Slots: ["..#getPlayerStorageTable(cid, info.Storages[1]).."/"..(isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free).."]\n\n[+] Auto Loot Slots [+]\n\n" for i = 1,#getPlayerStorageTable(cid, info.Storages[1]) do n = n + 1 str = str.."Slot "..n.." - "..getItemNameById(getPlayerStorageTable(cid, info.Storages[1])[i]).."\n" end return doPlayerPopupFYI(cid, str) end function getContainerItems(containeruid) local items = {} local containers = {} if type(getContainerSize(containeruid)) ~= "number" then return false end for slot = 0, getContainerSize(containeruid)-1 do local item = getContainerItem(containeruid, slot) if item.itemid == 0 then break end if isContainer(item.uid) then table.insert(containers, item.uid) end table.insert(items, item) end if #containers > 0 then for i,x in ipairs(getContainerItems(containers[1])) do table.insert(items, x) end table.remove(containers, 1) end return items end function getItemsInContainerById(container, itemid) -- Function By Kydrai local items = {} if isContainer(container) and getContainerSize(container) > 0 then for slot=0, (getContainerSize(container)-1) do local item = getContainerItem(container, slot) if isContainer(item.uid) then local itemsbag = getItemsInContainerById(item.uid, itemid) for i=0, #itemsbag do table.insert(items, itemsbag[i]) end else if itemid == item.itemid then table.insert(items, item.uid) end end end end return items end function doPlayerAddItemStacking(cid, itemid, amount) -- revisado local item, _G = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid), 0 if #item > 0 then for _ ,x in pairs(item) do local ret = getThing(x) if ret.type < 100 then doTransformItem(ret.uid, itemid, ret.type+amount) if ret.type+amount > 100 then doPlayerAddItem(cid, itemid, ret.type+amount-100) end break else _G = _G+1 end end if _G == #item then doPlayerAddItem(cid, itemid, amount) end else return doPlayerAddItem(cid, itemid, amount) end end function AutomaticDeposit(cid,item,n) local deposit = item == tonumber(2160) and (n*10000) or tonumber(item) == 2152 and (n*100) or (n*1) return doPlayerDepositMoney(cid, deposit) end function corpseRetireItems(cid, pos) local check = false for i = 0, 255 do pos.stackpos = i tile = getTileThingByPos(pos) if tile.uid > 0 and isCorpse(tile.uid) then check = true break end end if check == true then local items = getContainerItems(tile.uid) for i,x in pairs(items) do if isInArray(getPlayerStorageTable(cid, info.Storages[1]), tonumber(x.itemid)) or getPlayerStorageValue(cid, info.Storages[2]) > 0 and isInArray({2148,2152,2160},tonumber(x.itemid)) then if isItemStackable(x.itemid) then doPlayerAddItemStacking(cid, x.itemid, x.type) if info.AutomaticDeposit == true and isInArray({2148,2152,2160}, tonumber(x.itemid)) then AutomaticDeposit(cid,x.itemid,x.type) end else doPlayerAddItem(cid, x.itemid) end doRemoveItem(x.uid) end end end end ]]></config> <event type="login" name="LootLogin" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "LootEventKIll") if isPremium(cid) and getPlayerStorageValue(cid, 27001) <= 0 then setPlayerStorageValue(cid, 27001, 1) elseif getPlayerStorageValue(cid, 27001) > 0 and not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "[Auto Loot] You premium is Over, Start a new list!") setPlayerStorageValue(cid, 27001, -1) setPlayerStorageValue(cid, info.Storages[1], -1) end return true end]]></event> <event type="kill" name="LootEventKIll" event="script"><![CDATA[ domodlib('Loot_func') function onKill(cid, target, lastHit) if isPlayer(cid) and getAutoLootDays(cid) > 0 and getPlayerStorageValue(cid, info.Storages[3]) <= 0 and isMonster(target) and not isInArray(info.BlockMonsters, getCreatureName(target):lower()) then addEvent(corpseRetireItems, 0, cid ,getThingPos(target)) end return true end]]></event> <talkaction words="!autoloot;/autoloot" event="buffer"><![CDATA[ domodlib('Loot_func') local param, slots = param:lower(), isPremium(cid) and info.Max_Slots.premium or info.Max_Slots.free if not param or param == "" then ShowItemsTabble(cid) return true elseif tonumber(param) then doPlayerSendCancel(cid, "enter commands: !autoloot item name [+] !autoloot clean [+] !autoloot money [+] !autoloot on/off") return true elseif isInArray({"clean","limpar", "clear"}, param) then setPlayerStorageValue(cid, info.Storages[1], -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Your list has been cleaned.") return true elseif isInArray({"start","stop","on","off"}, param) then setPlayerStorageValue(cid, info.Storages[3], getPlayerStorageValue(cid, info.Storages[3]) <= 0 and 1 or 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] "..(getPlayerStorageValue(cid, info.Storages[3]) > 0 and "Stopped" or "Started")..".") return true elseif isInArray({"money","gold","gps","dinheiro"}, param) then setPlayerStorageValue(cid, info.Storages[2], getPlayerStorageValue(cid, info.Storages[2]) <= 0 and 1 or 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Auto Loot] Gold Colleting "..(getPlayerStorageValue(cid, info.Storages[2]) > 0 and "Activated" or "disabled")..".") return true end local item = getItemIdByName(param, false) if not item then doPlayerSendTextMessage(cid, MESSAGE_FIRST, "This item does not exist.") return true end local var = isInTable(cid, item) if isInArray({2148,2152,2160},item) then doPlayerSendTextMessage(cid, MESSAGE_FIRST, "Enter !autoloot money to add money in your list!") return true elseif isInArray(info.BlockItemsList, item) then doPlayerSendTextMessage(cid, MESSAGE_FIRST, "You can not add this item in the list!") return true elseif not var and #getPlayerStorageTable(cid, info.Storages[1]) >= slots then doPlayerSendTextMessage(cid, MESSAGE_FIRST, "max "..slots.." from auto loot") return true end if not var then addItemTable(cid, item) else removeItemTable(cid, item) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,not var and "you added the item "..param.." in the list" or "you removed the item "..param.." from the list") return true]]></talkaction> <action itemid="7703" event="script"><![CDATA[ domodlib('Loot_func') function onUse(cid, item, fromPosition, itemEx, toPosition) local days = 3 addAutoLootDays(cid, days) doSendMagicEffect(getCreaturePosition(cid), 29) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You received "..days.." days of AutoLoot, you have "..getAutoLootDays(cid).." auto loot days.") doRemoveItem(item.uid) return true end]]></action> </mod> Bbs: Caso seu servidor seja em mysql, troque 'db.executeQuery' por 'db.query' Para editar o sistema: <action itemid="7703" event="script"><![CDATA[ 7703 é o item que ao clicar vai dar os dias de auto loot. local days = 3 é a quantidade de dias que será adicionado na conta.
  16. Alguém poderia me ajudar em como fazer o personagem com 2 armas em deves de 1 Alguém pode me ajudar
  17. Olá galera da TK, trago uma ideia para os veteranos de plantão caso eu esteja postando em tópico errado, ja peço desculpas e pode mover esse tópico inicialmente sou programador, mais não tenho conhecimento em todas função e código que o otserver pode suporta por isso peço ajuda a ideia inicial é criar um sistema no qual pode evitar vários ots caírem em falência devido os pelegos que nele envolve. Como assim? Hoje em dia os OTs server são visto como um fonte de diversão no os jogadores tem em mente que vai logar, forma o seu time e depois dominar o mundo , são bonitos motivos porem muito outros jogadores querem tornar o seu Ots um servidor serio um local para eles se diverti e sempre esta presente fazendo amizades e sempre esta na emoção de Quest cada vez mais difíceis, neste caso vem aquele time de pelego e começa a matar os jogadores que nem estão neste clima, derrotando todo o trabalho de meses ajeitando o seu OT que tinha um ideal transformando ele numa plataforma de pvp sem limites, contudo vários players abandonando o seu OT ate chegar o dia de resetar ou ate mesmo encerrar. principio basico da ideia é criar um mundo onde inicial é não pvp ao mesmo tempo pvp veja abaixo a ideologia que tive quero ajudar a montar esse sistema pois sei que os veteranos que conhece cada função que o OT possuir e saberá como ajudar vamos lá. 1° Inicialmente o mundo seria um mundo não-pvp aquele jogadores que queria pelegar, fazer o famoso mata-mata precisaria de uma permissão ou items que permita ele mata outro players que esteja com a mesma função ativa, neste modo aqueles q não querem ser envolvido nos pelegos não teria nenhum problema de continua sua vida em jogo 2° Iniciando a troca dos Modos a forma de transforma um modo de jogo pode ser através de comandos ou items, o jogador que queria ser pvp ele precisaria ativar o comando ou items a parti dai ele se torna um jogador pvp exemplo um jogador chegou um certo level e quer sai ao seu pelego de boa com outro time basta ativa a função, ao ativa ele terá um tempo nesse modo, onde o tempo sera configurado ao administrador do ot para cada kill que o jogador do pelego faça ele aumenta esse tempo de forma também que seja configurado o aumento do tempo por kill, assim tornando mais justo para ambos caso o jogador esteja com skulls seja ela qual for, o tempo neste caso não mudaria ate que todas as skull fosse removidas, a parti dai o tempo para volta ao não-pvp voltaria a desce para sabe se o jogador tem a funcao pvp ativada em seu look, teria que ter uma tag por exemplo: (modo pvp on), assim todos vai sabe que aquele jogador é PVP caso o jogador cansou de ser caçado ou queria continua a jogar sem pelego ele precisaria desativa a função de forma que seja configurada, por um valor e tempo determinado pelo administrador e o que seria pra desativar os jogadores PVP não teria como matar outros players que não tive com o mesmo modo ativo, a não ser por traps a ideia seria basicamente esse de forma os OTs servers seria algo muito melhor e um ambiente para todos. aguardo comunicações sobre tal sistema e vou esta periodicamente acompanhando o tópico para esse desenvolvimento e anexando o inicio do trabalho vlw galera do TK Tambem quero compartilhar algo com vocês para o seu OT logicamente ideia de melhorias podem ser aplicada esse é uma TAG de top level do servidor, que ja tem ai na TK, porem foi feita para ser TFS1.2 Crie um arquivo no seu creaturescripts com o nome: topeffect.lua local function getHighestPlayer() local resultId = db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 5") if not resultId then return false end return result.getDataString(resultId, "name") end local config = { interval = 5, effect = CONST_ME_POFF } local function sendEffectTopPlayer(cid) local player = Player(cid) if not player then return true end if config.effect then -- player:getPosition():sendMagicEffect(math.random(CONST_ME_FIREWORK_YELLOW, CONST_ME_FIREWORK_BLUE)) player:say('[TOP]', TALKTYPE_MONSTER_SAY) --player:getPosition():sendMagicEffect(config.effect) addEvent(sendEffectTopPlayer, config.interval * 1000, cid) return true end end function onLogin(player) if player:getName() ~= getHighestPlayer() then return true end sendEffectTopPlayer(player:getId()) return true end function onAdvance(player) if player:getName() ~= getHighestPlayer() then return true end sendEffectTopPlayer(player:getId()) return true end depois adicione isso em seu creaturescripts.xml <event type="login" name="TopEffect" script="topeffect.lua"/> <event type="advance" name="CheckTop" script="topeffect.lua"/> esse scripts ta básico aceito ideias de melhorias, mais ta muito legal e espero que gostem
  18. #Introdução Reparei que muitas pessoas estão atrás desse sistema que o DBOBR e NTOBR usa, e atualmente o VitorSubhi postou um, porém é necessário modificar as sources. Apesar de achar o dele bem melhor, estarei deixando este meu sistema(não é necessário mexer nas sources). #Funcionamente O jogador vai até um NPC e compra um papel, após ter comprado ele pode estar dando trade nesse papel e negociando com algum jogador em troca de qualquer item. Ao finalizar a negociação, os points são transferidos/removidos(caso houver points na conta). Também é possivel comprar o papel por comando, estarei disponibilizando ambos para vocês. #Alguns prints: Estarei deixando o script para vocês em inglês, modifique como quiser Então vamos lá... #Instalação Em data/lib crie um arquivo chamado tradepoints.lua cole isto dentro: Em data/creaturescripts/tradepoints.lua: TAG: <event type="tradeaccept" name="Trade_Points" event="script" value="tradepoints.lua"/> <event type="traderequest" name="Trade_Points_Request" event="script" value="tradepoints.lua"/> login.lua registerCreatureEvent(cid, "Trade_Points") registerCreatureEvent(cid, "Trade_Points_Request") NPC XML: <?xml version="1.0" encoding="UTF-8"?> <npc name="Frodo" script="data/npc/scripts/trade_points.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="275" head="114" body="113" legs="113" feet="113" corpse="2212"/> <parameters> <parameter key="module_shop" value="1" /> <parameter key="message_greet" value="Hello |PLAYERNAME|. I sell some utensils and Premium Points Transfer for you to transfer points to other players, remember to buy use '10' to 10 points." /> </parameters> </npc> Data/npc/scripts/trade_points.lua: Caso queira que a compra do papel seja feita por talkactions, aqui está: Prontinho xD Agradecimentos ao @lordzetros por ajudar na função scanContainer. obs: testado em TFS 0.4
  19. UPDATE 05/02/2019: - Colocado exhauted na venda de items para não bugar a venda de itens com elf bot! Descrição do Arquivo *Sobre o Sistema* Labia System é um sistema que proporciona ao jogador a capacidade de aprimorar sua habilidade de venda, aumentando assim sua Labia Skill e obtendo maiores lucros em futuras vendas de itens. O Skill de Labia, pode ser upado enquanto Free ou Premmy Account em qualquer level que você queira! Basta vender itens no NPC Soya Master. Lembrando que sendo free, sua lábia pode ser upada apenas até skill 90. Já sendo premmium até a lábia 120. Se o player for premmy account, de repente ficar free... sua lábia cai para 90, e todos os itens serão vendidos com preços avaliados dentro dessa lábia! Quanto mais caro for, o item vendido, maior será a porcentagem de lábia upada. *Exclusividade* O Sistema também conta com uma configuração exclusiva, tendo a possibilidade de jogadores Premmy account possam upar mais rapído a sua Skill de Labia! Sem falar no comando inovador: !labia info -- Ensinando ao jogador como usar o sistema !labia level -- Mostrando ao jogador quanto de skill Try falta para o próximo level!! *Benefícios da Lábia* Quanto maior for sua Labia Skill, maior será o valor pago pelas NPC Soya Master em troca do seu item ! Lembrando que, este é um benefício apenas, para premiuns!, Desta maneira, jogadores premiuns com labia skill alta, conseguem maiores lucros ao vender seus itens! O valor do item varia de acordo com a Labia upada! Quanto mais skill, mais lucro na venda! A maior Labia alcançada é você que decide nas suas configurações! por exemplo no RPG Brasil a é Skill 120. *exemplo da fórmula para cálculos do valor do item de acordo com uma Lábia desejada* P = PI + PI * 0,025 * (L / 2) Onde: P ~ Preço que o item será vendido na lábia L. PI ~ Preço Inicial do item, preço do item para um lábia 0. L ~ Labia em que o item será vendido! Vale lembrar que se L for um nº ímpar, deve-se reduzir uma unidade deste número, ou seja, 13 vira 12, 27 vira 26, 91 vira 90, nesse esquema, apenas se L for í­mpar! Exemplo: Preço de uma Golden Legs na lábia 95: P = PI + PI * 0,025 * (L / 2) Como L é í­mpar (95), reduzimos uma unidade, 95 vira 94: P = 48000 + 48000 * 0,025 * (94 / 2) P = 48000 + 48000 * 0,025 * 47 P = 48000 + 56400 P = 104400 GP's ou 104,4 k Sistema Labia.rar
  20. Eu gostaria de uma ajuda em um script, como eu poderia fazer pra quando o jogador usar um item "X" ele invocar um monstro "X" ? Sou novo nessas coisas de script então não manjo muito bem, se puderem me ajudar com isso eu serei grato!
  21. Resumo: Para quem já jogou league of legends, o sistema é "parecido" com o Invite Friends, e para quem não jogou irei dar uma breve descrição sobre o sistema. Descrição: O sistema oferece algumas premiações como: Itens, Premium Days, Montarias, Premium Points(para site) e Outfits. Claro que isso tudo é configurável. A ideia principal do sistema foi que essas premiações fossem exclusivas do sistema, digamos, que os jogadores só fossem recompensados e tivessem certas montarias/outfits se ele atingisse num número "X" de pontos por ter ajudado seu servidor a crescer! Como todo mundo almeja algo exclusivo e difícil de ser obtido, iria instigar os jogadores a usar o sistema e convidar seus amigos para o servidor! Como Funciona o Sistema? O sistema foi planejado para que jogadores "espertinhos" não burlassem o sistema e acontece da seguinte maneira: Temos o jogador João e a jogadora Maria: Maria necessita ser level 30 ou menor que 30(Configurável) para utilizar uma talkactions e dizer por quem foi invitada para o servidor, vamos supor que João a convidou Maria para jogar, João por sua vez necessita também ter um level avançado, digamos 50 ou superior(Configurável). Feito com sucesso o uso do sistema, ele funciona da seguinte maneira: OBS: Você pode dizer o nome do jogador mesmo que ele esteja OFFLINE! OBS2: Um ou mais Players podem ser invitador pelo MESMO JOGADOR! ENTÃO QUANTO MAIS PLAYER VOCÊ CHAMAR, MAIS FÁCIL DE RECEBER PONTOS E PREMIAÇÕES O jogador invitado, no caso o João, teria que atingir um número "X" de pontos para receber premiações, por exemplo: * Com 10 Pontos jogão recebe: Itens * Com 25 Pontos jogão recebe: Itens e Premium Points * Com 50 Pontos jogão recebe: Itens e Montaria * Com 100 Pontos jogão recebe: Itens, Premium Points, Premium Days e Outifit (Claro que isso é tudo configurável em uma Tabela) E como recebo Recebo esses Pontos VODKART SEU FILHO DA PUTA! Se lembra que João Convidou Maria para Jogar? Então... Maria tem que atingir certos leveis para que João receba esses pontos! Por exemplo a tabela do sistema: levels_win = { [50] = 5, [80] = 6, [100] = 8, [150] = 10 }, Se Maria atingir level 50, João recebe 5 pontos Se Maria atingir level 80, João recebe 6 pontos Etc... Claro que isso tudo é acumulativo! E sabe o que mais? João recebe Pontos mesmo se estiver ONLINE ou OFFLINE! Sem mais delongas, Vamos instalar o sistema! Instalando o Sistema: data\creaturescripts\scripts InviteFriends.lua function onLogin(player) player:registerEvent("FriendsPoints") if player:getStorageValue(_invite_friends.storages[1]) < 0 then player:setStorageValue(_invite_friends.storages[1], 0) player:setStorageValue(_invite_friends.storages[4], 0) end if getInvitePoints(player) > 0 then local acc = player:getAccountId() local FriendPoints, CheckPoints = getInvitePoints(player), player:getStorageValue(_invite_friends.storages[4]) for vod, ka in pairs(_invite_friends.rewards) do local str = "" if FriendPoints >= vod and CheckPoints < vod then str = str.."--> Invite Players System <--\n\nVocê acaba de receber algumas recompensas:\n\nItems: \n"..getItemsFromList(ka.items)..".\n\n" if ka.p_days > 0 then player:addPremiumDays(ka.p_days) str = str.."Premium Days:\n"..ka.p_days.." Premium Days." end if ka.p_points > 0 then db.executeQuery('UPDATE accounts SET premium_points=premium_points+' .. ka.p_points ..' WHERE id=' .. acc) str = str.."Premium Points:\n"..ka.p_points.." Premium Points." end if ka.out[1] > 0 then player:addOutfitAddon(player:getSex() == PLAYERSEX_FEMALE and ka.out[1] or ka.out[2], 3) str = str.."[New Outfit]\nRecebeu uma Nova Outfit." end if ka.mount_id > 0 then player:addMount(ka.mount_id) str = str.."[New Outfit]\nRecebeu uma Nova Montaria." end player:setStorageValue(_invite_friends.storages[4], FriendPoints) local town_id = player:getTown():getId() if #ka.items > 0 then local parcel = player:getDepotChest(town_id, true):addItem(2595) for _, i_i in ipairs(ka.items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then parcel:addItem(item, amount) else for i = 1, amount do parcel:addItem(item, 1) end end end end local townid = player:getTown():getId() local letter = player:getDepotChest(town_id, true):addItem(2598, 1, true, 1) letter:setAttribute(ITEM_ATTRIBUTE_WRITER, "[+] Invite Players System [+]") letter:setAttribute(ITEM_ATTRIBUTE_TEXT, str) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE,"[Invite Players System] Você Recebeu algumas premiações por estar convidando jogadores para o servidor, Por favor conferir os itens no Depot.") end end end return true end function onAdvance(player, skill, oldlevel, newlevel) if (skill == SKILL__LEVEL) then if hasInviteFriend(player) and player:getStorageValue(_invite_friends.storages[3]) < newlevel and _invite_friends.levels_win[newlevel] then local f_name, points = getNameFriend(player), _invite_friends.levels_win[newlevel] player:setStorageValue(_invite_friends.storages[3], newlevel) addInvitePoints(f_name, points) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "[Invite Friends] você atingiu o level "..newlevel.." e o seu amigou "..f_name.." recebeu "..points.." Friend Points. Obrigado!") end end return true end creaturescripts.xml <event type="advance" name="FriendsPoints" script="InviteFriends.lua"/> <event type="login" name="FriendsLogin" script="InviteFriends.lua"/> data\lib\core _invite_friends = { storages = {202301, 202302, 202303, 202304}, -- points, jogador, recompensa lvl, recompensa items level_max = 30, -- até que level ele precisa falar seu friend level_need = 50, -- que lever o jogador precisa ser para ganhar pontos levels_win = { [50] = 5, [80] = 6, [100] = 8, [150] = 10 }, rewards = { [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [25] = {items = {{2160,2},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [50] = {items = {{2160,3},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [100] = {items = {{2160,4},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [200] = {items = {{2160,5},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [250] = {items = {{2160,6},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0, 0}}, [500] = {items = {{2160,7},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}} } } function getInvitePoints(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerStorageValue(cid, _invite_friends.storages[1]) < 0 and 0 or getPlayerStorageValue(cid, _invite_friends.storages[1]) end function hasInviteFriend(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerStorageValue(cid, _invite_friends.storages[2]) > 0 and true or false end function getNameFriend(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerNameByGUID(getPlayerStorageValue(cid, _invite_friends.storages[2])) end function addInvitePoints(name, amount) local pid, Guid = getPlayerByName(name), getPlayerGUIDByName(name) if not pid then local getFriendPoints = db.storeQuery("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1]) if getFriendPoints ~= false then db.asyncQuery("UPDATE `player_storage` SET `value` = ".. (result.getDataInt(getFriendPoints, "value")+amount) .." WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1]) end else setPlayerStorageValue(getPlayerByName(name), _invite_friends.storages[1], getInvitePoints(getPlayerByName(name))+amount) end return true end function getItemsFromList(items) -- by vodka local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. ItemType(items[i][1]):getName() if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function getPlayerNameByGUID(guid) local a = db.storeQuery('SELECT `name` FROM `players` WHERE `id` = ' .. guid .. ' LIMIT 1') if a then return result.getDataString(a, "name") end return nil end function PlayerExist(name) -- by vodka local a = db.storeQuery('SELECT `id` FROM `players` WHERE `name` = ' .. db.escapeString(name)) if a ~= false then return true end return false end Na mesma pasta procure por data\lib\core.lua e adicione essa linha: dofile('data/lib/core/invitefriends.lua') data\talkactions\scripts InviteFriends.lua function onSay(player, words, param) local param = param:lower() if param == "" or not param then player:sendCancelMessage("Você precisa digitar o nome de um jogador.") return false elseif param == "points" then player:popupFYI("[+] Invite Friend System [+]\n\nvocê tem ["..getInvitePoints(player).."] Friends Points.") return false elseif hasInviteFriend(player) then player:sendCancelMessage("Você já agradeceu o jogador ["..getNameFriend(player).."] por te convidar a jogar neste servidor.") return false elseif not getPlayerGUIDByName(param) then player:sendCancelMessage("Desculpe, mas o jogador [" .. param .. "] não existe.") return false elseif player:getLevel() > _invite_friends.level_max or result.getDataInt(db.storeQuery("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(param)), "level") < _invite_friends.level_need then player:sendCancelMessage((player:getLevel() > _invite_friends.level_max and "Desculpe, mas você precisa ter no maximo level ".._invite_friends.level_max.." para usar este comando." or "Desculpe, mas o jogador ["..param.."] precisa ter no minimo level ".._invite_friends.level_need.." para ser escolhido.")) return false elseif player:getName():lower() == param then player:sendCancelMessage("Desculpe, mas você não pode se auto invitar.") return false end player:setStorageValue(_invite_friends.storages[2], getPlayerGUIDByName(param)) player:sendTextMessage(25, "Você indicou o jogador "..param..", este sistema é uma forma de agradecer a vocês por trazerem seus amigos para jogar.") player:getPosition():sendMagicEffect(math.random(28,30)) return false end talkactions.xml <talkaction words="!invited" separator=" " script="InviteFriends.lua"/> Exemplo de uso do comando: Vodkart me chamou para jogador? uso o comando: !invited vodkart Configurando o Sistema: *Vá na LIB do sistema que você adicionou* level_max = 30, -- até que level ele precisa falar seu friend level_need = 50, -- que lever o jogador precisa ser para ganhar pontos levels_win = { -- [LEVEL QUE PRECISA ATINGIR] = QUANTIDADE DE PONTOS QUE O OUTRO JOGADOR VAI RECEBER [50] = 5, [80] = 6, [100] = 8, [150] = 10 } rewards = { [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [25] = {items = {{2160,2},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [50] = {items = {{2160,3},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [100] = {items = {{2160,4},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [200] = {items = {{2160,5},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [250] = {items = {{2160,6},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0, 0}}, [500] = {items = {{2160,7},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}} } rewards = { [PONTOS NECESSÁRIO PARA OBTER A PREMIAÇÃO] = exemplo: [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, com 10 pontos ele irá rceber aquele itens acima /\ items = {} -- Poderá adicionar itens em uma tabela dizendo {id do item, quantidade} p_days = 0 -- se o jogador vai receber Premium Days? 0 ou Quantidade que vc deseja dar mount_id = 0 -- Se o jogador vai receber montaria? Colocar o Mount ID(que fica em mounts.xml) Ou deixar 0 para nenhuma p_points = 0 -- se o jogador vai receber Premium Points? 0 ou Quantidade que vc deseja dar out = {0,0} -- se vai recever outfit? {FEMALE, MALE} OU {0 , 0} para nenhuma
  22. Olá pessoal, tudo bom? Então, estou trazendo um evento que criei: o Duca Evento. A uns 10 anos atrás joguei um ot pvp enforced que funcionava quase da mesma forma desse evento e recentemente resolvi criar um evento dessa forma ... Como funciona: • Primeiramente abre um teleport onde os jogadores que estão acima do level estipulado podem entrar (lembrando que o teleport fica aberto até o final do evento, ou seja, você pode morrer dentro do evento e entrar novamente quantas vezes quiser). • Ao entrar no teleport você será enviado para uma equipe: azul ou rosa (lembrando que o objetivo é você matar jogadores da outra equipe e não poderá atacar os da mesma equipe). • Existe uma pontuação dentro do evento, ou seja, a cada jogador que matar da outra equipe você ganha 1 duca ponto (lembrando que se você morrer você é teleportado para fora do evento e seus duca pontos zeram.) • A cada morte dentro do evento é atualizada uma LISTA RANK, onde é gerado um rank de acordo com a pontuação dentro do evento. • O evento começa ficar bom quando existem mais de 11 jogadores dentro dele, pois é quando o sistema verifica os jogadores da "lista rank" que estão nas posições de segundo a décimo primeiro (2º a 11º) e coloca eles em uma equipe diferente: a vermelha, e é ai que o "bicho pega", pois fora os outros jogadores das outras equipes, existem 10 jogadores dessa equipe, e o melhor, quem mata-los recebe 10 duca pontos. • Como dito acima, ao ter mais de 11 jogadores dentro do evento é criado automaticamente a equipe vermelha (2º a 11º do rank), pois bem, para quem leu certinho viu que pulamos o 1º do rank: é ai que entra a equipe verde, sim, esta equipe será composta apenas por 1 jogador, sempre o que tiver mais pontos no evento (lembrando que essa função do sistema atualiza a cada morte dentro do evento), e é claro quem mata-lo ganhará 30 pontos dentro do evento. • Aconselho a colocar sempre o tempo do evento superior a 30 minutos para melhor jogabilidade e rivalidade. • O objetivo do evento é ser do time verde ao terminar o evento e ganhar o premio (configurei para os do time vermelho tbem ganhar premio, mas inferior ao do verde). Observações: • As cores das equipes que citei são represetativas, lá você pode editar as que quiserem. • Um mapa opcional esta disponivel para download no tópico. • Não ensinarei detalhes minimos de instalação no servidor porque você deve ao menos ter uma noção básica de otserv. Como instalar: • Primeiramente o arquivo que ficará na lib, ele é o coração do evento, tudo que você precisar configurar é nele. Nomeie de DUCA.lua: • Depois na pasta creaturescripts/scripts/ crie o arquivo DUCA_creaturescripts.lua: (lembrando que as tags para colocar no creaturescripts.xml esta como comentário no começo do código) • Depois na pasta globalevents/scripts/ crie o arquivo DUCA_globalevents.lua: (lembrando que as tags para colocar no globalevents.xml esta como comentário no começo do código) • Depois na pasta movements/scripts/ crie o arquivo DUCA_movements.lua: (lembrando que as tags para colocar no movements.xml esta como comentário no começo do código) Espero que gostem! D U C A ducaMap.otbm
  23. Estou fazendo um OtServ... E quera criar várias promotions editando o HP/MANA por Level ganho diferente em cada promotion. As promotions iriam ser por reset! Exemplo: Todos players começam nível 1000 com 10k de HP Cada nível que eles ganhem aumentem 10 de HP, ou seja upo 1 nível 1001 = 10,010 de HP, 1002 = 10,020 de HP... O nível máximo que queremos é 100,000, que é o nível pra conseguir resetar! Daí quando ele resetasse, teria 1 baú de promotion, promotion de 1 reset! Quando ele fizesse essa promotion nada mudaria apenas quando ele resetasse novamente! Daí no 2 Reset, mudaria a quantidade de HP por Level ganho! Em vez de 10 de HP por nível, aumentaria pra 12 de hp por nível. Ou seja, quando ele nascesse com o 2R no templo, já estaria com 12k de HP, e cada nível ganho aumentaria 12 de HP... Exemplo: Upo pra 1001 = 12,012 de HP, 1002 = 12,024, 2002 = 24,024 de HP. Quem puder me ajudar com isso, irei ficar muito gratificada, se quiserem, passo meu WhatsApp por mensagem pra me ajudar.
  24. Como funciona? A cada monstro que vc mata, seus itens equipados ganham 1 de exp. Quando seus itens chegarem às quantidades de exp definidas, eles upam e ficam com o nome assim: Demon Helmet + 1. Helmets, armors, legs, e boots recebem 1 de arm a cada vez que upam. Armas recebem 1 de ataque e escudos 1 de defesa. Para o monstro contar, ele deve dar um mínimo de exp (definido no script). O número de exp a que me refiro é aquele um presente no arquivo .xml. Para instalar, crie Killua Items Upgrade.lua em data/creaturescripts/scripts e coloque: Em data/creaturescripts/creaturescripts.xml coloque essas duas tags: <event type="kill" name="Item level" event="script" value="Killua Items Upgrade.lua"/> <event type="login" name="Item levell" event="script" value="Killua Items Upgrade.lua"/> Configurando: Na tabela table_of_slots, coloque em quais slots os itens upam. min_exp é a experiência mínima que o monstro deve ter para contar exp para o item. Se vc colocar 500, somente os monstros que tem exp igual ou superior a 500 no arquivo.xml vão valer. exp_levels são os valores de exp que os itens devem atingir para upar. No meu caso, quando o item alcançar 50 de exp, ele upa para o level 1. Quando alcançar 50 de exp, upa para o level 2 e assim por diante.

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução! A publicação do seu anuncio é instantânea!

×
×
  • Create New...