Jump to content
Close

Leaderboard


Popular Content

Showing content with the highest reputation since 08/15/19 in all areas

  1. 8 points
    Kamity

    SHOW OFF - Launcher 'Kamity'

    Eae galera do TK, vim mostrar para vocês um projeto meu que esta em andamento Launcher Update baseado na temática do Cliente 12 do global. Contato Discord: Guilherme#3515 Github: Yokaito Features ▸ Mostrando numero real de players online do servidor. ▸ Autoupdate ▪ Verifica no seu site se existe uma nova versão caso exista o launcher baixa o zip e extrai na pasta do usuário. ◈ PS: Ou seja não precisa colocar todo o cliente em si para baixar de novo apenas os arquivos modificados. ▸ Barra de progresso de download e extração com % em real time. ▸ Tag dentro do launcher mostrando a versão atual do cliente do seu servidor. ▸ Box (Direita) de Boss spawnado no servidor. ▸ Ultima newsticker lançada no seu site. ▸ Box (Esquerda) de Top level do servidor com outfit. ▸ Nome ot, background, logo, lista do boss com horário para cada dia da semana, todo totalmente configuráveis. Upcoming Features ▸ Botão para saber o horário do próximo boss (atualmente aparece apenas o que foi spawnado). PS: Estou em processo de finalização de edição do layout do Launcher junto com as features que citei logo acima. Versão Final do launcher. Essa e a primeira release dele. Tudo que for implementado daqui pra frente sao novas features. Todas que citei acima foram implementadas com sucesso. Créditos Base: Launcher AutoUpdate C# (Usei como inspiração para o back-end reescrevendo o código e adicionando novas funcionalidades e validações para erros). Kamity: Novas validações, novo layout e novas features.
  2. 7 points
    Lyu

    Cam System 10.98 (TFS 1.3)

    Olá TK, hoje venho publicar um sistema bem interessante que venho mexendo há algumas semanas, estou falando do Cam System, um sistema de nível avançado que coleta packets durante a jogatina e forma uma gravação daquele momento, onde você poderá assistir à essa gravação quantas vezes quiser, como um replay, porém o sistema está limitado somente para fins de estudos e curiosidades. Não recomendo utilizar em seu servidor, pois como está limitado, também está rodando dentro do TFS e pode pesar, já que não tive tempo para otimizá-lo e criar um server próprio somente para assistir às gravações. Também não está serializando/deserializando em arquivos.cam, está salvando na memória. Mais uma vez, não utilize, só estude a principal funcionalidade do sistema. Bom, o gist já está publicado, você pode acessá-lo aqui ou então baixar a source já com o sistema incluso pronto pra rodar (Lembrando que utilizei a última versão do forgottenserver-master, confira aqui) Download da Source: src with cam.zip Scan: https://www.virustotal.com/gui/file/3392c1c31d8bbab5cdc2f7e3c0c766749f3238efd2c36c80575480283b15fc32/detection Para começar uma nova gravação, utilize /replay start Para parar uma gravação e salvá-la, utilize /replay stop feito isso, para assisti-la, deslogue sua conta e na janela de login, deixe o accountname vazio e no password informe replaylist Então é isso, se algum Programador estiver afim de aplicar otimizações/serialização ao sistema, fique à vontade para contribuir. Este sistema é incrível e pode muito bem dar certo. 😄 Vídeo de demonstração:
  3. 5 points
    Paranaue

    Sprites Nto Last Chance

    Contém varias sprites novas e muitas vocaçoes scan: https://www.virustotal.com/gui/file/90370455f4fa96214178d1b540a1a224076865c2fbca496161f280ca419e4ff6/detection dalowad: https://www.mediafire.com/file/vf57q23gbbj5p4t/Sprites_Last_Chance.rar/file
  4. 5 points
    Nolis

    Mapas do Nolis

    Bem vindo ao meu Show Off, quero compartilhar com você alguns mapas que fiz, se gostou deixe o like Abaixo preparei uma retrospectiva dos mapas importantes para mim desde que iniciei no mapping. (ainda faltam algumas imagens de 2016 à 2018, editarei com tempo)
  5. 5 points
    Semideus

    Olimpia - Show Off

    Caros amigos do Tibiaking, gostaria de lhes apresentar meu maior projeto, dediquei bastante tempo e amor nele, gostaria que vocês dessem uma chance e conhecessem o mais de perto, o servidor que eu chamo de Olimpia. História O servidor é inspirado na mitologia grega, nórdica. Resumidamente, depois de uma intensa guerra com Tróia, a Grécia só não foi extinguida por conta da fé dos antigos sacerdotes que pediram em oração aos Deuses para que sua cidade não fosse destruída. Sua fé foi tão grande que os Deuses interviram na guerra e transformaram tudo ao redor da Grécia em mar, impedindo os ataques do povo de Tróia. O que o povo da Grécia não sabia, era que essa intervenção gerou um grande conflito no Olimpo, dividindo os Deuses em dois lados. Estamos prestes a presenciar a próxima guerra santa! Geral O servidor tem o protocolo 10.98 do tibia e utiliza old client, e centenas de sprites novos e únicos foram adicionados, atualmente o servidor conta com cerca de 65 Sets (conjunto de equipamentos) e + de 100 criaturas custom foram adicionadas, ambos seguindo a linha mitológica. Vocações No Olimpia, as classes foram totalmente refeitas, a fim de equilibrar o jogo, já que adicionamos 2 novas classes. Estamos focados em criar um sistema de PVP totalmente novo, que exija um estilo de jogo inteligente e trabalho em equipe. Atualmente possuímos 6 vocações principais, são elas: Druid = Druidas valorizam a natureza em geral, seja florestas, rios ou até a natureza da morte. Ao longo dos anos, eles se especializaram na vida e na morte, ambos capazes de restaurar aliados e destruir inimigos. Eles usam seus poderes de maneira muito consciente, sempre maximizando seus recursos para obter um dano mais alto. Seu poder mágico é tão forte quanto o dos Magos, mas eles têm um forte foco em sua sustentação, tornando-os os melhores curandeiros entre todos. Wizard = Os wizards são poderosos usuários de magia, que usam seus poderes destrutivos frequentemente sem pensar nas consequências que suas ações podem trazer. Para eles, muitas vezes, o importante é apenas demonstrar todo o seu poder diante dos inimigos. Archer = Os arqueiros têm união e parceria com seu arco, sendo considerados uma extensão de seus próprios corpos, são treinados desde crianças com o manuseio dos arcos, tornando-os especialistas supremos nesta questão, podendo disparar várias flechas antes mesmo de seus inimigos se prepararem. si mesmos. Muito rápidos e precisos, os arqueiros dependem de habilidades de corrida, bônus de ataque crítico, flechas triplas e precisão ilusória em seus ataques! Warrior = O Warrior é especialista em todos os tipos de armas, pode atacar mais de um oponente por vez e se adapta facilmente a todos os ambientes! Hábil com armas, é fácil realizar ataques críticos e lidar com armas pesadas! Ele sabe usar boas armaduras e não vê problema em enfrentar dezenas de inimigos, mesmo estando sozinho. Monk = São peritos na arte da luta corporal e com maestria e velocidade, executam golpes devastadores. É uma vocação DPS(dano por segundo) melee, com maior velocidade de ataque dentre todas as classes no Olimpia. Possui hp médio e mp baixo, seu nível de dificuldade é alto, pois além de não possuir bom sustento somente com suas habilidades, consomem muita mana. Samurai = É uma vocação DPS(dano por segundo) melee, com maior potencial de dano entre todos os DPSs físicos, possui alta velocidade de ataque e movimento, sobre hp e mp, é considerada uma classe frágil e difícil de jogar. Por ser melee, é necessário saber desviar de mecânicas sem se afastar muito do alvo, e várias de suas habilidades requerem estar em posições específicas em relação ao alvo. Sistemas Possuímos dezenas de novos sistemas que foram adicionadas para melhorar a jogabilidade e tornar o Olímpia referência. Temos sistemas de altíssima qualidade feitos por programadores de renome, como @lordzetros @Dwarfer e @Lyu. Alguns sistemas que valem apena serem listados aqui: Seguir um Deus = Não iria ter graça se o jogador não pudesse escolher um Deus de sua preferência não é mesmo? O jogador pode subir seu nível de devoção finalizando tasks e missões, assim, de acordo com o nível, a % de experiência bonus aumenta e o jogador recebe diversos bonus durante sua hunt. Comparação de Itens = Ao dar look em algum item, o jogo te diz se ele é melhor ou pior do que o item que está equipado no seu personagem. Autoloot Monster = Utilizando o comando !autoloot Rotworm por exemplo, uma tela com todos os itens dropáveis do monstro é aberta e você pode montar sua lista interativamente. Soul Coin = Moeda que dropa aleatoriamente quando um monstro é morto e pode ser utilizada num shop exclusivo. Classe nos Itens = No Olimpia, cada criatura com um skull tem a chance de dropar um item com qualidade diferenciada. Existem 3 tipos de raridades para os itens: Raro, Épico e Lendário. Dodge/Critical System = Aumente sua taxa de esquiva ou sua chance de ataque Crítico. Autogold = Facilite sua jornada, enviando o dinheiro coletado direto pra sua conta bancária. Árvore de Habilidades = Ganhe um ponto a cada level e faça seu personagem de acordo com seu gosto. Esse sistema é único e integra mudanças com a source, implementamos alterações na chance de crítico, speed do personagem, velocidade de ataque e muito mais. Bonus Set = Ganhe bonus incríveis ao utilizar um conjunto de items do mesmo tipo ao mesmo tempo. Monster Level = No Olimpia, cada monstro nasce com um level e quanto maior esse level, ele possui mais vida, dano e velocidade. Monster Class = Além do Level, cada monstro possui uma chance de nascer com uma skull, e de acordo com a skull, a qualidade do item que eles dropam é maior e são aplicados multiplicadores de dano/hp/loot e experiência que fazem cada monstro ser único e sua jornada ser muito mais divertida! Dungeon System = Nosso servidor conta com um sistema personalizado de Dungeons, onde você pode escolher participar solo ou em party. Você precisa limpar os monstros da Dungeon e matar o BOSS final antes que o tempo final termine. Cada Dungeon tem sua própria dificuldade e sua própria recompensa. Eventos Nosso servidor conta com diversos eventos automáticos e manuais que vão alegrar seus dias no Olimpia. Eventos esses como: Snowball War Castle 24hrs Bomberman Blood Castle League of Olimpia Firestorm Capture the Flag Ultimo Homem Vivo Battlefield Zombie Mapa Nosso mapa é totalmente custom e único, tentamos trazer a cidade da grécia pro mundo do Tibia, e pra isso contamos com Mappers dedicados em entregar mapas de altíssima qualidade, agradecimento especial ao @DdJs que elevou o nível dos mapas do Olimpia a um novo patamar! Previsão Nosso projeto se extende a quase 2 anos e muita coisa já foi feita e refeita, tivemos alguns lançamentos que deram incrivelmente errado, mas eu não desisti. E nunca estivemos tão perto do lançamento, atualmente estamos com um servidor online pra testes com alguns testers que estão nos ajudando reportando bugs e conhecendo o jogo. Você pode ser um tester solicitando isso no nosso Discord Oficial. Não irei dar uma data final de lançamento pois isso já causou muita dor de cabeça e ainda temos muito trabalho a ser feito, mas nossa intenção é lançar oficialmente o Olimpia ainda neste Ano de 2019. Contamos com a ajuda de vocês! Obrigado por todo apoio! Fiquem a vontade para perguntar, opinar e ir até o nosso discord, facebook.
  6. 4 points
    luanluciano93

    [OTX3 8.60] STYLLER 2019

    STYLLER 2019 - CUSTOM YOUROTS Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado pela engine OTX, resolvi criar um projeto de servidor styller usando a OTX3 para versão 8.60. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou criar um issue no github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações. # Atualizações: → Revisão atual: 2 → Atualizações # Informações do Servidor e Sistemas: → Versão: 8.60 → Engine: OTX3 nas revisões atuais. → Cidades, sistemas e quests. # Créditos: • luanluciano93 • GOD Bon (mapa yourots) • mattyx14 e TFS team (pela engine do servidor) • @leoloko12 (mapa styller) • e outros # Download: - Download-1 ou Download-2. É isso pessoal, espero que gostem
  7. 4 points
    Kramer

    Dragon Ball Kai Adventure - Show Off

    O servidor foi criado para jogadores que já estão entediados com projetos deixados sem supervisão, atualizações e todo tipo de inovação. Nosso servidor foi baseado na versão do DBKO 3.11 (8.0) porém está na versão 8.60, está não é uma cópia 100% fiel do OLD DBKO, é uma versão editada com novas atualizações totalmente diferente do atual. Nosso servidor requer treinamento de personagens e conta com uma ampla diversidade de skills, então qualquer personagem poderá ficar forte, sem o famoso PvP de atacar primeiro ganha. SISTEMA DE SKILLS PERSONAGENS / VOCAÇÕES ║ Lista/Info dos personagens no site║ Cliente Próprio║ Planetas completos, entre outros... ║ 90% dos itens podem ser adquiridos em quests.║ Guild War System ║ Dungeon System ║ Aura System, customize o efeito do seu personagem. ║ Transformações alternativas ║ Sagas 100%, ganhe EXP/ITEMS ║Esferas do dragão, possível chamar o Shenlong║ Arena PVP ║ Area premium nova feita do 0, todas areas premium antigas são free, algumas areas premium free-account poderá acessar porém precisará de fazer o acesso║ Respawns Próprios e personalizados║ Monstros baseados no DBO & DBKO║ Site organizado║ E muito mais! ◄Rates►• Exp Stage Inicial: 30x (Exp Própria)• Skill: 5x• Magic: 15x• Loot: 5x (Rate Loot própria em cada monstro).• Protection level: 100 - Porém contamos com um script de anti power abuse.• Reborn Mínimo: LvL 250• Reborn Máximo: LvL 600 O TÓPICO SERÁ ATUALIZADO COM AS PRÓXIMAS MUDANÇAS ATÉ O FUTURO LANÇAMENTO
  8. 4 points
    ITALOx

    Sistema Skin 8.60 TFS 0.4

    Salve TIBIA KING! Hoje trago pra vocês um sistema de skin. Como funciona? ao clicar em um certo item, ele ganhará uma skin. ------------------------------------------------------ vou explicar direitinho tudo. espero que entenda. se não, comente ai que eu poderei da suporte. Então vamos lá. Em actions/scripts Crie um arquvio chamado skin.lua -- ou o nome da skin/personagem. Depois abra, e copie e cole isso aqui dentro da pasta function onUse(cid, item, fromPosition, itemEx, toPosition) if item.itemid == 7379 and (getPlayerStorageValue(cid, 8002) == EMPTY_STORAGE) then doPlayerAddOutfitId(cid, 44, 3) setPlayerStorageValue(cid, 8002, 1) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE) doPlayerSendTextMessage(cid,22,"Parabéns, você recebeu a Outfit!") doRemoveItem(item.uid, 1) else doPlayerSendCancel(cid,"Você já recebeu essa roupa!") end end em item.itemid == 7379 mude para o id para o seu item. Em (getPlayerStorageValue(cid, 8002) -- mude de acordo se você for colocar mais SKINS. tipo tá 8002 ali, coloque 8003 8004 e por ai vai. mude também no setPlayerStorageValue(cid, 8002, 1) -- mude para outras skin também! Feito isso, depois vá em actions.xml e adicione isso lá. <action itemid="13646" script="skin.lua"/> Mude a id do item. Depois de ter feito tudo isso, vamos agora em pasta do servidor/data/XML/outfit.xml abra ele e adicione isso aqui lá: <outfit id="44" premium="no" default="0"> <list gender="0-3" lookType="1250" name="NOME DA SKIN"/> </outfit> Antes disse. der espaço entrem o <outfits> e </outfits> e cole dentro! Mude o looktype para a roupa/skin que você deseja colocar para o personagem ganhar. outfit id="44" > Mude aqui. para 1. 2 3 4 5 6, vai até aonde tu achar bom. em List gender="0-3" mude para 0-1 ou para o que você quiser. Pronto, feito tudo ISSO é sucesso meu bom. se eu errei algo, perdão :D Créditos pelo esse sistema: DBOHP Eu (por postar.)
  9. 3 points
    Yan Liima

    [8.60] TFS 0.4 Rev3996 War & Cast

    Salve salve pessoal, no inicio desse ano estava dando uma estudada e mexendo com a TFS 0.4 rev3884, e vi que havia alguns bugs e que não tinha Cast incluso. Com base nisso decidi atualizar e otimizar a source, já que ainda ela é uma das mais utilizadas no mundo de Otserv. Um rapaz tinha me procurado e comprado ela por um preço razoavel, mas ao descobrir que ele estava revendendo por um preço bem maior, decidi compartilhar esse meu trabalho com vocês! Acredito que possa ser uma das melhores REV atualmente. Conto com o seu feedback, caso haja algum bug, algo que tenha que mudar/optimizar, não exite em avisar aqui no tópico. Toda ajuda será bem vinda xD The Forgotten Server, Tibia Versão: 8.60 O que contém nela? Dentro da pasta contém o config.lua com todas as tag já adicionadas. Não esquecam de executar a Query do Cast na sua DB: Downloads uint8(Effects até 255) Distro: TheForgottenServer.exe Src + datapack: Source & Data ------------------------------------------------------- Downloads uint16(Effects até 65534) Distro: TheForgottenServer.exe Src + datapack: Source & Data É necessário fazer a modificação do Hexadecimal no cliente. Aqui tem um já pronto: Cliente.exe (só será necessario se utilizar a src com o uint 16.) ------------------------------------------------------- Scans: Distro(uint8) & Distro(uint16) Source Cliente Obs: Os virus detectado é um falso positivo, então não se preocupem! E para quem se interessa em saber onde se localiza os code do Cast, aqui está uma imagem. Você pode achar procurando por "//CAST" Façam um ótimo aproveito 😄
  10. 3 points
    Snowsz

    ANSWERED Talkaction Deathlist [TFS1.X]

    Execute isso no MySQL: ALTER TABLE player_deaths ADD player_killers TEXT NOT NULL Talkaction: local function getArticle(str) return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a" end local function getMonthDayEnding(day) if day == "01" or day == "21" or day == "31" then return "st" elseif day == "02" or day == "22" then return "nd" elseif day == "03" or day == "23" then return "rd" else return "th" end end local function getMonthString(m) return os.date("%B", os.time{year = 1970, month = m, day = 1}) end function onSay(player, words, param) local resultId = db.storeQuery("SELECT `id`, `name` FROM `players` WHERE `name` = " .. db.escapeString(param)) if resultId ~= false then local targetGUID = result.getNumber(resultId, "id") local targetName = result.getString(resultId, "name") result.free(resultId) local str = "" local breakline = "" local resultId = db.storeQuery("SELECT `time`, `level`, `killed_by`, `is_player`, `player_killers` FROM `player_deaths` WHERE `player_id` = " .. targetGUID .. " ORDER BY `time` DESC") if resultId ~= false then repeat if str ~= "" then breakline = "\n" end local date = os.date("*t", result.getNumber(resultId, "time")) local article = "" local killed_by = result.getString(resultId, "killed_by") if result.getNumber(resultId, "is_player") == 0 then article = getArticle(killed_by) .. " " killed_by = killed_by:lower() end local killers = (result.getString(resultId, "player_killers") or ""):gsub(";", ", ") killers = killers:sub(1, #killers-2) if date.day < 10 then date.day = "0" .. date.day end if date.hour < 10 then date.hour = "0" .. date.hour end if date.min < 10 then date.min = "0" .. date.min end if date.sec < 10 then date.sec = "0" .. date.sec end str = str .. breakline .. " " .. date.day .. getMonthDayEnding(date.day) .. " " .. getMonthString(date.month) .. " " .. date.year .. " " .. date.hour .. ":" .. date.min .. ":" .. date.sec .. " Morto no Level " .. result.getNumber(resultId, "level") .. " por " .. killers .. "." until not result.next(resultId) result.free(resultId) end if str == "" then str = "Sem mortes." end player:popupFYI("Mortes do personagem, " .. targetName .. ".\n\n" .. str) else player:sendCancelMessage("O jogador com esse nome não existe.") end return false end Creaturescript: local deathListEnabled = true local maxDeathRecords = 5 function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) local playerId = player:getId() if nextUseStaminaTime[playerId] ~= nil then nextUseStaminaTime[playerId] = nil end player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Você morreu') player:removeBlessing(6) player:removeBlessing(7) if not deathListEnabled then return end local byPlayer = 0 local killerName local killerid if killer ~= nil then if killer:isPlayer() then killerid = killer:getGuid() byPlayer = 1 else local master = killer:getMaster() if master and master ~= killer and master:isPlayer() then killer = master killerid = killer:getGuid() byPlayer = 1 end end killerName = killer:isMonster() and killer:getType():getNameDescription() or killer:getName() else killerName = 'field item' end local byPlayerMostDamage = 0 local mostDamageKillerName if mostDamageKiller ~= nil then if mostDamageKiller:isPlayer() then byPlayerMostDamage = 1 else local master = mostDamageKiller:getMaster() if master and master ~= mostDamageKiller and master:isPlayer() then mostDamageKiller = master byPlayerMostDamage = 1 end end mostDamageName = mostDamageKiller:isMonster() and mostDamageKiller:getType():getNameDescription() or mostDamageKiller:getName() else mostDamageName = 'field item' end local KillersArray = {} for k, v in pairs(player:getDamageMap()) do local CreatureMT = Creature(k) if CreatureMT and CreatureMT:isPlayer() then table.insert(KillersArray, v:getName()) end end local playerGuid = player:getGuid() db.query('INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`, `player_killers`) VALUES (' .. playerGuid .. ', ' .. os.time() .. ', ' .. player:getLevel() .. ', ' .. db.escapeString(killerName) .. ', ' .. byPlayer .. ', ' .. db.escapeString(mostDamageName) .. ', ' .. byPlayerMostDamage .. ', ' .. (unjustified and 1 or 0) .. ', ' .. (mostDamageUnjustified and 1 or 0) .. ', ' .. table.concat(KillersArray, ";") .. ')') local resultId = db.storeQuery('SELECT `player_id` FROM `player_deaths` WHERE `player_id` = ' .. playerGuid) local deathRecords = 0 local tmpResultId = resultId while tmpResultId ~= false do tmpResultId = result.next(resultId) deathRecords = deathRecords + 1 end if resultId ~= false then result.free(resultId) end local limit = deathRecords - maxDeathRecords if limit > 0 then db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit) end if byPlayer == 1 then local targetGuild = player:getGuild() targetGuild = targetGuild and targetGuild:getId() or 0 if targetGuild ~= 0 then local killerGuild = killer:getGuild() killerGuild = killerGuild and killerGuild:getId() or 0 if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer.uid) then local warId = false resultId = db.storeQuery('SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = ' .. killerGuild .. ' AND `guild2` = ' .. targetGuild .. ') OR (`guild1` = ' .. targetGuild .. ' AND `guild2` = ' .. killerGuild .. '))') if resultId ~= false then warId = result.getNumber(resultId, 'id') result.free(resultId) end if warId ~= false then db.asyncQuery('INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (' .. db.escapeString(killerName) .. ', ' .. db.escapeString(player:getName()) .. ', ' .. killerGuild .. ', ' .. targetGuild .. ', ' .. os.time() .. ', ' .. warId .. ')') end end end end end Não testei então tenta aí. A identação saiu meio bugada umas partes mas não importa.
  11. 3 points
    local lvl = 400 local stor_time = 787687 local hours = 24 local pos_die = {x=1429, y=1549, z=9} local t = { {vocations = {1, 13},Pos = {{x=1397, y=1505, z=9},{x=1429, y=1549, z=9}},item= {2349,{x=1398, y=1502, z=9}}}, -- TANK OR DRUNK {vocations = {14, 15},Pos = {{x=1396, y=1505, z=9},{x=1429, y=1549, z=9}},item= {2349,{x=1398, y=1508, z=9}}}, -- ATTACK OR DRUNK {vocations = {16, 17},Pos = {{x=1395, y=1505, z=9},{x=1429, y=1549, z=9}},item= {2349,{x=1393, y=1508, z=9}}}, -- SUPPORT OR DRUNK {vocations = {18, 19},Pos = {{x=1394, y=1505, z=9},{x=1429, y=1549, z=9}},item= {2349,{x=1393, y=1502, z=9}}}, -- PARALYZE OR DRUNK {vocations = {18, 19},Pos = {{x=1394, y=1505, z=9},{x=1429, y=1549, z=9}},item= {2349,{x=1393, y=1502, z=9}}}, -- PARALYZE {vocations = {18, 19},Pos = {{x=1394, y=1505, z=9},{x=1429, y=1549, z=9}},item= {2349,{x=1393, y=1502, z=9}}} -- SUPPORT } function onUse(cid, item, fromPosition, itemEx, toPosition) local check = {} local items = {} for _, k in ipairs(t) do local x = getTopCreature(k.Pos[1]).uid local v = getTileItemById(k.item[2], k.item[1]) if x == 0 or not isPlayer(x) or getPlayerLevel(x) < lvl or isInArray(k.vocations, getPlayerVocation(x)) == FALSE or getPlayerStorageValue(x, stor_time) - os.time() > 0 then doPlayerSendCancel(cid, 'Está faltando player ou alguém não possui level '..lvl..' ou mais ou não tem a vocação ou so pode participar 1x no dia.') return true elseif v.uid == 0 then doPlayerSendCancel(cid, "Todos os itens precisão estar na posição.") return true end table.insert(check, x) table.insert(items, v) end local sort = check[math.random(1, #check)] for k, tid in ipairs(check) do doSendMagicEffect(getCreaturePosition(tid), CONST_ME_POFF) if tid ~= sort then doTeleportThing(tid, t[k].Pos[2]) else doTeleportThing(tid, pos_die) end doSendMagicEffect(getCreaturePosition(tid), CONST_ME_TELEPORT) setPlayerStorageValue(tid, stor_time, os.time()+hours*3600) end for _, remove in ipairs(items) do doRemoveItem(remove.uid) end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end
  12. 3 points
    Dragon Ball Rox Servidor 100% estável com mais de 200 horas online. 38 Vocações sendo 9 delas vip que são: Shenron,Vegetto,Zaiko,Kagome,Tapion,Kame Chilled,C8 e King Vegetta. Spells de fast attack (Usa uma vez sai 10 hits). Eventos automaticos como: Castle,Battlefield,Run event. Reborn level maximo 600. Vamos aos bugs que eu encontrei: * Zombie event quando o zombie pega algum player todos do evento e mandando pra fora e evento encerra. * Erro quando usa spell e a pessoa morre antes da spell acabar no caso das de combo. * Erro nos eventos Battlefield e Run event quando vai adicionar a recompensa da erro por faltar uma tabela na database que não me recordo o nome agora. Update v2 Adicionado 7 novas vocações vips sendo elas: Bills,Whiss,Golden Freeza,Vegetto Blue,Zamasu,Gogeta Blue e Goku Black Evo. Adicionado 3 vocações free sendo elas: Zeno, Vados e Vegetto Black. Vocações que antes era vip no update v1 agora são free. Fazer reborn não precisa mais fazer quest das esferas do dragão. Adicionado cassino que se ganha small diamonds que se troca por: Divine Stone(Usado para upgrade), Black Stone (Item para virar Vegetto Black) e Leviathan Amulet. Adicionado npc que vende Anti Loss Ring Protege 10% contra todos danos e funciona como a band of loss porem infinita. Ele fica no Yama. Adicionado sistema de pontuação por hora online, cada 1 hora online = 1 ponto que se pode trocar por itens no npc Points Trader no Yama. Adicionado sistema Anti-MC, podendo logar somente 2 contas por ip. Adicionado 3 bosses espalhados pelo mapa (Earth). Adicionado sistema de forja podendo criar o melhor set, armas free e o item para virar Zeno. Adicionado sistema de upgrade fazendo seu item ficar mais forte. Adicionado transformação ultra god para todas as vocações, sendo pega no templo de reset ao lado do esquerdo do templo. Necessário ter level 800 e possuir 100 God Essences que dropam do Ultra God Bills em God Island.Para entrar no templo de reset é necessário possuir 1 reset, para dar reset necessita ter level 800 e digitar o comando "!reset", você voltara para o level 100 com o hp/mp de um player level 100 mas ganhara acesso a área de reset que tem o npc de ultra god e a área de forja. Nova moeda acima de Gold sendo ela Blue God equivalente a 100 Gold Bars. Area de evento pvp e dice/bag adicionada no Yama. Area vip adicionada. Adicionado 2 sets novos free, 2 armas free, 2 shields free, senzu free (God Senzu), Senzu vip (Mystic Senzu), Vados staff free, Whiss staff vip. Vocações que antes era vip na v1 se pega na capsule ao lado direito do templo. Algumas modificações no mapa, hunts, quest. Por enquanto é só isso que estou lembrando,conforme eu lembro edito o tópico. Gostou ? Clique em Gostei logo abaixo. Para consertar o erro da loteria só executar essa query na sua database: CREATE TABLE `lottery` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `item` varchar(255) NOT NULL, `world_id` tinyint(2) unsigned NOT NULL default '0', `item_name` varchar(255) NOT NULL, `date` varchar(256) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; Downloads Server (Distro para windows e linux já compilada) Scan Cliente Scan Sources Scan Site (Modern Acc) Scan Database Scan Creditos server: Kramer, WhiteBubble Creditos site: @Hastafaru e a WhiteBubble por adaptar ao server Creditos source: Fir3element e WhiteBubble por aumentar limite de efeitos e por skill fist skill para aumentar attack speed.
  13. 2 points
    iHolloway

    DBO Absalon/God Revolution

    Boas, membros do TibiaKing! Há um tempo que eu estava pensando em compartilhar a base com vocês, até que enfim criei coragem. A distro está compilada em linux, e não tem source, caso queiram, poderão usar a source do DboRox, mas não garanto funcionalidade. Vou tentar citar algumas "peculiaridades" do servidor - Sistema de cassino; - "Todas" as "novas" vocações, da saga super (inclusive Yamoshi); - Spells/quests/itens dos mais váriados possíveis; - Troca de vocações in-game; - Rituais; - Ultra God/Hakaishin's/Darkness; - Algumas boxes; - Sistema de Shop (caso queira tirar a venda in-game e colocar por site); - Evento Zarama Shenlong; - Convertor de barras;; E dos mais diversos. Um vídeo que encontrei de um amigo demonstrando melhor o servidor: Caso queira ver mais sobre o servidor, procure por "Dbo Absalon" no youtube Download https://www.mediafire.com/file/ofsjj852ql2a1k4/Servidor+Client.zip/file Scan virustotal.com/gui/file/3bb301f74944c4fa306578fd946cfc0f731266f9e4c68d8c57b1d4049e090196/detection Créditos Jhonathan Nayol/Holloway Workedbox Wesker
  14. 2 points
    M ustang

    - Client 8.60 que abre estendido!

    [+] Informações [+] Bom, como muita gente cobra por isso e ainda caro por algo que tem solto por ai vim aqui postar para vocês um Client 860 (.exe) que abre estendido sem o debug do Ctrl + n! Apenas 8.60! [+] Link [+] Download Scan [+] Créditos [+] Quem fez a alteração no client! ( não tenho a minima ideia de quem foi ) Eu por postar!
  15. 2 points
    Bom dia/tarde/noite galera, até hoje muitas pessoas estão me pedindo essa distro e o client uint16(com limites de 65k de efeitos), então quero aqui deixar a distro com a source pra vocês e o client claro, sem ele não adianta nada! Obs: Me perdoem se por um acaso tiver alguma alteração na source, mas é a única que tenho aqui, mas não é nada de mais, vcs nem vão perceber. -A distro e o Client estão na versão 8.60!!! -Essa distro não tem o famoso bug de mortes infinitas que vocês conhecem no WODBO, que se o player morrer no pvp e dps morrer ele morre infinitamente com a vida no 0, então se vc quer uma distro com 65k de efeitos e não sabe como resolver o bug de mortes! Ta aí a solução, 2 coelhos numa cajadada só! Espero que eu tenho ajudado alguém Como usar: 1- Primeiro você baixa a Distro, o client e as Dlls! 2- Coloque a Distro dentro da pasta do seu servidor! 3- Coloque as Dlls junto a distro na pasta do server! 4- Vá em data/lib do seu servidor e abra o 000-constant.lua com o notepad++ apague tudo e cole isso dentro: Pronto!! Já pode aproveitar seus 65 mil efeitos kk -Distro: DOWNLOAD SCAN -Client: DOWNLOAD SCAN -Dlls: DOWNLOAD SCAN *Todos os "vírus" apresentados são apenas falsos-positivos!(Como pode ver os antivírus que acham que o arquivo tem vírus são os piores do mercado, só tem um conhecido o McAfee que todos sabem que ele acha vírus em tudo...) Créditos: @KotZletY
  16. 2 points
    Global 11/12x [v32] - New Falcons - New Asuras - Warzone 4,5,6 - Exercise Training - Raids 100% - Monstros 100% - Trainer Offline 100% - Trainer Online 100% - Taming system funcionando 100%; - Database completa - War System 100% - Global MAP Full - Store 100% - Imbuement - Prey System - Entre outros sistemas. Projeto no: GITHUB Scan Vírus Total IMAGES Créditos:
  17. 2 points
    amoxicilina

    Bulgari city

    Bulgari city Versão: 11.x Download. Scan. Scan - Aquivo. Tipo: RAR Tamanho: 982.98KB senha do arquivo: tibiaking Imagem
  18. 2 points
    luanluciano93

    DÚVIDAS SOBRE ALGUNS ARQUIVOS

    Cara, vou simplificar ... Há um tempo um grupo de desenvolvedores criaram um projeto para criar o otserv, de código fonte aberto (open source), ou seja, todos poderiam usar e ajudar a desenvolver ... Deram o nome para essa projeto de TheForgottenServer, o famoso TFS, então ... Esse código fonte para funcionar e virar um "executável" precisa ser compilado, ou seja, vc pega o código e usa uns programas para fazer ele virar um "executável" (distro), e em cada sistema operacional você compila de um jeito. É mais ou menos isso.
  19. 2 points
    Clopin

    [Showoff] Clopin

    Ola, sou nova nesta área. Eu já mexi antes no RME e não era nada sério. Mas agora decidi montar um projeto, criarei um mapa próprio, ainda não defini o estilo. Aqui esta um pouco as imagens da minha primeira cidade. Espero que gostem. Estou aprendendo muito com a academia de Mapping deste forum, agradeço a todos pela atenção.
  20. 2 points
    Clopin

    [Showoff] Clopin

    Minha segunda cidade
  21. 2 points
    Gengo

    [OTClient] Player Info OTPokemon

    [OTClient] Health Player Info OTPokemon Eae galerinha do TibiaKing, hoje venho trazer mais uma contribuição para a comunidade, um módulo indêntico ao do OtPokemon. Mesmo que seja simples a instalação, tem sempre aquele que não sabe onde deve colocar o módulo, peço então que tenha paciência quanto a esse simples tutorial, aos demais aqueles que já sabem, peço que ao menos leia a Observações do módulo. 1º Faça o download do módulo. 2º Extraia o módulo para a pasta do seu otClient em /modules ficando assim: Feito o passo 1 e 2 creio que já estará funcionando, isto se você fez tudo certinho. •Observações do módulo• Demonstrativo do módulo no jogo.
  22. 2 points
    Coltera

    Show OFF - Mapping

    HUNTS: Estarei postando algumas imagens do meu projeto (O tópico não tem prazo de Atualização: (??/??/????)). * (Mapa simples e poucos detalhes) * --------------------------------------------------- Atualização: 06/07/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 25/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 14/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 02/06/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 27/05/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 25/05/2019 --------------------------------------------------- 1 2 --------------------------------------------------- Atualização: 02/02/2019 --------------------------------------------------- 1 2 3 CIDADE: --------------------------------------------------- Atualização: 27/01/2019 --------------------------------------------------- 1 2 3 4 5 6 7 8 9
  23. 2 points
    Snowsz

    ANSWERED Talkaction Deathlist [TFS1.X]

    local deathListEnabled = true local maxDeathRecords = 5 function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) local playerId = player:getId() if nextUseStaminaTime[playerId] ~= nil then nextUseStaminaTime[playerId] = nil end player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Você morreu') player:removeBlessing(6) player:removeBlessing(7) if not deathListEnabled then return end local byPlayer = 0 local killerName local killerid if killer ~= nil then if killer:isPlayer() then killerid = killer:getGuid() byPlayer = 1 else local master = killer:getMaster() if master and master ~= killer and master:isPlayer() then killer = master killerid = killer:getGuid() byPlayer = 1 end end killerName = killer:isMonster() and killer:getType():getNameDescription() or killer:getName() else killerName = 'field item' end local byPlayerMostDamage = 0 local mostDamageKillerName if mostDamageKiller ~= nil then if mostDamageKiller:isPlayer() then byPlayerMostDamage = 1 else local master = mostDamageKiller:getMaster() if master and master ~= mostDamageKiller and master:isPlayer() then mostDamageKiller = master byPlayerMostDamage = 1 end end mostDamageName = mostDamageKiller:isMonster() and mostDamageKiller:getType():getNameDescription() or mostDamageKiller:getName() else mostDamageName = 'field item' end local KillersArray = {} for k, v in pairs(player:getDamageMap()) do local CreatureMT = Creature(k) if CreatureMT and not isInArray(KillersArray, CreatureMT:getName()) then table.insert(KillersArray, CreatureMT:getName()) end end local playerGuid = player:getGuid() db.query('INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`, `player_killers`) VALUES (' .. playerGuid .. ', ' .. os.time() .. ', ' .. player:getLevel() .. ', ' .. db.escapeString(killerName) .. ', ' .. byPlayer .. ', ' .. db.escapeString(mostDamageName) .. ', ' .. byPlayerMostDamage .. ', ' .. (unjustified and 1 or 0) .. ', ' .. (mostDamageUnjustified and 1 or 0) .. ', \"' .. table.concat(KillersArray, ";") .. '\")') local resultId = db.storeQuery('SELECT `player_id` FROM `player_deaths` WHERE `player_id` = ' .. playerGuid) local deathRecords = 0 local tmpResultId = resultId while tmpResultId ~= false do tmpResultId = result.next(resultId) deathRecords = deathRecords + 1 end if resultId ~= false then result.free(resultId) end local limit = deathRecords - maxDeathRecords if limit > 0 then db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit) end if byPlayer == 1 then local targetGuild = player:getGuild() targetGuild = targetGuild and targetGuild:getId() or 0 if targetGuild ~= 0 then local killerGuild = killer:getGuild() killerGuild = killerGuild and killerGuild:getId() or 0 if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer.uid) then local warId = false resultId = db.storeQuery('SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = ' .. killerGuild .. ' AND `guild2` = ' .. targetGuild .. ') OR (`guild1` = ' .. targetGuild .. ' AND `guild2` = ' .. killerGuild .. '))') if resultId ~= false then warId = result.getNumber(resultId, 'id') result.free(resultId) end if warId ~= false then db.asyncQuery('INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (' .. db.escapeString(killerName) .. ', ' .. db.escapeString(player:getName()) .. ', ' .. killerGuild .. ', ' .. targetGuild .. ', ' .. os.time() .. ', ' .. warId .. ')') end end end end end Isso deve resolver ↑. Sobre o site eu não entendo muito bem, mas posso até tentar.
  24. 2 points
    Snowsz

    ANSWERED Talkaction Deathlist [TFS1.X]

    Pensei que só queria de player kkk, sobre cortar 2 letras, é falta de prática minha, mesmo mexendo com isso todo dia, me sinto enferrujado sempre, isso deve resolver: local deathListEnabled = true local maxDeathRecords = 5 function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) local playerId = player:getId() if nextUseStaminaTime[playerId] ~= nil then nextUseStaminaTime[playerId] = nil end player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Você morreu') player:removeBlessing(6) player:removeBlessing(7) if not deathListEnabled then return end local byPlayer = 0 local killerName local killerid if killer ~= nil then if killer:isPlayer() then killerid = killer:getGuid() byPlayer = 1 else local master = killer:getMaster() if master and master ~= killer and master:isPlayer() then killer = master killerid = killer:getGuid() byPlayer = 1 end end killerName = killer:isMonster() and killer:getType():getNameDescription() or killer:getName() else killerName = 'field item' end local byPlayerMostDamage = 0 local mostDamageKillerName if mostDamageKiller ~= nil then if mostDamageKiller:isPlayer() then byPlayerMostDamage = 1 else local master = mostDamageKiller:getMaster() if master and master ~= mostDamageKiller and master:isPlayer() then mostDamageKiller = master byPlayerMostDamage = 1 end end mostDamageName = mostDamageKiller:isMonster() and mostDamageKiller:getType():getNameDescription() or mostDamageKiller:getName() else mostDamageName = 'field item' end local KillersArray = {} for k, v in pairs(player:getDamageMap()) do local CreatureMT = Creature(k) if CreatureMT then table.insert(KillersArray, CreatureMT:getName()) end end local playerGuid = player:getGuid() db.query('INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`, `player_killers`) VALUES (' .. playerGuid .. ', ' .. os.time() .. ', ' .. player:getLevel() .. ', ' .. db.escapeString(killerName) .. ', ' .. byPlayer .. ', ' .. db.escapeString(mostDamageName) .. ', ' .. byPlayerMostDamage .. ', ' .. (unjustified and 1 or 0) .. ', ' .. (mostDamageUnjustified and 1 or 0) .. ', \"' .. table.concat(KillersArray, ";") .. '\")') local resultId = db.storeQuery('SELECT `player_id` FROM `player_deaths` WHERE `player_id` = ' .. playerGuid) local deathRecords = 0 local tmpResultId = resultId while tmpResultId ~= false do tmpResultId = result.next(resultId) deathRecords = deathRecords + 1 end if resultId ~= false then result.free(resultId) end local limit = deathRecords - maxDeathRecords if limit > 0 then db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit) end if byPlayer == 1 then local targetGuild = player:getGuild() targetGuild = targetGuild and targetGuild:getId() or 0 if targetGuild ~= 0 then local killerGuild = killer:getGuild() killerGuild = killerGuild and killerGuild:getId() or 0 if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer.uid) then local warId = false resultId = db.storeQuery('SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = ' .. killerGuild .. ' AND `guild2` = ' .. targetGuild .. ') OR (`guild1` = ' .. targetGuild .. ' AND `guild2` = ' .. killerGuild .. '))') if resultId ~= false then warId = result.getNumber(resultId, 'id') result.free(resultId) end if warId ~= false then db.asyncQuery('INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (' .. db.escapeString(killerName) .. ', ' .. db.escapeString(player:getName()) .. ', ' .. killerGuild .. ', ' .. targetGuild .. ', ' .. os.time() .. ', ' .. warId .. ')') end end end end end Talk: local function getArticle(str) return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a" end local function getMonthDayEnding(day) if day == "01" or day == "21" or day == "31" then return "st" elseif day == "02" or day == "22" then return "nd" elseif day == "03" or day == "23" then return "rd" else return "th" end end local function getMonthString(m) return os.date("%B", os.time{year = 1970, month = m, day = 1}) end function onSay(player, words, param) local resultId = db.storeQuery("SELECT `id`, `name` FROM `players` WHERE `name` = " .. db.escapeString(param)) if resultId ~= false then local targetGUID = result.getNumber(resultId, "id") local targetName = result.getString(resultId, "name") result.free(resultId) local str = "" local breakline = "" local resultId = db.storeQuery("SELECT `time`, `level`, `killed_by`, `is_player`, `player_killers` FROM `player_deaths` WHERE `player_id` = " .. targetGUID .. " ORDER BY `time` DESC") if resultId ~= false then repeat if str ~= "" then breakline = "\n" end local date = os.date("*t", result.getNumber(resultId, "time")) local article = "" local killed_by = result.getString(resultId, "killed_by") if result.getNumber(resultId, "is_player") == 0 then article = getArticle(killed_by) .. " " killed_by = killed_by:lower() end local killers = (result.getString(resultId, "player_killers") or ""):gsub(";", ", ") if date.day < 10 then date.day = "0" .. date.day end if date.hour < 10 then date.hour = "0" .. date.hour end if date.min < 10 then date.min = "0" .. date.min end if date.sec < 10 then date.sec = "0" .. date.sec end str = str .. breakline .. " " .. date.day .. getMonthDayEnding(date.day) .. " " .. getMonthString(date.month) .. " " .. date.year .. " " .. date.hour .. ":" .. date.min .. ":" .. date.sec .. " Morto no Level " .. result.getNumber(resultId, "level") .. " por " .. killers .. "." until not result.next(resultId) result.free(resultId) end if str == "" then str = "Sem mortes." end player:popupFYI("Mortes do personagem, " .. targetName .. ".\n\n" .. str) else player:sendCancelMessage("O jogador com esse nome não existe.") end return false end
  25. 2 points
    Snowsz

    ANSWERED Talkaction Deathlist [TFS1.X]

    Erro meu kkk, fez bem em mudar lá, tenta agora: local deathListEnabled = true local maxDeathRecords = 5 function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) local playerId = player:getId() if nextUseStaminaTime[playerId] ~= nil then nextUseStaminaTime[playerId] = nil end player:sendTextMessage(MESSAGE_EVENT_ADVANCE, 'Você morreu') player:removeBlessing(6) player:removeBlessing(7) if not deathListEnabled then return end local byPlayer = 0 local killerName local killerid if killer ~= nil then if killer:isPlayer() then killerid = killer:getGuid() byPlayer = 1 else local master = killer:getMaster() if master and master ~= killer and master:isPlayer() then killer = master killerid = killer:getGuid() byPlayer = 1 end end killerName = killer:isMonster() and killer:getType():getNameDescription() or killer:getName() else killerName = 'field item' end local byPlayerMostDamage = 0 local mostDamageKillerName if mostDamageKiller ~= nil then if mostDamageKiller:isPlayer() then byPlayerMostDamage = 1 else local master = mostDamageKiller:getMaster() if master and master ~= mostDamageKiller and master:isPlayer() then mostDamageKiller = master byPlayerMostDamage = 1 end end mostDamageName = mostDamageKiller:isMonster() and mostDamageKiller:getType():getNameDescription() or mostDamageKiller:getName() else mostDamageName = 'field item' end local KillersArray = {} for k, v in pairs(player:getDamageMap()) do local CreatureMT = Creature(k) if CreatureMT and CreatureMT:isPlayer() then table.insert(KillersArray, CreatureMT:getName()) end end local playerGuid = player:getGuid() db.query('INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`, `player_killers`) VALUES (' .. playerGuid .. ', ' .. os.time() .. ', ' .. player:getLevel() .. ', ' .. db.escapeString(killerName) .. ', ' .. byPlayer .. ', ' .. db.escapeString(mostDamageName) .. ', ' .. byPlayerMostDamage .. ', ' .. (unjustified and 1 or 0) .. ', ' .. (mostDamageUnjustified and 1 or 0) .. ', \"' .. table.concat(KillersArray, ";") .. '\")') local resultId = db.storeQuery('SELECT `player_id` FROM `player_deaths` WHERE `player_id` = ' .. playerGuid) local deathRecords = 0 local tmpResultId = resultId while tmpResultId ~= false do tmpResultId = result.next(resultId) deathRecords = deathRecords + 1 end if resultId ~= false then result.free(resultId) end local limit = deathRecords - maxDeathRecords if limit > 0 then db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit) end if byPlayer == 1 then local targetGuild = player:getGuild() targetGuild = targetGuild and targetGuild:getId() or 0 if targetGuild ~= 0 then local killerGuild = killer:getGuild() killerGuild = killerGuild and killerGuild:getId() or 0 if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer.uid) then local warId = false resultId = db.storeQuery('SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = ' .. killerGuild .. ' AND `guild2` = ' .. targetGuild .. ') OR (`guild1` = ' .. targetGuild .. ' AND `guild2` = ' .. killerGuild .. '))') if resultId ~= false then warId = result.getNumber(resultId, 'id') result.free(resultId) end if warId ~= false then db.asyncQuery('INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (' .. db.escapeString(killerName) .. ', ' .. db.escapeString(player:getName()) .. ', ' .. killerGuild .. ', ' .. targetGuild .. ', ' .. os.time() .. ', ' .. warId .. ')') end end end end end
  26. 2 points
    ZoR

    item que fala

    Valeu mano! eu estava tentando por o text mas não saberia se iria funcionar então deixei daquela forma. mas valeu mano! aprendi algo novo ! @Snowsz
  27. 2 points
    Snowsz

    item que fala

    Caso seja TFS 1.X: local Messages = { [Id do item] = "Msg", [Id do item2] = "Msg2 etccc" } function onUse(player, item, fromPosition, itemEx, toPosition) player:say(Messages[item:getId()]) return true end Isso não vai funcionar, o correto seria: local Messages = { [ID] = {Text = "Msg", Color = 21}, [ID] = {Text = "Msg", Color = 21} } function onUse(cid, item, fromPosition, itemEx, toPosition) doSendAnimatedText(getCreaturePosition(cid), Messages[item.itemid].Text, Messages[item.itemid].Color) return true end
  28. 2 points
    Nolis

    Mapas do Nolis

    Yurots Remake- Templo e Depot Mais Imagens
  29. 2 points
    danilo9317

    Elements RPG - Open Beta 26.08

    OPEN BETA previsto para essa segunda-feira 26.08.2019, a partir do período da manhã ! Criação de contas, download do jogo e loja de items já estão liberados em: Site: https://elementsrpg.servegame.com Discord: https://discord.gg/ZPwYwFE Resumo A história do servidor se baseia na era elemental, onde pessoas através dos elementos da natureza conseguem sobreviver e lutar contra os mistérios do mundo inexplorado. Vivem em ansiedade e a busca pelo poder é o que as motivam ao crescimento.. ~ Vocações Baseada nos 4 elementos na natureza, com a possibilidade de promoções a partir de certas façanhas Vocações Ar - Baseada na destreza e velocidade, harmonia os definem. - Água - Sobrevivência, consistência e adaptação. - Terra - Equilíbrio entre defesa e ataque. - Fogo - Acreditam que a melhor tática é a força de ataque supremo. Todas vocações possuem habilidades de controle de grupo, e AOE. ~ Rates Rates por stages, porem baixas e adaptáveis com decorrer do game, criaturas customizadas inclusive a experiência. GamePlays
  30. 2 points
    Atualização de 29/06/2019. Olá meus amigos, essa é a minha última contribuição free que faço na área de OTserver, fiz uma atualização bem completa do Gesior comparando com os que existem disponíveis, não vou falar muito pois grande parte já conhecem... Vou apenas posta algumas imagem das mudanças feitas. Sempre gostei de evoluir e de oferecer aos demais uma facilidade de obter um material grátis e de qualidade, nunca utilizei meu pouco conhecimento para prejudicar os demais, pelo o contrario sempre foi na intenção de ajudar e se em algum momento falhei, falhei inconscientemente. - Foi mudado algumas imagens de layout para renovar a estrutura. - Server Info + Most Power Ful Guilds na mesma estrura. - Create Account exigindo senhas com letras minusculas, maiúsculas e números, fortalecendo a segurança do seu cliente e dificultando futuras dores de cabeças. - Adicionado o mecanismo que identifica os valores de Premuim Points e Backup Points. - Algumas mudanças de layout. - Nome do player abaixo linkado. - Adicionado um Box de doação, com a intenção apenas de complementar o layout enriquecendo a pagina. - Fixado o bug edit town, e melhorado o layout. - Characters.php refeito, nesta imagem é uma visão de uma conta com access admin. - Visão normal. - Inventário completo. - Guilds com visão ampliada. - Detalhes... - Novo SHOP com as estrutura de layout melhorada e modernizada. - Sem BUGs lembre-se do CTRL + F5 para atualizar os cookies nesta pagina. - Detalhes... - Detalhes... - Detalhes... - Histórico do SHOP... DOWNLOAD SITE SHOP.LUA XAMPP 1.7.3 DATABASE LIMPA MYSQL DATABASE COMPLETA MYSQL TUTORIAIS ÚTEIS E COMPATÍVEIS PARA O SITE: PAGSEGURO AUTOMATICO SHOPGUILD BACKUP_POINTS SISTEMA VIP_TIME Créditos: Gesior.pl(WEBMaster) Felipe Monteiro(WEBMaster, WEBDesigner) Natanael Beckman(WEBNada) Nailan (WEBMaster) Ivens Pontes (WEBMaster) Marcio Porto (WEBMaster) Danyel Varejão (Programmer LUA, C++)
  31. 2 points
    Altere para: $storage = 2310; $skills = $SQL->query('SELECT * FROM players p inner join player_storage ps on p.id = ps.player_id WHERE p.deleted = 0 AND p.group_id = 1 OR p.group_id = 2 AND p.account_id != 1 and ps.key = '.$storage.' ORDER BY ps.value desc, p.level DESC LIMIT 10');
  32. 2 points
    Quando eu falo "!task" da esse erro... @Vodkart E quando eu vou entregar a task, fala esse outro erro..
  33. 2 points
    Melhorar como? Daria pra determinar a storage no proprio comando, verificar se o player existe e apenas aceitar o time em numeros para evitar bug. Ficaria assim: function onSay(cid, words, param) local t = string.explode(param, ",") local player = getPlayerByNameWildcard(t[1]) if(not t[2]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, words.." player, storage, tempo") return true end if(not player or (isPlayerGhost(player) and getPlayerGhostAccess(player) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " não existe ou está offline.") return true end t[3] = tonumber(t[3]) if(not t[3]) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Comando requer parametro numerico.") else setPlayerStorageValue(player, t[2], os.time() + t[3]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou a storage: "..t[2].." ao jogador "..t[1].." com o tempo de "..t[3].."!.") end return true end
  34. 1 point
    Auction System: sistema que disponibiliza uma negociação offline, onde você oferta um item e esse item é divulgado no site do server ou in-game e qualquer player pode comprar o item utilizando um comando especificado, é como se fosse um market para servidores mais antigos. Lembrando que esse sistema também funciona para TFS 1.x Os comandos disponíveis são: !offer add, itemName, itemCount, itemPrice ex: !offer add, plate armor, 1, 500 !offer buy, AuctionID ex: !offer buy, 9 !offer remove, AuctionID ex: !offer remove, 8 !offer list Crie uma arquivo .lua dentro da pasta data/talkactions/scripts com o nome auction_system.lua, dentro do mesmo adicione o code: Em seguida em talkactions.xml adicione a tag: <talkaction words="!offer" separator=" " script="auction_system.lua" /> No banco de dados execute as querys: CREATE TABLE `auction_system` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_id` int(11) NOT NULL, `item_name` varchar(255) NOT NULL, `item_id` smallint(6) NOT NULL, `count` smallint(5) NOT NULL, `value` int(7) NOT NULL, `date` int(11) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; A base do script foi retirado do script do vDk neste link, e caso alguém queira o PHP deste script pode usar esse:
  35. 1 point
    Djonga

    Xampp Erro

    cheque se no caminho informado no erro está a pasta do seu Apache, provavelmente ao instalar você colocou um caminho e o programa tá configurado pra outro, causando esse conflito. espero ter ajudado!
  36. 1 point
    @jdehon como está configurado em arquivo - propriedades - versão do cliente? o mapa q vc está abrindo está no desktop? qual a versão do map editor? 3.3? 3.5? Está usando sprites custom pelo q vi na imagem, experimentou o map editor versão estendida, disponível na seção de utilitários?
  37. 1 point
    e pra por exhaust nas spells é só tu coloca dps do onCast
  38. 1 point
    function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end local guildId = player:getGuild() guildId = guildId and guildId:getId() or 0 if guildId ~= 0 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "PODE PASSAR!") else player:teleportTo(Position(1012, 960, 9)) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end return true end
  39. 1 point
    Namikaze

    Sharck Show Off

    Hellou!! Estou modificando um Mapa, tentando deixar a cidade mais bonita porém com traps que deixe o PvP atraente com mais mecânicas,scaps etc. Também tentar passar mais seriedade e inserir um pouco de Rpg. Faço sozinho tenho pouco tempo e sabe lá Deus quando vai ficar pronto kkkk. Segue as fotenhas 😅: Templo Loja de Munições,Crossbow e Bow Terraço da Loja, Com alvos para treinas as flechadas no coração da morena Loja de Utilitários Com umas Mecanicaszinhas para PvP. Um dos acessos para uma parte digamos alta da cidade. mw ai é o fino.
  40. 1 point
    Pelo que me parece a ideia principal seria a alavanca voltar automaticamente depois de X tempo ... Você teria duas alternativas ... 1 - Usar um addEvent no próprio script da alavanca. (não aconselho) 2 - Achar as alavancas pela posição delas ... Mais ou menos assim: local tabela = { [1000] = Position(1184, 1011, 13), [1001] = Position(1184, 1011, 13), } for _, itemUid in ipairs(tabela) do local posicao = tabela[itemUid] if posicao then local tile = posicao:getTile() if tile then local alavanca = tile:getItemById(1945) if alavanca then alavanca:transform(1946) end end end end
  41. 1 point
    Com teu sv tbm bro. Tem como ser em segundos, pois estou colocando 0.2 e fica meio q bugando.
  42. 1 point
    ITALOx

    Dragon Ball Kai Adventure - Show Off

    Nice meu bom! sucesso ai ^^. quando estiver online, talvez eu possa entrar no servidor e chamar uns amigos pra jogar :D
  43. 1 point
    REV3884 TFS 0.4 OTC 0.6.6 OBSERVAÇÃO: Bom galera hoje vim trazer um código de expansão de visão para o otclient alterado por mim, usado somente para rev3884 e então se você usa um tfs 0.3.6 ou tfs 1.0 não vai dar certo, *Esse código foi alterado por mim para ser usado apenas para rev3884, procolo 8.60 e TFS 0.4 que no caso não achei e resolvi compartilhar essas alterações. 1° TUTORIAL 1 SOURCE DO SEU SERVIDOR. Abra Protocollgame.cpp 1 Ache ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && //(y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz)); ALTERE PARA: ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); 2 Ache: GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); ALTERE PARA: GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); 3 Ache: if(oldPos.y > newPos.y) // north, for old x { msg->put<char>(0x65); GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg); } else if(oldPos.y < newPos.y) // south, for old x { msg->put<char>(0x67); GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg); } if(oldPos.x < newPos.x) // east, [with new y] { msg->put<char>(0x66); GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg); } else if(oldPos.x > newPos.x) // west, [with new y] { msg->put<char>(0x68); GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } ALTERE PARA: if (oldPos.y > newPos.y) { // north, for old x msg->put<char>(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->put<char>(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->put<char>(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->put<char>(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } 4 ache GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Altere para GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); 5 ache GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.z - 3, 18, 14, 3, skip); ALTERE PARA GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); 6 ACHE GetMapDescription(oldPos.x - 8, oldPos.y + 1 - 6, newPos.z, 1, 14, msg); ALTERE PARA GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); 7 ACHE GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); ALTERE PARA GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); 8 Ache GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Altere para GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); 9 ache GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Altere para GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); 10 ache GetMapDescription(oldPos.x + 9, oldPos.y - 1 - 6, newPos.z, 1, 14, msg); Altere para GetMapDescription(oldPos.x + Map::maxClientViewportX+1, oldPos.y - (Map::maxClientViewportY+1), newPos.z, 1, ((Map::maxClientViewportY+1)*2), msg); AGORA EM MAP.H ache static const int32_t maxViewportX = 11; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; altere para: static const int32_t maxViewportX = 18; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 18; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 14; static const int32_t maxClientViewportY = 12; Pronto agora é só compilar a source do seu servidor 8.60 rev3884 PARTE 2 OTCLIENT 0.6.6 abra o map.cpp da source do otclient ache void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } ALTERE PARA void Map::resetAwareRange() { AwareRange range; range.left = 14; //Change this to = maxClientViewportX range.top = 12; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } COMPILE A SOURCE DO OTCLIENT E PRONTO!!! ESPERO TER SANADO VÁRIAS DÚVIDAS DE AUMENTAR TELA DO OTCLIENT EM REV3884. CRÉDITOS: Pra mim pela alterações funcionais. e pelo Flatlander por disponibilizar para tfs 0.3.6 e 1.0 pois esse está alterado pra tfs 0.4
  44. 1 point
    Kralifezik1

    Formando Equipe (PokeTbia).

    Ola a todos procuro pessoas pra ajudar criar servidor de poketibia eu vou bota online net de 100gb sei por online, ja tive servidor de poketibia , chmado Poke x Black. volta por online sou mapper, scripts. Objetivo: vamos procurar uma boa base pra por online vamos fazer divulgação e vamos editando pouco a pouco e atualizando o servidor. é isso so deixa msg ai quem quiser participar.
  45. 1 point
    Ackerzin

    Error no distro DOOR SCRIPT

    Seguinte o script que eu te mandei é pra por no movements, vou mandar o do actions agora. \/ esse é pra por em actions. \data\actions\scripts\other doors.lua
  46. 1 point
    function onUse(cid, item, frompos, item2, topos) local idPortaAberta = 9181 local idPortaFechada = 9181 local levelNeeded = 500 ---level necessario pra passar if not isPremium(cid) then return doPlayerSendTextMessage(cid,22,"Você precisa ter Premium Account para passar!") end if getPlayerLevel(cid) < levelNeeded then return doPlayerSendTextMessage(cid,22,"Você necessita do level "..levelNeeded.." !") end doTransformItem(item.uid, idPortaAberta) local dir = getDirectionTo(getPlayerPosition(cid), frompos) doMoveCreature(cid, dir) doMoveCreature(cid, dir) local porta = getTileItemById(frompos, idPortaAberta) if porta.uid > 0 then doTransformItem(porta.uid, idPortaFechada) end return TRUE end
  47. 1 point
    Celulose

    ANSWERED Max allow packet

    abre o phpmyadmin e faz o procedimento caso usa sql mesma coisa
  48. 1 point
    Yasuo

    Criando nova sample

    OBS: Não irei ensina o básico(como importar, criar db..etc.)...falarei só da parte dos samples. Tutorial usando Modern AAC: Primeiro abra o seu localhost/phpmyadmin ou 127.0.0.1/phpmyadmin Em seguida crie uma database com nome que desejar. Ao abrir a database que você criou....você irá importar o arquivo mysql.sql que fica na pasta data/schemas/mysql.sql Feito isso, abra a tabela players Por padrão...acredito que venha ao menos o char account manager...É ele que iremos utilizar para cria nosso sample! Explicação(só do que é relevante a criação do sample): id: é o número de identificação ordenado de acordo com a criação dos chars. Name: É o nome do char. world_id: É a identificação do mundo que o char faz parte. group_id: É o que vai determina o acesso do char. account_id: É a identificação da conta que o char pertence(também ordenado de acordo com a criação de contas). level: É o nível em que o char se encontra. vocation: É a identificação da vocação do personagem(ordenado de acordo com o arquivo vocations.xml que se localiza na pasta data/xml). health: É a quantidade atual de hp do char. healthmax: É a quantidade máxima de hp do char. looktype: É o Itemtype(outfit) inicial do char. maglevel: É o nível magico do char. mana: É a quantidade de mana atual do char. manamax: É a quantidade máxima de mana do char. town_id: Identificação da cidade inicial do char. posx posy posz : É a posição atual do char nas coordenadas x, y, z. cap: Capacidade que o char aguenta carregar. Edição: Name: Aqui você irá colocar o nome do sample. Level: Aqui você irá colocar o level inicial do player. Vocation: Aqui você irá colocar a vocação desse sample(verificar o arquivo vocations.xml na pasta data/xml). health: Aqui você irá colocar a quantidade de hp que o novo char irá ter: healthmax: Deixe igual o valor do health. looktype: Aqui você irá colocar o itemtype(outfit) que o novo char irá ter ao logar(no caso a outfit inicial da vocação), para editar essa parte será necessario o Dat Editor, com ele você abrirá seu cliente e procurará o Itemtype(outfit) inicial da vocação. maglevel: Aqui você irá colocar o nível mágico do char ao ser criado. mana: Aqui você irá colocar a quantidade de mana que o novo char irá ter. manamax: Deixe igual o valor da mana. town_id: Aqui você irá colocar a identificação da cidade inicial do char. posx posy posz : Aqui você irá colocar as coordenadas iniciais do char(onde ele ao logar irá aparecer). cap: Aqui você irá colocar a capacidade de carregamento inicial do char. Feito isso agora você precisa edita o arquivo config.php que fica na pasta do site! Edição: $config['vocations'] = Aqui você coloca as vocações(o nome do sample) ordenados começando de 1 . Exemplo: $config['vocations'] = array(1=>"Goku"); $config['server_vocations'] = Aqui você coloca as vocações(o nome do sample) com uma pequena mudança, em vez de ordena começando de 1, você irá colocar o id da vocação contido no arquivo vocations.xml na pasta data/xml. Exemplo: $config['server_vocations'] = array(0=>"None", 228=>"Goku"); $config['newchar_vocations'][0][1] = Aqui você irá colocar novamente o nome do sample ordenado começando de 1. Exemplo: [0]: identificação do mundo(world). [1]: ordem dos samples. $config['newchar_vocations'][0][1] = "Goku"; $config['newchar_vocations'][0][2] = "Bardock"; $startPos['x'] = $startPos['y'] = $startPos['z'] = Aqui você irá colocar as coordenadas inicais do char. Exemplo: $startPos['x'] = 1000; $startPos['y'] = 1000; $startPos['z'] = 7; Quase acabando so mais uma coisa: Abra a pasta do seu site e vá até system/application/views/create.php Aperte Ctrl + F e localize isso: select name="vocation" class="keyboardInput" id="vocation"> Logo em baixo você irá coloca novamente o nome dos sample ordenados começando de 1. Exemplo: <select name="vocation" class="keyboardInput" id="vocation"> <option value="1">Goku</option> <option value="2">Bardock</option> </select> Bom é isso. Até mais! Ajudei? REP+ Não Vai Cair Dedo! By Listrick
  49. 1 point
    bielzinhocrazy

    Heal aura system

    Sim, é possível, mas para isso você deve fazer um creaturescript, e não um talkaction, que ficaria assim : Vai em data\creaturescripts\scripts crie um arquivo chamado auralogin.lua e coloque : -- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end Depois vá em data\creaturescripts, abra creaturescripts.xml, e adicione a linha : <event type="login" name="AuraLogin" script="auralogin.lua"/> Se você quiser colocar alguma condição pro player logar com aura, adicione na parte após onLogin, do arquivo auralogin.lua. Por exemplo : function onLogin(cid) if(getPlayerLevel(cid)>1000) then return efeitosAura(1,tempo/8,cid) end return TRUE end No caso, todos os players com level maior que 1000 possuirão aura. E vai ser ligada automaticamente assim que logar.
  50. 1 point
    madaras

    [Spell] Aura Spell 2.0

    Bom pessoal a um tempo atrás eu estava com um projeto de OTserv no qual uma das classes ia ser o " Elementist " que ia controlar todos os elementos e tals, eu estava criando algumas spells para essa classe e um amigo me disse que tinha uma spell grátis em um site que vendia coisas relacionadas a OTserv, fui dá um olhada, gostei, testei e estava usando no meu projeto, dei uma olhada nele hoje e decidir postar a Spell pra vocês. Ela consiste em criar uma forma de aura em volta de seu personagem assim atacando todos os monstros que tentam se aproximar. Ela esta totalmente configuravel para poder usar 6 tipos de elementos e estes são: "fire","ice","energy","death","earth","all". Que possibilita criar 6 spells diferentes a partir desta. Vamos começar, vá em Data > Spells > Scripts crie um arquivo chamado Aura.Lua e coloque o seguinte dentro : Agora em Data > Spells > Spells.xml e coloque a seguinte tag : <instant name="Aura" words="aura" lvl="80" mana="200" prem="0" blockwalls="1" needlearn="0" event="script" value="Aura.lua"/> Pronto, Aqui está um vídeo demostrativo da Aura Spell : Creditos ~ Jhon992
This leaderboard is set to Sao Paulo/GMT-03:00

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...