Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* global ngapp, xelib, registerPatcher */
  2. let knownDeathItemsAnimals, knownDeathItemsMonsters;
  3. let allowedFactions = ['BearFaction', 'ChickenFaction', 'CreatureFaction', 'DogFaction', 'FarmAnimalsFaction', 'GoatFaction', 'HareFaction', 'HorkerFaction', 'MammothFaction', 'PredatorFaction', 'PreyFaction', 'SabreCatFaction', 'SkeeverFaction', 'WolfFaction'];
  4. let forbiddenFactions = ['DaedraFaction', 'DLC1UndeadGuardianFaction', 'DragonPriestFaction', 'DraugrFaction', 'DremoraFaction', 'DwarvenAutomatonFaction', 'FalmerFaction', 'GiantFaction', 'HagravenFaction', 'IceWraithFaction', 'SkeletonFaction', 'VampireFaction', 'WispFaction'];
  5.  
  6. let loadKnownDeathItemsAnimals = function() {
  7.     let elements = xelib.GetElements(0, 'Hunterborn.esp\\FLST\\_DS_FL_DeathItems\\FormIDs');
  8.     knownDeathItemsAnimals = elements.map(element => xelib.GetValue(element));
  9. };
  10.  
  11. let loadKnownDeathItemsMonsters = function() {
  12.     let elements = xelib.GetElements(0, 'Hunterborn.esp\\FLST\\_DS_FL_DeathItems_Monsters\\FormIDs');
  13.     knownDeathItemsMonsters = elements.map(element => xelib.GetValue(element));
  14. };
  15.    
  16. let hasFaction = function(rec, factions) {
  17.     if (xelib.GetValue(rec, 'Factions') == '') return;
  18.     let elements = xelib.GetElements(rec, 'Factions\\Faction');
  19.     return elements.map(element.includes(factions));
  20. };
  21.    
  22. let isCreature = function(rec) {
  23.     let deathItem = xelib.GetValue(rec, 'INAM');
  24.     return (hasFaction(rec, allowedFactions) &&
  25.         !hasFaction(rec, forbiddenFactions)) &&
  26.         !(knownDeathItemsAnimals.includes(deathItem) ||
  27.         knownDeathItemsMonsters.includes(deathItem)) &&
  28.         xelib.GetValue(rec, 'INAM') != '';
  29.         //voicetype
  30. };
  31.  
  32. let buildDeathItem = function(deathItems, rec) {
  33.   let name = xelib.Name(rec);
  34.   let deathItem = xelib.GetValue(rec, 'INAM');
  35.   if (!name || !isCreature(rec)) return;
  36.   if (!deathItems.hasOwnProperty(deathItem))
  37.     deathItems[deathItem] = { npcs: [] };
  38.   deathItems[deathItem].npcs.push({
  39.     name: name,
  40.     path: xelib.Path(rec),
  41.     animalType: 'Skip'
  42.   });
  43. };
  44.  
  45. let settingsController = function($scope, referenceService, progressService, errorService) {
  46.     let patcherSettings = $scope.settings.hunterbornCreaturePatcher;
  47.    
  48.     let GetCreatures = function() {
  49.         loadKnownDeathItemsMonsters();
  50.         loadKnownDeathItemsAnimals();
  51.         $scope.items = {};
  52.         //$scope.items = patcherSettings.creatures = {};
  53.         xelib.WithHandles(xelib.GetRecords(0, 'NPC_'), function(records) {
  54.             let len = records.length;
  55.             records.forEach(function(rec, index) {
  56.                 let msg = `Getting creature information (${index}/${len})`;
  57.                 progressService.progressMessage(msg);
  58.                 buildDeathItem($scope.items, rec);
  59.                 //if (creature) $scope.creatures.push(creature);
  60.             });
  61.         });
  62.     };
  63.  
  64.     $scope.loadCreatures = function() {
  65.         progressService.showProgress({ message: 'Loading records...' });
  66.         errorService.try(GetCreatures);
  67.         progressService.hideProgress();
  68.     };
  69. };
  70.  
  71. registerPatcher({
  72.     info: info,
  73.     gameModes: [xelib.gmTES5, xelib.gmSSE],
  74.     settings: {
  75.         label: 'Hunterborn Creature Patcher',
  76.         templateUrl: `${patcherPath}/partials/settings.html`,
  77.         controller: settingsController,
  78.         defaultSettings: {}
  79.     },
  80.     execute: {
  81.         initialize: function(patch, helpers, settings) {
  82.             if (!settings.creatures) return;
  83.             let recordsToPatch = settings.creatures.map(function(rec) {
  84.                 return xelib.GetElement(0, rec.path);
  85.             });
  86.             recordsToPatch.forEach(function(rec) {
  87.                 helpers.logMessage('Patching ' + xelib.Name(rec));
  88.                 let override = xelib.CopyElement(rec, patch);
  89.             });
  90.         },
  91.         process: []
  92.     }
  93. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement