Hasan Merkit

Moderasyon Üyesi
Geliştirici
Katılım
30 Ocak 2025
Mesajlar
5.726
Makaleler
13
Çözümler
114
Beğeniler
9.450
Yapay zekaya yaptırdığım tersine mühendislik çok ilginç bir noktaya geldi. Hem açık hem de kapalı kaynak işlerle uğraşması gerekiyordu.
Yaptırmak istediğim şey, çoğu koşulda erişilebilir bir Half-Life sunucusu kurmak. (Canım Gordon abimle ara sıra Pazar günleri oynarım. :D)

Açılacak Half-Life sunucusunda hedefler:

  • Steam master server ve VAC uyumlu olması
  • Orijinal ve korsan oyuncuların bağlanması
  • Sürüm ne olursa olsun sunucuya bağlanabilmeli.

Reunion, dproto gibi çözümler zaten biraz eski Half-Life sürümlerine izin veriyor ve korsan girişlerini açıyordu.
Ama onların desteği de sınırlıydı. Zaten 2014 yılında açtığım Half-Life sunucusu, dproto açığı yüzünden saldırganlar tarafından çökertiliyordu.

Half-Life veya Counter-Strike açık kaynak kodu mu?:

Half-Life: Kısmen.
Counter-Strike: Hayır.

Geriye kalan kısım: GoldSRC ve HLDS (Server Programı) kapalı kaynak.

Açık kaynak kodlarına ulaşarak daha güçlü bir HLDS yapma yolculuğu:


(Daha yapay zekâlar vitamin iken) ReHLDS isminde bir proje, tersine mühendislik yaparak eski bir Half-Life build ile tersine mühendislik yaparak;

Half-Life Dedicated Server
Counter-Strike
Counter-Strike Condition Zero

Kodlarını açık hale getirdiler. Ama burada şöyle bir sorun var: Half-Life, Valve tarafından tamamen terkedilmiş bir oyun değil. 1-2 yılda bir olsa bile güncelleme alıyor.
2023 yılında, 25. yıl dönümü güncellemesi getirdiler. Harita bellek limitlerini daha da yükselttiler.
Oyunun modern cihazlarda daha güzel çalışmasını sağladılar. Bir de o eski animasyonlu menüyü tekrar getirdiler.

Ama bununla beraber bazı şeyler bozuldu:

Counter-Strike Windows sürümünde bulunan ve bot paketleriyle gelen GameUI.dll artık oyun ile uyumsuzdu ve bu yüzden bot paketleri arayüzü bozdu.
(Uzun süre uğraşıp 2024 yılında düzeltmiş bir CS bot paketi sürümünü yayınladım.)
Ancak Half-Life sunucularında daha ciddi sorun vardı. ReHLDS artık güncel HL ile uyumlu değil. (Halen ReHLDS kullanan sunucular, mecburen oyunun eski dosyalarıyla çalışıyorlar.)

Yapay zekâ ile yolculuğum başladı: Kaliteli bir Half-Life server yapmak!

Codex GPT-6.1 Sol, ReHLDS kaynak kodunu forklayarak 25. yıl Half-Life ile tamamen uyumlu hâle getirdi.
Ardından Reunion projesini forklamasını istedim. Amacım, dünyadaki herhangi bir Half-Life sunucuma bağlanabilmesi dedim.

ReHLDS ve Reunion açık kaynak zaten. ReHLDS'yi gerçek insanlar tersine mühendislik ile üretmişti.
Ancak yapay zekanın kapalı kaynak olan GoldSRC motorunu anlaması gerekiyordu. Ayrıca benim ek isteğim, aynı klasörde client tarafı da çalışması.

  • Xash3D, Half-Life motorunun bir başka tersine mühendislik projesiydi. Onun kaynak kodlarını okudu.
  • Güncel Valve HLDS ve Half-Life client çalıştırıp birbirlerine bağladı.
  • Trafiği derinlemesine inceledi. Oyunun kurallarını anladı.

Sonuç: Linux ve Windows uyumlu bir ReHLDS forku üretmeyi başardı!

Peki ya 1998 yılı? Tersine mühendislik başlıyor!

