Fethi Polat 1
Fethi Polat
Mt2Hizmet 1
Mt2Hizmet
Sevdamsın 1
Sevdamsın
Nedved35 1
Nedved35
Hikaye Ekle

N2play wslik 98-99

  • Konuyu başlatan Konuyu başlatan apikomt2
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 4
  • Görüntüleme Görüntüleme 464

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

1 ay açık bırakılarak kullanıldı.aşağıdaki hatalardan başka hata gözlemlenmedi.
game core vermedi ama online çok az vardı.
çeşitli hileleri test ettim açılmıyor.anti cheati sağlam.
geri kalan özellikleri alttaki linklerden bulabilirsiniz.


https://forum.turkmmo.com/konu/3934492-n2play-gelistirmeler/

tanıtım
https://forum.turkmmo.com/konu/3947...afirhane-com-tr-said-nursi-seffaf-web-sitesi/







gamede ip 136.0.121.250 bunu vps göre yada locale göre 127.0.0.1 olucak.bütün hepsi

sqller diğer dosyanın için




cmake bazı libleri static derlemediği için build hatası alabilirsiniz.

hunterdeki lib kısmıyla değiştirin
örneğin
C:\.hunter\_Base\e70c29f\987c1fa\2f43801\Install\lib

n2play sasorideki yorumalrdaki kurulum anlatımlarını yapabilirsiniz.dosyaları değitşirmeyin.


Bilgilendirme hatalar.
Ha
1-stb kaynaklı lonca simgesi yükleyince diyelim simge kırmızıysa mavi oluyor.
2-dx9ex kaynaklı dynamixe alındığı için.yükleme ekranında oyuna girerken gpu %70 lere çıkıyor.
3-oyuna girince skil seçiyorsun skili hemen vermiyor karakter atma işlemi gibi bir işlem yapman gerekiyor.
4-
hp damage görüntüleyicide.
diyelim yüskek damage attın 30 kadan 10 kaya dsutu rakibin damagesi.
hp barı 0 gösteriyor ama 10 k var kırmızı bar
5-
çan sav getirince quest 1-1 den ok savunma yazıyor.
ok savunma getirince çan savunma yazıyor.
skill atınca düz vurunca çan ve yelpaze savunma, savunma yapmıyor.



ek bilgilendirmeler
Kod:
D:\30.03.2026dunyamisafirhanemt2\Diamas n2 paly dunya misafirhane17.08.2025\source\thirdparty\d3dx9\x64\d3dx9.lib
D:\30.03.2026dunyamisafirhanemt2\Diamas n2 paly dunya misafirhane17.08.2025\source\thirdparty\d3dx9\x64\d3d9.lib

run bağlayıcı kısmında
D:\30.03.2026dunyamisafirhanemt2\Diamas n2 paly dunya misafirhane17.08.2025\source\thirdparty\d3dx9\x64\d3dx9.lib
ekliyor
D:\30.03.2026dunyamisafirhanemt2\Diamas n2 paly dunya misafirhane17.08.2025\source\thirdparty\d3dx9\x64\d3d9.lib
bunu eklemiyor.

böyle olucna sistem vs 2022 d3d9.lib tanıyor çakışma oluyor.
run bağlayıcı kısmına manuel ekleyin.
D:\30.03.2026dunyamisafirhanemt2\Diamas n2 paly dunya misafirhane17.08.2025\source\thirdparty\d3dx9\x64\d3d9.lib
bunu


2. sorun ise.

hunterdan çekilen ler bazılarıstatik değil cliente gömülü olmuyor.

bu durumda hutnerdan indirilenleri
ell e /mt modunda derelyin.
önceki lible değitşirin.

mesela libmysql.lib elle derlendi
/mt derlenmiş yoksa elinizde statik modudna delrenme zproje bozuk olur.

statik modunda olayanalr yani /mt modunda onalrı cmakeyle elle derleyin tabi hutnerla indirileni


lonca simgesi renk değişimi fixi için

MarkImage.cpp

Kod:
#include "MarkImage.h"

#include <base/Crc32.hpp>

#include <lz4.h>

// #define STB_IMAGE_IMPLEMENTATION
#include "stb-master/stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb-master/stb_image_write.h"
#include <vector>

CGuildMarkImage::CGuildMarkImage()
    : m_aakBlock{} // m_aakBlock hala mevcut, kalabilir.
{
    m_pPixels = nullptr; // Yeni eklediğimiz pointer'ı boş (null) olarak başlatıyoruz.
}

CGuildMarkImage::~CGuildMarkImage()
{
    Destroy();
}

void CGuildMarkImage::Destroy()
{
    if (m_pPixels)
    {
        free(m_pPixels);
        m_pPixels = nullptr;
    }
}

void CGuildMarkImage::Create()
{
    if (m_pPixels)
        return;

    // Başlangıçta boş bir siyah resim oluştur
    m_pPixels = (Pixel*)malloc(sizeof(Pixel) * WIDTH * HEIGHT);
    memset(m_pPixels, 0, sizeof(Pixel) * WIDTH * HEIGHT);
}

