Çözüldü TC Offlineshop problemleri

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

MEKA

Discord: mekaprojects
Site yetkilisi
Süper Moderatör
Premium Üye
Grafiker
Geliştirici
Yardımsever Üye
Mesaj
2.789
Çözümler
287
Beğeni
2.040
Puan
1.850
Ticaret Puanı
2
1. Hata : 0 yang var iken offlineshop kurmaya çalıştıgımızda uyarı vermiyor pazarı kuruyor ve yang -1000e düşüyor
2. Hata : Birden fazla banka açılmasını engellemem gerekiyor
birden fazla banka.png

3. Hata : Banka yazmalı sisteme çevirmem gerekiyor 2t üzerinde bir item satıldıgı zaman yang çekilmiyor 2t sınır oldugu için
4. Hata : Nesne eklerken yang kısmına 999999 yazdım diyelim bidaki nesne eklemeye çalıştıgımda won kısmı otomatik 99999 gözüküyor.
parahatası.png

parahatası2.png

banka yazmalı.png
 
Çözüm
Sorunun bazılarını çözdük.
1. hata için
Yang kontrolü configden yapılıyormuş. Kanal içindeki CONFIG dosyalarını şunu ekledik.
Kod:
OFFLINE_SHOP_NEED_MONEY    enable 10000
0 yang cozuldu.jpg


2. hata için
root/uiofflineshop.py
Mantıksal bir sürü hata vardı. Onları düzenledik ve IsShow fonksiyonunu kullanarak kontrol ekledik.

3. Hata için
Won sistemi ekli olduğu için max 2t yang kısıtlaması getirildi ve pazar açılırken banka içinde ki tüm kazançların almasını isteyen koşul eklendi.

Kurulu olan pazara sonradan item ekleme özelliği olduğu için game/src/offlineshop.cpp içinde ki PutItem fonksiyonu içine kontrol ekledik.
Şu kodu aratın;
C++:
    if...
1. hata: Pazar açılırken yangınızı düşüren bölgede yang kontrolü yapılmadığı için olabilir.
2. hata: Bu videoyu izleyin. Burada yeni pencere kodlamayı gösterirken üst üste açılmasını engellemeyi de anlatmıştım.
3. hata: Pek anlayamadım. 2t sınırın mı arttırmak istiyorsunuz?
4. hata: Python kodlarında hata vardır belki. Biraz kurcalamanız gerek. :/
 
Yang sınırını arttırmak degilde bankaya text kısmı eklemek istiyorum çekilecek miktarı yazdırıp ordan çektircem şuanki banka yang çek butonu var bastıgın zaman tüm parayı çekiyor onun yerine yazılan miktarı çektirtmek istiyorum

1. hata için bi kod örnegi verirmisiniz birde bu hangi dosyanın içinden yapacagım inanın kafam yanmış durumda şuan:D
 
Sistem dosyalarına bakın zaten nereden olduğunu bulursunuz. Kodlarınızı görmeden bir şey diyemem
 
Sorunun bazılarını çözdük.
1. hata için
Yang kontrolü configden yapılıyormuş. Kanal içindeki CONFIG dosyalarını şunu ekledik.
Kod:
OFFLINE_SHOP_NEED_MONEY    enable 10000
0 yang cozuldu.jpg


2. hata için
root/uiofflineshop.py
Mantıksal bir sürü hata vardı. Onları düzenledik ve IsShow fonksiyonunu kullanarak kontrol ekledik.

3. Hata için
Won sistemi ekli olduğu için max 2t yang kısıtlaması getirildi ve pazar açılırken banka içinde ki tüm kazançların almasını isteyen koşul eklendi.

Kurulu olan pazara sonradan item ekleme özelliği olduğu için game/src/offlineshop.cpp içinde ki PutItem fonksiyonu içine kontrol ekledik.
Şu kodu aratın;
C++:
    if (!m_pGrid->IsEmpty(iPos, 1, item_table->bSize))
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You don't have enough space to put your item!"));
        return;
    }
Altına şu kodları ekleyin;
C++:
    //price limit baslangic
    //Bu kodlar www.mmotutkunlari.com'dan whistle tarafından yazilmistir.
    //Ilgılı konu: https://www.mmotutkunlari.com/konu/tc-offlineshop-problemleri.6573/#post-19508

    //1. adim: bankada ki kazanclari almak
    int64_t nTotalMoney = 0;
#ifdef ENABLE_CHEQUE_SYSTEM
    int64_t nTotalCheque = 0;

    std::auto_ptr<SQLMsg> pMsgWhistle(DBManager::instance().DirectQuery("SELECT gold_offlineshop, cheque_offlineshop FROM player.player WHERE id = %u", ch->GetPlayerID()));
#else
    std::auto_ptr<SQLMsg> pMsgWhistle(DBManager::instance().DirectQuery("SELECT gold_offlineshop FROM player.player WHERE id = %u", ch->GetPlayerID()));
#endif

    if (pMsgWhistle->Get()->uiNumRows > 0)
    {
        MYSQL_ROW row2 = mysql_fetch_row(pMsgWhistle->Get()->pSQLResult);
     
        str_to_number(nTotalMoney, row2[0]);
#ifdef ENABLE_CHEQUE_SYSTEM
        str_to_number(nTotalCheque, row2[1]);
#endif
    }

    //2. adim satilmayan itemler.
    for (DWORD n = 0; n < m_offlineShopItemVector.size() && n < OFFLINE_SHOP_HOST_ITEM_MAX_NUM; ++n)
    {
        if (m_offlineShopItemVector[n].bIsSold)
            continue;

        nTotalMoney += static_cast<int64_t>(m_offlineShopItemVector[n].price);
#ifdef ENABLE_CHEQUE_SYSTEM
        nTotalCheque += static_cast<int64_t>(m_offlineShopItemVector[n].cheque);
#endif
    }

    //3. adim ekleyecegimiz itemin fiyati.
    nTotalMoney += static_cast<int64_t>(iPrice);
