Jump to content
🥇 [Exclusivo] Seja um Membro VIP EXTREME! ×

Search the Community

Showing results for tags 'wyd'.

The search index is currently processing. Current results may not be complete.
  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Anunciantes
    • Fox CHEATS
    • 🔗 store.rubiproject.com
    • WYD LOST
  • Anúncios e Feedbacks
    • Regras
    • Anúncios e Novidades
    • Área do Usuário
    • Apresente-se aqui!
    • Tutoriais WC
    • Seja um Membro Vip
  • Beta Zone - Áreas Temporárias
    • Lineage 2
    • Inteligência Artificial
    • Segurança e Investigação
    • Dev
  • MMO Zone
    • WYD - With Your Destiny
    • Grand Chase
    • League of Legends
    • Outros MMO em Geral
    • RPG Zone - Lixão
  • Shooter Zone
    • Counter Strike
    • Blood Strike
    • Valorant
    • Cross Fire
    • Point Blank
    • Outros Shooters em Geral
    • Battle Royale
    • Shooter Zone - Lixão
  • Outros Games Zone
    • Minecraft
    • Outros Games
    • Outros Games Zone - Lixão
  • Mobile
    • Mobile - Downloads de Cheats / Utilitários
    • Mobile - Tutoriais
    • Mobile - Servidores Privados
    • Mobile - Dúvidas / Pedidos
    • Mobile - Bate Papo
  • Info Zone
    • Programação
    • Cracking
    • Tech
    • Info Zone - Lixão
  • Design Zone
    • Galeria
    • Fábricas
    • Tutoriais
    • Recursos
    • Presentes, Leilões, Vendas e Doações
    • Suporte Design
    • Bate Papo Design
    • Depósito
  • Entretenimento & Diversão
    • Serviços Pagos
    • Notícias do Mundo
    • Bate Papo
    • Discussões
    • Mangás & Animes
    • Mídia
  • MarketPlace
    • Divulgação de Serviços
    • Contrate Serviços de Freelancer
    • Contas, Skins e Cheats
    • Outros
  • Old WC's Bate Papo
  • 【FREE FIRE】▄︻┻┳═一's Fórum do Clube
  • Bug Abuser's Tópicos

Product Groups

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Discord


User Title


Data de Criação

