Hikayeler

Reklam vermek için turkmmo@gmail.com

[ Offline Shop ] Pazarın Yeri Değiştirmeli Yeni Görünümlü ÇevrimDışı Pazar Sistemi

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

Offline Shop

Level 1
Üye
Katılım
11 Ocak 2017
Konular
2
Mesajlar
16
Reaksiyon Skoru
8
Altın Konu
0
Başarım Puanı
12
TM Yaşı
9 Yıl 3 Ay 10 Gün
MmoLira
1
DevLira
0

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!






@Frozen Shower;
@jumper21;

Klasik (standart) pazar kurunca pazardan item alınmıyordu. Satıldı diye hata veriyordu ve bir anlamı kalmıyordu klasik pazar olayının. @Shorty; sağolsun halletti eline sağlık aynı sorunu yaşayanlar için anlatım ektedir.



paket bugu : paketin flaglarını böyle yapın



pazarı kapat veya taşı butonları kaymışşa uiscript/shopdialog.py dosyanızla değişin


Sınırsız satın alma bugu fixi;

shop.cpp


//Arat
Kod:
if (m_pkPC && !HasOwner())

//Değiştir (Hepsini aratıp değiştir)

Kod:
if (m_pkPC)





Satılmayanları çekerken çekilen item eğer simya ise envantere geliyordu, fixi;

input_db.cpp


//Arat


Kod:
[FONT=courier new]        int iEmptyCell = ch->GetEmptyInventory(item->GetSize());
        if (iEmptyCell == -1)
        {
            item->SetSkipSave(true);
            M2_DESTROY_ITEM(item);
            sys_log(1, "CollectOfflineShopItem from %s item[%u] full inv", ch->GetName(), pItems->id);
            break;
        }[/FONT]


//Altına Ekle

Kod:
[FONT=courier new]        if (item->IsDragonSoul()){
            int pos;
            pos = ch->GetEmptyDragonSoulInventory(item);
            item->SetSockets(pItems->alSockets);
            item->SetAttributes(pItems->aAttr);
            item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, pos));
            ITEM_MANAGER::instance().FlushDelayedSave(item);
            ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("DRAGON SOUL INVENTORY %s"), item->GetName());
            continue;}[/FONT]

problem PyTuple_GetUnsignedLongLong kaynaklı.
PythonNetworkStreamModule.cpp açın

Kod:
PyObject* netSendSafeboxWithdrawMoneyPacket(PyObject* poSelf, PyObject* poArgs)[/FONT][/FONT][/CENTER]
[FONT=Verdana]
[CENTER][FONT=Verdana]{
#ifdef __OFFLINE_SHOP__
    uint64_t iMoney;
    if (!PyTuple_GetUnsignedLongLong(poArgs, 0, &iMoney))
        return Py_BuildException();
#else
    int iMoney;
    if (!PyTuple_GetInteger(poArgs, 0, &iMoney))
        return Py_BuildException();
#endif[/FONT]

[FONT=Verdana]    CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
    rns.SendSafeBoxMoneyPacket(SAFEBOX_MONEY_STATE_WITHDRAW, iMoney);
    TraceError("x money %d", iMoney);
    return Py_BuildNone();
}


burayı bulun böyle değiştirin
Kod:
PyObject* netSendSafeboxWithdrawMoneyPacket(PyObject* poSelf, PyObject* poArgs)[/FONT][/FONT][/CENTER]
[FONT=Verdana]
[CENTER][FONT=Verdana]{
    int iMoney;
    if (!PyTuple_GetInteger(poArgs, 0, &iMoney))
        return Py_BuildException();
    CPythonNetworkStream& rns=CPythonNetworkStream::Instance();
    rns.SendSafeBoxMoneyPacket(SAFEBOX_MONEY_STATE_WITHDRAW, iMoney);
    TraceError("x money %d", iMoney);
    return Py_BuildNone();
}

tek kaybınız bir defa da 2t den fazla para çekemezsiniz ki zaten niye çekesiniz

Turkmmo Flood Engelleme



