J'ai préalablement créé un mod dans lequel j'ai implémenté deux nouveaux types de pièces de monnaie. Il y a donc 3 pièces :
- septim de cuivre (pièce de base, valeur = 1),
- septim d'argent (valeur = 25),
- septim d'or (valeur = 100).
Le système de Skyrim ne peut reconnaître qu'une seule unité monétaire, pourtant il est possible d'utiliser les nouvelles pièces comme s'il s'agissait de pièces vanilla. L'astuce est simple : convertir les pièces d'argent et d'or en septims de base dès lors qu'on rentre dans un inventaire marchand, puis les reconvertir en septims d'or et d'argent une fois la transaction terminée.
En vérité, la deuxième conversion décompose la grandeur de la somme par centaines, quarts de centaines, et unités. Autrement dit, si à la fin de la transaction on a sur soi la somme de 456 septims, on se retrouve avec 4 septims d'or (400), 2 septims d'argent (50), et 6 septims. Un bon gain de place dans l'inventaire étant donné que les pièces ont un poids.
Code : Tout sélectionner
scriptName EC_convertSeptimsScript extends referencealias
;-- Properties --------------------------------------
miscobject property gold001 auto
miscobject property gold002 auto
miscobject property gold003 auto
;-- Functions ---------------------------------------
function OnInit() ;-- Le jeu garde en mémoire l'inventaire marchand dans lequel il appliquera les prochaines fonctions
self.RegisterForMenu("BarterMenu")
endFunction
function OnMenuOpen(String MenuName) ;-- calcule la somme totale, supprime toutes les pièces de l'inventaire, les remplace par leur équivalent en septims de base
utility.WaitMenuMode(0.100000)
Int copperSeptims = self.getactorreference().GetItemCount(gold001 as form)
Int silverSeptims = self.getactorreference().GetItemCount(gold002 as form)
Int goldSeptims = self.getactorreference().GetItemCount(gold003 as form)
Int totalValue = copperSeptims + silverSeptims * 25 + goldSeptims * 100
copperSeptims = totalValue
game.GetPlayer().RemoveItem(gold003 as form, goldSeptims, true, none)
game.GetPlayer().RemoveItem(gold002 as form, silverSeptims, true, none)
game.GetPlayer().RemoveItem(gold001 as form, copperSeptims, true, none)
game.GetPlayer().AddItem(gold001 as form, totalValue, true)
endFunction
function OnMenuClose(String MenuName) ;-- calcule la somme totale, supprime toutes les pièces, redistribue les septims d'or / d'argent / de cuivre selon une décomposition optimale
utility.WaitMenuMode(0.100000)
Int copperSeptims = self.getactorreference().GetItemCount(gold001 as form)
Int silverSeptims = self.getactorreference().GetItemCount(gold002 as form)
Int goldSeptims = self.getactorreference().GetItemCount(gold003 as form)
Int totalValue = copperSeptims + silverSeptims * 25 + goldSeptims * 100
game.GetPlayer().RemoveItem(gold003 as form, goldSeptims, true, none)
game.GetPlayer().RemoveItem(gold002 as form, silverSeptims, true, none)
game.GetPlayer().RemoveItem(gold001 as form, copperSeptims, true, none)
goldSeptims = math.Floor((totalValue / 100) as Float)
silverSeptims = math.Floor((totalValue % 100 / 25) as Float)
copperSeptims = math.Floor((totalValue % 100 % 25) as Float)
game.GetPlayer().AddItem(gold003 as form, goldSeptims, true)
game.GetPlayer().AddItem(gold002 as form, silverSeptims, true)
game.GetPlayer().AddItem(gold001 as form, copperSeptims, true)
endFunction