Between and
  1. Img wyd ⚔️ IDLE WYD — A lenda voltou, agora no seu tempo! O IDLE WYD é um MMORPG inspirado na nostalgia dos grandes clássicos como WYD e MU, mas com uma proposta diferente: seu personagem continua evoluindo mesmo quando você não está jogando. 🎮 O que você encontra no jogo: - ⚔️ Sistema Idle — continue caçando e evoluindo mesmo offline - 🏰 Torre Sem Fim — avance pelos andares e dispute o ranking - ⚔️ PvP Arena — enfrente outros jogadores e conquiste recompensas - 👹 Caça, monstros e Bosses - 💎 Itens e equipamentos - 🏆 Rankings e competição entre jogadores - 🛒 Market — compre, venda e movimente a economia do jogo - 💰 Sistema Donate com possibilidade de conversão em barras para negociação - 👑 VIP de 30 dias — até 8 horas de caça mesmo com o jogo fechado - 🌎 Multiplayer gratuito e ilimitado 🔥 E o melhor: o jogo está em BETA! Estamos construindo o IDLE WYD junto com a comunidade, recebendo feedback e aprimorando a experiência constantemente. Se você curte WYD, MU, MMORPGs, farm, evolução, PvP e aquela sensação de começar uma jornada do zero, talvez esse seja o seu próximo jogo. 🌐 Acesse: IDLEWYD.XYZ ⚔️ Entre no Beta. Crie seu personagem. Comece sua jornada. WHATS: [Hidden Content]
  2. 🔹Versão: 7.97 (Exclusiva) 🔹Experiência & Drop: Medium (Progressão pensada para o desafio real) 🔹Quests Mortais: Lv. 40 ao 351 padrao 🔸SISTEMAS EXCLUSIVOS & CONTEÚDO 🔸PvP & Dungeons 🔸Zona RVR 🔸Guerra de Torre & PvP Renovados: Mecânicas dinâmicas para batalhas de guildas 🔸Inovações & Mecânicas 🔸Sistema de Aura 🔸Passe de Batalha 🔸Indicacão premiada via site 🔸Sistema RMT integrado 🔸Sistemas Visuais: Otimização gráfica para qualquer PC 🔸Transparência 🔸DropList In-game 🔸Filtro de Drop & Info Player: Controle total dos seus itens e transparência 🔸Eventos & Economia 🔸Bosses Diários: Mais de 6 com drops valiosos por dia 🔸Economia Estabilizada: Múltiplas rotas sustentáveis de Farm e Up 🔸ESTABILIDADE, COMUNIDADE E LONGEVIDADE 🔹Discord Oficial: [Hidden Content] 🔹Site: [Hidden Content] 🔹Grupo oficial [Hidden Content] O WYD Shogun foi planejado para durar. Nossa equipe é dedicada, experiente e focada na saúde do servidor a longo prazo. Atualizações Constantes: Melhorias e balanceamentos frequentes a cada fase do game
  3. Olá comunidade! Gostaria de contribuir com um tutorial um pouco atualizado referente a como adicionar novas armas no wyd. Vale para set e armas também. Vamos lá! A estrutura da ItemList do wyd é cheio de itervalos, e muitos valiosos por sinais kkk... Algumas pessoas ja tentaram adicionar novos itens, como sets e armas mas percebeu que em alguns ID's o item só aparecia para você. Isso é pq na estrutura da ItemList o ID selecionado não tem a função de um item "visual". Mas se vocês pararem para pensar a ItemList tem varios intervalos e estes intervalos não estão ali por acaso, são espaços pré-configurados para receber novos itens... Então vamos la para o tutorial: 1- Primeira Etapa: Antes de iniciar você vai precisar dos conversores. Aqui na WebCheats possui todos estes disponíveis para dowload. Editor de ItemList, ItemName(Caso utilize), Editor de MeshTextureList.bin, Editor de ItemIcon.bin, conversor .wyt para tga. Após converter a ItemList para .csv abre ela. Avalie na sua ItemList ID's vagos próximos a ID's que tem Set's ou Armas. Repare que existe um intervalo do ID 1016 ~ 1100 vagos. Todos estes ID's eles são utilizados para itens visuais como Armas e Set's. Aqui será o local onde vamos inserir as novas armas!! 2- Segunda Etapa: Escolha o estilo da arma que queira adicionar, copiando de uma já existente. No caso aqui estarei adicionando as novas armas que surgiu no global, tem também as do asgard, enfim... as armas que vc quiser adicionar. 1016,Machado_Frog,2959.0,285.0.0.0.0,41,5000,192,2491,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,505,EF_RANGE,2,EF_WTYPE,11,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1017,Arco_Pomba,2960.0,290.0.0.0.0,42,5000,64,2551,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,597,EF_RANGE,5,EF_WTYPE,101,EF_ATTSPEED,1,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1018,Garras_Batatinhas,2961.0,282.0.0.0.0,43,5000,64,2611,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,683,EF_RANGE,1,EF_WTYPE,41,EF_AC,55,EF_MOBTYPE,9,EF_ITEMLEVEL,6,EF_DEX,160 1019,Lança_Peixe_Espada,2962.0,290.0.0.0.0,44,5000,64,2671,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,457,EF_RANGE,2,EF_WTYPE,21,EF_MAGIC,107,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1020,Espetinho_de_Salsicha,2963.0,285.0.0.0.0,45,5000,192,2731,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,503,EF_RANGE,2,EF_WTYPE,1,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1021,Mc_Burger,2964.0,284.0.0.0.0,46,5000,64,2791,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,530,EF_RANGE,4,EF_WTYPE,103,EF_ATTSPEED,1,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1022,Cajado_CataVento,2965.0,288.0.0.0.0,47,5000,192,2863,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,289,EF_RANGE,1,EF_WTYPE,31,EF_MAGIC,68,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1023,Bastão_PiuPiu,2966.0,284.0.0.0.0,47,5000,64,2859,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,391,EF_RANGE,2,EF_WTYPE,32,EF_MAGIC,111,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1024,Sombrinha,2967.0,290.0.0.0.0,48,5000,64,2895,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,753,EF_RANGE,2,EF_WTYPE,3,EF_MOBTYPE,9,EF_ITEMLEVEL,6,EF_STR,200 1025,Martelo_do_Chapolin,2968.0,290.0.0.0.0,49,5000,64,2935,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,760,EF_RANGE,2,EF_WTYPE,13,EF_MOBTYPE,9,EF_ITEMLEVEL,6,EF_CRITICAL,50 1026,Escudo_de_Pizza_Calabreza,2969.0,231.0.0.0.0,51,5000,128,0,0,EF_CLASS,255,EF_GRID,0,EF_AC,211,EF_MOBTYPE,9,EF_ITEMLEVEL,5 1027,Machado_Halloween,2970.0,285.0.0.0.0,41,5000,192,2491,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,505,EF_RANGE,2,EF_WTYPE,11,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1028,Arco_Halloween,2971.0,290.0.0.0.0,42,5000,64,2551,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,597,EF_RANGE,5,EF_WTYPE,101,EF_ATTSPEED,1,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1029,Garra_Halloween,2972.0,282.0.0.0.0,43,5000,64,2611,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,683,EF_RANGE,1,EF_WTYPE,41,EF_AC,55,EF_MOBTYPE,9,EF_ITEMLEVEL,6,EF_DEX,160 1030,Lança_Halloween,2973.0,290.0.0.0.0,44,5000,64,2671,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,457,EF_RANGE,2,EF_WTYPE,21,EF_MAGIC,107,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1031,Espada_Halloween,2974.0,285.0.0.0.0,45,5000,192,2731,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,503,EF_RANGE,2,EF_WTYPE,1,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1032,Cruz_Halloween,2975.0,284.0.0.0.0,46,5000,64,2791,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,530,EF_RANGE,4,EF_WTYPE,103,EF_ATTSPEED,1,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1033,Cajado_Halloween,2976.0,288.0.0.0.0,47,5000,192,2863,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,289,EF_RANGE,1,EF_WTYPE,31,EF_MAGIC,68,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1034,Bastão_Halloween,2977.0,284.0.0.0.0,47,5000,64,2859,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,391,EF_RANGE,2,EF_WTYPE,32,EF_MAGIC,111,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1035,Sabre_de_Halloween,2978.0,290.0.0.0.0,48,5000,64,2895,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,753,EF_RANGE,2,EF_WTYPE,3,EF_MOBTYPE,9,EF_ITEMLEVEL,6,EF_STR,200 1036,Martelo_Halloween,2979.0,290.0.0.0.0,49,5000,64,2935,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,760,EF_RANGE,2,EF_WTYPE,13,EF_MOBTYPE,9,EF_ITEMLEVEL,6,EF_CRITICAL,50 1037,Escudo_Halloween,2980.0,231.0.0.0.0,51,5000,128,0,0,EF_CLASS,255,EF_GRID,0,EF_AC,211,EF_MOBTYPE,9,EF_ITEMLEVEL,5 3- Terceira Etapa: Após adicionar na itemlist e itemname os itens, precisamos acrescentar as meshs. Abre o conversor de sua escolha, eu estou utilizando o W2_-_MeshtextureList. Procure um espaço vazio e coloca o nome dos arquivos. Exemplo: mesh\aandclaw03.wys; O Registro permanece como "N". 5- Quinta Etapa: Ao registrar as Mesh's agora é a etapa muito importante. Definir o ID desta mesh para que a Itemlist puxe. Para isso abre sua pasta Mesh em seguida procure o arquivo> MeshList.txt e vai até ao ultimo número sequencial. No meu caso o próximo seria a partir do 2924. Feito isso coloque os nomes dos arquivos seguindo a sequencia. 6- Sexta etapa: Após adicionar os ID's no MeshList.txt. Volta para a Itemlist onde criou os itens e vai adicionando os ID's. Mas onde alterar? 1016,Machado_Frog,2959.0,285.0.0.0.0,41,5000,192,2491,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,505,EF_RANGE,2,EF_WTYPE,11,EF_MOBTYPE,9,EF_ITEMLEVEL,6 1027,Machado_Halloween,2970.0,285.0.0.0.0,41,5000,192,2491,0,EF_CLASS,255,EF_GRID,0,EF_DAMAGE,505,EF_RANGE,2,EF_WTYPE,11,EF_MOBTYPE,9,EF_ITEMLEVEL,6 Repare os ID's em Verde. É aqui que você insere eles. 7- Sétima Etapa: Após inserir todos os ID's e os itens de sua escolha, Salva a MeshTextureList.bin, Converta novamente a itemlist e itemname, salva a MeshList.txt e jogue os arquivos das armas na pasta Mesh. Também defina o Icon de sua escolha Salva o arquivo .wyt na pasta UI e o itemicon.bin na pasta principal. Prontinho seu item estará disponível para os seus jogadores. Espero ter ajudado vocês! Em breve estarei fazendo um vídeo com isso e outras coisas. Segue alguns Prints
  4. *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]
  5. ⚔️ 𝗦𝗼𝗯𝗿𝗲 𝗱𝗼 𝗦𝗲𝗿𝘃𝗶𝗱𝗼𝗿 🔸 Versão: Clássica 🔸 Experiência: Médio / Médio 🔸 Drop: Médio / Médio 🔸 Progressão dinâmica 🔸 Quests Mortais: Do Lv. 40 até o 351 🔸 Diversas mecânicas 🔥 𝗦𝗜𝗦𝗧𝗘𝗠𝗔𝗦 𝗘𝗫𝗖𝗟𝗨𝗦𝗜𝗩𝗢𝗦 O servidor foi construído para oferecer uma experiência diferenciada: 🔹 Codex 🔹 Mineração 🔹 Pescaria 🔹 Dungeon Guilda 🔹 Gemas Mágicas 🔹 Montarias Lendárias 🔹 Consumíveis Exclusivos 🔹 Arena para até 104 jogadores 🔹 Mercado Global 🔹 Painel Guilda 🔹 Loja de Guilda 🔹 Info do Jogador 🔹 World Bosses 🔹 LAN Reformulada 🔹 Guerra de Torres Reformulada 🔹 Guerra de Noatun Reformulada 🔹 Castelo de Loki 🔹 Sistema de Roleta 🔹 Passe de Batalha completo 🔹 VIP para qualidade de vida do jogador 🔹 Sistema de tradução em tempo real 🔹 Drop 100% refeito do zero 🏰 𝗖𝗢𝗠𝗨𝗡𝗜𝗗𝗔𝗗𝗘, 𝗚𝗨𝗜𝗟𝗗𝗔𝗦 𝗘 𝗟𝗢𝗡𝗚𝗔 𝗩𝗜𝗗𝗔 Poderíamos repetir o mesmo discurso de sempre... "Não somos um servidor de 3 meses" "Sem Pay2Win" "PvP balanceado" Mas você já cansou de ler isso. E a gente também. A diferença é simples: Aqui você não vai ouvir promessa, vai acontecer. Sem sistema quebrado Sem vantagem comprada Sem conteúdo que morre em semanas Aqui cada conquista é suada Cada guerra tem peso Cada jogador faz diferença Se você quer mais do mesmo, esse não é o seu servidor. Agora, se você quer um desafio de verdade... Bem vindo ao Mystic Destiny! Projetos & Oportunidades 🔸 Programa de Criadores de Conteúdo 🔸 Auxílio para Guildas 🔸 Vagas para Divulgadores Quer crescer junto com o servidor ? Aqui você tem espaço. 📷 𝗜𝗠𝗔𝗚𝗘𝗡𝗦 𝗗𝗢 𝗦𝗘𝗥𝗩𝗜𝗗𝗢𝗥 🔗 𝗘𝗡𝗧𝗥𝗘 𝗡𝗢𝗦 𝗖𝗔𝗡𝗔𝗜𝗦 𝗢𝗙𝗜𝗖𝗜𝗔𝗜𝗦 Site: [Hidden Content] Discord: [Hidden Content]
  6. 🌑 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 |
  7. Recentemente comecei a ter problema no meu servidor com um aplicativo que alterava o MAC utilizado pelo cliente e também redirecionava a conexão através de proxy. Isso estava permitindo que alguns jogadores abusassem de determinadas mecânicas e acabassem prejudicando o servidor. Estudando um pouco, percebi que dava para criar uma proteção relativamente simples. Sem entrar em engenharia reversa, estudando algumas funções nativas do Windows, consegui identificar a alteração e bloquear o login antes da conexão com o servidor. Esse tipo de conhecimento pode ajudar outros projetos e também incentivar melhorias nas proteções do WYD, resolvi disponibilizar o código e o passo a passo do funcionamento. No repositório deixei a implementação, explicação da proteção, exemplos de integração, testes e o comportamento do bloqueio. GitHub: [Hidden Content] A proteção atual é focada nessas alterações de IAT, mas também deixei algumas ideias para evolução, como detecção mais genérica de módulos injetados, revalidação depois do login e integração com o TMSrv. Extra: No seu bloqueador de VPN/PROXY bloqueie também IP's marcados como datacenter/hosting. Quem quiser testar em outras sources, sugerir melhorias ou contribuir com código, as contribuições são bem-vindas.
  8. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  9. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  10. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  11. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  12. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  13. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  14. Proposta de Melhoria no Sistema de Chat do WYD Venho por meio deste apresentar uma iniciativa de aprimoramento no sistema de chat do jogo WYD (With Your Destiny), com o objetivo de modernizar a comunicação entre os jogadores e proporcionar uma experiência mais dinâmica, organizada e funcional. A principal inovação consiste na criação de um novo sistema de chat que permite a vinculação direta de itens às mensagens enviadas. Com essa funcionalidade, o jogador pode “linkar” um item no chat, possibilitando que outros usuários visualizem suas informações de forma rápida e prática. Essa melhoria facilita significativamente negociações, trocas, avaliações de equipamentos e discussões estratégicas sobre builds e atributos, tornando a interação mais eficiente e intuitiva. Além disso, o novo sistema implementa suporte a emojis, ampliando as possibilidades de expressão dentro do ambiente do jogo. Essa funcionalidade contribui para uma comunicação mais clara, descontraída e alinhada aos padrões modernos de interação digital, aproximando a experiência do jogador às plataformas contemporâneas de mensagem. O projeto ainda se encontra em fase de desenvolvimento, com ajustes e otimizações em andamento para garantir estabilidade, desempenho e integração adequada com os demais sistemas do jogo. A proposta é entregar uma solução robusta, organizada e escalável, que possa futuramente receber novas funcionalidades. Essa melhoria representa um avanço significativo na usabilidade e na qualidade da comunicação dentro do WYD, reforçando o compromisso com a evolução contínua do sistema e com a melhor experiência possível para a comunidade de jogadores. Discord
  15. MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️
  16. 🎯 SOBRE O SERVIDOR Pacote completo da versão 7.59, ideal para quem busca um projeto estável, moderno e totalmente funcional. Sistemas atualizados, desempenho otimizado e inúmeras funções prontas para uso. 📌 SISTEMAS PRINCIPAIS 🔄 Sistema RECONNECT 📝 Sistema de Missão 👹 Sistema de Boss 👤 Info Player 🎟️ Passe de Batalha 💧 Macro para Pergaminhos de Água 🐴 Painel de Skins de Montarias 🐣 Sistema de Novato (Painel de Introdução) ⚒️ Composição fora da MixList 🎣 Sistema de Pescaria 🗡️ Evento de Hit 🌍 Evento Teleporte (igual global) 🛒 Loja Donate 🟦 Lojas de Moedas Especiais ⚔️ Duelos com Apostas 🛡️ Anti-Bot LAN 🐾 Pets Novos + Suporte para Adicionar Mais 👗 TODOS os trajes do Global ⚔️ SISTEMAS DE GUERRA 🔥 GUERRA DE TORRE 1 🔥 GUERRA DE TORRE 2 🔥GUERRA DE GUILD 🔥GUILD ZONE WAR 🔥RvR - REINOS VS REINOS 🔥BATALHA REAL / ARENA REAL 🔥COLISEU 🛠️ SISTEMAS DE ADMINISTRAÇÃO 🛡️ SEGURANÇA E PROTEÇÃO 🛡️ Anti-Cheat Avançado 🔐 Proteção de Arquivos do Cliente ❌ Auto-Fechamento ao Detectar Hack 🔨 Banimentos 📞 INTERESSADOS CHAMAR NO DISCORD → noiteadentro Servidor foi comprado a algum tempo porem nunca foi aberto por mim, tem servidores online com essa mesma base. Tem muito mais sistemas a base que não esta escrito aqui! Sistema totalmente fora do mysql!
  17. 🛡️ Nordic War Legends - Desperte o Guerreiro em Você! 🛡️ Embarque em uma jornada épica no nosso servidor Nordic War Legends, inspirado no clássico WYD versão 7.56 ! Experimente batalhas intensas de torre de segunda a sexta-feira, e domine a feroz guerra de cidade e Noatun às 20h e 21h todo domingo. ✨ Recursos Exclusivos: 🎁 Utilize o comando /presente para receber itens especiais e impulsionar sua jornada desde o início! 🌟 Explore um mundo com drop de itens médio, experiência médio/hard e desafios de composições hard, proporcionando uma experiência envolvente e desafiadora. 🏹 Descubra um ambiente autêntico e imersivo, sem trajes extravagantes ou firulas – mergulhe em uma atmosfera totalmente nórdica e medieval! 🤺 Classes Balanceadas: Escolha entre classes estrategicamente equilibradas para uma experiência de jogo justa e emocionante. 🕰️ Disponibilidade 24/7: Nosso servidor está online 24 horas por dia, 7 dias por semana, para que você possa se aventurar a qualquer momento. 🔥 Double XP nos Finais de Semana: Acelere sua evolução com double XP ativo todos os finais de semana. Prepare-se para alcançar novos patamares de poder! 🌐 Junte-se à Comunidade: Faça parte de uma comunidade vibrante de jogadores apaixonados. Compartilhe estratégias, forme alianças e desafie-se em Nordic War Legends! 🌐 Visite nosso site: www.nordicwarlegends.com.br 🔗 Discord: [Hidden Content] 📱 WhatsApp: [Hidden Content] 📆 Atenção: O download estará disponível apenas no dia de lançamento, em 18/12/2023. Prepare-se para a grande jornada que o Nordic War Legends reserva para você! 🚀 Não perca mais tempo! Seja parte desta jornada extraordinária. Faça o download dia 18 e prepare-se para viver a saga nórdica definitiva. Nordic War Legends - onde a coragem encontra a lenda! ⚔️ Scan(WYD.exe)
  18. Ta esperando oque para abrir seu próprio servidor ? a sua oportunidade chegou! Contato WhatsApp: [Hidden Content] Contato via discord: yokoshen_lord Mais informações do sv acesse: [Hidden Content]
  19. Draw Your Destiny Versão: 7.56 Nível de Experiência (EXP): Médio / Hard Taxa de Drop: Médio Conexão: 24/7 Taxas de Compositores: 40% Horários das Guerras: Guerra de Noatun: Domingo às 21h Guerra de Torres: Segunda a sexta, às 21h Guerra de Cidades: Domingo às 20h Comandos acrescentados além dos nativos da versão: /senha XXXX - Para definir a senha do grupo /entrar nick senha - Para entrar no grupo /armia - Voltando para cidade de armia e cobrando 2kk por uso do comando. /shop - Levando o char para lojas de donates /saldo - para saber o saldo de donates /novato - Entregando itens imóveis para ajudar no inicio do servidor Nosso servidor estará online 24 horas por dia, 7 dias por semana, para que você possa se aventurar a qualquer momento. 🔥 Dupla XP nos Finais de Semana: Aproveite o dobro de experiência nos finais de semana para acelerar sua jornada e enfrentar os desafios com ainda mais confiança! Sistemas BARRAS MITRIL 100% TODAS AS FADAS FUNCIONANDO PERFEITAMENTE TRAJES DA VERSÃOS ESTARÁ DISPONIVEL MESTRE GRIFO FUNCIONANDO 100% IGUAL O ORIGINAL PISTAS DE RUNAS 100% LAN N/M/A - PARA FARMA GOLD ENTREGANDO MOEDAS PARA COMPRA A CADA 5 MIN COM LOJINHA ABERTA PORÇÃO REVIGORANTE TRANSFORMANDO SUA MONTARIA IMORTAL E MUITO MAIS Prepare-se para uma aventura épica na versão 7.56 de WYD e torne-se um verdadeiro herói neste mundo medieval!
  20. ~ W Y D C O S M O S ~ • SERVIDOR ONLINE • LANÇOOOU - Discord: Clique Aqui Visite agora mesmo nosso site: www.wydcosmos.com.br Primeiras impressões do primeiro dia de testes(13/04/2025): "Então, o que posso dizer no geral? Parece bom e moderno, pode ser confuso no começo por causa de diferentes locais dos novos NPCs, mas as pessoas vão se acostumar. A jogabilidade é fluida, sem lag. Vejo todas as suas ideias no jogo mesmo sem elas presentes. Vai ser ótimo, só não exagere nos NPCs, pois pessoas preguiçosas (leia-se 90% dos jogadores de WYD) ficarão decepcionadas. Dá uma sensação boa quando você entra no servidor, Dá para sentir que o coração foi colocado para fazê-lo, e não é um servidor voltado para ganhar dinheiro. Não posso dizer mais nada no momento, não joguei por muito tempo e não posso dizer nada sobre experiência, itens ou balanceamento de classes. No geral, um bom trabalho para esta fase do que é (visual e posicionamento). Dou uma nota honesta de 9/10. " Junto com você, pretendemos expandir esse Multiverso para novas sagas e histórias e versões. WYD COSMOS © Todos os Direitos Reservados. "Palco onde heróis vivem epopeias."
  21. Site do Servidor; [Hidden Content] Instagram Oficial; [Hidden Content] JA ESTA LIBERADO O BETA SEASON DO WYD WAR VENHA JA COM SEUS AMIGOS E SUA GUILD Facebook Oficial; [Hidden Content] TikTok Oficial; [Hidden Content] Discord; [Hidden Content] Email de contato; [email protected] Grupo Whatsapp; [Hidden Content] Youtube do game [Hidden Content]
  22. 📍LANÇAMENTO DIA 03/01/26 - 18:00H 🗡VOLTANDO AOS VELHOS TEMPOS🗡 🟢BONIFICAÇÕES PARA QUEM TROUXER GUILDA 📍SERVIDOR MEDIO/MEDIO 📍Links Site/Grupo/Discord: -> HISTORY LINKS <- BEST QUALITY SERVER 8.89✅|| GUERRAS ⚔️|| REINOS⚜️ 🔥 TRAGA SUA GUILDA PARA O MELHOR SV# 🎪 Sistema de Loja fantasma 📜 Sistema de Player Info 📜 Sistema de Traja de Montaria 📜 Sistema de Raridade na Montaria 🏹 Sistema de Coliseu 🏹 Sistema de Arena Real Times 🏹 Sistema de RvR refeito 🔍 Sistema de Droplist in game 🎲 Sistema de Conjunto de Item 🎲 Sistema de Skins 🎲 Sistema de Balanceio 🎲 Sistema de AutoMessagem 👑 Otimização do Jogo 👑 Sistema de PvP Balanceado 👑 Diversos outros sistemas de Qualidade ⚜️ Suporte ao jogador excelente ⚜️ Jogabilidade Incrível e única ⚜️ Drop de GOLD Convite Lan entre outras formas ⚜️ Macro Agua & 60 Salas Exclusivas de Agua ⚜️ AntHack & AntDDoS ⚜️ Estabilidade e Otimização do Jogo ⚜️ Eventos dinâmicos ⚜️ Equipe reconhecida por ótimo trabalho de desenvolvimento do jogo na comunidade By: Yokoshen ✅Administrador de Boa procedência ✅Analise de virus(scan) - wyd.exe: hhttps://www.virustotal.com/gui/file/77e58423fde16073a410b22a9b921bb5a85e5b6b3e92de661cee4f33faa1834f?nocache=1
  23. 📍LANÇAMENTO DIA 29/05/26 - 18:30H 📍BETA DIA 24/04/26 - 18:30H 🗡VOLTANDO AOS VELHOS TEMPOS🗡 🟢BONIFICAÇÕES PARA QUEM TROUXER GUILDA 📍Links Site/Grupo/Discord: [Hidden Content] [Hidden Content] [Hidden Content] BEST QUALITY SERVER 10.9✅|| GUERRAS ⚔️|| REINOS⚜️ 🔥 TRAGA SUA GUILDA PARA O MELHOR SV# 📜 Sistema de Anuncio de equips e emoji no chat 🎪 Sistema de Loja fantasma 📜 Sistema de Player Info 📜 Sistema de Traja de Montaria 📜 Sistema de Raridade na Montaria 🏹 Sistema de Coliseu 🏹 Sistema de Arena Real Times 🏹 Sistema de RvR refeito 🔍 Sistema de Droplist in game 🎲 Sistema de Conjunto de Item 🎲 Sistema de Skins 🎲 Sistema de Balanceio 🎲 Sistema de AutoMessagem 👑 Otimização do Jogo 👑 Sistema de PvP Balanceado 👑 Diversos outros sistemas de Qualidade ⚜️ Suporte ao jogador excelente ⚜️ Jogabilidade Incrível e única ⚜️ Drop de GOLD Convite Lan entre outras formas ⚜️ Macro Agua & 60 Salas Exclusivas de Agua ⚜️ AntHack & AntDDoS ⚜️ Estabilidade e Otimização do Jogo ⚜️ Eventos dinâmicos ⚜️ Equipe reconhecida por ótimo trabalho de desenvolvimento do jogo na comunidade By: Yokoshen ✅Administrador de Boa procedência ✅Analise de virus(scan) - wyd.exe: [Hidden Content] Apresentação
  24. ⚔️ HEROES OF ASGARD EASY - O PRÓXIMO CAPÍTULO COMEÇA EM BREVE! ⚔️ 💰 O servidor Heroes já entregou mais de *R$ 16.800,00* em premiações para as guildas vencedoras ao longo de suas temporadas. 🏆 Sua guilda estará entre as próximas campeãs? 📅 *Lançamento Oficial* 03/07 às 20h00 Reúna seus amigos, fortaleça sua guilda e prepare-se para disputar guerras, arenas e eventos que premiam os melhores jogadores do servidor. 🔥 BETA PREMIADO EM ANDAMENTO 🔥 O Beta permanecerá online até *30/06*, valendo recompensas exclusivas para os jogadores mais dedicados. 🏅 Os 10 primeiros colocados do Ranking de Evolução receberão: 🎁 1 Pacote Especial Exclusivo no lançamento oficial. ⚔️ TORNEIO PvP DOS CAMPEÕES ⚔️ Ao final do Beta, os 4 primeiros colocados do Ranking de Evolução disputarão um torneio PvP especial. Premiação: 🥇 1º Lugar — 1.000 Cash 🥈 2º Lugar — 500 Cash 🥉 3º Lugar — 250 Cash As recompensas serão entregues no lançamento oficial do servidor. ━━━━━━━━━━━━━━━━━━ 📢 ESTAMOS CONTRATANDO Procuramos: * Divulgadores * Criadores de Conteúdo * Streamers * Parceiros para a comunidade Entre em contato com nossa equipe para mais informações. ━━━━━━━━━━━━━━━━━━ 🌐 Site Oficial: www.heroesofasgard.com 📱 Grupo Oficial WhatsApp: [Hidden Content] 🌐Scan do .exe: [Hidden Content] 1/71 - Falso Positivo ━━━━━━━━━━━━━━━━━━ ⚔️ Heroes of Asgard Easy 📅 Lançamento: 03/07 às 20h00 Sua história será escrita no campo de batalha. Sua guilda conquistará a glória?
  25. 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!
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.