bu arada sen yazınca fark ettim ifndef miş o satır. yani orayı ellemesek de doğru çalışır. ifdefin not yani olumsuz olanı ifndef :)


bazıları + para + giyili + kilitli item vs.
safebox.h açın

setGold bulup değiştirin

Kod:
        void        SetGold(int64_t llGold, BYTE type=0);[/FONT][/FONT][/CENTER]
[FONT=Verdana]
[CENTER][FONT=Verdana]


safebox.cpp açın setgold bulup değiştirin

Kod:
#ifdef __OFFLINE_SHOP__[/FONT][/FONT][/CENTER]
[FONT=Verdana]
[CENTER][FONT=Verdana]void CSafebox::SetGold(int64_t llGold, BYTE type)
{
    if (type)
        m_lGold += llGold;
    else
        m_lGold -= llGold;[/FONT]

[FONT=Verdana]    TPacketGCSafeboxMoneyChange pack;
    pack.bHeader = HEADER_GC_SAFEBOX_MONEY_CHANGE;
    pack.lMoney = m_lGold;
    m_pkChrOwner->GetDesc()->Packet(&pack, sizeof(pack));
}


input_db.cpp açın sb->SetGold bulup değiştirin

Kod:
     sb->SetGold(pcData->llAmount, pcData->bType);[/FONT][/FONT][/CENTER]
[FONT=Verdana]
[CENTER][FONT=Verdana]



İyi Forumlar

l0Ex1aBeB2xw9ihqM.gif

l0ExnOJpJQypg2P3G.gif

 
Moderatör tarafında düzenlendi:

En Çok Reaksiyon Alan Mesajlar

Koray, bence bu forumda ona karşı yeterince haksızlık ve iftira yapıldıktan sonra turkmmo'dan başka bir forumda paylaşım yapmak yerine yabancı forumlarda paylaşım yapmayı seçti. Eşitsizliğin ve ciddiyetsizliğin olmadığı yerde Koray ve onun gibi karakterli kişilerin durmayacağının bir nevi kanıtıdır bu. Ancak sağolsun, bizim milletimiz onu yabancı forumlarda da rahat bırakmıyor. Öğeyi görmek için üye olmalısınız.Öğeyi görmek için üye olmalısınız. bu durumda olduğu için belkide yabancı forumdaki paylaşımlarını burda yapmıyor. Belki de başka bir neden. Orasını tam bilemem. Çok iyi bildiğim bir şey var. Oda forumdaki geliştiricilerin paylaşımlarına saygı duyulması ve az da olsun paylaşımlarda biraz daha ciddiyet barındırılması. Milletçe warezi çok seviyoruz. Sonrasında diyoruz ki. Türklerden geliştirici çıkmıyor. Çıksa bile yabancı ülkelere gidiyor.

-------------------------------------
@Öğeyi görmek için üye olmalısınız. konuşalım bunu.
Ben zaten Python dilini Türkçe kullansın demiyorum. Veya Bütün kodları Türkçe yazsın demiyorum. Mesela oyunda gözükecek yazılar falan ingilizce dilinde. Ben bunu sordum. Fakat arkadaşlar mantıklı cevabını verdi. Diğer yorumlarda da nedenini anladım.

Lokalizasyon konusunda zaten yazdığınıza yorum yapmadım "Acaba sistemi o yazmadımı?" şeklinde bir yaklaşımda bulunursanız böyle bir şeye emek veren kişiyi zan altında bırakmış olursunuz yazılan kodlar çok temiz olması gereken standart da yazılmış Madem türkçe değil bunu kesin yabancı biri yazdı gibi bir tutum oluştuğu için forumdaki genel durumuda göz önünde bulundurarak bir yorum yaptım.

