Client / Pack Marty sama 5.9 files

  • Konuyu açan Konuyu açan Proffesorr
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 1
  • Gösterim Gösterim 38

Proffesorr

Yeni Üye
Üye
Mesaj
1
Beğeni
1
Puan
1
Ticaret Puanı
0
Martysama 5.9 — Türkçe / DX11 / Kaynak Kodlu

Merhaba arkadaşlar,

Forumda bulduğum Martysama 5.9 files ilk hâliyle Macarcaydı. Türkçeye çevirdim ve geliştirmeye devam ediyorum. Türkçe karakterler, giriş ekranı ve envanter açılışındaki bazı sorunları düzelttim.

Pakete Efsun Botu, Rank, Ikarus Pazar, Fırsatı Yakala, ahşap arena ve F8’den açılan Toplu Sil / Sat sistemini dahil ettim. Tespit ettiğim ölü kodları, tekrarlanan fonksiyonları ve paketlerdeki eski dosya kopyalarını kaldırıp yeniden derledim.

Önceki ana oyun paketi yaklaşık 5,2 GB’tı. Burada paylaştığım, yukarıdaki sistemleri içeren sürümün ZIP boyutu yaklaşık 2,4 GB.

İstemci x64 / DirectX 11. Hazır sunucu dosyalarını FreeBSD 15 ve MariaDB 10.11 ortamında denedim. Kaynaklar ve kurulum açıklamaları paketin içinde. Özgün yazar ve lisans bilgilerini korudum.

Deneyip hata görürseniz konuya yazabilirsiniz. Desteğe ihtiyacı olanlar Discord üzerinden bana ulaşabilir: s1de_0

Eklediğim sistemlerin oyun içi görsellerini de konuya ekledim.

Simya sistemini bu sürümde oyuncu kullanımına kapattım. İlgili kaynak kodları pakette duruyor; tamamen silinmiş değil.

İndir:

İsteğe bağlı: ' tuşuyla tek seferde eşya toplama

Ana sunucumda kullandığım toplu toplama düzenlemesini eklemek isteyenler için kodları aşağıya bırakıyorum. Bu düzenleme indirme paketine dahil değildir.

Tek basışta mevcut toplama mesafesindeki, toplama hakkınız olan eşyaları toplar. Aynı işlem Z tuşunda da çalışır. Düzenlemeden önce üç dosyayı yedekleyin.



Dosyalar ZIP içindeki Sources/Native/Client/UserInterface klasöründedir.

1. PythonItem.h
PythonItem.h:
Genişlet Daralt Kopyala
// Include bölümüne yoksa ekle:
#include <vector>

// Aranır:
bool GetCloseItem(const TPixelPosition & c_rPixelPosition,
                 DWORD* pdwItemID, DWORD dwDistance=300);

// Hemen altına eklenir:
void GetCloseItemVector(const TPixelPosition& position,
                       std::vector<DWORD>& itemIDs,
                       DWORD distance = 300);

2. PythonItem.cpp
PythonItem.cpp:
Genişlet Daralt Kopyala
// Include bölümüne olmayanları ekle:
#include "PythonPlayer.h"
#include <algorithm>
#include <utility>
#include <vector>

// Aranır:
// BOOL CPythonItem::GetGroundItemPosition
// Bu fonksiyonun hemen ÜSTÜNE aşağıdaki yeni fonksiyon eklenir.
// Mevcut GetCloseItem fonksiyonu silinmez.

void CPythonItem::GetCloseItemVector(
    const TPixelPosition& position,
    std::vector<DWORD>& itemIDs,
    DWORD distance)
{
    itemIDs.clear();
    std::vector<std::pair<double, DWORD>> closeItems;
    const double radiusSquared = double(distance) * double(distance);
    CPythonPlayer& player = CPythonPlayer::Instance();
    const char* playerName = player.GetName();

    for (TGroundItemInstanceMap::const_iterator it =
             m_GroundItemInstanceMap.begin();
         it != m_GroundItemInstanceMap.end(); ++it)
    {
        const TGroundItemInstance* item = it->second;
        if (!item)
            continue;

        const double dx =
            double(position.x) - double(item->v3EndPosition.x);
        const double dy =
            double(position.y) + double(item->v3EndPosition.y);
        const double distanceSquared = dx * dx + dy * dy;

        if (distanceSquared <= radiusSquared &&
            (item->stOwnership.empty() ||
             item->stOwnership == playerName ||
             player.IsPartyMemberByName(item->stOwnership.c_str())))
        {
            closeItems.emplace_back(distanceSquared, it->first);
        }
    }

    std::sort(closeItems.begin(), closeItems.end());
    itemIDs.reserve(closeItems.size());
    for (const auto& item : closeItems)
        itemIDs.push_back(item.second);
}

3. PythonPlayerInput.cpp
PythonPlayerInput.cpp:
Genişlet Daralt Kopyala
// Include bölümüne yoksa ekle:
#include "PythonItem.h"

// Aranır:
// void CPythonPlayer::PickCloseItem()
// Mevcut fonksiyon, süslü parantezleriyle birlikte aşağıdakiyle değiştirilir.

void CPythonPlayer::PickCloseItem()
{
    CInstanceBase* mainActor = NEW_GetMainActorPtr();
    if (!mainActor)
        return;

    TPixelPosition position;
    mainActor->NEW_GetPixelPosition(&position);

    std::vector<DWORD> itemIDs;
    CPythonItem& items = CPythonItem::Instance();
    items.GetCloseItemVector(
        position, itemIDs, __GetPickableDistance());

    for (DWORD itemID : itemIDs)
        SendClickItemPacket(itemID);
}

Derleme
Üç dosyayı kaydettikten sonra istemciyi Release / x64 olarak yeniden derleyin. Oyun kapalıyken eski Client/metin2client.exe dosyasını yedekleyip yeni derlenen EXE ile değiştirin.

Paylaştığım paketin game.py dosyasında ' (DIK_GRAVE) ve Z tuşları zaten PickUpItem işlevine bağlıdır; tuş kodu eklemeniz gerekmez. Bu paket için sunucu, SQL veya ağ paketi değişikliği gerekmez. Mevcut toplama mesafesi ve sunucunun sahiplik/envanter kontrolleri korunur.
 

Dosya Eklentileri

  • Ekran görüntüsü 2026-11-03 221940.webp
    Ekran görüntüsü 2026-11-03 221940.webp
    195,3 KB · Gösterim: 0
  • Ekran görüntüsü 2026-11-03 221951.webp
    Ekran görüntüsü 2026-11-03 221951.webp
    162,1 KB · Gösterim: 0
  • Ekran görüntüsü 2026-11-03 222011.webp
    Ekran görüntüsü 2026-11-03 222011.webp
    185,3 KB · Gösterim: 0
  • Ekran görüntüsü 2026-11-03 222025.webp
    Ekran görüntüsü 2026-11-03 222025.webp
    186,6 KB · Gösterim: 0
  • Ekran görüntüsü 2026-11-03 222045.webp
    Ekran görüntüsü 2026-11-03 222045.webp
    200,2 KB · Gösterim: 0
  • Ekran görüntüsü 2026-11-03 222127.webp
    Ekran görüntüsü 2026-11-03 222127.webp
    182,2 KB · Gösterim: 0
Son düzenleme:
Geri
Üst