Os Melhores
Conteúdo popular
Mostrando conteúdo com a maior reputação em 07/09/2026 in todas as áreas
-
Bom, estava dando uma geral no projeto aqui... Então decidde arruma-lo da forma mais original possivel. Ai estou usando isso que achei na net para me orientar. Lembrando que esse arquivo é da TMSRV do 6.13, então se alguém tiver uma mais atual é quiser compartilhar Explicação TMSRV.map Donwload TMSRV.map Creditos: Rodrigo Mendonça4 pontos
-
SOURCE — EROS DESTINY 2 anos de desenvolvimento. 6 meses de beta. Projeto pronto para abrir o seu servidor de WYD. Instalação e suporte inclusos. Não é source “completa de tudo que o jogo já tem”. É a source mais atual da comunidade, com sistemas EXCLUSIVOS. Painel de skins com validade Bloqueio de conta DropList + Filtro ingame Ranking ingame Auto refinador Arena Real 4 times Battle Pass Market Global Loja Donate PIX no personagem Mail Item Lojas de player no MySQL Painel de Guild Honra Novo Compositor Jephi Item Level (Arch) Evento Pesca HitBoss Drop Global agendado Guarda Real / baús de evento Auto-drop + auto-agrupar Teleporte no mapa Extra slots de inventário Poção Divina por conta VIP configurável Recaptcha de território Party com senha + painel de grupo Alias / títulos Recompensa de novato Tintura de arma unificada Adds de capa celestial Preços decimais + tooltip novo Esferas / itens com validade visível Configs no MySQL AntiHack próprio Logs reais Guerra de torres gravada pelo Kamu : Interessados: chama no wpp : 229910203324 pontos
-
📌 [LANÇAMENTO] FoxMap Studio V1 — Open Source O editor de mapas mais completo para WYD Fala galera da WebCheats! Se você administra ou está desenvolvendo um servidor de With Your Destiny, sabe o quão trabalhoso e limitado costuma ser o processo de criação e edição de mapas usando ferramentas antigas. Pensando nisso, foi desenvolvido o FoxMap Studio V1, uma ferramenta revolucionária que vai mudar completamente a forma como você customiza o seu servidor! Assista ao vídeo demonstrativo completo e veja a ferramenta em ação: 👉 [Hidden Content] 🔥 O que faz o FoxMap Studio ser diferente? O FoxMap Studio foi criado do zero para ser intuitivo, rápido e extremamente poderoso. Chega de sofrer com ferramentas travadas que exigem reinicializações constantes ou processos manuais complexos. [Hidden Content] [Hidden Content] [/hide] 🌟 Principais Recursos: Edição Visual Completa: Interface limpa, moderna e totalmente interativa para você focar no que realmente importa: a criatividade do seu mapa. Modificações em Tempo Real: Veja cada alteração de terreno, texturas e objetos acontecer instantaneamente na sua tela. Editor Avançado de Terrenos e Alturas: Suba montanhas, crie vales e ajuste o relevo do mapa com pincéis dinâmicos e precisos. Pintura Dinâmica de Texturas: Aplique e misture diferentes texturas de solo diretamente no mapa de forma suave e rápida. Importação e Posicionamento de Objetos 3D: Adicione construções, decorações, portais e elementos de cenário de maneira extremamente simples (com suporte a arquivos .glb/.gltf e conversão inteligente para o formato do cliente). Gestão de Atributos do Mapa: Configure zonas de PvP, áreas seguras (No-PvP), zonas de drop ou teleportes diretamente pela interface do estúdio. Integração Direta com o Cliente: Teste e salve suas alterações diretamente nos arquivos do jogo de forma prática. 📺 Veja o Passo a Passo no Vídeo! No vídeo oficial, mostramos desde a interface de login da plataforma WYD Fox Studio até a criação prática de um cenário completo: Como abrir e carregar os mapas existentes do seu cliente. Utilização das ferramentas de pintura de terreno e elevação de mesh. Importação e rotação livre de objetos e decorações 3D no cenário. Aplicação de efeitos climáticos e iluminação personalizada no mapa. Conversão e salvamento automático dos arquivos para rodar perfeitamente no jogo. Assista aqui: Como Criar Mapas Customizados para WYD — FoxMap Studio 🚀 Como ter acesso? [Hidden Content] A ferramenta conta com uma versão de testes gratuita para você conhecer o potencial do editor. Desenvolvedor: Foxdemo / WYD Fox Studio Para suporte, atualizações constantes e mais ferramentas da nossa suíte de desenvolvimento (Editores de Itens, NPCs, Monstros e Quests em breve!), entre no nosso Discord oficial (link disponível na descrição do vídeo do YouTube). Deixe seu comentário abaixo dizendo o que achou da ferramenta ou qual recurso você gostaria de ver nas próximas atualizações!3 pontos
-
Fala, pessoal! 👋 Depois de muito tempo, tô lançando o N.K HACK — um trainer completo e estável pro GrandChase, com launcher próprio, login e atualização automática. Tô aliberando e procurando gente pra testar. Bora? 🚀 ⚡ Funções 🛡️ HP Full — vida infinita (godmode) 💥 Damage Hack — dano gigante (999999999999) ⚔️ Auto Kill — mata todos os monstros da fase 🎯 One-Hit — mata qualquer mob em 1 golpe 🔵 MP Full / Fúria — mana e fúria sempre cheias ⏱️ CoolDown Hack — skills sem tempo de recarga 🏆 Comb Rank SS — combo sempre no máximo 🏃 Speed Hack — acelera o jogo (0.25× a 8×) Exclusão de logs ao fechar o menu ____________________________________________________________________________________________________________________________________________________________________________________________ 🚀 Como usar 1. Baixe e instale o launcher N.K HACK 2. Crie sua conta (email + senha) e faça login 3. Na aba Injetar, detecte a pasta do jogo (Epic/Steam) e clique Injetar 4. Abra o GrandChase e ative as funções no launcher. Pronto! 🎮 ____________________________________________________________________________________________________________________________________________________________________________________________________________ scan _________________________________________________________________________________________________________________________________________________________________________________________________________________3 pontos
-
BBoT GRÁTIS PARA SKY TALE Auto-Ataque, Auto-Poção e Auto-Buff para facilitar o seu UP! Teste grátis por 4 dias • SEM CARTÃO! • Configuração pelo navegador Fala, pessoal! Quero apresentar a vocês o BBoT Grátis, uma versão de demonstração do nosso BOT para Sky Tale / Priston Tale. A proposta é simples: permitir que qualquer jogador conheça as principais funções do BBoT antes de decidir pela versão completa. O teste dura 4 dias corridos, não exige cartão e começa após a confirmação do cadastro. RECURSOS INCLUÍDOS ✅ Auto-Ataque Ataca automaticamente os monstros ao redor e continua o farm sem você precisar selecionar cada alvo manualmente. ✅ Auto-Poção Utiliza poções de HP, MP e STM automaticamente, conforme a necessidade do personagem. ✅ Auto-Buff Identifica quando os buffs terminam e os utiliza novamente de forma automática. ✅ Monitoramento de GM Recurso adicional para auxiliar no acompanhamento do ambiente durante o uso. ✅ Recursos de proteção e anti-detecção O programa possui mecanismos destinados a dificultar análises e detecções. Isso reduz riscos, mas nenhum BOT pode garantir proteção absoluta. ✅ Controle pelo navegador As funções podem ser ligadas, desligadas e configuradas por meio do painel web. O aplicativo permanece discretamente na bandeja do Windows. COMO COMEÇAR 1. Acesse: [Hidden Content] 2. Crie sua conta usando e-mail e WhatsApp. 3. Confirme o cadastro com o código recebido pelo WhatsApp. 4. Faça o download do BBoT. 5. Abra o aplicativo como administrador e entre com o usuário e a senha cadastrados. Pronto! Depois disso, é só configurar os recursos pelo painel web e começar o teste. TESTE GRÁTIS POR 4 DIAS CLIQUE AQUI PARA CRIAR SUA CONTA E BAIXAR VEJA O BBOT FUNCIONANDO 🎥 Assistir demonstração 1 🎥 Assistir demonstração 2 O QUE NÃO ESTÁ INCLUÍDO NO GRÁTIS? Para manter total transparência, os seguintes recursos estão disponíveis somente nos planos pagos: ❌ Coletor automático de itens do chão ❌ Módulo exclusivo para Bless Castle ❌ Serviço de unban de computador ❌ Ferramentas e recursos adicionais O teste gratuito é limitado a uma utilização por pessoa e por computador. Aviso importante: o uso de ferramentas de automação pode contrariar as regras do servidor e resultar em punições. Utilize por sua conta e risco. O BBoT não possui vínculo oficial com os responsáveis pelo Priston Tale ou pelo servidor Sky Tale. Ficou com alguma dúvida ou encontrou algum problema? Entre em contato pelo site! Vamos te atender! Experimente o BBoT e veja como ele pode facilitar o seu UP! Feito por um player, para os players!3 pontos
-
/* Estilos CSS adaptados para a cor exata do fórum (#272626) */ .gh-topic-container { font-family: 'Segoe UI', 'Roboto', Helvetica, Arial, sans-serif; background-color: #272626; color: #eeeeee; padding: 30px; border-radius: 10px; margin: 20px auto; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); border: 1px solid #363535; } /* ---- Estilos do Banner ---- */ .gh-banner-wrapper { width: 100%; margin-bottom: 25px; border-radius: 12px; overflow: hidden; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3); border-bottom: 3px solid #8b5cf6; } .gh-banner-img { width: 100%; height: auto; display: block; } /* ---- Badge de Atualizado (Gatilho de Novidade) ---- */ .gh-update-badge { background: #1e1b4b; border: 1px solid #8b8dff; color: #a4a6ff; display: inline-block; padding: 6px 16px; border-radius: 50px; font-size: 0.85rem; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 15px; } /* ---- Grade Lado a Lado (Contas Free) ---- */ .gh-streaming-grid { display: flex; justify-content: space-between; gap: 15px; margin: 25px 0 35px 0; } .gh-streaming-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: space-between; background: rgb(32 32 32); padding: 20px 10px; border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.05); position: relative; } .gh-status-indicator { font-size: 0.75rem; color: #22c55e; font-weight: bold; margin-bottom: 8px; text-transform: uppercase; } /* ---- Tipografia ---- */ .gh-main-title { font-size: 2.3rem; font-weight: 900; text-transform: uppercase; margin-bottom: 5px; text-align: center; letter-spacing: -1px; color: #ffffff; } .gh-grid-title { font-size: 1.3rem; font-weight: 900; text-transform: uppercase; margin-bottom: 15px; text-align: center; color: #ffffff; } .gh-highlight-purple { color: #a855f7; text-shadow: 0 0 10px rgba(168, 85, 247, 0.4); } /* ---- Caixas de Comparação (Gatilho de Valor) ---- */ .gh-feature-box { background: #1e2920; border: 1px solid rgba(34, 197, 94, 0.2); border-left: 5px solid #22c55e; padding: 25px; border-radius: 8px; margin-bottom: 20px; } .gh-feature-title { font-size: 1.4rem; color: #4ade80; font-weight: bold; margin-bottom: 12px; display: flex; align-items: center; } .gh-feature-title::before { content: '👑 '; } .gh-virustotal-box { background: #2d1919; border: 1px solid rgba(239, 68, 68, 0.2); border-left: 5px solid #ef4444; padding: 25px; margin: 20px 0; border-radius: 8px; } .gh-virustotal-title { font-size: 1.4rem; color: #f87171; font-weight: bold; margin-bottom: 12px; display: flex; align-items: center; } .gh-virustotal-title::before { content: '⚠️ '; } .gh-text-content { font-size: 1.05rem; line-height: 1.6; color: #cccccc; } /* ---- Botões ---- */ .gh-button-container { text-align: center; width: 100%; } /* Botão das Contas de Teste/Free */ .gh-cta-button { background: rgba(255, 255, 255, 0.08); color: #bbbbbb !important; padding: 12px 15px; text-decoration: none; font-size: 0.85rem; font-weight: 700; border-radius: 6px; transition: all 0.2s ease; display: inline-block; text-transform: uppercase; border: 1px solid rgba(255, 255, 255, 0.1); width: 95%; box-sizing: border-box; } .gh-cta-button:hover { background: #8b5cf6; color: white !important; border-color: #8b5cf6; box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3); } /* Botão Principal de Vendas (Gatilho de Ação Irrecusável) */ .gh-cta-button-large { background: linear-gradient(to right, #8b5cf6, #6366f1); color: white !important; padding: 18px 55px; text-decoration: none; font-size: 1.25rem; font-weight: 800; border-radius: 8px; transition: all 0.2s ease; display: inline-block; text-transform: uppercase; border: none; cursor: pointer; box-shadow: 0 6px 25px rgba(139, 92, 246, 0.5); animation: gh-pulse 2s infinite; } .gh-cta-button-large:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(139, 92, 246, 0.7); filter: brightness(1.1); } /* Animação sutil para atrair os olhos para a compra */ @keyframes gh-pulse { 0% { box-shadow: 0 0 0 0 rgba(139, 92, 246, 0.5); } 70% { box-shadow: 0 0 0 15px rgba(139, 92, 246, 0); } 100% { box-shadow: 0 0 0 0 rgba(139, 92, 246, 0); } } /* Responsividade */ @media (max-width: 600px) { .gh-streaming-grid { flex-direction: column; gap: 15px; } .gh-cta-button-large { width: 100%; padding: 16px 20px; font-size: 1.1rem; } } Contas ATUALIZADAS 10/08/2026 Escolha uma das opções abaixo para testar o serviço gratuitamente: [Hidden Content] Cansado de quedas e telas cheias? O método gratuito é excelente para testar, mas as contas são públicas e mudam constantemente. Se você busca estabilidade total, suporte ativo e um perfil exclusivo só seu, veja a diferença abaixo: Vantagens Acesso Privada Acesso completo e ininterrupto por 30 dias com perfil e tela 100% privada. Ninguém mexe no seu histórico, ninguém altera sua senha. Entrega automática e instantânea via PIX com garantia de suporte completo via chat. Desvantagens Acesso Gratuito/Compartilhado Contas utilizadas por dezenas de pessoas simultaneamente. Limites de telas excedidos frequentemente, histórico completamente bagunçado e senhas alteradas a qualquer momento, tornando o acesso totalmente instável e temporário. Mais de 80% dos membros do fórum começaram testando as contas gratuitas e migraram para o plano privado. Garanta sua estabilidade hoje mesmo! Quero Minha Conta Privada Agora3 pontos
-
🔥 INSIGHT CHEATS - POINT BLANK BRASIL 🔥 (Atualizado em 06/08/2026) 💎 Estamos há 3 anos sem nenhum banimento por detecção do loader! 💎 🚀 FUNCIONALIDADES INCRÍVEIS 🔍 ESP's: Visualize inimigos através das paredes! Inclui Boxes, Esqueleto, Linhas, Nomes, Distância e muito mais. 🎯 Aimbot: • Silent: Muda a trajetória do tiro diretamente para o inimigo. • CrossHair: Puxa a mira até o inimigo automaticamente. 🧠 Aim FOV: Define a área de atuação do Aimbot. 👀 Visible Check: A mira trava apenas em inimigos visíveis. 🛡️ Anti Vote Kick: Previne que você seja expulso da partida por votação. 🖥️ FullScreen Mode: Ativa o modo tela cheia do jogo automaticamente. ⚡ FPS Ilimitado: Remove limites de FPS, garantindo o máximo desempenho! 🎯 Anti Helmet Protection: Inimigos não recebem proteção de capacete, mesmo com boina ou máscara. 📺 Stream Mode: Oculta menus e ESPs em transmissões no OBS Studio. 🔫 TriggerBot: Disparo automático ao detectar inimigo na mira. ⚡ Fast Quick Weapon: Reduz em 50% o tempo de troca de arma (simula item "Troca Rápida"). 🔄 Fast Reload Reduction: Reduz em 50% o tempo de recarga (simula item "Recarregamento Rápido"). E muito mais opções! SITE PARA COMPRAS - INSIGHT CHEATS COMPRE CLICANDO AQUI!3 pontos
-
[Atualizaçao] 26/07/2026 Estou usando a Source do TMProject-Free Aqui tem bastante informaçao sobre o fork. [Hidden Content] Tem as sources e releases. Atualizo com frequência. Os itens abaixo foram descontinuados. Sugiro escanear com antivírus atualizado. Links para download: [Hidden Content] Link do Source do Cliente: [Hidden Content] Instalação WYD Linux mais simples e direta através do script bash install_wyd_linux.sh O script monta o ambiente sem forçar compilação, instala dependências e deixa o servidor pronto para configurar. Ele cria o mysql.txt para o servidor se conectar ao banco, com usuário, senha e nome do schema, e também atualiza o server.txt do cliente para apontar para o IP do servidor. No cliente, o server.txt define o endereço do servidor que o jogo vai usar. Na parte do servidor, o mysql.txt garante que DBSrv e TMSrv consigam acessar o MySQL com as credenciais certas. Decidi user um .txt no cliente para facilitar os testes. Bugs: Com certeza tem bastante, mas menos do que na versão original. As skills 9 e 10 estão implementadas (sinceramente nao testei todas ainda). Minha ideia é criar um gerenciamento via web, visto que a versão console (esta) não tem as mesmas informaçoes que a versão Windows. Toda a parte gráfica foi removida e roda direto pelo terminal. Tem um binário tmlinux (cliente). Pode ignorar. É só uma tentativa ousada de o cliente. O Cliver é 6000. Ao compilar no Windows ele cria o diretório que indica ser versão 7.69 Foi criado um arquivo ShimWin32 para tratar da compatibilidade e traduçao das chamadas WIn32 pra POSIX. A vantagem é que não preciso reescrever a lógica toda. O código continua igual, eu só traduzo a camada de API. Compile uma vez com o shim e pronto, roda em Linux mantendo tudo que funciona no Windows. Em resumo: setup feito sem precisar compilar agora; banco MySQL configurado automaticamente; mysql.txt criado para o WYD acessar o DB; server.txt do cliente ajustado para o IP certo. Assim, a configuração fica prática e você não precisa editar tudo na mão. Tem bugs comuns como inconsistência entre o ItemList.bin do cliente e o .csv do servidor. Estou corrigindo, mas não pretendo corrigir tudo porque tem muito item criado que acho desnecessário. O Cinto não equipa nessa source. Fiz a correçao na minha e libero quando tiver mais correçoes acumuladas. Tem script pra alterar o drop e xp por região. Acho que tá legal pra uma brincadeira mas não pra produção. Porém fiquem à vontade pra explorar e quem sabe compartilhar também. Tá bem suave, rodou de boa no meu celular Vivo X200 Pro no Gamehub e no Pocophone F1 rodando Fedora Mobility. Créditos: (Nomes encontrados no código) Se tiver mais alguém, basta avisar. Victor Klafke Charles TheHouse TRAE.AI GLM 5.1 Plus SexyCode BabyLove Outros3 pontos
-
Somos o primeiro servidor do Genero Idle, inpirado no no jogo RPG: With Your Destiny ! Site: [Hidden Content] WhatsApp: [Hidden Content] - Equipamentos Padrão - Mercado Global - Arena PVP - Sistema de GUILD - Sistema de Montaria - Guerras: Torre, Cidades e Noatun - Quests Mortal - Lans - Crafts Padrão (Em Breve) Projeto em Desenvolvimento2 pontos
-
Fala pessoal Joia ? Só vim aqui agradecer a todos da comunidade que colaboraram com desenvolvimento e divulgação, ajuda muito a comunidade ! Segura essa pancada, que estamos trazendo! Acredito que outros desenvolvedores tbm estão quase concluindo o projeto mobile de voces... Enfim veja o video e vamos trabalhar ! Vou deixar link do telegram ! Caso queiram ajudar dar suas opinião ! Se postei no lugar errado, me perdoem. [Hidden Content]2 pontos
-
⚔️ AETHERION ONLINE — UM NOVO MUNDO ESTÁ NASCENDO Aetherion Online é um novo MMORPG 3D desenvolvido do zero, inspirado na essência dos grandes clássicos do gênero, mas construído com uma visão moderna, multiplataforma e totalmente preparada para o futuro. Não estamos apenas atualizando um jogo antigo. Estamos reconstruindo tudo. 🌎 UM MUNDO ONLINE VIVO Explore um universo fantástico repleto de cidades, florestas, desertos, masmorras, campos de batalha, monstros, chefes e lugares ainda desconhecidos. Em Aetherion Online, cada região será construída para fazer parte de um mundo conectado, com exploração, aventura, progressão e desafios constantes. ⚔️ COMBATE E PROGRESSÃO Escolha seu caminho, desenvolva seu personagem e enfrente criaturas cada vez mais poderosas. O projeto contará com: • Classes e especializações • Sistema de níveis e progressão • Atributos e equipamentos • Armas e armaduras • Habilidades e efeitos • Monstros e bosses • Quests e missões • Dungeons • PvE e PvP • Eventos • Ranking • Sistema de grupos e party • Guildas • Guerras entre jogadores • Comércio e economia • Crafting e evolução de equipamentos 👤 PERSONAGENS MODULARES Os personagens serão desenvolvidos pensando desde o início em um sistema de equipamentos realmente modular. Armaduras, armas, acessórios e outros elementos poderão ser equipados e removidos de forma independente. Isso permitirá criar personagens únicos e construir diferentes combinações de equipamentos. Site [Hidden Content] se voces quiserem ajuda , serei gratos apos pronto soltarei varias versoes do game aqui na web cheats (La ele ) 🏹 DIFERENTES ESTILOS DE JOGO O jogador poderá escolher diferentes formas de jogar. Entre as possibilidades estão: 🏹 Arqueiro 🔮 Mago ⚔️ Guerreiro 👻 Invocador Cada classe terá suas próprias habilidades, características, equipamentos e estilo de combate. 🌐 MULTIPLATAFORMA Uma das principais propostas do Aetherion Online é permitir que o jogador escolha onde quer jogar. 💻 Desktop 📱 Mobile 📲 Tablet 🌐 Web O projeto está sendo desenvolvido com uma arquitetura multiplataforma para que o mesmo universo possa ser acessado em diferentes dispositivos. A ideia é simples: Seu personagem pertence a você, não ao dispositivo onde você está jogando. 🎮 UM MMORPG FEITO PARA A WEB O Aetherion Online também possui uma proposta diferente: jogar diretamente pela Web. Sem depender obrigatoriamente de uma instalação pesada para começar sua aventura. O objetivo é oferecer uma experiência acessível através do navegador, permitindo que jogadores de Desktop, Mobile e Tablet possam acessar o mesmo universo. 🧱 RECONSTRUÍDO DO ZERO O projeto atual não é simplesmente uma atualização de uma versão antiga. O Aetherion Online está sendo refeito do zero, com uma nova arquitetura, novos sistemas, nova organização e uma base preparada para crescer. Estamos reconstruindo cada parte do projeto pensando em: • Escalabilidade • Segurança • Performance • Multiplayer • Compatibilidade multiplataforma • Otimização • Sistema de assets • Streaming de mundo • Gerenciamento de jogadores • Persistência de dados • Comunicação cliente/servidor • Atualizações futuras 🏰 UM MUNDO QUE PODE CRESCER Aetherion Online está sendo pensado como uma plataforma MMORPG em constante evolução. Novos mapas. Novas cidades. Novas classes. Novos equipamentos. Novos monstros. Novas dungeons. Novos eventos. Novos sistemas. A arquitetura do projeto será preparada para permitir que o mundo continue crescendo ao longo do tempo. 🔥 NOSSA VISÃO Queremos criar um MMORPG que combine a nostalgia dos grandes jogos online com tecnologias e conceitos modernos. Um jogo onde: Você cria seu personagem. Você escolhe seu caminho. Você conquista seu equipamento. Você encontra outros jogadores. Você cria sua história. E o mundo continua evoluindo. 🌌 AETHERION ONLINE Um novo universo está sendo construído. Do zero. Com uma nova visão. Para uma nova geração de jogadores. ⚔️ O mundo de Aetherion está apenas começando. Aetherion Online — Sua história começa aqui. Logo logo estarei atualizando com imagens ta bom2 pontos
-
# GunPower Free Olá, pessoal. Estou apresentando o **GunPower Free**, uma versão criada para quem quer conhecer a interface, a estabilidade e a proposta do GunPower antes de decidir se precisa de recursos adicionais. Não é necessário receber convite nem depender de instalação complicada: você cria sua própria conta diretamente no Launcher e já pode começar a testar. ## O que é o GunPower? O GunPower é um aimbot desenvolvido para auxiliar na mira durante a partida, com foco em praticidade, rapidez e uma interface simples de usar. Ele foi pensado para facilitar o uso até mesmo para quem está começando, deixando as principais funções organizadas e acessíveis. A versão Free é a porta de entrada para testar o GunPower na prática e conhecer suas principais funcionalidades. ## O que a versão Free entrega - Detecção automática do mobile e do tipo de tiro. - Suporte aos mobiles disponíveis no sistema. - Trajetória visual limpa, com linha verde fluorescente de fácil leitura. - Modo de mira por marcação manual. - Funciona em modo janela e tela cheia. - Interface leve, com botão de iniciar, central de ajuda e informações da conta. - Sistema de conta individual, vinculado ao dispositivo para manter o uso organizado. - Aviso de prazo da licença diretamente no Launcher. O objetivo do Free não é esconder a experiência: é permitir que você conheça a base do GunPower e veja se a ferramenta faz sentido para o seu jeito de jogar. ## Como começar [Hidden Content] SHA-256 oficial do GunPower_Free.exe: C9B9B5934CBF9F56EF2F073BD92B19723A4D7E4634616E56FDE2545DA3A1E519 Aviso sobre detecções em antivírus O GunPower pode receber algumas detecções heurísticas em serviços como VirusTotal, especialmente por usar proteção de executável e componentes que interagem com processos em execução. Isso não significa automaticamente que o arquivo seja malicioso. Ainda assim, recomendamos cautela: Baixe apenas pelos links oficiais divulgados pela equipe. Confira o hash SHA-256 publicado para a versão. Não execute arquivos redistribuídos por terceiros. Caso seu antivírus alerte, envie uma captura e o nome da detecção ao suporte para análise. Não desative a proteção do Windows ou do antivírus. Estamos revisando cada detecção e buscando reduzir falsos positivos nas próximas versões. Suporte Discord: @gunpower.exe 1. Abra o **GunPower Launcher**. 2. Clique em **Register** e crie sua conta. 3. Faça login normalmente. 4. Abra o jogo. 5. No GunPower, clique em **START**. Pronto. A partir daí, o sistema fica disponível para você testar os recursos liberados na versão Free. ## Comandos básicos - **CTRL**: ativa a marcação manual do alvo. - **Cursor do mouse**: posiciona o marcador no local desejado. O uso foi mantido propositalmente simples: você não precisa decorar uma lista enorme de teclas para começar. ## Por que existe uma versão Free? Porque é melhor testar do que depender apenas de vídeo ou promessa. Com a versão Free, você consegue conhecer a aparência do overlay, o fluxo do Launcher, a detecção em partida e o funcionamento geral antes de avaliar qualquer upgrade. Os recursos avançados permanecem separados para quem quiser uma experiência mais completa depois, mas o Free já foi preparado para ser útil desde o primeiro acesso. ## E se eu quiser continuar depois? O próprio Launcher mostra o tempo restante da sua licença Free e possui uma área de **Planos VIP** com os valores e opções disponíveis no momento. Não existe obrigação de comprar nada para testar. A ideia é simples: use, conheça o sistema e decida com calma se os recursos adicionais fazem sentido para você. ## Ajuda e suporte O Launcher possui uma central de ajuda com vídeos curtos de apresentação, primeiro acesso, teclas de uso, modos de mira e outros assuntos importantes. Se ainda tiver alguma dúvida, sugestão ou precisar de suporte, fale no Discord: **@gunpower.exe** Obrigado a todos que testarem e deixarem feedback. Isso ajuda o projeto a evoluir com mais qualidade para a comunidade.2 pontos
-
2 pontos
-
WYD FULL PVP 7662 E ai pessoal, eu tava meio a toa aqui e lembrei dessa release/source e resolvi dar uma editadinha pra ficar full PVP. Ela ja estava bem editava com os NPCs com os itens e tudo mais, mas faltava uns outros itens. O Cliente usado é o WReborn Updates: Destravar cele 40 = 100% de sucesso Destravar cele 90 = 100% de sucesso Poeira de fada = 100% de sucesso Comandos: /armia = Teleporte pra cidade de Armia /erion = Teleporte pra cidade de Erion /azran = Teleporte pra cidade de Azran /gelo = Teleporte pra cidade do Gelo /kefra = Teleporte pra cidade de Kefra /red = Teleporte pro Rei Red (Vermelho) /blue = Teleporte pro Rei Blue (Azul) /arch = Teleporte pra destravar levels 355/370 do Arch /destravar40 = Destrava o level 40 do celestial /combate = Teleporte pra enfrentar Mobs poderosos Na area de combate coloquei o Kefra e outros mobs la editados pra testar a força do seu personagem criado (não está 100%, mas da pra brincar ) DOWNLOAD [Hidden Content] DBSrv.exe [Hidden Content] TMSrv.exe [Hidden Content] Wyd.exe [Hidden Content] Creditos: WRebron por conta do cliente, a source/release eu acho que tbm sao eles que editaram a parte principal. Quem souber que foi o primeiro dono dessa release/source é so falar que edito aqui. vlw!2 pontos
-
2 pontos
-
Só funcionará com servidores que não tem proteção para o Cheat Engine COMENTE O POST E CLIQUE NO BOTÃO DE LIKE PARA LIBERAR OS CHEATS Primeiramente faça o download do Cheat Engine: [Hidden Content] One Hit [Hidden Content] HP Hack [Hidden Content] MP Hack [Hidden Content] Speed Hack [Hidden Content] Stage Hack [Hidden Content] Créditos: ---Tinho---2 pontos
-
100% ATUALIZADO(2026) INTRODUÇÃO A Fox com muito orgulho apresenta seu produto para Grand Chase Classic (Steam/Nexus/Megaxus/Epic Games/etc) Acesse nosso site e tenha acesso à mais produtos exclusivos: Forums - Fox Cheats FUNÇÕES 🎯 Categoria: Mission Hack Auto Kill Delay — Mata todos os mobs da missão automaticamente. Skip Dialog — Pula todos os diálogos possíveis durante a missão. Kill All — Usado junto com o Auto Kill Delay para matar mobs que suportam o sistema. Stealth — Faz com que os mobs não ataquem você. Monster Vac — Agrupa todos os mobs hostis em um único local. Item Vac — Coleta automaticamente todos os itens dropados. Item Hide — Esconde todos os itens da missão para melhor visualização. Auto Boss — Avança automaticamente para a Boss Fight quando disponível. Unlimited Dimensional Time — Permite ficar mais de 15 minutos no portão dimensional. Level Hack [VOID] — Permite jogar o VOID sem precisar ser level 85. Item Spawn — Dropa todos os itens que seriam obtidos na missão. Speed Farm — Carrega uma missão alternativa para acelerar o farm. Damage Mob — Multiplicador de dano que você sofrerá dos mobs. Damage Hack — Aumenta o dano que você causa aos mobs. Auto Portal — Passa as etapas automaticamente sem interação manual. Speed Hack — Acelera a velocidade do jogo. Super Talim Spam — Spama o ataque especial do evento de Talin em qualquer missão. 🏆 Categoria: Mission Result Rank Select — Escolha a pontuação de rank da missão (F até SS). Hits Count — Quantidade de hits que você causou na missão. Combo Count — Número total de combos realizados. Attack Back Count — Número de ataques realizados pelas costas dos inimigos. Hits Takken — Quantidade de hits que você sofreu durante a missão. Damage Count — Total de dano que você causou na missão. 👤 Categoria: Player Stats HP Infinity — Vida infinita para o seu personagem. MP Full — Mana infinita para usar habilidades sem restrição. Hide Nick — Esconde seu nick no jogo [STREAM MODE]. Potion CD — Remove o cooldown para usar poções sem tempo de espera. CoolDown Hack — Remove o cooldown das skills, podendo usar sem limite. Fly Hack — Permite que seu personagem voe livremente. Pet MP — Mana infinita para o seu Pet. Furia Full — Fúria sempre cheia para usar golpes especiais. Item Hack [N] — Permite usar itens do inventário [N] sem possuí-los. Status SS — Aumenta seus atributos para atingir status SS+ e completar eventos/missões especiais. 🤖 Categoria: Bots/Farming Drop Prediction — Permite visualizar os itens que irão dropar dos mobs na missão. Block Dialog — Bloqueia janelas de diálogo para farmar AFK. Anti Kick AFK — Impede o jogo de te expulsar por ficar AFK. Auto Start — Inicia automaticamente as missões. Auto Next Dungeon — Avança automaticamente para a próxima missão. Auto Ready — Confirma "Pronto" automaticamente nas missões. Auto Play Dungeon — Joga automaticamente a missão selecionada. Auto Farm Item — Farma repetidamente o item adicionado na lista. Auto Failed — Faz a missão falhar automaticamente. Auto Farm Cards — Farma cartas automaticamente na missão. 🎮 Categoria: Auto Collect And Quit Collect And Quit — Entra na missão que você desejar, coleta os itens desejado e quita (FARM AUTOMATICO DE ITENS 100% AFK E RAPIDO 🎮 Categoria: AUTO VOID 100% AFK 23 CHAR AUTO VOID 100% AFK 23 CHAR — Entra na missão do void desejada, completa automaticamente com todos os personagens desejados e para (100% AFK) ENTREGA AUTOMÁTICA COMPRE AQUI OU NO SITE: [Hidden Content] SCREEN SHOTS PREÇOS 30 Dias -> R$39,90 ONDE COMPRAR ? Nosso Site -> Forums - Fox Cheats Nosso Discord : [Hidden Content] COMO USAR Abra o cheat Abra o jogo Seja feliz! DOWNLOAD/SCAN DOWNLOAD x64 : [Hidden Content] SCAN x64 : VirusTotal - File - 4851f472de5f1be722f62b62c1da749723ca086eddda36347db9996da39a08501 ponto
-
🔥 WYD CORE — ABERTURA OFICIAL 🔥 Chegou a hora de começar uma nova história no WYD! 📅 LANÇAMENTO: 04/09/2026 ⏰ 19:00 — Horário de Brasília Depois de muito desenvolvimento, testes, balanceamento e milhares de horas de trabalho, o WYD CORE finalmente abrirá oficialmente suas portas. ⚔️ UM WYD RECONSTRUÍDO POR DENTRO! 🔥 Mais de 100 Bosses configurados 🎁 Mais de 1.000 Drops por Campo 👹 Mais de 5.000 Mobs organizados 🗺️ Drop e EXP controlados por área 💎 Sistema Ancient com bônus REAL 👑 Bosses de Campo 📜 Quests remodeladas e drops garantidos ⚒️ Sistema de Replation reformulado 🐎 Evolução de montarias 🏪 Mercado Global 💰 Loja Donate e Loja de Honra integradas 📊 Ranking em tempo real 🎁 Recompensas e eventos 🛡️ Launcher próprio e sistemas Anti-Jogo 📋 Sistemas completos de logs e auditoria ⚙️ Estrutura preparada para ajustes de EXP, Drop e eventos em tempo real E isso representa apenas uma parte dos sistemas desenvolvidos para o servidor. 💰 FARM REAL. ⚖️ ECONOMIA REAL. ⚔️ PROGRESSÃO REAL. Nossa proposta é simples: Não queremos que você jogue por uma semana. Queremos que cada conquista continue tendo valor amanhã. Monte sua guild, reúna seus amigos e prepare-se. 🌐 SITE OFICIAL www.wydcore.com 💬 GRUPO OFICIAL DO WHATSAPP [Hidden Content] 📅 04/09/2026 ⏰ 19:00 — Horário de Brasília 🔥 WYD CORE 🔥 O mundo está esperando por você.1 ponto
-
Andar pela fé Josué 3.7-17 Quando chegarem junto às margens do Jordão, parem exatamente ali. v.8 Certa história ensina-nos a sabedoria de confiar em Deus e "entrar no rio". Um pastor confiou em Deus e decidiu falar sobre verdades bíblicas em um sermão, apesar da nova lei de seu país. Foi condenado por crime de ódio e passou 30 dias na cadeia. Mas houve recurso, e o tribunal decidiu que ele tinha o direito de interpretar a Bíblia e incentivar outras pessoas a segui-la. Os sacerdotes que carregavam a arca da aliança também tiveram que escolher: entrar na água ou permanecer à margem. Após escapar do Egito, os israelitas vagaram pelo deserto por 40 anos. Eles estavam às margens do rio Jordão, em perigosa alta no período de enchentes. No entanto, eles deram esse passo de fé, e Deus fez com que as águas recuassem: "Assim que os sacerdotes [...] puseram os pés na água junto às margens do rio, a correnteza [...] foi interrompida" (Josué 3.15-16). Quando confiamos nossa vida a Deus, Ele nos concede coragem para prosseguir, seja para falar verdades bíblicas ou pisar em território desconhecido. Durante o julgamento do pastor, o tribunal ouviu o evangelho por meio do seu sermão. E lemos no livro de Josué que os israelitas atravessaram em segurança para a terra prometida e compartilharem o poder de Deus com as gerações futuras (v.17; 4.24). Se andarmos pela fé, Deus se encarregará do restante. — Alyson Kieda Você enfrentou uma situação assustadora e receou dar o primeiro passo? Como Deus o ajudou? Querido Deus, preciso de Tua coragem. Por favor, ajuda-me a andar pela fé.1 ponto
-
*Lancamento OFICIAL em 11/Setembro/2026* Acesse o site oficial e venha testar com sua GUILD & Amigos —> 🔗 Site: [Hidden Content] 📲 Discord Oficial: [Hidden Content] 📲 WhatsApp Comercio: [Hidden Content]1 ponto
-
Demonstração 1. Abra o CS2 2. depois de aberto, execute o Loader da FRCHEATS e logue em sua conta do fórum 3. Selecione a area CHEAT CS2 4.com CS2 aberto Clique em Injetar e aguarde a mensagem "Injetado com Sucesso" Após isso basta entrar em uma partida e apertar INSERT Bom jogo :) DOWNLOAD SENDSPACE: [Hidden Content]1 ponto
-
Pessoal, Se você também está viciado em IA e fica pedalando na hora de gerar os prompts, esse site reune uma lista imensa de prompts, todos focado em ajudar pessoas sem grandes conhecimentos. [Hidden Content] O mais legal é que dá para você postar e compartilhar seus próprios prompts. Diferente dos demais sites que só divulgam um texto, aqui eles oferecem um formulário para preencher e completar os campos necessários, tornando o prompt mais robosto e profissional. Espero que gostem.1 ponto
-
1 ponto
-
1 ponto
-
Fala galera, Bom como não to mais afim de mexer com WYD e com certeza alguem vai fazer algo de bom isso estou liberando essa source totalmente desbugada . Segue algumas informações: CONTÉM: - ANT-HACK E BLOQUEIO CONTRA RANGE, SPEED ENTRE OUTROS CASO ALGUEM CONSIGA INJETAR. - SISTEMA DE AGRUPAR E DPI POR COMANDO PORÉM PODE SER USADA EM FADA OU COMO QUISER - SISTEMA DE BOSS CONFIGURÁVEL NA SOURCE - SISTEMA PARA BALANCEAMENTO DE CLASSES NA SOURCE CASO DESEJE ALTERAR - SISTEMA DA PISTA DESBUGADOS - SISTEMA BATALHA REAL [CONFIGURAR PELA SOURCE] - SISTEMA INVASÃO ALEATÓRIA - DROP CONFIGURÁVEL PELA SOURCE TAMBÉM - SISTEMA DO ALTAR DE NOATUM - SISTEMA DE AJUDANTE COM ITEM DE UPAR O AJUDANTE, CONTÉM BM/FM/TK, CONFIGURÁVEIS NA SOURCE - VÁRIOS COMANDOS: [/agrupar , /boss , /droppvp, /armia, ...] - CLIENT COM INTERFACE CUSTOMIZADA - SITE COMPLETO COM CADASTRO E BANCO DE DADOS PARA FAZER O PAINEL TUDO MODIFICÁVEL - COMANDO /ativar VERIFICA A QUANTIDADE E DÁ PREMIAÇÃO AUTOMATICAMENTE, TUDO CONFIGURADO NA SOURCE. - SISTEMA DE GERAÇÃO AUTOMÁTICA DE PINCODE DO SITE PARA O JOGO, TAMBÉM CONFIGURÁVEL. - DOUBLE E PESCA AUTOMÁTICOS FINAIS DE DE SEMANA, LOCAL DA PESCA CONFIGURADA NA SOURCE. - HAVIA COMEÇADO A FAZER UM DROP LIST AUTOMÁTICO MAS NÃO ACABEI OS ARQUIVOS ESTÃO JUNTO COM O SITE Versão: 7.56 EXP: Media Drop: Media Conexão: 24/7 Rates Compositores: 40% Tutorial iniciante: NPC's Dando armas +frango +shire 3D ao nasce no campo de treino. -> CLASSES BALANCEADAS;-> SERVER CONTA COM SISTEMA PARA ADQUIRIR DONATE NO PAINEL LOCALIZADO NO SITE;-> PESCA ATIVA SO FINAL DE SEMANA AUTOMATICO;-> DOUBLE ATIVO SO FINAL DE SEMANA; SISTEMA DE PREMIAÇÃO DIÁRIA: TODOS OS DIAS USE: /resgatar PARA GANHAR UM DOS ITENS ABAIXO: ->10PL ->10P.O -> 20X POÇÃO VIGOR ->POÇÃO 20HORAS -> 100KK Sistema de Comandos: /armia = Teleporta para cidade de Armia /edpoints = Verifica Quantidade de Cash /honra =Verifica honra/evento =Teleporta para área do evento [Quando ativo]/senha = Define uma senha para o grupo/entrar = Entra no grupo de alguém /boss = Area de boss /droppvp = Area Pvp para DROP /resgatar = Resgata diariamente premios./translider= Transfere o grupo para algum membro/autogrupo = Ativa o auto grupo para todos jogadores/macro = Ativa macro de perga N/M/A/dpi = Filtro para dropar apenas oque você quer./dpiadd = adicionas as ID's do itens que apenas esses vão ser dorpados;obs.: Cuidado ao usar esse comando [/dpi e /dpiadd ] a equipe não devolvera itens dropados apagados por esse comando./agrupar = Você liga o auto agrupador/agruparadd = Você adiciona itens ao auto agrupador /agruparadd 413 no caso da poeira de lac do id 41 Sistema de Honra: EVENTO LOJINHA DANDO 1 DE HONRA A CADA 20 MIN VIDEO TUTO LOJA DE HONRA SISTEMA AJUDANTE SISTEMA DE AJUDANTE: ->USADO A PARTIR DO LEVEL 106; ->PODE SER USADO EM QUALQUER CLASSE; ->PODE SER EVOLUÍDO DO 0 AO LEVEL 255; ->ITEM EXCLUSIVO DE UP DO AJUDANTE; ->NÃO PODE SER USADO CONTRA KEFRA; ->AJUDANTE ATACA QUEM ATACAR AFK SEU CHAR ; -> CASO MORRA É SO DESEQUIPAR E EQUIPAR QUE VOLTA; ->AJUDA COM DROP/UP; ->PODE SER INVOCADO MAIS DE UM AJUDANTE NO GRUPO; -> SISTEMA PARA ADQUIRIR O UP AJUDANTE ESTÁ EM DESENVOLVIMENTO; VIDEO TUTO AJUDANTE ALGUMAS IMAGENS: ITEM DE UP DO AJUDANTE: SISTEMAS DE BOSS [Hidden Content] ---------------------------------------------------------------------------------- ARKAV DEMON ---------------------------------------------------------------------------------- Nasce nos horarios : HORA : 01 / 05 / 09 / 13 / 17 / 21 MINUTO: 30 Drop: ABS C/ ADD 2 % CRITICO OU 50 DEF OU 40 HP OU 40 MP OU NADA DE DROP Para ir até o boss bastar digitar /boss , cuidado área PvP ---------------------------------------------------------------------------------- INVASÃO DE MONSTROS ---------------------------------------------------------------------------------- Nasce nos horarios : HORA : 06 / 12 / 18 / 20 MINUTO: 00 Drop: 100% 100KK NO CEIFEIRO E 100% DROP PL SEG. CEIFEIRO NASCE DE FORMA ALEATÓRIA EM ALGUMA CIDADE [ARMIA, ERION, AZRAN, GELO E NOATUM] ---------------------------------------------------------------------------------- VERID ---------------------------------------------------------------------------------- Nasce nos horarios : HORA : 01 / 05 / 09 / 13 / 17 / 21 MINUTO: 00 Drop: ARMAS 63 /54 OU 28/24 OU NÃO DROPA NADA NASCE NA VILA AMALD, BASTA USAR O PERGAMINHO DE CAÇA DO GELO ---------------------------------------------------------------------------------- UP AUXILIAR ---------------------------------------------------------------------------------- Nasce nos horarios : HORA : 20 /23 MINUTO: 00 Drop: PAC COM 20 ITENS DE UP DO AUXILIAR NASCE 5 MOBS NA NOVA AREA DE DROP PVP, BASTA USAR /droppvp ---------------------------------------------------------------------------------- SOMBRA NEGRA ---------------------------------------------------------------------------------- Nasce nos horarios : HORA : A CADA 3 HORAS MINUTO: 00 Drop: LIVROS SEPHIRA BASTA USAR O PERGAMINHO DE CAÇA DO GELO E IR PROXIMO AS VALKIRIA Guerras RvR 18 horas Torre 22 Horas Batle Royal 18 Horas No mais é isso.1 ponto
-
Pessoal como vi que tem gente vendendo este conteúdo eu vou disponibilizar tudo o que tenho de Myth. [Hidden Content]1 ponto
-
1 ponto
-
🌑 SISTEMA DE SOMBRAS PARA TMPROJECT – WYD Código desenvolvido e compartilhado por mim para melhorar o visual do WYD, adicionando sombras ao projeto e deixando o ambiente mais bonito e moderno. Também criei um arquivo .md com as instruções necessárias para implementar corretamente o sistema no TMProject. ✅ Código completo ✅ Guia de implementação em .md ✅ Compatível com TMProject ✅ Melhoria visual para o cliente WYD 💻 compartilhado por João Frango ShadowProjectorMesh.cpp #include "pch.h" #include "ShadowProjectorMesh.h" #include "TMHuman.h" #include "TMGlobal.h" #include "RenderDevice.h" // ============================================================ // MANUAL SHADOW TUNING (AJUSTE MANUAL DA SOMBRA PROJETADA) // // 1) ROTACAO DA SOMBRA (direcao): // g_ShadowLightDir.x / y / z // // 2) ALTURA/ENCOSTE NO CHAO: // g_ShadowPlaneBias // // 3) INTENSIDADE: // g_ShadowAlphaMax // // Dica: ajuste primeiro a direcao (x/z), depois bias, depois alpha. // ============================================================ static D3DXVECTOR3 g_ShadowLightDir = D3DXVECTOR3(1.20f, -0.70f, 0.60f); static float g_ShadowPlaneBias = 0.005f; static float g_ShadowDirOffset = 2.80f; static DWORD g_ShadowAlphaMax = 120; static bool g_ShadowLockAtFeet = false; // false = projeta para o lado D3DXVECTOR3 ShadowProjectorMesh::s_vLightDir = D3DXVECTOR3(1.20f, -0.70f, 0.60f); DWORD ShadowProjectorMesh::s_sAlphaBlend, ShadowProjectorMesh::s_sSrcBlend, ShadowProjectorMesh::s_sDestBlend; DWORD ShadowProjectorMesh::s_sAlphaRef, ShadowProjectorMesh::s_sAlphaFunc, ShadowProjectorMesh::s_sAlphaTest; DWORD ShadowProjectorMesh::s_sZWrite, ShadowProjectorMesh::s_sZEnable, ShadowProjectorMesh::s_sZFunc, ShadowProjectorMesh::s_sDepthBias, ShadowProjectorMesh::s_sSlopeBias, ShadowProjectorMesh::s_sLighting; DWORD ShadowProjectorMesh::s_sFogEnable, ShadowProjectorMesh::s_sFogVertex, ShadowProjectorMesh::s_sCull; DWORD ShadowProjectorMesh::s_sTexFactor, ShadowProjectorMesh::s_sColorVertex; DWORD ShadowProjectorMesh::s_sTs0ColorOp, ShadowProjectorMesh::s_sTs0ColorArg1, ShadowProjectorMesh::s_sTs0ColorArg2; DWORD ShadowProjectorMesh::s_sTs0AlphaOp, ShadowProjectorMesh::s_sTs0AlphaArg1, ShadowProjectorMesh::s_sTs0AlphaArg2; DWORD ShadowProjectorMesh::s_sTs1ColorOp, ShadowProjectorMesh::s_sTs1ColorArg1, ShadowProjectorMesh::s_sTs1ColorArg2; DWORD ShadowProjectorMesh::s_sTs1AlphaOp, ShadowProjectorMesh::s_sTs1AlphaArg1, ShadowProjectorMesh::s_sTs1AlphaArg2; DWORD ShadowProjectorMesh::s_sStencilEnable, ShadowProjectorMesh::s_sStencilFunc, ShadowProjectorMesh::s_sStencilRef, ShadowProjectorMesh::s_sStencilMask; DWORD ShadowProjectorMesh::s_sStencilWriteMask, ShadowProjectorMesh::s_sStencilPass, ShadowProjectorMesh::s_sStencilFail, ShadowProjectorMesh::s_sStencilZFail; void ShadowProjectorMesh::SetupShadowMatrix(TMHuman* pHuman, float groundY) { if (!pHuman) return; if (groundY < -9000.0f) groundY = 0.0f; if (g_ShadowLockAtFeet) { D3DXMatrixIdentity(&pHuman->m_matShadow); pHuman->m_matShadow._22 = 0.0f; pHuman->m_matShadow._42 = groundY + g_ShadowPlaneBias; return; } D3DXVECTOR3 L = g_ShadowLightDir; D3DXVec3Normalize(&L, &L); // D3DXMatrixShadow com luz direcional rasante — projeta o mesh real no plano do chao // Quanto mais rasante o Y da luz, mais longa/deitada fica a sombra D3DXPLANE plane(0.0f, 1.0f, 0.0f, -(groundY + g_ShadowPlaneBias)); D3DXVECTOR4 lightDir(-L.x, -L.y, -L.z, 0.0f); // w=0 = luz direcional D3DXMatrixShadow(&pHuman->m_matShadow, &lightDir, &plane); } bool ShadowProjectorMesh::BeginShadow(IDirect3DDevice9* dev, float alpha) { if (!dev || !g_pDevice) return false; auto FloatToDWORD = [](float v) -> DWORD { DWORD out = 0; memcpy(&out, &v, sizeof(DWORD)); return out; }; // Salva via dev direto — estado real do device, sem cache dev->GetRenderState(D3DRS_ALPHABLENDENABLE, &s_sAlphaBlend); dev->GetRenderState(D3DRS_SRCBLEND, &s_sSrcBlend); dev->GetRenderState(D3DRS_DESTBLEND, &s_sDestBlend); dev->GetRenderState(D3DRS_ALPHAREF, &s_sAlphaRef); dev->GetRenderState(D3DRS_ALPHAFUNC, &s_sAlphaFunc); dev->GetRenderState(D3DRS_ALPHATESTENABLE, &s_sAlphaTest); dev->GetRenderState(D3DRS_ZWRITEENABLE, &s_sZWrite); dev->GetRenderState(D3DRS_ZENABLE, &s_sZEnable); dev->GetRenderState(D3DRS_ZFUNC, &s_sZFunc); dev->GetRenderState(D3DRS_DEPTHBIAS, &s_sDepthBias); dev->GetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, &s_sSlopeBias); dev->GetRenderState(D3DRS_LIGHTING, &s_sLighting); dev->GetRenderState(D3DRS_FOGENABLE, &s_sFogEnable); dev->GetRenderState(D3DRS_FOGVERTEXMODE, &s_sFogVertex); dev->GetRenderState(D3DRS_CULLMODE, &s_sCull); dev->GetRenderState(D3DRS_TEXTUREFACTOR, &s_sTexFactor); dev->GetRenderState(D3DRS_COLORVERTEX, &s_sColorVertex); dev->GetTextureStageState(0, D3DTSS_COLOROP, &s_sTs0ColorOp); dev->GetTextureStageState(0, D3DTSS_COLORARG1, &s_sTs0ColorArg1); dev->GetTextureStageState(0, D3DTSS_COLORARG2, &s_sTs0ColorArg2); dev->GetTextureStageState(0, D3DTSS_ALPHAOP, &s_sTs0AlphaOp); dev->GetTextureStageState(0, D3DTSS_ALPHAARG1, &s_sTs0AlphaArg1); dev->GetTextureStageState(0, D3DTSS_ALPHAARG2, &s_sTs0AlphaArg2); dev->GetTextureStageState(1, D3DTSS_COLOROP, &s_sTs1ColorOp); dev->GetTextureStageState(1, D3DTSS_COLORARG1, &s_sTs1ColorArg1); dev->GetTextureStageState(1, D3DTSS_COLORARG2, &s_sTs1ColorArg2); dev->GetTextureStageState(1, D3DTSS_ALPHAOP, &s_sTs1AlphaOp); dev->GetTextureStageState(1, D3DTSS_ALPHAARG1, &s_sTs1AlphaArg1); dev->GetTextureStageState(1, D3DTSS_ALPHAARG2, &s_sTs1AlphaArg2); dev->GetRenderState(D3DRS_STENCILENABLE, &s_sStencilEnable); dev->GetRenderState(D3DRS_STENCILFUNC, &s_sStencilFunc); dev->GetRenderState(D3DRS_STENCILREF, &s_sStencilRef); dev->GetRenderState(D3DRS_STENCILMASK, &s_sStencilMask); dev->GetRenderState(D3DRS_STENCILWRITEMASK,&s_sStencilWriteMask); dev->GetRenderState(D3DRS_STENCILPASS, &s_sStencilPass); dev->GetRenderState(D3DRS_STENCILFAIL, &s_sStencilFail); dev->GetRenderState(D3DRS_STENCILZFAIL, &s_sStencilZFail); DWORD a = (DWORD)(alpha * 255.0f); if (a > g_ShadowAlphaMax) a = g_ShadowAlphaMax; DWORD shadowColor = D3DCOLOR_ARGB(a, 0, 0, 0); // Configura via g_pDevice para manter cache sincronizado g_pDevice->SetTexture(0, nullptr); g_pDevice->SetTexture(1, nullptr); g_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR, shadowColor); g_pDevice->SetRenderState(D3DRS_COLORVERTEX, FALSE); g_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG2); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR); g_pDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE); g_pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); g_pDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO); g_pDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); g_pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); g_pDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_ALWAYS); g_pDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE); g_pDevice->SetRenderState(D3DRS_ZENABLE, TRUE); g_pDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS); g_pDevice->SetRenderState(D3DRS_DEPTHBIAS, FloatToDWORD(-0.00005f)); g_pDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, FloatToDWORD(-0.5f)); g_pDevice->SetRenderState(D3DRS_LIGHTING, FALSE); g_pDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_NONE); g_pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); g_pDevice->SetRenderState(D3DRS_ALPHAREF, 0); g_pDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE); g_pDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL); // so pinta onde stencil=0 (sem personagem) g_pDevice->SetRenderState(D3DRS_STENCILREF, 0x00); g_pDevice->SetRenderState(D3DRS_STENCILMASK, 0xFF); g_pDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xFF); g_pDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_INCR); g_pDevice->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP); g_pDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP); return true; } void ShadowProjectorMesh::EndShadow(IDirect3DDevice9* dev) { if (!dev || !g_pDevice) return; // Restaura via g_pDevice para manter cache sincronizado // Textura null para limpar estado da sombra g_pDevice->SetTexture(0, nullptr); g_pDevice->SetTexture(1, nullptr); // Restaura render states via g_pDevice (atualiza cache + device) g_pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, s_sAlphaBlend); g_pDevice->SetRenderState(D3DRS_SRCBLEND, s_sSrcBlend); g_pDevice->SetRenderState(D3DRS_DESTBLEND, s_sDestBlend); g_pDevice->SetRenderState(D3DRS_ALPHAREF, s_sAlphaRef); g_pDevice->SetRenderState(D3DRS_ALPHAFUNC, s_sAlphaFunc); g_pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, s_sAlphaTest); g_pDevice->SetRenderState(D3DRS_ZWRITEENABLE, s_sZWrite); g_pDevice->SetRenderState(D3DRS_ZENABLE, s_sZEnable); g_pDevice->SetRenderState(D3DRS_ZFUNC, s_sZFunc); g_pDevice->SetRenderState(D3DRS_DEPTHBIAS, s_sDepthBias); g_pDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, s_sSlopeBias); g_pDevice->SetRenderState(D3DRS_LIGHTING, s_sLighting); g_pDevice->SetRenderState(D3DRS_FOGENABLE, s_sFogEnable); g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE, s_sFogVertex); g_pDevice->SetRenderState(D3DRS_CULLMODE, s_sCull); g_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR, s_sTexFactor); g_pDevice->SetRenderState(D3DRS_COLORVERTEX, s_sColorVertex); g_pDevice->SetRenderState(D3DRS_STENCILENABLE, s_sStencilEnable); g_pDevice->SetRenderState(D3DRS_STENCILFUNC, s_sStencilFunc); g_pDevice->SetRenderState(D3DRS_STENCILREF, s_sStencilRef); g_pDevice->SetRenderState(D3DRS_STENCILMASK, s_sStencilMask); g_pDevice->SetRenderState(D3DRS_STENCILWRITEMASK, s_sStencilWriteMask); g_pDevice->SetRenderState(D3DRS_STENCILPASS, s_sStencilPass); g_pDevice->SetRenderState(D3DRS_STENCILFAIL, s_sStencilFail); g_pDevice->SetRenderState(D3DRS_STENCILZFAIL, s_sStencilZFail); g_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, s_sTs0ColorOp); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, s_sTs0ColorArg1); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, s_sTs0ColorArg2); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, s_sTs0AlphaOp); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, s_sTs0AlphaArg1); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, s_sTs0AlphaArg2); g_pDevice->SetTextureStageState(1, D3DTSS_COLOROP, s_sTs1ColorOp); g_pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, s_sTs1ColorArg1); g_pDevice->SetTextureStageState(1, D3DTSS_COLORARG2, s_sTs1ColorArg2); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, s_sTs1AlphaOp); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAARG1, s_sTs1AlphaArg1); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAARG2, s_sTs1AlphaArg2); // Força cache de textura a refletir nullptr — próximo render vai rebindar // Invalida cache para forçar rebind no próximo SetTexture g_pDevice->m_pTexture[0] = nullptr; g_pDevice->m_pTexture[1] = nullptr; } ShadowProjectorMesh.h #pragma once #include <d3d9.h> #include <d3dx9.h> class TMHuman; class ShadowProjectorMesh { public: static D3DXVECTOR3 s_vLightDir; static void SetupShadowMatrix(TMHuman* pHuman, float groundY); static bool BeginShadow(IDirect3DDevice9* dev, float alpha = 0.38f); static void EndShadow(IDirect3DDevice9* dev); private: // render states static DWORD s_sAlphaBlend, s_sSrcBlend, s_sDestBlend; static DWORD s_sAlphaRef, s_sAlphaFunc, s_sAlphaTest; static DWORD s_sZWrite, s_sZEnable, s_sZFunc, s_sDepthBias, s_sSlopeBias, s_sLighting; static DWORD s_sFogEnable, s_sFogVertex, s_sCull; static DWORD s_sTexFactor, s_sColorVertex; // stage 0 static DWORD s_sTs0ColorOp, s_sTs0ColorArg1, s_sTs0ColorArg2; static DWORD s_sTs0AlphaOp, s_sTs0AlphaArg1, s_sTs0AlphaArg2; // stage 1 static DWORD s_sTs1ColorOp, s_sTs1ColorArg1, s_sTs1ColorArg2; static DWORD s_sTs1AlphaOp, s_sTs1AlphaArg1, s_sTs1AlphaArg2; static DWORD s_sStencilEnable, s_sStencilFunc, s_sStencilRef, s_sStencilMask; static DWORD s_sStencilWriteMask, s_sStencilPass, s_sStencilFail, s_sStencilZFail; }; Implementação .md # ShadowProjectorMesh — Documentação Completa de Implementação ## Visão Geral O `ShadowProjectorMesh` é um sistema de sombras projetadas (planar shadow) usando DirectX 9. Ele projeta a geometria dos personagens e objetos no plano do chão como silhuetas escuras, utilizando **stencil buffer** para evitar sobreposição de sombras. --- ## Arquivos do Sistema | Arquivo | Descrição | |---|---| | `ShadowProjectorMesh.h` | Header com declaração da classe | | `ShadowProjectorMesh.cpp` | Implementação dos 3 métodos principais | | `TMHuman.cpp` | Integração com personagens (queue + render) | | `TMObject.cpp` | Integração com objetos estáticos (queue + render) | | `ObjectManager.cpp` | Pipeline de renderização (flush das filas) | | `TMProject.vcxproj` | Registro no projeto Visual Studio | | `TMProject.vcxproj.filters` | Filtro: `Source Files\Effects` / `Header Files\Effects` | --- ## 1. ShadowProjectorMesh.h ```cpp #pragma once #include <d3d9.h> #include <d3dx9.h> class TMHuman; class ShadowProjectorMesh { public: static D3DXVECTOR3 s_vLightDir; static void SetupShadowMatrix(TMHuman* pHuman, float groundY); static bool BeginShadow(IDirect3DDevice9* dev, float alpha = 0.38f); static void EndShadow(IDirect3DDevice9* dev); private: // render states static DWORD s_sAlphaBlend, s_sSrcBlend, s_sDestBlend; static DWORD s_sAlphaRef, s_sAlphaFunc, s_sAlphaTest; static DWORD s_sZWrite, s_sZEnable, s_sZFunc, s_sDepthBias, s_sSlopeBias, s_sLighting; static DWORD s_sFogEnable, s_sFogVertex, s_sCull; static DWORD s_sTexFactor, s_sColorVertex; // stage 0 static DWORD s_sTs0ColorOp, s_sTs0ColorArg1, s_sTs0ColorArg2; static DWORD s_sTs0AlphaOp, s_sTs0AlphaArg1, s_sTs0AlphaArg2; // stage 1 static DWORD s_sTs1ColorOp, s_sTs1ColorArg1, s_sTs1ColorArg2; static DWORD s_sTs1AlphaOp, s_sTs1AlphaArg1, s_sTs1AlphaArg2; static DWORD s_sStencilEnable, s_sStencilFunc, s_sStencilRef, s_sStencilMask; static DWORD s_sStencilWriteMask, s_sStencilPass, s_sStencilFail, s_sStencilZFail; }; ``` --- ## 2. ShadowProjectorMesh.cpp ```cpp #include "pch.h" #include "ShadowProjectorMesh.h" #include "TMHuman.h" #include "TMGlobal.h" #include "RenderDevice.h" // ============================================================ // MANUAL SHADOW TUNING (AJUSTE MANUAL DA SOMBRA PROJETADA) // // 1) ROTACAO DA SOMBRA (direcao): // g_ShadowLightDir.x / y / z // // 2) ALTURA/ENCOSTE NO CHAO: // g_ShadowPlaneBias // // 3) INTENSIDADE: // g_ShadowAlphaMax // // Dica: ajuste primeiro a direcao (x/z), depois bias, depois alpha. // ============================================================ static D3DXVECTOR3 g_ShadowLightDir = D3DXVECTOR3(1.20f, -0.70f, 0.60f); static float g_ShadowPlaneBias = 0.005f; static float g_ShadowDirOffset = 2.80f; static DWORD g_ShadowAlphaMax = 120; static bool g_ShadowLockAtFeet = false; // false = projeta para o lado D3DXVECTOR3 ShadowProjectorMesh::s_vLightDir = D3DXVECTOR3(1.20f, -0.70f, 0.60f); DWORD ShadowProjectorMesh::s_sAlphaBlend, ShadowProjectorMesh::s_sSrcBlend, ShadowProjectorMesh::s_sDestBlend; DWORD ShadowProjectorMesh::s_sAlphaRef, ShadowProjectorMesh::s_sAlphaFunc, ShadowProjectorMesh::s_sAlphaTest; DWORD ShadowProjectorMesh::s_sZWrite, ShadowProjectorMesh::s_sZEnable, ShadowProjectorMesh::s_sZFunc, ShadowProjectorMesh::s_sDepthBias, ShadowProjectorMesh::s_sSlopeBias, ShadowProjectorMesh::s_sLighting; DWORD ShadowProjectorMesh::s_sFogEnable, ShadowProjectorMesh::s_sFogVertex, ShadowProjectorMesh::s_sCull; DWORD ShadowProjectorMesh::s_sTexFactor, ShadowProjectorMesh::s_sColorVertex; DWORD ShadowProjectorMesh::s_sTs0ColorOp, ShadowProjectorMesh::s_sTs0ColorArg1, ShadowProjectorMesh::s_sTs0ColorArg2; DWORD ShadowProjectorMesh::s_sTs0AlphaOp, ShadowProjectorMesh::s_sTs0AlphaArg1, ShadowProjectorMesh::s_sTs0AlphaArg2; DWORD ShadowProjectorMesh::s_sTs1ColorOp, ShadowProjectorMesh::s_sTs1ColorArg1, ShadowProjectorMesh::s_sTs1ColorArg2; DWORD ShadowProjectorMesh::s_sTs1AlphaOp, ShadowProjectorMesh::s_sTs1AlphaArg1, ShadowProjectorMesh::s_sTs1AlphaArg2; DWORD ShadowProjectorMesh::s_sStencilEnable, ShadowProjectorMesh::s_sStencilFunc, ShadowProjectorMesh::s_sStencilRef, ShadowProjectorMesh::s_sStencilMask; DWORD ShadowProjectorMesh::s_sStencilWriteMask, ShadowProjectorMesh::s_sStencilPass, ShadowProjectorMesh::s_sStencilFail, ShadowProjectorMesh::s_sStencilZFail; void ShadowProjectorMesh::SetupShadowMatrix(TMHuman* pHuman, float groundY) { if (!pHuman) return; if (groundY < -9000.0f) groundY = 0.0f; if (g_ShadowLockAtFeet) { D3DXMatrixIdentity(&pHuman->m_matShadow); pHuman->m_matShadow._22 = 0.0f; pHuman->m_matShadow._42 = groundY + g_ShadowPlaneBias; return; } D3DXVECTOR3 L = g_ShadowLightDir; D3DXVec3Normalize(&L, &L); // D3DXMatrixShadow com luz direcional rasante D3DXPLANE plane(0.0f, 1.0f, 0.0f, -(groundY + g_ShadowPlaneBias)); D3DXVECTOR4 lightDir(-L.x, -L.y, -L.z, 0.0f); // w=0 = luz direcional D3DXMatrixShadow(&pHuman->m_matShadow, &lightDir, &plane); } bool ShadowProjectorMesh::BeginShadow(IDirect3DDevice9* dev, float alpha) { if (!dev || !g_pDevice) return false; auto FloatToDWORD = [](float v) -> DWORD { DWORD out = 0; memcpy(&out, &v, sizeof(DWORD)); return out; }; // Salva render states originais dev->GetRenderState(D3DRS_ALPHABLENDENABLE, &s_sAlphaBlend); dev->GetRenderState(D3DRS_SRCBLEND, &s_sSrcBlend); dev->GetRenderState(D3DRS_DESTBLEND, &s_sDestBlend); dev->GetRenderState(D3DRS_ALPHAREF, &s_sAlphaRef); dev->GetRenderState(D3DRS_ALPHAFUNC, &s_sAlphaFunc); dev->GetRenderState(D3DRS_ALPHATESTENABLE, &s_sAlphaTest); dev->GetRenderState(D3DRS_ZWRITEENABLE, &s_sZWrite); dev->GetRenderState(D3DRS_ZENABLE, &s_sZEnable); dev->GetRenderState(D3DRS_ZFUNC, &s_sZFunc); dev->GetRenderState(D3DRS_DEPTHBIAS, &s_sDepthBias); dev->GetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, &s_sSlopeBias); dev->GetRenderState(D3DRS_LIGHTING, &s_sLighting); dev->GetRenderState(D3DRS_FOGENABLE, &s_sFogEnable); dev->GetRenderState(D3DRS_FOGVERTEXMODE, &s_sFogVertex); dev->GetRenderState(D3DRS_CULLMODE, &s_sCull); dev->GetRenderState(D3DRS_TEXTUREFACTOR, &s_sTexFactor); dev->GetRenderState(D3DRS_COLORVERTEX, &s_sColorVertex); dev->GetTextureStageState(0, D3DTSS_COLOROP, &s_sTs0ColorOp); dev->GetTextureStageState(0, D3DTSS_COLORARG1, &s_sTs0ColorArg1); dev->GetTextureStageState(0, D3DTSS_COLORARG2, &s_sTs0ColorArg2); dev->GetTextureStageState(0, D3DTSS_ALPHAOP, &s_sTs0AlphaOp); dev->GetTextureStageState(0, D3DTSS_ALPHAARG1, &s_sTs0AlphaArg1); dev->GetTextureStageState(0, D3DTSS_ALPHAARG2, &s_sTs0AlphaArg2); dev->GetTextureStageState(1, D3DTSS_COLOROP, &s_sTs1ColorOp); dev->GetTextureStageState(1, D3DTSS_COLORARG1, &s_sTs1ColorArg1); dev->GetTextureStageState(1, D3DTSS_COLORARG2, &s_sTs1ColorArg2); dev->GetTextureStageState(1, D3DTSS_ALPHAOP, &s_sTs1AlphaOp); dev->GetTextureStageState(1, D3DTSS_ALPHAARG1, &s_sTs1AlphaArg1); dev->GetTextureStageState(1, D3DTSS_ALPHAARG2, &s_sTs1AlphaArg2); dev->GetRenderState(D3DRS_STENCILENABLE, &s_sStencilEnable); dev->GetRenderState(D3DRS_STENCILFUNC, &s_sStencilFunc); dev->GetRenderState(D3DRS_STENCILREF, &s_sStencilRef); dev->GetRenderState(D3DRS_STENCILMASK, &s_sStencilMask); dev->GetRenderState(D3DRS_STENCILWRITEMASK,&s_sStencilWriteMask); dev->GetRenderState(D3DRS_STENCILPASS, &s_sStencilPass); dev->GetRenderState(D3DRS_STENCILFAIL, &s_sStencilFail); dev->GetRenderState(D3DRS_STENCILZFAIL, &s_sStencilZFail); DWORD a = (DWORD)(alpha * 255.0f); if (a > g_ShadowAlphaMax) a = g_ShadowAlphaMax; DWORD shadowColor = D3DCOLOR_ARGB(a, 0, 0, 0); // Configura via g_pDevice para manter cache sincronizado g_pDevice->SetTexture(0, nullptr); g_pDevice->SetTexture(1, nullptr); g_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR, shadowColor); g_pDevice->SetRenderState(D3DRS_COLORVERTEX, FALSE); g_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG2); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR); g_pDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE); g_pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); g_pDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO); g_pDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); g_pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); g_pDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_ALWAYS); g_pDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE); g_pDevice->SetRenderState(D3DRS_ZENABLE, TRUE); g_pDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS); g_pDevice->SetRenderState(D3DRS_DEPTHBIAS, FloatToDWORD(-0.00005f)); g_pDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, FloatToDWORD(-0.5f)); g_pDevice->SetRenderState(D3DRS_LIGHTING, FALSE); g_pDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_NONE); g_pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); g_pDevice->SetRenderState(D3DRS_ALPHAREF, 0); g_pDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE); g_pDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL); g_pDevice->SetRenderState(D3DRS_STENCILREF, 0x00); g_pDevice->SetRenderState(D3DRS_STENCILMASK, 0xFF); g_pDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xFF); g_pDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_INCR); g_pDevice->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP); g_pDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP); return true; } void ShadowProjectorMesh::EndShadow(IDirect3DDevice9* dev) { if (!dev || !g_pDevice) return; g_pDevice->SetTexture(0, nullptr); g_pDevice->SetTexture(1, nullptr); // Restaura todos os render states salvos g_pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, s_sAlphaBlend); g_pDevice->SetRenderState(D3DRS_SRCBLEND, s_sSrcBlend); g_pDevice->SetRenderState(D3DRS_DESTBLEND, s_sDestBlend); g_pDevice->SetRenderState(D3DRS_ALPHAREF, s_sAlphaRef); g_pDevice->SetRenderState(D3DRS_ALPHAFUNC, s_sAlphaFunc); g_pDevice->SetRenderState(D3DRS_ALPHATESTENABLE, s_sAlphaTest); g_pDevice->SetRenderState(D3DRS_ZWRITEENABLE, s_sZWrite); g_pDevice->SetRenderState(D3DRS_ZENABLE, s_sZEnable); g_pDevice->SetRenderState(D3DRS_ZFUNC, s_sZFunc); g_pDevice->SetRenderState(D3DRS_DEPTHBIAS, s_sDepthBias); g_pDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, s_sSlopeBias); g_pDevice->SetRenderState(D3DRS_LIGHTING, s_sLighting); g_pDevice->SetRenderState(D3DRS_FOGENABLE, s_sFogEnable); g_pDevice->SetRenderState(D3DRS_FOGVERTEXMODE, s_sFogVertex); g_pDevice->SetRenderState(D3DRS_CULLMODE, s_sCull); g_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR, s_sTexFactor); g_pDevice->SetRenderState(D3DRS_COLORVERTEX, s_sColorVertex); g_pDevice->SetRenderState(D3DRS_STENCILENABLE, s_sStencilEnable); g_pDevice->SetRenderState(D3DRS_STENCILFUNC, s_sStencilFunc); g_pDevice->SetRenderState(D3DRS_STENCILREF, s_sStencilRef); g_pDevice->SetRenderState(D3DRS_STENCILMASK, s_sStencilMask); g_pDevice->SetRenderState(D3DRS_STENCILWRITEMASK, s_sStencilWriteMask); g_pDevice->SetRenderState(D3DRS_STENCILPASS, s_sStencilPass); g_pDevice->SetRenderState(D3DRS_STENCILFAIL, s_sStencilFail); g_pDevice->SetRenderState(D3DRS_STENCILZFAIL, s_sStencilZFail); g_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, s_sTs0ColorOp); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, s_sTs0ColorArg1); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, s_sTs0ColorArg2); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, s_sTs0AlphaOp); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, s_sTs0AlphaArg1); g_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, s_sTs0AlphaArg2); g_pDevice->SetTextureStageState(1, D3DTSS_COLOROP, s_sTs1ColorOp); g_pDevice->SetTextureStageState(1, D3DTSS_COLORARG1, s_sTs1ColorArg1); g_pDevice->SetTextureStageState(1, D3DTSS_COLORARG2, s_sTs1ColorArg2); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, s_sTs1AlphaOp); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAARG1, s_sTs1AlphaArg1); g_pDevice->SetTextureStageState(1, D3DTSS_ALPHAARG2, s_sTs1AlphaArg2); // Invalida cache para forcar rebind g_pDevice->m_pTexture[0] = nullptr; g_pDevice->m_pTexture[1] = nullptr; } ``` --- ## 3. Membros adicionados ao TMHuman.h Na classe `TMHuman`, os seguintes membros sao necessarios: ```cpp // TMHuman.h (dentro da classe TMHuman) int m_bShadowPass; // Flag: 1 durante render de sombra, 0 normal D3DXMATRIX m_matShadow; // Matriz de projecao da sombra no chao void QueueProjectedShadow(); void RenderProjectedShadowPass(); static void ClearProjectedShadowQueue(); static void FlushProjectedShadowQueue(); ``` Inicializado no construtor: ```cpp // TMHuman::TMHuman(TMScene* pParentScene) m_bShadowPass = 0; ``` --- ## 4. Codigo em TMHuman.cpp ### 4.1 Fila de sombras ```cpp // TMHuman.cpp — topo do arquivo #include "ShadowProjectorMesh.h" #include <vector> static std::vector<TMHuman*>& ProjectedShadowQueue() { static std::vector<TMHuman*> queue; return queue; } ``` ### 4.2 Queue / Clear / Flush ```cpp void TMHuman::QueueProjectedShadow() { auto& queue = ProjectedShadowQueue(); queue.push_back(this); } void TMHuman::ClearProjectedShadowQueue() { ProjectedShadowQueue().clear(); } void TMHuman::FlushProjectedShadowQueue() { auto& queue = ProjectedShadowQueue(); if (queue.empty()) return; // Um unico Begin/End por frame para humanos if (!ShadowProjectorMesh::BeginShadow(g_pDevice->m_pd3dDevice, 0.47f)) { queue.clear(); return; } for (TMHuman* pHuman : queue) { if (!pHuman || pHuman->m_cDeleted || pHuman->m_dwDelayDel || !pHuman->m_bVisible) continue; pHuman->RenderProjectedShadowPass(); } ShadowProjectorMesh::EndShadow(g_pDevice->m_pd3dDevice); queue.clear(); } ``` ### 4.3 RenderProjectedShadowPass (TMHuman) ```cpp void TMHuman::RenderProjectedShadowPass() { if (!g_pCurrentScene) return; bool isPlayerHuman = (g_pCurrentScene && g_pCurrentScene->m_pMyHuman == this); bool hideProjectedShadow = isPlayerHuman ? (g_bHidePlayerShadow != 0) : (g_bHideObjectShadow != 0); if (hideProjectedShadow || m_cHide || m_cShadow == 1) { return; } float groundY = g_pCurrentScene->GroundGetHeight( TMVector2(m_pSkinMesh->m_vPosition.x, m_pSkinMesh->m_vPosition.z)); // Sem montaria if (m_cMount <= 0) { if (!m_pSkinMesh || !m_pSkinMesh->m_pRoot) return; ShadowProjectorMesh::SetupShadowMatrix(this, groundY); m_bShadowPass = 1; m_pSkinMesh->m_pRoot->Render(); if (m_cMantua > 0 && m_pMantua) { TMHuman* prevOwner = m_pMantua->m_pOwner; m_pMantua->m_pOwner = this; m_pMantua->m_BaseMatrix = m_pSkinMesh->m_OutMatrix; m_pMantua->Render(0.0f, 1.0f, 0.0f); m_pMantua->m_pOwner = prevOwner; } m_bShadowPass = 0; return; } // Com montaria if (!m_pMount || !m_pMount->m_pRoot || !m_pSkinMesh || !m_pSkinMesh->m_pRoot) return; ShadowProjectorMesh::SetupShadowMatrix(this, groundY); m_bShadowPass = 1; m_pMount->m_pRoot->Render(); m_pSkinMesh->m_pRoot->Render(); if (m_cMantua > 0 && m_pMantua) { TMHuman* prevOwner = m_pMantua->m_pOwner; m_pMantua->m_pOwner = this; m_pMantua->m_BaseMatrix = m_pSkinMesh->m_OutMatrix; m_pMantua->Render(0.0f, 1.0f, 0.0f); m_pMantua->m_pOwner = prevOwner; } m_bShadowPass = 0; } ``` ### 4.4 Enfileiramento no Render() do TMHuman Dentro de `TMHuman::Render()`, apos preparar o mesh e antes de renderizar efeitos: ```cpp // Condicao para enfileirar a sombra projetada (dentro de TMHuman::Render) bool isPlayerHuman = (g_pCurrentScene && g_pCurrentScene->m_pMyHuman == this); bool hideProjectedShadow = isPlayerHuman ? (g_bHidePlayerShadow != 0) : (g_bHideObjectShadow != 0); bool canRenderProjectedShadow = (!hideProjectedShadow && !m_cHide && m_cShadow == 0); // Desativa sombra circular antiga if (m_pShade) m_pShade->m_bShow = 0; // Sem montaria: if (canRenderProjectedShadow && m_pSkinMesh->m_pRoot) QueueProjectedShadow(); // Com montaria: if (canRenderProjectedShadow && m_pMount->m_pRoot) QueueProjectedShadow(); ``` --- ## 5. Codigo em TMObject.cpp ### 5.1 Fila de sombras ```cpp // TMObject.cpp — topo do arquivo #include "ShadowProjectorMesh.h" #include <vector> static std::vector<TMObject*>& ProjectedObjectShadowQueue() { static std::vector<TMObject*> queue; return queue; } ``` ### 5.2 Declaracoes em TMObject.h ```cpp // TMObject.h (dentro da classe TMObject) void QueueProjectedShadow(); void RenderProjectedShadowPass(); static void ClearProjectedShadowQueue(); static void FlushProjectedShadowQueue(); ``` ### 5.3 Queue / Clear / Flush (TMObject) ```cpp void TMObject::QueueProjectedShadow() { ProjectedObjectShadowQueue().push_back(this); } void TMObject::ClearProjectedShadowQueue() { ProjectedObjectShadowQueue().clear(); } void TMObject::FlushProjectedShadowQueue() { auto& queue = ProjectedObjectShadowQueue(); // Modo otimizado: limpa fila sem processar sombras if (g_bModoOtimizado || g_bHideObjectShadow) { queue.clear(); return; } if (queue.empty()) return; // Um unico BeginShadow para todos os objetos if (!ShadowProjectorMesh::BeginShadow(g_pDevice->m_pd3dDevice, 0.47f)) { queue.clear(); return; } for (TMObject* pObj : queue) { if (!pObj || pObj->m_cDeleted || !pObj->m_bVisible) continue; pObj->RenderProjectedShadowPass(); } ShadowProjectorMesh::EndShadow(g_pDevice->m_pd3dDevice); queue.clear(); } ``` ### 5.4 RenderProjectedShadowPass (TMObject) ```cpp void TMObject::RenderProjectedShadowPass() { if (!g_pCurrentScene || g_pCurrentScene->m_eSceneType != ESCENE_TYPE::ESCENE_FIELD || g_bHideObjectShadow) return; TMMesh* pMesh = g_pMeshManager->GetCommonMesh(m_dwObjType, 0, 3_min); if (!pMesh) return; float groundY = g_pCurrentScene->GroundGetHeight(m_vecPosition); if (groundY <= -9000.0f) groundY = m_fHeight; D3DXVECTOR3 L = ShadowProjectorMesh::s_vLightDir; D3DXVec3Normalize(&L, &L); if (L.y > -0.01f) L.y = -0.01f; D3DXMATRIX mat{}, matPosition{}, matScale{}; D3DXMatrixScaling(&matScale, pMesh->m_fScaleH, pMesh->m_fScaleV, pMesh->m_fScaleH); D3DXMatrixTranslation(&matPosition, m_vecPosition.x, m_fHeight, m_vecPosition.y); D3DXMatrixRotationYawPitchRoll(&mat, m_fAngle, -D3DXToRadian(90), 0.0f); D3DXMatrixMultiply(&mat, &g_pDevice->m_matWorld, &mat); D3DXMatrixMultiply(&mat, &mat, &matScale); D3DXMatrixMultiply(&mat, &mat, &matPosition); D3DXMATRIX matProjected; D3DXPLANE plane(0.0f, 1.0f, 0.0f, -(groundY + 0.005f)); D3DXVECTOR4 lightDir(-L.x, -L.y, -L.z, 0.0f); // w=0 = luz direcional D3DXMATRIX matShadow{}; D3DXMatrixShadow(&matShadow, &lightDir, &plane); D3DXMatrixMultiply(&matProjected, &mat, &matShadow); // Begin/End e feito pelo FlushProjectedShadowQueue — apenas faz o draw aqui g_pDevice->m_pd3dDevice->SetTransform(D3DTS_WORLDMATRIX(0), &matProjected); pMesh->RenderDrawShadow(); } ``` --- ## 6. Pipeline de Renderizacao — ObjectManager.cpp ```cpp // ObjectManager::RenderObject() void ObjectManager::RenderObject() { if (g_pCurrentScene != nullptr) { // 1. Limpa filas e stencil buffer TMHuman::ClearProjectedShadowQueue(); TMObject::ClearProjectedShadowQueue(); if (g_pDevice && g_pDevice->m_pd3dDevice) g_pDevice->m_pd3dDevice->Clear(0, nullptr, D3DCLEAR_STENCIL, 0, 1.0f, 0); // 2. Renderiza cena principal (cada Render() enfileira sombras via QueueProjectedShadow) // ... (tree traversal renderizando todos os nodos exceto containers de efeito/extra) // 3. Flush das sombras projetadas (renderiza todas de uma vez) TMHuman::FlushProjectedShadowQueue(); TMObject::FlushProjectedShadowQueue(); if (g_pDevice) g_pDevice->SetRenderState(D3DRS_STENCILENABLE, FALSE); // 4. Renderiza Danos e Efeitos por ultimo (sobre as sombras) // ... (containers de efeito e extras) } } ``` --- ## 7. Registro no Projeto Visual Studio ### TMProject.vcxproj ```xml <ClInclude Include="ShadowProjectorMesh.h" /> <ClCompile Include="ShadowProjectorMesh.cpp" /> ``` ### TMProject.vcxproj.filters ```xml <ClInclude Include="ShadowProjectorMesh.h"> <Filter>Header Files\Effects</Filter> </ClInclude> <ClCompile Include="ShadowProjectorMesh.cpp"> <Filter>Source Files\Effects</Filter> </ClCompile> ``` --- ## 8. Dependencias / Includes | Arquivo | Includes necessarios | |---|---| | `ShadowProjectorMesh.h` | `<d3d9.h>`, `<d3dx9.h>` | | `ShadowProjectorMesh.cpp` | `"pch.h"`, `"ShadowProjectorMesh.h"`, `"TMHuman.h"`, `"TMGlobal.h"`, `"RenderDevice.h"` | | `TMHuman.cpp` | `"ShadowProjectorMesh.h"`, `<vector>` | | `TMObject.cpp` | `"ShadowProjectorMesh.h"`, `"OptimizationConfig.h"`, `<vector>` | --- ## 9. Variaveis Globais Utilizadas | Variavel | Tipo | Descricao | |---|---|---| | `g_pDevice` | `RenderDevice*` | Device wrapper com cache de estados | | `g_pCurrentScene` | `TMScene*` | Cena ativa (acessa `GroundGetHeight`, `m_pMyHuman`) | | `g_bModoOtimizado` | `bool` | Modo otimizado — pula sombras de objetos | | `g_bHideObjectShadow` | `DWORD/bool` | Esconde sombras de mobs/objetos | | `g_bHidePlayerShadow` | `DWORD/bool` | Esconde sombra do jogador | | `g_pMeshManager` | `MeshManager*` | Gerenciador de meshes estáticos | --- ## 10. Fluxo de Execucao Resumido ``` ObjectManager::RenderObject() | +-- TMHuman::ClearProjectedShadowQueue() +-- TMObject::ClearProjectedShadowQueue() +-- Clear(STENCIL) | +-- [Render cena] --> cada TMHuman::Render() chama QueueProjectedShadow() | --> cada TMObject::Render() chama QueueProjectedShadow() | +-- TMHuman::FlushProjectedShadowQueue() | +-- BeginShadow(alpha=0.47) // configura estados + stencil | +-- loop: RenderProjectedShadowPass() | | +-- SetupShadowMatrix() // calcula m_matShadow | | +-- m_bShadowPass = 1 | | +-- m_pSkinMesh->Render() // mesh usa m_matShadow quando m_bShadowPass=1 | | +-- m_bShadowPass = 0 | +-- EndShadow() // restaura todos os estados | +-- TMObject::FlushProjectedShadowQueue() | +-- BeginShadow(alpha=0.47) | +-- loop: RenderProjectedShadowPass() | | +-- D3DXMatrixShadow() // calcula matriz inline | | +-- SetTransform + RenderDrawShadow() | +-- EndShadow() | +-- SetRenderState(STENCILENABLE, FALSE) +-- [Render efeitos/danos] ``` --- ## 11. Parametros de Ajuste (Tuning) Definidos como `static` no topo de `ShadowProjectorMesh.cpp`: | Variavel | Valor Padrao | Descricao | |---|---|---| | `g_ShadowLightDir` | `(1.20, -0.70, 0.60)` | Direcao da luz (rotacao da sombra) | | `g_ShadowPlaneBias` | `0.005f` | Bias do plano (evita z-fighting) | | `g_ShadowDirOffset` | `2.80f` | Offset direcional (nao utilizado ativamente) | | `g_ShadowAlphaMax` | `120` | Alpha maximo da sombra (0-255) | | `g_ShadowLockAtFeet` | `false` | `true` = sombra direto embaixo; `false` = projecao lateral |1 ponto
-
Galera boa tarde, a muitos anos eu jogava WYD e cheguei ate abrir um servidor 6.56 na época, depois so joguei varios e varios servidores privates, iniciei la no malech e alastar da ongame na epoca... Hoje me deu na telha de querer jogar, porém gostaria de uma release com source e cliente, o maximo desbugada possivel, em qualquer versao, só pra eu brincar offline aqui mesmo, sabem me indicar alguma aqui no forum ? pode ser qualquer versao mesmo, de preferencia que eu nao precise desbugar nada, que de pra eu brincar ??? Obrigadao!!!1 ponto
-
1 ponto
-
WYD 7.54 – Source Completa da 7.54 Depois de um longo período de engenharia reversa e descompilação da 7.54, estou disponibilizando minha compilação da TMProject para a versão 7.54. Não foi feito apenas alinhamento de pacotes ou paineis, foi toda estrutura logica das funções do game, tradução completa do Motor Directx8 para melhorias do Directx9 (já existente no TMProject). havia diversas limitações no motor x9 da TM, foi refeita por completo aplicando melhorias significativas ao novo motor! O diferencial está no trabalho de engenharia realizado para transportar a tecnologia da TMProject para uma versão 7.54, preservando compatibilidade e adicionando otimizações que nunca fizeram parte da implementação original. Até onde tenho conhecimento, não existe outra compilação pública com esse nível de migração para a 7.54. Esta é, na prática, uma das primeiras versões 7.54 descompiladas, com Source completa e preparada para continuar recebendo desenvolvimento, sem depender exclusivamente de engenharia reversa sobre DLLs! Se você procura uma base para evoluir um projeto sério, estudar a arquitetura do cliente ou construir uma versão moderna da 7.54, esta compilação entrega um ponto de partida que simplesmente não está disponível no mercado. Otimizações gráficas Foram reescritas partes importantes do pipeline de renderização visando reduzir o custo da CPU durante o desenho da cena. Entre as melhorias estão: Reestruturação das Draw Calls. Agrupamento de renderização de vegetação. Expansão da quantidade de árvores renderizadas por Draw Call (aproximadamente 1.000 árvores por chamada, reduzindo drasticamente o overhead da renderização). Sistema de carregamento de árvores por setores. Sistema de carregamento de gramas por setores. Isso reduz significativamente a quantidade de chamadas ao DirectX, melhora a utilização da GPU e diminui o trabalho da CPU em mapas com grande densidade de objetos. Sistema de Cache de Objetos A renderização dos objetos do mapa foi completamente modificada. Na implementação original, diversos objetos são constantemente destruídos e reconstruídos conforme o jogador percorre o mapa, gerando processamento desnecessário. Nesta compilação foi implementado um sistema de cache. Depois que um setor é carregado pela primeira vez, seus objetos permanecem registrados em memória, evitando reconstruções contínuas durante a navegação. O resultado é uma renderização muito mais estável, menor consumo de CPU e redução perceptível de microtravamentos em áreas extensas. Melhorias no carregamento do mapa Também foi refeito o processo de leitura dos arquivos utilizados pelo cliente. Inclui otimizações no carregamento de: Arquivos TRN. Arquivos DAT. O carregamento inicial foi reorganizado para reduzir processamento redundante e preparar os dados de forma mais eficiente antes da renderização. Sistema climático Foi portada toda a estrutura responsável pelo sistema de ambiente do cliente. Entre os recursos presentes: Céu dinâmico. Nuvens. Ciclo de dia e noite. Sistema de tempo totalmente funcional. Estrutura da Base Esta base está alinhada com a versão 7.54 utilizada pelo Alastar, que utiliza servidor em DLL. Ou seja, a Source disponibilizada corresponde ao cliente da 7.54 e foi preparada para trabalhar nesse ecossistema. Caso utilize outra base, nada impede a migração. Basta realizar o alinhamento dos pacotes da sua implementação, remover as limitações da 7.54 original e incorporar os pacotes e estruturas já existentes nesta compilação. WhatsApp : [Hidden Content] Discord: @devm0rto1 ponto
-
여러분, 안녕하세요? 모두 잘 지내시나요? 이 파일들의 링크가 무엇인가요? 아메리카 대륙과 전 세계가 이를 긴급히 기다리고 있습니다! Hello everyone, how are you all doing? What are the links to these files? The Americas and the whole world are eagerly waiting for them urgently! Olá pessoal, tudo bem com vocês? Qual os links desses arquivo pois as américas e o mundo todo espera ansiosos por isso com urgência! Links> [Hidden Content]1 ponto
-
void BASE_GetCurrentScore(STRUCT_MOB_GLOBAL* MOB, STRUCT_AFFECT* Affect, STRUCT_EXT1* Ext1, STRUCT_EXT2* Ext2, int OriginalFace, int TargetX, int TargetY, int* AnotherSkill, int soultype, int* BuffState) //Função Ok { MOB->Rsv = 0; int MOBMagic = 0; memcpy(&MOB->CurrentScore, &MOB->BaseScore, sizeof STRUCT_SCORE); int tDamage = MOB->CurrentScore.Damage; int tMaxHp = MOB->CurrentScore.MaxHp; if (BASE_IsTranscended(OriginalFace) == 1) { //(0: Não iniciou a quest - 1: usou o cristal Elime - 2: usou o cristal Silphed - 3: usou o cristal Thelion - 4: usou o cristal Noas) for (int i = 0; i < 4; i++) { if (!BASE_TestByteBit(Ext2->Quest[1], i)) continue; int BonusMP = ResultQuest355[i][0]; int BonusAC = ResultQuest355[i][1]; int BonusHP = ResultQuest355[i][2]; MOB->CurrentScore.MaxMp += BonusMP; MOB->CurrentScore.Ac += BonusAC; tMaxHp += BonusHP; } } int acAdd = BASE_GetMobAbilityGlobal(MOB, EF_AC) + BASE_GetMobAbilityGlobal(MOB, EF_ACADD); tDamage += BASE_GetMobAbilityGlobal(MOB, EF_DAMAGE); tMaxHp += BASE_GetMobAbilityGlobal(MOB, EF_HP); MOB->CurrentScore.Ac += acAdd; MOB->CurrentScore.MaxMp += BASE_GetMobAbilityGlobal(MOB, EF_MP); MOB->CurrentScore.Str += BASE_GetMobAbilityGlobal(MOB, EF_STR); MOB->CurrentScore.Int += BASE_GetMobAbilityGlobal(MOB, EF_INT); MOB->CurrentScore.Dex += BASE_GetMobAbilityGlobal(MOB, EF_DEX); MOB->CurrentScore.Con += BASE_GetMobAbilityGlobal(MOB, EF_CON); int special0 = MOB->CurrentScore.Special[0] + BASE_GetMobAbilityGlobal(MOB, EF_SPECIAL1); if (special0 > MAX_SPECIAL_G) special0 = MAX_SPECIAL_G; int special1 = MOB->CurrentScore.Special[1] + BASE_GetMobAbilityGlobal(MOB, EF_SPECIAL2) + BASE_GetMobAbilityGlobal(MOB, EF_SPECIALALL); if (special1 > MAX_SPECIAL_G) special1 = MAX_SPECIAL_G; int special2 = MOB->CurrentScore.Special[2] + BASE_GetMobAbilityGlobal(MOB, EF_SPECIAL3) + BASE_GetMobAbilityGlobal(MOB, EF_SPECIALALL); if (special2 > MAX_SPECIAL_G) special2 = MAX_SPECIAL_G; int special3 = MOB->CurrentScore.Special[3] + BASE_GetMobAbilityGlobal(MOB, EF_SPECIAL4) + BASE_GetMobAbilityGlobal(MOB, EF_SPECIALALL); if (special3 > MAX_SPECIAL_G) special3 = MAX_SPECIAL_G; MOB->CurrentScore.Special[0] = special0; MOB->CurrentScore.Special[1] = special1; MOB->CurrentScore.Special[2] = special2; MOB->CurrentScore.Special[3] = special3; MOB->SaveMana = BASE_GetMobAbilityGlobal(MOB, EF_SAVEMANA); MOBMagic = BASE_GetMobAbilityGlobal(MOB, EF_MAGIC) + BASE_GetMobAbilityGlobal(MOB, EF_MAGICADD); int movSpeed = MOB->CurrentScore.AttackRun & 0xF; movSpeed += BASE_GetMobAbilityGlobal(MOB, EF_RUNSPEED); int attSpeed = BASE_GetMobAbilityGlobal(MOB, EF_ATTSPEED); int regenHP = BASE_GetMobAbilityGlobal(MOB, EF_REGENHP); int regenMP = BASE_GetMobAbilityGlobal(MOB, EF_REGENMP); int faceindex = MOB->Equip[FACE].sIndex; if (faceindex <= 0 || (faceindex >= 22 && faceindex <= 25) || faceindex == 32) //Transformações do BM faceindex = OriginalFace; int face = faceindex / 10; if (face < 4) { MOB->Equip[FACE].stEffect[0].cEffect = EF_SANC; MOB->Equip[FACE].stEffect[0].cValue = 0; if (MOB->Clan == 7 || MOB->Clan == 8 || MOB->Clan == 9) MOB->Clan = 0; int mountId = MOB->Equip[MOUNT].sIndex; int isNipple = FALSE; if ((TargetX / 128) >= 27 && (TargetX / 128) <= 30 && (TargetY / 128) >= 21 && (TargetY / 128) <= 24) //X 3456 - 3840 Y 2688 - 3072 isNipple = TRUE; if (isNipple) movSpeed -= 2; if (MOB->Equip[MOUNT].stEffect[0].sValue > 0) //Mount Hp { int nCategory = (mountId >= 1 && mountId < MAX_ITEMLIST) ? g_pItemList[mountId].nCategory : 0; if (nCategory == 22 || nCategory == 23) { int nSubCategory = g_pItemList[mountId].nSubCategory; if (nSubCategory >= 0 && nSubCategory < MOUNT_BONUS_ENTRIES) movSpeed = g_pMountBonusTable[nSubCategory].nMountSpeed; } } if (movSpeed < 0) movSpeed = 0; if (movSpeed > 6) movSpeed = 6; } if (BASE_IsTranscended(OriginalFace) == 1 && (MOB->LearnedSkill[0] & LEARN_30) != 0) //verifica se o personagem é Celestial+ checando a face e se tem soul { if (MOB->Class == 0) { tDamage += MOB->CurrentScore.Damage + 880; tMaxHp += 1600; MOB->CurrentScore.Ac += 950; MOB->CurrentScore.MaxMp += 300; } else if (MOB->Class == 1) { tDamage += 800; tMaxHp += 800; MOB->CurrentScore.Ac += 950; MOB->CurrentScore.MaxMp += 1700; } else if (MOB->Class == 2) { tDamage += 880; tMaxHp += 800; MOB->CurrentScore.Ac += 950; MOB->CurrentScore.MaxMp += 1300; } else if (MOB->Class == 3) { tDamage += 800; tMaxHp += 800; MOB->CurrentScore.Ac += 950; MOB->CurrentScore.MaxMp += 700; } } int capeId = MOB->Equip[CAPE].sIndex; //ebp-11c if (MOB->Clan != 4 && (capeId == 543 || capeId == 545 || capeId == 1766 || capeId == 1767 || capeId == 1768 || capeId == 3191 || capeId == 3194 || capeId == 3197 || capeId == 6447)) { MOB->Clan = 7; } if (MOB->Clan != 4 && (capeId == 544 || capeId == 546 || capeId == 1769 || capeId == 1770 || capeId == 1771 || capeId == 3192 || capeId == 3195 || capeId == 3198 || capeId == 6448)) { MOB->Clan = 8; } if (MOB->Clan != 4 && capeId == 1720) { MOB->Clan = 9; } if (MOB->Clan != 4 && (capeId == 734 || capeId == 736)) { MOB->Clan = 7; } if (MOB->Clan != 4 && (capeId == 735 || capeId == 737)) { MOB->Clan = 8; } if (MOB->Class == 3 && (MOB->LearnedSkill[0] & LEARN_02) != 0) //Agressividade { int weaponId = MOB->Equip[WEAPON].sIndex; if (weaponId > 0 && weaponId < MAX_ITEMLIST) { int itemUnique = g_pItemList[weaponId].nUnique; if (itemUnique == 42 || itemUnique == 43) //Arcos ou Garras { tDamage = tDamage * (special1 / 20 + 100) / 100; } } } int hpAdd = BASE_GetMobAbilityGlobal(MOB, EF_HPADD) + 100; tMaxHp = (tMaxHp * hpAdd) / 100; int mpAdd = BASE_GetMobAbilityGlobal(MOB, EF_MPADD) + 100; MOB->CurrentScore.MaxMp = (MOB->CurrentScore.MaxMp * mpAdd) / 100; for (int i = HELMET; i <= SHIELD; i++) { int equipId = MOB->Equip[i].sIndex; if (equipId <= 0 || equipId >= MAX_ITEMLIST) continue; int itemSanc = BASE_GetItemSanc(&MOB->Equip[i]); if (itemSanc < 9) continue; int itemPos = g_pItemList[equipId].nPos; if (itemPos == ARMOR_POS) MOB->CurrentScore.Ac += 25; else if (itemPos == PANTS_POS) MOB->CurrentScore.Ac += 25; else if (itemPos == GLOVES_POS) MOB->Rsv |= 64; else if (itemPos == SHIELD_POS) MOB->CurrentScore.Ac += 25; else if (itemPos == WEAPON_POS || itemPos == WEAPON2HAND_POS) { int itemUnique = g_pItemList[equipId].nUnique; if (itemUnique == 47) MOBMagic += 16; else if (itemUnique == 44) MOBMagic += 16; else tDamage += 40; } } int AttackSpeedBonus = 0; int RunSpeedBonus = 0; int DAMAGEMULTI = 100; int HPMULTI = 100; int MPMULTI = 100; int StatePlusHp = FALSE; int tMaxHPb = 0; *BuffState = 0; int Resist[4]{}; Resist[0] = MOB->Resist[0]; Resist[1] = MOB->Resist[1]; Resist[2] = MOB->Resist[2]; Resist[3] = MOB->Resist[3]; for (int i = 0; i < MAX_AFFECT; i++) { if (!Affect) continue; int Type = Affect[i].Type; if (!Type) continue; int Value = Affect[i].Value; int Level = Affect[i].Level; if (Type == 1) //Ice: Holy_Touch, Freeze_Spiral, Ice_Spear, Rock_Of_Blizzard, Thunder_Lising, Ice_Armor, Ambush { int scaledLevel = 4 * Level; if (scaledLevel >= 255) movSpeed -= 3; else movSpeed -= 1; if (Value == 1) *BuffState |= FROZEN; else if ((Value == 3 || Value == 50) && movSpeed > 1) movSpeed = 1; if (scaledLevel < 10) scaledLevel = 10; if (scaledLevel > 999) scaledLevel = 999; MOB->MultiHitThreshold = MOB->MultiHitThreshold * (1000 - scaledLevel) / 1000; } else if (Type == 2) //Velocity: Haste (Aceleração) { movSpeed += Value; *BuffState |= VELOCITY; } else if (Type == 3) //Pursuit: Double_Swing (Golpe Duplo), Resi_Decrease { int scaledLevel = 4 * Level; int decResist = Value; if (MOB->Equip[FACE].sIndex < 50) { if ((MOB->LearnedSkill[0] & LEARN_23) != 0) decResist = Value - 40; else decResist = Value - 30; } if (scaledLevel > 255) { int pct = scaledLevel / 50; if (pct > 99) pct = 99; Resist[0] = Resist[0] * (100 - pct) / 100; Resist[1] = Resist[1] * (100 - pct) / 100; Resist[2] = Resist[2] * (100 - pct) / 100; Resist[3] = Resist[3] * (100 - pct) / 100; } Resist[0] -= decResist; Resist[1] -= decResist; Resist[2] -= decResist; Resist[3] -= decResist; } else if (Type == 4) //Poções { if (Value == 0) { DAMAGEMULTI += 3; tDamage += 20; MOBMagic += 10; } else if (Value == 1) { DAMAGEMULTI += 5; tDamage += 40; MOBMagic += 12; } else if (Value == 2) { DAMAGEMULTI += 6; tDamage += 60; MOBMagic += 16; } else if (Value == 3) { DAMAGEMULTI += 15; tDamage += 80; MOBMagic += 20; } } else if (Type == 5) //Luster_Furnish, Incapacitate { *BuffState |= FROZEN; } else if (Type == 6) //Divine_Protection (Proteção Divina), Absolute_Protection { *BuffState |= INVULNERABLE; } else if (Type == 7) //Freeze_Blade (Lâmina Congelante) { int scaledLevel = 4 * Level; int decAttSpeed = (scaledLevel / 10) + 10; attSpeed -= decAttSpeed; if (MOB->Equip[FACE].sIndex > 50) { int calcInt = MOB->CurrentScore.Int; calcInt -= (decAttSpeed + 10); MOB->CurrentScore.Int = calcInt; } } else if (Type == 8) //PvP Jewels { if ((Value & 2) != 0) //Joia da Resistencia { int incResist = 25; Resist[0] += incResist; Resist[1] += incResist; Resist[2] += incResist; Resist[3] += incResist; } if ((Value & 16) != 0) //Joia da Proteção (+HP +Def) { tMaxHp = (tMaxHp + (MOB->CurrentScore.Level / 2)) + ((MOB->CurrentScore.Ac * 20) / 100); } if ((Value & 32) != 0) //Joia do Poder (+Ataque +HP) { DAMAGEMULTI += 5; MOBMagic += 4; tMaxHp = (107 * tMaxHp) / 100; } if ((Value & 128) != 0) //Joia Magia (MP -> HP) { StatePlusHp = TRUE; } } else if (Type == 9) //Magic_Weapon (Arma Mágica) { int scaledLevel = 4 * Level; int incAttack = (scaledLevel / 3) + 15; DAMAGEMULTI += 5; if (MOB->Class == 1) { if ((MOB->LearnedSkill[0] & LEARN_20) != 0) //Arma Magica { DAMAGEMULTI += 15; incAttack *= 5; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) //8 Skill Magia Especial DAMAGEMULTI += 7; } // LearnedSkill[1] & 0x400 (nLEARN_10) — Special_Master (11th FM Especial): +5% buff dano if ((MOB->LearnedSkill[1] & nLEARN_10) != 0) { incAttack += incAttack / 20; DAMAGEMULTI += DAMAGEMULTI / 20; } } tDamage += incAttack; } else if (Type == 10) //Waste (Enfraquecimento) { int scaledLevel = 4 * Level; if (scaledLevel >= 255) { int pct = scaledLevel / 60; if (pct > 99) pct = 99; tDamage = tDamage * (100 - pct) / 100; } tDamage -= Value + scaledLevel / 5; } else if (Type == 11) //Magic_Shield (Escudo Mágico) { if (Value == 1) MOB->CurrentScore.Ac *= 2; else { int scaledLevel = 4 * Level; int incDef = Value + scaledLevel / 3; // FM class — percentage multiplier (100% base, 102% com LEARN_23, +5% com Special_Master 11th) if (MOB->Class == 1) { int acPct = 100; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) acPct = 102; if ((MOB->LearnedSkill[1] & nLEARN_10) != 0) acPct += 5; MOB->CurrentScore.Ac = acPct * MOB->CurrentScore.Ac / 100; } MOB->CurrentScore.Ac += incDef; } } else if (Type == 12) // { float incDef = (100 - Value) / 100.0; MOB->CurrentScore.Ac *= incDef; } else if (Type == 13) //Assault (Investida) { int calcBonus = MOB->CurrentScore.Special[2] / 10 + Value; DAMAGEMULTI += calcBonus; if ((MOB->LearnedSkill[0] & LEARN_15) != 0) //8 Skill Trans DAMAGEMULTI += 5; // LearnedSkill[1] bit 7 (nLEARN_07) — WindStorm (12th TK Trans): elimina HP penalty, +DMG if ((MOB->LearnedSkill[1] & nLEARN_07) == 0) HPMULTI -= 10; else DAMAGEMULTI += 2; } else if (Type == 14) //Growth (Crescimento/Samaritano) { int useLvl = MOB->CurrentScore.Level; if (BASE_IsTranscended(OriginalFace) == 1 && (MOB->LearnedSkill[0] & LEARN_30) != 0) useLvl += 400; int calcCon = Value + 6 * MOB->CurrentScore.Special[1] + 4 * useLvl / 3 + MOB->CurrentScore.Con; int Increase = 0; int incSpecial = 0; if ((MOB->LearnedSkill[0] & LEARN_07) != 0) //8 Skill Confianca { Increase = 400; incSpecial = 6 * MOB->CurrentScore.Special[1]; } MOB->CurrentScore.Dex += Increase; MOB->CurrentScore.Int += Increase; MOB->CurrentScore.Str += Increase; MOB->CurrentScore.Con = Increase + incSpecial + calcCon; } else if (Type == 15) //Skill_Amplify (Amplificação/Athena) { int scaledLevel = 4 * Level; int incSpecial = (scaledLevel / 10) + Value; if (MOB->Class == 1 && (MOB->LearnedSkill[0] & LEARN_23) != 0) incSpecial = 120 * incSpecial / 100; MOB->CurrentScore.Special[0] += incSpecial; MOB->CurrentScore.Special[1] += incSpecial; MOB->CurrentScore.Special[2] += incSpecial; MOB->CurrentScore.Special[3] += incSpecial; // Special_Master (11th FM Especial): +10% bonus a cada special if (MOB->Class == 1 && (MOB->LearnedSkill[1] & nLEARN_10) != 0) { MOB->CurrentScore.Special[0] = 110 * MOB->CurrentScore.Special[0] / 100; MOB->CurrentScore.Special[1] = 110 * MOB->CurrentScore.Special[1] / 100; MOB->CurrentScore.Special[2] = 110 * MOB->CurrentScore.Special[2] / 100; MOB->CurrentScore.Special[3] = 110 * MOB->CurrentScore.Special[3] / 100; } if (MOB->CurrentScore.Special[0] > MAX_SPECIAL_G) MOB->CurrentScore.Special[0] = MAX_SPECIAL_G; if (MOB->CurrentScore.Special[1] > MAX_SPECIAL_G) MOB->CurrentScore.Special[1] = MAX_SPECIAL_G; if (MOB->CurrentScore.Special[2] > MAX_SPECIAL_G) MOB->CurrentScore.Special[2] = MAX_SPECIAL_G; if (MOB->CurrentScore.Special[3] > MAX_SPECIAL_G) MOB->CurrentScore.Special[3] = MAX_SPECIAL_G; } else if (Type == 16) //Transform: Werewolf, Werebear, Astaroth, Titan, Evilator { int transfId = Value - 1; if (transfId > EDEN || MOB->Class != 2) continue; if (transfId == EDEN) MOB->Equip[FACE].sIndex = 32; else MOB->Equip[FACE].sIndex = transfId + 22; int faceId = MOB->Equip[FACE].sIndex; int damAdd = 0; int hpAdd = 0; int acAdd = 0; int attSpeedAdd = 0; int resistAdd = 0; if (faceId == 25) //Titan { resistAdd = pTransBonus[transfId].MinResist; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) acAdd = 10; } else if (faceId == 32) //Eden { attSpeedAdd = 10; resistAdd = pTransBonus[transfId].MinResist; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) { damAdd = 5; acAdd = 2; } } else if ((MOB->LearnedSkill[0] & LEARN_21) != 0) //Metamorfose Superior { resistAdd = pTransBonus[transfId].MinResist; if (faceId == 22) //Lobisomem { MOB->Critical = pTransBonus[transfId].MinCritical + ((MOB->CurrentScore.Special[3] / 50) * pTransBonus[transfId].MaxCritical); damAdd = 10; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) { damAdd = 15; acAdd = 2; } } else if (faceId == 23) //Homem Urso { hpAdd = 20; attSpeedAdd = 20; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) { damAdd = 5; acAdd = 2; } } else if (faceId == 24) //Astaroth { attSpeedAdd = 20; damAdd = 10; if ((MOB->LearnedSkill[0] & LEARN_23) != 0) { damAdd = 15; acAdd = 2; } } } int sancFace = 0; if (BASE_IsTranscended(OriginalFace) == 1 && (MOB->LearnedSkill[0] & LEARN_30) != 0) sancFace = 9; else { sancFace = ((MOB->CurrentScore.Special[3] + 2 * MOB->CurrentScore.Level) / 3 - pTransBonus[transfId].Sanc) / 12; if (sancFace < 0) sancFace = 0; if (sancFace > 9) sancFace = 9; } MOB->Equip[FACE].stEffect[0].cEffect = EF_SANC; MOB->Equip[FACE].stEffect[0].cValue = sancFace; int sp3 = MOB->CurrentScore.Special[3]; //Calculo do Dano DAMAGEMULTI = (DAMAGEMULTI + damAdd + pTransBonus[transfId].MinAttack + (sp3 * (pTransBonus[transfId].MaxAttack - pTransBonus[transfId].MinAttack) / 200)) - 100; //Calculo da Defesa int calcAc = MOB->CurrentScore.Ac * (acAdd + pTransBonus[transfId].MinDefense + sp3 * (pTransBonus[transfId].MaxDefense - pTransBonus[transfId].MinDefense) / 200) / 100; if (faceId == 22) calcAc += 5; MOB->CurrentScore.Ac = calcAc; //Calculo do Hp tMaxHp = tMaxHp * (hpAdd + pTransBonus[transfId].MinHp + sp3 * (pTransBonus[transfId].MaxHp - pTransBonus[transfId].MinHp) / 200) / 100; //Calculo das Resistencias Resist[0] += resistAdd; Resist[1] += resistAdd; Resist[2] += resistAdd; Resist[3] += resistAdd; //Calculo SpeedAttack AttackSpeedBonus = pTransBonus[transfId].SpeedAttack + attSpeedAdd; //Velocidade de Movimento RunSpeedBonus = pTransBonus[transfId].SpeedMove; } else if (Type == 18) //Mana_Control (Controle de Mana) { *BuffState |= MANACONTROL; } else if (Type == 19) //Immunity (Imunidade) { *BuffState |= CANCEL; } else if (Type == 21) //Transfer_Armor_Class (Meditação) { int sp1 = MOB->CurrentScore.Special[1]; MOB->CurrentScore.Ac += -10 - sp1 / 3; int incDmg = sp1 / 10 + Value; if ((MOB->LearnedSkill[0] & LEARN_07) != 0) incDmg += 5; DAMAGEMULTI += incDmg; } else if (Type == 24) //Rescue (Possuído/Berserker) { MOB->CurrentScore.Ac += 5 * MOB->CurrentScore.Special[2]; if (BASE_GetItemAbility(&MOB->Equip[SHIELD], EF_POS) == SHIELD_POS) { MOB->BerserkerResist += 10; Resist[0] += 20; Resist[1] += 20; Resist[2] += 20; Resist[3] += 20; } if ((MOB->LearnedSkill[0] & LEARN_15) != 0) MOB->BerserkerResist += 20; } else if (Type == 25) //Elemental_Protector (Proteção Elemental) { int sp2 = MOB->CurrentScore.Special[2]; int incResist = (sp2 / 4 + Value); if (sp2 >= 255) { int pctBoost = (sp2 - 255) / 15; if (pctBoost > 0) { Resist[0] = (pctBoost + 100) * Resist[0] / 100; Resist[1] = (pctBoost + 100) * Resist[1] / 100; Resist[3] = (pctBoost + 100) * Resist[3] / 100; } } Resist[0] += incResist / 10; Resist[1] += incResist / 10; Resist[3] += incResist / 10; } else if (Type == 26) //Dodge (Evasão Aprimorada) { *BuffState |= EVASION; } else if (Type == 27) //Enchant_Frost (Encantar Gelo) { *BuffState |= FREEZE; } else if (Type == 28) //Hide_In_Shadow (Invisibilidade) { *BuffState |= INVISIBLE; } else if (Type == 29) //Soul_Of_Limits (Limite da Alma) / Weapon_Mastery { // HT bonus +20% se Class==3 e LearnedSkill[1] bit 7 (nLEARN_07) int htBonus = 0; if (MOB->Class == 3 && (MOB->LearnedSkill[1] & nLEARN_07) != 0) htBonus = 20; int _nIncreese = 1; if (BASE_IsTranscended(OriginalFace) == 1) _nIncreese = 2; if ((MOB->LearnedSkill[0] & LEARN_30) != 0) { if (soultype < 1 || soultype > 10) soultype = 1; switch (soultype) { case 1: { MOB->CurrentScore.Str += MOB->CurrentScore.Str * (htBonus + 40 * _nIncreese) / 100; MOB->CurrentScore.Con += MOB->CurrentScore.Con * (htBonus + 30 * _nIncreese) / 100; } break; case 2: { MOB->CurrentScore.Int += MOB->CurrentScore.Int * (htBonus + 40 * _nIncreese) / 100; MOB->CurrentScore.Con += MOB->CurrentScore.Con * (htBonus + 30 * _nIncreese) / 100; } break; case 3: { MOB->CurrentScore.Dex += MOB->CurrentScore.Dex * (htBonus + 40 * _nIncreese) / 100; MOB->CurrentScore.Con += MOB->CurrentScore.Con * (htBonus + 30 * _nIncreese) / 100; } break; case 4: { MOB->CurrentScore.Str += MOB->CurrentScore.Str * (htBonus + 40 * _nIncreese) / 100; MOB->CurrentScore.Dex += MOB->CurrentScore.Dex * (htBonus + 30 * _nIncreese) / 100; } break; case 5: { MOB->CurrentScore.Int += MOB->CurrentScore.Int * (htBonus + 40 * _nIncreese) / 100; MOB->CurrentScore.Dex += MOB->CurrentScore.Dex * (htBonus + 30 * _nIncreese) / 100; } break; case 6: { MOB->CurrentScore.Con += MOB->CurrentScore.Con * (htBonus + 40 * _nIncreese) / 100; MOB->CurrentScore.Dex += MOB->CurrentScore.Dex * (htBonus + 30 * _nIncreese) / 100; } break; case 7: { MOB->CurrentScore.Str += MOB->CurrentScore.Str * (htBonus + 60 * _nIncreese) / 100; } break; case 8: { MOB->CurrentScore.Int += MOB->CurrentScore.Int * (htBonus + 60 * _nIncreese) / 100; } break; case 9: { MOB->CurrentScore.Con += MOB->CurrentScore.Con * (htBonus + 60 * _nIncreese) / 100; } break; case 10: { MOB->CurrentScore.Dex += MOB->CurrentScore.Dex * (htBonus + 60 * _nIncreese) / 100; } break; } } else if (_nIncreese == 1) { MOB->CurrentScore.Str = 2000; MOB->CurrentScore.Int = 2000; tMaxHPb = 10000; } if (MOB->CurrentScore.Str >= MAX_STATSPOINT) MOB->CurrentScore.Str = MAX_STATSPOINT; if (MOB->CurrentScore.Int >= MAX_STATSPOINT) MOB->CurrentScore.Int = MAX_STATSPOINT; if (MOB->CurrentScore.Con >= MAX_STATSPOINT) MOB->CurrentScore.Con = MAX_STATSPOINT; if (MOB->CurrentScore.Dex >= MAX_STATSPOINT) MOB->CurrentScore.Dex = MAX_STATSPOINT; } else if (Type == 31) //Coin_Armor (Escudo Dourado) { int scaledLevel = 4 * Level; int incDef = (scaledLevel / 10) + Value; if ((MOB->LearnedSkill[0] & LEARN_15) != 0) incDef += 100; // Plunder (11th HT Troca): +10% AC no Escudo Dourado if ((MOB->LearnedSkill[1] & nLEARN_06) != 0) incDef += 10 * MOB->CurrentScore.Ac / 100; MOB->CurrentScore.Ac += incDef; } else if (Type == 33) //Scroll Transform (pergaminho) { int setFace = 0; if (Value == 0) setFace = 202; //Gremlin if (Value == 1) setFace = 209; //Arqueiro Orc if (Value == 2) setFace = 212; //Troll Machado if (Value == 3) setFace = 230; //Carbunkle if (Value == 4) setFace = 229; //Chefe Zumbi if (Value == 5) setFace = 216; //Javali Selvagem if (Value == 6) setFace = 226; //Lobo if (Value == 7) setFace = 298; //Golem Chefe MOB->Equip[FACE].sIndex = setFace; } else if (Type == 34) //Divine Potion { DAMAGEMULTI += 20; tDamage += 160; MOBMagic += 40; HPMULTI += 30; MPMULTI += 30; } else if (Type == 35) //Vigor Potion (sem skill — poção) { if (Affect[i].Time >= 1000000) { HPMULTI += 30; MPMULTI += 30; } else { HPMULTI += 10; MPMULTI += 10; } } else if (Type == 36) //Critical_Armor / Venom (Veneno) { *BuffState |= POISON; } else if (Type == 37) //Another_Soul (Ligação Espectral) { *AnotherSkill = 3 * (MOB->CurrentScore.Special[2] / 10 + 8); } else if (Type == 38) //Spirit_Change (Troca de Espírito) / Improved_Range { int useLvl = MOB->CurrentScore.Level; if (BASE_IsTranscended(OriginalFace) == 1) { if ((MOB->LearnedSkill[0] & LEARN_30) != 0) useLvl += 400; int mana = MOB->CurrentScore.MaxMp / 4; tMaxHp += mana + (MOB->CurrentScore.Special[2] / 2) + 2 * useLvl + 750; MOB->CurrentScore.MaxMp -= mana; } else { int mana = MOB->CurrentScore.MaxMp / 4 + (MOB->CurrentScore.Special[2] + useLvl) / 4; tMaxHp += mana + 750; MOB->CurrentScore.MaxMp -= mana; } } else if (Type == 41) //Flash / Clod_Attack { *BuffState |= FLASH; } else if (Type == 42) //Mystery_Magic (Magia Misteriosa) { MOBMagic += 20; } else if (Type == 45) //Ice_Binding (Aprisionamento de Gelo) { *BuffState |= 0x2000; } else if (Type == 48) //Last_Resistance (Última Resistência) { HPMULTI += Value; MOB->CurrentScore.Ac += Value * MOB->CurrentScore.Ac / 100; } else if (Type == 51) //HP buff (sem skill) { if (Value) tMaxHp += 5 * tMaxHp / 100; } else if (Type == 53) //TowerWarBuff (buff de Guerra de Torre / Siege) { if (Level >= 0 && Level < TOWERWAR_BUFF_ROWS) { const auto& row = g_pTowerWarBuff[Level]; for (int j = 0; j < TOWERWAR_BUFF_SLOTS; j++) { int bType = row.nType[j]; int bValue = row.nValue[j]; if (bType == 0 || bValue == 0) continue; switch (bType) { case 4: // HP flat bonus tMaxHp += bValue; break; case 26: // Attack Speed bonus attSpeed += bValue; break; case 54: // All Resistances bonus Resist[0] += bValue; Resist[1] += bValue; Resist[2] += bValue; Resist[3] += bValue; break; case 74: // All Specials bonus (cap MAX_SPECIAL_G) { int s0 = bValue + MOB->CurrentScore.Special[0]; int s1 = bValue + MOB->CurrentScore.Special[1]; int s2 = bValue + MOB->CurrentScore.Special[2]; int s3 = bValue + MOB->CurrentScore.Special[3]; if (s0 > MAX_SPECIAL_G) s0 = MAX_SPECIAL_G; if (s1 > MAX_SPECIAL_G) s1 = MAX_SPECIAL_G; if (s2 > MAX_SPECIAL_G) s2 = MAX_SPECIAL_G; if (s3 > MAX_SPECIAL_G) s3 = MAX_SPECIAL_G; MOB->CurrentScore.Special[0] = s0; MOB->CurrentScore.Special[1] = s1; MOB->CurrentScore.Special[2] = s2; MOB->CurrentScore.Special[3] = s3; } break; } } } } } if (face < 4) { tDamage += (MOB->CurrentScore.Str >> 1) + (MOB->CurrentScore.Dex / 12) + MOB->CurrentScore.Special[0]; if (faceindex % 10 <= 5) tDamage += MOB->CurrentScore.Level; else tDamage += (MOB->CurrentScore.Level * 2); } for (int i = 0; i <= 3; i++) { if (Resist[i] < 0) Resist[i] = 0; if (Resist[i] > MAX_RESIST_G) Resist[i] = MAX_RESIST_G; MOB->Resist[i] = (int16_t)Resist[i]; } if (DAMAGEMULTI != 100) tDamage = (tDamage * DAMAGEMULTI) / 100; if (HPMULTI != 100) { int PlusMaxHp = (tMaxHp * HPMULTI) / 100; if (PlusMaxHp > MAX_MAXHP_G) PlusMaxHp = MAX_MAXHP_G; tMaxHp = PlusMaxHp; } if (MPMULTI != 100) { int PlusMaxMp = (MOB->CurrentScore.MaxMp * MPMULTI) / 100; if (PlusMaxMp > MAX_MAXMP_G) PlusMaxMp = MAX_MAXMP_G; MOB->CurrentScore.MaxMp = PlusMaxMp; } if (StatePlusHp == TRUE) //Converte Metade do MP em HP { tMaxHp += MOB->CurrentScore.MaxMp / 2; MOB->CurrentScore.MaxMp /= 2; } if (regenHP < 0) regenHP = 0; if (regenHP > MAX_REGEN_G) regenHP = MAX_REGEN_G; MOB->RegenHP = (int16_t)regenHP; if (regenMP < 0) regenMP = 0; if (regenMP > MAX_REGEN_G) regenMP = MAX_REGEN_G; MOB->RegenMP = (int16_t)regenMP; movSpeed += RunSpeedBonus; if (movSpeed < 0) movSpeed = 0; if (movSpeed > MAX_MOVSPEED_G) movSpeed = MAX_MOVSPEED_G; int attFinal; if (face >= 4) { int mobAttSpeed = AttackSpeedBonus + MOB->CurrentScore.Dex / 5 + attSpeed; if (mobAttSpeed < 0) mobAttSpeed = 0; if (mobAttSpeed > MAX_MOB_ATTSPEED_G) mobAttSpeed = MAX_MOB_ATTSPEED_G; attFinal = (mobAttSpeed / 10) & 0xF; } else { attFinal = BASE_GetDiminishedAttackSpeed(MOB->CurrentScore.Dex) + attSpeed; } MOB->MultiHitThreshold = (int16_t)attFinal; MOB->CurrentScore.AttackRun = movSpeed + 16 * attFinal; int mobMerchant = MOB->Merchant; if (face >= 4) { if (MOB->Merchant >= 100 && MOB->Merchant < 200) mobMerchant = 8; } else { // Exp death penalty if (BASE_IsTranscended(OriginalFace) == 1 && (MOB->LearnedSkill[0] & LEARN_30) != 0) { long long curExp = g_pNextLevel_2[MOB->BaseScore.Level]; long long nextExp = g_pNextLevel_2[MOB->BaseScore.Level + 1]; int calcExp = (int)((nextExp - curExp) / 10); if (Ext1->Data[0] >= calcExp) MOB->CurrentScore.Ac /= 2; } else { long long curExp = g_pNextLevel[MOB->BaseScore.Level]; long long nextExp = g_pNextLevel[MOB->BaseScore.Level + 1]; int calcExp = (int)((nextExp - curExp) / 10); if (Ext1->Data[0] >= ((calcExp * 4) / 5)) MOB->CurrentScore.Ac /= 2; } } MOB->CurrentScore.Reserved = ((MOB->CurrentScore.Reserved & 240) | mobMerchant); MOB->SkillMagic = (int16_t)(MOBMagic / 4); if (tDamage > MAX_DAMAGE_G) tDamage = MAX_DAMAGE_G; MOB->CurrentScore.Damage = tDamage; if (tMaxHp > MAX_MAXHP_G) tMaxHp = MAX_MAXHP_G; MOB->CurrentScore.MaxHp = tMaxHp; if (MOB->CurrentScore.Hp > MOB->CurrentScore.MaxHp) MOB->CurrentScore.Hp = MOB->CurrentScore.MaxHp; if (MOB->CurrentScore.Mp > MOB->CurrentScore.MaxMp) MOB->CurrentScore.Mp = MOB->CurrentScore.MaxMp; } STRUCT_MOB_GLOBAL tem 1368 bytes STRUCT_ITEM_GLOBAL tem 12 bytes A maioria dos cálculos e bônus das skills estão ai, devidamente atualizados com a versão atual do Global.1 ponto
-
1 ponto
-
⚜️ WYD ORIGINAL ⚜️ JOGABILIDADE: SEMI PVP VERSÃO: 7.89 EXP: Easy DROP: Easy / Médio EVOLUÇÃO LIBERADA: Sub Celestial 200/200 CONEXÃO: 24/7 RATES COMPOSITORES: 50% LANÇAMENTO: 01/05 Às 19h ⚔️ Guerras e Eventos 👑 Arena Real - 🕒 10h, 12h, 15h, 17h, 19h, 21h, 23h. 📍 Localização: Porta PVP Armia 👑 Altar Real - 🕒 10h, 13h, 18h e 00h 📍 Localização: Altar de Noatum 👑 Boss Sagrado - 🕒 10h, 14h, 21h e 00h 📍 Localização: Saída de Noatum 👑 Boss Verid - 🕒 1h em 1h. 📍 Localização: Saída do Gelo 👑 Guerra de Torres - 🕒 21h. 📍 Localização: Erion 👑 Guerra entre Reinos (RvR) - 🕒 10h, 20h, 00h. 📍 Localização: Teleport Noatun 👑 Guerra de Cidades - Domingo 🕒 21h 👑 Guerra de Noatun - Domingo 🕒 22h 👑 Kefra - Quarta 🕒 23h 💡 Sistemas Exclusivos Droplist com filtro de drop Arena Real Sistema Guerra entre Reinos Player Info Ranking atualizado Pergaminho Água com salas individuais (indisponível no momento) Sistema de Balanceamento PVP e PVE Auto lembrança de login/senha Baú de carga com 4 slots Resoluções Widescreen sem distorções Loja desvinculada: Progrida livremente Loja de Donate: Acesse de qualquer lugar Novidades de NPCs: recicladores e compositores Novos slots: colar, cinto, traje montaria Sistema Revigorante (proteção de montaria) Fada Dourada: agrupador de itens, filtro e macro de água Interface em Full HD (Wide) Timer Green nas quests e Lan Houses Invocação fora do grupo Auto Grupo NPCs completos: Evoluções, Armas, Sets, Extrações e Montarias Itens Celestiais Montarias: SvaldFire, Sleipnir, Grifo Sangrento e Tigre de Fogo Novas Composições UP Pesadelo Free (Mortal / Arch) Fast UP Deserto, Água e Pesadelo (Celestial / SubCelestial) /novato /armia /azran /erion /gelo /pilar /donate /sogpoints /king /criar /expulsar /guildfame /guildindex 🌐 Nossos Links • Site: [Hidden Content] • Discord: [Hidden Content] • WhatsApp: [Hidden Content] • Facebook: [Hidden Content] Download Client: LINK SCAN: EXE: LINK LAUNCHER: LINK1 ponto
-
🚀 Confira as funções incríveis completamente gratuitas disponíveis no nosso hack! Com foco em performance, praticidade e diversão, você vai turbinar sua experiência como nunca antes! 🔥 🔹 ESP – Veja seus inimigos através das paredes! 🔹 Aimbot – Não erre tiro nos seus inimigos. 🔹 Remove Flash – Remove o efeito do Flash. 🔹 Remove Smoke – Remove a fumaça da Smoke. 🆓 Atenção! Algumas das funcionalidades listadas estão disponíveis gratuitamente por tempo limitado. No futuro, as funções free poderão ser reduzidas, conforme o desenvolvimento do projeto. 📸 Screenshots: 🔧 Como usar: É simples e rápido começar a usar: 1- Baixe o cliente. 2- Inicie o Counter Strike 2. 2- Assim que seu personagem aparecer na tela, abra o cheat e clique em “Run / Executar”. 3- A interface do cheat aparecerá no CS2 (Precisa estar em modo janela). 4- Clique em confirm e aguarde a incialização do cheat. 5- Pressione [Insert] para exibir ou ocultar o menu. 6- Aproveite todos os recursos e domine o jogo! ⚠️ Aviso: Ao executar o cliente, sempre clique com o botão direito e selecione “Executar como administrador” para evitar problemas de permissão. Certifique-se também de que o CS2 não esteja em modo tela cheia, pois isso pode causar falhas na exibição da interface do cheat. Extra (em casos de erro de permissão): Feche completamente a execução da steam e após isso execute a mesma como administrador, também de preferência a execução do Cs2 via atalho ao invés da execução direta na biblioteca da Steam. [Hidden Content] Erro ao executar o Cheat? Em alguns casos, é necessário desabilitar o Windows Defender, a proteção em tempo real e o antivírus instalado no sistema. Mesmo que nosso software não seja malicioso, os antivírus podem identificá-lo como uma ameaça falsamente (falso positivo), pois ele realiza operações avançadas de injeção na memória de outro processo — algo comum em cheats ou ferramentas legítimas de modificação de jogos. Isso faz com que algumas proteções bloqueiem o funcionamento correto do injetor ou até excluam arquivos essenciais automaticamente. Garantimos que o produto é seguro e limpo. Desativar temporariamente a proteção permite que a injeção ocorra corretamente. 🗓️ Hack Atualizado em: 03/04/20261 ponto
-
MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️1 ponto
-
UTILIZE O COOKIE-EDITOR PARA ACESSAR AS CONTAS! LEMBRA-SE DE SEMPRE INJETAR NA URL [Hidden Content] CASO TIVER DÚVIDAS BASTA ACESSAR O TÓPICO AQUI -> TUTORIAL DETALHADO 1º CONTA 2º CONTA 3º CONTA1 ponto
-
🚀 De DirectX 9 para DirectX 11: Vale a Pena Transformar Meu Servidor de WYD Nostálgico? Galera, tô pensando em fazer uma mudança radical no meu servidor de WYD (With Your Destiny)! Estou migrando o jogo do antigo DirectX 9 (da era das pedras, 2002!) para o DirectX 11 (bem mais moderno). Mas queria saber na prática: Quais os ganhos REAIS que vocês vão sentir? Vai ficar muito mais bonito ou é só hype? E a performance, melhora mesmo? Vale todo o trabalho de reescrever o código gráfico? Se você joga no meu servidor ou tem um próprio, vamos conversar sobre essa evolução! 👇 🎯 A RESPOSTA COMPLETA: Por Que Migrar para DX11 é um GAME CHANGER 📈 VISÃO GERAL DOS BENEFÍCIOS Benefício Impacto Para o Jogador 🎨 Gráficos Revolucionados Alto Visual completamente renovado ⚡ Performance Otimizada Alto Jogo mais fluido, menos travamentos 🔧 Compatibilidade Garantida Médio Funciona perfeitamente no Win 10/11 🚀 Vantagem Competitiva Alto Único servidor "WYD Remasterizado" 🎨 1. O SALTO VISUAL (O que VOCÊ vai ver) ✨ Efeitos que Fazem Diferença Tessellation: Monstros e armaduras com detalhes REAIS (não apenas textura pintada) Shaders Modernos: Metais que brilham, água que reflete, magias ESPETACULARES Anti-Aliasing Avançado: Adeus serrilhado! Tudo limpo e suave Texturas em Alta Resolução: Possibilidade de HD Packs que revitalizam TODO o jogo 🎮 Exemplo Prático: ⚡ 2. PERFORMANCE: Mais Estável, Mais Rápido 🚀 Melhorias Técnicas: ✅ Multithreading Otimizado: Usa todos os núcleos do seu processador ✅ Menos Travamentos: Frame rate constante mesmo com 100+ players na tela ✅ CPU Mais Livre: O jogo não engasga durante PvP ou boss raids ✅ Compatibilidade com GPUs Modernas: Placas novas (GTX 1000+, RTX, RX) vão VOAR 📊 Comparação Rápida: text DX9 (Antigo): • Engasgos em batalhas grandes • Só usa 1-2 núcleos da CPU • Drivers em "modo compatibilidade" DX11 (Novo): • Fluidez constante • Usa 4-8+ núcleos da CPU • Drivers nativos e otimizados 🔧 3. PARA O DESENVOLVEDOR (Por que tô fazendo isso) 🛠️ Vantagens Técnicas: Código Mais Limpo: Manutenção 10x mais fácil Ferramentas Modernas: Debug e otimização melhores Flexibilidade: Posso adicionar features novas (física realista, mais efeitos) Futuro-Proof: Pronto para Windows 12, 13... 💡 Recursos que Posso Implementar: Renderização por Instância: Exércitos de monstros sem lag Compute Shaders: Efeitos de magia CINEMÁTICOS Deferred Shading: Iluminação de AAA games Pós-Processamento: Bloom, profundidade de campo, HDR 🏆 4. A GRANDE VANTAGEM: DIFERENCIAL COMPETITIVO 🥇 No Mercado de Servidores Nostálgicos: Servidor Comum Nosso Servidor (DX11) Gráficos de 2004 Gráficos Remasterizados Experiência 100% original Nostalgia + Modernidade Público: Veteranos Veteranos + NOVOS JOGADORES Monetização padrão Itens cosméticos que REALMENTE brilham 🎯 Posicionamento Único: ⚠️ OS DESAFIOS (Transparência Total) 🔴 O Que Precisamos Superar: 🚧 Trabalho Intenso: Reescrever todo o motor gráfico 🎨 Conteúdo Extra: Talvez criar HD Packs para aproveitar 100% 🖥️ Requisitos Mínimos: Aumentam um pouco (DX11 = Windows 7+) 🧪 Testes, Testes e Testes: Tudo precisa ser revalidado 📅 Abordagem por Fases: text FASE 1 (AGORA): Protótipo - Uma cidade migrada FASE 2: Feedback da comunidade FASE 3: Migração gradual (mapas prioritários) FASE 4: Lançamento oficial "WYD Remasterizado" 💬 OPINIÃO DA COMUNIDADE 🤔 Para os Jogadores: Você prioriza performance ou gráficos? Teria interesse em contribuir com testes? Que área do jogo gostaria de ver primeiro em DX11? 👨💻 Para os Desenvolvedores: Já fez migração similar? Tem dicas? Vale a pena pular direto para DX12/Vulkan? 🎮 CONCLUSÃO FINAL Vale MESMO a pena? ABSOLUTAMENTE SIM. Não é só uma atualização técnica - é uma reimaginação do jogo que amamos. ✅ Resumo dos Ganhos: ✅ Grágicos de jogo moderno com a jogabilidade clássica ✅ Performance otimizada para hardware atual ✅ Diferencial ÚNICO no mercado ✅ Futuro garantido para os próximos anos ✅ Comunidade engajada com algo NOVO 💪 Meu Compromisso: Vou fazer essa migração com transparência total, ouvindo a comunidade e priorizando o que importa para VOCÊS. 📢 VAMOS CONVERSAR! Deixa nos comentários: O que mais te anima nessa migração? Tem preocupações específicas? Quer participar dos testes beta? Vamos construir o melhor WYD Remasterizado JUNTOS! 🚀 Postado por: [Seu Nome/Nome do Servidor] Servidor: [Nome do Seu Servidor] Discord: [Link do Discord] 🎯 TL;DR: Migrar para DX11 transforma seu WYD de "servidor nostálgico" para "experiência remasterizada premium" - melhor visual, performance e posicionamento único no mercado. #WYDRemasterizado #DX11Evolution1 ponto
-
ATENÇÃO! O CHEAT FICARÁ FREE ATÉ 01/05/2026,APROVEITE! Fala seus arr0mbados, trago para a comunidade um WALLHACK INDETECTÁVEL, já faz ANOS que utilizo e nunca desatualizou, joguem com responsabilidade! Sem enrolação, vamos direto ao ponto! 1 - EXECUTE O SEU POINT BLANK E LOGUE NA SUA CONTA; 2 - ATIVE O MODO JANELA (PARA O MELHOR FUNCIONAMENTO DO CHEAT, EVITANDO TRAVAMENTOS); 3 - EXECUTE O ARQUIVO "WALL PREMIUM - LOADER PB" COMO ADMINISTRADOR E FECHE A JANELA DO NAVEGADOR QUE ABRIRÁ; 4 - VOLTE PARA O POINT BLANK, O WALLHACK JÁ ESTARÁ ATIVO (OBS: NÃO EXISTE A OPÇÃO PARA ATIVAR/DESATIVAR). WALLHACK PREMIUM VITALÍCIO APENAS R$25,00 >> CLIQUE AQUI PARA COMPRAR! <<1 ponto
-
Cara é pura e simplesmente analise do binário do global... O Sniffer que disponibilizei, ajuda muito, fiz uma mudança nele e faço comparação automática das STRUCTS dos packets da TMProject e das que conhecemos com as atuais do Global, foi assim que descobri muita coisa, dai pra frente vc cria as structs no IDA e vai analisando função por função... Se tivesse uma equipe seria muito mais rápido, essa BASE_GetCurrentScore ai, todos os calculos são exatamente o que é usado hj no Global. Tbm implementei um sistema que posso editar ingame qualquer coisa do cliente, por exemplo quero saber o que um byte que desconheço na STRUCT_MOB modifica, simplesmente digito o comando mob.set e o que quero modificar e vejo visualmente no cliente o que mudou, então consigo saber exatamente o que cada campo da struct faz no jogo... por hora é só client side pq a ideia não é criar hack ou coisa assim, só conhecer realmente as structs do cliente, mas como conheço as keys usadas para tratar packets falsos, conseguimos facilmente criar packets validos e enviar para o servidor. aqui modifiquei a str da currentscore so de exemplo. é trabalhoso, mas funciona bem... Obviamente os comandos digitados só aparecem para mim...1 ponto
-
1 ponto
-
ASSINATURAS ATUALIZADAS Patrocinadora: streamingsbarato.com [Hidden Content] [Hidden Content] [Hidden Content] [Hidden Content] Assinatura será atualizada todos os meses.1 ponto
-
Mano não ta dando para acessar as conta do prime vídeo direto pede um código para validar a senha Tem um indiota que ta trocando as senhas direto palhaço criança sem conduta não tem limite mulecagem, o prime tá pedindo código1 ponto
-
Funções AIMBOT (extremamente configurável) ESP (Configurável) Memoria (básico = RICO DE BAN) Etapas de instalação e configuração Leia ou tomará BAN Passo 1: Configurar as opções de inicialização do Steam 1. Abra o Steam e acesse sua Biblioteca. 2. Clique com o botão direito do mouse no jogo (BloodStrike) e selecione Propriedades. 3. Na guia Geral , encontre Opções de Inicialização 4. Copie e cole este comando exatamente como está: cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %command%" Isso força o jogo a ser executado sem privilégios de administrador, impedindo varreduras profundas de processos. Etapa 2: UMBRA - Instalação e Gerenciamento 1. Execute o arquivo UMBRA.exe (como administrador, se exigido pelo seu sistema). 2. Na janela do UMBRA, você será solicitado a selecionar o caminho do jogo. Navegue até o seguinte diretório e selecione a pasta ou o executável principal: C:\Program Files (x86)\Steam\steamapps\common\BLOODSTRIKE (Ajuste o caminho se você tiver o Steam instalado em uma unidade ou local diferente.) Funções adicionais: - Reparar: Se encontrar problemas, você pode executar o UMBRA novamente, selecionar o mesmo caminho e usar o botão Reparar para verificar a integridade dos arquivos de cheats. - Desinstalar: Se desejar remover completamente o cheat, execute o UMBRA, selecione o caminho e clique em Desinstalar . Isso removerá todos os arquivos relacionados de forma segura. Etapa 3: Iniciar e carregar 1. Inicie o jogo normalmente pelo Steam (as opções de inicialização já devem estar configuradas). 2. Aguarde 10 segundos após o início do jogo. 3. Entre no LOOBY (principal) 4. digite `load` no console do jogo (se visível) ou no prompt de comando 5. Aguarde até que todos os recursos sejam inicializados corretamente. DOWNLOAD [Hidden Content] SCAN AQUI1 ponto
-
eu estou fazendo um conversor e editor de meshs ja em dx11, mesmo sendo mais trabalhoso vale a pena converter o cliente. da pra aprender muita coisa com a conversão.1 ponto
-
1 ponto
-
boa noite. galera estou atualmente editando a base do wyd rogue e estou com um problema que não estou conseguindo encontrar alguém poderia me ajudar? o problema e o seguinte. a minha ItemList.bin e ItemList.txt estão exatamente iguais mais o cliente parece que não está lendo a itemlist porque dentro da itemlist esta o id correto do item só que dentro do jogo se usar a id do item aparece outro item nao correspondente ao id. isso acontece só com alguns itens modificados não são todos. tipo que alguma coisa reescreve por cima do itemlist por exemplo o id do item e da itemlist da fada verde e 3900,Fada_Verde(3dias),2773.0,0.0.0.0.0,0,800,8192,0,17,EF_CLASS,255,EF_GRID,0,EF_MONTH,3,EF_HOUR,0,EF_DONATE,3 e dentro do game aparece um item de evento chamado guarda sol já procurei este item dentro da itemlist e nao existe a mesma coisa acontece com traje da bola de futebol e o pacman que no lugar deles aparece o traje de pogolbol azul e vermelho esses são os itens que eu percebi ate agora mais com certeza tem mais. a fada vermelha tbm e um item de evento que aparece no lugar dela. eu ja troquei a itemlist pra ver se era ela coloquei uma de outra source que funciona tudo certinho não resolveu ou seja o problema aparentemente não e da itemlist1 ponto
-
Boa noite, pessoal! Depois de um bom tempo sem postar nada público, estou de volta com um novo projeto que desenvolvi nos últimos dias, feito especialmente para a comunidade do CROSSFIRE BRASIL. Este projeto é totalmente GRATUITO e já está pronto para uso! 🎉 Agradecimento especial: Antes de começarmos o tutorial, gostaria de parabenizar a WebCheats pelos seus 20 anos de história! Uma comunidade que continua firme até hoje. 👏 Tutorial de Instalação e Uso 1️⃣ Baixe o arquivo .zip e extraia todos os arquivos em uma pasta de sua preferência. 2️⃣ Execute o programa WR Loader V.[WiniciosCheatCFBR_0.1].exe como administrador ⠀✔️ Aguarde até todos os drivers serem carregados com sucesso. 3️⃣ Você verá a mensagem: ⠀💬 Aguardando CrossFire... 4️⃣ Inicie o jogo normalmente. 5️⃣ Após o jogo abrir, execute o Controller.exe como administrador ⠀👉 Isso abrirá o menu de configurações do cheat. 6️⃣ Pressione F10 para ABRIR ou FECHAR o menu dentro do jogo. Prova de Funcionamento ✅ Tudo pronto! Agora é só aproveitar. Se tiver dúvidas ou sugestões, fique à vontade para comentar! Apenas Lembrando o Cheat foi feito para não ser detectado, porem não posso dar uma garantia de quanto tempo pode durar, e lembre - se isso e algo gratuito ! Abraços! Windows 10 1607 to Windows 11 24H2 26100.4351 ✔️ Creditos: WiniciosRocha / WRCheats ! [Hidden Content]1 ponto
Esta tabela de classificação está definida para São Paulo/GMT-03:00
