Advertisement
klts

ISDynamicBackpackUpgrade.lua

Dec 31st, 2024 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.62 KB | None | 0 0
  1. --***********************************************************
  2. --**                    ROBERT JOHNSON                     **
  3. --***********************************************************
  4.  
  5. require "TimedActions/ISBaseTimedAction"
  6. require "DynamicBackpackUpgrades"
  7.  
  8. ISDynamicBackpacksAction = ISBaseTimedAction:derive("ISDynamicBackpacksAction");
  9.  
  10. function ISDynamicBackpacksAction:isValid()
  11.     return self.StartValid
  12. end
  13.  
  14. function ISDynamicBackpacksAction:update()
  15.     self.item:setJobDelta(self:getJobDelta());
  16.     for i,v in pairs(self.ExtraItems) do
  17.         v:setJobDelta(self:getJobDelta())
  18.     end
  19.     --    if self.recipe:getSound() and (not self.craftSound or not self.craftSound:isPlaying()) then
  20.     --        self.craftSound = getSoundManager():PlayWorldSoundWav(self.recipe:getSound(), self.character:getCurrentSquare(), 0, 2, 1, true);
  21.     --    end
  22.     self.character:setMetabolicTarget(Metabolics.UsingTools);
  23. end
  24.  
  25. function ISDynamicBackpacksAction:start()
  26.     --if self.recipe:getSound() then
  27.         --self.craftSound = self.character:playSound(self.recipe:getSound());
  28.     --end
  29.     self.item:setJobType(self.JobType);
  30.     self.item:setJobDelta(0.0);
  31.    
  32.     for i,v in pairs(self.ExtraItems) do
  33.         v:setJobType(self.JobType)
  34.         v:setJobDelta(0.0)
  35.     end
  36.    
  37.    
  38.     -- putting this in Start, this is a lot of code to run every frame when it really shouldn't be able to change.
  39.     local imd = self.item:getModData()
  40.     local TailoringModifier = SandboxVars.DynamicBackpacks.TailoringModifier
  41.     if TailoringModifier == 0 then TailoringModifier = 100 end -- easier to make the math function do this than to make a whole set of "if" statements.
  42.     if instanceof(self.iteminfo,"InventoryItem") then
  43.         local UpgradesValid = imd.LMaxUpgrades > 0 and #imd.LUpgrades < imd.LMaxUpgrades + math.floor(self.character:getPerkLevel(Perks.Tailoring)/TailoringModifier)
  44.         local ItemsLocationValid = self.character:getInventory():contains(self.item) and self.character:getInventory():contains(self.iteminfo)
  45.         local HasTools = self.character:getInventory():getFirstTagRecurse("SewingNeedle") and self.character:getInventory():contains("Thread")
  46.         print(UpgradesValid, ItemsLocationValid, HasTools)
  47.         self.StartValid = UpgradesValid and ItemsLocationValid and HasTools
  48.     else
  49.         if self.character:getInventory():getFirstTag("Scissors") or SandboxVars.DynamicBackpacks.KnivesCanRemove and self.character:getInventory():getFirstTag("SharpKnife") then
  50.             HasTool = true
  51.         else
  52.             HasTool = false
  53.         end
  54.         local UpgradesValid = false
  55.         for i,v in pairs(imd.LUpgrades) do
  56.             if v == self.iteminfo then
  57.                 UpgradesValid = true
  58.             end
  59.         end
  60.        
  61.         local BagRemovalValid = RemoveValid(self.item,self.iteminfo)
  62.         print(HasTool, BagRemovalValid, UpgradesValid)
  63.         self.StartValid = HasTool and BagRemovalValid and UpgradesValid
  64.     end
  65.    
  66.     --if self.recipe:getProp1() or self.recipe:getProp2() then
  67.         --self:setOverrideHandModels(self:getPropItemOrModel(self.recipe:getProp1()), self:getPropItemOrModel(self.recipe:getProp2()))
  68.     --end
  69.     --if self.recipe:getAnimNode() then
  70.         --self:setActionAnim(self.recipe:getAnimNode());
  71.     --else
  72.         self:setActionAnim(CharacterActionAnims.Craft);
  73.     --end
  74.  
  75.     --  self.character:reportEvent("EventCrafting");
  76. end
  77.  
  78. function ISDynamicBackpacksAction:stop()
  79.     --if self.craftSound and self.character:getEmitter():isPlaying(self.craftSound) then
  80.         --self.character:stopOrTriggerSound(self.craftSound);
  81.     --end
  82.     self.item:setJobDelta(0.0);
  83.     for i,v in pairs(self.ExtraItems) do
  84.         v:setJobDelta(0.0)
  85.     end
  86.     ISBaseTimedAction.stop(self);
  87. end
  88.  
  89. function ISDynamicBackpacksAction:perform()
  90.     --if self.craftSound and self.character:getEmitter():isPlaying(self.craftSound) then
  91.         --self.character:stopOrTriggerSound(self.craftSound);
  92.     --end
  93.     self.item:setJobDelta(0.0);
  94.     for i,v in pairs(self.ExtraItems) do
  95.         v:setJobDelta(0.0)
  96.         if v:getType() == "Thread" then
  97.             v:UseAndSync()
  98.             --local Rem = v:getUsedDelta()
  99.             --print("Rem=",Rem)
  100.             --if Rem > 0.1 then
  101.             --  v:setUsedDelta(Rem-0.1)
  102.             --else
  103.             --  v:getContainer():Remove(v)
  104.             --end
  105.         end
  106.     end
  107.     self.onComplete(self.item,self.iteminfo,self.character)
  108.  
  109.     -- needed to remove from queue / start next.
  110.     ISBaseTimedAction.perform(self);
  111. end
  112.  
  113. function ISDynamicBackpacksAction:new(character, onComplete, item, info, jobtype, extraitems)
  114.     local o = {}
  115.     setmetatable(o, self)
  116.     self.__index = self
  117.     o.character = character;
  118.     o.onComplete = onComplete;
  119.     o.item = item;
  120.     o.iteminfo = info
  121.     o.StartValid = true
  122.     o.JobType = jobtype
  123.     o.ExtraItems = extraitems
  124.     o.stopOnWalk = true;
  125.     o.stopOnRun = true;
  126.     o.maxTime = 70;
  127.    
  128.     if character:isTimedActionInstant() then
  129.         --o.maxTime = 1;
  130.     end
  131.     o.forceProgressBar = true;
  132.     return o;
  133. end
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement