Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Quest ID'sini Yanlış Yazdım, Oyuncular Her Seferinde Sıfırdan Başladı! Kafayı Yiyecektim.

devnix

Üye
Katılım
14 Mart 2026
Mesajlar
40
🔥 "Bu Save Sistemi Neden Çalışmıyor?"

Dostlar, bugün size yazılımcı olmanın en temel, en acı derslerinden birini anlatacağım: Typos (Yazım Yanlışları). Özellikle de sabahın köründe, 3. fincan kahveden sonra yapılanlarını. Bir oyun için quest (görev) ilerleme kayıt sistemi yazıyordum. Oyuncu bir görevi tamamladıkça, `player_quests` tablosundaki `progress` sütununu güncelleyecek ve `completed` durumunu `TRUE` yapacak basit bir mantık.

🕵️‍♂️ Debug Kabusu Başlıyor

Testçilerden raporlar yağıyor: "Aynı quest'i her girişimde sıfırdan başlıyorum!" İlk başta save/load mekanizmasını, veritabanı bağlantısını, transaction'ları suçladım. Saatlerce log karıştırdım. `UPDATE` sorguları çalışıyor gibi görünüyordu ama veri hiç kalıcı olmuyordu. StackOverflow'da bile "my sql update doesn't persist" diye aratıp durdum. Şaka gibi.

💡 Lanet Olası "Aha!" Anı

Sonunda, umutsuzca kodu satır satır incelerken, quest ID'sini alan fonksiyona baktım. Bir de ne göreyim?

Python:
def save_quest_progress(player_id, quest_id, progress):
    # Quest bilgilerini veritabanından çek
    db_quest_id = get_quest_id_from_name("Goblin Temizliği")  # ID: 101
    # ... update işlemi

Sorun burada değildi. Asıl bombayı, bu fonksiyonu çağırdığım yerde buldum:

Python:
# Ana oyun döngüsü içinde bir yerlerde...
if quest_completed:
    save_quest_progress(current_player.id, 110, 100)  # 110 yazmışım! 101 değil!

Evet. `101` yerine `110` yazmışım. Veritabanında `110` ID'li bir quest YOK. Sorgu çalışıyor, 0 satır etkileniyor (ve ben bunu loglamamıştım), ve sessizce fail oluyor. Oyuncunun gerçek quest'i (`101`) asla güncellenmiyor. Her seferinde de yeni bir kayıt oluşturmaya çalışan sistemim de yok, sadece var olanı güncelliyor. Sonuç: Sonsuz bir sıfırlanma döngüsü.

🤦‍♂️ Alınan Acı Dersler

1. Sihirli Sayılar (Magic Numbers) Kullanma! Direkt `101` yazmak yerine, bir `QUEST_GOBLIN_CLEANING = 101` sabiti tanımlamalıydım. Bu hatayı derleme/çalışma anında yakalardık.
2. Log Her Şeydir: UPDATE sorgusunun kaç satırı etkilediğini (`rowcount`) mutlaka logla. "0 satır etkilendi" bir HATA logudur, info değil!
3. Database Constraint'ler Güçlüdür: Eğer `quest_id` bir foreign key olsaydı ve `110` diye bir kayıt olmasaydı, database bize güzel bir hata fırlatırdı. Bazen DB'yi biraz sıkılaştırmak iyidir.

Neyse ki, tek bir rakamı düzeltmekle her şey çözüldü. Ama o kaybolan 5 saatlik debug seansı ve testçilerin sinirini bozma hissi... paha biçilemez.

Siz de böyle tek bir karakter yüzünden saatlerinizi heba ettiğiniz oldu mu? "Sihirli sayı" belasına karşı favori taktiğiniz nedir? Yorumlara yazın, dertleşelim!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri