Ir para conteúdo

Marco Oliveira

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Marco Oliveira recebeu reputação de twysterox em Servidor 10.90 | Windows 32/64 Bits | Versão Final   
    Depois de muitos pedidos e muita procura acabei compilando o TFS da versão 10.90, está estável. 
    As sources são originais, não houve modificações nelas, apenas os sistemas foram adicionados...
     
    Clique Aqui para fazer o download da versão 32 bits.
    Clique Aqui para fazer o download da versão 64 bits.
    Clique Aqui para fazer o download das sources.
     
    Clique Aqui para o scan de 32 bits.
    Clique Aqui para o scan de 64 bits.
    Clique Aqui para o scan das sources.
     
    Para usar o Reward Chest adicione a seguinte flag no monstro.
    <flag rewardchest="1" /  
    Você também pode definir o drop para ser único, dessa forma só a pessoa que fez o maior dano irá obter este item. exemplo:
    <item id="5903" chance="100000" uniquedrop="1" /><!-- ferumbras' hat --> Na versão final foram corrigidos os bugs das mensagens do Server Log como as de potion e loot. Seguem as screen shots..
     

     

     
     
    Ps: Eu ainda não tinha disponibilizado o download para outros fóruns.. até pq era exclusivo de um outro fórum do mesmo conteúdo....
    Se algum ADM tiver alguma duvida sobre os tópicos não autorizados por favor me mandar msg inbox.
  2. Curtir
    Marco Oliveira deu reputação a FlameArcixt em Remake temple baiak 8.60   
    Fiz um remake de templo free-for-use para baiak 8.60+, quem quiser usar, pode usar a vontade!
    Remake:
    Download: Arcixt1329.otbm
     
     
     
    OBS: Não sei quem fez o templo original mas eu sei que tem pra download XD
  3. Gostei
    Marco Oliveira recebeu reputação de Katiau em Acesso full a Imbuing Shrine   
    Você pode liberar as storages de acesso ao jogador no npc The Oracle, basta procurar pela linha player:setTown(Town(town[cid])) e adicionar as seguintes linhas:
    -- Forgotten Knowledge player:setStorageValue(Storage.ForgottenKnowledge.Tomes, 1) player:setStorageValue(Storage.ForgottenKnowledge.LastLoreKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.TimeGuardianKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.HorrorKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.DragonkingKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.ThornKnightKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.LloydKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.LadyTenebrisKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.AccessMachine, 1)  
    Outra forma de fazer isso é adicionando as storages quando o player faz login no servidor, para isso você deve adicionar em login.lua em creaturescripts.
    Minha recomendação é que seja feita pelo Oracle, uma vez que o jogador só irá ganhar as storages uma vez.
  4. Gostei
    Marco Oliveira recebeu reputação de Seitron em Acesso full a Imbuing Shrine   
    Você pode liberar as storages de acesso ao jogador no npc The Oracle, basta procurar pela linha player:setTown(Town(town[cid])) e adicionar as seguintes linhas:
    -- Forgotten Knowledge player:setStorageValue(Storage.ForgottenKnowledge.Tomes, 1) player:setStorageValue(Storage.ForgottenKnowledge.LastLoreKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.TimeGuardianKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.HorrorKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.DragonkingKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.ThornKnightKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.LloydKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.LadyTenebrisKilled, 1) player:setStorageValue(Storage.ForgottenKnowledge.AccessMachine, 1)  
    Outra forma de fazer isso é adicionando as storages quando o player faz login no servidor, para isso você deve adicionar em login.lua em creaturescripts.
    Minha recomendação é que seja feita pelo Oracle, uma vez que o jogador só irá ganhar as storages uma vez.
  5. Gostei
    Ferobra Gesior, o melhor da atualidade!
    Esse é um fork destinado a servidores 8.60 que utilizam as versões mais atuais do TFS/OTX. Novos recursos para páginas, pagamento, anúncios, notícias e informações.
    The Real Gesior Ferobra
    Tópico: https://tibiaking.com/forums/topic/99226-gesior-ferobra-open-source/
     
     
    Demo: https://ferobraglobal.com/
     


    Gesior OTG Premium Version (tfs 1.x)
    Anti SQL Injection 100% seguro, Sistema de Donate com Mercado Pago, Pic Pay, Pag Seguro, Paypal, Caixa, Banco do Brasil e Nubank, login.php logando no cliente 12.31, Layout parecido com do Tibia.com
     
     Download Direto
     Projeto no GitHub
    Tópico: https://tibiaking.com/forums/topic/99589-otg-gesior-premium-tfs-1x/
     

     
    Gesior Baiak PVP

    Páginas Boosted Creatures, Anti Entrosa, Exibição e Seção de Pagamentos com Pagseguro, PicPay, PayGol, Paypal e Mercado Pago.
     Gesior 2012 Baiak
     
    Amostras:
     
     

     

    NTO World Site + Template
    Versão xampp: V1.8.2-2     Versão php: 5
     Download
     
    Amostras:

     

    Dragon Ball War
    Modern AAC TFS [0x / OTX]
    Layout Dragon Ball Brasil Online. Anti SQL Injection 100% seguro, pagseguro, paypal, deposito e Picpay.
     Download
     

     

    NTO Rox Site
    Modern AAC, Possui painel administrativo, adicionar noticias, itens para players e muito mais!
     Download
     

     

    Otset Layout
    Layout Exclusivo Fantasia RPG.
     Download
     

     

    Yin Landing Page
    Esse é um Landing page, geralmente usado para escolher entre dois ou mais servidores.
    No-PvP, Optional PvP, Hardcore PvP, PvP Oldschool ou entre versões.
     Download
     

     

    PZW Landing Page
    A landing page dá informações em vídeo do youtube. Todos os códigos estão comentados para que você consiga personalizar. Framework utilizado foi o "Bulma". A página não está responsiva. (HTML5/CSS3)
     Download

     
    PREMIAÇÕES TK MAGAZINE
    Membros que receberam o medalhão como forma de agradecimento por terem contribuído com um conteúdo exclusivo:
    @Movie, @Marco Oliveira, @Dev PHP, @WooX (medalha nv. 4 add), @Johncore, Leu (Buscando Perfil), Marcomoa (Buscando Perfil), @RicK Sanchez, @.HuRRiKaNe, @Cain Suicide, @So volto tarde e @Pedro..
     
    • [Informações] Tk Magazine
    • Lista de Medalhas TKM.
     
    Créditos pelas imagens: 
    Retiradas dos tópicos linkados.
  6. Gostei
    Marco Oliveira recebeu reputação de Xablaw em (Resolvido)Bloqueando movimentação de itens.   
    Em events/player.lua adicione o seguinte código nas funções Player:onTradeRequest(target, item) e Player:onMoveItem:
    if item:getActionId() == 8000 then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end  
    Todos os itens que possuírem actionId igual a 8000 não serão movidos ou poderão receber trade dos jogadores.
     
    PS: Verifique se a função onTradeRequest está ativada em events.xml
     
  7. Gostei
    Marco Oliveira recebeu reputação de Augusto em Criar botão no GesiorACC   
    em layout/layout.php procure por <div id="Menu"> e adicione o código a baixo:
     
    <div class="SmallMenuBox" style="top: 4px;" > <div id="LoginTop" style="background-image:url(<?php echo $layout_name; ?>/images/global/general/box-top.gif)" ></div> <div id="BorderLeft" class="LoginBorder" style="background-image:url(<?php echo $layout_name; ?>/images/global/general/chain.gif); height: 39px;" ></div> <div id="LoginButtonContainer" style="background-image:url(<?php echo $layout_name; ?>/images/global/loginbox/loginbox-textfield-background.gif)" > <div id="PlayNowContainer" ><form class="MediumButtonForm" action="?subtopic=downloadclient&step=downloadagreement" method="post" ><div class="MediumButtonBackground" style="background-image:url(<?php echo $layout_name; ?>/images/global/buttons/mediumbutton.gif)" onMouseOver="MouseOverMediumButton(this);" onMouseOut="MouseOutMediumButton(this);" ><div class="MediumButtonOver" style="background-image:url(<?php echo $layout_name; ?>/images/global/buttons/mediumbutton-over.gif)" onMouseOver="MouseOverMediumButton(this);" onMouseOut="MouseOutMediumButton(this);" ></div><input class="MediumButtonText" type="image" name="Download" alt="Download" src="<?php echo $layout_name; ?>/images/global/buttons/mediumbutton_download.png" /></div></form></div> </div> <div id="BorderRight" class="LoginBorder" style="background-image:url(<?php echo $layout_name; ?>/images/global/general/chain.gif); height: 39px;" ></div> <div id="LoginBottom" class="Loginstatus" style="background-image:url(<?php echo $layout_name; ?>/images/global/general/box-bottom.gif); top: 39px;" ></div> </div>  
    Caso necessite adicionar a css basta pesquisar aqui https://github.com/omarcopires/gesior/blob/master/layouts/tibiacom/css/style.css por SmallMenuBox e adicionar ao seu arquivo
  8. Gostei
    Marco Oliveira recebeu reputação de Augusto em (Resolvido)Bloqueando movimentação de itens.   
    Em events/player.lua adicione o seguinte código nas funções Player:onTradeRequest(target, item) e Player:onMoveItem:
    if item:getActionId() == 8000 then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end  
    Todos os itens que possuírem actionId igual a 8000 não serão movidos ou poderão receber trade dos jogadores.
     
    PS: Verifique se a função onTradeRequest está ativada em events.xml
     
  9. Gostei
    Marco Oliveira recebeu reputação de Rogex Joyz em Gesior AAC - 2020   
    Olá, estou deixando minha contribuição para o open-tibia, fornecendo a versão mais recente do meu site.
    Compatível com a versão mais recente do TFS e OTX.
    O layout é semelhante ao tibia.com, mas não contém todos os recursos.
    Conto com a contribuição de todos neste projeto.

    Algumas funcionalidades:
    Highscores NEW PagSeguro Lightbox New Tickets NEW Suporte https  
    Créditos:
    Gesior.pl
    Felipe Monteiro
    Marco Oliveira
    Ricardo Souza
     
    Link para download ou contribuição: GITHUB
  10. Gostei
    Marco Oliveira deu reputação a Bruxo Ots em Bounac 12.40   
    É com muito prazer que trago para vocês a área de Bounac.
    Todos os créditos  ao jo3bingham por desenvolver a melhor ferramenta.
     
    Imagem da area.
     
     
    ClientId
    Server ID
    Items otb do server id.
    items.otb
  11. Curtir
    Marco Oliveira recebeu reputação de luanluciano93 em Auto git pull e backup   
    O script nada mais faz que dar um git pull do seu repositório automaticamente quando o servidor recebe reload ou crasha.
     
    Na pasta raiz de seu repositório crie um arquivo chamado startserver.sh e uma pasta chamada logs dentro da pasta raiz de seu site.
     
    pastaOt="caminho do servidor" comandoBackup="caminho do servidor/backup/backup.sh" echo "Iniciando o programa" cd $pastaOt mkdir -p /logs mkdir -p build while true do cd $pastaOt ./tfs 2>&1 | awk '{ print strftime("%F %T - "), $0; fflush(); }' | tee "/var/www/html/logs/$(date +"%F %H-%M-%S.log")" exitcode=${PIPESTATUS[0]} if [ $exitcode -eq 0 ]; then echo "Clean close" git pull cd build cmake .. make if [$? -ne 0]; then echo "Compilation failed!" else echo "Compilation successful!" mv tfs .. fi cd .. else echo "Server Crash!!! (O arquivo de log está guardado na pasta logs)" fi echo "Server Down, backup database..." $comandoBackup sleep 2 done;  
    Ainda na pasta raiz do seu servidor crie uma pasta chamada backup e dentro dela crie um arquivo chamado backup.sh
     
    CAMINHO="caminho do servidor/backup/" NOMEBACKUP="nome do arquivo de backup" USER="usuario do phpmyadmin" SENHA="senha do phpmyadmin" BANCO="nome da database" TEMPO="$(date +'%d-%m-%Y-%H-%M')" if [[ -z "$USER" || -z "$SENHA" || -z "$BANCO" ]]; then echo "Por favor preencha o usuário, senha e banco de dados nas configurações." else mysqldump -u$USER -p$SENHA $BANCO > $CAMINHO"/"$NOMEBACKUP"-"$TEMPO".sql" fi Não se esqueça da permissão 777 em todos os arquivos, e também de ligar o servidor com o comando ./startserver.sh
     
    OBS: você deve configurar a chave ssh no seu git para que não peça o e-mail e senha a cada reload, o git clone também deve ser feito atraves de ssh e não https
  12. Obrigado
    Marco Oliveira recebeu reputação de Calisto em Attribute Key | Explicações.   
    <attribute key="weight" value="2100"/>  Este atribute é o da o peso do item, ou seja, a magic longsword pesa 43 oz. (Nota 100 = 1 oz) Este atribute é obrigatorio em todos os itens.   <attribute key="defense" value="30"/> Este atribute dá a defesa/def á arma que também é usad em shields.   <attribute key="attack" value="36"/> Atributo que seleciona o ataque da arma.   <attribute key="weaponType" value="sword"/> Este é o atribute que faz a arma ser um axe,sword ou club. No caso a magic longsword é uma sword xD. Se quiser mudar basta mudar o value="sword" para value="axe" ou value="club".   <attribute key="slotType" value="two-handed"/> Este atributo é para que o item seja usado por duas mãos , mais caso queira deixar de 1 mão basta apenas retirar esse atribute1.   <attribute key="elementFire" value="10"/>
    Ela ficará com (atk:45 + 10 fire damage def:40)
    [55-10=45]   <attribute key="extradef" value="1" /> Este atribute da defesa extra ao item, como por exemplo a magic longsword é (atk:55 def:40 +1) e como vocês também já viram em alguma database ou no tibia mesmo itens com esse +1, 2, 3, etc...   <attribute key="slotType" value="ammo"/>
    Com este atribute a arrow deve ficar no lugarzinho da flecha para ser usada.

    <attribute key="hitChance" value="90"/>
    A chance de sucesso do player de acertar o alvo, ou seja, o player com uma arrow tem 90% de chance de acertar um Dwarf por exemplo.

    <attribute key="ammoType" value="arrow"/>
    Neste atribute ou você coloca arrow que será utilizado apenas por Bows/Arcos ou bolt que será apenas usado por Crossbow/Besta.

    <attribute key="shootType" value="arrow"/>
    Animação no qual a flecha aparecerá indo em direcção ao alvo.   <attribute key="weaponType" value="distance"/>
    Come este atribute a bow fica sendo uma arma de distância

    <attribute key="ammoType" value="arrow"/>
    Usando este atribute a bow precisará de algum tipo de arrow para atirar.

    <attribute key="range" value="6"/>
    Com este atribute você determina a distancia da qual ele pode atirar, ou seja, a bow pode atirar a 6 quadrados de distância.   <attribute key="breakChance" value="10"/> Essa atribute dá a spear uma chance (10%) de quebrar a cada hit.

    <attribute key="ammoAction" value="moveback"/>
    Esse atribute faz com que a spear em vez de ficar no chão volte para sua mão sem ter que usar o atribute de charges.
     
      <attribute key="charges" value="50"/>
    Esse atribute dá a quantidade de cargas/charges ao amuleto.

    <attribute key="showcharges" value="1"/>
    Essa atribute serve para quando o player der look no amuleto mostrar a quantidade de charges ele tem.   <attribute key="showattributes" value="1"/> Esse atribute serve para mostrar tudo que ele absorve.

    <attribute key="absorbPercentAll" value="5"/>
    Esse attribute serve para o amuleto absorver todos os tipos de danos em 5%.
    Caso queira que absorva um elemento em especifico aqui vai uma lista:
      <attribute key="duration" value="300"/>
    Essa atribute dá o tempo que o item durará equipado, ou seja, o power ring dura 30 minutos (Nota 10 = 1 min)

    <attribute key="decayTo" value="0"/>
    Essa atribute faz com quer, quando o tempo do power ring acabar ele "some"

    <attribute key="transformDeEquipTo" value="2166"/>
    Essa atribute diz em qual item ele tranformará quando desequipar o power ring.
    Recomendo não mexer ai.   <attribute key="skillFist" value="5"/> Essa atribute aumenta seu Fist Fighting em 5 pontos.

    <attribute key="showduration" value="1"/>
    Esse atribute serve para quando o player der look no ring mostrar quando tempo ele ainda tem.
    Recomendo de novo que não mexa ai.

    <attribute key="manashield" value="1"/>
    Esse atribute faz com que o player fique em estado de "utamo vita".
    Não precisa mexer no "1".

    <attribute key="healthGain" value="1"/> -- HP ganho
    <attribute key="healthTicks" value="3000"/> -- Tempo nescessario (1000 = 1 segundo)
    Esses atributes tem que ser usados em conjunto.
    Eles fazem com que você recupera 1 de HP a cada 3 segundos.

    <attribute key="manaGain" value="4"/> -- MP ganho
    <attribute key="manaTicks" value="3000"/> -- Tempo nescessario (1000 = 1 segundo)
    Esses atributes tem que ser usados em conjunto.
    Eles fazem com que você recupera 4 de MP a cada 3 segundos.

    <attribute key="speed" value="20"/>
    Esse atribute aumenta a velocidade em "20" niveis, se quiser aumentar ou diminuir você ja sabe como xD

    <attribute key="skillSword" value="4"/>
    Essa atribute aumenta seu skill de sword em +4

    <attribute key="skillAxe" value="4"/>
    Essa atribute aumenta seu skill de axe em +4

    <attribute key="skillClub" value="4"/>
    Essa atribute aumenta seu skill de club em +4

    <attribute key="skillShield" value="4"/>
    Essa atribute aumenta seu skill de shield em +4

    <attribute key="suppressDrunk" value="1"/>
    Essa atribute deixa você imune a ficar bebum/bêbado/tonto/drunk/ etc... o.o'

    <attribute key="invisible" value="1"/>
    Essa atribute deixa você invisivél como se estivesse usando "utana vid"
     
    <attribute key="containerSize" value="20"/> -- é só aumentalo ou diminuilos
    É esse atribute que dá slots pras backpacks e bags.
    No caso a Crown backpack tem 20 slots.
  13. Curtir
    Marco Oliveira recebeu reputação de Gogetasaya em Servidor 10.90 | Windows 32/64 Bits | Versão Final   
    Depois de muitos pedidos e muita procura acabei compilando o TFS da versão 10.90, está estável. 
    As sources são originais, não houve modificações nelas, apenas os sistemas foram adicionados...
     
    Clique Aqui para fazer o download da versão 32 bits.
    Clique Aqui para fazer o download da versão 64 bits.
    Clique Aqui para fazer o download das sources.
     
    Clique Aqui para o scan de 32 bits.
    Clique Aqui para o scan de 64 bits.
    Clique Aqui para o scan das sources.
     
    Para usar o Reward Chest adicione a seguinte flag no monstro.
    <flag rewardchest="1" /  
    Você também pode definir o drop para ser único, dessa forma só a pessoa que fez o maior dano irá obter este item. exemplo:
    <item id="5903" chance="100000" uniquedrop="1" /><!-- ferumbras' hat --> Na versão final foram corrigidos os bugs das mensagens do Server Log como as de potion e loot. Seguem as screen shots..
     

     

     
     
    Ps: Eu ainda não tinha disponibilizado o download para outros fóruns.. até pq era exclusivo de um outro fórum do mesmo conteúdo....
    Se algum ADM tiver alguma duvida sobre os tópicos não autorizados por favor me mandar msg inbox.
  14. Obrigado
    Marco Oliveira recebeu reputação de luciano01 em [PEDIDO] Regem de stamina Training online   
    Substitua sua função por:
    function Creature:onTargetCombat(target) if not self then return true end if not __picif[target.uid] then if target:isMonster() then target:registerEvent("RewardSystemSlogan") __picif[target.uid] = {} end end if target:isPlayer() then if self:isMonster() then local protectionStorage = target:getStorageValue(Storage.combatProtectionStorage) if target:getIp() == 0 then -- If player is disconnected, monster shall ignore to attack the player if target:isPzLocked() then end if protectionStorage <= 0 then addEvent(removeCombatProtection, 30 * 1000, target.uid) target:setStorageValue(Storage.combatProtectionStorage, 1) elseif protectionStorage == 1 then self:searchTarget() return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end return true end if protectionStorage >= os.time() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if ((target:isMonster() and self:isPlayer() and target:getType():isPet() and target:getMaster() == self) or (self:isMonster() and target:isPlayer() and self:getType():isPet() and self:getMaster() == target)) then return RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE end if PARTY_PROTECTION ~= 0 then if self:isPlayer() and target:isPlayer() then local party = self:getParty() if party then local targetParty = target:getParty() if targetParty and targetParty == party then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end end if ADVANCED_SECURE_MODE ~= 0 then if self:isPlayer() and target:isPlayer() then if self:hasSecureMode() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if self:isPlayer() then if target and target:getName() == staminaBonus.target then local name = self:getName() if not staminaBonus.events[name] then staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end return true end  
  15. Obrigado
    Marco Oliveira recebeu reputação de diogo86 em Gesior AAC - 2020   
    Olá, estou deixando minha contribuição para o open-tibia, fornecendo a versão mais recente do meu site.
    Compatível com a versão mais recente do TFS e OTX.
    O layout é semelhante ao tibia.com, mas não contém todos os recursos.
    Conto com a contribuição de todos neste projeto.

    Algumas funcionalidades:
    Highscores NEW PagSeguro Lightbox New Tickets NEW Suporte https  
    Créditos:
    Gesior.pl
    Felipe Monteiro
    Marco Oliveira
    Ricardo Souza
     
    Link para download ou contribuição: GITHUB
  16. Curtir
    Marco Oliveira recebeu reputação de KiraConquest em Gesior AAC - 2020   
    Olá, estou deixando minha contribuição para o open-tibia, fornecendo a versão mais recente do meu site.
    Compatível com a versão mais recente do TFS e OTX.
    O layout é semelhante ao tibia.com, mas não contém todos os recursos.
    Conto com a contribuição de todos neste projeto.

    Algumas funcionalidades:
    Highscores NEW PagSeguro Lightbox New Tickets NEW Suporte https  
    Créditos:
    Gesior.pl
    Felipe Monteiro
    Marco Oliveira
    Ricardo Souza
     
    Link para download ou contribuição: GITHUB
  17. Gostei
    Marco Oliveira recebeu reputação de Agaka em Gesior AAC - 2020   
    Olá, estou deixando minha contribuição para o open-tibia, fornecendo a versão mais recente do meu site.
    Compatível com a versão mais recente do TFS e OTX.
    O layout é semelhante ao tibia.com, mas não contém todos os recursos.
    Conto com a contribuição de todos neste projeto.

    Algumas funcionalidades:
    Highscores NEW PagSeguro Lightbox New Tickets NEW Suporte https  
    Créditos:
    Gesior.pl
    Felipe Monteiro
    Marco Oliveira
    Ricardo Souza
     
    Link para download ou contribuição: GITHUB
  18. Gostei
    Marco Oliveira recebeu reputação de pala3 em Gesior AAC - 2020   
    Olá, estou deixando minha contribuição para o open-tibia, fornecendo a versão mais recente do meu site.
    Compatível com a versão mais recente do TFS e OTX.
    O layout é semelhante ao tibia.com, mas não contém todos os recursos.
    Conto com a contribuição de todos neste projeto.

    Algumas funcionalidades:
    Highscores NEW PagSeguro Lightbox New Tickets NEW Suporte https  
    Créditos:
    Gesior.pl
    Felipe Monteiro
    Marco Oliveira
    Ricardo Souza
     
    Link para download ou contribuição: GITHUB
  19. Curtir
    Marco Oliveira recebeu reputação de Nandozeraah em Gesior AAC - 2020   
    Olá, estou deixando minha contribuição para o open-tibia, fornecendo a versão mais recente do meu site.
    Compatível com a versão mais recente do TFS e OTX.
    O layout é semelhante ao tibia.com, mas não contém todos os recursos.
    Conto com a contribuição de todos neste projeto.

    Algumas funcionalidades:
    Highscores NEW PagSeguro Lightbox New Tickets NEW Suporte https  
    Créditos:
    Gesior.pl
    Felipe Monteiro
    Marco Oliveira
    Ricardo Souza
     
    Link para download ou contribuição: GITHUB
  20. Curtir
    Marco Oliveira recebeu reputação de Weeeh16 em [AJUDA] Quest de vocação...   
    Sim, bem mais fácil! 
  21. Curtir
    Marco Oliveira recebeu reputação de Weeeh16 em [AJUDA] Quest de vocação...   
    function onUse(player, item, fromPosition, target, toPosition, isHotkey) if getPlayerVocation(cid) == X then --X = ID da vocation. player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The chest is empty.") return true end player:addItem(X, 1) --Id do item, quantidade do item. player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You found a Item.") --Item name. player:setStorageValue(X, 1) --Valor da Storage da quest. return true end  
  22. Curtir
    Marco Oliveira deu reputação a Leu em [TFS 1.1+] Limpar Characters Inativos / Accounts vazias   
    Usando o script do Cjaker como base (e a descrição do tópico dele, na cara dura mesmo!), otimizei as operações no banco de dados (tava muito zuado) e adicionei um range de accounts protegidas pra evitar apagar os gms/samples/contas de spoofers do otservlist/etc... ;
    Salve galera, mais um script para quem está precisando dar aquela limpada no banco de dados e otimizar o Servidor.
     
    -- Especificações --
    TFS 1.1+ Objetivo é limpar as contas inativas/vazias e os players Inativos assim removendo os usuários que estão inativos e ocupando espaço no banco de dados.
      -- Instruções --
     
    Em globalevents.xml insira essa linha <globalevent type="startup" name="CleanDatabases" script="cleandatabase.lua" />  
    Crie um script chamado cleandatabase.lua na pasta globalevents/scripts e cole isso dentro dele. --- --- Generated by EmmyLua(https://github.com/EmmyLua) --- Created by leu. --- DateTime: 04/04/18 18:42 --- --[[ Clean Database by Cjaker | Refactor and SQL Optimizations by Leu ]]-- local inactiveMonths = 1 --> Quantos meses o player ficou inativo local createdMonths = 1 --> Quantos meses a conta foi criada e não possui character criado. local protectedAccIdEnd = 20 --ignorar accounts com id <= 20 local function clearInactivePlayers() local inactiveTimestamp = os.time() - (86400 * (inactiveMonths*30)) local totalClear=0 local fromClause = "`players` WHERE `account_id` > ".. protectedAccIdEnd .." AND lastlogin <= "..inactiveTimestamp local resultId = db.storeQuery("SELECT COUNT(*) as num_inativos FROM "..fromClause) if resultId ~= false then totalClear = result.getDataInt(resultId, 'num_inativos') result.free(resultId) if totalClear > 0 then db.query("DELETE FROM "..fromClause) end end return totalClear end local function clearEmptyAccounts() local totalClear = 0 local createdTimestamp = os.time() - (86400 * (createdMonths*30)) local fromClause = "`accounts` ACCS WHERE `id` > ".. protectedAccIdEnd .." AND `creation` <= "..createdTimestamp.." AND (SELECT COUNT(*) from `players` WHERE `account_id` = ACCS.`id`) > 0" local resultId = db.storeQuery("SELECT COUNT(*) as num_inativas FROM "..fromClause) if resultId~= false then totalClear = result.getDataInt(resultId,'num_inativas') result.free(resultId) if totalClear > 0 then db.query("DELETE ACCS FROM "..fromClause) end end return totalClear end function onStartup() print('>> ' ..clearInactivePlayers().. " players inativos deletados.") print('>> ' ..clearEmptyAccounts().. " contas vazias deletadas.") end  
     
    é isso senhores, paganois, flw!
     
    EDIT 24-04-2018: correção DELETE accs QUERY
     
  23. Curtir
    Marco Oliveira deu reputação a Frenesy em NPC Trade/Storage   
    Falaa pessoal do TK!
    Trouxe um script que fiz aqui para o meu servidor e gostaria de compartilhar com vocês:
     
    A idéia é bem simples: É apenas um NPC que só vende items para você se você tiver tal storage.
     
    Testado em: 8.60
    local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local choose = {} local cancel = {} local available = {} --== Configurar storage e Items a venda aqui. local stor = 1500 -- configurar storage aqui local Trade = {             {id=15646, buy=200, sell=0, name='buggy backpack'},             {id=10522, buy=200, sell=0, name='crown backpack'},             {id=10518, buy=200, sell=0, name='demon backpack'},             {id=11243, buy=200, sell=0, name='dragon backpack'}, } --== Fim das Configurações. local function setNewTradeTable(table) local items = {}       for _, v in ipairs(table) do       items[v.id] = {itemId = v.id, buyPrice = v.buy, sellPrice = v.sell, subType = 0, realName = v.name}       end return items end local function setNewLineTable(oldTable, newTable)       for k, v in pairs(oldTable) do       table.insert(newTable, k, v)       end return true end function creatureSayCallback(cid, type, msg)          if(not npcHandler:isFocused(cid)) then          return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid     if(msgcontains(msg, 'Trade') or msgcontains(msg, 'trade')) and getPlayerStorageValue(cid, stor) == 1 then     selfSay('Essas são minhas ofertas!', cid)     tradeRank = Trade     local items = setNewTradeTable(tradeRank)     local function onBuy(cid, item, subType, amount, ignoreCap, inBackpacks)     if items[item].buyPrice then     doPlayerAddItem(cid, items[item].itemId, amount)     doPlayerRemoveMoney(cid, items[item].buyPrice * amount)     return true     end return true end    local function onSell(cid, item, subType, amount, ignoreCap, inBackpacks)    if items[item].sellPrice then    doPlayerAddMoney(cid, items[item].sellPrice * amount)    doPlayerRemoveItem(cid, items[item].itemId, amount)    return true    end     return true end openShopWindow(cid, tradeRank, onBuy, onSell)    else    selfSay('Desculpe, mas você não tem o que é necessário para negociar comigo.', cid)    end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  Esse é meu primeiro script para a galera do TK.
    Espero que gostem!
     
    Abraços! 
  24. Curtir
    Marco Oliveira deu reputação a DdJs em Training Center | 11.40   
    Training Center | 60+ rooms.
     
    Download: Here
     
    Scan: Here

    Imagens:
     

     

     

     

     

     

  25. Curtir
    Marco Oliveira deu reputação a Ryzor em [LUA] Conhecendo o os.date   
    Este tutorial abaixo foi inteiramente criado por shoeei.

    Introdução
    Vou tentar ajudar vocês com um tutorial de os.date. Sendo sincero, eu aprendi a pouco tempo como usar o os.date, em um exemplar de programação lua. Estou fazendo este tutorial para esclarecer a maioria das duvidas que vocês possam ter, então, por favor, prestem muita atenção se forem ler, e não leiam a menos, que estejam com tempo, paciência e vontade de aprender, pois eu creio que mesmo sendo novato com o os.date, eu vou conseguir fazer um bom tutorial.

    Publico Alvo
    Este tutorial foi feito para ensinar programadores lua, do nível iniciante/intermediário, ou seja, aqueles que já tem algum conhecimento quanto a os.time, variáveis, loopings, e etc...

    Tutorial
    Em OtServers, os.date é pouco explorado, já que sua funcionalidade, é, por muitos, desconhecida. Então vou explicar como você poderia usa-lo em um script para o seu ot. Vamos ver, digamos que você queira que um script funcione a partir das oito da manhã, e pare de funcionar a partir das duas da tarde; para isso, você poderia usar o os.date. O os.date, assim como o os.time, serve para controlar valores de tempo, e retornam os mesmos de acordo com os valores da cpu, a partir de quando o script entra em funcionamento, então, o exemplo acima ficaria assim:
    function onSay(cid, words, param) if os.date("%X") >= "08:00:00" and os.date("%X") <= "14:00:00" then doPlayerSendTextMessage(cid, 22, "Teste") end end No exemplo acima, a talkaction só ira funcionar se for depois das oito da manhã, e antes das duas da tarde, então, dentro deste intervalo de tempo, o script funcionará normalmente, e irá mandar a mensagem "Teste" para o jogador. Já se o script for executado fora deste intervalo, no caso, nada acontecerá.
    Deve-se notar, também, que no script acima, dentro dos parênteses esta isto:
    "%X" Certo, eu acho que eu poderia chamar isto de Pattern; existem vários destes parâmetros que podem ser utilizados, neste caso, eu usei o "%X", pois ele retorna valores do horário na seguinte forma:
    Onde, azul são as horas, vermelho são os minutos, e verde são os segundos; neste caso, você deveria usar os números como um relógio digital de 24 horas.

    Acho que a lógica do os.date já deu para entender, mas vamos recapitular:

    O os.date é usado para retornar algum valor de tempo;
    Você pode usa-lo como uma condição para executar um outro comando;
    Dentro dos parênteses do os.date, você deve usar parâmetros.

    Uma coisa muito importante do os.date, é que você deve igualar ele, com valores entre aspas, mesmo que sejam números, por exemplo:
    if os.date("%X") >= "08:00:00" and os.date("%X") <= "20:00:00"Perceba que os números estão entre aspas. Certo, depois de termos recapitulado a lógica do os.date, vamos aos mais importantes parâmetros que podem ser usados e os valores que são retornados por eles; segue a lista:
     
    Pattern - Explicação:
    %a - dia da semana abreviado (Wed) %A - dia da semana completo (Sunday) %b - nome do mês abreviado (Sep) %B - nome do mês completo (April) %c - data e hora (09/16/98 23:48:10) %d - dia do mês [01-31] %H - hora de um relógio de 24 horas [00-23] %I - hora de um relógio de 12 horas [01-12] %M - minutos [00-59] %m - mês [01-12] %S - segundos [00-60] %w - dia da semana por números [0-6 = Domigo-Sabado] %x - data (09/16/98) %X - hora (23:48:10) %Y - ano (1998) Vocês podem perceber que todas as palavras que forem usadas, tanto abreviações, como palavras inteiras, devem ser em ingles, é claro.
     
    Certo, dito os mais usados parâmetros e a lógica do os.date, acho que isso pode encerrar o nosso tutorial, mas antes, uma ultima dica; se você tem duvida de que valor o parâmetro vai retornar, faça o seguinte:
    function onSay(cid, words, param) local par = os.date("Parâmetro") doPlayerSendTextMessage(cid, 22, "O valor é "..par.."!") end E por ultimo, mas não menos importante, para se criar uma tabela usando o os.date, deve-se usá-lo da seguinte maneira:
    os.date("*t", Valor_da_Tabela) Finalização
    Isso deve funcionar e encerrar o nosso tutorial; é claro que o os.date pode ter mais alguma utilidade que eu desconheça, mas eu acho que isso pode ser uma boa introdução dele. Espero que tenham gostado, ate mais.

Informação Importante

Confirmação de Termo