bool CGuildMarkImage::Save(const char *c_szFileName)
{
    if (!m_pPixels) return false;

    // Kaydetmeden önce kanalları ters çevir (BGRA -> RGBA)
    uint8_t* pRawByte = (uint8_t*)m_pPixels;
    uint32_t totalPixels = WIDTH * HEIGHT;

    for (uint32_t i = 0; i < totalPixels; ++i)
    {
        uint8_t tempB = pRawByte[i * 4 + 0];
        pRawByte[i * 4 + 0] = pRawByte[i * 4 + 2];
        pRawByte[i * 4 + 2] = tempB;
    }

    // STB ile kaydet
    bool result = stbi_write_tga(c_szFileName, WIDTH, HEIGHT, 4, m_pPixels) != 0;

    // Hafızadaki orijinal veriyi bozmamak için tekrar eski haline getir (RGBA -> BGRA)
    for (uint32_t i = 0; i < totalPixels; ++i)
    {
        uint8_t tempR = pRawByte[i * 4 + 0];
        pRawByte[i * 4 + 0] = pRawByte[i * 4 + 2];
        pRawByte[i * 4 + 2] = tempR;
    }

    return result;
}

bool CGuildMarkImage::Build(const char *c_szFileName)
{
    Destroy();
    Create();

    return Save(c_szFileName);
}

bool CGuildMarkImage::Load(const char *c_szFileName)
{
    Destroy();

    int width, height, channels;
    // TGA veya başka formatları yükle. zorla 4 kanal (RGBA) al.
    Pixel* loadedPixels = (Pixel*)stbi_load(c_szFileName, &width, &height, &channels, 4);

    if (!loadedPixels)
    {
        // Dosya yoksa oluştur
        if (!Build(c_szFileName)) return false;
        return Load(c_szFileName); // Yeni oluşturulanı yükle
    }

    if (width != WIDTH || height != HEIGHT)
    {
        SPDLOG_ERROR("CGuildMarkImage: {0} size mismatch!", c_szFileName);
        stbi_image_free(loadedPixels);
        return false;
    }

    // --- RENK KANALI DÜZELTME (RGBA -> BGRA) ---
    // STB veriyi RGBA yükler, ancak Metin2 BGRA bekler.
    // R (Kırmızı) ve B (Mavi) kanallarının yerini değiştiriyoruz.
    uint8_t* pRawByte = (uint8_t*)loadedPixels;
    uint32_t totalPixels = width * height;

    for (uint32_t i = 0; i < totalPixels; ++i)
    {
        uint8_t tempR = pRawByte[i * 4 + 0];     // İlk byte: R
        pRawByte[i * 4 + 0] = pRawByte[i * 4 + 2]; // R yerine B yaz (Son byte)
        pRawByte[i * 4 + 2] = tempR;             // B yerine R yaz
    }
    // -------------------------------------------

    m_pPixels = loadedPixels;
    BuildAllBlocks();
    return true;
}

// Resmin belirli bir bölgesine veri yazma
void CGuildMarkImage::PutData(uint32_t x, uint32_t y, uint32_t width, uint32_t height, void *data)
{
    if (!m_pPixels || !data) return;

    Pixel* pSrc = (Pixel*)data;
    for (uint32_t i = 0; i < height; ++i)
    {
        // Y ekseni Metin2/DevIL mantığında bazen ters olabilir, duruma göre (y+i) veya (y+height-1-i) ayarlanır.
        Pixel* pDestRow = m_pPixels + ((y + i) * WIDTH) + x;
        memcpy(pDestRow, pSrc + (i * width), width * sizeof(Pixel));
    }
}

void CGuildMarkImage::GetData(uint32_t x, uint32_t y, uint32_t width, uint32_t height, void *data)
{
    if (!m_pPixels || !data) return;

    Pixel* pDest = (Pixel*)data;
    for (uint32_t i = 0; i < height; ++i)
    {
        Pixel* pSrcRow = m_pPixels + ((y + i) * WIDTH) + x;
        memcpy(pDest + (i * width), pSrcRow, width * sizeof(Pixel));
    }
}

// 이미지 = 512x512
//   블럭 = 마크 4 x 4
//   마크 = 16 x 12
// 한 이미지의 블럭 = 8 x 10

