Ir para conteúdo

penisagudo

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    @Tyrisfall 
     
    1 - Database:
    - Acesse sua database;
    - Clique em player_items.
     
     
    - Depois clique em Estrutura:
     
     
    - Na linha itemtype, clique para mudar:
     
    - Depois, em Tipo:
     
     
    - Altere para INT e valor 11:
     
     
    - O resultado final deverá ser esse:
     
     
    - O mesmo procedimento deverá ser feito para itemtype e count para a tabela player_depotitems, player_inboxitems e player_rewards.
    - Ou apenas executar essas queries na database > SQL:
     
    ALTER TABLE `player_items` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_depotitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_inboxitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_rewards` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; 2 - Créditos
    mattyx14 (queries SQL)
    penisagudo (tutorial)
  2. Obrigado
    penisagudo recebeu reputação de Steeven em (Resolvido)[URGENTE] SHOP System In Game   
    @Usuaruio 
     
    Vamos la entao faz assim.
     
    Em actions.xml você coloca: Sendo que no X você coloca o valor do Unique que desejar e não esqueça de colocar o nome do seu script desejado.
    <action uniqueid="6063-6065" event="script" value="nomedoarquivo.lua"/>  
    Após isso crie um arquivo com mesmo nome e coloque isso dentro:
    local chests = { [6063] = {itemNecessario = x, amountNecessario = 1 , itemRecebido = 2184, amount = 1}, [6064] = {itemNecessario = x, amountNecessario = 1 , itemRecebido = 6528, amount = 1}, [6065] = {itemNecessario = x, amountNecessario = 1 , itemRecebido = 5803, amount = 1} } -- Como editar: --Entre []: significa o unique ID do báu que voce colocara no mapa --itemNecessario: É o item necessario para voce trocar (sua Moeda de troca) --itemRecebido: É o ID do item que será dado ao jogador que abrir o báu --amount: É a quantidade de items que o player vai receber } function onUse(cid,item,fromPosition,itemEx,toPosition) local v = chests[itemRecebido.uid] if getPlayerItemCount(cid, v.itemNecessario) ~= v.amountNecessario then return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce não tem a quantidade necessaria para troca.") elseif getPlayerFreeCap(cid) < (getItemWeightById(v.itemRecebido)*v.amount) then return doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR, "Voce nao tem " .. (getItemWeightById(v.itemRecebido)*v.amount) .. " cap para trocar o item") end if getPlayerItemCount(cid, v.itemNecessario) == v.amountNecessario then doPlayerAddItem(cid, v.itemRecebido, v.amount) else for i = 1, v.amount do doPlayerAddItem(cid, v.itemRecebido, v.amount) end end return doPlayerSendTextMessage(cid,22,"Voce recebeu: " .. getItemNameById(v.itemRecebido) .. ".") end  
    Deixei tudo explicado no script caso ainda tenha duvidas você so precisara mexer nessa parte:
    [6065] = {itemNecessario = x, amountNecessario = 1 , itemRecebido = 5803, amount = 1} -- Como editar:
    --Entre []: significa o unique ID do báu que voce colocara no mapa
    --itemNecessario: É o item necessario para voce trocar (sua Moeda de troca)
    --itemRecebido: É o ID do item que será dado ao jogador que abrir o báu
    --amount: É a quantidade de items que o player vai receber
     
    Você pode colocar quantos baús quiser em apenas 1 script lembrando sempre de editar os numeros das uniquesIds no actions.xml conforme a seguir colocando sempre o menor - maior numero da Unique.
    <action uniqueid="6063-6065" event="script" value="nomedoarquivo.lua"/> Não se esqueça de colocar as uniques nos baús no Mapa editor.
     
    Qualquer duvida ou erro me reporte.
  3. Obrigado
    penisagudo recebeu reputação de Toruk em (Resolvido)[TFS1.2] Exercise Weapons   
    @Enforc 
    Teste esse e veja se resolve.
    local skills = { [32384] = {id=SKILL_SWORD,voc=4}, -- KNIGHT [32385] = {id=SKILL_AXE,voc=4}, -- KNIGHT [32386] = {id=SKILL_CLUB,voc=4}, -- KNIGHT [32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN [32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_SMALLICE}, -- DRUID [32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, -- SORCERER [32124] = {id=SKILL_SWORD,voc=4}, -- KNIGHT [32125] = {id=SKILL_AXE,voc=4}, -- KNIGHT [32126] = {id=SKILL_CLUB,voc=4}, -- KNIGHT [32127] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN [32128] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_SMALLICE}, -- DRUID [32129] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE} -- SORCERER } local houseDummies = {32143, 32144, 32145, 32146, 32147, 32148} local freeDummies = {32142, 32149} local skillRate = configManager.getNumber(configKeys.RATE_SKILL) local magicRate = configManager.getNumber(configKeys.RATE_MAGIC) local function start_train(pid,start_pos,itemid,fpos, bonusDummy) local player = Player(pid) if player ~= nil then local pos_n = player:getPosition() if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then if player:getItemCount(itemid) >= 1 then local exercise = player:getItemById(itemid,true) if exercise:isItem() then if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES) if charges_n >= 1 then exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES,(charges_n-1)) local voc = player:getVocation() if skills[itemid].id == SKILL_MAGLEVEL then if not bonusDummy then player:addManaSpent(math.ceil(500*magicRate)) else player:addManaSpent(math.ceil(500*magicRate)*1.1) -- 10% end else if not bonusDummy then player:addSkillTries(skills[itemid].id, 1*skillRate) else player:addSkillTries(skills[itemid].id, (1*skillRate)*1.1) -- 10% end end fpos:sendMagicEffect(CONST_ME_HITAREA) if skills[itemid].range then pos_n:sendDistanceEffect(fpos, skills[itemid].range) end local training = addEvent(start_train, voc:getAttackSpeed(), pid,start_pos,itemid,fpos) player:setStorageValue(Storage.isTraining,1) else exercise:remove(1) player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training weapon vanished.") stopEvent(training) player:setStorageValue(Storage.isTraining,0) end end end end else player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training has stopped.") stopEvent(training) player:setStorageValue(Storage.isTraining,0) end else stopEvent(training) if player then -- verificar se o player ainda existe (logado), caso esteja, enviar mensagem de erro e parar treino. isso evita erros no console player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training has stopped.") player:setStorageValue(Storage.isTraining,0) end end return true end function onUse(player, item, fromPosition, target, toPosition, isHotkey) local start_pos = player:getPosition() if player:getStorageValue(Storage.isTraining) == 1 then player:sendTextMessage(MESSAGE_INFO_DESCR, "You are already training.") return false end if target:isItem() then if isInArray(houseDummies,target:getId()) then if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then player:sendTextMessage(MESSAGE_INFO_DESCR, "Get closer to the dummy.") stopEvent(training) return true end player:sendTextMessage(MESSAGE_INFO_DESCR, "You started training.") start_train(player:getId(),start_pos,item.itemid,target:getPosition(), true) elseif isInArray(freeDummies, target:getId()) then if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then player:sendTextMessage(MESSAGE_INFO_DESCR, "Get closer to the dummy.") stopEvent(training) return true end player:sendTextMessage(MESSAGE_INFO_DESCR, "You started training.") start_train(player:getId(),start_pos,item.itemid,target:getPosition(), false) end end return true end  
  4. Curtir
    penisagudo recebeu reputação de MatCollier em TFS [1.2] Market Clientes 10 e 11   
    @MatCollier testa esses aqui e ve se funciona, são clientes mais atualizados:
    https://github.com/opentibiabr/tools
  5. Curtir
    penisagudo recebeu reputação de bpm91 em procuro de alguem q faz job com ts 0.4   
    Cara explica um pouco melhor seu problema é tenta colocar uma foto para eu poder entender o que acontece 
  6. Obrigado
    @Tyrisfall 
     
    1 - Database:
    - Acesse sua database;
    - Clique em player_items.
     
     
    - Depois clique em Estrutura:
     
     
    - Na linha itemtype, clique para mudar:
     
    - Depois, em Tipo:
     
     
    - Altere para INT e valor 11:
     
     
    - O resultado final deverá ser esse:
     
     
    - O mesmo procedimento deverá ser feito para itemtype e count para a tabela player_depotitems, player_inboxitems e player_rewards.
    - Ou apenas executar essas queries na database > SQL:
     
    ALTER TABLE `player_items` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_depotitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_inboxitems` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `player_rewards` CHANGE `itemtype` `count` INT(11) NOT NULL DEFAULT '0'; 2 - Créditos
    mattyx14 (queries SQL)
    penisagudo (tutorial)
  7. Gostei
    penisagudo deu reputação a luanluciano93 em (Resolvido)[TFS1.2] Bug script !bless   
    function onSay(cid) local player = Player(cid) local totalBlessPrice = getBlessingsCost(player:getLevel()) * 5 * 0.5 if player:getBlessings() == 5 then player:sendCancelMessage("You already have been blessed!", cid) elseif player:removeMoneyNpc(totalBlessPrice) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have been blessed by all of eight gods!") for b = 1, 8 do if not player:hasBlessing(b) then player:addBlessing(b, 1) end end player:setStorageValue(999563, 1) player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA) else player:sendCancelMessage("You don't have enough money. You need " .. totalBlessPrice .. " to buy bless.", cid) end return false end  
  8. Gostei
    @penisagudo já ajudei ele em um outro fórum. Script:
    <talkaction words="!starterkit" event="script" value="starterkit.lua"/> LUA:
    local config = { level = 20, -- Apartir de que level não irá receber days = 7, -- Dias de Premium Account(VIP) que irá receber items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE storage = 233486 -- str, não mexa } function onSay(cid, words, param) if getPlayerLevel(cid) > config.level then doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.") elseif getPlayerStorageValue(cid, config.storage) < 0 then for _,ab in pairs(config.items) do doPlayerAddItem(cid, ab[1], ab[2]) end doPlayerAddPremiumDays(cid, config.days) setPlayerStorageValue(cid, config.storage, 1) doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!") else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.") end return true end Essa funcionaria para qualquer player da conta. Caso queira apenas que funcione uma vez por account::
     
  9. Curtir
    penisagudo recebeu reputação de luanluciano93 em (Resolvido)teleport storage   
    @Vitorelias
     
    Cria um arquivo dentro de data/movements/script com nome que desejar e coloque isso dentro.
     

    function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)                   local config{                                storage = , --coloca o valor da storage que você quiser                                posSemStorage = {x = 1974, y = 1375, z = 14}, -- posição sem storage                                posComStorage = {x = 2032, y = 1285, z = 12} -- posição com storage                 }                                  if getPlayerStorageValue(cid, config.storage) >= 1 then                                doTeleportThing(cid, config.posComStorage, false)                                doSendMagicEffect(config.posComStorage, CONST_ME_TELEPORT)                                doPlayerSendTextMessage(cid, 22, "Voce foi teleportado")                 else                                 doTeleportThing(cid, config.posSemStorage, false)                                doPlayerSendTextMessage(cid, 22, "Voce foi teleportado")                                doSendMagicEffect(config.posSemStorage, CONST_ME_TELEPORT)                 end                                  return true end
     
    Em movements.xml coloque isso, colocando o número da action que quiser e mudando nome do arquivo que colocou ali em cima.
     
    <movevent type=“StepIn” actionid=“X” event=“script” value=“nomedoarquivo.lua”/>  
     
    após isso abra seu mapa editor e no teleport onde quer colocar deixe as posições tudo em 0 e no actionID coloque o mesmo que colocou na tag do movements.
     
    se der algum erro me reporte! 
  10. Gostei
    penisagudo deu reputação a Absolute em ERRO EVENTO DEFEND THE TOWERS   
    Este erro está ocorrendo porque a quantidade de campos não bate com a quantidade de valores que estão sendo inseridos na tabela.

    Troque as querys para:
     
    CREATE TABLE IF NOT EXISTS `dtt_players` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` bigint(20) NOT NULL, `team` int(5) NOT NULL, `ip` bigint(50) NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `dtt_results` ( `id` int(11) NOT NULL AUTO_INCREMENT, `frags_blue` int(11) NOT NULL, `frags_red` int(11) NOT NULL, `towers_blue` int(11) NOT NULL, `towers_red` int(11) NOT NULL, `data` varchar(255) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL, `hora` varchar(255) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;  
  11. Gostei
    penisagudo deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  12. Gostei
    penisagudo deu reputação a Bruno Carvalho em Como conseguir todas as sprites do tibia   
    Desde o lançamento do flash cliente, o processo de conseguir as imagens do tibia se tornou muito fácil!
     
    Passo a passo
    Basta entrar neste site https://secure.tibia.com/flash-regular-bin/catalog-content.xml 
    Abrir as urls com final .png (Exemplo http://static.tibia.com/flash-regular-data/sprites-ff80b440fa7ee964e7584adf04a226ccc99aa197f5bed551eb8da82e9255dd73.png)
    Salvar a parte desejada em seu computador
    E fazer o recorte para 32x32 (Como neste tutorial: http://www.tibiaking.com/forum/topic/42673-tutorial-cortando-sprites-32x32-r%C3%A1pido/)
     
    Depois é só utilizar as sprites como bem entender. Este método é o mesmo utilizado por fansites oficiais do tibia.
  13. Gostei
    penisagudo deu reputação a xWhiteWolf em Tibia Guitar Hero [0.3.6~0.4]   
    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:
     
    <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:
    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.
  14. Gostei
    penisagudo deu reputação a Pepeco em Pedidos de Script   
    @mateusmoretti  Coloca o nome exato do seu monstro, caso nao funcione, voce coloca o print ali, para pegar o nome dele.
    -- Created by Pepeco -- local im = { [1] = {item = {2160, 5}, monster = {"Rat"}}, [2] = {item = {2148, 5}, monster = {"Rotworm"}} } function onKill(cid, target, lastHit) if isPlayer(cid) and not isPlayer(target) then for _, all in pairs(im) do -- print(getCreatureName(target)) -- Caso nao funcione, tente usar isso para pegar o nome exato do seu monstro. if getCreatureName(target) == all.monster[1] then doPlayerAddItem(cid, all.item[1], all.item[2]) end end end return true end em creaturescript coloque
    <event type="kill" name="Monsteritem" event="script" value="Monsteritem.lua"/> depois vai em login.lua e coloque
    registerCreatureEvent(cid, "Monsteritem") Nao esqueça de avaliar o codigo, lá encima /\
  15. Gostei
    penisagudo deu reputação a DeCarvalho em [Sistema][TFS 1.1 1.2][WindowsModal]Crafting Avançado   
    Bem, esse é mais um sistema do RazorBlade, assim como no outro, pedi autorização para estar trazendo para cá. Esse sistema é bem complexo e enorme e, claro, pode ser alterado da maneira que lhe convir.
     
    Espero que quem usar e testar de um rep, pois traduzir, ajeitar o conteúdo, testar para ver se tem erros e reportar demora né.. estou trazendo pois sei que muitos brs não sabem o mínimo de inglês e acho que esses deveriam ao menos agradecer pelo trabalho de disponibilizar aqui.. Enfim.. novamente, Vamos começar
     
    Esse sistema é composto de 3 ferramentas distintas.: Smith(forja de items), Smelt(derretimento de items), tanning (tratar a pele)   Caracteristicas
      Bem são mais de 2mil linhas de códigos vamos realmente começar?!?!   -- ACTIONS   Em actions.xml adicione isto
      Crie um arquivo scripts/crafting/smith.lua e adicione isso
      Crie um arquivo scripts/crafting/smelt.lua e adicione isso
      Crie um arquivo scripts/crafting/tan.lua e adicione isso
      -- CREATURESCRIPTS   Em creaturescripts.xml adicione isso
      Crie um arquivo em creaturescripts/scripts/smith.lua e adicione isso
      Crie um arquivo em creaturescripts/scripts/smelt.lua e adicione isso
      Crie um arquivo em creaturescripts/scripts/tan.lua e adicione isso
      Em creaturescripts/scripts/login.lua adicione isso em qualquer area que seja depois da primera sessão de login
      e registre os eventos no final

     
    -- SESSÃO DATA
     
    Em global.lua adicione



     
    Crie o arquivo smith.lua e adicione isso



     
    Crie o arquivo smelt.lua e adicione isso



     
    Crie o arquivo tan.lua e adicione isso



     
    Crie o arquivo skills.lua e adicione isso



     
    -- SESSÃO DATA 1
     
    Caso pretenda usar achievement para os sets é necessário adicionar mais 2 linhas ao global.lua



     
    Crie o arquivo achievements.lua e adicione isso



     
    Crie o arquivo sets.lua e adicione isso



     
    -- CONSIDERAÇÕES FINAIS
    O sistema foi testado em TFS 1.1 e 1.2 e esta funcionando sem problemas.
    Eu fiz testes usando o tfs 1.2 mas não usei o sistema de achievements, o resto todo que testei esta funcionando perfeitamente.. 
     
    Por favor, antes de qualquer pergunta leia atentamente todas as informações..
     
    Obs.: Curtiu, usou, testou.. da um rep ae.. isso mostra que valeu a pena gastar o tempo procurando algo interessante, pedindo autorização  e tudo mais para trazer para cá.. além de não arrancar pedaço..
  16. Gostei
    penisagudo deu reputação a Menino aleatorio em (Resolvido)Tipo um Anti-MC   
    local config = {
    max = 1, -- Número de players permitido com o mesmo IP.
    group_id = 1 -- Kikar apenas player com o group id 1.
    }
    local accepted_ip_list = {} -- Lista dos players permitidos a usar MC, exemplo: {"200.85.3.60", "201.36.5.222"}
    local function antiMC(p)
    if #getPlayersByIp(getPlayerIp(p.pid)) >= p.max then
    doRemoveCreature(p.pid)
    end
    return true
    end
    function onLogin(cid)
    if getPlayerGroupId(cid) <= config.group_id then
    if isInArray(accepted_ip_list,doConvertIntegerToIp(getPlayerIp(cid))) == false then
    addEvent(antiMC, 1000, {pid = cid, max = config.max+1})
    end
    end
    return true
    end
     
    Não sei se é isso aqui que vc esta pedindo mas é 1 anti mc onde a pessoa só podera logar 1 conta com o mesmo ip.
    o problema são que jogadores de lan house não podem jogar o servidor
  17. Gostei
    penisagudo deu reputação a AgaSsI em [Actions] Stamina Doll   
    Nome do Script: Stamina Doll
    Autor: Não sei o autor, pois foi um amigo meu que me passou!
    Testado em: Styller 8.6
    É um script simples e util, bom para servidores com mapa Global com site.

    Instalando: Vá em ...data/actions/scripts, e crie um arquivo chamado stamina-refuel.lua e cole isto dentro:

    Código:


    function onUse(cid, item, fromPosition, itemEx, toPosition) local cfg = {} cfg.refuel = 42 * 60 * 1000 if(getPlayerStamina(cid) >= cfg.refuel) then doPlayerSendCancel(cid, "Your stamina is already full.") elseif(not isPremium(cid)) then doPlayerSendCancel(cid, "You must have a premium account.") else doPlayerSetStamina(cid, cfg.refuel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Your stamina has been refilled.") doRemoveItem(item.uid) end return true end Em actions cole a seguinte tag: Código: <action itemid="ID DO SEU DOLL AQUI" script="stamina-refuel.lua"/>


    Onde está "ID DO SEU DOLL AQUI", coloque o número do doll que você deseja. Geralmente utilizam Santa Doll ou Nightmare Doll.

    *6512
    *11138

    Grato!
  18. Gostei
    penisagudo deu reputação a ViitinG em [creaturescripts] Senha para porta   
    Bom para quem não sabe como funciona o script,é basicamente uma senha para conseguir abrir uma porta e após um tempo a porta se fecha automaticamente,podendo ser configurado o tempo/senha/porta.
     
    • Adicionando o script •
     
    Em "data/creaturescripts/creaturescripts.xml" adicione está tag :
    <event type="textoparaporta" name="Senha" event="script" value="senhaporta.lua"/> Em "data/creaturescripts/scripts/login.lua" adicione está tag no final do script :
    registerCreatureEvent(cid, "Senha") Em "data/creaturescripts/scripts/senhaporta.lua" adicione este script :
    local uniqueids = {8049, 8050} local passwords = { ["TibiaKing"] = {doorpos = {x = 163, y = 36, z = 7}, doorid = 6257, blackboardpos = {x = 162, y = 36, z = 7}, blackboardid = 1811, uniqueid = 8049, doorclosetime = 10}, ["TK"] = {doorpos = {x = 1000, y = 1000, z = 7}, doorid = 1213, blackboardpos = {x = 1000, y = 1000, z = 7}, blackboardid = 1811, uniqueid = 8050, doorclosetime = 10} } function onTextEdit(cid, item, newText) local x = passwords[newText] local function onCloseDoor() if(getTileItemById(x.doorpos,x.doorid+1).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid+1).uid, x.doorid) doSendMagicEffect(x.doorpos, CONST_ME_MAGIC_RED) end end for _, check in pairs(uniqueids) do if item.uid == check then if x and item.uid == x.uniqueid then if(getTileItemById(x.doorpos,x.doorid).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid).uid, x.doorid + 1) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Sua Senha "'..newText..'" esta correta, voce pode entrar.') addEvent(onCloseDoor,x.doorclosetime*1000) doRemoveItem(item.uid, 1) local blackboard = doCreateItem(x.blackboardid,1,x.blackboardpos) doItemSetAttribute(blackboard, "uid", x.uniqueid) else doRemoveItem(item.uid, 1) local blackboard = doCreateItem(x.blackboardid,1,x.blackboardpos) doItemSetAttribute(blackboard, "uid", x.uniqueid) doPlayerSendCancel(cid, 'A porta ja esta aberta, feche-a ou espera ela se fechar.') end else doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid, 'Sua senha "'..newText..'" esta incorreta.') end end end return true end • Configurando •
     
     
    Creditos : Limos
     
    Imagens :



  19. Gostei
    penisagudo deu reputação a porxmex em Erro house (nao salva)   
    Já arrumei, caso seja isso aqui esta a solução muito simples ! do mesmo gosto de contribuir com vcs do forum Abraço
     
     
     
  20. Gostei
    penisagudo deu reputação a Lyu em Anti-Abuse [Proibir palavrões]   
    Fala pessoal, fiz este script para evitar palavrões em meu servidor e agora irei disponibilizá-lo.
     
    Crie um arquivo xml chamado antiabuse.xml e adicione isto dentro :
    <?xml version="1.0" encoding="UTF-8"?> <mod name="Anti-Abuse System" version="1.0" author="Ladyazaleia" contact="https://www.facebook.com/wustehs" enabled="yes"> <config name="antiabuse-config"><![CDATA[     words_ = {"porra","viado","caralho","buceta","puta","piroca","baiak","xereca","viadinho","cu","vai se fuder","filho da puta","seu cu","minha pica"}     cancel = "There is a word '%s' that you cannot use." ]]></config>      <talkaction default="yes" filter="quotation" logged="no" hidden="yes" event="script"><![CDATA[ domodlib('antiabuse-config')     for _, v in pairs(words_) do         if(words:lower():find(v)) then             return doPlayerSendCancel(cid, cancel:format(v))         end     end ]]></talkaction> </mod> Na tabela  words_..
    Adicione a palavra que você deseja proibir de ser dita em seu servidor.
     
    testado em TFS 0.4
    qualquer erro, nos avise.
     
    obs : desculpe os palavrões pesados ae u.u
    Créditos : EU
     

Informação Importante

Confirmação de Termo