Neler yeni

PROSEDÜR Basılmayan İtemlerinizi NEW_UPGRADE Tablosunu Düzeltme Sorunları Fixleme

tades123

Yönetici
Katılım
10 Ocak 2025
Mesajlar
5
Tepkime puanı
1
Puanları
8
New_UPGRADE Tablosunda nIndex Çakışma Problemi ve Kesin Çözümü

Merhaba arkadaşlar,

Bu konuda Knight Online server kullananların sıkça yaşadığı, fakat çoğu zaman fark edilmeyen
New_UPGRADE tablosundaki nIndex çakışma problemini ve bunun
item basmama sorununa nasıl yol açtığını anlatacağım.



❗ Problem Nedir?

New_UPGRADE tablosunda bulunan nIndex alanı, upgrade sistemi tarafından
benzersiz (unique) gibi kullanılır.

Ancak bazı database’lerde:
  • Aynı nIndex değerine sahip birden fazla kayıt bulunur
  • Bu genellikle Unix Timestamp (time()) ile nIndex üretildiğinde olur
  • Aynı saniye içinde birden fazla insert atılırsa çakışma oluşur

Örnek kontrol sorgusu:
Kod:
SELECT MAX(nIndex) AS MaxIndex FROM New_UPGRADE;

Örnek sonuç:
Kod:
1666371085

Bu değer bir Unix Timestamp’tir (21 Ekim 2022).



🚨 Bu Çakışma Ne Gibi Sorunlara Yol Açar?

  • ❌ Item upgrade basmaz
  • ❌ Scroll çalışmaz
  • ❌ Yanlış oran / yanlış sonuç
  • ❌ Client sorunsuzken server tarafında hata oluşur

Kısacası:
Upgrade sistemi stabil çalışmaz.



✅ Çözüm: nIndex Değerlerini Benzersiz Hale Getirmek

Aşağıdaki sorgu:
  • Aynı nIndex’e sahip kayıtları tespit eder
  • İlk kaydı olduğu g*]()

    Çözüm ;
    Kod:
    [*]WITH CTE AS
    (
        SELECT 
            nIndex,
            ABS(CHECKSUM(NEWID())) AS NewIndex,
            ROW_NUMBER() OVER (PARTITION BY nIndex ORDER BY (SELECT NULL)) AS rn
        FROM New_UPGRADE
    )
    UPDATE CTE
    SET nIndex = NewIndex
    WHERE rn > 1;
    
    
    [*]
 
Üst Alt