Sürüm ne olursa olsun bağlanabilmeli kuralımızı kapsamasını istedim.
İnternetten "HL Retail Website Archive, CS 1.1 indir" gibi şeyler yazarak bulabildiğim en eski sürüm Half-Life kopyalarına ulaştım.

1793297724721.webp

ReUnion, protocol 47 ile protocol 48 ile uyumlu. Protocol 47 günümüzde sadece eski korsan sürümlerinde yer alır.
2003 yılında yayınlanan protocol 48'in ilk sürümü olan 4554 sürümü ise günümüzde sadece korsan sürümlerde kullanılıyor. Artık orijinal kalmadı.

Reunion şunları yapabiliyor:
Korsan p48 ile orijinal p48 aynı Half-Life sunucusuna bağlanabiliyor.
Korsan p47, orijinal sürüm Half-Life p48 sunucusuna bağlanabiliyor. (Config ile aktifleşirse)

Reunion şunu yapamıyor:
Korsan aşırı eski sürüm p47 2603, Half-Life sunucusuna bağlanamıyor.
Protocol 47'den eski Half-Life WON sürümü (Sierra logosu ile açılan o eski Half-Life) ile 2003'ten sonra çıkan Half-Life sürümleri aynı sunucuya bağlanamıyor.

Tersine mühendislik başlasın!

Reunion'u forklayacak olan yapay zekamız, yeni görevini tersine mühendislikten başka hiçbir şekilde getiremez. Başka çaresi yoktu.

Görev: Reunion desteği iyileştirilecek. Aşırı eski Half-Life sürümleri bile sunucumuza katılabilmeli.

WON sürümü Half-Life = Steam öncesi Half-Life oluyor. Hani Counter-Strike 1.5 ve ondan eski sürümleri oynadığınız:

1793299322200.webp
1793299354093.webp


Yapay zeka, önce Reunion kaynak kodlarını düzenledi. Ardından Half-Life Dedicated Server sunucusunu başlattı.

1793299538137.webp


Ancak Linux sürümünü ertelemek istedi. Çünkü Half-Life WON sürümleri sadece Windows için vardı.
Windows üzerinde tersine mühendislik yapmak daha kolay. Arada 2. bilgisayar olmayacak.
Steam yüklü olmayan Linux'ta HLDS forkumuz hata vermesin diye ek çalışma yapacaktık ancak iş sırası nedeniyle ertelemeliydik.

Windows ile devam etmeye karar verdi. Linux sürümünde steamclient.so işine sonra bakalım istedi:

1793299864996.webp


Computer-Use becerileri başladı: Orijinal Half-Life ile sunucuya bağlanıp aradaki paketleri tekrar analiz etti.

1793299907522.webp


