Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
```

3. Enable **Avatar Switcher** when loading your save.
4. Press **'** (apostrophe/quote) to open Avatar Switcher. The binding can be changed in the in-game controls menu.
4. Press **Alt+Shift+A** to open Avatar Switcher. The binding can be changed in the in-game controls menu.

Do not extract the mod ZIP into the mods folder.

Expand All @@ -53,7 +53,7 @@ Do not extract the mod ZIP into the mods folder.

### Applying an appearance

1. Press the mapped **Open Avatar Switcher** control.
1. Press the mapped **Open Avatar Switcher** control (**Alt+Shift+A** by default).
2. Select a category.
3. Select a saved appearance.
4. Choose **Apply**.
Expand Down
47 changes: 24 additions & 23 deletions modDesc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,46 +23,46 @@ Features:
- Store presets in the Avatar Switcher mod settings folder

Default control:
' opens Avatar Switcher. The key binding can be changed in the in-game controls menu.
Alt+Shift+A opens Avatar Switcher. The key binding can be changed in the in-game controls menu.

How to use:
1. Open the wardrobe and configure the player appearance.
2. Select "Save to AvatarSwitcher".
3. Enter a unique Preset ID and an optional Display Name.
4. Select an existing category or enter a new category, then select Save.
5. Press ' to open Avatar Switcher.
5. Press Alt+Shift+A to open Avatar Switcher.
6. Select a category and appearance, then select Apply.

Deleting a preset does not change the appearance currently being used.

This mod is designed for single-player use and does not support multiplayer.
]]></en>
<de><![CDATA[
Speichere das aktuelle Aussehen des Spielers als wiederverwendbare Voreinstellung und wechsle über ein Menü im Spiel zwischen gespeicherten Avataren.
Speichere das aktuelle Aussehen deines Charakters als wiederverwendbare Voreinstellung und wechsle über ein Menü im Spiel zwischen den gespeicherten Avataren.

Funktionen:
- Aktuelles Garderoben-Aussehen als Voreinstellung speichern
- Jeder Voreinstellung eine eindeutige ID, einen Anzeigenamen und eine Kategorie zuweisen
- Beim Speichern eine vorhandene Kategorie auswählen oder eine neue Kategorie erstellen
- Kontextbezogene Hilfe erklärt Preset-ID, Anzeigename und Kategorie
- Gespeicherte Erscheinungsbilder im Avatar-Wechsler filtern, anwenden und löschen
- Auswahl zu Fuß oder während der Fahrt öffnen
- Voreinstellungen im Mod-Einstellungsordner von Avatar Switcher speichern
- Speichere das aktuelle Aussehen der Garderobe als Voreinstellung
- Weise jeder Voreinstellung eine eindeutige ID, einen Anzeigenamen und eine Kategorie zu
- Wähle beim Speichern eine vorhandene Kategorie aus oder erstelle eine neue Kategorie
- Die kontextbezogene Hilfe erklärt die Felder „Voreinstellungs-ID“, „Anzeigename und Kategorie
- Filtere, wende an und lösche gespeicherte Aussehen über das Menü des Avatar-Wechslers
- Öffne die Auswahl, während du zu Fuß unterwegs bist oder in einem Fahrzeug sitzt
- Speichere Voreinstellungen im Einstellungsordner des Avatar-Wechsler-Mods

Standardsteuerung:
' öffnet den Avatar-Wechsler. Die Tastenbelegung kann im Steuerungsmenü des Spiels geändert werden.
Alt+Shift+A öffnet den Avatar-Wechsler. Die Tastenbelegung kann im Steuerungsmenü des Spiels geändert werden.

Verwendung:
So funktioniert es:
1. Öffne die Garderobe und passe das Aussehen des Spielers an.
2. Wähle "In AvatarSwitcher speichern".
3. Gib eine eindeutige Preset-ID und optional einen Anzeigenamen ein.
4. Wähle eine vorhandene Kategorie oder gib eine neue Kategorie ein und wähle anschließend Speichern.
5. Drücke ', um den Avatar-Wechsler zu öffnen.
6. Wähle eine Kategorie und ein Erscheinungsbild und anschließend Anwenden.
2. Wähle In Avatar-Wechsler speichern.
3. Gib eine eindeutige Voreinstellungs-ID und optional einen Anzeigenamen ein.
4. Wähle eine vorhandene Kategorie aus oder gib eine neue Kategorie ein und wähle anschließend Speichern.
5. Drücke Alt+Shift+A, um den Avatar-Wechsler zu öffnen.
6. Wähle eine Kategorie und ein Aussehen aus und wähle anschließend „Übernehmen“.

Das Löschen einer Voreinstellung verändert das aktuell verwendete Erscheinungsbild nicht.
Das Löschen einer Voreinstellung ändert nichts am aktuell verwendeten Aussehen.

Dieser Mod ist für den Einzelspielermodus vorgesehen und unterstützt keinen Mehrspielermodus.
Dieser Mod ist für den Einzelspielermodus konzipiert und unterstützt keinen Mehrspielermodus.
]]></de>
<fr><![CDATA[
Enregistrez l'apparence actuelle du joueur comme préréglage réutilisable et passez d'un avatar enregistré à un autre depuis un menu en jeu.
Expand All @@ -77,14 +77,14 @@ Fonctionnalités :
- Stocker les préréglages dans le dossier de paramètres du mod Avatar Switcher

Commande par défaut :
' ouvre Avatar Switcher. Cette touche peut être modifiée dans le menu des commandes du jeu.
Alt+Shift+A ouvre Avatar Switcher. Cette touche peut être modifiée dans le menu des commandes du jeu.

Utilisation :
1. Ouvrez la garde-robe et configurez l'apparence du joueur.
2. Sélectionnez "Enregistrer dans AvatarSwitcher".
3. Saisissez un ID de préréglage unique et, si vous le souhaitez, un nom d'affichage.
4. Sélectionnez une catégorie existante ou saisissez une nouvelle catégorie, puis sélectionnez Enregistrer.
5. Appuyez sur ' pour ouvrir Avatar Switcher.
5. Appuyez sur Alt+Shift+A pour ouvrir Avatar Switcher.
6. Sélectionnez une catégorie et une apparence, puis sélectionnez Appliquer.

La suppression d'un préréglage ne modifie pas l'apparence actuellement utilisée.
Expand All @@ -104,6 +104,7 @@ Ce mod est conçu pour le mode solo et ne prend pas en charge le multijoueur.
<sourceFile filename="scripts/AS_Dialog.lua" />
<sourceFile filename="scripts/AS_SaveDialog.lua" />
<sourceFile filename="scripts/AS_SaveDialogEnhanced.lua" />
<sourceFile filename="scripts/AS_GuiLifecycle.lua" />
<sourceFile filename="scripts/AS_HUD.lua" />
<sourceFile filename="scripts/AS_MenuEntry.lua" />
<sourceFile filename="scripts/AS_API.lua" />
Expand All @@ -114,12 +115,12 @@ Ce mod est conçu pour le mode solo et ne prend pas en charge le multijoueur.
</extraSourceFiles>

<actions>
<action name="ASZ_HUD" category="MISC" axisType="HALF" />
<action name="ASZ_HUD" category="MISC" axisType="HALF" ignoreComboMask="false" />
</actions>

<inputBinding>
<actionBinding action="ASZ_HUD">
<binding device="KB_MOUSE_DEFAULT" input="KEY_quote" />
<binding device="KB_MOUSE_DEFAULT" input="KEY_lalt KEY_lshift KEY_a" />
</actionBinding>
</inputBinding>

Expand Down
94 changes: 94 additions & 0 deletions scripts/AS_GuiLifecycle.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
-- FS25_AvatarSwitcher
-- ModVersion: 1.0.0.0
-- File: AS_GuiLifecycle.lua
-- BuildTag: 20260825.1
-- Centralises custom GUI profile loading so profile names are registered only
-- once per game process, regardless of which Avatar Switcher dialog opens first.

AvatarSwitcher = AvatarSwitcher or {}

-- Do not reset this in deleteMap(). GIANTS keeps GUI profiles registered for the
-- lifetime of the process, so loading another save must not register them again.
AvatarSwitcher.guiProfilesLoaded = AvatarSwitcher.guiProfilesLoaded == true

function AvatarSwitcher:ensureGuiProfilesLoaded()
if self.guiProfilesLoaded == true then
return true
end

if g_gui == nil or g_gui.loadProfiles == nil then
if self.warn ~= nil then
self:warn("[GUI] Cannot load Avatar Switcher GUI profiles: g_gui.loadProfiles unavailable")
end
return false
end

local filename = self.modDirectory .. "gui/guiProfiles.xml"
local ok, err = pcall(g_gui.loadProfiles, g_gui, filename)
if not ok then
if self.error ~= nil then
self:error("[GUI] Failed to load GUI profiles: " .. tostring(err))
else
print("[FS25_AvatarSwitcher/GUI] Failed to load GUI profiles: " .. tostring(err))
end
return false
end

self.guiProfilesLoaded = true
if self.debug ~= nil then
self:debug("[GUI] Loaded custom GUI profiles once: " .. tostring(filename))
end
return true
end

-- AS_Dialog.lua and AS_SaveDialog.lua historically loaded guiProfiles.xml inside
-- their open routines. Replacing the two open routines here keeps their dialog
-- behaviour unchanged while routing profile registration through the shared guard.

function AvatarSwitcher:openDialog()
self:initialize()
if g_gui == nil then
self:warn("[Dialog] g_gui is not available")
return false
end

if self.guiDialog ~= nil then
return true
end

if not self:ensureGuiProfilesLoaded() then
return false
end

local dlgFrame = AvatarSwitcherDialog.new(g_i18n)
g_gui:loadGui(self.modDirectory .. "gui/AS_Dialog.xml", "AvatarSwitcherDialog", dlgFrame)
self.guiDialog = g_gui:showDialog("AvatarSwitcherDialog")

if self.HUD ~= nil then
self.HUD.visible = self.guiDialog ~= nil
end

return self.guiDialog ~= nil
end

function AvatarSwitcher:openWardrobeSaveDialog()
self:initialize()
if g_gui == nil then
self:warn("[WardrobeSaveDialog] g_gui is not available")
return false
end

if self.wardrobeSaveDialog ~= nil then
return true
end

if not self:ensureGuiProfilesLoaded() then
return false
end

local dlgFrame = AvatarSwitcherSaveDialog.new(g_i18n)
g_gui:loadGui(self.modDirectory .. "gui/AS_SaveDialog.xml", "AvatarSwitcherSaveDialog", dlgFrame)
self.wardrobeSaveDialog = g_gui:showDialog("AvatarSwitcherSaveDialog")

return self.wardrobeSaveDialog ~= nil
end