#ifdef ENABLE_CHEQUE_SYSTEM
    nTotalCheque += static_cast<int64_t>(bCheque);
#endif

    if (GOLD_MAX <= nTotalMoney)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("HATA_MESAJI_xx1"));
        return;
    }

#ifdef ENABLE_CHEQUE_SYSTEM
    if (CHEQUE_MAX <= nTotalCheque)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("HATA_MESAJI_xx2"));
        return;
    }
#endif

    //price kontrol bitis

Kodların çalıştığıyla ilgili kanıt;
tc offlineshop yang ve won kontrolu.jpg



4. hata için:
root/uiCommon.py
dosyasının içinde bulunan MoneyInputDialog sınıfının içinde ki __OnValueUpdate fonksiyonunu şu şekilde düzenledik
Python:
    def __OnValueUpdate(self):
        if self.inputValue.IsFocus():
            ui.EditLine.OnIMEUpdate(self.inputValue)
        elif self.InputValue_Cheque.IsFocus():
            ui.EditLine.OnIMEUpdate(self.InputValue_Cheque)
        else:
            pass
 
        yang_text = self.inputValue.GetText()
        cheque_text = self.InputValue_Cheque.GetText()
 
        yang = 0
        cheque = 0
 
        if yang_text and yang_text.isdigit():
            try:
                yang = int(yang_text)
   
                if yang >= 2000000000:
                    yang = 1999999999
                    self.inputValue.SetText(str(yang))

            except ValueError:
                yang = 0

        if cheque_text and cheque_text.isdigit():
            try:
                cheque = int(cheque_text)
   
                if cheque >= 998:
                    cheque = 997
                    self.InputValue_Cheque.SetText(str(cheque))
 
            except ValueError:
                cheque = 0
 
 
        self.chequeText.SetText(str(cheque) + " " + localeInfo.CHEQUE_SYSTEM_UNIT_WON)
        self.moneyText.SetText(localeInfo.NumberToMoneyString(yang))

Daha sonra root/uiofflineshopbuilder.py dosyasından şu satırları sildik;
Python:
self.lastPrice = 0
Python:
self.lastPrice = price
Python:
priceInputBoard.SetValue(self.lastPrice)

Tekli item eklenen bölgede won 0 yazıldığında item eklenmiyordu. O sorun şu şekilde çözüldü.
game/src/offlineshop_manager.cpp dosyasında şu kodu
C++:
    // BEGIN_MAX_YANG
    if (!ch || iPrice <= 0 || iPrice > GOLD_MAX)
        return;
    // END_OF_MAX_YANG

#ifdef ENABLE_CHEQUE_SYSTEM
    if (!ch || bCheque <= 0 || bCheque > CHEQUE_MAX)
        return;
#endif

şöyle değiştirdik;
C++:
    if ((iPrice <= 0 && bCheque <= 0) || (iPrice >= GOLD_MAX || bCheque >= CHEQUE_MAX))
        return;

tekli item koyma sorunu cozuldu.jpg
 
Son düzenleme:
Çözüm
ALDIĞIM SYSERR ŞU ŞEKİLDE

SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 2, 21069, -120000) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 2, 30550, 10000) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2104, 1) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2105, 2) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2106, 1) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2107, 2) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2108, 3) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2191, 1) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2291, 2) errno: 1146)
 
ALDIĞIM SYSERR ŞU ŞEKİLDE

SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 2, 21069, -120000) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 2, 30550, 10000) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2104, 1) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2105, 2) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2106, 1) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2107, 2) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2108, 3) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2191, 1) errno: 1146)
SYSERR: Oct 28 05:32:38 :: ChildLoop: AsyncSQL: query failed: Table 'log.log_money' doesn't exist (query: INSERT INTO log_money VALUES (NOW(), 7, 2291, 2) errno: 1146)
navicat log tablosunda log_money yok diyor

SQL:
DROP TABLE IF EXISTS `log_money`;
CREATE TABLE `log_money` (
    `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `type` int(11) DEFAULT NULL,
    `vnum` int(11) DEFAULT NULL,
    `gold` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
navicat log tablosunda log_money yok diyor

SQL:
DROP TABLE IF EXISTS `log_money`;
CREATE TABLE `log_money` (
    `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `type` int(11) DEFAULT NULL,
    `vnum` int(11) DEFAULT NULL,
    `gold` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ONU ÇÖZDÜM KRAL ŞİMDİ BUNU VERİYOR

SYSERR: Oct 28 08:13:42 :: Process: UNKNOWN HEADER: 165, LAST HEADER: 0(0), REMAIN BYTES: 26, fd: 17
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 15:16:32 :: Process: UNKNOWN HEADER: 179, LAST HEADER: 0(0), REMAIN BYTES: 26, fd: 15
 
ONU ÇÖZDÜM KRAL ŞİMDİ BUNU VERİYOR

SYSERR: Oct 28 08:13:42 :: Process: UNKNOWN HEADER: 165, LAST HEADER: 0(0), REMAIN BYTES: 26, fd: 17
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 08:13:45 :: Analyze: Handshake phase does not handle packet 123 (fd 17)
SYSERR: Oct 28 15:16:32 :: Process: UNKNOWN HEADER: 179, LAST HEADER: 0(0), REMAIN BYTES: 26, fd: 15
Packet hatası yapmışsın packet.h eklediğin şeyleri kontrol et

Bu tarz şeyleri bu konu altına yazmayınız. Konu yorumlara kapatılmıştır.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst