Ir para conteúdo

Os Melhores

Conteúdo popular

Mostrando conteúdo com a maior reputação em 24/08/2026 in todas as áreas

  1. 🌑 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 |
    16 pontos
  2. ⚔️ WAR OF DESTINY — BETA ABERTO 🔥 O WYD agora cabe no seu navegador. O War of Destiny está em BETA e queremos você junto nessa fase. Nosso objetivo é transformar a experiência do WYD em algo mais acessível, moderno e prático, permitindo jogar tanto no PC quanto no celular, diretamente pelo navegador. 🌐 Jogue sem instalação tradicional 💻 Jogue no PC 📱 Jogue no celular ⚔️ Experiência MMORPG inspirada no WYD 🚀 Atualizações e melhorias constantes 🔥 O QUE ESTAMOS CONSTRUINDO? O projeto vai muito além de simplesmente levar o jogo para o navegador. Estamos trabalhando para criar uma experiência que facilite a vida dos players e permita que o jogo flua de forma cada vez mais prática. 📂 Várias contas no mesmo navegador Pensado para facilitar o gerenciamento e a utilização de múltiplas contas de forma prática. 🏰 Gerenciamento de instâncias Futuramente, teremos recursos voltados ao gerenciamento das diferentes instâncias do jogo. 💰 Modo Economia Um modo pensado para otimizar o uso de recursos e tornar a experiência mais eficiente. 📱 PC + Celular A ideia é permitir que você tenha mais liberdade para jogar, independentemente do dispositivo. 🚀 Evolução contínua Novos sistemas, otimizações, correções e funcionalidades serão adicionados ao longo do desenvolvimento. 🛠️ BETA EM EVOLUÇÃO Já temos diversas correções e melhorias implementadas: ✅ Compra de Skills ✅ Skills e Buffs ✅ EXP e Level ✅ Mixlist / Composição ✅ Criação de Arch ✅ Face correta do personagem ✅ Leitura da textura Alpha ✅ NPCs de Skills ✅ Rebuild Cache ✅ Senha numérica E seguimos trabalhando em: 🔄 Respawn dos mobs 🔄 Mercado Negro 🔄 Correção do CP 🔄 Posição do slot da capa ao virar Celestial 🔄 Novos sistemas e melhorias 🐛 VOCÊ PODE FAZER PARTE DESSE DESENVOLVIMENTO O BETA existe justamente para testar, encontrar problemas e evoluir junto com os players. Encontrou um bug? Algum sistema não funcionou como deveria? Tem uma sugestão? 👉 Reporte para nossa equipe no grupo oficial do WhatsApp: 💬 [Hidden Content] 🌐 ENTRE NO BETA 👉 warofdestiny.com.br Abra o navegador. Entre no jogo. Crie seu personagem. E venha testar. ⚔️ War of Destiny 🔥 O WYD no navegador. 💻 PC. 📱 Celular. 🌐 Onde você estiver. Seu destino começa no navegador.
    6 pontos
  3. Pelo que entendi da tradução dessa página o desenvolvimento do WYD KR será encerrado: [Hidden Content] Será isso mesmo? O que acham que isso impacta no WYD Global?
    5 pontos
  4. O que vocês acham sobre mudar o visual de um wyd? Quero lançar um server 7.59 e estou modificando muitas coisas e trazendo novos recursos, queria a opinião sincera de vocês! [Hidden Content]
    5 pontos
  5. 🔥 LIFE DESTINY 6.56 — UMA NOVA TEMPORADA? ⚔️ O Life Destiny encerrou recentemente, mas estamos estudando a possibilidade de trazer o servidor de volta para uma nova temporada. Queremos saber se existe interesse da comunidade. 👀 👉 Você apoiaria uma nova temporada do Life Destiny 6.56? Entre no grupo e participe: 📲 WYD Nostálgico 🔗 [Hidden Content] 💬 Quanto mais jogadores interessados, maiores as chances de uma nova temporada sair do papel! ⚔️ Life Destiny 6.56 pode estar de volta.
    5 pontos
  6. Sinceramente, ja que esta mudando a interface, implemente o .pane fica extremamente mais facil de trabalhar/criar paineis... vc tem controle total sem toda a frescura do sistema nativo antigo... simplifica muito mais o codigo... Se a ideia é evoluir a interface, na minha opnião o sistema .pane do global é o que vc vai ter de melhor, a arte vc pode modificar a seu criterio... veja alguns prints, aposentei todo o sistema nativo da interface e implementei o .pane, com isso facilitou muito a criação de um filtro de drop para fadas douradas e prateadas, onde com a fada equipada basta clicar com o botão direito nela e abre o .pane do filtro... o sistema de linkar itens no chat, o sistema de coleção que inclusive esta desabilitado no global, ampliei ele para incluir os trajes de montaria... o menu de configuração ingame... tudo via .pane... estou corrigindo algumas questoes de linguagem pq o cliente suporta ingles e portugues, porem tem algumas strings em ptbr que precisam ser corrigidas, ou nem existem no global, mas no geral fica muito mais facil de trabalhar.
    5 pontos
  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.
    4 pontos
  8. Traduzindo para a linguagem comum: A grana está curta, não temos como manter a equipe, vamos fechar o jogo em breve. Se o que tem é suficiente, manteremos o jogo ativo até quando der. Basicamente a Joy viu que não tem futuro e está direcionando a equipe para outros projetos. Se me lembro bem, o KR não recebe um update decente tem muito tempo. Ano passado eu tentei comprar os direitos da With2FC, deviam ter vendido =). Eu não vou ofertar novamente, fizeram pouco caso, agora podem afundar. --- Sobre o Global, o impacto pode até ser positivo. Abre brecha para o Global comprar os direitos e virar o oficial ( não só publicadora ). O valor vai cair muito, mas muuuuuuito, esse tipo de coisa é considerado como encerramento das atividades. Se o Global estiver dando lucro ( faturar não é lucrar ), eles podem assumir a empresa. --- Pensando bem, comprar os direitos seria uma boa, desativo todos os servidores e inicio o WYD 4, ou seja lá qual número está atualmente rsrs
    3 pontos
  9. Explicando melhor o conteudo: São os arquivos-server files originais do wyd br (já tinham postado aqui no fórum a um tempo atrás) até aí nada de novo. Não achei o tópico pra dar creditos aqui a quem compartilhou. O que temos de diferente então? A tmsrvin vinha com a dll Core injetada, a source dela não havia sido compartilhada, então fiz uma dll para substituir e fiz algumas descompilações da tmsrvin migrando algumas funções essenciais como SendScore, GetCurrentScore, CloseUser, ProcessAttack, ProcessAffect, GetScoreBonus, CreateSummon, GridMulticast, StandingByProcessor, UseItem, GetAction, MobKilled, algumas relacionadas ao Kefra, ClientMessageChat, packet control e entre outros. A source está bem desorganizada e o objetivo real era tentar manter a originalidade da versão, descompilando as funções principais pra dentro da dll pra ter um gerenciamento/flexibilidade em pequenos ajustes Para quem busca um servidor completo, sem bugs loucos ou crash's (isso pode existir dentro das descompilações que fiz, então retire o naked, que tudo volta ao original ou corrija). [Hidden Content] Pode ser que existam algumas divergencias no codigo fonte original do arquivo map pro convertido pra dentro da dll, utilizei o codex e fiz alguns testes. Edit:: Para ativar o uso dos comandos de GM, vá em ClientCommand.cpp -> procure por "gm" ou "GM" -> aidicone isso: if (strcmp(command->Cmd, "GM") == 0 || strcmp(command->Cmd, "gm") == 0) { //pula verificação na dbsrv // p295h packetOut; packetOut.header.PacketId = 0x295; packetOut.header.ClientId = clientId; memcpy(packetOut.Name, mob->Mob.Name, 0x10); memcpy(packetOut.Comand, command->Msg, 0x60); ProcessClientMessage(clientId, (char*)&packetOut); return false;
    3 pontos
  10. Atualização do projeto 23/08/2026 Hoje a proteção foi ampliada de P1 para P1 + P2. O P1 continua verificando alterações na IAT de GetAdaptersInfo e connect. Foi adicionado o P2, que também detecta alterações inline no código dessas funções, comparando a implementação carregada em memória com a imagem original do módulo. Também removemos a validação “uma vez por execução”: agora P1 e P2 são verificados novamente a cada tentativa de login. A documentação, exemplos de integração e CI do repositório foram atualizados e validados.
    2 pontos
  11. ARENAAI TODOS MODELOS DE IA PAGAS EM UM SÓ LUGAR - DE GRAÇA! O Arena.ai é uma plataforma gratuita que reúne diversos modelos avançados de Inteligência Artificial em um único ambiente. Há algumas limitações, mas permite experimentar e comparar modelos que normalmente são oferecidos por serviços pagos. Principais funcionalidades: 1. Side-by-Side — Compare vários modelos Uma das principais funcionalidades do Arena.ai é a possibilidade de utilizar e comparar diferentes modelos de IA lado a lado. É possível testar modelos como GPT, Claude, Gemini, Llama, Mistral e diversos outros dentro da mesma interface, utilizando o mesmo comando para avaliar qual modelo apresenta o melhor resultado. 2. Diferentes tipos de ferramentas A plataforma oferece diferentes categorias de utilização, permitindo escolher o tipo de tarefa que deseja realizar: Texto e conversação: criação, revisão, resumo e análise de textos; Coding: programação, análise e geração de código; Geração de imagens: criação de imagens utilizando modelos de IA; Pesquisa: utilização de modelos e recursos voltados à pesquisa e obtenção de informações. 3. Agent Mode O Agent Mode é uma das funcionalidades mais avançadas da plataforma. Em vez de simplesmente responder a uma pergunta, o agente pode receber uma tarefa mais complexa, elaborar um plano e executar diferentes etapas para chegar ao resultado. Por exemplo, você pode solicitar a criação de um projeto, uma pesquisa ou uma tarefa de programação, e o agente pode dividir o trabalho em várias etapas e executá-las de forma mais autônoma. 4. Chatbots e pesquisa O Arena.ai permite testar diferentes modelos para tarefas de escrita, análise e pesquisa. Uma das vantagens é poder utilizar diferentes IAs para a mesma tarefa e comparar diretamente os resultados. Por exemplo, é possível solicitar a criação de um e-book sobre alimentação low carb e observar como cada modelo estrutura o conteúdo, permitindo identificar qual apresenta o resultado mais adequado. 5. Geração de imagens A plataforma também disponibiliza recursos para criação de imagens utilizando Inteligência Artificial. Embora possam ocorrer algumas limitações ou instabilidades dependendo do modelo utilizado, é possível experimentar diferentes modelos de geração visual dentro da própria plataforma. O grande diferencial é a facilidade de comparar resultados de diferentes modelos de IA na mesma interface Acesso: [Hidden Content]
    2 pontos
  12. 2 pontos
  13. 여러분, 안녕하세요? 모두 잘 지내시나요? 이 파일들의 링크가 무엇인가요? 아메리카 대륙과 전 세계가 이를 긴급히 기다리고 있습니다! 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]
    2 pontos
  14. 🔥 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!
    2 pontos
  15. Conteúdo da MARTINA OLIVEIRA, conhecida também como BEIÇOLA DO PRIVACY, PRIVACY DELA GRATIS + Videos vazados totalmente pelada, mostrando e fazendo de tudo. Sem frescura e nem anuncios, basta clicar no link e dar play no video, para ver o Privacy gratis é só se cadastrar. PRIVACY OFICIAL GRÁTIS, BASTA SE CADASTRAR [Hidden Content] QUASE 40 VIDEOS VAZADOS [Hidden Content]
    2 pontos
  16. QUICK LIST Para procurar algo com mais facilidade dê um CTRL + F para buscar! Cliente Todos os Clientes do WYD disponiveis e patchs de atualizações Hook's Hook de resolução HD - Widscreen 7.56 Source & Release Versão 7.54 Versão 7.56 Versão 7.59 / 7.62 Codigos e Hook's Leitura da ItemList em Runtime Macro ItemList [HOOK] Retirar barra de HP de novas esferas [HOOK] Additemsanc 759 [HOOK] Widscreen 762 [HOOK] Mofificar atributos das montarias-759 [HOOK] Adicionar-novos-trajes-759 [HOOK] Trajes com brilho 759 [HOOK] createscene world mobtarget-759 [HOOK] Additemsanc-759 [HOOK] Trajes Completo 759 Exemplos de npcs de evento [HOOK] [FIX] crash no pacote-0xfdf 756 [HOOK] Side maps 7556 [HOOK] Resoluções FULL HD [HOOK] Adicionando local e o valor do cp 7556 [HOOK] Modo foto no wyd [HOOK] Native Func 756 atualizada para 754 cliente [PARTE 1] [HOOK] Native Func 756 atualizada para 754 cliente [PARTE 2] [HOOK] Keypress newbutton 754 [HOOK] Fixmobcount contador laranja 754 Tool's E-MAPS Editor Source Fieldscene editor Leitura da itemlistcsv runtime Macro itemlist by seitbnao [TOOL] Meshtexturelist meshs wyd.exe para novos trajes [7.59] Editor e conversor skilldata v761 [TOOL] Editor serverlist bin WYD Global W2 mixlist editor Launcher customizado e traduzido [SOURCE] Wyd launcher by seitbnao WebSite Artes e .PSD PSD imagem para divulgação PSD imagem para divulgação 2 PSD imagem para divulgação 3 PSD imagem para divulgação 4 PSD imagem para divulgação 5 PSD imagem para divulgação 6 Outros Pacote de Guildmark Trajes separados e organizados Links dos clientes e patchs de atualizações by Reechdan Novos psds para client 756 Icones itens wyd Pack de DLL para melhorar os graficos 756 Struct do config.bin do launcher [SOURCE] Premium neil wyd Re-Ups Caso algum link esteja offline, contate a moderação do Fórum! QuickList será atualizada a cada 15 dias por um Moderador da área caso tenha algum novo tópico relevante. Atenciosamente, Equipe Webcheats
    2 pontos
  17. 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
  18. 🚀 STATUS DO SERVER ( ON! ) 🟢 PING LISO: 4ms (Radmin) ⚔️- 🔥👑[Chase Heroes]👑🔥 -⚔️ Tokens ❤️ Token: INICIANTEHEROES Token: HARKYON-KIT-FREE Token: SUPORTE-INICIANTE Token: KitPergaMistico 🔹 OBRIGATORIO – ENTRAR NA REDE DO RADMIN VPN Ja vem baixado no instalador! No Radmin VPN, clique em: Rede → Ingressar em uma rede existente Escolha apenas uma das redes abaixo: Nome da rede: grandchaselospikas Senha: 123456789 Nome da rede: gclospikas Senha: 123456789 Nome da rede: grand.pika Senha: 123456789 Clique em Entrar Tutorial completo a baixo. do download Disponível: Windows 7, Windows 10 e WINDOWS 11 Requisitos: minimo 4gb ram e win 7 Vai c/ Pacote Essenciais: Net 10, direct x e Microsoft C++ e Driver Booster 13 + Crack e Radmin com - Instalador Facilitado. www.youtube.com/watch?v=Q7qDnRnrMWs 😤 Cansado de farmar parecendo um mendigo? 😾 Ou jogar com pet inútil que não dá dano nenhum? 💸 Cansado de colocar dinheiro na KOG e receber zero consideração? 🌎 Nem valorizam nossa moeda — mesmo sendo a maior parte do servidor. 🔥 Foi por isso que este servidor nasceu. Feito para quem vive de salário mínimo. ❤️ Para quem ama Grand Chase, mas cansou de pagar caro por promessas vazias, 🚫 Aqui não tem investidor. Não tem empresa por trás, muita coisa ainda sai do meu bolso. ⭐ O VIP existe por um único motivo: Apena Manter o Servidor online e trazer Atualização. ❌ Não é sobre lucro. ✅ É sobre respeito ao jogador e a Historia de Grand Chase, Quem jogou Dede o Beta sabe oq eu estou falando, 💭 Se isso fez sentido pra você… talvez valha a pena conhecer mais. INVENTARIO e PET COMPARTILHADO A COMPRA DE CASH È AUTOMATICA DIRETO NO LAUNCHER QRCODE PIX Pagou? Cash caiu na conta de forma Automatica <3 Novos Pets Free To Play Coleção de Herois BUFFADA! Free tbm consegue jogar tranquilo COMO BAIXAR? 📌 Discord: [Hidden Content] 📌 Link do Blog: [Hidden Content] 📌 Link do youtube: [Hidden Content] 🛡️ VAMOS REERGUER ESSA LENDA JUNTOS! 🛡️
    1 ponto
  19. Epa! Tópico Movido! Seu tópico não foi postado na área correta e, devido a isso, foi movido para o local adequado. Por favor, preste mais atenção da próxima vez. Atenciosamente, WebCheats.
    1 ponto
  20. 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
  21. Bom dia amigos Será que alguem ainda possui esse conteúdo do Alastar 7.56 ->7.54 O link esta quebrado, alguem consegue fazer o reup por favor plissss.
    1 ponto
  22. Pode usar esse [Hidden Content] o que vai mandar a dll
    1 ponto
  23. // TMSRV 7.56 / 7.57 @ 0x0042B1D0 — GetDropItem void GetDropItem(int target, int conn, int posX, int posY, STRUCT_ITEM* item) { if (!ItemMasterState) { // -------------------------------------------------------------------- // Rota 1: Drop de Moeda de Ouro (Index 454) // -------------------------------------------------------------------- if (item->Index == 454) // Moeda_de_Ouro_1 { int gold = 0; if (item->EF1 == EF_HWORDCOIN) gold = item->EFV1 * 256; if (item->EF2 == EF_LWORDCOIN) gold += item->EFV2; gold *= 100; pMob[conn].MOB.Coin += gold; if (pMob[conn].MOB.Coin > 2000000000) pMob[conn].MOB.Coin = 2000000000; SendUpdateCoin(conn); } // -------------------------------------------------------------------- // Rota 2: Drop de Item Comum / Fadas de Auto-Loot // -------------------------------------------------------------------- else { int isStackable = FALSE; int petId = pMob[conn].MOB.Equip[PET].Index; // Fada Prateada (3914) ou Fada Dourada (3915) if (petId == 3914 || petId == 3915) isStackable = SendItemCarry(conn, petId, item); // Se não agrupou na fada, tenta colocar no inventário normal if (!isStackable) isStackable = SendPutItemCarry(conn, FALSE, item); // Se o item foi recolhido e exige log de segurança if (isStackable) { if (BASE_NeedLog(item, 0)) { char itemLog[32]; memset(itemLog, 0, sizeof(itemLog)); BASE_GetItemCode(item, itemLog); char temp[128]; sprintf_s(temp, sizeof(temp), "get %s", itemLog); Log(temp, pUser[conn].AccountName, pUser[conn].IP); } } } } // ------------------------------------------------------------------------ // Rota 3: Drop com Invocador / ItemMasterState Ativo // ------------------------------------------------------------------------ else if (pMob[target].ItemSummoner > 0 && pMob[target].ItemUser > MOB_EMPTY && pMob[target].ItemUser < MAX_USER) { if (item->Index == 454) // Moeda de Ouro { int gold = 0; if (item->EF1 == EF_HWORDCOIN) gold = item->EFV1 * 256; if (item->EF2 == EF_LWORDCOIN) gold += item->EFV2; gold *= 100; pMob[conn].MOB.Coin += gold; if (pMob[conn].MOB.Coin > 2000000000) pMob[conn].MOB.Coin = 2000000000; SendUpdateCoin(conn); } else { int isStackable = FALSE; int petId = pMob[conn].MOB.Equip[PET].Index; if (petId == 3914 || petId == 3915) isStackable = SendItemCarry(conn, petId, item); if (!isStackable) isStackable = SendPutItemCarry(conn, FALSE, item); if (isStackable) { if (BASE_NeedLog(item, 0)) { char itemLog[128]; memset(itemLog, 0, sizeof(itemLog)); BASE_GetItemCode(item, itemLog); char temp[128]; sprintf_s(temp, sizeof(temp), "get %s", itemLog); Log(temp, pUser[conn].AccountName, pUser[conn].IP); } } else { // Se não couber no inventário do invocador, cancela vinculação pMob[target].ItemSummoner = 0; pMob[target].ItemUser = 0; } } } }
    1 ponto
  24. 1 ponto
  25. Olá, talvez eu não seja o melhor fazendo posts, mas quero convidar vocês para conhecerem o nosso projeto de servidor private Memories' Requiem Somos uma equipe pequena, porém muito dedicada, contando com developers competentes e uma staff sempre empenhada em trazer conteúdos novos, estabilidade e uma experiência divertida para todos os jogadores. Atualmente estamos em fase de Alpha Fechado, trabalhando diariamente em melhorias, correções e otimizações para disponibilizar o servidor ao público o quanto antes, da melhor forma possível. ━━━━━━━━━━━━━━━━━━ Conteúdos presentes no servidor ━━━━━━━━━━━━━━━━━━ • Void (Invasão) • Void (Contaminação) • Void (Pesadelo) • Sistema Chaser Level • Uno 2ª Classe • Personagem Decanee • Personagem Ai • Personagem Kallia • Visuais Classic ━━━━━━━━━━━━━━━━━━ Diferenciais do projeto ━━━━━━━━━━━━━━━━━━ • Excelente otimização e desempenho • Melhor estabilidade durante a gameplay • Correções e melhorias constantes • Balance baseado no BGC • Gameplay equilibrada (nada extremamente forte ou fraco) • O jogo não depende mais da d3d9.dll para funcionar • Maior compatibilidade e menos problemas para os jogadores ━━━━━━━━━━━━━━━━━━ Sobre o projeto ━━━━━━━━━━━━━━━━━━ Nosso objetivo é entregar um servidor divertido, equilibrado e bem otimizado, focando tanto em PvE quanto PvP, sem exageros e sempre ouvindo o feedback da comunidade. Ainda estamos em desenvolvimento, mas estamos trabalhando diariamente para trazer uma experiência sólida e agradável para todos. Quem quiser acompanhar a evolução do projeto ou futuramente participar do Beta, será muito bem-vindo ❤️ Venha conhecer nosso projeto e dê uma chance para nós. Nossa equipe é pequena, mas extremamente dedicada, contando com 2 desenvolvedores e 3 community managers sempre prontos para ajudar. Nossa progressão é baseada no BGC juntamente com os balances, mantendo tudo equilibrado — nada muito forte e nem muito fraco. O foco é proporcionar uma experiência divertida, justa e bem balanceada para todos. Link do Discord: [Hidden Content]
    1 ponto
  26. Link:⁨ Clique Aqui começa com 5 créditos iniciais, tem para vários sites
    1 ponto
  27. ⚜️ 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: LINK
    1 ponto
  28. /* 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; } } LINKS ATUALIZADOS 20/07/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 Agora
    1 ponto
  29. HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ [Hidden Content] Vírus Total: [Hidden Content] Créidtos: vou deixando aqui os crédito para o criador do Programa de edição @Japon .
    1 ponto
  30. ⚡ OFICIAL CONFIRMADO — WYD VAELION ⚡ A contagem regressiva começou! 🕒 No dia 28/08/2026 às 20h, as portas de Kersef se abrirão pela primeira vez. Quem estiver presente vai viver o início de uma nova jornada antes de todo mundo! 🎁 Sistema de Afiliados Ativo Indique um amigo pelo seu link exclusivo. Se ele realizar um donate, você recebe cash automaticamente. Acesse o painel, crie seu link de afiliado e comece a divulgar! ⚔️ Por que jogar WYD Vaelion? ✅ Servidor Easy / Easy ✅ Servidor próprio, não alugado ✅ Equipe presente, com programador próprio e suporte ativo ✅ Várias composições e drops dinâmicos ✅ Comércio ativo e global ✅ Anúncios por Gold, BI e Donate ✅ Atualizações semanais ✅ Cliente moderno, otimizado e completo 🎥 Oportunidades Estamos contratando: 🎮 Streamers 📢 Divulgadores ▶️ YouTubers 🛡️ Líderes de Guild Isso mesmo: líder de guild também tem espaço no Vaelion! 📌 Sobre o Servidor Versão: 7.92 Clássico + Custom Experiência: Easy / Easy Drop: Easy / Médio Composições: 60% Mortal UP: Quest até level 351, Deserto e Água Arch, Celestial e Sub UP: Deserto, Água e Pesadelo ✦ Sistemas e Recursos ✦ Sistema Reconnect ✦ Mercado Global Integrado ✦ Rankings: Level, Power e Kills ✦ Painel de Grupo Global ✦ Cliente moderno e otimizado ✦ Painel Honrar ✦ Droplist com filtros e busca avançada ✦ Painel Macro Água ✦ Recompensa Diária ✦ Painel de Loja Donate 🕒 Horários Oficiais 🏰 Guerra de Cidade: Domingo às 20h ⚔️ Guerra de Noatun: Domingo às 21h 🗼 Guerra de Torres: Segunda a Sexta às 21h30 🔥 Kefra: Quinta às 21h 👑 Arena Real: 10h, 13h, 15h, 18h, 21h e 23h ⚔️ RvR: 20h 👇 Garanta seu lugar agora 👥 WhatsApp: [Hidden Content] 💬 Discord: [Hidden Content] 🌐 Site: [Hidden Content] 📸 Instagram: [Hidden Content] Marque aquele parceiro que jogava WYD com você. Ele não pode ficar de fora dessa! ⚔️ "O farm te prepara. O PvP te define."
    1 ponto
  31. 📌 SOBRE O PROJETO A intenção é trazer um servidor divertido, competitivo e vivo, com mecânicas exclusivas e rates valorizadas. Por isso, optamos por um servidor médio, com diversas alterações e novidades pensadas para aumentar a competitividade e valorizar a progressão dentro do jogo. 🔥 CANAIS NO LANÇAMENTO Devido à grande quantidade de jogadores confirmados, no dia do lançamento teremos 2 canais disponíveis. Essa medida tem como objetivo evitar superlotação em Quest e melhorar a experiência inicial de todos. Observações O Canal 2 será utilizado exclusivamente para suprir a demanda do lançamento. ⚙️ MECÂNICAS EXCLUSIVAS Traremos diversas mecânicas exclusivas, como: Big Cubo, Castelo da Maldade (IMP), Novo Coliseu, E muitas outras novidades!, Nossa intenção é manter um servidor realmente ONLINE, com atividades acontecendo em dias e horários definidos. 🏆 SISTEMA DE UP Inicialmente, o UP do servidor será feito exclusivamente no Deserto. Para diversificar a experiência, também teremos mecânicas que concederão XP, como: Novo Coliseu, Arena, Inibidor, baseado no sistema do Nerthus, Futuramente, novas Quest e mecânicas serão adicionadas ao servidor. 👹 VALORIZAÇÃO DOS ITENS Os itens com adicional serão obtidos exclusivamente através do drop de mobs. Refizemos todo o sistema de adicionais de armas e sets para que esses itens sejam conquistados com raridade, tornando-os mais valiosos e fortalecendo o comércio dentro do jogo. 👹 ITENS BÁSICOS TAMBÉM TERÃO VALOR Testamos cuidadosamente o drop do jogo e realizamos ajustes para que itens básicos também tenham importância dentro do servidor. Entre eles: Joias, Sábios, Adamantitas, Brincos, E diversos outros itens A ideia é fazer com que cada conquista tenha valor dentro da economia do servidor. 🌐 WhatsApp: [Hidden Content] 🌐 Site: [Hidden Content] 🌐 Discord: [Hidden Content] Servidor Administrado por Baldin 🌐 Scan do .exe 0/71 🌐 Scan do Launcher 1/71 - Possível Falso Positivo
    1 ponto
  32. [Hidden Content]
    1 ponto
  33. //TMSrv 7.57 00588970 void ProcessHardCoreDeath(int conn) //Função Ok { if (conn <= 0 || conn >= MAX_USER) return; int cytheraSanc = BASE_GetItemSanc(&pMob[conn].MOB.Equip[HELMET]); if (cytheraSanc > 0 && pMob[conn].MOB.Equip[HELMET].Index >= 3503 && pMob[conn].MOB.Equip[HELMET].Index <= 3506) { int sortDecSanc = (rand() % 3) + 1; if (cytheraSanc > 15) cytheraSanc = 15; cytheraSanc -= sortDecSanc; if (cytheraSanc < 0) cytheraSanc = 0; BASE_SetItemSanc(&pMob[conn].MOB.Equip[HELMET], cytheraSanc, 0); SendItem(conn, EQUIP_TYPE, HELMET, &pMob[conn].MOB.Equip[HELMET]); SendMessageChatId(conn, FALSE, _NN_Refine_Down); } else { pMob[conn].MOB.Equip[FACE].Index = 1; pMob[conn].MOB.Equip[HELMET].Index = 0; pMob[conn].MOB.Equip[CAPE].Index = 0; pMob[conn].MOB.Exp = 1; memset(&pMob[conn].MOB.CurrentScore, 0, sizeof(STRUCT_SCORE)); memset(&pMob[conn].MOB.BaseScore, 0, sizeof(STRUCT_SCORE)); pMob[conn].saveSubClassInfo[0].saveFace.Index = 0; pMob[conn].saveSubClassInfo[1].saveFace.Index = 0; pMob[conn].MOB.LearnedSkill = 0; pMob[conn].MOB.nLearnedSkill = 0; SetFameCount(conn, (GetFameCount(conn) * -1)); pMob[conn].LevelItemFlag = 0; pMob[conn].MobFace = 1; pMob[conn].isHardCore = 0; } } //TMSrv 7.57 004E0AE0 int GetFameCount(int conn) //Função Ok { if (conn <= 0 || conn >= MAX_USER) return 0; unsigned char count1 = pMob[conn].MOB.Inventory[KILL_MARK].EFV2; unsigned short count2 = (unsigned short)pMob[conn].MOB.Inventory[KILL_MARK].EF3; if (count1 > 100) count1 = 100; int calc = (count1 * 65535) + count2; return calc; } //TMSrv 7.57 004E0B70 void SetFameCount(int conn, int value) //Função Ok { if (conn <= 0 || conn >= MAX_USER) return; if (!value) return; int calcFame = GetFameCount(conn) + value; if (calcFame < 0) calcFame = 0; if (calcFame > MAX_FAME) //MAX_FAME precisa ser confirmada calcFame = MAX_FAME; unsigned char count1 = calcFame % 65535; unsigned short count2 = calcFame / 65535; if (count1 > 100) count1 = 100; if (count2 > 65535) count2 = 65535; pMob[conn].MOB.Inventory[KILL_MARK].EFV2 = count1; *(unsigned short*)pMob[conn].MOB.Inventory[KILL_MARK].EF3 = count2; }
    1 ponto
  34. Fala pessoal blz? atualizei meu conversor para extrair arquivos do Loki Season novo e vou compartilhar com vocês os conversores de ItemList e SkillData. Trabalha com todas as versões, do 7.00 a Loki Season atual, Structs de 140B 168B e a nova de 172B, ainda tem alguns EFs que nao consegui extrair, vai precisar de um pouco mais de analise, mas não interfere no funcionamento das ferramentas. Não lembro o size das structs das versões 6.XX se for os mesmos 140B vai funcionar tbm. Se for menor ai preciso das structs pra implementar o suporte. O app já calcula o checksum e pode ser recompilado no código para não ter erros de loading isso para quem usa o sistema sem bypass no checksum. Sem segredo, podem abrir arrastando o arquivo ou selecionando manualmente, o arquivo convertido vai pra mesma pasta do arquivo base. Um backup é salvo para qualquer problema. No caso da SkillData, se você tiver o ItemList na mesma pasta ele já insere o nome das skills no SkilData.csv basicamente é isso. segue alguns prints Segue o Download GuiCan Não coloquei scan, mas se alguém tiver duvida pode analisar o arquivo por si mesmo.
    1 ponto
  35. /* 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 - 06/06/2026 Contas Gratuitas Liberadas 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 Agora
    1 ponto
  36. 1 ponto
  37. 1 ponto
  38. Sem muitas delongas, segue o repositório abaixo do cliente do wyd descompilado. [hide][Hidden Content]] Este projeto é uma descompilação e o mesmo pode e contém problemas. Sinta-se a vontade para reportá-los e abrir um pull request para o projeto (esperamos que você faça isso). Autores: Eric Santos (SKEWED) Wed Souza (FREEDOM) Kevin Kouketsu (shepher)
    1 ponto
  39. 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---
    1 ponto
  40. 1 ponto
  41. no WYDConverter fica melhor a visualização
    1 ponto
  42. Site: [hide][Hidden Content]] Acesso: Para receber o acesso único a 30 Dias você deve entrar no grupo do whatsapp criado exclusivamente para isso: [Hidden Content]
    1 ponto
  43. Sejam bem vindos a mais um conteudo da FOX Cheat, dessa vez viemos fazer o lançamento do produto VIP de CS2 e podemos garantir que é um dos produtos mais seguros para o game por se tratar de um cheat totalmente externo, ou seja não feito nenhum tipo de modificação no jogo ou injeção nele. Além disso a versão grátis como já é de costume desse produto está sendo desenvolvida e será postada em um tópico separado. Para conhecer mais sobre esse e outros produtos da FOX acesse. LOJA SITE DISCORD Windows 11 → Funcional Windows 10 - 2204 ou posterior → Funcional Windows 8 → Não funcional ESP [BOX, DISTANCE, LINES, HEAD, HEALTBAR, SHIELD, ETC] AIMBOT CONFIGURAVEL SPECTATOR LIST RAGE BOT - DESENVOLVIMENTO 7 dias → R$ 30,00 R$ 20,00 30 dias → R$ 50,00 R$ 40,00 Preço promocional de lançamento, o mesmo pode ser alterado sem aviso prévio. Adquira o produto direto na LOJA ou nosso DISCORD
    1 ponto
  44. Fala galera! Venho trazer vários links que tenho dos clientes do WYD! CLIENTES WYD Tebas 6.13 WYD ?? 6.56 WYD KR 6.56 Supreme Destiny 6.80 WYD Global 7.48 (tem macro) WYD Global 7.50 WYD BR 7.26 WYD BR 7.30 WYD BR 7.47 WYD BR 7.50 WYD BR 7.52 WYD BR 7.54 WYD BR 7.55 WYD BR 7.59 WYD BR 7.60 PATCHS DE ATUALIZAÇÕES DO BR LINK: [Hidden Content] Espero que gostem! ?
    1 ponto
  45. Video Actor: Camilla Araujo Camilla Araujo with julia filippo Ari Kytsya & Camilla Araujo Lesbian Toy Play – The Collab You’ve Been Waiting For
    1 ponto
Esta tabela de classificação está definida para São Paulo/GMT-03:00
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.