first commit

This commit is contained in:
Beyhan Oğur
2026-09-03 04:45:36 +03:00
commit d5f52cc3d3
1038 changed files with 169579 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
# 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