Geçen gün bir konuda gördüm adam tüm fonksiyonlarında KendiNicki1() KendiNicki2 şeklinde bir yazım standartı oluşturmuş bunu kendiniz kullanıyorsanız ve kamuya açık bir paylaşım yapmayacaksanız program sizin istediğin gibi yazın bizim için sıkıntı değil ancak yazdığınız program veya bir modül kamuya açık bir şekilde paylaşılacaksa standartlara uyulsun ki paylaşılan şey amacına ulaşsın birisi gördüğünde programı yazan kişinin ne yapmaya çalıştığını anlayabilsin.

Python burada sadece bir örnekti sadece bazı standartlar var dışına çıkılmaması gereken bu konuda forum geneline küçük bir sitemimdi bu
Abi sistemi 2 kez ekledim. 2 kezde sildim yok hayatımda gördüğüm en kötü sistem ya diğer offlineshoplar bile bundan iyidir.
bunu ekledin mi diğer sistemler düzgün çalışmıyor her şeyde hata aldım ya!
sistem zaten ayrı bir kafa ile kodlanmış hiç bir sistem ile uyumluluğu yok.
ep sistemi cheque sistemi buna uydurucam diye 2 gün uğraştım.
ayrıca sistem sunucu çökmesine çok sebep oluyor. :D
yalansa biri bana yalan desin.
o kadar şey yazdım kimse cevap vermedi.
sabitten kaldırın şu konuyu güzel falan yapılmış ama kodlar karman çorman daha dikkatli ve düzgün yazılabilecek basit bir sistemi karıştırmış durmuşlar kodlayan kişiye buda lafım.
varsa itirazı olan dinleriz.

Hepsi yanlış. Sistem temiz çalışıyor, birkaç eksiği var onları da vereyim ben buradan hadi:

item_manager.cpp



//Arat

Kod:
#ifdef __OFFLINE_SHOP__
    if (window == OFFLINE_SHOP || window == SAFEBOX_OFFLINE_SHOP){
        t.owner = item->GetLastOwnerPID();
    }
    else if (window == SAFEBOX || window == MALL)
    {
        t.owner =item->GetOwner()->GetDesc()->GetAccountTable().id;
    }
    else{
        t.owner =item->GetOwner()->GetPlayerID();
    }
#else
    t.owner = (t.window == SAFEBOX || t.window == MALL) ? item->GetOwner()->GetDesc()->GetAccountTable().id : item->GetOwner()->GetPlayerID();
#endif

Değiştir:

Kod:
if (window == OFFLINE_SHOP || window == SAFEBOX_OFFLINE_SHOP){t.owner = item->GetLastOwnerPID();}
    else{t.owner = (t.window == SAFEBOX || t.window == MALL) ? item->GetOwner()->GetDesc()->GetAccountTable().id : item->GetOwner()->GetPlayerID();}

Açıklama: 5 karakterli sistem kullananlar (maxmi 4.1 vb. gibi) 5. karakterden yani introselectte girdiğinde ilk gözüken karakterin bir solundaki karakterden depoya item koyulursa kaybolacaktır. Bu bunu çözecek ayrıca kök çözümünü de vereyim yoksa 5. karakterden pazar kurularsa depoya para gitmeyecektir. Bu sistemin eksikliği değil 5. karakter sistemini yapanın eksikliği kimse artık ona burdan söylüyorum:


char_change_empire.cpp


//Arat

Kod:
DWORD CHARACTER::GetAID() const

Bloğu tamamen değiş (eğer 5 karakter kullanıyor iseniz kullanmıyorsanız zaten sorununuz yoktur)

Kod:
DWORD CHARACTER::GetAID() const
{
    if (GetDesc()){
        const TAccountTable& rkTab = GetDesc()->GetAccountTable();
        if (rkTab.id){return rkTab.id;}
    }

    char szQuery[1024+1];
    DWORD dwAID = 0;

    snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(),GetPlayerID(), GetPlayerID(), GetEmpire());
    SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery);
    if (pMsg != NULL){
        if (pMsg->Get()->uiNumRows == 0){
            M2_DELETE(pMsg);
            return 0;
        }

        MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
        str_to_number(dwAID, row[0]);
        M2_DELETE(pMsg);
        return dwAID;
    }
    else{
        return 0;
    }
}



