Ir para conteúdo
Close

Líderes


Conteúdo Popular

Exibindo conteúdo com a maior reputação em 14/12/2018 em todas áreas

  1. 2 pontos
    Nolis

    (5-5) Manual do Rme - Map generator

    MANUAL DO REMERE'S MAP EDITOR ÍNDICE - 01 Introdução, Menu "File" e configurações iniciais. (Ir para o tópico) - 02 Menus de Edição - "Edit", "Map", "View", "Floor" e "Window". (Ir para o tópico) - 03 Ferramentas, Extensões e Live Mapping. (Ir para o tópico) - 04 Lua Scripts. (Ir para o tópico) - 05 Ferramentas Externas. ( Você está aqui ) Ferramentas Externas: Gerar minimap e transformar em .otbm O Map Gen, como é conhecido, está disponível em duas versões. É possível criar um minimap baseando-se em fatores como tamanho, temperatura e umidade usando o software feito pelo Hempuli; Essa imagem pode ser convertida em .otbm e em pouco tempo você tem em mãos um continente com piso e bordas prontinho para uso. O outro programa, um pouco mais complexo, possibilita fazer tudo isso que o primeiro faz e mais, gerar montanhas com vários andares, adicionar natureza e outros detalhes no mapa automaticamente. Vantagens: - Programa leve e fácil de manusear. - Formatos e bordas customizados requerem habilidade e tempo do mapper, o Map Gen faz isso em segundos. - Os formatos obtidos através dos fatores de autenticação são bonitos e complexos ou seja, nas mãos de um mapper habilidoso serviriam muito mais do que uma base. Desvantagens: - A ferramenta só gera até determinado tamanho, é preciso mesclar vários shapes ou editar a mão se quiser fazer continentes maiores. É recomendado apenas para ilhas e continentes de tamanho pequeno-médio. - Criatividade: Sem o uso do Map Gen, você além de praticar mais pode criar formatos que o software não pode, você é a melhor ferramenta. DOWNLOADS TUTORIAL - Hempuli's Map Gen + Tibia King Map Shape O HMG é totalmente feito por MMF2, mas deve funcionar no Clickteam Fusion 2.5, supondo que você tenha os plugins necessários. Há um executável agradável incluído, por isso, não possuir o MMF2 / CF2.5 não impede que você brinque com o gerador! Vamos começar? Abra o Hempuli's Map Gen e siga as orientações da imagem abaixo: PARTE 01 - Configurações a. - Montante/Altura: Esta opção é para definir a altura e a proporção, se for configurado com mais altura, o terreno terá mais "gelo" do interior para o exterior e também será mais largo. Se tiver menos altura, o terreno será mais baixo e sem gelo. Exemplo: b. - Montante/Temperatura: Esta é para fazer a mesclagem com base na temperatura, se for menor terá mais gelo, se for maior e a altura também, o gelo vai mesclar com o verde. Exemplo: c. - Montante/Chuva: Aqui irá definir os "períodos de chuva", teoricamente falando. Se o terreno será molhado ou bem seco externamente. Exemplo: d. - Alcance/Largura: O espaço que o terreno vai ocupar, se será uma ilha pequena ou extensa. Exemplo: e. - Alcance/Temperatura: Mesma função da temperatura em montante. Exemplo: f. - Alcance/Chuva: Do mesmo modo que em montante, porém internamente. Exemplo: g. - Força/Tamanho: Aqui vai definir se o terreno será mais largo e achatado, ou se ele será mais suave e delicado. Também se aplica a altura e largura. Exemplo: h. - Força/Temperatura: Esta opção vai tratar da intensidade da temperatura (conforme a configuração, mesmo que as três temperaturas sejam altas pode ser que tenha gelo no meio, então é bom ajustar as chuvas caso você queira 0% de gelo) Exemplo: i. - Força/Chuva: Da mesma forma que nas outras configurações, essa opção vai tirar o verde do terreno, mas terão poças de água localizadas do centro para fora. Exemplo: PARTE 02 - Menus 1. - Clique para gerar um novo terreno conforme muda as configurações na lateral. 2. - Vai criar terrenos aleatórios, porém aproximando-se das configurações da lateral. 3. - Mostra o terreno em formato de minimap (padrão) 4. - Mostra em partículas dispersas, divididas em cores, todas as configuração aplicadas. 5. - Na cor vermelha, mostra as proporções do tamanho do terreno. 6. - Na cor verde, mostra as proporções da temperatura do terreno. 7. - Na cor azul, mostra as proporções da chuva no terreno. 8. - Copia a imagem para ser salva. Utilize o paint (Win + R: mspaint) para salvá-la ou editá-la se necessário Após finalizar a criação do terreno, utilize o Tibia King Map Shape para transformar em .otbm. Video-tutorial abaixo: Dica: Com o mapa aberto, vá em edit - border options - borderize map para adicionar as bordas nos pisos automaticamente. Depois disso faça uma revisão e sucesso! Vou deixar para falar sobre o Inconssecus Map Gen mais tarde, pois ainda está em demo. Você pode testá-lo neste link.
  2. 2 pontos
    Vodkart

    RESPONDIDO Upgrade no comando /finditem

    kkk assim que tiver um tempo ja adiciono e edito aqui!! function onSay(cid, words, param) if param == '' then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "/find item name") return true end local item_id = tonumber(param) if(not item_id) then item_id = getItemIdByName(tostring(param), false) if(not item_id) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end end local str, player_depotitems, players_items, tile_items = "",{},{},{} local dp = db.getResult("SELECT `player_id`, `count` FROM `player_depotitems` WHERE `itemtype` = "..item_id),{} if (dp:getID() ~= -1) then repeat player_depotitems[#player_depotitems+1] = {dp:getDataInt("player_id"), dp:getDataInt("count") } until not(dp:next()) dp:free() end local pi = db.getResult("SELECT `player_id`, `count` FROM `player_items` WHERE `itemtype` = "..item_id),{} if (pi:getID() ~= -1) then repeat players_items[#players_items+1] = {pi:getDataInt("player_id"), pi:getDataInt("count") } until not(pi:next()) pi:free() end local hi = db.getResult("SELECT `tile_id`, `count` FROM `tile_items` WHERE `itemtype` = "..item_id),{} if (hi:getID() ~= -1) then repeat local tile = db.getResult("SELECT `house_id`, `x`, `y`, `z` FROM `tiles` WHERE `id` = "..hi:getDataInt("tile_id")),{} tile_items[#tile_items+1] = {tile:getDataInt("house_id"),tile:getDataInt("x"),tile:getDataInt("y"),tile:getDataInt("z")} until not(hi:next()) hi:free() end if #player_depotitems > 0 then str = str .. "#DEPOT ITEMS#\nQuantidade - Jogador\n" for i = 1, table.maxn(player_depotitems) do local name = getPlayerNameByGUID(player_depotitems[1]) local target_online = getPlayerByNameWildcard(name) str = str .. player_depotitems[2] .. ' ' .. name ..' | '..(not isPlayer(target_online) and 'Offline' or 'Online')..'\n' end end if #players_items > 0 then str = str .. (str ~= "" and "--------------//-------------\n\n#PLAYER ITEMS#\nQuantidade - Jogador\n" or "#PLAYER ITEMS#\nQuantidade - Jogador\n") for i = 1, table.maxn(players_items) do local name = getPlayerNameByGUID(players_items[1]) local target_online = getPlayerByNameWildcard(name) str = str .. players_items[2] .. ' ' .. getPlayerNameByGUID(players_items[1]) ..' | '..(not isPlayer(target_online) and 'Offline' or 'Online')..'\n' end end if #tile_items > 0 then str = str .. (str ~= "" and "--------------//-------------\n\n#TILE ITEMS#\nHouse ID - Tile Position\n" or "#TILE ITEMS#\nHouse ID -Tile Position\n") for i = 1, table.maxn(tile_items) do str = str .. tile_items[1] .. ' - {x = ' .. tile_items[2] ..', y = ' .. tile_items[3] ..', z = ' .. tile_items[4] ..'} \n' end end return doShowTextDialog(cid,item_id, str) end
  3. 1 ponto
    To com essas script de levar para outro mundo porem eu queria que ao usar, o player e o target focem juntos para um mundo Random no caso irei fazer lugares indenticos para nao acontecer de players que usarem a mesma magia se encontrarem! Agradeço desde já Darei Rep ++ Ps: Tem duas magias ai com scripts diferente queria que ambas pode-se levar para lugares Random 1ª Magia 2ª Magia
  4. 1 ponto
    Yan Liima

    RESPONDIDO Upgrade no comando /finditem

    Acho que agora vai! Como o Vodkart teve que pegar o script original por causa do code box ele esqueceu de alterar uma parte. Aproveitei e adicionei a msg caso o item não seja encontrado.
  5. 1 ponto
    Vodkart

    RESPONDIDO Upgrade no comando /finditem

    entendi, faltou o "i" do for... vocês copiam o código e não colocam no code box, ai induz ao erro mesmo. function onSay(cid, words, param) if param == '' or tonumber(param) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "/find item name") return true end local item_id = tonumber(param) if(not item_id) then item_id = getItemIdByName(tostring(param), false) if(not item_id) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end end local str, player_depotitems, players_items, tile_items = "",{},{},{} local dp = db.getResult("SELECT `player_id`, `count` FROM `player_depotitems` WHERE `itemtype` = "..item_id),{} if (dp:getID() ~= -1) then repeat player_depotitems[#player_depotitems+1] = {dp:getDataInt("player_id"), dp:getDataInt("count") } until not(dp:next()) dp:free() end local pi = db.getResult("SELECT `player_id`, `count` FROM `player_items` WHERE `itemtype` = "..item_id),{} if (pi:getID() ~= -1) then repeat players_items[#players_items+1] = {pi:getDataInt("player_id"), pi:getDataInt("count") } until not(pi:next()) pi:free() end local hi = db.getResult("SELECT `tile_id`, `count` FROM `tile_items` WHERE `itemtype` = "..item_id),{} if (hi:getID() ~= -1) then repeat local tile = db.getResult("SELECT `house_id`, `x`, `y`, `z` FROM `tiles` WHERE `id` = "..hi:getDataInt("tile_id")),{} tile_items[#tile_items+1] = {tile:getDataInt("house_id"),tile:getDataInt("x"),tile:getDataInt("y"),tile:getDataInt("z")} until not(hi:next()) hi:free() end if #player_depotitems > 0 then str = str .. "#DEPOT ITEMS#\nQuantidade - Jogador\n" for i = 1, table.maxn(player_depotitems) do local name = getPlayerNameByGUID(player_depotitems[i][1]) local target_online = getPlayerByNameWildcard(name) str = str .. player_depotitems[i][2] .. ' ' .. name ..' | '..(not isPlayer(target_online) and 'Offline' or 'Online')..'\n' end end if #players_items > 0 then str = str .. (str ~= "" and "--------------//-------------\n\n#PLAYER ITEMS#\nQuantidade - Jogador\n" or "#PLAYER ITEMS#\nQuantidade - Jogador\n") for i = 1, table.maxn(players_items) do local name = getPlayerNameByGUID(players_items[i][1]) local target_online = getPlayerByNameWildcard(name) str = str .. players_items[i][2] .. ' ' .. name ..' | '..(not isPlayer(target_online) and 'Offline' or 'Online')..'\n' end end if #tile_items > 0 then str = str .. (str ~= "" and "--------------//-------------\n\n#TILE ITEMS#\nHouse ID - Tile Position\n" or "#TILE ITEMS#\nHouse ID -Tile Position\n") for i = 1, table.maxn(tile_items) do str = str .. tile_items[i][1] .. ' - {x = ' .. tile_items[i][2] ..', y = ' .. tile_items[i][3] ..', z = ' .. tile_items[i][4] ..'} \n' end end return doShowTextDialog(cid,item_id, str) end
  6. 1 ponto
    DdJs

    [8.60] Evolution Clean

    Joguei muito um otserver que tinha essa cidade. Que nostalgia vendo essa mountain de drag
  7. 1 ponto
    Nolis

    [8.60] Evolution Clean

    Trago a vocês esse mapa editado pelo Zbizu, ele foi originalmente feito por Xidaozu em 2007. Faz mais de 10 anos que ele foi criado, eu mesmo já vi diversas versões desse mapa em ots baiak, geralmente usado como cidade vip. Esse continente possui várias hunts localizadas e acessos interessantes, é muito bom por ser limpo e organizado, tendo ai um leque de possibilidades para uso, tanto em baiak quanto em rpg. IMAGENS DOWNLOADS Link original Link original alternativo Download alternativo (tibia king): clean_evo.zip Scan
  8. 1 ponto
    Vodkart

    RESPONDIDO Erro Mods Servidos

    <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Caixa System" version="1.0" author="nsei" contact="none.com" enabled="yes"> <config name="caixa"><![CDATA[ stor = 41319 caixa_id = 2581 bank_pos = {x = 98, y = 73, z = 7} msgs = { [1] = "'saldo' para ver seu saldo em conta.", [2] = "'depositar' para depositar dinheiro em sua conta.", [3] = "'sacar' para sacar dinheiro de sua conta.", [4] = "'transferir' para transferir dinheiro para uma outra conta. Comando: transfer,quantia,nome", [5] = "'sair' ou 'exit' para sair.", } ]]></config> <action itemid="2581" event="script"><![CDATA[ domodlib('caixa') function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid, stor) ~= -1 then return true elseif itemEx.itemid ~= caixa_id then doPlayerSendCancel(cid, "Você só pode usar esse item em um caixa eletrônico.") return true end setPlayerStorageValue(cid, stor, 1) doPlayerSetNoMove(cid, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Caixa Eletrônico: Olá! Digite !caixa + um dos parâmetros abaixo:") for a, b in ipairs(msgs) do doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Caixa Eletrônico: "..b) end return true end]]></action> <talkaction words="!caixa;/caixa" event="buffer"><![CDATA[ domodlib('caixa') local t = string.explode(param, ",") if getPlayerStorageValue(cid, stor) ~= 1 then return true end if t[1] == "balance" or t[1] == "saldo" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você possui "..getPlayerBalance(cid).." gold coins em sua conta bancária.") return true elseif t[1] == "deposit" or t[1] == "depositar" then if not t[2] or not tonumber(t[2]) or t[3] then doPlayerSendCancel(cid, "Incorrect params.") return true elseif not doPlayerDepositMoney(cid, tonumber(t[2])) then doPlayerSendCancel(cid, "Você não possui essa quantia em dinheiro.") return true end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você depositou "..t[2].." gold coins em sua conta. Seu saldo agora é de "..getPlayerBalance(cid).." gold coins.") elseif t[1] == "withdraw" or t[1] == "sacar" then if not t[2] or not tonumber(t[2]) or t[3] then doPlayerSendCancel(cid, "Incorrect params.") return true elseif getPlayerBalance(cid) < tonumber(t[2]) then doPlayerSendCancel(cid, "Você não possui essa quantia de dinheiro em sua conta.") return true end doPlayerWithdrawMoney(cid, tonumber(t[2])) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você sacou "..t[2].." gold coins de sua conta. Seu saldo agora é de "..getPlayerBalance(cid).." gold coins.") elseif t[1] == "transfer" or t[1] == "transferir" then if not t[2] or not tonumber(t[2]) or not t[3] or not tostring(t[3]) or t[4] then doPlayerSendCancel(cid, "Incorrect params.") return true elseif getPlayerBalance(cid) < tonumber(t[2]) then doPlayerSendCancel(cid, "Você não possui essa quantia de dinheiro em sua conta.") return true elseif not playerExists(t[3]) then doPlayerSendCancel(cid, "O player "..t[3].." não existe.") return true end doPlayerTransferMoneyTo(cid, t[3], tonumber(t[2])) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você transferiu "..t[2].." gold coins de sua conta para "..t[3]..". Seu saldo agora é de "..getPlayerBalance(cid).." gold coins.") elseif t[1] == "trocar gold" then if not t[2] or not tonumber(t[2]) or t[3] then doPlayerSendCancel(cid, "Incorrect params. Specify the number of platinum coins you want to get.") return true elseif not doPlayerRemoveItem(cid, 2148, (t[2]*100)) then doPlayerSendCancel(cid, "Você não possui "..(t[2]*100).." gold coins.") return true end doPlayerAddItem(cid, 2152, t[2]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você trocou "..(t[2]*100).." gold coins por "..t[2].." platinum coins.") elseif t[1] == "trocar platinum" then if t[2] == "gold" then if not t[3] or not tonumber(t[3]) or t[4] then doPlayerSendCancel(cid, "Incorrect params. Specify the number of platinum coins you want to change to gold coins.") return true elseif not doPlayerRemoveItem(cid, 2152, tonumber(t[3])) then doPlayerSendCancel(cid, "Você não possui "..t[3].." platinum coins.") return true end doPlayerAddItem(cid, 2148, tonumber(t[3]*100)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você trocou "..t[3].." platinum coins por "..(t[3]*100).." gold coins.") elseif t[2] == "crystal" then if not t[3] or not tonumber(t[3]) or t[4] then doPlayerSendCancel(cid, "Incorrect params. Specify the number of crystal coins you want to get.") return true elseif not doPlayerRemoveItem(cid, 2152, tonumber(t[3]*100)) then doPlayerSendCancel(cid, "Você não possui "..(t[3]*100).." platinum coins.") return true end doPlayerAddItem(cid, 2160, tonumber(t[3])) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você trocou "..(t[3]*100).." platinum coins por "..t[3].." crystal coins.") else return doPlayerSendCancel(cid, "Incorrect params. Utilize o comando assim: trocar platinum,gold ou crystal,quantia") end elseif t[1] == "trocar crystal" then if not t[2] or not tonumber(t[2]) or t[3] then doPlayerSendCancel(cid, "Incorrect params. Specify the number of crystal coins you want to change to platinum coins.") return true elseif not doPlayerRemoveItem(cid, 2160, tonumber(t[2])) then doPlayerSendCancel(cid, "Você não possui "..t[2].." crystal coins.") return true end doPlayerAddItem(cid, 2152, tonumber(t[2]*100)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Caixa Eletrônico: Você trocou "..t[2].." crystal coins por "..(t[2]*100).." platinum coins.") elseif t[1] == "sair" or t[1] == "exit" then doTeleportThing(cid, bank_pos) setPlayerStorageValue(cid, stor, -1) doPlayerSetNoMove(cid, false) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Caixa Eletrônico: Obrigado pela visita!") else doPlayerSendCancel(cid, "Incorrect Params.") return true end return true]]></talkaction> </mod>
  9. 1 ponto
    eduh2

    Magia simples.

    obrigado, sua reposta abriu minha mente para encontra uma solução, vou postar como ficou o codigo caso alguem precise. local combat = Combat() combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true) combat:setParameter(COMBAT_PARAM_USECHARGES, true) function onGetFormulaValues(player, skill, attack, factor) local min = (player:getLevel() / 5) + (skill * attack * 0.02) + 4 local max = (player:getLevel() / 5) + (skill * attack * 0.04) + 9 return -min, -max end combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(player, creature, variant) player:getPosition(cid):sendMagicEffect(179) return combat:execute(player, creature, variant) end
  10. 1 ponto
    @Black Fenix Salve, bruxo! Como eu não manjo nada de script, não vou poder te ajudar nesse teu problema... Porém, a função que você quer é exatamente a mesma que esta faz, só mudar os nomes e ajustar da sua maneira. Espero que te ajude, se ajudar já sabe
  11. 1 ponto
    Roy

    [PEDIDO] Aol infinita

    Rapais em questão do red ou black skull/Aol não sei mas em questão dos demais você pode optar por esse script. em creaturescripts.xml <event type="death" name="NoLoot" event="script" value="NoLoot.lua"/> Crie um arquivo NoLoot.lua em Creaturescripts/Scripts e cole. Em Creaturescripts/scripts. Tem um arquivo com login.lua registe registerCreatureEvent(cid, "NoLoot") OBS: não fui eu que desenvolvi e não sei quem foi eu tenho aqui no meu OT e estou apenas repassando.
  12. 1 ponto
    Roy

    RESPONDIDO [HELP] Tile que da Stamina

    Eu uso esse e está funcionando perfeitamente. Crie um arquivo .lua em Movements/Scripts e dentro dele. E em Movements.xml OBS: Script não fui eu que desenvolvi e se encontra aqui na comunidade, só estou repassando!
  13. 1 ponto
    Nolis

    [10.98] Montanha Secreta (hunt/quest)

    Eai galerinha, vim trazer a vocês essa montanha feita pelo Ramirow da Otland, eu achei muito interessante o uso das bordas e os detalhes aplicados, é um mapa promissor principalmente para RPG, use no seu server que os players irão gostar! IMAGENS: DOWNLOADS Download Original Download Alternativo: Deep Forest Mountain.otbm Scan
  14. 1 ponto
    King Laker

    Magia simples.

    @eduh2 function onCastSpell(cid, var) local playerpos = getCreaturePosition(cid) doSendMagicEffect(playerpos, 2) tenta reformular estas linhas para o seu script
  15. 1 ponto
    Ótimo tópico, me ajudou bastante! REP+
  16. 1 ponto
    Gassadas

    Estou procurando um Mapper

    Ola, estou procurando um mapper experiente para entrar em uma equipe de World of nanatsu (Nanatsu no taizai), em nossa equipe so falta mapper pois ja temos 2 sprites, 1 desgner e 2 programadores. Irei deixar alguns projetos nosso aq para te converser a entrar 😄 Para entrar em contato com nossa equipe me adicione la no discord Hawk de Natal#7065
  17. 1 ponto
    Olá pessoal, resolvi adaptar o script do comando !spells ou !jutsus, essa adaptação consiste em prevenir que Staffs como GM, CM, ADM, tomem debug ao usar o comando. Recomendado para Staffs iniciantes ou esquecidos que usem o comando. Como coloco em meu servidor ? -- Adaptado por Jeremias 13/03/2018. function onSay(cid, words, param) if (getPlayerGroupId(cid) >= 3) then return doPlayerSendTextMessage(cid, 19, "Staff nao tem jutsus.") end local count = getPlayerInstantSpellCount(cid) local text = "" local t = {} for i = 0, count - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if spell.level ~= 0 then if spell.manapercent > 0 then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local prevLevel = -1 for i, spell in ipairs(t) do local line = "" if prevLevel ~= spell.level then if i ~= 1 then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, 2175, text) return TRUE end Uma adaptação simples que previne dbugs desnecessários.
  18. 1 ponto
    Smart Maxx

    [TFS 1.0] VIP System

    Lérigou ... -- SYSTEM -- MySQL queries -execute em sua database : ALTER TABLE `accounts` ADD COLUMN `viplastday` int(10) NOT NULL DEFAULT 0 AFTER `lastday`, ADD COLUMN `vipdays` int(11) NOT NULL DEFAULT 0 AFTER `lastday`; login.lua - procure o arquivo em data/creaturescripts/scripts/ - adicione logo após local player = Player(cid) : player:loadVipData() player:updateVipTime() global.lua - procure o arquivo em data/ - adicione este código em baixo dofile('data/compat.lua') dofile('data/vip-system.lua') vip-system.lua - crie este arquivo em data/ - adicione esse código nele : if not VipData then VipData = { } end function Player.getVipDays(self) return VipData[self:getId()].days end function Player.getLastVipDay(self) return VipData[self:getId()].lastDay end function Player.isVip(self) return self:getVipDays() > 0 end function Player.addInfiniteVip(self) local data = VipData[self:getId()] data.days = 0xFFFF data.lastDay = 0 db.query(string.format('UPDATE `accounts` SET `vipdays` = %i, `viplastday` = %i WHERE `id` = %i;', 0xFFFF, 0, self:getAccountId())) end function Player.addVipDays(self, amount) local data = VipData[self:getId()] local amount = math.min(0xFFFE - data.days, amount) if amount > 0 then if data.days == 0 then local time = os.time() db.query(string.format('UPDATE `accounts` SET `vipdays` = `vipdays` + %i, `viplastday` = %i WHERE `id` = %i;', amount, time, self:getAccountId())) data.lastDay = time else db.query(string.format('UPDATE `accounts` SET `vipdays` = `vipdays` + %i WHERE `id` = %i;', amount, self:getAccountId())) end data.days = data.days + amount end return true end function Player.removeVipDays(self, amount) local data = VipData[self:getId()] if data.days == 0xFFFF then return false end local amount = math.min(data.days, amount) if amount > 0 then db.query(string.format('UPDATE `accounts` SET `vipdays` = `vipdays` - %i WHERE `id` = %i;', amount, self:getAccountId())) data.days = data.days - amount end return true end function Player.removeVip(self) local data = VipData[self:getId()] data.days = 0 data.lastDay = 0 db.query(string.format('UPDATE `accounts` SET `vipdays` = 0, `viplastday` = 0 WHERE `id` = %i;', self:getAccountId())) end function Player.loadVipData(self) local resultId = db.storeQuery(string.format('SELECT `vipdays`, `viplastday` FROM `accounts` WHERE `id` = %i;', self:getAccountId())) if resultId then VipData[self:getId()] = { days = result.getDataInt(resultId, 'vipdays'), lastDay = result.getDataInt(resultId, 'viplastday') } result.free(resultId) return true end VipData[self:getId()] = { days = 0, lastDay = 0 } return false end function Player.updateVipTime(self) local save = false local data = VipData[self:getId()] local days, lastDay = data.days, data.lastDay if days == 0 or days == 0xFFFF then if lastDay ~= 0 then lastDay = 0 save = true end elseif lastDay == 0 then lastDay = os.time() save = true else local time = os.time() local elapsedDays = math.floor((time - lastDay) / 86400) if elapsedDays > 0 then if elapsedDays >= days then days = 0 lastDay = 0 else days = days - elapsedDays lastDay = time - ((time - lastDay) % 86400) end save = true end end if save then db.query(string.format('UPDATE `accounts` SET `vipdays` = %i, `viplastday` = %i WHERE `id` = %i;', days, lastDay, self:getAccountId())) data.days = days data.lastDay = lastDay end end -- Talkactions (/vip command ) -- - Modos de usar : - /vip adddays, PlayerName, 5 --> Adiciona 5 dias de vip ao PlayerName. - /vip removedays, PlayerName, 5 --> Remove 5 dias de vip do PlayerName. - /vip remove, PlayerName --> Remove todos dias de vip do PlayerName. - /vip check, PlayerName --> Checa quando dias de vip tem o PlayerName . - /vip addinfinite, PlayerName --> Add infinite vip time ao PlayerName. talkactions.xml - procure em data/talkactions/ - adicione o seguinte código : <talkaction words="/vip" separator=" " script="vipcommand.lua" /> vipcommand.lua - crie o arquivo em data/talkactions/scripts - cole este código dentro : function onSay(cid, words, param)local player = Player(cid) if not player:getGroup():getAccess() then return true end local params = param:split(',') if not params[2] then player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Player is required.\nUsage:\n%s <action>, <name>, [, <value>]\n\nAvailable actions:\ncheck, adddays, addinfinite, removedays, remove', words)) return false end local targetName = params[2]:trim() local target = Player(targetName) if not target then player:sendCancelMessage(string.format('Player (%s) is not online. Usage: %s <action>, <player> [, <value>]', targetName, words)) return false end local action = params[1]:trim():lower() if action == 'adddays' then local amount = tonumber(params[3]) if not amount then player:sendCancelMessage('<value> has to be a numeric value.') return false end target:addVipDays(amount) player:sendCancelMessage(string.format('%s received %s vip day(s) and now has %s vip day(s).', target:getName(), amount, target:getVipDays())) elseif action == 'removedays' then local amount = tonumber(params[3]) if not amount then player:sendCancelMessage('<value> has to be a numeric value.') return false end target:removeVipDays(amount) player:sendCancelMessage(string.format('%s lost %s vip day(s) and now has %s vip day(s).', target:getName(), amount, target:getVipDays())) elseif action == 'addinfinite' then target:addInfiniteVip() player:sendCancelMessage(string.format('%s now has infinite vip time.', target:getName())) elseif action == 'remove' then target:removeVip() player:sendCancelMessage(string.format('You removed all vip days from %s.', target:getName())) elseif action == 'check' then local days = target:getVipDays() player:sendCancelMessage(string.format('%s has %s vip day(s).', target:getName(), (days == 0xFFFF and 'infinite' or days))) else player:sendTextMessage(MESSAGE_INFO_DESCR, string.format('Action is required.\nUsage:\n%s <action>, <name>, [, <value>]\n\nAvailable actions:\ncheck, adddays, addinfinite, removedays, remove', words)) end return false end Créditos... Printer Summ Eu
  19. 1 ponto
    Estou preparando aqui pra você, quando terminar edito aqui ~~
  20. 1 ponto
    xWhiteWolf

    [SPELL] Kamui in

    Fala galera do TK, tirei essa madrugada pra trazer um conteúdo novo a pedido do membro @alanmtd1, trata-se da spell Kamui do Obito só que eu fiz ela um pouquinho diferente; Testado em TFS 0.3.6, cliente 8.54; Descrição pra quem não conhece: O player fala 'kamui in', se ele tiver com um target vai entrar e o target; do contrário entra ele e todos que estiverem à sua volta; Feito isso eles serão teleportados para o Kamui, um lugar que você vai criar no seu mapa editor e colocar NO-PVP ZONE, spawn de monstro e NO Logout. Preste bem atenção nisso porque se você esquecer quaisquer um desses vai dar bug. Depois de X segundos todos os players/monstros que vc teleportou voltarão para onde estavam (a menos que eles morram no kamui). Porque isso ocorre? Simples, eu só fui perceber como os caras do Naruto Online fizeram esse script depois de ter terminado a minha versão e eu to com preguiça demais de refazer tudo pra ficar igualzinho à versão deles hahauhauhauh então é importante que o kamui seja um local onde não haja mortes, justamente pra não haverem mensagens de erro tipo essa: [26/07/2014 04:27:46] [Error - Spell Interface] [26/07/2014 04:27:46] In a timer event called from: [26/07/2014 04:27:46] data/spells/scripts/especiais/kamui.lua:onCastSpell [26/07/2014 04:27:47] Description: [26/07/2014 04:27:47] (luaDoTeleportThing) Thing not found Bom, vamos ao script: Agora em spells.xml: <instant name="KAMUI" words="kamui in" lvl="120" mana="200" prem="1" blockwalls="1" exhaustion="1000" needlearn="0" event="script" value="especiais/kamui.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> Bom, pra configurar vc mexe na parte inicial do script e ja tá tudo explicadinho... quem sabe um dia eu refaça esse script pra ficar igualzinho o deles auhuhea até lá usem essa versão aí que até que está bem caprichadinha. Toda vez que alguém morrer no kamui vai aparecer uma mensagem de erro mas ela não afeta em nada, podem ficar relaxados. O único jeito de remover isso é impedindo as mortes dentro do kamui oque tira toda a graça da coisa, espero que tenham gostado ;]
  21. 1 ponto
    Me ajudem a solucionar o erro: [Linker error] undefined reference to `___dyn_tls_init_callback' [Linker error] undefined reference to `__setargv' Estou usando Stian's Repack Dev-cpp v2 Resolvido! Solução: desinstalar o Mingw que estava instalado e usar o q ja veio com o Dev-cpp!
Líderes está configurado para São 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!

×
×
  • Criar Novo...