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

116 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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ı
```bash
# 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
```bash
cd /home/beyhan/Projeler/CSharp/uoclient/linux && ./cuo
```
---
## 5. settings.json (Plugin Konfigürasyonu)
```json
{
"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