3.9 KiB
3.9 KiB
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.dllile çalıştırıldığındaPluginHostnull oluyor, plugin hiç yüklenmiyordu - Çözüm:
PluginHost == nullolduğunda fallback managed loader eklendi Assembly.LoadFile+AssemblyResolvehandler 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öncesiAssemblyResolvehandler 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.CurrentOptionsnull kontrolü eklendi, try-catch ile sarmalandı
Dosya: ClassicAssist.Shared/UI/ViewModels/AboutControlViewModel.cs
- Sorun:
GetBuildDateTime()-Version.TryParsebaşarısız oluncaversionnull,version.BuildNullRefException - Çözüm:
assembly.Locationveversioniçin null kontrolleri, try-catch eklendi
Dosya: ClassicAssist.Shared/UI/ViewModels/OptionsTabViewModel.cs
- Sorun:
Serialize()-CurrentOptionsnull olduğunda NullRefException - Çözüm:
CurrentOptions == nullise 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.GetStringbuffer sınırlarını aşıyor (bozuk/non-standard Cliloc.enu) - Çözüm 2: Bounds checking eklendi (
x + 7 + len > fileBytes.Lengthkontrolü), 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