Ir para conteúdo

Underewar

Diretor de Projetos
  • Registro em

  • Última visita

Tudo que Underewar postou

  1. int32_t healthPercent = round((double)(healthChange) - target->getMaxHealth()); sprintf(buffer, "+%2fk%", healthPercent); trocar por: int32_t healthPercent = round((double)(damage) - target->getMaxHealth()); sprintf(buffer, "-%2f%k", healthPercent);
  2. trocar por: int32_t healthPercent = round((double)(healthChange * 1) / target->getMaxHealth()); sprintf(buffer, "+%2fk%", healthPercent); trocar por: int32_t healthPercent = round((double)(damage * 1) / target->getMaxHealth()); sprintf(buffer, "-%2f%k", healthPercent);
  3. Ataques DoS (Denial of Service) e DDoS (Distributed DoS) De acordo com a definição do CERT (Computer Emergency Response Team), os ataques DoS (Denial of Service), também denominados Ataques de Negação de Serviços, consistem em tentativas de impedir usuários legítimos de utilizarem um determinado serviço de um computador. Para isso, são usadas técnicas que podem: sobrecarregar uma rede a tal ponto em que os verdadeiros usuários dela não consigam usá-la; derrubar uma conexão entre dois ou mais computadores; fazer tantas requisições a um site até que este não consiga mais ser acessado; negar acesso a um sistema ou a determinados usuários. Os ataques do tipo DoS mais comuns podem ser feitos devido a algumas características do protocolo TCP/IP (Transmission Control Protocol / Internet Protocol), sendo possível ocorrer em qualquer computador que o utilize. Uma das formas de ataque mais conhecidas é a SYN Flooding, onde um computador tenta estabelecer uma conexão com um servidor através de um sinal do TCP conhecido por SYN (Synchronize). Se o servidor atender o pedido de conexão, enviará ao computador solicitante um sinal chamado ACK (Acknowledgement). O problema é que em ataques desse tipo, o servidor não consegue responder a todas as solicitações e então passa a recusar novos pedidos. Outra forma de ataque comum é o UPD Packet Storm, onde um computador faz solicitações constantes para que uma máquina remota envie pacotes de respostas ao solicitante. A máquina fica tão sobrecarregada que não consegue executar suas funções. Ataques DDoS O DDoS, sigla para Distributed Denial of Service, é um ataque DoS ampliado, ou seja, que utiliza até milhares de computadores para atacar uma determinada máquina. Esse é um dos tipos mais eficazes de ataques e já prejudicou sites conhecidos, tais como os da CNN, Amazon, Yahoo, Microsoft e eBay. Para que os ataques do tipo DDoS sejam bem-sucedidos, é necessário que se tenha um número grande de computadores para fazerem parte do ataque. Uma das melhores formas encontradas para se ter tantas máquinas, foi inserir programas de ataque DDoS em vírus ou em softwares maliciosos. Em um primeiro momento, os hackers que criavam ataques DDoS tentavam "escravizar" computadores que agiam como servidores na internet. Com o aumento na velocidade de acesso à internet, passou-se a existir interesse nos computadores dos usuários comuns com acesso banda larga, já que estes representam um número muito grande de máquinas na internet. Para atingir a massa, isto é, a enorme quantidade de computadores conectados à internet, vírus foram e são criados com a intenção de disseminar pequenos programas para ataques DoS. Assim, quando um vírus com tal poder contamina um computador, este fica disponível para fazer parte de um ataque DoS e o usuário dificilmente fica sabendo que sua máquina está sendo utilizado para tais fins. Como a quantidade de computadores que participam do ataque é grande, é praticamente impossível saber exatamente qual é a máquina principal do ataque. Quando o computador de um internauta comum é infectado com um vírus com funções para ataques DoS, este computador passa a ser chamado de zumbi. Após a contaminação, os zumbis entram em contato com máquinas chamadas de mestres, que por sua vez recebem orientações (quando, em qual site/computador, tipo de ataque, entre outros) de um computador chamado atacante. Após receberem as ordens, os computadores mestres as repassam aos computadores zumbis, que efetivamente executam o ataque. Um computador mestre pode ter sob sua responsabilidade até milhares de computadores. Repare que nestes casos, as tarefas de ataque DoS são distribuídas a um "exército" de máquinas escravizadas. Daí é que surgiu o nome Distributed Denial of Service. Impedindo e detectando ataques DoS Apesar de não existir nenhum meio que consiga impedir totalmente um ataque DoS, é possível detectar a presença de ataques ou de computadores (zumbis) de uma rede que estão participando de um DDoS. Para isso, basta observar se está havendo mais tráfego do que o normal (principalmente em casos de sites, seja ele um menos conhecido, como o InfoWester, seja ele um muito utilizado, como o Google), se há pacotes TCP e UDP que não fazem parte da rede ou se há pacotes com tamanho acima do normal. Outra dica importante é utilizar softwares de IDS (Intrusion Detection System - Sistema de Identificação de Intrusos). Para prevenção, uma das melhores armas é verificar as atualizações de segurança dos sistemas operacionais e softwares utilizados pelos computadores. Muitos vírus aproveitam de vulnerabilidades para efetuar contaminações. Também é importante filtrar certos tipos de pacotes na rede e desativar serviços que não são usados. Fonte: http://www.infoweste...m/col091004.php Primeiramente use um servidor LINUX Dicas para se dificultar a ação de Ddos A equipe de segurança da LinuxSvr.Net tem algumas dicas aos clientes sel-managed. Utilize o Módulo Dos_Evasive (Apache) É importante saber que bloquear um ataque Ddos usando software é possível em apenas 20% dos casos, e que é necessário perícia e conhecimento técnico avançado para isso. Para saber mais: Atualizado 2023. Utilize o Módulo Dos_Evasive (Apache)
  4. Assim que for aprovado esta aqui o sistema.
  5. @ApacheBom dia! tenta este por favor, caso não funcione abre um tópico com seu pedido que te ajudo por la! local item_id,amount = 7721,1 function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if (isPlayer(cid) == TRUE) then if (getPlayerItemCount(cid,item_id,amount) then if (getCreatureSkullType(cid) == SKULL_RED or SKULL_BLACK) then doCreatureSetDropLoot(cid, FALSE) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) end if not(getPlayerBlessing(cid, bless[i])) then for i = 1, table.maxn(bless) do doPlayerAddBlessing(cid, bless[i]) end end end end return TRUE end
  6. @luanluciano93 quanto tempo hein! Bom ver que ainda tem boas pessoas na comunidade, obrigado pelo comentário! Você ta no rank dos melhores programadores aqui do fórum tmj(Minha opinião) aqui quem vos fala é Underewar
  7. O sistema funciona pelo Target do Monstro, e Regenera Stamina Points. Em events/scripts/creature.lua Vamos Adicionar a função a Baixo. No mesmo script vamos procurar por Creature:onTargetCombat(target) E colocar logo a baixo o seguinte script Onde está == "Trainer" Coloque o nome do trainer do seu servidor.
  8. Coloque esse login.php na pasta raiz do seu website. https://github.com/opentibiabr/myaac-tibia12-login/releases/tag/2.0
  9. Ele verifica se o jogador esta black ou red e caso estiver seta o drop loot para false, para dropar o item mude para true doCreatureSetDropLoot(cid, FALSE) Vou deixar aqui uma lista organizada das lua functions até a versão 0.3.6 da TFS pode te ajudar a implementar o sistema. Espero que te ajude.
  10. procure pelo player.lua do seu servidor procure por : function Player:onLoseExperience(exp) return exp end E troque essa função por essa. function Player:onLoseExperience(exp) local Amulets = { [ITEMID] = {ExpLossProtection = 0.3, LoseAfter = true} [ITEMID] = {ExpLossProtection = 0, LoseAfter = false}, [ITEMID] = {ExpLossProtection = 1, LoseAfter = true } } local amulet = self:getSlotItem(CONST_SLOT_NECKLACE) if Amulets[amulet.itemid] then exp = exp * Amulets[amulet.itemid].ExpLossProtection if Amulets[amulet.itemid].LoseAfter then charges-1 end end return exp end Não sei se o código a cima funciona na tfs 0.4 no entanto é possivel fazer na tfs 0.4 CreatureScript XML: <event type="preparedeath" name="blessAmulet" script="script.lua"/> local bless = {1, 2, 3, 4, 5} local amulet = amulet id function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if (isPlayer(cid) == TRUE) then if (getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == amulet) then if (getCreatureSkullType(cid) == SKULL_RED or SKULL_BLACK) then doCreatureSetDropLoot(cid, FALSE) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYAREA) end if not(getPlayerBlessing(cid, bless[i])) then for i = 1, table.maxn(bless) do doPlayerAddBlessing(cid, bless[i]) end end end end return TRUE end
  11. Erro meu tente este trocar por: int32_t healthPercent = round((double)(healthChange) / target->getMaxHealth()); sprintf(buffer, "+%.2f", healthPercent); trocar por: int32_t healthPercent = round((double)(damage) / target->getMaxHealth()); sprintf(buffer, "-%.2f", healthPercent);
  12. Tá vamos la, o código esta totalmente correto e muito organizado parabéns, no entanto você esta inicializando uma speed nova para a montaria. Incluindo o player.h (acredito que você criou novos cpp e headers para criar este código) Acessamos a velocidade atual do jogador retornando ela e podemos usar como quiser para alterar, acredito que o calculo deva ser o base speed + o speed da mount e não iniciar ela em zero... int32_t ExtSpeed = 0; Acredito que você deveria setar o PLAYER_MAX_SPEED para realmente alterar velocidade máxima que o jogador deve ser da seguinte maneira, definido o player flag para a flag hasMaxSpeed in group or player constructor. if (!hasFlag(PlayerFlag_SetMaxSpeed)) { baseSpeed = vocation->getBaseSpeed();
  13. @stauroEstá resolvido? se sim poderia compartilhar? como resolveu, obg!
  14. Qual source você ?
  15. Cria um creaturescript verificando o login dos jogadores por storage, ou uma tabela de storages chamada reset, e verifica o nivel do reset que o jogador esta por storage, você pode atribuir ao jogador usando o seguinte código. Adicionando no combat.cpp Nas funções CombatHealthFunc and CombatManaFunc Procure por: int32_t change = 0; if(Combat2Var* var = (Combat2Var*)data) { change = var->change; E no final do escopo ou seja quando a chave fechar } Cole isso: if(caster && caster->getPlayer()) { std::string value; caster->getStorage("ResetStorageValue", value); int32_t plus = (int32_t)(atoi(value.c_str())); int32_t resetpower = plus *2.5 ; if(plus > 0 && params.combatType != COMBAT_HEALING ) change = (int32_t)std::ceil (change + change * resetpower /100); } Em caster -> getStorage é a storage que o jogador ganha no reset. resetpower = plus * 2.5 é a formula. change = (change + change * resetpower / 100) é o calculo .
  16. Eu não testei no entanto oque eu fiz foi o seguinte. Isso imprimirá o valor de "total" (é o que % é, em seguida, o total faz) com 2 pontos flutuantes seja exibido (é o que .2f faz). trocar por: int32_t healthPercent = round((double)(healthChange) / target->getMaxHealth()); sprintf(buffer, "+%.2f", healthPercent); trocar por: int32_t healthPercent = round((double)(damage) / target->getMaxHealth()); sprintf(buffer, "-%.2f", healthPercent);
  17. @isac001Se você quer adicionar a `storage` ao matar o monstro, pode procurar nos seus `creature-events(creatureScripts)`. este scripts como você disse é apenas do NPC. Este scripts acima esta apenas verificando se o jogador iniciou a `storage` e sumonando o monstro caso seja verdadeiro, pude ver que o código também contem um pequeno contador para o npc voltar ao estado normal. addEvent(function() doCreateNpc(name, pos) end ,time*60*1000)
  18. Este repositório foi movido para um novo linkhttps://github.com/organizations/openistibia
  19. A Organização O Projeto Olá venho aqui fornecer a todos um repositório que estou começando fazer code views de todos os códigos lua que julgar interessante para um sistema de RPG Este é o local onde podem ser vistos os PR e os CodeReviews. Fiquem livres para utilizar os códigos da melhor maneira possivel. Quer interagir? bom então eu te convido a fazer parte da organização deixando seu nick no github aqui em baixo ou me mandando uma pm! todos serão bem vindos! PRS Me ajude a desenvolver criando um Issue e fazendo seu pedido, tente preencher todas as lacunas ao fazer o pedido para não gastarmos tempo com issues inúteis Usando este repositório podemos desenvolver projetos sólidos e muitos scripts uteis para a comunidade, assim como esses que vocês viram a cima muitos outros serão adicionados para a tfs 1.4, espero todos la no github VLW clan tmj! Todo o projeto estára atualizado com a ultima branch da tfs de acordo com o docker. Podemos verificar dependências e reportas caso a tfs faça alguma alteração em suas libs poderemos saber neste repositório através do workflow
  20. @AlissowUma ótima fase da nossa vida, muito aprendizado. Gratidão! só pra levar em consideração foi uma tfs 8.5 do mapa alissow o primeiro servidor que eu compilei! Lembro até hoje eu abrir na lan house as 07 da manha fechava as 18 o servidor, e mantia ele com "donate" que os caras colocavam na maquina para eu poder rodar o server/jogar! hahahah!
  21. GitHub Underewar Fala pessoal, anos se passaram e estamos aqui até hoje, bom eu nunca imaginei chegar tão longe assim e hoje eu sinto falta de desenvolver servidores de tibia kkkkk. Galera o lance é o seguinte eu sempre programei para 'tibia' e agora eu realizei uma meta que é quase um sonho. Bom fica o salve pra comunidade que durante muito tempo me ajudou estou aqui com total gratidão a todas as pessoas que me ajudaram quando eu não sabia nada. Um abraço pro @Alissow@Vodkart@daniel@arthurluna@anafee Enfim queria poder marcar todos aqui galera um abraço! vocês fazem parte da minha história !
  22. Vídeos liberados guys, aproveitem o conteúdo. Todo dia um vídeo novo é liberado gratuitamente.
  23. Oi sou designer faço tudo no CS6. Te mandei pm.

Informação Importante

Confirmação de Termo