Ayrıca pazardan simya satın alınca envantere felan gelip kafayı yiyordu onunda çözümünü vereyim:


shop.cpp

//Arat


Kod:
if (HasOwner())
    {
        {
            item->SetSkipSave(false);
            item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
            item->SetWindow(SAFEBOX_OFFLINE_SHOP); // Get new item to extra safebox
            ITEM_MANAGER::instance().SaveSingleItem(item); // Save item to extra safebox
            item->SetWindow(INVENTORY); // Set inventory window as temporary window
            ITEM_MANAGER::instance().SaveSingleItem(item); // Register delayed save request for inventory window

            char buf[512];

            snprintf(buf, sizeof(buf), "%s %u %u %u", item->GetName(), m_dwOwnerPID, dwPrice, item->GetCount());
            LogManager::instance().ItemLog(ch, item, "SHOP_BUY2", buf);

            snprintf(buf, sizeof(buf), "%s %u(%s) %u %u", item->GetName(), ch->GetPlayerID(), ch->GetName(), dwPrice, item->GetCount());
            LogManager::instance().ItemLog(m_dwOwnerPID, 0, 0, item->GetID(), "SHOP_SELL2", buf, "", item->GetVnum());
        }

//Değiştir (logları kapatmıştım isteyen açar zaten)

Kod:
if (HasOwner()){
        {
            item->SetSkipSave(false);
            if (item->IsDragonSoul()){item->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));}
            else{item->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));}
            item->SetWindow(SAFEBOX_OFFLINE_SHOP); // Get new item to extra safebox
            ITEM_MANAGER::instance().SaveSingleItem(item); // Save item to extra safebox
            if (item->IsDragonSoul()){item->SetWindow(DRAGON_SOUL_INVENTORY);}
            else{item->SetWindow(INVENTORY);}
            // Set inventory window as temporary window
            ITEM_MANAGER::instance().SaveSingleItem(item); // Register delayed save request for inventory window

            /*char buf[512];
            snprintf(buf, sizeof(buf), "%s %u %u %u", item->GetName(), m_dwOwnerPID, dwPrice, item->GetCount());
            LogManager::instance().ItemLog(ch, item, "SHOP_BUY2", buf);
            snprintf(buf, sizeof(buf), "%s %u(%s) %u %u", item->GetName(), ch->GetPlayerID(), ch->GetName(), dwPrice, item->GetCount());
            LogManager::instance().ItemLog(m_dwOwnerPID, 0, 0, item->GetID(), "SHOP_SELL2", buf, "", item->GetVnum());*/
        }

Aklıma şimdilik bunlar geldi başka sorunlar olursa (sizin hatanız olmayan) yardımcı olurum buna veya @tslee61; hesabına mesja atın.
Onla alakası yok. Direk reboot atarsam sadece oyun veritabanında en son kayıtlı olan eski haline döner.
Bu başka bir şey. Ben dinamik size ve is sold özelliğini filan kaldırdım. Bir tane kodu eksik yazmışım o yüzden..
Sistem bence baya başarılı. Kullanabilmek için bir kaç özellik eklemem lazım.. Onlara kasıyorum :D
oyunda aktif çevrimdışı pazar ve aktif oyuncu var var ise, sen oyunu direkt olarak "reboot" yada "killall -9 game db" komutuyla kapatırsan cachede olan hiçbirşey kayıt olmadan database kapanır buda item kaybına offline shoplarda item silinmesine yol açar. sağlıklı olan shutdown dır önce tüm oyuncuları oyundan düşürürsün cacheden çıkarlar sonra oyunu kapatırsın ve kayıp yaşamassın
Konuya ekledi Yedek Link Burdan Devam :)
 
biraz içim burkuldu :S
 
@alondark54; Teşekkürler sorunsuzsa öpücem seni :)
 
Moderatör tarafında düzenlendi:
Bu nəçə cesərettir yarabbi. Səni tanımaq istəyirəm, Məni mütləq ara...
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

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

Geri
Üst