diff --git a/msu/hooks/config/items.nut b/msu/hooks/config/items.nut index ffe3de80..370d62f9 100644 --- a/msu/hooks/config/items.nut +++ b/msu/hooks/config/items.nut @@ -108,6 +108,56 @@ foreach (itemType in ::Const.Items.ItemType) throw ::MSU.Exception.KeyNotFound(_weaponType); } +// Map WeaponTypes to relevant strings from weapon.m.Categories. +// Is used during automatic assignment of weapontypes to weapons. +// Translators should push strings to the relevant weaponType here. +// Key = WeaponType +// Value = array of strings from weapon.m.Categories that should match to this weapon type + +// Translators Note: DO NOT OVERWRITE THIS TABLE, instead push your strings to each array e.g. +// ::Const.Items.WeaponTypesCategoriesStrings.Axe.push("TranslatedAxe"); +::Const.Items.WeaponTypeCategoriesStrings <- { + [::Const.Items.WeaponType.None] = ["None", "No Weapon Type"] + [::Const.Items.WeaponType.Axe] = ["Axe"], + [::Const.Items.WeaponType.Bow] = ["Bow"], + [::Const.Items.WeaponType.Cleaver] = ["Cleaver"], + [::Const.Items.WeaponType.Crossbow] = ["Crossbow"], + [::Const.Items.WeaponType.Dagger] = ["Dagger"], + [::Const.Items.WeaponType.Firearm] = ["Firearm"], + [::Const.Items.WeaponType.Flail] = ["Flail"], + [::Const.Items.WeaponType.Hammer] = ["Hammer"], + [::Const.Items.WeaponType.Mace] = ["Mace"], + [::Const.Items.WeaponType.Polearm] = ["Polearm"], + [::Const.Items.WeaponType.Sling] = ["Sling"], + [::Const.Items.WeaponType.Spear] = ["Spear"], + [::Const.Items.WeaponType.Sword] = ["Sword"], + [::Const.Items.WeaponType.Staff] = ["Staff"], + [::Const.Items.WeaponType.Throwing] = ["Throwing", "Throwing Weapon"], + [::Const.Items.WeaponType.Musical] = ["Musical", "Musical Instrument"] +}; +local arr = ::Const.Items.WeaponTypeCategoriesStrings; +foreach (k, w in ::Const.Items.WeaponType) +{ + if (arr.find(k) == null) + arr.push(k); + + local name = ::Const.Items.getWeaponTypeName(w); + if (arr.find(name) == null) + arr.push(name) +} + +// Map OneHanded and TwoHanded to relevant strings from weapon.m.Categories +// Is used during weapon.buildCategoriesFromWeaponType. +// Translators should push strings to the relevant handed-ness here. +// The last index string is always used to build the categories string. + +// Translators Note: DO NOT OVERWRITE THIS TABLE, instead push your strings to each array e.g. +// ::Const.Items.WeaponHandedCategoriesStrings.OneHanded.push("One-HandedTranslation"); +::Const.Items.WeaponHandedCategoriesStrings <- { + OneHanded = ["One-Handed"], + TwoHanded = ["Two-Handed"] +}; + ::Const.Items.addNewWeaponType <- function( _weaponType, _weaponTypeName = "" ) { if (_weaponType in ::Const.Items.WeaponType) throw ::MSU.Exception.DuplicateKey(_weaponType); @@ -127,5 +177,6 @@ foreach (itemType in ::Const.Items.ItemType) _weaponTypeName = _weaponType; } + ::Const.Items.WeaponTypeCategoriesStrings[::Const.Items.WeaponType[_weaponType]] <- [_weaponTypeName]; ::Const.Items.WeaponTypeName.push(_weaponTypeName); } diff --git a/msu/hooks/items/weapons/weapon.nut b/msu/hooks/items/weapons/weapon.nut index 692ef53b..b44ee08d 100644 --- a/msu/hooks/items/weapons/weapon.nut +++ b/msu/hooks/items/weapons/weapon.nut @@ -54,29 +54,41 @@ return; } - foreach (k, w in ::Const.Items.WeaponType) + foreach (weaponType, strings in ::Const.Items.WeaponTypeCategoriesStrings) { - if (categories.find(k) != null) + foreach (str in strings) { - this.m.WeaponType = this.m.WeaponType | w; + if (categories.find(str) != null) + { + this.m.WeaponType = this.m.WeaponType | weaponType; + break; + } } } - if (categories.find("One-Handed") != null && !this.isItemType(::Const.Items.ItemType.OneHanded)) + foreach (str in ::Const.Items.WeaponHandedCategoriesStrings.OneHanded) { - this.m.ItemType = this.m.ItemType | ::Const.Items.ItemType.OneHanded; - if (this.isItemType(::Const.Items.ItemType.TwoHanded)) + if (categories.find(str) != null && !this.isItemType(::Const.Items.ItemType.OneHanded)) { - this.m.ItemType -= ::Const.Items.ItemType.TwoHanded; + this.m.ItemType = this.m.ItemType | ::Const.Items.ItemType.OneHanded; + if (this.isItemType(::Const.Items.ItemType.TwoHanded)) + { + this.m.ItemType -= ::Const.Items.ItemType.TwoHanded; + } + break; } } - if (categories.find("Two-Handed") != null && !this.isItemType(::Const.Items.ItemType.TwoHanded)) + foreach (str in ::Const.Items.WeaponHandedCategoriesStrings.TwoHanded) { - this.m.ItemType = this.m.ItemType | ::Const.Items.ItemType.TwoHanded; - if (this.isItemType(::Const.Items.ItemType.OneHanded)) + if (categories.find(str) != null && !this.isItemType(::Const.Items.ItemType.TwoHanded)) { - this.m.ItemType -= ::Const.Items.ItemType.OneHanded; + this.m.ItemType = this.m.ItemType | ::Const.Items.ItemType.TwoHanded; + if (this.isItemType(::Const.Items.ItemType.OneHanded)) + { + this.m.ItemType -= ::Const.Items.ItemType.OneHanded; + } + break; } } } @@ -144,13 +156,15 @@ if (this.m.Categories != "") this.m.Categories = this.m.Categories.slice(0, -1) + ", "; + // We always use the last entry that was pushed to the strings so translators just + // have to push it there and it works. if (this.isItemType(::Const.Items.ItemType.OneHanded)) { - this.m.Categories += "One-Handed"; + this.m.Categories += ::Const.Items.WeaponHandedCategoriesStrings.OneHanded.top(); } else if (this.isItemType(::Const.Items.ItemType.TwoHanded)) { - this.m.Categories += "Two-Handed"; + this.m.Categories += ::Const.Items.WeaponHandedCategoriesStrings.TwoHanded.top(); } }