Klavyeyi kullanmaya başladı:
["Konsol açma tuşu] + connect 192.168.1.10:27015

Bununla beraber sunucuya bağlanmış oldu. Harita açıldı. "Düşünüyor..." diyerek yapay zeka 15 saniye bekleyip[Y yazma tuşu] "Steam P48" yazıp Enter yaptı.
Sohbete "Steam P48" yazmış oldu.

1793300067366.webp


Ardından eski Half-Life'ı açtı. Ancak onu kontrol edemediği için benden hep yardım almak zorunda kaldı.

Elinde eski Half-Life sürümüne dair tek bir kod bile yok. Tersine mühendislik şart.

Eski Half-Life WON sürümüne ait HLDS çalıştırdı ve ona bağlanmamı istedi.
Ardından harita değiştirmemi istedi.

Bir süre resmen şöyle ilerledik:

ChatGPT: AFK kal.
Ben: Sunucuya bağlandım, hiçbir şey yapmıyorum.

ChatGPT: Eline levye al. Ardından bana tamam de.
Ben: Tamam.

ChatGPT: Bir kere zıpla. Ardından bir kere ateş et. Ardından R tuşuna bas. Bana tamam de.
Ben: Tamam.

ChatGPT: Tamam, hl.exe ve hlds.exe arasındaki ağ trafiğinde geçen tüm paketleri kaydettim. Oyundan çıkabilirsin.
Devam etti. Bir süre Reunion kodlarını değiştirdi. Sürekli ReHLDS fork'umu açıp kapattı. Ardından tekrar orijinal istemciyi açıp benzer hareketleri yaptırdı.

ChatGPT: P48 Steam ile benzer hareketleri yaptım. Aralarındaki ağı izledim. Bana gerekli olan her şeyi yakaladım. Şimdi Reunion kodlarını düzenleyeceğim.

Ardından yeni derleme alıp tekrar ReHLDS fork'umu açtı ve eski HL ile bağlanmamı istedi.

1793300466924.webp


Bir süre daha devam etti. Ardından ReHLDS'mizin çok eski Half-Life protokollerini desteklemesini sağladı.
Artık aşırı eski Client bile sunucumuzdan eksik harita, model ve ses indirebiliyor:

1793300576628.webp


Devam etti. En sonunda eski Half-Life'da harita açılır hale geldi.

1793296586134.webp


Ancak oyun 3 saniye sonra çöküyordu.

Oyunu bir debugger'a bağladığını söyleyerek karşıma eski Half-Life'ı tekrar açtı ve konsoldan sunucuya bağlanmamı, biraz oyunda yürümemi istedi.
Oyun çökünce "Sorunu yakaladım! Hemen düzenleme yapıyorum" dedi.

Ardından biraz daha emin olmak için testler yapmak istedi. HLDS'yi kapattırdı. Sadece eski Half-Life'a girmemi istedi.
Çok eski Half-Life'ın dillerinden artık anladığını söyledi.

Çünkü sürekli olarak eski Half-Life ve eski HLDS arasındaki bağlantıyı inceledi. Yeni Half-Life ve yeni HLDS arasındaki bağlantılarla karşılaştırdı.

1793300883713.webp


Gerçekten eski Half-Life dilinden anladığından emin olmak istedi:
Eski Half-Life'ı açmamı ve konsoldan datacore map'ını başlatmamı, sv_lan ayarını 1'e çekmemi istedi.

Komutlarla oyuna bağlanacağını ve gerçekten yanıt alıp alamayacağını test etmek istediğini söyledi.
Ardından oyuna 3 kere bağlanmayı denedi ve 3. kez denemesinde başarılı oldu.

İletişimi denemek amacıyla oyunda bazı hareketler yapmayı ve elindeki silahla ateş etmeyi denedi:

Resmen Codex, Half-Life sunucusuna bağlandı ve denemelerini yapıyor:

1793297125893.webp


Sonuç mu? Çok başarılı! :)


Normal şartlarda birbirleriyle bağlanmayacak olan: Orijinal Steam sürümü, eski CS 1.5 sürümü ve Xash3D sürümü aynı sunucuda:

1793301716833.webp



Bu da version bilgileri:

1793301886616.webp


Bu proje istediğim hale geldiğinde:

Benim ReHLDS sürümüm kullanılan sunucularda:

1. Half-Life sürümü ne olursa olsun herkes bağlanabilecek!
2. Counter-Strike için: Counter-Strike 1.5 ile Counter-Strike 1.6 aynı sunucuya bağlanabilecek!
3. Steam ve Non-Steam sürümler de aynı sunucuya bağlanabilecek!
4. Eksik dosyalara sahip Client, bağlandığında sunucudan gerekli dosyaları çekecek!

Çalışma bitmedi:

1.WON HL 1.1.1.0'dan daha eski sürümler de tersine mühendislik ile desteğe kavuşacak.
2. Counter-Strike 1.5 ile Counter-Strike 1.6 arasındaki iletişimin sağlanması için biraz daha çalışılması gerek.
3. Plugin sistemi uyumluluğu yapılacak.
4. Türkçe karakter desteklemeyen Client için ReHLDS, alternatif karaktere çevirip göndermeli. (Örneğin ğ yerine g.)
5. Çok uzun bir süre canlı sunucularda test edilmeli.

Çalışma tamamen bittiğinde GitHub üstünden ve Techolay'da "Projelerim" kısmında paylaşmayı düşünüyorum. :)