Files
ClassicAssist.Avalonia/yapilan.md
T
Beyhan Oğur d5f52cc3d3 first commit
2026-09-03 04:45:36 +03:00

3.9 KiB
Raw Blame History

ClassicAssist.Avalonia Linux Setup - Yapılan Değişiklikler

Özet

ClassicAssist.Avalonia plugin'i ClassicUO üzerinde Linux'ta çalışır hale getirildi.


1. ClassicUO - Plugin Yükleme Düzeltmeleri

Dosya: ClassicUO/src/ClassicUO.Client/Network/Plugin.cs

  • Sorun: dotnet cuo.dll ile çalıştırıldığında PluginHost null oluyor, plugin hiç yüklenmiyordu
  • Çözüm: PluginHost == null olduğunda fallback managed loader eklendi
  • Assembly.LoadFile + AssemblyResolve handler ile plugin ve bağımlılıkları yükleniyor
  • Reflection ile Assistant.Engine.Install() metodu çağrılıyor

Dosya: ClassicUO/src/ClassicUO.Bootstrap/src/Plugin.cs

  • Çözüm: meth.Invoke öncesi AssemblyResolve handler eklendi (plugin bağımlılıkları için)

2. ClassicAssist.Avalonia Düzeltmeleri

Dosya: ClassicAssist.Avalonia/Engine.cs

  • Install metoduna try-catch ve dosya loglama eklendi (avalonia_debug.log)
  • Debug loglama: Assembly.Location, Shared.dll yükleme, Initialize, LoadUI durumları

Dosya: ClassicAssist.Shared/Engine.cs

  • InitializePlugin: Console.WriteLine loglama eklendi (delegate atamaları, WindowHandle, vb.)
  • OnClientClosing: Options.CurrentOptions null kontrolü eklendi, try-catch ile sarmalandı

Dosya: ClassicAssist.Shared/UI/ViewModels/AboutControlViewModel.cs

  • Sorun: GetBuildDateTime() - Version.TryParse başarısız olunca version null, version.Build NullRefException
  • Çözüm: assembly.Location ve version için null kontrolleri, try-catch eklendi

Dosya: ClassicAssist.Shared/UI/ViewModels/OptionsTabViewModel.cs

  • Sorun: Serialize() - CurrentOptions null olduğunda NullRefException
  • Çözüm: CurrentOptions == null ise early return

Dosya: ClassicAssist.Shared/UO/Data/Cliloc.cs

  • Sorun 1: Dictionary.Add() duplicate key (5) olduğunda exception fırlatıyor
  • Çözüm 1: Indexer kullanımı clilocList[key] = value (overwrite)
  • Sorun 2: UTF8Encoding.GetString buffer sınırlarını aşıyor (bozuk/non-standard Cliloc.enu)
  • Çözüm 2: Bounds checking eklendi (x + 7 + len > fileBytes.Length kontrolü), try-catch

3. Native Kütüphaneler

libSkiaSharp.so ve libHarfBuzzSharp.so

  • Sorun: runtimes/linux-x64/native/ altındaki native .so dosyaları bulunamıyor
  • Çözüm: Plugin dizininin köküne kopyalandı
  • Kaynak: ~/.nuget/packages/skiasharp.nativeassets.linux/2.88.3/runtimes/linux-x64/native/

4. Build ve Deploy

Release Build Komutları

# ClassicAssist.Avalonia
cd ClassicAssist.Avalonia/ClassicAssist.Avalonia
dotnet build -c Release -f netcoreapp3.1

# ClassicUO
cd ClassicUO
dotnet build -c Release

Çıktı Dizinleri

  • ClassicAssist: ClassicAssist.Avalonia/Output/netcoreapp3.1/
  • ClassicAssist.Shared: ClassicAssist.Avalonia/Output/netstandard2.0/
  • ClassicUO: ClassicUO/bin/Release/net10.0/

Deploy Dizini

/home/beyhan/Projeler/CSharp/uoclient/linux/
├── cuo (executable)
├── settings.json
├── Data/Plugins/ClassicAssistAvalonia/
│   ├── ClassicAssist.Avalonia.dll
│   ├── ClassicAssist.Shared.dll
│   ├── libSkiaSharp.so
│   ├── libHarfBuzzSharp.so
│   └── ... (diğer DLL'ler)
└── ... (ClassicUO dosyaları)

Çalıştırma

cd /home/beyhan/Projeler/CSharp/uoclient/linux && ./cuo

5. settings.json (Plugin Konfigürasyonu)

{
  "ip": "uo.troyuo.com",
  "port": 2594,
  "ultimaonlinedirectory": "/home/beyhan/Projeler/CSharp/uoclient",
  "force_driver": 1,
  "plugins": [
    "./ClassicAssistAvalonia/ClassicAssist.Avalonia.dll"
  ]
}

Kalan/Sonraki Adımlar

  • Plugin pencere boyutu/pozisyonu kontrolü
  • Hotkey'lerin Linux'ta çalışıp çalışmadığı testi
  • Macro sisteminin tam fonksiyonel testi
  • Packet filter'ların çalışması (Cliloc.enu non-standard olabilir)
  • Release build tam testi