bool CGuildMarkImage::SaveBlockFromCompressedData(uint32_t posBlock, const uint8_t *pbComp, uint32_t dwCompSize)
{
    if (posBlock >= BLOCK_TOTAL_COUNT)
        return false;

    Pixel apxBuf[SGuildMarkBlock::SIZE];
    int32_t sizeBuf = LZ4_decompress_safe((const char *)pbComp, (char *)apxBuf, dwCompSize, sizeof(apxBuf));
    if (sizeBuf < 0)
    {
        SPDLOG_ERROR("cannot decompress, compressed size = {0}", dwCompSize);
        return false;
    }

    if (sizeBuf != sizeof(apxBuf))
    {
        SPDLOG_ERROR("image corrupted, decompressed size = {0}", sizeBuf);
        return false;
    }

    uint32_t rowBlock = posBlock / BLOCK_COL_COUNT;
    uint32_t colBlock = posBlock % BLOCK_COL_COUNT;

    PutData(colBlock * SGuildMarkBlock::WIDTH,
            rowBlock * SGuildMarkBlock::HEIGHT,
            SGuildMarkBlock::WIDTH,
            SGuildMarkBlock::HEIGHT,
            apxBuf);

    m_aakBlock[rowBlock][colBlock].CopyFrom(pbComp, dwCompSize,
                                            ComputeCrc32(0, (const char *)apxBuf,
                                                         sizeof(Pixel) * SGuildMarkBlock::SIZE));
    return true;
}

void CGuildMarkImage::BuildAllBlocks() // 이미지 전체를 블럭화
{
    Pixel apxBuf[SGuildMarkBlock::SIZE];
    SPDLOG_INFO("CGuildMarkImage::BuildAllBlocks");

    for (uint32_t row = 0; row < BLOCK_ROW_COUNT; ++row)
    {
        for (uint32_t col = 0; col < BLOCK_COL_COUNT; ++col)
        {
            GetData(col * SGuildMarkBlock::WIDTH,
                    row * SGuildMarkBlock::HEIGHT,
                    SGuildMarkBlock::WIDTH,
                    SGuildMarkBlock::HEIGHT,
                    apxBuf);

            m_aakBlock[row][col].Compress(apxBuf);
        }
    }
}

uint32_t CGuildMarkImage::GetEmptyPosition()
{
    SGuildMark kMark{};

    for (uint32_t row = 0; row < MARK_ROW_COUNT; ++row)
    {
        for (uint32_t col = 0; col < MARK_COL_COUNT; ++col)
        {
            GetData(col * SGuildMark::WIDTH,
                    row * SGuildMark::HEIGHT,
                    SGuildMark::WIDTH,
                    SGuildMark::HEIGHT,
                    kMark.m_apxBuf);

            if (kMark.IsEmpty())
                return (row * MARK_COL_COUNT + col);
        }
    }

    return INVALID_MARK_POSITION;
}

void CGuildMarkImage::GetBlockCRCList(uint32_t *crcList)
{
    for (uint32_t row = 0; row < BLOCK_ROW_COUNT; ++row)
        for (uint32_t col = 0; col < BLOCK_COL_COUNT; ++col)
            *(crcList++) = m_aakBlock[row][col].GetCRC();
}

////////////////////////////////////////////////////////////////////////////////
void SGuildMark::Clear()
{
    for (uint32_t iPixel = 0; iPixel < SIZE; ++iPixel)
        m_apxBuf[iPixel] = 0xff000000ul;
}

bool SGuildMark::IsEmpty()
{
    for (uint32_t iPixel = 0; iPixel < SIZE; ++iPixel)
        if (m_apxBuf[iPixel] != 0x00000000ul)
            return false;

    return true;
}

////////////////////////////////////////////////////////////////////////////////
uint32_t SGuildMarkBlock::GetCRC() const
{
    return m_crc;
}

void SGuildMarkBlock::CopyFrom(const uint8_t *pbCompBuf, uint32_t dwCompSize, uint32_t crc)
{
    if (dwCompSize > LZ4_compressBound(sizeof(Pixel) * SGuildMarkBlock::SIZE))
        return;

    m_sizeCompBuf = dwCompSize;
    memcpy(m_abCompBuf.data(), pbCompBuf, dwCompSize);
    m_crc = crc;
}

void SGuildMarkBlock::Compress(const Pixel *pxBuf)
{
    m_sizeCompBuf = LZ4_compressBound(sizeof(Pixel) * SGuildMarkBlock::SIZE);
    m_abCompBuf.resize(m_sizeCompBuf);

    m_sizeCompBuf = LZ4_compress_default(reinterpret_cast<const char *>(pxBuf),
                                         reinterpret_cast<char *>(m_abCompBuf.data()),
                                         sizeof(Pixel) * SGuildMarkBlock::SIZE, m_sizeCompBuf);
    if (m_sizeCompBuf <= 0)
    {
        SPDLOG_ERROR("Compress: Error! {0} > {1}",
                     sizeof(Pixel) * SGuildMarkBlock::SIZE,
                     m_sizeCompBuf);
        return;
    }

    m_crc = ComputeCrc32(0, (const char *)pxBuf,
                         sizeof(Pixel) * SGuildMarkBlock::SIZE);
}

2. gpu yükselme durumu ise.

düşük ekran karti iyi ekran kartı da olsa gpuyu %70 lerde kullanıyor.fakat oyunu normal olarak açıyor.hem düşük hem iyi ekran kartlarında.
 
Son düzenleme:

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst