Ir para conteúdo
Banner com Efeitos

Mr. Void

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Mr. Void deu reputação a Reds em Rainbow Outfit   
    em creaturescript cria um arquivo chamado rainbow.lua e coloca:
    function onLogout(cid)
    if getPlayerStorageValue(cid, 65535) > 0 then
    setPlayerStorageValue(cid, 65535, -1)
    return TRUE
    end
    end
     
    em creaturescript.xml coloca:
        <event type="logout" name="rainbow" event="script" value="rainbow.lua"/>
     
     
    em creaturescript cria um arquivo chamado rainbow1.lua e coloca:
    function onOutfit(cid, old, current)
    if getPlayerStorageValue(cid, 65535) > 0 then
    setPlayerStorageValue(cid, 65535, -1)
    return true
    end
    end
     
    em creaturescript.xml coloca:
        <event type="outfit" name="rainbow1" event="script" value="rainbow1.lua"/>
     
  2. Gostei
    Mr. Void deu reputação a Killua em Sistema de Upgrade Bronson Server (refinar)   
    Este é um sistema de refinar itens feito com base no do Bronson Server. Para refinar, o jogador precisa ter uma certa quantidade de Iron Ores (dependendo do level do item) e de um Iron Hammer. 
     

     
    Somente equipamentos e armas podem ser refinados.
     
    crie Killua Upgrading System.lua em data/actions/scripts e coloque:
    --- Sistema de Upgrade de itens feito por Killua. --- Sistema feito com base no do Bronson Server. local vocations = {1, 2, 4, 5, 6, 7, 8} -- Vocações que podem refinar itens local ids_bloqueados = {2160, 5706, 2463} -- Itens que não podem ser refinados local controle = { {level = 0, quantOre = 1, chance = 100}, -- Level do item, quantidade de Iron Ore necessaria, chance de sucesso {level = 1, quantOre = 2, chance = 90}, {level = 2, quantOre = 3, chance = 80}, {level = 3, quantOre = 4, chance = 70}, {level = 4, quantOre = 5, chance = 60}, {level = 5, quantOre = 6, chance = 50}, {level = 6, quantOre = 7, chance = 40}, {level = 7, quantOre = 8, chance = 30}, {level = 8, quantOre = 9, chance = 20}, {level = 9, quantOre = 10, chance = 10} } function getItemLevel(uid) if uid > 0 then return getItemAttribute(uid, "lvl") or 0 end return false end function doItemAddLevel(uid, count) if uid > 0 and tonumber(count) > 0 then return doItemSetAttribute(uid, "lvl", getItemLevel(uid) + count) end return false end function onUse(cid, item, fromPosition, itemEx, toPosition) if not isInArray(vocations, getPlayerVocation(cid)) then return doPlayerSendCancel(cid, "Sua vocacao nao pode refinar.") elseif isInArray(ids_bloqueados, itemEx.uid) then return doPlayerSendCancel(cid, "Este item nao pode ser refinado.") end if getItemInfo(itemEx.itemid).attack > 0 or getItemInfo(itemEx.itemid).defense > 0 or getItemInfo(itemEx.itemid).armor > 0 then for _, upgrade in pairs(controle) do local atk = getItemAttribute(itemEx.uid, "attack") or getItemInfo(itemEx.itemid).attack local def = getItemAttribute(itemEx.uid, "defense") or getItemInfo(itemEx.itemid).defense local arm = getItemAttribute(itemEx.uid, "armor") or getItemInfo(itemEx.itemid).armor local chance = math.random(1, 100) if getItemLevel(itemEx.uid) == upgrade.level then if doPlayerRemoveItem(cid, 5880, upgrade.quantOre) then doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_CRAPS) if chance <= upgrade.chance then if getItemLevel(itemEx.uid) == 0 then doItemSetAttribute(itemEx.uid, "description", "Esse item foi refinado por" ..getCreatureName(cid)) end doItemAddLevel(itemEx.uid, 1) doItemSetAttribute(itemEx.uid, "name", getItemNameById(itemEx.itemid).. " + " ..getItemLevel(itemEx.uid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce refinou com sucesso! Agora seu "..getItemNameById(itemEx.itemid).." eh level " ..getItemLevel(itemEx.uid)) if getItemInfo(itemEx.itemid).attack > 0 then doItemSetAttribute(itemEx.uid, "attack", atk + 1) return true elseif getItemInfo(itemEx.itemid).armor > 0 then doItemSetAttribute(itemEx.uid, "armor", arm + 1) return true elseif getItemInfo(itemEx.itemid).defense > 0 and getItemInfo(itemEx.itemid).attack <= 0 then doItemSetAttribute(itemEx.uid, "defense", def + 1) return true end else doTransformItem(itemEx.uid, 2256) doItemSetAttribute(itemEx.uid, 'name', "metal trash") doItemSetAttribute(itemEx.uid, 'attack', 0) doItemSetAttribute(itemEx.uid, 'armor', 0) doItemSetAttribute(itemEx.uid, 'defense', 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce falhou.") return true end else doPlayerSendCancel(cid, "Voce nao tem iron ores o suficiente. Voce precisa de "..upgrade.quantOre.." iron ores.") end end end else doPlayerSendCancel(cid, "Esse item nao pode ser refinado.") end return true end Em data/actions/actions.xml coloque essa TAG:
    <action itemid="2422" event="script" value="Killua Upgradin System.lua"/> Para configurar, leia meus comentários dentro do código.
  3. Gostei
    Mr. Void deu reputação a Kamii em [Talkaction] Rainbow Outfit   
    Fala TK  beleza? hoje venho aqui compartilhar um Script meio antigo porém funcional "Rainbow Outfit" para quem já jogou OT'S 8.40 sabe o que é isso
    Bom vamos lá. Para quem não sabe o que esse Script faz ele fica trocando de cor aleatoriamente assim que o Player ativa o comando como no vídeo abaixo.
     
    https://vid.me/O1hJ
     
     
    Para fazer a instalação vá em Data/Talkactions/Scripts
    Depois copie e cole qualquer arquivo .LUA
    Renomeie o arquivo para rainbow copie e cole tudo que está abaixo la dentro.
     


        Agora vá para Data/Talkactions E abra o aquivo Talkactions.XML Depois copie e cole o que está logo abaixo la dentro do Talkactions.XML  

        !rainbow on = Ligar o Rainbow Outfit !rainbow off = Desligar o Rainbow Outfit
  4. Gostei
    Mr. Void deu reputação a xWhiteWolf em Broadcast System 100%   
    Fala galera do TK, hoje vim trazer um script que eu já fiz a algum tempo prum cara no suporte, é nada mais e nada menos doque um sistema de broadcast onde players maiores que um determinado level pagam um determinado valor de gp's para soltarem uma mensagem para o server todo. 

    talkactions\scripts\broadcast22.lua:
    local config = { storage = 19400, -- storage em que será salvo o tempo cor = "advance", -- de acordo com o constant.lua da lib tempo = 2, -- em minutos price = 1000, -- preço pra usar o broadcast level = 100 -- level pra poder utilizar o broadcast } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*60)) doBroadcastMessage("[BROADCAST] "..getCreatureName(cid)..": "..param.."", config.cor) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You have successfully sent a broadcast, now you'll have to wait " ..config.tempo.. " minute(s) until you broadcast again.") return false else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return false end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return false end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end end e em talkactions.xml adicione essa linha:
    <talkaction log="yes" words="/all" event="script" value="broadcast22.lua"/> Da forma que tá configurado os players nv 100 ou mais poderão digitar /all Mensagem e por apenas 1000 gp's eles falarão a mensagem para o server inteiro, feito isso ele terá que esperar 2 minutos para mandar outro broadcast. Se você quiser mudar a cor é só ir no constant.lib e procurar algo parecido com isso daqui: MESSAGE_TYPES = { ["advance"] = MESSAGE_EVENT_ADVANCE, ["event"] = MESSAGE_EVENT_DEFAULT, ["white"] = MESSAGE_EVENT_DEFAULT, ["orange"] = MESSAGE_STATUS_CONSOLE_ORANGE, ["info"] = MESSAGE_INFO_DESCR, ["green"] = MESSAGE_INFO_DESCR, ["small"] = MESSAGE_STATUS_SMALL, ["blue"] = MESSAGE_STATUS_CONSOLE_BLUE, ["red"] = MESSAGE_STATUS_CONSOLE_RED, ["warning"] = MESSAGE_STATUS_WARNING, ["status"] = MESSAGE_STATUS_DEFAULT } Uma imagem pra vcs verem como é:



  5. Gostei
    Mr. Void deu reputação a Gabrielk em Frag Look- Kills And Dead-Premium   
    Olá Galera, vim trazer para vocês o Frag Look - Kills And Dead... ele irá mostrar quantos você matou, e quantos você morreu. Vou Trazer em duas versões... a que mostra só o Kill e Dead, e outra que mostra quantos dias premium também existe na sua conta... Vamos lá..
     
    Frag Look - Kills And Dead (Normal) :
     
    Vá em creaturescripts/creaturescripts.xml : e adicione essa linha:
     



     
    Após isso, crie um arquivo chamado KillsandDeath.lua e adiciona isso
     



     
    Depois vá em login.lua e adicione isso :
     



     
    Pronto Adicionado o Script de Kills And Death...
     
    2º: para mostrar os premiums day(Lembre-se que só funciona em servidor que usa o premium como vip.) também coloque esse script :
     



     
    é isso galera. eu não se quem de quem são os creditos, peguei de um servidor antigo que eu tinha aqui. Então valeu. Gostou ? REP+
     

  6. Gostei
    Mr. Void deu reputação a Thunder Black em Porta de Trainer 8.6   
    trainroom.lua
     
     
  7. Gostei
    Mr. Void deu reputação a Xagah em Lag em um servidor Debian   
    Cara, boa noite, em primeiro lugar.
     
    Antes de mais nada é bom saber o que é o 'lag'.
     
    Toda a vez que você aperta a 'seta' no seu teclado seu PC emite um 'comando' que é enviado ao servidor. Quando chega este servidor processa a informação, gera outra que é enviada para você. O seu PC recebe ela e processa, mostrando o resultado na sua tela.
     
    Assim, o tempo que leva entre você ter apertado a seta e ter visto o seu char andar tem que ser curto. Se for 'relativamente' longo dizemos que houve 'lag'.
     
    Assim, o 'char' andar liso é medido pelo tempo que leva para a informação ir e voltar. Este tempo é chamado de 'ping'.
     
    Logo, quanto maior o 'ping' maior o 'lag'.
     
    Pronto. Agora vem...
     
    Assim, o 'ping' depende, basicamente:
    da sua velocidade; de onde a informação passa; e da velocidade dos servidores deles. Entre outros fatores. Logo, a memória RAM deles não influencia em quase nada o 'char' andar liso.
     
    Para isto:
    sua 'internet' deve ser boa (alta velocidade, baixo ping, ter poucas conexões de fios em casa); o 'host computer' deles deve ser perto; e a velocidade deles deve ser alta. Entre outros fatores... Além disto, se você envia muitos comandos em pouco tempo isto irá aumentar. Isto ocorre, dentro do Tibia, quando seu level é mais alto.
     
    Isto porque você corre mais e anda sobre mais 'sqm´s' em menos segundos. Aí acaba dando estas 'travadinhas' mesmo.
     
    Entende?
     
    Então meça o 'ping' deles.
     
    Adicional: servidores que utilizar o sistema operacional Linux utilizam um sistema chamado 'putty' para 'encurtar' o caminha que a informação passa, o que acelera em muuuuito a conexão. Dá uma lida sobre isto.
     
    Abraço.
     
    Se ajudei, rep+.
  8. Gostei
    Mr. Void deu reputação a Vodkart em [Resolvido] [Dúvida] Comando !guildcast   
    troca o return FALSE por return true
  9. Gostei
    Mr. Void deu reputação a Wise em [!myhome] Localização da house   
    Seguinte, brothers..

    Intro

    Essa talkaction serve para auxiliar aquele player com uma memória ruim ou que possa ter passado um longo tempo inativo, mostrando a localização da house dele no minimap.



    Situações
    !myhome

    Para que isso aconteça, é óbvio que o player precisa possuir uma house. Caso contrário, ele será informado desta forma:




    Se ele estiver a mais que 50 sqms (alterável) de distância de sua house, o player será informado sobre o nome da city onde ela se localiza:




    Assim que ele estiver mais próximo de sua house (já na city) e usar o comando novamente, uma marcação () descrita como "Home Sweet Home" ("Lar Doce Lar") será feita no minimap, indicando a localização da entrada dela:





    Script

    Enfim, vamos ao que interessa..

    myhome.lua (data\talkactions\scripts)


    ENG (mensagens/legenda em inglês americano):
    local sqms = 50 -- minimum distance to the marking on the minimap function onSay(cid) -- Developed by Wise ~ TibiaKing.com     local house = getHouseByPlayerGUID(getPlayerGUID(cid))          if not house then         return doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) and doPlayerSendCancel(cid, 'You don\'t own a home.')     elseif getDistanceBetween(getCreaturePosition(cid), getHouseEntry(house)) > sqms then         return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You are too far from your home. It is located in '..getTownName(getHouseTown(house))..', go there and use the command again.')     else         return doPlayerAddMapMark(cid, getHouseEntry(house), MAPMARK_CROSS, 'Home Sweet Home') and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'The location of your home was marked on the minimap as a red X.')     end end



    PT-BR (mensagens/legenda em português brasileiro):
    local sqms = 50 -- distância mínima para a marcação no mini-mapa function onSay(cid) -- Desenvolvido por Wise ~ TibiaKing.com     local house = getHouseByPlayerGUID(getPlayerGUID(cid))          if not house then         return doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) and doPlayerSendCancel(cid, 'Você não possui uma casa.')     elseif getDistanceBetween(getCreaturePosition(cid), getHouseEntry(house)) > sqms then         return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Você está muito longe de sua casa. Ela se localiza em '..getTownName(getHouseTown(house))..', vá até lá e use o comando novamente.')     else         return doPlayerAddMapMark(cid, getHouseEntry(house), MAPMARK_CROSS, 'Lar Doce Lar') and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'A localização da sua casa foi marcada no mini-mapa como um X vermelho.')     end end



    talkactions.xml (data\talkactions)
    <talkaction words="!myhome" event="script" value="myhome.lua"/>


    Agradecimentos especiais ao @p e o p l e, por testar a talkaction e fornecer as imagens para o tópico.
  10. Gostei
    Mr. Void deu reputação a Natanael Beckman em Montando OTserver em Debian perfeito.   
    Downloads necessarios:
    PuTTY
    WINSCP
    SOURCE OTX ATUALIZADA
     
    Essa REV eu recomendo você baixar no seu computador, extrair e enviar por ftp para a pasta home.
    Acessando PuTTY veja os passos a seguir:







    (Comandos para copiar e colar no shell [Copia: ctrl+insert] [Colar: shift+insert]).
     
    Para visualizar ou enviar sua source por ftp vamos usar o WinSCP acesse ele:






     
    Certo!
    Enviou a pasta do OTserver para a pasta home? renomeie ela com o f2 para o nome otserver. Feito? Vamos inciar:
    Sempre espere terminar por completo o processamento de instalação após executa o comando:
    apt-get update Se aparecer algo bla bla (Y or N?) digita Y e da enter.
    cd /home/otserver Instalando as libs e boots:
    apt-get install libboost-all-dev libgmp3-dev liblua5.1-0 liblua5.1-0-dev liblua50 liblua50-dev liblualib50 liblualib50-dev lua50 lua5.1 libsqlite0-dev libsqlite3-dev sqlite3 libmysql++-dev libmysqlclient-dev mysql-common libxml2-dev libxml++2.6-dev cpp gcc g++ make automake autoconf pkg-config subversion liblua5.1-sql-mysql-dev liblua5.1-sql-sqlite3-dev zlib1g-dev zlib1g libcrypto++-dev libcrypto++9 Após instalação finalizada vamos para o próximo passo...
    Compilando o server:
    sh ./autogen.sh && ./configure --enable-server-diag --enable-mysql --enable-root-permission && make -j 2 Bom dando tudo correto via ftp use ctrl+r(atualizar) verifique dentro da pasta do seu OTServer terá um arquivo chamado theforgottenserver se tiver ele la OK meus parabéns você compilou em Linux, vamos para os próximos passos.
     

     
    Jajá vamos abri o server mais antes temos que configurar o config.lua, database, o server. Com a mesma source eu sempre compilo no windows faço tudo em meu computador, faço todos os teste e após está tudo OK eu envio por ftp para minha maquina e faço as atualizações.
    Normalmente quando você for abrir o server no linux pode da error de sensitive, é quando Arquivo tem nomes com as letras em tamanhos diferenciado tipo A a, exemplo:
     
    O servidor no linux procura por um arquivo chamado Record se na pasta script tiver o arquivo com o nome dessa forma record o R minusculo o Linux não vai encontrar os nomes tem que ser iguais o que tiver em maiúsculo fica em maiúsculo e minusculo fica em minusculo.

    A database eu faço da mesma forma do server primeiro configuro no computador exporto e depois envio o arquivo .sql via ftp para maquina la boto o arquivo na pasta home e eu upo via comandos no shell para a database do Linux.
     
    Vamos instalar a parte de WEB:
    Lembre-se nas instalações sempre da Y quando pergunta Y or N e se aparecer algo como selecionar opções sempre selecione a primeira... Estou ensinando de uma forma que não seria a correta mais da certo!
     
    Via Shell SSH:
    apt-get install apache2 apt-get install php5 libapache2-mod-php5 apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl apt-get install php5-xcache apt-get install sendmail Olha o mysql tem um momento que pede pra você inserir uma senha, aconselho bota uma senha que você conheça.
    apt-get install mysql-server mysql-client No phpmyadmin ele pede a senha também, bote a mesma do mysql pra não da error:
    apt-get install phpmyadmin cp -r /usr/share/phpmyadmin/ /var/www/phpmyadmin/ service apache2 restart apt-get install libapache2-modsecurity service apache2 restart Pronto verifique se está tudo correto, http://ip.da.maquina/phpmyadmin acesse seu phpmyadmin usando user: root e a senha é a que você botou na instalação do mysql, crie o seu banco de dados e vamos já upa a database....
     
    Via ftp na pasta var/www/ renomeie usando o f2 o nome da pasta phpmyadmin para outro nome, qualquer um, eu particularmente sempre boto outros nomes, não deixo phpmyadmin, exemplo, 65fs98a97ds56aq.
     
    Upando a database, usando o shell vamos para a pasta onde se encontra o seu banco de dados, que enviamos via ftp, no caso, a pasta home:
    cd /home psenha Ae você bota a senha do seu mysql se você não sabe entre em contato com quem você alugou seu dedicado.
    mysql -u root -psenha No comando abaixo você bota o nome da sua database que criamos agora pouco na web.
    USE seubancodedados Aqui você bota o nome do arquivo.sql que enviamos por ftp:
    source arquivo.sql Só esperar finalizar após concluir ok, database upada pode conferir pelo seu navegador de internet como todas as tabelas estarão la do jeito que você configurou no windows.
     
    Galera ai o resto vocês já sabem sobre o config.lua,dados da database, senha, ip, rates, feito isso vamos pro site.
     
    Via ftp acesse sua pasta htdocs selecione todos os arquivos dentro dela e mande para a pasta var/www, quando concluir apenas altere o a seguinte arquivo, config.ini, em server path, altere, no caso ali o nome da pasta do meu OT é otserver:
    install = "no" server_path = "/home/otserver/" signatures = "0" Se tiver feito até agora tudo certo, o seu site vai estar funcionando perfeitamente.
     
    Go go go!
    Você já testou o server em sua casa, configurou a pasta data utilizando a mesma REV, pronto enviar a pasta via ftp substituindo a pasta que existe la. Feito isso vamos para o shell acesse a pasta do ot:
    cd /home/otserver ./theforgottenserver Se aparecer algo bla bla (Y or N?) digita Y e da enter.
     
    Ai vai abri normalmente aparece carregando o server se der algum erro vai dizer pra quem sabe ler vai ser moleza!
    Abriu o server entrou com seu god testou tudo ok, feche o server, ctrl+c, agora vamos abrir o server oficial pra não cair e poder fechar o shell sem cair o ot.
    Vamos nós, no shell volte para o root usando:

    Até voltar ao root:
    cd / Vamos adicionar um usuario:
    adduser tfs No caso ai o nome do usuário que estou adicionando é tfs, pode ser otserver, seu nome, você escolhe, quando você executa o comando vai pedi uma senha bote mesma da sua maquina da enter vai pedi seu nome pais e talz bota nada não só da enter ate finalizar o processo feito isso, OK.
     
    Agora baixe esse arquivo em seu computador extraia ele e envia por ftp para a pasta home/otserver:
     
    TFS.SH
    cd /home/otserver chmod 777 -R tfs.sh Feito né? Ok agora vamos abrir o OT pra ele não fechar e quando ele cair por algum erro ele volta sozinho. Em root utilizando o shell execute os comandos:

    Isso indica que você esta utilizando o usuario tfs:
    su tfs cd /home/otserver ./theforgottenserver.sh& Ai ele começa a carrega normal e pronto THE END.
     
    Caso queria fechar o server:
    su tfs cd /home/otserver ps x Vai aparece uma lista de coisas abertas e cada uma com o numero do processo:



    Pra fechar o server vai ter que mata dois processo, o bash e o tfs, ambos com interrogação do lado veja que tem dois bash killa somente o com a interrogação(?).
    Sempre primeiro o bash:
    kill -9 21748 Depois o server:
    kill -9 21750 Pronto.
     
    Recomendo para a proteção do seu site:
    Prevent DOS attacks on apache webserver for DEBIAN linux with mod_evasive
  11. Gostei
    Mr. Void deu reputação a Natanael Beckman em [GlobalEvents] ServeSave - Shutdown/Automático   
    Galera é um script muito simples, porém pra mim é muito ÚTIL.
     
    Abra a pasta data/globalevents/scripts crie um arquivo .lua com o nome GlobalSave.lua, em seguida adicone o code:
    function prepareShutdown(minutes)         if(minutes <= 0) then                 doSetGameState(GAMESTATE_SHUTDOWN)                 return false         end         if(minutes == 1) then                 doBroadcastMessage("Server is going down in " .. minutes .. " minute for global save, please log out now!")         elseif(minutes <= 3) then                 doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save, please log out.")         else                 doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save.")         end         shutdownEvent = addEvent(prepareShutdown, 60000, minutes - 1)         return true end function onTime()     return prepareShutdown(5) -- Quantos minutos pra executar o ServeSave. end Ajustes:
    Quando quiser modificar os minutos altere:  -return prepareShutdown(5) - (5) = 5 minutos, eu recomendo no mínimo 5 minutos, em outras palavras não mexa. Em globalevents.xml adicione a tag seguinte:
    <globalevent name="GlobalSave" time="05:30" event="script" value="GlobalSave.lua"/> No meu ServeSave é feito as 05:30 da manhã, modifique pro horário desejado!
     
    Em config.lua verifique essa regra:
    Se tiver TRUE deixa, assim ele fecha o .exe se não tiver no seu config.lua não tem problema closeInstanceOnShutdown = true -
    -
    -
    Esse tutorial é só isso, clique em GOSTEI, e comente no tópico, muito obrigado!
     
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    AUTO RESTART
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    Pra você que utiliza Windows esse é perfeito:
    Dezon OT Admin [restarter]
     
    Pra você que utiliza Linux:
     
    Baixe esse arquivo, TFS.SH, bote dentro da pasta do seu OT.
    Esse arquivo está configurado pra abrir outro arquivo chamado tfs caso o seu seja outro nome mude pra esse, tfs.
    Sempre que for abrir seu OT execute esse comando ./tfs.sh& e assim toda vez que o OT cair ele renicia automaticamente.
  12. Gostei
    Mr. Void deu reputação a Natanael Beckman em Trade OFF - Shop Offline   
    Esse sistema disponibiliza uma negociação offline, onde você oferta um item e esse item é divulgado no site do server e qualquer player pode comprar o item utilizando um comando especificado.
     
    Crie uma arquivo .lua dentro da pasta data/talkactions/scripts com o nome auctionsystem.lua, dentro do mesmo adicione o code:
    local config = {         levelRequiredToAdd = 20,         maxOffersPerPlayer = 5,         SendOffersOnlyInPZ = true,         blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933}         } function onSay(cid, words, param, channel)         if(param == '') then                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")                 return true         end         local t = string.explode(param, ",")         if(t[1] == "add") then                 if((not t[2]) or (not t[3]) or (not t[4])) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.")                         return true                 end                 if(not tonumber(t[3]) or (not tonumber(t[4]))) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.")                         return true                 end                 if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.")                         return true                 end                 local item = getItemIdByName(t[2])                 if(not item) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.")                         return true                 end                 if(getPlayerLevel(cid) < config.levelRequiredToAdd) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.")                         return true                 end                 if(isInArray(config.blocked_items, item)) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.")                         return true                 end                 if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).")                         return true                 end                 local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";")                 if(check:getID() == -1) then                 elseif(check:getRows(true) >= config.maxOffersPerPlayer) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")")                         return true                 end                 if(config.SendOffersOnlyInPZ) then                             if(not getTilePzInfo(getPlayerPosition(cid))) then                                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.")                                 return true                         end                 end                 if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.")                         return true                 end                                 local itemcount, costgp = math.floor(t[4]), math.floor(t[3])                 doPlayerRemoveItem(cid, item, itemcount)                 db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")")                                 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.")         end         if(t[1] == "buy") then                 if(not tonumber(t[2])) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")                         return true                 end                 local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";")                 if(buy:getID() ~= -1) then                         if(getPlayerMoney(cid) < buy:getDataInt("cost")) then                                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.")                                 buy:free()                                 return true                         end                         if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then                                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.")                                 buy:free()                                 return true                         end                         if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then                                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.")                                 buy:free()                                 return true                         end                         if(isItemStackable((buy:getDataString("item_id")))) then                                 doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count"))                         else                                 for i = 1, buy:getDataInt("count") do                                         doPlayerAddItem(cid, buy:getDataString("item_id"), 1)                                 end                         end                         doPlayerRemoveMoney(cid, buy:getDataInt("cost"))                         db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")                         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!")                         db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";")                         buy:free()                 else                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")                 end         end         if(t[1] == "remove") then                 if((not tonumber(t[2]))) then                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")                         return true                 end                                 if(config.SendOffersOnlyInPZ) then                                             if(not getTilePzInfo(getPlayerPosition(cid))) then                                                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.")                                                 return true                                         end                 end                 local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";")                         if(delete:getID() ~= -1) then                         if(getPlayerGUID(cid) == delete:getDataInt("player")) then                                 db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";")                                 if(isItemStackable(delete:getDataString("item_id"))) then                                         doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count"))                                 else                                         for i = 1, delete:getDataInt("count") do                                                 doPlayerAddItem(cid, delete:getDataString("item_id"), 1)                                         end                                 end                                 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.")                         else                                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!")                         end                 delete:free()                 else                         doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.")                 end         end         if(t[1] == "withdraw") then                 local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";")                 if(balance:getDataInt("auction_balance") < 1) then                         doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.")                         balance:free()                         return true                 end                 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!")                 doPlayerAddMoney(cid, balance:getDataInt("auction_balance"))                 db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";")                 balance:free()         end         return true end Em seguida em talkactions.xml adicione a tag:
    <talkaction words="!offer" event="script" value="auctionsystem.lua"/> No banco de dados execute as querys:
    CREATE TABLE `auction_system` (   `id` int(11) NOT NULL auto_increment,   `player` int(11),   `item_id` int(11),   `item_name` varchar(255),   `count` int(11),   `cost` int(11),   `date` int(11),   PRIMARY KEY  (`id`) ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ALTER TABLE `players` ADD `auction_balance` INT( 11 ) NOT NULL DEFAULT '0'; Na pasta do seu site crie um arquivo chamado tradeoff.php, em seguida adicione o code:
    <?PHP $auctions = $SQL->query('SELECT `auction_system`.`player`, `auction_system`.`id`, `auction_system`.`item_name`, `auction_system`.`item_id`, `auction_system`.`count`, `auction_system`.`cost`, `auction_system`.`date`, `players`.`name` FROM `auction_system`, `players` WHERE `players`.`id` = `auction_system`.`player` ORDER BY `auction_system`.`id` DESC')->fetchAll(); $players = 0;             $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b>Instruction<b></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><center><h2>Commands</h2><b>!offer add, itemName, itemPrice, itemCount</b><br /><small>example: !offer add, plate armor, 500, 1</small><br /><br /><B>!offer buy, AuctionID</b><br /><small>example: !offer buy, 1943</small><br /><br /><b>!offer remove, AuctionID</b><br /><small>example: !offer remove, 1943</small><br /><br /><b>!offer withdraw</b><br /><small>Use this command to get money for sold items.</small></center></TR></TD></TABLE><br />';     if(empty($auctions))     {         $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b>Auctions</b></td></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD>Currently is no one active Auction.</TD></TR></TABLE>';         $main_content .= '<br /><p align="right"><small>System created by <a href="http://otland.net/members/vDk/">vDk</a>.</small></p>';     }     else     {     foreach($auctions as $auction) {         $players++;             if(is_int($players / 2))                 $bgcolor = $config['site']['lightborder'];             else                 $bgcolor = $config['site']['darkborder'];         $cost = round($auction['cost']/1000, 2);         $content .= '<TR BGCOLOR='.$bgcolor.'><TD><center>'.$auction['id'].'</center></TD><TD><center><img src="/item_images/'.$auction['item_id'].'.gif"/></center></TD><TD><center>'.$auction['item_name'].'</center></TD><TD><center><a href="?subtopic=characters&name='.urlencode($auction['name']).'">'.$auction['name'].'</a></center></TD><TD><center>'.$auction['count'].'</center></TD><TD><center>'.$cost.'k<br /><small>'.$auction['cost'].'gp</small></center></TD><TD><center>!offer buy, '.$auction['id'].'</center></TR>';     }          $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b><center>ID</center></b></TD><TD class="white"><b><center>#</center></b></TD><TD class="white"><b><center>Item Name</center></b></TD><TD class="white"><b><center>Player</center></b></TD><TD class="white"><b><center>Count</center></b></TD><TD class="white"><b><center>Cost</center></b></td><TD class="white"><b><center>Buy</center></b></td></TR>'.$content.'</TABLE>';     $main_content .= '<br /><p align="right"><small>System created by <a href="http://otland.net/members/vdk.1553/">vDk</a>.</small></p>'; }     ?>  Em layouts.php adcione o code:
                                    <a href="?subtopic=tradeoff">                                         <div id="submenu_tradeoff" class="Submenuitem" onmouseover="MouseOverSubmenuItem(this)" onmouseout="MouseOutSubmenuItem(this)">                                                 <div class="LeftChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div>                                                 <div id="ActiveSubmenuItemIcon_tradeoff" class="ActiveSubmenuItemIcon" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);"></div>                                                 <div id="ActiveSubmenuItemLabel_tradeoff" class="SubmenuitemLabel">Trade Off</div>                                                 <div class="RightChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div>                                         </div>                                 </a> Pra finalizar em index.php adicione esse code:
    case "tradeoff";    $topic = "Trade Off";    $subtopic = "tradeoff";    include("tradeoff.php"); break;
    -
    E pronto galera clica em GOSTEI e comenta no tópico.
     
  13. Gostei
    Mr. Void deu reputação a brendoonh em (Resolvido)Spell exori gran ico pra 8.6   
    Teste aí e ver se ficou de seu agrado!
     
  14. Gostei
    Mr. Void deu reputação a olokomeu em Ajuda com pagina do facebook no site   
    Se não me falha a memoria, essa "aba" é das novas versões do Gesior. Porém, você pode usar outro meio de colocar sua pagina do facebook no seu site. Como?
     
    - Tenha um pagina no facebook.
    - Depois você entra nesse link do facebook:
     
    >https://developers.facebook.com/docs/reference/plugins/like-box/
     
    Lá você gera uma janela da pagina do seu site.
     
    Onde tem:
     
    Facebook Page URL - Você coloca o link da pagina do seu Facebook.
    Height - É a largura desta janela.
    Width - É a altura desta janela.
    Color Scheme - Aqui você escolhe entre as 2 opções que o facebook disponibiliza "light" ou "dark".
     
    Depois de ter feito a configuração. Aperte "Get Code" e Escolha a opção "Iframe". Copie o Codigo que foi gerado e vá na pasta do seu site em htdocs>Layouts>tibiacom> e abra o arquivo Layouts.php. Feito isso, escolha o local onde você quer quer fique a janela do facebook em seu site e cole o código que foi gerado. Lembre-se de por o código entre <div>Seu codigo aqui</div>. Ficando assim:
     
     
    Espero ter ajudado.
  15. Gostei
    Mr. Void deu reputação a ViitinG em (Resolvido)Action para mudar cidade natal do player   
    "data/movements/scripts/morador.lua" :
    function onStepIn(cid, item, pos) local townid = 4 if isPlayer(cid) == TRUE then if (item.actionid == 7006) then doPlayerSendTextMessage(cid,22,"Agora voce e morador da cidade " .. getTownName(townId) .. ".") doPlayerSetTown(cid,townid) end end end "data/movements/movements.xml" :
    <movevent type="StepIn" itemid="1387" event="script" value="morador.lua"/>

Informação Importante

Confirmação de Termo