Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/03/16 em todas áreas

  1. [8.6] Staff Time

    L3K0T e 4 outros reagiu a Vodkart por uma resposta no tópico

    5 pontos
    #UPDATE# V 1.1 - BUG DE BUGAR STORAGE AO FECHAR O SERVE REMOVIDO É um sistema onde mostra o tempo que o jogador ficou online no server... E tem mais alguns comandos adicionais: /stafftime NOME DO JOGADOR DA STAFF faz com que mostre o tempo de determinado player da staff /allstafftime faz com que mostre o tempo de todos os membros da staff /stafftimecleall Reinicia o tempo de todos os membros da staff /stafftimeclear NOME DO JOGADOR DA STAFF Reinicia o tempo de determinado player da Staff Na pasta MODS: StaffTime.xml <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Staff Time System" version="1.1" author="vodkart" contact="none" enabled="yes"> <config name="stafftime_lib"><![CDATA[ _Staff_Config_ = { storages = {448507,448508,448509}, min_group_id = 1 -- aqui vai contar a partir do 2, 3, 4 ... } function timeString(timeDiff) local dateFormat = { {"day", timeDiff / 60 / 60 / 24}, {"hour", timeDiff / 60 / 60 % 24}, {"minute", timeDiff / 60 % 60}, {"second", timeDiff % 60} } local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find("second") then local a, b = ret:find(" and ") ret = ret:sub(b+1) end return ret end function getStaffTime(name) local target_online = getPlayerByNameWildcard(name) if not isPlayer(target_online) then local info = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[1]) if info:getID() ~= -1 then var_time = timeString((-(info:getDataInt("value")))) else var_time = 0 end else if getPlayerStorageValue(target_online, _Staff_Config_.storages[2]) <= 0 then var_time = 0 else var_time = timeString((os.time() - getPlayerStorageValue(target_online, _Staff_Config_.storages[1]))) end end return var_time end function getAllStaffTime() local query, str = db.getResult("SELECT `name`, `group_id` FROM `players` WHERE `group_id` > ".._Staff_Config_.min_group_id), "--> STAFF TIME <--\n\n[Group]Nick - Tempo Online\n" if (query:getID() ~= -1) then repeat local _ = query:getDataString("name") str = str .. "\n ["..getGroupInfo(query:getDataInt("group_id")).name.."]".._.." - "..getStaffTime(_) until not(query:next()) query:free() end return str end function doSaveStaffTime(cid) if getPlayerStorageValue(cid, _Staff_Config_.storages[2]) >= 1 then setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) - os.time()) setPlayerStorageValue(cid, _Staff_Config_.storages[3], getPlayerStorageValue(cid, _Staff_Config_.storages[1])) setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) + os.time()) end end function deleteAllStaffTimes() db.executeQuery("DELETE FROM `player_storage` WHERE `key` = ".._Staff_Config_.storages[1]) db.executeQuery("DELETE FROM `player_storage` WHERE `key` = ".._Staff_Config_.storages[2]) db.executeQuery("DELETE FROM `player_storage` WHERE `key` = ".._Staff_Config_.storages[3]) for _, player in ipairs(getPlayersOnline()) do if getPlayerGroupId(player) > _Staff_Config_.min_group_id then setPlayerStorageValue(player, _Staff_Config_.storages[1], os.time()) setPlayerStorageValue(player, _Staff_Config_.storages[2], 1) setPlayerStorageValue(player, _Staff_Config_.storages[3], 0) end end end function deletePlayerStaffTimes(name) local target_online = getPlayerByNameWildcard(name) if not isPlayer(target_online) then db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[1]) db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[2]) db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[3]) else setPlayerStorageValue(target_online, _Staff_Config_.storages[1], os.time()) setPlayerStorageValue(target_online, _Staff_Config_.storages[2], 1) setPlayerStorageValue(target_online, _Staff_Config_.storages[3], 0) end end ]]></config> <globalevent name="Salve-StaffTime" interval="30" event="script"><![CDATA[ domodlib('stafftime_lib') function onThink(interval, lastExecution, thinkInterval) if #getPlayersOnline() > 0 then for _, cid in ipairs(getPlayersOnline()) do if getPlayerGroupId(cid) > _Staff_Config_.min_group_id then doSaveStaffTime(cid) end end end return true end]]></globalevent> <globalevent name="StaffDebug-Start" type="start" event="buffer"><![CDATA[ domodlib('stafftime_lib') local q = db.getResult("SELECT `id` FROM `players` WHERE `group_id` > ".._Staff_Config_.min_group_id) if (q:getID() ~= -1) then repeat local p = q:getDataInt("id") u = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = "..p.." AND `key` = ".._Staff_Config_.storages[3]) if u:getID() ~= -1 then db.executeQuery("UPDATE `player_storage` SET `value` = "..(u:getDataInt("value")).." WHERE `player_id` = "..p.." AND `key` = ".. _Staff_Config_.storages[1]) end until not(q:next()) q:free() end return true]]></globalevent> <talkaction words="/stafftime;/allstafftime;/stafftimecleall;/stafftimeclear" event="buffer"><![CDATA[ domodlib('stafftime_lib') if (words == "/stafftime") then local t = string.explode(param:lower(), ",") if (param == "") then doPlayerSendCancel(cid, "use um comando valido") return true elseif not getPlayerGUIDByName(t[1]) then doPlayerSendCancel(cid, "Desculpe, mas o jogador [" .. t[1] .. "] não existe.") return true elseif db.getResult("SELECT `group_id` FROM `players` WHERE `id` = "..getPlayerGUIDByName(t[1])):getDataInt("group_id") <= _Staff_Config_.min_group_id then doPlayerSendCancel(cid,"este jogador não é um membro da staff.") return true end return doPlayerPopupFYI(cid, "Tempo Total Online:\n\n"..t[1].." - "..getStaffTime(t[1])..".") elseif (words == "/allstafftime") then if getPlayerAccess(cid) < 5 then doPlayerSendCancel(cid, "você não tem permissão para usar este comando") return true end return doPlayerPopupFYI(cid, getAllStaffTime()) elseif (words == "/stafftimecleall") then if getPlayerAccess(cid) < 5 then doPlayerSendCancel(cid, "você não tem permissão para usar este comando") return true end deleteAllStaffTimes() return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você limpou a Staff Time de toda a equipe do servidor.") elseif (words == "/stafftimeclear") then local t = string.explode(param:lower(), ",") if getPlayerAccess(cid) < 5 then doPlayerSendCancel(cid, "você não tem permissão para usar este comando") return true elseif (param == "") then doPlayerSendCancel(cid, "use um comando valido") return true elseif not getPlayerGUIDByName(t[1]) then doPlayerSendCancel(cid, "Desculpe, mas o jogador [" .. t[1] .. "] não existe.") return true elseif db.getResult("SELECT `group_id` FROM `players` WHERE `id` = "..getPlayerGUIDByName(t[1])):getDataInt("group_id") <= _Staff_Config_.min_group_id then doPlayerSendCancel(cid,"este jogador não é um membro da staff.") return true end deletePlayerStaffTimes(t[1]) return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você limpou a Staff Time do jogador "..t[1]) end ]]></talkaction> <event type="login" name="StaffTimeLogin" event="script"><![CDATA[ domodlib('stafftime_lib') function onLogin(cid) if getPlayerGroupId(cid) > _Staff_Config_.min_group_id then if getPlayerStorageValue(cid, _Staff_Config_.storages[2]) <= 0 then setPlayerStorageValue(cid, _Staff_Config_.storages[1], os.time()) setPlayerStorageValue(cid, _Staff_Config_.storages[2], 1) else setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) + os.time()) end end return true end]]></event> <event type="logout" name="StaffTimeLogout" event="script"><![CDATA[ domodlib('stafftime_lib') function onLogout(cid) if getPlayerGroupId(cid) > _Staff_Config_.min_group_id then setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) - os.time()) setPlayerStorageValue(cid, _Staff_Config_.storages[3], getPlayerStorageValue(cid, _Staff_Config_.storages[1])) end return true end]]></event> </mod>
  2. Novo Pack de Sprites By Anjo Celestial Estão todos em OBD,com seus devidos Icon System,Morto,Portrait e Corpo. Façam bom proveito!!!!! Downloads: Obs(Esse down é as sprites separadas em OBD todas salva em v2): https://www.sendspace.com/file/bfm13m Obs(Esse down é as sprites em Dat e Spr em v1,v2 e v3,a version que funfa no seu obd vc pega):https://www.sendspace.com/file/tay66y Scan: https://www.virustotal.com/pt/file/427c5108ff6dd316081dc564d878a093aaf02a65c0fcb4e9a687072afa61c24a/analysis/1464909664/ PRINTS:
  3. Reporte qualquer bug encontrado. - Mudanças: * opcode adicionado * Monstros andando em cima de corpos * War system arrumado * Anti-divulgação melhorado * Cast system arrumado * Crash bugs arrumados * Adicionado exhaust ao comprar/vender items * Account manager com opção para cidades * /ghost stacking arrumado * !disband arrumado * Erros no linux arrumado * Aleta som arrumado * Bug nos rings arrumado * Adicionado suporte para Visual Studio * Remover battle ao entrar em PZ * Não pode jogar lixo em casas * Salt removido - Downloads: * Distro (x32): https://github.com/Fir3element/binaries/raw/master/x32-windows.zip * Distro (x64): https://github.com/Fir3element/binaries/raw/master/x64-windows.zip * Requisitos: Microsoft Visual C++ Redistributable Package * Source + datapack: https://github.com/Fir3element/3777/archive/refs/heads/main.zip - Scans: * Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/ * Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/ * Source + datapack: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
  4. Gran Castle Event (8.54+)

    koyotestark reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    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. [8.6] TOP 5 LEVEL no BroadCast

    bagulhoescroto reagiu a Vodkart por uma resposta no tópico

    1 ponto
    Me pediram para postar uma especie de propaganda, onde aparecia os top level do servidor, no caso está configurado para aparecer os 5 leveis mais alto, como mostra a imagem: como esse script está no meu servidor faz anos, resolvi jogar para a molecada: Data/globalevents/script topleveis.lua function onThink(interval, lastExecution) local max, query = 5, db.getResult("SELECT `name`, `level` FROM `players` WHERE `id` > 6 AND `group_id` < 2 ORDER BY `level` DESC, `name` ASC;") local str = "TOP "..max.." Rank Level:\n\n" if (query:getID() ~= -1) then k = 1 while true do str = str .. "\n " .. k .. " - "..query:getDataString("name").."["..query:getDataInt("level").."]" k = k + 1 if not(query:next()) or k > max then break end end query:free() end doBroadcastMessage(str, 22) return true end TAG: <globalevent name="TopLevels" interval="3600" event="script" value="topleveis.lua"/>
  6. Heal aura system

    Salazar Slytherin reagiu a bielzinhocrazy por uma resposta no tópico

    1 ponto
    Olá pessoal do TibiaKing, Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir : Bom, vamos aos códigos. Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) : -- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust 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 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências. Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele : <talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto : function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele : <event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema. OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado! Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
  7. 1 ponto
    Versão 8.54 version 0.3.6 (Crying Damson) Ae galera estou compartilhando com vocês o código para quem for aumentar o limite de magic effects no servidor é trabalhoso então para ajudar a galera a não ficar horas fazendo resolvi trazer os códigos prontos xD Tópico atualizado 04/08/2018 as 23:57 # Atualização Códigos atualizados do 427 para o 700 const.h Tools.cpp 000-constant.lua Espero que ajude alguém xD
  8. [10.91] Remere's Map Editor

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

    1 ponto
    Bom pessoal, há muito tempo o Remere's Map Editor ficou open source. Eu estou testando e gostaria de compartilhar ele com vocês. Changelog Versão 10.91 adicionada (NOVO) (Não é uma versão oficial e como sempre digo: Não é recomendado que se utilize os items novos, apenas crie o mapa sem utilizá-los até que tenha um OTB oficial) Melhorias no sistema de zoom Suporte para versões 10.10+ Live casts Ultima versão do github Informações Precisa do Microsoft Visual C++ 2013 - 32/64Bits: Redistributable Package Não tem suporte para Windows Xp Download Versão até 10.91 rev 250 https://mega.nz/#!z9910YbL!9cHUvoYlrFiwshsVCe-JEKKzqrwp-w7ZsCqhFiAtBWE Créditos Hjnilsson (RME) MartyX - Ajudou a compilar Comedinha (Bruno Carvalho) Pessoal do TPForums Outros Contato com o criador: Pelo Twitter: @leremere
  9. Npc Auction Versão 1.0 [Atualizado]

    FeehLoveCes reagiu a Vodkart por uma resposta no tópico

    1 ponto
    Versões: Foi feito para servidores que não tem o market system, mas funciona desde o 8.54 até 9.6+ Suporta: servidores Sqlite e MySql Sobre: O Npc basicamente funciona da seguinte maneira, você "deposita" alguns items neste npc e durante "X" dias ele vende para você, claro que o npc irá cobrar "Y" preço pelo serviço... Para mais informações acessem o link que explica com imagens: http://tibiaking.com...mo-auction-npc/ Basta fazer o download, executar a query que é pedida e depois disso colocar os arquivos em seus respectivas pastas. ##ATUALIZADO Versão 1.0## - Agora a Lib foi ajustada e bugs removidos - Itens de type "others" e "ammunition" arrumados - O Npc agora devolve seus itens quando quiser - Os itens vão para o depot quando não vende o item - Nova aba de "all" que mostra todos os itens em uma janela, independente da seleção do tipo de item; obs: Antes de instalar a lib leia o arquivo txt, porque tem 2 tipos de lib, um é usado 'db.executeQuery' e o outro 'db,query'(fiz isso para o pessoal que não sabe alterar as funções) Npc Auction 1.0.rar
  10. Para quem não sabe como funciona o script é o seguinte o ADM pode usar o comando para adicionar um item para todos os players online no servidor. • Adicionando o script • Em "data/talkactions/talkactions.xml" adicione está tag : <talkaction log="yes" words="/additem" access="5" event="script" value="additem.lua"/> Em "data/talkactions/scripts" crie um arquivo lua com o nome "additem" e adicione este script nele : function onSay(cid, words, param, channel) local t = string.explode(param, ",") if t[1] ~= nil and t[2] ~= nil then local list = {} for i, tid in ipairs(getPlayersOnline()) do list[i] = tid end for i = 1, #list do doPlayerAddItem(list[i],t[1],t[2]) doBroadcastMessage(getPlayerName(cid) .. " Acabou de dar: " .. t[2] .." ".. getItemNameById(t[1]) .. " para todos os players online!") end else doPlayerPopupFYI(cid, "No parm...\nSend:\n /itemadd itemid,how_much_items\nexample:\n /itemadd 2160,10") end return true end • Configurando •
  11. [Gesior] Widget Top Level BOX

    Thiagodourado1 reagiu a KekezitoLHP por uma resposta no tópico

    1 ponto
    Para quem deseja ter um box igual a este em seu site: 1º Baixe o arquivo: http://www.sendspace.com/file/ejr1jt Virus Total: https://www.virustot...sis/1360784756/ 2º Extraia os arquivos na pasta do seu layout. 3º Abra layout.php e procure por: <div id="Themeboxes"> 4º Para quem tem pouco mais de experiencia vou falar da seguinte forma: Copie esta linha antes de fechar a div themeboxes. <?php include($layout_name.'/widget_rank.php'); ?> Para quem não entendeu o que eu disse, fica meio complicado explicar onde inserir a linha, então, depois desta linha que disse para pesquisar vá copiando a linha do passo 4º e atualizando o site até obter um resultado agradável. Meu layout.php fico assim: <div id="Themeboxes"> <div id="NewcomerBox" class="Themebox" style="background-image:url(<?PHP echo $layout_name; ?>/images/themeboxes/newcomer/newcomerbox.gif);"> <div class="ThemeboxButton" onClick="BigButtonAction('?subtopic=createaccount')" onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" style="background-image:url(<?PHP echo $layout_name; ?>/images/buttons/sbutton.gif);"><div class="BigButtonOver" style="background-image:url(<?PHP echo $layout_name; ?>/images/buttons/sbutton_over.gif);"></div> <div class="ButtonText" style="background-image:url(<?PHP echo $layout_name; ?>/images/buttons/_sbutton_jointibia.gif);"></div> </div> <div class="Bottom" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/box-bottom.gif);"></div> </div> <div id="PremiumBox" class="Themebox" style="background-image:url(layouts/tibiacom/images/themeboxes/premium/premiumbox.gif);"> <div class="ThemeboxButton" onClick="BigButtonAction('?subtopic=donate')" onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);" style="background-image:url(layouts/tibiacom/images/buttons/sbutton.gif);"><div class="BigButtonOver" style="background-image:url(layouts/tibiacom/images/buttons/sbutton_over.gif);"></div> <div class="ButtonText" style="background-image:url(http://i54.tinypic.com/25uqof8.gif);"></div> </div> <div class="Bottom" style="background-image:url(layouts/tibiacom/images/general/box-bottom.gif);"></div> </div> <?php include($layout_name.'/widget_rank.php'); ?> </div> Creditos Kekezitolhp Duvidas ou erros só pergunta
  12. Erondino v17.1 By {ABEROS} BPO Open Source

    Danielcrf reagiu a Valakinhas por uma resposta no tópico

    1 ponto
    V17.1 *Informações +Edições Spoiler Foi adicionado o mapa novamente +Print's Spoiler http://prntscr.com/757ioo http://prntscr.com/757kja +Erros/Bug's +Creditos +Download + Scan Server: Link OTC: Link Scan Server: Link Dat e spr desbloqueado: Link QUALQUER ERRO E BUG, COMENTAR NESSE TÓPICO Desculpa pelos erros ortográficos. ah antes que me esqueça ID da vara de pesca 2580
  13. Global Full com Cast e Eventos Servidor recomendado para ser utilizado em Linux (Debian 6) IMPORTANTE VOCÊ LER AQUI Há um tempo atrás negociei um servidor com Neto Sanches, também conhecido como otrackerrr, aqui no fórum tem o perfil de NTRemondini. O mesmo me roubou R$450 reais, e eu estou postando o servidor que recebi para vocês, pois para quem monta servidores, tem scripts utilizáveis, mas não recomendo utilizar o server antes de uma revisão, pois foi passado por um ladrão. Felizmente consegui meu dinheiro de volta, e alerto vocês do Tibia King para tomarem cuidado com o mesmo, caso tenha algum problema com este tópico me avisem e eu posto provas do mesmo. O skype do ladrão é netosremondini. Agora vamos ao servidor: Eventos e Features War of Emperium Trainers Offline Capture the Flag Battlefield Event Lottery System Itens VIPs já configurados Raids Automáticas Thais Editada Dota Event Guild Points Global Server Versão: 8.60 Mapa: 100% Scripts: 100% Sistemas:. 100% Items: 100% Monstros: 100% Npcs: 100% O Distro é TFS e aparentemente só roda sem bugs no Debian 6 Cidades Algumas cidades VIPs Ankrahmun Ab'Dendriel Carlin Darashia Edron Yalahar Kazordoon Liberty Bay Port Hope Svargrond Thais Venore Farmine Zao Cormaya OTServ Completo http://www.mediafire.com/download/rgx46b9220nsjy7/Global_by_Neto_Remondini.zip Scan https://www.virustotal.com/en/file/f09a547368897dcc857eddc11d82f7084b3bf7ecf25e41bee57aceb224cf36fc/analysis/1459977122/ Recomendo utilizarem os arquivos do servidor, como eventos, scripts... Tem coisa que é difícil encontrar na net de graça.
  14. 1 ponto
    Salve galerinha do TK. A tempos algumas pessoas vem me pedindo sistema simples de anunciar morte, visto bastante em servidores de wars, baiaks e demais servidores. Então resolvi fazer e trazer aqui para vocês do TK. Sistema simples e legas, quanto um player morrer para outro player irá aparecer no Default: "Nome do player que morreu" acabou de ser humilhado pelo jogador "Nome do player que matou" Acho que esse sistema deixa a galera louca, caçando players e zoando então resolvi trazer pra cá. Primeiramente em creaturescripts.xml adicione a seguinte linha: <event type="kill" name="anunciarmorte" event="script" value="anunciar_morte.lua"/> Pós adicionar, crie um arquivo com o nome de anunciar_morte.lua e coloque dentro da pasta creaturescripts/scripts com o seguinte conteúdo: function onKill(cid, target, lastHit) if not isPlayer(target) or not isPlayer(cid) then return true end doBroadcastMessage(""..getCreatureName(target).."["..getPlayerLevel(target).."] acabou de ser humilhado pelo jogador "..getCreatureName(cid).."["..getPlayerLevel(cid).."].", MESSAGE_STATUS_CONSOLE_ORANGE) return true end E por fim vá até creaturescripts/scripts e abra seu login.lua, abaixo de: registerCreatureEvent(cid, "Mail") ou qualquer linha parecida com registerCreature... adicione a seguinte linha: registerCreatureEvent(cid, "anunciarmorte") Pronto, finalizado! Só isso? Sim script simples e divertido! Qualquer dúvida me comunique Créditos: Absolute.
  15. OTNaruto Earth V1

    whit3w0lf reagiu a Phesados por uma resposta no tópico

    1 ponto
    OTNaruto - Earth (Version 8.54) [+] Informações sobre o server (Versão base - PedroSTT) [+]BUGS (Versão base - PedroSTT) [+] Minhas alterações [+] Notificações sobre o servidor PRINTS Download (Cliente) Scan(CLIENTE) Download (server) Scan(SERVER) Verificação(AVAST) Oque é Narutibia? servidor baseado no anime Naruto Shippuden na versão MMORPG 2D Tibia. [+] Contatos Lembre-se se ti fui útil deixe aquele rep+ Sua mão não cairá e ainda vai deixar uma criança feliz e ela ajudará cada vez mais -Family Okumura
  16. Olá, Sinta-se livre para ler a oferta ~Mapper~ I oferecer um desempenho de lugares deslumbrantes de caça, quests, depósitos, templos, salas de TP no e encomendas especiais! Meu trabalho 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ~Contato~ • Email: [email protected] • Skype: kkazelot • GG: 56353791 • Priv Atenciosamente, seu Marsupilami
  17. Tibia Guitar Hero [0.3.6~0.4]

    ADM Mayk on BaiakME reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    Fala pessoal, hoje vim trazer pra vocês um sistema que eu desenvolvi em outro fórum e decidi trazer pra cá Chega de falatório e vamos direto aos negócios: Introdução: O sistema em si é uma cópia dos jogos de ritmo (GuitarFreaks, Band Hero, Rocksmith e o próprio Guitar Hero). Neste jogo pequenas notas irão cair pela tela até atingir um local especial, onde você poderá usar as teclas (Shift + 7, Shift + 8, Shift + 9, ou apenas 7, 9 e 9 [com Num Lock desativado]) para escolher as direções que as notas estão afim de "ativá-las". Uma vez ativada a nota ela será "queimada" e será considerado 1 acerto. Caso você não consiga ativar a nota e ela passar direto, um efeito de fumaça indicará o "Miss", o mesmo vale para se você tentar ativar uma região sem notas. Sistema de pontuação: Haverão 3 classificadores estatísticos para cada música tocada, sendo eles: Notas acertadas: O principal fator de ponto, ele que definirá seu recorde e o valor máximo q ele pode assumir será o número de notas da música. Movimentos errados: Quantidade de movimentos que você fez para alguma região que não possuia notas, conta como pontuação punitiva. Notas passadas/erradas: Quantidade de notas que você deixou escapar, note que as notas acertadas + notas passadas compõe o número total de notas da música. Por enquanto o sistema não possui nenhum preço para se jogar mas também não possui nenhuma recompensa, fiz com o intuito de ser apenas um mini game divertido dentro do Tibia. Porém o código é livre e está disponibilizado aqui embaixo pra qualquer um modificar como desejar. Video explicativo: Dificuldades: O mini game possui 3 dificuldades, porém essa quantidade é tão configurável quanto as pré definições de cada dificuldade. Além da quantidade de notas ser diferente, a velocidade com que elas descem e consequentemente o tempo que você tem pra acertá-las fica diminuido. Diferenciais: Um forte diferencial desse sistema é que ele foi feito seguindo todas as regras possíveis pra melhorar seu desempenho, desde funções recursivas leves até separação em funções encapsuladas que carregam apenas as informações necessárias. O sistema contém também algumas seguranças que serão explicadas mais abaixo juntamente com o código para prevenir bugs e garantir diversão sem dores de cabeça! Instalação (Map Editor): Primeiramente faça uma área parecida com essa daqui: Não precisa ser igualzinha, apenas seguir a mesma proporção Agora use a ferramenta de No-Logout para setar os quadradinhos que contém UID e UID2 escritos como No-Logout, isso vai impedir que players desloguem e fiquem presos dentro da sala (se eles derem exit, quando eles relogarem estarão do lado de fora da sala) Ainda olhando a foto acima, coloque 42320 nos pisos que estão escritos UID, e 42319 no piso que contém UID2. Nas alavancas, coloque uid 2819 em todas elas e coloque actionid 101 para a alavanca do fácil, 102 na alavanca do médio e 103 na do dificil; A regra é sempre 100 + dificuldade, como nós estamos utilizando apenas 3 será do 101 ao 103. Note que se você esquecer ou colocar uma dificuldade não existente o sistema adotará a dificuldade 1 como padrão para aquela alavanca. Se chegou até aqui, meus parabéns. Muito provável que você tenha feito tudo certo. Agora vamos à parte do código. Instalação (scripts): Em actions.xml insira essa linha <action uniqueid="2819" event="script" value="GHtest.lua"/> Agora em data/actions/scripts crie um arquivo com extensão.lua e chameo de GHtest. Insira o seguinte bloco de instruções dentro dele: Aproveite e já configure as posições npos, startPos e finalPos de acordo com as posições do seu map editor (olhe na segunda imagem para ver onde deve ser cada uma das posições com base na sala) Feito isso crie um arquivo em data/lib com nome qualquer, aqui em casa eu utilizei o nome 120 - Guitar Hero Lib e a extensão.lua. Coloque isto dentro desse arquivo e salve: Agora adicione a seguinte tag em data/movements/movements.xml: <movevent type="StepIn" uniqueid="42320;42319" event="script" value="GHTestmov.lua"/> Por fim crie um arquivo chamado GHTestmov.lua em data/movements/scripts e preencha seu conteúdo com as linhas abaixo: Aproveite para deixar a npos idêntica à npos que você configurou lá no actions se baseando na posição da sua sala no map editor. ------------------------ FIM ------------------ O sistema já deve funcionar como foi planejado, se você não manja de código ou quer o sistema exatamente como foi mostrado no vídeo você pode ignorar a parte abaixo. Configurando seu sistema (básico): Para as pessoas que querem configurar apenas as coisas básicas, você pode fazê-lo nas primeiras linhas de cada script (actions/movements) ou alterando diretamente na lib, irei ensinar passo a passo aqui oque significa cada coisa. Alterando a lib As coisas básicas que podem ser alteradas na lib são as seguintes: dif = { -- [dificuldade] = notas que serao tocadas (nil = vazio, 0 = primeira posicao, 1 = segunda e 2 = terceira) [1] = {nil,nil,0,1,2,nil,nil,2,1,1,0,0,2,0,1}, [2] = {nil,nil,0,1,1,2,1,1,0,0,2,0,1,nil,1,2,1,1,0,0,2,0,1}, [3] = {nil,nil,0,nil,1,nil,1,1,0,0,2,0,1,1,1,nil,0,2,1,1,0,0,2,1,1,0,nil,2,2,1,1,1,1,2} } delay = { -- delay entre cada nota de acordo com a dificuldade [dificuldade] = delay [1] = 500, [2] = 400, [3] = 300 } recorde = { -- salva os recordes de cada dificuldade separadamente [1] = 12724, [2] = 12725, [3] = 12726 } dif separa como será cada música de cada dificuldade, as notas sempre serão nesse exato formato. nil significa que não estarei usando posição nenhuma naquela linha, 0 significa a primeira posição (nota verde), 1 significa segunda opção (nota vermelha) e 2 significa terceira opção (nota azul). Eu aconselho a começar todas as músicas com 2 ou mais 'nil' para dar tempo de o player entender que vai começar. A distribuição que eu usei foi meio que aleatória então sinta-se a vontade pra mudar tanto o tamanho das musicas quanto a variedade de notas. delay é a tabela que oganiza os delays de cada dificuldade, isso significa que para a dificuldade 1(fácil) nós temos 500 milisegundos para cada mudança de nota (1000 milisegundos = 1 segundo), ou seja, a cada 2 passadas de nota temos 1 segundo dentro da sala. No modo hard a cada 300 milisegundos mudamos a nota, deixando o jogo muito mais rápido e dificil. recorde é a tabela que possui os storages que irão salvar os recordes nas respectivas dificuldades. Alterando actions local storage_point = 12721 -- storage que salva os pontos local storage_erradas = 12722 -- storage que salva as notas erradas local storage_passadas = 12723 -- storage que salva as notas que passaram Apenas mude os storages Alterando movements local itemid = 1680 --- coloque o id da nota do meio local npos = {x = 141, y = 51, z = 7} -- posicao que ira nascer a primeira nota local storage_point = 12721 -- storage que salva os pontos local storage_erradas = 12722 -- storage que salva as notas erradas local storage_passadas = 12723 -- storage que salva as notas que passaram aconselho mexer somente nos storages, mantendo igual à action. Só abra o spoiler abaixo se você estiver descontente com a forma que seu código roda e tiver certeza absoluta de que você tem o conhecimento necessário para alterar as coisas que vou explicar. Configurações (intermédiarias e avançadas) Espero que vocês tenham curtido, façam um bom uso e qualquer dúvida postem nos comentários abaixo. Agradecimento ao @dalvorsn pela função que limpa a sala antes de começar o jogo e ao pessoal do servidor Refugia que fez um script de guitar hero lá e me deu a idéia. Abraços do Lobo.
  18. [TFS 1.2] Jogos Vorazes (com mapa)

    Julio Nogueira reagiu a DeCarvalho por uma resposta no tópico

    1 ponto
    Bem bem bem bem.. venho trazer aqui um sistema/script seja la como quiser chamar que me chamou bema a tenção por ser bem interessante.. Feito pelo Karain (qual pedi autorização para repostar).. inicialmente havia sido feito para 0.4, inspirado num mini game para mc mas com a tendência de mudança e pedidos da comunidade o mesmo foi atualizado.. Não me peçam 0.4 pois ele não disponibilizou.. e bem.. atualizem-se né... eu não suporto 0.4 (para quem não entende, não suporto de não apóio) .~> Sobre o sistema - Como funciona <~. Primeiramente, se o jogador decidir se juntar a lista de espera do evento ele irá utilizar o comando !join hunger games e pronto.. estará na lista de espera. Depois de um tempo e quantidade de players para o evento (ambos configuráveis), assim que o evento começar eles serão teleportados para um local; terão todos seus items removidos de forma segura para um depot (configurável) Em cada mapa haverá chests que tem uma chance (random) de conter alguns items, o player precisa encontrar e coletar com intenção de sobreviver e ser o último player vivo. Premio configurável .~> Mapa<~. o mapa não foi feito pelo Karain, caso você seja dono do mapa e tenha como provar, por favor informe para que seu nome seja colocado nos créditos Download Do Mapa Aqui P.s.: não sei colocar scan nem como faz, se for preciso scan alguém faz por favor que eu edito o post Bug conhecido (mas acho que para server que não fique reiniciando isso não venha a ser um problema..) não testei essa parte para ver o que realmente ocorre - alguns items podem não retornar ao player após o evento, mesmo que tenha sido carregado no mapa e nos scripts, no entanto, irá funcionar se o player tiver visitado o depot ao menos uma vez na em que o server ficou online Changelog 1.0.0 23 de julho 2015 : Liberado 1.0.1 29 de julho 2015 : Arrumado a atualziaçãod e items no chest após um player o abrir. 1.0.2 30 de julho 2015 : - Corrigido um erro fatal que acontecia quando um player morria ou dava logout enquanto no evento. - Adicionado o comando !ragequit que faz o jogador se matar enquanto no evento. 1.0.3 8 de agosto 2015: Corrigido bug que fazia o evento death ser executado em qualquer situação pvp, arquivos alterados: - creaturescripts/scripts/hunger.lua 1.0.4 9 de agosto 2015: Corrigido um debug no client por conta de broadcasts, obrigado ao silveralol, arquivos alterados: - globalevents/scripts/hunger.lua - creaturescripts/scripts/hunger.lua - creaturescripts/scripts/eventlogout.lua .~> Códigos <~. Em globalevents/globalevents.xml <globalevent type="startup" name="hunger" script="hunger.lua"/> Crie um arquivo chamado hunger.lua em globalevents/scripts e cole isso Em creaturescripts/creaturescripts.xml <event type="logout" name="eventlogout" script="eventlogout.lua"/> <event type="death" name="hunger" script="hunger.lua"/> Em creaturescripts/scripts/login.lua antes do return true player:registerEvent("hunger") Em creaturescripts/scripts/eventlogout.lua Em creaturescripts/scripts/hunger.lua Em talkactions/talkactions.xml <talkaction words="!join" separator=" " script="join.lua"/> <talkaction words="!ragequit" separator=" " script="leave.lua"/> Em talkactions/scripts/join.lua Em talkactions/scripts/leave.lua Em actions/actions.xml <!-- Hunger Games Chests --> <action fromaid="60101" toaid="60499" script="games/hunger.lua"/> <action fromaid="61101" toaid="61499" script="games/hunger.lua"/> <action fromaid="62101" toaid="62499" script="games/hunger.lua"/> Em actions/scripts/hunger.lua Curtiu da um rep ae né.. não arranca pedaço da mão e incentiva a trazer mais.. se você for sovina e n gostar de dar rep, ao menos um obrigado ja ta bom.. pelo menos mostra que esta valendo a pena ficar procurando sistemas maneiros para trazer, pedir autorização e traduzir as informações... [edit 08/08] Alteração no scriot - vide Changelog [edit 09/08] Alteração no script - vide Changelog
  19. [8.6] Staff Time

    Reds reagiu a Vodkart por uma resposta no tópico

    1 ponto
    auction npc? ja liberei faz tempo
  20. SCRIPT EM TILE

    Ackerzin reagiu a Snowsz por uma resposta no tópico

    1 ponto
    local config = {day = 1, minHour = "17:00", maxHour = "18:00", depotPos = {x = x, y = y, z =z}, message = "mensagem que abre sei la quando"} function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if tonumber(os.date("%w"))+1 == config.day and os.date("%H:%M") >= config.minHour and os.date("%H:%M") <= config.maxHour then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.message) return true end doTeleportThing(cid, depotPos) return true end Configuração: Day = dia da semana por números, 1 = domingo, 7 = sábado, logo 2 = segunda... etc... minHour = hora mínima para subir no tile. maxHour = hora máxima para subir no tile. depotPos = já sabe.
  21. (Resolvido)Pedido Stafftime

    brendoonh reagiu a Vodkart por uma resposta no tópico

    1 ponto
    troca essa parte: doPlayerSendCancel(cid, "use um comando valido") return true por essa: doPlayerPopupFYI(cid,"Lista de comandos:\n\n/stafftime NOME DO JOGADOR DA STAFF\nfaz com que mostre o tempo de determinado player da staff\n\n/allstafftime\nfaz com que mostre o tempo de todos os membros da staff\n\n/stafftimecleall\nReinicia o tempo de todos os membros da staff\n\n/stafftimeclear NOME DO JOGADOR DA STAFF\nReinicia o tempo de determinado player da Staff") return true
  22. (Resolvido)Pedido Stafftime

    Vodkart reagiu a brendoonh por uma resposta no tópico

    1 ponto
    Tá muito perfeito esse MODS, a contagem em tempo real me surpreendeu!!! MUITO OBRIGADO.. Ficou até melhor do que eu imaginava!!! Só uma coisinha, quando digitar /stafftime teria como aparecer uma janela com os comandos e explicação??? Ao usar esse comando aparece assim: "use um comando valido". Eu até poderia modificar a mensagem pois é pratico, só não sei fazer a função para aparecer essa mensagem na janelinha (PopupFYI). OBS: Como eu disse tá melhor do que eu imaginava, se não der pra fazer blz, se der melhor ainda.. BRIGADAOOO DE NOVOOOO !!!!!
  23. [8.6] Staff Time

    Vodkart reagiu a Snowsz por uma resposta no tópico

    1 ponto
    Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Sdds vodkart
  24. (Resolvido)Pedido Stafftime

    brendoonh reagiu a Vodkart por uma resposta no tópico

    1 ponto
    testa ai
  25. (Resolvido)Pedido Stafftime

    brendoonh reagiu a Vodkart por uma resposta no tópico

    1 ponto
    StaffTime.xml <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Staff Time System" version="1.0" author="vodkart" contact="none" enabled="yes"> <config name="stafftime_lib"><![CDATA[ _Staff_Config_ = { storages = {448501,448502}, min_group_id = 1 -- aqui vai contar a partir do 2, 3, 4 ... } function timeString(timeDiff) local dateFormat = { {"day", timeDiff / 60 / 60 / 24}, {"hour", timeDiff / 60 / 60 % 24}, {"minute", timeDiff / 60 % 60}, {"second", timeDiff % 60} } local out = {} for k, t in ipairs(dateFormat) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #dateFormat and (#out > 0 and ', ' or '') or ' and ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find("second") then local a, b = ret:find(" and ") ret = ret:sub(b+1) end return ret end function getStaffTime(name) local target_online = getPlayerByNameWildcard(name) if not isPlayer(target_online) then local info = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[1]) if info:getID() ~= -1 then var_time = timeString((-(info:getDataInt("value")))) else var_time = 0 end else if getPlayerStorageValue(target_online, _Staff_Config_.storages[2]) <= 0 then var_time = 0 else var_time = timeString((os.time() - getPlayerStorageValue(target_online, _Staff_Config_.storages[1]))) end end return var_time end function getAllStaffTime() local query, str = db.getResult("SELECT `name`, `group_id` FROM `players` WHERE `group_id` > ".._Staff_Config_.min_group_id), "--> STAFF TIME <--\n\n[Group]Nick - Tempo Online\n" if (query:getID() ~= -1) then repeat local _ = query:getDataString("name") str = str .. "\n ["..getGroupInfo(query:getDataInt("group_id")).name.."]".._.." - "..getStaffTime(_) until not(query:next()) query:free() end return str end function doSaveStaffTime(cid) if getPlayerStorageValue(cid, _Staff_Config_.storages[2]) >= 1 then setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) - os.time()) setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) + os.time()) end end function deleteAllStaffTimes() db.executeQuery("DELETE FROM `player_storage` WHERE `key` = ".._Staff_Config_.storages[1]) db.executeQuery("DELETE FROM `player_storage` WHERE `key` = ".._Staff_Config_.storages[2]) for _, player in ipairs(getPlayersOnline()) do if getPlayerGroupId(player) > _Staff_Config_.min_group_id then setPlayerStorageValue(player, _Staff_Config_.storages[1], os.time()) setPlayerStorageValue(player, _Staff_Config_.storages[2], 1) end end end function deletePlayerStaffTimes(name) local target_online = getPlayerByNameWildcard(name) if not isPlayer(target_online) then db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[1]) db.executeQuery("DELETE FROM `player_storage` WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. _Staff_Config_.storages[2]) else setPlayerStorageValue(target_online, _Staff_Config_.storages[1], os.time()) setPlayerStorageValue(target_online, _Staff_Config_.storages[2], 1) end end ]]></config> <globalevent name="Salve-StaffTime" interval="1800" event="script"><![CDATA[ domodlib('stafftime_lib') function onThink(interval, lastExecution, thinkInterval) if #getPlayersOnline() > 0 then for _, cid in ipairs(getPlayersOnline()) do if getPlayerGroupId(cid) > _Staff_Config_.min_group_id then doSaveStaffTime(cid) end end end return true end]]></globalevent> <talkaction words="/stafftime;/allstafftime;/stafftimecleall;/stafftimeclear" event="buffer"><![CDATA[ domodlib('stafftime_lib') if (words == "/stafftime") then local t = string.explode(param:lower(), ",") if (param == "") then doPlayerSendCancel(cid, "use um comando valido") return true elseif not getPlayerGUIDByName(t[1]) then doPlayerSendCancel(cid, "Desculpe, mas o jogador [" .. t[1] .. "] não existe.") return true elseif db.getResult("SELECT `group_id` FROM `players` WHERE `id` = "..getPlayerGUIDByName(t[1])):getDataInt("group_id") <= _Staff_Config_.min_group_id then doPlayerSendCancel(cid,"este jogador não é um membro da staff.") return true end return doPlayerPopupFYI(cid, "Tempo Total Online:\n\n"..t[1].." - "..getStaffTime(t[1])..".") elseif (words == "/allstafftime") then if getPlayerAccess(cid) < 5 then doPlayerSendCancel(cid, "você não tem permissão para usar este comando") return true end return doPlayerPopupFYI(cid, getAllStaffTime()) elseif (words == "/stafftimecleall") then if getPlayerAccess(cid) < 5 then doPlayerSendCancel(cid, "você não tem permissão para usar este comando") return true end deleteAllStaffTimes() return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você limpou a Staff Time de toda a equipe do servidor.") elseif (words == "/stafftimeclear") then local t = string.explode(param:lower(), ",") if getPlayerAccess(cid) < 5 then doPlayerSendCancel(cid, "você não tem permissão para usar este comando") return true elseif (param == "") then doPlayerSendCancel(cid, "use um comando valido") return true elseif not getPlayerGUIDByName(t[1]) then doPlayerSendCancel(cid, "Desculpe, mas o jogador [" .. t[1] .. "] não existe.") return true elseif db.getResult("SELECT `group_id` FROM `players` WHERE `id` = "..getPlayerGUIDByName(t[1])):getDataInt("group_id") <= _Staff_Config_.min_group_id then doPlayerSendCancel(cid,"este jogador não é um membro da staff.") return true end deletePlayerStaffTimes(t[1]) return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você limpou a Staff Time do jogador "..t[1]) end ]]></talkaction> <event type="login" name="StaffTimeLogin" event="script"><![CDATA[ domodlib('stafftime_lib') function onLogin(cid) if getPlayerGroupId(cid) > _Staff_Config_.min_group_id then if getPlayerStorageValue(cid, _Staff_Config_.storages[2]) <= 0 then setPlayerStorageValue(cid, _Staff_Config_.storages[1], os.time()) setPlayerStorageValue(cid, _Staff_Config_.storages[2], 1) else setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) + os.time()) end end return true end]]></event> <event type="logout" name="StaffTimeLogout" event="script"><![CDATA[ domodlib('stafftime_lib') function onLogout(cid) if getPlayerGroupId(cid) > _Staff_Config_.min_group_id then setPlayerStorageValue(cid, _Staff_Config_.storages[1], getPlayerStorageValue(cid, _Staff_Config_.storages[1]) - os.time()) end return true end]]></event> </mod> Moleza hein? nem precisa instalar os scripts na pasta, fiz em MODS p/ vc malandrão! haha
  26. Porta de Trainer 8.6

    Mr. Void reagiu a Thunder Black por uma resposta no tópico

    1 ponto
    trainroom.lua
  27. Erro em script de Spell

    zPerseu reagiu a LinNxD por uma resposta no tópico

    1 ponto
    amigo vc tem quê coloca o local onde efeito vai aparece. ou se vc não quer esse efeito remove essa linha. doSendMagicEffect(pos, eff)
  28. OT TRAVANDO AO MATAR

    cleiverton reagiu a smowking por uma resposta no tópico

    1 ponto
    Provavelmente sim, se após este erro ele crasha. Poste o kill.lua pra gente poder ver.
  29. Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.
  30. Frozen Orb

    xWhiteWolf reagiu a Reds por uma resposta no tópico

    1 ponto
    else doPlayerSendCancel(cid, "You're exhausted.") end nao seria: else doPlayerSendCancel(cid, "You're exhausted.") return false end ??
  31. 1 ponto
    no github oficial do theforgotten server existe um pull request pra transformar exiva pra spell.. vai ser dificil de adaptar pra 0.4.. mas é um começo https://github.com/otland/forgottenserver/pull/1505/commits/3268de1dc0aa5e2d40b2c4810615a02dae58623b
  32. (Resolvido)Pedido Stafftime

    Vodkart reagiu a brendoonh por uma resposta no tópico

    1 ponto
    up
  33. é, tambem cai nesse golpe, paguei e ele me deu um datapack lixoso e nao deu suporte nenhum , é um picareta, bandido, deveria ir pra cadeia, estelionatário do caralho ele.
  34. Preciso De Ajuda Urgente

    biel2012 reagiu a LeoTK por uma resposta no tópico

    1 ponto
    è possivel extender por meio de uma dll porém as pessoas que fazem isso cobram porque é muito trabalhoso fazer a questão é você achar a pessoa que faça essa dll e negociar o preço com ela esse é o único jeito de extender old client amigo
  35. 1 ponto
    Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.
  36. Frozen Orb

    Bodak Reborn reagiu a leozincorsair por uma resposta no tópico

    1 ponto
    Ja sei o problema de não healar .. e quando vc esta em cima do item que cria ao usar a magia. tem como remover essa linha para nao criar o item embaixo .. ?
  37. Quest, item randomico.

    DboHere reagiu a MaXwEllDeN por uma resposta no tópico

    1 ponto
    O problema no seu código está aqui: doPlayerAddItem(cid, math.random(config.id[0], config.id[2]), 1) Vamos analisar por partes. Primeiro, devemos prestar atenção em como o método doPlayerAddItem se comporta: Vamos prestar atenção no que você fez: Código corrigido: local config = { [0] = 8302, [1] = 8301, [2] = 8300, } function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerSendTextMessage(cid, 22, "Você Recebeu seu item!") doPlayerAddItem(cid, config[math.random(#config)], 1) return true end local config = { [0] = 8302, [1] = 8301, [2] = 8300, } function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerSendTextMessage(cid, 22, "Você Recebeu seu item!") doPlayerAddItem(cid, config[math.random(#config)], 1) return true end
  38. Hotkey BUG MAP !

    Eycron Otp reagiu a Ghcm por uma resposta no tópico

    1 ponto
    Ae galera vou passar a hotkey de Bug Map, essa hotkey anda 5 Sqm quando apertada, é usada com NumLock ON, ela desvia de tudo que está na frente, desce bueiro sobe escada... Façam bom uso!!! auto 10 listas 'BugMap By GhCm' | if [$key.100] {usegroundxyz [$posx-7] $posy $posz | end} if [$key.102] {usegroundxyz [$posx+7] $posy $posz | end} if [$key.98] {usegroundxyz $posx [$posy+6] $posz | end} if [$key.104] {usegroundxyz $posx [$posy-6] $posz | end} if [$key.99] {usegroundxyz [$posx+6] [$posy+5] $posz | end} if [$key.97] {usegroundxyz [$posx-6] [$posy+5] $posz | end} if [$key.103] {usegroundxyz [$posx-6] [$posy-5] $posz | end} if [$key.105] {usegroundxyz [$posx+6] [$posy-5] $posz | end} E se gostou, da um REP+ ae.!
  39. 1 ponto
    Eai cara, valeu por me ajudar, seria exatamente aquilo só que a mudança está de pvp para no-pvp, e queria de pvp para pvp-enforced e assim em diante. function onThink(interval) if getWorldType() == 1 then setWorldType(WORLDTYPE_OPEN) pvpatual = "PVP" else setWorldType(WORLDTYPE_OPTIONAL) pvpatual = "NO-PVP" end doBroadcastMessage("O mundo atual esta: " .. pvpatual .. ".") return true end No caso éssa linha não sei como mudar: para pvp-enforced (mata upa). setWorldType(WORLDTYPE_OPTIONAL) pvpatual = "NO-PVP" E aonde muda o tempo de duração de cada tempo de worldtype queria colocar pra 24 hóras 1 dia cada worldtype, sabe me dizer o número? Aqui está como 2 hóras: <globalevent name="pvpchange" interval="7200000" event="script" value="pvpchange.lua"/> Obrigado.
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo