Os Melhores
Conteúdo popular
Mostrando conteúdo com a maior reputação em 27/08/2026 in todas as áreas
-
Somos o primeiro servidor do Genero Idle, inpirado no no jogo RPG: With Your Destiny ! Site: [Hidden Content] WhatsApp: [Hidden Content] - Equipamentos Padrão - Mercado Global - Arena PVP - Sistema de GUILD - Sistema de Montaria - Guerras: Torre, Cidades e Noatun - Quests Mortal - Lans - Crafts Padrão (Em Breve) Projeto em Desenvolvimento12 pontos
-
🌑 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 |5 pontos
-
● EVENTO ESPECIAL • GLOBALHAX GRAND THEFT AUTO GTA VI TRAILER • QUINTA-FEIRA, 27 DE AGOSTO Prepare-se para acompanhar um dos lançamentos mais aguardados do mundo dos games. Nesta quinta-feira, dia 27, reúna-se com a comunidade da GlobalHax e acompanhe o trailer através da Netflix utilizando o GlobalLoader. 27 DATA QUINTA-FEIRA ▶ EVENTO TRAILER GTA VI N STREAMING NETFLIX ● PREPARE-SE PARA O DIA 27 ASSISTA AO GTA VI NO GLOBALLOADER Abra o GlobalLoader, acesse a opção da Netflix disponível em sua conta e prepare-se para acompanhar o trailer junto com a comunidade. ▶ ACESSAR GLOBALLOADER GLOBALHAX • GLOBALLOADER • NETFLIX 01 — EVENTO Quinta-feira é dia de GTA VI. O dia 27 de agosto promete movimentar a comunidade com novas imagens, informações e detalhes de Grand Theft Auto VI. A proposta da GlobalHax é reunir a comunidade para acompanhar este momento utilizando o GlobalLoader. 02 — GLOBALLOADER GLOBALLOADER Centralize os serviços disponibilizados pela GlobalHax em uma única aplicação e consulte as opções disponíveis para sua conta. ⬇ BAIXAR GLOBALLOADER 03 — PREPARE-SE Como participar 01. Baixe o GlobalLoader Utilize a versão oficial disponibilizada pela GlobalHax. 02. Entre na sua conta Faça login utilizando sua conta da GlobalHax. 03. Acesse a opção disponível Confira no GlobalLoader quais serviços estão atualmente liberados para sua conta. 04. Prepare a pipoca Dia 27, acompanhe o evento junto com a comunidade GlobalHax. ▶ TUTORIAL Ainda não utiliza o GlobalLoader? Assista ao tutorial e veja como instalar, acessar e utilizar o software. GLOBALHAX • GTA VI NOS VEMOS DIA 27. Abra o GlobalLoader, prepare-se para o evento e acompanhe tudo junto com a comunidade. GTA VI • GLOBALHAX • GLOBALLOADER3 pontos
-
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.3 pontos
-
/* Estilos CSS adaptados para a cor exata do fórum (#272626) */ .gh-topic-container { font-family: 'Segoe UI', 'Roboto', Helvetica, Arial, sans-serif; background-color: #272626; color: #eeeeee; padding: 30px; border-radius: 10px; margin: 20px auto; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); border: 1px solid #363535; } /* ---- Estilos do Banner ---- */ .gh-banner-wrapper { width: 100%; margin-bottom: 25px; border-radius: 12px; overflow: hidden; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3); border-bottom: 3px solid #8b5cf6; } .gh-banner-img { width: 100%; height: auto; display: block; } /* ---- Badge de Atualizado (Gatilho de Novidade) ---- */ .gh-update-badge { background: #1e1b4b; border: 1px solid #8b8dff; color: #a4a6ff; display: inline-block; padding: 6px 16px; border-radius: 50px; font-size: 0.85rem; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 15px; } /* ---- Grade Lado a Lado (Contas Free) ---- */ .gh-streaming-grid { display: flex; justify-content: space-between; gap: 15px; margin: 25px 0 35px 0; } .gh-streaming-item { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: space-between; background: rgb(32 32 32); padding: 20px 10px; border-radius: 8px; border: 1px solid rgba(255, 255, 255, 0.05); position: relative; } .gh-status-indicator { font-size: 0.75rem; color: #22c55e; font-weight: bold; margin-bottom: 8px; text-transform: uppercase; } /* ---- Tipografia ---- */ .gh-main-title { font-size: 2.3rem; font-weight: 900; text-transform: uppercase; margin-bottom: 5px; text-align: center; letter-spacing: -1px; color: #ffffff; } .gh-grid-title { font-size: 1.3rem; font-weight: 900; text-transform: uppercase; margin-bottom: 15px; text-align: center; color: #ffffff; } .gh-highlight-purple { color: #a855f7; text-shadow: 0 0 10px rgba(168, 85, 247, 0.4); } /* ---- Caixas de Comparação (Gatilho de Valor) ---- */ .gh-feature-box { background: #1e2920; border: 1px solid rgba(34, 197, 94, 0.2); border-left: 5px solid #22c55e; padding: 25px; border-radius: 8px; margin-bottom: 20px; } .gh-feature-title { font-size: 1.4rem; color: #4ade80; font-weight: bold; margin-bottom: 12px; display: flex; align-items: center; } .gh-feature-title::before { content: '👑 '; } .gh-virustotal-box { background: #2d1919; border: 1px solid rgba(239, 68, 68, 0.2); border-left: 5px solid #ef4444; padding: 25px; margin: 20px 0; border-radius: 8px; } .gh-virustotal-title { font-size: 1.4rem; color: #f87171; font-weight: bold; margin-bottom: 12px; display: flex; align-items: center; } .gh-virustotal-title::before { content: '⚠️ '; } .gh-text-content { font-size: 1.05rem; line-height: 1.6; color: #cccccc; } /* ---- Botões ---- */ .gh-button-container { text-align: center; width: 100%; } /* Botão das Contas de Teste/Free */ .gh-cta-button { background: rgba(255, 255, 255, 0.08); color: #bbbbbb !important; padding: 12px 15px; text-decoration: none; font-size: 0.85rem; font-weight: 700; border-radius: 6px; transition: all 0.2s ease; display: inline-block; text-transform: uppercase; border: 1px solid rgba(255, 255, 255, 0.1); width: 95%; box-sizing: border-box; } .gh-cta-button:hover { background: #8b5cf6; color: white !important; border-color: #8b5cf6; box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3); } /* Botão Principal de Vendas (Gatilho de Ação Irrecusável) */ .gh-cta-button-large { background: linear-gradient(to right, #8b5cf6, #6366f1); color: white !important; padding: 18px 55px; text-decoration: none; font-size: 1.25rem; font-weight: 800; border-radius: 8px; transition: all 0.2s ease; display: inline-block; text-transform: uppercase; border: none; cursor: pointer; box-shadow: 0 6px 25px rgba(139, 92, 246, 0.5); animation: gh-pulse 2s infinite; } .gh-cta-button-large:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(139, 92, 246, 0.7); filter: brightness(1.1); } /* Animação sutil para atrair os olhos para a compra */ @keyframes gh-pulse { 0% { box-shadow: 0 0 0 0 rgba(139, 92, 246, 0.5); } 70% { box-shadow: 0 0 0 15px rgba(139, 92, 246, 0); } 100% { box-shadow: 0 0 0 0 rgba(139, 92, 246, 0); } } /* Responsividade */ @media (max-width: 600px) { .gh-streaming-grid { flex-direction: column; gap: 15px; } .gh-cta-button-large { width: 100%; padding: 16px 20px; font-size: 1.1rem; } } Contas ATUALIZADAS 10/08/2026 Escolha uma das opções abaixo para testar o serviço gratuitamente: [Hidden Content] Cansado de quedas e telas cheias? O método gratuito é excelente para testar, mas as contas são públicas e mudam constantemente. Se você busca estabilidade total, suporte ativo e um perfil exclusivo só seu, veja a diferença abaixo: Vantagens Acesso Privada Acesso completo e ininterrupto por 30 dias com perfil e tela 100% privada. Ninguém mexe no seu histórico, ninguém altera sua senha. Entrega automática e instantânea via PIX com garantia de suporte completo via chat. Desvantagens Acesso Gratuito/Compartilhado Contas utilizadas por dezenas de pessoas simultaneamente. Limites de telas excedidos frequentemente, histórico completamente bagunçado e senhas alteradas a qualquer momento, tornando o acesso totalmente instável e temporário. Mais de 80% dos membros do fórum começaram testando as contas gratuitas e migraram para o plano privado. Garanta sua estabilidade hoje mesmo! Quero Minha Conta Privada Agora3 pontos
-
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]2 pontos -
100% ATUALIZADO(2026) INTRODUÇÃO A Fox com muito orgulho apresenta seu produto para Grand Chase Classic (Steam/Nexus/Megaxus/Epic Games/etc) Acesse nosso site e tenha acesso à mais produtos exclusivos: Forums - Fox Cheats FUNÇÕES 🎯 Categoria: Mission Hack Auto Kill Delay — Mata todos os mobs da missão automaticamente. Skip Dialog — Pula todos os diálogos possíveis durante a missão. Kill All — Usado junto com o Auto Kill Delay para matar mobs que suportam o sistema. Stealth — Faz com que os mobs não ataquem você. Monster Vac — Agrupa todos os mobs hostis em um único local. Item Vac — Coleta automaticamente todos os itens dropados. Item Hide — Esconde todos os itens da missão para melhor visualização. Auto Boss — Avança automaticamente para a Boss Fight quando disponível. Unlimited Dimensional Time — Permite ficar mais de 15 minutos no portão dimensional. Level Hack [VOID] — Permite jogar o VOID sem precisar ser level 85. Item Spawn — Dropa todos os itens que seriam obtidos na missão. Speed Farm — Carrega uma missão alternativa para acelerar o farm. Damage Mob — Multiplicador de dano que você sofrerá dos mobs. Damage Hack — Aumenta o dano que você causa aos mobs. Auto Portal — Passa as etapas automaticamente sem interação manual. Speed Hack — Acelera a velocidade do jogo. Super Talim Spam — Spama o ataque especial do evento de Talin em qualquer missão. 🏆 Categoria: Mission Result Rank Select — Escolha a pontuação de rank da missão (F até SS). Hits Count — Quantidade de hits que você causou na missão. Combo Count — Número total de combos realizados. Attack Back Count — Número de ataques realizados pelas costas dos inimigos. Hits Takken — Quantidade de hits que você sofreu durante a missão. Damage Count — Total de dano que você causou na missão. 👤 Categoria: Player Stats HP Infinity — Vida infinita para o seu personagem. MP Full — Mana infinita para usar habilidades sem restrição. Hide Nick — Esconde seu nick no jogo [STREAM MODE]. Potion CD — Remove o cooldown para usar poções sem tempo de espera. CoolDown Hack — Remove o cooldown das skills, podendo usar sem limite. Fly Hack — Permite que seu personagem voe livremente. Pet MP — Mana infinita para o seu Pet. Furia Full — Fúria sempre cheia para usar golpes especiais. Item Hack [N] — Permite usar itens do inventário [N] sem possuí-los. Status SS — Aumenta seus atributos para atingir status SS+ e completar eventos/missões especiais. 🤖 Categoria: Bots/Farming Drop Prediction — Permite visualizar os itens que irão dropar dos mobs na missão. Block Dialog — Bloqueia janelas de diálogo para farmar AFK. Anti Kick AFK — Impede o jogo de te expulsar por ficar AFK. Auto Start — Inicia automaticamente as missões. Auto Next Dungeon — Avança automaticamente para a próxima missão. Auto Ready — Confirma "Pronto" automaticamente nas missões. Auto Play Dungeon — Joga automaticamente a missão selecionada. Auto Farm Item — Farma repetidamente o item adicionado na lista. Auto Failed — Faz a missão falhar automaticamente. Auto Farm Cards — Farma cartas automaticamente na missão. 🎮 Categoria: Auto Collect And Quit Collect And Quit — Entra na missão que você desejar, coleta os itens desejado e quita (FARM AUTOMATICO DE ITENS 100% AFK E RAPIDO 🎮 Categoria: AUTO VOID 100% AFK 23 CHAR AUTO VOID 100% AFK 23 CHAR — Entra na missão do void desejada, completa automaticamente com todos os personagens desejados e para (100% AFK) ENTREGA AUTOMÁTICA COMPRE AQUI OU NO SITE: [Hidden Content] SCREEN SHOTS PREÇOS 30 Dias -> R$39,90 ONDE COMPRAR ? Nosso Site -> Forums - Fox Cheats Nosso Discord : [Hidden Content] COMO USAR Abra o cheat Abra o jogo Seja feliz! DOWNLOAD/SCAN DOWNLOAD x64 : [Hidden Content] SCAN x64 : VirusTotal - File - 4851f472de5f1be722f62b62c1da749723ca086eddda36347db9996da39a08502 pontos
-
⚔️WYD INFINITY ⚔️ 📅 Inaugurado dia: 01/05/2026 às 13h 📌 Informações Gerais Versão: 7.89 Dificuldade: Easy / Medium UP Rápido: Mortal/Arch UP Celestial: Easy até 200/200 - 200+ Medium Contas por IP: (5) 🔥 "O Farm te prepara. O PVP te define." 📌 Sistemas Guerras de Guilds Arena Real Pesadelo celestial liberado Dominação de Bosses com espólios valiosos Droplist com filtro de drop Sistema de Honra Valioso e Diferenciado Sistema Guerra entre Reinos Player Info Ranking atualizado Sistema de Balanceamento PVP e PVE 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 Auto Grupo Anti-Hack · Anti-DDoS Servidor Estável 24/7 Entre outros... 🌐Redes Sociais 🌍 Site: [Hidden Content] 💬 Discord: [Hidden Content] 📸 Instagram: [Hidden Content] 📱 WhatsApp: [Hidden Content] 🌐Download: Download do Cliente : DOWNLOAD DO CLIENT Scan CLIENT Scan EXE Administrador por: G2K 📌 Imagens sobre o WYD INFINITY Campo iniciante de ARMIA: Sistemas: Painéis no servidor: NPC'S (Se compra em gold e itens)(Ambos são FARM) VALE ESCONDIDO (CONTÉM 3 ANDARES) CAPAS CELESTIAIS2 pontos
-
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]2 pontos
-
Fiquei um tempo parado sem mexer em relação a essas animações, agora eu voltei e consegui desenvolver pegando as animações de outros projetos open source da internet mesmo, e fazendo retarget para poder encaixar perfeitamente dentro dos ossos do personagem, exportando o .ani, tudo certinho. E tá aqui o resultado. em breve vou disponibilizar serviços e vendas de animações! De brinde vou disponibilizar animação TK Dançando: Download2 pontos
-
Fala guerreiros, aí vai um cheat free para o servidor Veteranos priston tale. Está com dúvida de como usar? veja o vídeo. [Hidden Content] [Hidden Content] Deseja ter acesso a mais funções e ser um deus no joguinho? na descrição do vídeo tem o meu contato. Você é dono de servidor e deseja mitigar os cheats no seu servidor? entre em contato, vou te apresentar um sistema de anticheat exclusivo.2 pontos
-
Olá! Alguns aqui devem me conhecer, vez ou outra eu apareço mostrando algum servidor privado de GRAND CHASE que eu achei por ai mas hoje, pretendo fazer uma lista com TODOS os servidores online atualmente que eu achei garimpando internet a fora. Antes de começarmos, deixo avisado aqui que todos os servidores dessa lista foram testados por esse quem vos fala, logo, todos estão livres de qualquer tipo de virus! também aviso que, por mais que eu tenha visitado todos os servidores divulgados abaixo, vou deixar apenas informações básicas, pra não me estender muito, o resto fica por sua conta. chega de enrolação, bora pra ação CHASE HISTORY (SEASON V) provavelmente o mais conhecido dentre os servidores privados de GRAND CHASE Personagens: ELESIS ao UNO Quantidade de Players: Média/Baixa LINKS: Site Fórum Telegram Chase Hope (Season Chaos) Sim, finalmente um servidor SEASON CHAOS online pra quem sente falta dessa época lembrando que o Chase Hope existiu há 2 anos atrás e as contas foram mantidas, se você jogava antigamente pode usar sua conta do Chase Hope normalmente. Personagens: ELESIS ao LUPUS Quantidade de Players: Baixa LINKS: Site Fórum Discord Chase Revenant (Season 6) atualmente o servidor com mais recompensas pra quem é ativo no discord (sério, tem uns 10 tokens permanentes pra resgatar, desfrute) também conta com um continente totalmente novo intitulado "Rime" Personagens: ELESIS ao UNO (+ Peryton) Quantidade de Players: Média/Baixa LINKS: Site Discord Ernasis Online (Season V) um servidor gringo de GRAND CHASE atualmente na season V, mas é só isso mesmo, não tenho muito o que falar se você não mora no brasil, talvez deva considerar. Personagens: ELESIS ao UNO Quantidade de Players: Baixa LINKS: Site Discord Agnesia Online (Season V) antigo GRAND CHASE PRIME, mas eu resumiria ele como uma versão brasileira do Ernasis Online, apenas isso mesmo Personagens: ELESIS ao UNO Quantidade de Players: Baixa LINKS: Site Discord Chase Fantasy (Season 6) na minha HUMILDE opinião, o melhor servidor atualmente, o tanto de conteúdo inédito desse servidor é INACREDITAVEL e só visitando pra você entender conta com um continente totalmente novo, aumento do nivel maximo, novos personagens, sistemas de recompensar e muito mais Personagens: ELESIS ao UNO (+ PERYTON, ALICE) Quantidade de Players: Média/Alta LINKS: Site Fórum Discord Chase Remains (Season 3) sim, é isso mesmo, um servidor season 3 online atualmente recentemente migrado da season 2 pra 3, Chase Remains conta com algumas novidades dessa temporada, mas com o nível de dificuldade que você esperaria das seasons antigas. Personagens: ELESIS a MARI Quantidade de Players: Baixa/Média LINKS: Site Discord Chase Origin (Season 6) provavelmente o servidor que bate de frente com o Chase Fantasy em questão de conteúdo, mas com algumas diferenças uma coisa bem diferente dos outros servidores, é que no Origin todos os personagens contam com suas versões de missões GP, incluindo personagens novos como uno, peryton e alice ou seja, nada de precisar comprar slots de personagens, algo que todos os servidores poderiam adotar! Personagens: ELESIS ao UNO (+PERYTON, ALICE) LINKS: Site Fórum Discord Chase GO (Season 6) o último servidor lançado até o momento, que basicamente adaptou algumas coisas do classic, mas com grande parte do conteúdo sendo original deles. prometendo novos conteúdos (mas espero que cumpra) como 2 novos personagens, intitulados ASVERO e KAEL (tirados do próprio post aqui na webcheats), caso eu esteja errado, podem me corrigir nos comentários. Personagens: ELESIS a DECANEE Quantidade de Players: Baixa/Média LINKS: Site Discord Rizer Online (MOBILE) lembra da surpresa citada no titulo? pois é, Rizer Online promete uma experiência similar do GRAND CHASE de PC diretamente no seu Smartphone deixarei linkado um vídeo no youtube demonstrando um pouco do que ja foi feito lembrando que esse projeto está em sua fase inicial, então muita coisa deve ser melhorada/implementada. LINKS: Vídeo demonstração Discord enfim, foi longo, trabalhoso, mas foi tudo que eu consegui achar, espero que tenha lhe servido de algo se possivel, deixa um like no tópico, não custa nada do seu tempo, mas me motiva a trazer mais listas como essa. caso eu tenha esquecido de algum servidor, fique a vontade para cita-lo abaixo, que testarei e colocarei na lista caso seu servidor esteja na lista e por algum você quer que seja removido da mesma, basta comentar também e assim será feito até uma próxima, chaser!2 pontos
-
Essa source foi vendida para alguns na comunidade, e como sempre, o pessoal confia em outros programadores pra mexer e ai acaba virando bagunça. Caiu na mão de uma pessoa (que não vou citar), e essa pessoa está revendendo como se fosse dela o projeto. Se tratando de um projeto antigo (já a um pouco mais de um ano), e ainda utilizar clientpatch, vou estar disponibilizando aqui para estudos. Não encontrei a release do projeto ou o client do mesmo. Se eu encontrar posto depois. Trata-se da Source do The New World. Projeto feito por mim em cima da w2pp, com hooks do SeiTbNao e uma parcela de ajuda do Guga quanto a vTable do hook de grid. Está na versão 759 porém com modificações de versões superiores. Como dano mágico azul, slot de cinto e colar, e vários sistemas únicos. Para compilar vão precisar do MySql Connector 6.1 instalado na maquina [hide][Hidden Content]] Client: [Hidden Content] Scan: [Hidden Content] No scan acusou um virus mas no meu computador o antivirus não encontrou nada. De qualquer forma ta ai o scan e é por conta risco de vocês. Não há nenhum arquivo .exe na release, sugiro que vocês compilem db e tm. Editores de mob serve qualquer um da 759, inclusive os do SeiTbNao. Serverlist se não me engano ta direto no clientpatch. Download: [Hidden Content] Scan: [Hidden Content] Download Ferramentas: [Hidden Content] Scan Ferramentas: [Hidden Content] Banco de dados MySQL também está na release Segue o vídeo ensinando a instalar o banco de dados: [Hidden Content] Vídeo do server:2 pontos
-
Oi :) Passando pra divulgar meu servidor season 1 com vocês. É a última versão da season 1, ainda de 2008. O foco do servidor é o PvP. Plays todos os dias, com 3 a 6 pessoas online, em geral. O mote do servidor é: joga, te diverte. Quando sair, esquece que o jogo existe. 100% gratuito e sem fins lucrativos. Sem sistema de cash, recompensas, token, nada. É pelo play. Minha proposta é manter o GC Farofa ativo pra sempre, mesmo que pouca gente jogue. Pra gente ter sempre aquele gczinho antigo pra meter um PvP quando der vontade, sem compromisso. As outras modalidades funcionam normalmente: missão, expedição, tiro ao alvo, caçada... você pode matar a saudade de passar raiva dessas modalidades tranquilamente. Na criação da conta, todos os personagens já vêm lvl 75 e todas as classes liberadas: da Elesis ao Ryan até 4ª classe, e Ronan até a 2ª. Loja 100% liberada, com status zerado, pra montar seu set visual. Colares +9 na loja. Às vezes adicionamos novos sets, como por exemplo o pacote do Ovo, do Rato e os da Copa. Pra balancear o PvP, ao invés de criar um servidor balanceado, optei por criar itens acessórios com status específicos nas notas B+, C+ e C-, com três modalidades cada: um com mais ataque (furioso), um balanceado (equilibrista) e outro com mais def e vit (encouraçado). Assim, você pode se adaptar melhor às condições das partidas em questão, seja por gosto ou necessidade. Em geral, jogamos C+. Nos comentários, com o passar dos dias, postarei alguns replays de partidas. Servidor localizado em SP. Idealizado por Faro Fino e desenvolvido por TheCash. Combinações de jogo: Utilizamos, principalmente, o canal no WhatsApp. Com o tempo, virou uma pequena central de conversas, que inclusive joga Grand Chase diariamente, também em outros servidores amigos. É ali que alguém chega querendo jogar e diz: "vamos?", e lá vamos nós. Segue o link para entrar no grupo: [Hidden Content]. Fiz agora também um canal no Discord, usado ocasionalmente para calls. Usamos pouco, mas tudo que você perguntar lá, será respondido e atendido por mim. Link do Discord: [Hidden Content] Download: Você tem duas opções. Instalar o client, ou baixar a pasta em zip pronta. Instalador .exe: Opção 1: [Hidden Content] Opção 2:) [Hidden Content] Pasta .zip: Opção 1) [Hidden Content] Opção 2) [Hidden Content] WhatsApp: [Hidden Content] Discord: [Hidden Content] Site do TheCash: [Hidden Content] Instruções: Client: execute o arquivo GC Farofa Installer.exe como administrador e escolha a pasta onde você quer instalar o jogo. Selecione para criar o atalho na área de trabalho se quiser. Execute o atalho. Pronto. Pasta: extraia a pasta, abra ela e execute o arquivo Launcher.exe. Pronto. Scan do client no virustotal.com, isentando-o de malwares num geral: PRINTS DO CLIENT Ninja Pelado na cidade abandonada, um clássico: Espada C+, um clássico que não pode faltar:1 ponto
-
1 ponto
-
1 ponto
-
Tirando o fato que esse evento click é chato pra caralho, o Star Destiny era muito melhor e era um servidor privado.1 ponto
-
Global so ta aberto ainda por conta que permitem comércio de itens por R$. Se não fosse por isso já teria fechado o global falta em inovação olha quantos anos sempre os mesmos eventos sempre a mesmas coisas.1 ponto
-
O que ele faz 🗂️ Multi-client — abre N clientes do jogo com um clique (conta principal + mulas). ⚙️ Farm — mira o monstro mais próximo, usa suas skills (Num0–9) e o ataque básico em ciclo, sem parar. ✨ Buff — rebufa sozinho a cada X minutos; o Farm pausa durante os buffs e volta. 💀 Auto-Revive — morreu? Ele confirma a janela de morte, nasce na cidade, espera o tempo que você definir e usa o item de teleporte pra voltar ao spot e continuar farmando. Com limite de mortes pra não morrer em loop. ⚔️ Combat — spam de uma tecla com delay (PvP, boss, treino), liga/desliga pelo botão lateral do mouse. 🧪 Pot — poções automáticas de HP/MP/SP. 🎲 Reroll (Runa de Recriação) — recria os atributos do item até sair o resultado que você quer (lê os valores reais do item, aceita até 6 combinações alternativas e para sozinho). ⚡ Hacks — Fly, Super Fly e Speed. 🎯 Gatilhos por botão do mouse/tecla, perfis de configuração, autosave, tutorial completo dentro do launcher. Como começar Baixe o launcher, crie sua conta e escolha o plano (o tutorial dentro do launcher mostra cada função antes de comprar). Aponte a pasta do jogo e clique em Injetar DLL (com o jogo fechado) — uma vez só. Abra os clientes pelo launcher, logue no personagem e ligue os módulos. Observações Windows 10/11. O bot aperta teclas com o jogo em primeiro plano; pra farmar em segundo plano, rode o jogo numa VM (explicado no tutorial). Auto-Revive e Reroll precisam do jogo em modo janela/borderless. O Windows Defender pode acusar falso positivo no download — basta permitir o arquivo. 📥 Download: [Hidden Content] Windows Dedefender > [Hidden Content] SCAN > VirusTotal - File - VirusTotal - File - dcc6776482adc15ce90e4b3e0bf7bb124a017919216cdacaeef3bb2af5d0de471 ponto
-
Parabéns pelo projeto! Testei o jogo e ele é idle literalmente 😂 Aproveitei para fuçar um pouco mais a parte técnica também. Fiz alguns testes interceptando requisições, explorando os endpoints da API e tentando algumas manipulações client-side para ver se dava para contornar alguma validação ou alterar o comportamento do jogo. Até cheguei a usar snippets para automatizar alguns testes. A ideia foi apenas avaliar a estrutura e a segurança da aplicação; caso encontrasse alguma vulnerabilidade real, a intenção seria reportá-la. No fim, as validações do backend seguraram tudo que tentei. Achei bem interessante a estrutura e a forma como algumas regras estão sendo validadas no servidor. Parabéns pelo projeto! 👏1 ponto
-
Por que tu mudou de nick Leo? Sacanagem! Saudades dessa época que foi irada rs... Abraços. Uai, podemos tentar marcar, mas certamente não iremos conseguir rs.... Abraços.1 ponto
-
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]1 ponto
-
1 ponto
-
COMO USAR COOKIE-EDITOR Guia rápido para importar cookies em ambiente próprio. Atenção: Caso não acessar as contas, cookie está inválido. Certifique que esteja realmente funcional. Acesse a loja de extensões do seu navegador Abra a Web Store do Chrome, Brave ou outro navegador compatível com extensões do Chromium. Exemplo para Brave: [Hidden Content] Instale a extensão Cookie-Editor Procure pela extensão oficial Cookie-Editor e clique em instalar/adicionar ao navegador. Spoiler Abra o site autorizado onde o cookie será utilizado Com o site aberto, clique no ícone de extensões do navegador e selecione o Cookie-Editor. Spoiler Clique na opção de importar Dentro do Cookie-Editor, clique no botão IMPORTAR. Normalmente ele aparece como um dos últimos ícones da extensão. Spoiler Cole o cookie no campo de importação Após clicar em importar, será exibida uma área de texto. Cole ali o cookie em formato compatível, normalmente JSON, e confirme clicando novamente em IMPORTAR. Spoiler Atualize a página Depois da importação, recarregue a página pressionando F5 ou clicando no botão de atualizar do navegador. IMPORTAÇÃO FINALIZADA.1 ponto
-
1 ponto
-
1 ponto
-
𝗪𝗬𝗗 𝗔𝗖𝗥𝗔 𝟳.𝟱𝟰 (𝗩𝗲𝗿𝘀ã𝗼 𝟳.𝟱𝟰 𝗡𝗼𝘀𝘁𝗮𝗹𝗴𝗶𝗮) - A volta do verdadeiro WYD raiz com inventário 3D clássico. - Exp média e drop médio no equilíbrio perfeito. - Mortais com progressão balanceada, sem desvantagem no jogo. - Lan livre de bot: spots limpos e evolução justa. - opção de Farm offline: conquiste recompensas mesmo fora do jogo. - RVR com guerras de torres e batalhas épicas entre os reinos. - Servidor médio/médio: ideal para quem não tem muito tempo disponível. - Nostalgia da 7.54 original, mas com sistemas modernos que valorizam seu tempo. Um servidor criado para trazer diversão, equilíbrio e a verdadeira essência do WYD. Mais de 5 guilds já confirmadas e prontas para o combate! Inauguração oficial: 11 de setembro às 18h 𝗣𝗮𝗿𝘁𝗶𝗰𝗶𝗽𝗲 𝗱𝗮𝘀 𝗻𝗼𝘀𝘀𝗮𝘀 𝗰𝗼𝗺𝘂𝗻𝗶𝗱𝗮𝗱𝗲𝘀 [Hidden Content] 𝗗𝗜𝗦𝗖𝗢𝗥𝗗: [Hidden Content] 𝗚𝗥𝗨𝗣𝗢 𝗪𝗛𝗔𝗧𝗦𝗔𝗣𝗣: [Hidden Content]... 𝗦𝗜𝗧𝗘: 𝗘𝗠 𝗕𝗥𝗘𝗩𝗘 www.acrawyd.com.br [Hidden Content] [Hidden Content] [Hidden Content]1 ponto
-
admin if i put this in wrong section please put it into correct section thanks!. hi guys i create this via AI but the AI always give the same issue about not recognize the account existed into folder its always create it as successful register same account hope someone help us fix this issue this is the code register.html code [Hidden Content] register.php [Hidden Content] put this two into your server apache at same folder find this into register.php D:/WYD MYTH/account and change it into your directory folder update new update file with extra test file [Hidden Content] find this D:/WYD MYTH/account into api.php . there still some error there for my test topup so don't use it! put your DIY topup to replace it! into your idea topup use.1 ponto
-
Bom Dia programadores. A uns anos atrás comecei um projeto bem ousado em reconstrução do Client do Wyd usando unity3d, denominei esse projeto como Wyd-Master, até que consegui um avanço considerável. Ao longo do tempo não consegui mais mexer nesse projeto e acabei deixando de lado, então hoje venho disponibilizar pra quem tem interesse em desenvolvimento de games e é apaixonado por wyd, esse projeto vai ajudar bastante no parendizado. Obvio que o projeto tem seus defeitos e ai open Source vocês podem arrumar e usarem do jeito que quiserem. Servidor em C# puro. Client unity3d usando C#. Segue alguns prints do projeto: Programas utilizados. Unity3d 2019.1.3f1 MySQL Workbench + MySQL server Visual Studio 2019 Voce tem que conectar o banco de dados na porta 3307 com usuario "root" e senha "root" ou mudar no código do servidor para a porta que esta configurada na sua maquina. Na pasta do servidor tem uma pasta DB com script das tabelas do banco e a estrutura, basta executar. Depois disso só abrir o servidor e ver se deu tudo sucesso!. Download: [Hidden Content]1 ponto
-
𝗔𝗕𝗘𝗥𝗧𝗨𝗥𝗔 𝗢𝗙𝗜𝗖𝗜𝗔𝗟 HOJE(𝟭𝟮/𝟭𝟮) A jornada que você esperava finalmente começa. ⚔️ 𝗦𝗼𝗯𝗿𝗲 𝗱𝗼 𝗦𝗲𝗿𝘃𝗶𝗱𝗼𝗿 🔸 Versão: 7.97 (Exclusiva) 🔸 Experiência: Médio / Hard 🔸 Drop: Médio / Hard 🔸 Progressão pensada para desafio real 🔸 Quests Mortais: Do Lv. 40 até o 300 🔸 Sem monótoniedade 🔸 Diversas mecânicas 🔥 𝗦𝗜𝗦𝗧𝗘𝗠𝗔𝗦 𝗘𝗫𝗖𝗟𝗨𝗦𝗜𝗩𝗢𝗦 O servidor foi reconstruído do zero para entregar uma experiência única: 🔹 Zona Sangrenta (PvP de alto risco) 🔹 O Lado Esquecido 🔹 Vale Assombrado 🔹 Calabouços e Dungeons únicas 🔹 Sistema de Roleta 🔹 Passe de Batalha completo 🔹 VIP sem Pay2Win 🔹 EXP totalmente balanceada 🔹 Drop 100% refeito do zero 🔹 Melhorias visuais e mundo renovado 🔹 Desempenho otimizado para qualquer PC 🔹 Invasões a cada 1 hora 🔹 Mais de 10 bosses todos os dias 🔹 Guerra Nova 🔹 Guerra de Torre reformada 🔹 Mecânicas PvP renovadas 🔹 Economia estudada e estabilizada 🔹 Diversos caminhos de Farm 🔹 Diversas opções de Up E dezenas de outras mecânicas e sistemas inéditos! ♦️Aqui o objetivo é simples: 𝘁𝗲 𝗱𝗮𝗿 𝘂𝗺 𝘀𝗲𝗿𝘃𝗶𝗱𝗼𝗿 𝘃𝗶𝘃𝗼, 𝗳𝗹𝘂𝗶𝗱𝗼 𝗲 𝗰𝗼𝗺𝗽𝗲𝘁𝗶𝘁𝗶𝘃𝗼. 🏰 𝗖𝗢𝗠𝗨𝗡𝗜𝗗𝗔𝗗𝗘, 𝗚𝗨𝗜𝗟𝗗𝗔𝗦 𝗘 𝗟𝗢𝗡𝗚𝗔 𝗩𝗜𝗗𝗔 No Lost você não está entrando em “mais um servidor que vai fechar em 3 meses”. Somos uma equipe séria, experiente e totalmente dedicada ao projeto. 𝗧𝗿𝗮𝗯𝗮𝗹𝗵𝗮𝗺𝗼𝘀 𝗰𝗼𝗺: 🔸 Roadmap de +1 ano já definido 🔸 Atualizações contínuas 🔸 Transparência 🔸 Equipe dedicada 🔸 Suporte profissional ❤️🩹 Você fará parte de uma comunidade forte, unida e saudável, formada desde o beta e crescendo todos os dias. 📅 𝗔𝗕𝗘𝗥𝗧𝗨𝗥𝗔 𝗢𝗙𝗜𝗖𝗜𝗔𝗟 (12/12) ✅ Prepare sua guilda. ✅ Organize seu time. ✅ Venha e divirta-se com seus amigos. 🎉 O Lost abre as portas oficialmente dia 12 de dezembro — e você está convidado a escrever a história deste novo mundo 📷 𝗜𝗠𝗔𝗚𝗘𝗡𝗦 𝗗𝗢 𝗦𝗘𝗥𝗩𝗜𝗗𝗢𝗥 🔗 𝗘𝗡𝗧𝗥𝗘 𝗡𝗢𝗦 𝗖𝗔𝗡𝗔𝗜𝗦 𝗢𝗙𝗜𝗖𝗜𝗔𝗜𝗦 🌐 Site 💬 WhatsApp 🎮 Discord 📸 Instagram 📘 Facebook 🤖 Scan1 ponto
-
body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } h1 { text-align: center; margin-bottom: 30px; color: #38bdf8; } .container { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; } .card { background: #1e293b; border-radius: 12px; padding: 15px; box-shadow: 0 4px 12px rgba(0,0,0,0.3); } .card h2 { font-size: 16px; margin-bottom: 10px; color: #60a5fa; } .field { margin-bottom: 8px; } .label { font-weight: bold; color: #94a3b8; } ul { padding-left: 18px; margin: 0; } li { margin-bottom: 4px; } .warning { margin-top: 20px; text-align: center; font-size: 12px; } 🎁 Contas Steam com Jogos Pagos [Hidden Content]1 ponto
-
1 ponto
-
META TALE ASCENSION — CLOSED BETA O CLOSED BETA oficial do Meta Tale Ascension está chegando... e apenas 30 JOGADORES terão acesso exclusivo a essa primeira fase do projeto! Convide seus amigos e prepare-se para explorar antecipadamente uma nova experiência no universo de Priston Tale. Unimos nostalgia, estabilidade total, progressão desafiadora e sistemas modernos em um servidor preparado para evoluir junto com a comunidade. ATENÇÃO E INFORMAÇÕES IMPORTANTES: O CLOSED BETA terá APENAS 30 VAGAS disponíveis. O acesso será EXTREMAMENTE LIMITADO, só para poucos! Importante: Nem tudo que estiver disponível no BETA estará presente no lançamento oficial. Encontrou algum BUG ou ERRO? Reporte para nós! Tem SUGESTÕES para melhorar ainda mais o projeto? Compartilhe com a gente! Essa será a oportunidade para poucos privilegiados fazerem parte do início de uma nova era, testarem o servidor antes de todos e ajudarem diretamente na construção do Meta Tale Ascension. Data: 29/05 Horário: 20H META TALE ASCENSION O início da ascensão começa agora. COMO PARTICIPAR? Para garantir sua vaga, basta abrir um ticket no nosso Discord e explicar por que você deseja fazer parte do nosso Closed Beta! ENTRE NO DISCORD: [Hidden Content] MARQUEM SEUS AMIGOS E LÍDERES DE CLÃS! #MetaTale #Ascension #ClosedBeta #PristonTale #MMORPG #VagasLimitadas #NovaEra1 ponto
-
Para aprender a fazer esse tipo de hack, basta clicar AQUI Caso queira adquirir já pronto, me chame no discord: garryw_1 ponto
-
INFORMAÇÕES GERAIS • Level Inicial: 1 • Level Máximo: 110, com progressão contínua • 10 Classes disponíveis • Tier 4 liberado • RMT liberado • Aging máximo: +18 ━━━━━━━━━━━━━━━━━━━━ SISTEMAS PRINCIPAIS • Sistema de Aging Transparente, com todas as taxas disponíveis • Sistema de Relíquias Evolutivas • Sistema de Hell’s Gate Diário • Sistema de Quests Diárias, Únicas e Repetitivas • Sistema de Modo PK • Sistema de Desmontagem de Itens • Sistema de Evolução de Itens • Sistema de Trancar e Destrancar Itens • Sistema de Craft de Runas, com novidades exclusivas • Sistema de evolução de runas • Sistema de Restauração de Itens via NPC ━━━━━━━━━━━━━━━━━━━━ CONTEÚDOS E EVENTOS • Hell’s Gate todos os dias • Arena War • Modo Solo x Time • Alertas de Boss, Drops e PVP • Display de Dano • Calendário de eventos mensal via site Site: [Hidden Content] Discord: [Hidden Content]1 ponto
-
Basta deslizar e assistir o quanto quiser de vídeos +18 curtos e longos! [hide][Hidden Content]] Basta clicar na opção do Tiktok e aproveitar os milhares de vídeos!1 ponto
-
1 ponto
-
1 ponto
-
1 ponto
-
MEUS CANAIS DE VÍDEOS HC CURSOS E TUTORIAIS 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ VEICARECA GAMES 🎬 ▶️ PLAYLIST DO MEU CANAL NO YOUTUBE 🎬 ▶️ 🎮 Fala, galera! Sejam bem-vindos ao canal! Se você joga WYD (With Your Destiny) e está cansado daquele editor de painéis antigo, ultrapassado e cheio de limitações… ESSE VÍDEO É PARA VOCÊ! 🔥 📌 Eu estava desenvolvendo um projeto que seria VENDIDO, mas resolvi COMPARTILHAR DE GRAÇA com a comunidade. Porque todo mundo merece uma ferramenta digna, né? 🖌️ **O que esse editor tem de especial?** ✅ Interface gráfica MODERNA e atualizada ✅ Trabalha DIRETAMENTE nos painéis com a imagem (nada de ficar decorando códigos!) ✅ Muito mais rápido e intuitivo ✅ Compatível com os painéis do WYD ✅ Ideal para criar, editar e organizar seus painéis de forma profissional 💡 Chega de sofrer com ferramentas jurássicas! Aqui você vai ver na prática como esse editor transforma o trabalho com painéis. 👇 **DOWNLOAD:** 🔗 📁 CLIQUE AQUI PARA BAIXAR O EDITOR NA DESCRIÇÃO DO VÍDEO ⚠️ **Importante:** A ferramenta é totalmente gratuita, mas se quiser apoiar o canal, deixe aquele like e se inscreva! Isso ajuda demais a trazer mais conteúdos exclusivos. 💬 Dúvidas ou sugestões? Manda aí nos comentários! 🔔 Se inscreva no canal e ative o sininho para não perder nenhum conteúdo sobre WYD e ferramentas exclusivas! #WYD #WYDGlobal #EditorDePainéis #MMORPGRetrô #WYDBrasil #FerramentasWYD1 ponto
-
Sejam MUITO BEM-VINDOS ao FatalChase Chaos [BETA]! Depois de muita espera, finalmente estamos no ar! Considerando que estamos em uma fase de testes, é totalmente esperado que haja alguns bugs esquisitos que podem E DEVEM ser reportados via Discord ou WhatsApp! Se quiser tirar dúvidas comuns, acesse a seção FAQ em nosso site [Hidden Content] Season Chaos Experiência intensificada com mais conteúdo. EXP/GP 5x Elesis a Mari 4ª, Dio a Rey 2ª, Lupus 4ª Mais conteúdo! Até 1500 VP Grátis por semana Site: [hide][Hidden Content]] Discord: [hide][Hidden Content]] Season Chaos [BETA] Mais conteudo, mais possibilidades de build e desafios repensados para manter a progressao intensa sem perder o DNA do jogo Tamanho: 2,36 GB1 ponto
-
Tutorial em Texto: [Hidden Content] Tutorial em Vídeo: [Hidden Content]1 ponto
-
Vi que ultimamente está tendo uma boa procura para um macro de Lan, então tomei a liberdade de ajustar os Autodrop postado anteriormente para que funcione como um macro para Lan, onde ele irá andar dentro da zona de drop (não é tão preciso). Ele fará uma verificação de onde o personagem está, com isso ele entrará na zona de drop e fará a filtragem dos itens que julgar preciosos para o player. import pyautogui import cv2 import numpy as np import time import os from PIL import ImageGrab Caminhos para os templates (imagens dos itens e do mapa) TEMPLATE_DIR = "templates/" ITEM_LAN_KEY_IMAGE = TEMPLATE_DIR + "item_lan.png" # Imagem do item que entra na Lan CHECK_LAN_ZONE_IMAGE = TEMPLATE_DIR + "zona_lan_check.png" # Imagem que confirma que o player está na Lan Região da tela onde está o inventário (ajuste conforme sua resolução e posição) INVENTORY_REGION = {"left": 1440, "top": 160, "width": 420, "height": 460} Lista de itens que NÃO devem ser deletados (itens importantes ou usados pelo macro) WHITELIST = [ "templates/item_valioso1.png", "templates/item_valioso2.png", "templates/item_lan.png" # protege o item de entrada da Lan ] Captura uma imagem da região do inventário da tela def capture_inventory(region): bbox = (region["left"], region["top"], region["left"] + region["width"], region["top"] + region["height"]) screenshot = ImageGrab.grab(bbox=bbox) return cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR) Procura por uma imagem (template) dentro da captura atual da tela def match_template(image, template_path, threshold=0.85): if not os.path.exists(template_path): print(f"Template não encontrado: {template_path}") return [] template = cv2.imread(template_path) result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) locations = np.where(result >= threshold) return list(zip(locations[1], locations[0])) # retorna lista de coordenadas Simula clique com botão direito na tela, nas coordenadas recebidas def right_click(x, y): pyautogui.moveTo(x, y) pyautogui.click(button='right') Verifica se já está dentro da zona da Lan; caso não esteja, procura e usa o item de entrada def usar_item_entrada_lan(): print("Verificando se já estamos dentro da zona da Lan...") screenshot = capture_inventory(INVENTORY_REGION) if match_template(screenshot, CHECK_LAN_ZONE_IMAGE, 0.85): print("Já estamos na zona da Lan.") return print("Procurando item de entrada para a Lan...") matches = match_template(screenshot, ITEM_LAN_KEY_IMAGE, 0.85) if matches: x, y = matches[0] abs_x = x + INVENTORY_REGION["left"] abs_y = y + INVENTORY_REGION["top"] right_click(abs_x, abs_y) # usa o item com clique direito print("Item usado. Aguardando teleporte...") time.sleep(5) # espera o tempo do teleporte else: print("Item de entrada para a Lan não encontrado.") Percorre o inventário e remove os itens que não estão na whitelist def manage_inventory(screenshot): for file in os.listdir(TEMPLATE_DIR): if file.startswith("item_") and os.path.join(TEMPLATE_DIR, file) not in WHITELIST: path = os.path.join(TEMPLATE_DIR, file) matches = match_template(screenshot, path, 0.9) for (x, y) in matches: abs_x = x + INVENTORY_REGION["left"] abs_y = y + INVENTORY_REGION["top"] right_click(abs_x, abs_y) # deleta com clique direito print(f"Item deletado: {file} em ({abs_x}, {abs_y})") time.sleep(0.2) # tempo entre cliques Função principal do macro: entra na Lan e gerencia o inventário def main(): print("Macro Lan + AutoDrop iniciado.") usar_item_entrada_lan() # entra na Lan se ainda não estiver time.sleep(2) # Loop infinito que gerencia o inventário while True: screenshot = capture_inventory(INVENTORY_REGION) manage_inventory(screenshot) time.sleep(5) # tempo entre verificações if name == "main": main() Esse código eu testei apenas em um servidor de testes, então qualquer dúvida ou bug, comente aqui que vamos melhorar, mas como o objetivo é criar algo interativo e didático, iremos fazer juntos.1 ponto
-
Para comemorar este final de semana de Black Friday e ajudar quem não pode ficar 100% do tempo na frente do jogo, estou disponibilizando este AutoBot para o servidor Skytale. Não precisa fazer nada mirabolante apenas coloque a dll dentro do game e seja feliz. Criar Conta no PT Site do SkyTale [Hidden Content]1 ponto
-
Fala Galera, como tive bastante dificuldade em encontrar um conversor de strdef.bin compatível com meu servidor resolvi fazer um script. Vou disponibilizar o script que para utilizar é necessário ter o Python instalado. Eu gerei .exe dele que não precisa do Python instalado, mas por eu ter usado Pyinstaler o VirusTotal acusa virus nele mesmo sem ter nada, vou disponibilizar também de qualquer maneira, agradeço se alguem da moderação verificar e confirmar. Caso baixe o script, tenha o Python instalado, se for abaixo do 3.14 execute no cmd python "C:\caminho para o script\strdef_converter.py". Sendo o 3.14 dois cliques funciona. A interface é auto explicativa. Script: [Hidden Content] Executável: [Hidden Content]1 ponto
-
Está jogando MU Dark Epoch? Aproveite os códigos abaixo para ganhar recompensas dentro do jogo. Códigos disponíveis: [Hidden Content] Para resgatar, dentro do jogo acesse o ícone de seu perfil. Se algum código expirar ou surgir um novo, sinta-se à vontade para comentar e manter a lista atualizada.1 ponto
-
Preciso de ajuda com esse bug do hp na versão 7.59. Tenho a source do client. Print >> [Hidden Content] Whats para contato 419986257881 ponto
-
Salve TazLouc0 na área Foice Gigante - "Arquivo.ase" Para funcionar primeiramente você precisará saber o código da foice um dos jeitos mais facil de saber é através da pasta do seu Cliente Full "Quase todos PT funciona, alguns tem proteção e bloqueia o uso da foice gigante" caso o game bugar recomendo um backup da pasta dropitem Vamos lá : Abra seu Cliente Full, Localize a Pasta "Image", Localize a Pasta "Sinimage", Localize a Pasta "Items", Localize a Pasta "Weapons", Dentro da pasta "Weapons" fica as imagens dos itens de ataque do Servidor, nessa pasta você vai procurar pelo item que você está usando no Game. Vou dar um Exemplo: Estou usando a foice 80A "Hyper Foice", no game, então devo procurar a foice 80A na pasta. Localizando a foice na pasta, vou pegar o codigo dela... Exemplo: itwp110 Tendo o código dela em mãos, vou pegar o Arquivo.ase e Vou renomear ele para : itwp110.ase Agora vamos colocar ele na pasta certa para funcionar : Abra seu Cliente Full, Localize a Pasta "Image", Localize a Pasta "Sinimage", Localize a Pasta "Items", Localize a Pasta "DropItem", Dentro da pasta "DropItem" você cola o "itwp110.ase" e Relogue no game! Pronto, Agora você bate da distancia que quiser, funciona para todas classes, acredito que só classe ranger que não! Scan :[Hidden Content] Download :[Hidden Content] Arquivo antigo + funcional! , não sei quem é o criador, por isso não posso deixar os creditos! se as imagens da pasta tiver bloqueada você precisará do BMP PATCHER caso não tenha só digitar no Google: BMP PATCHER e fazer download, Colocar ele dentro da pasta que quer visualizar as imagens no caso : clientefull/image/sinimage/items/weapons e abri-lo !1 ponto
-
Salve salve comunidade! Dei uma atualizada no meu curso de desenvolvimento de cheats do zero para qualquer jogo e coloquei um módulo EXCLUSIVO de priston tale, vejam por cima o que vocês vão aprender a fazer em QUALQUER servidor: Além disso, são + de 60 aulas diretamente focadas em fazer você criar seus próprios cheats! Para aprender, basta clicar AQUI1 ponto
Esta tabela de classificação está definida para São Paulo/GMT-03:00
