Update CARM SUI-Inv and add SUI-Rads
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 480 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 782 B |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,596 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Main Library
|
||||
------------------------------------------
|
||||
-- Authors:
|
||||
---- @dhert (2022)
|
||||
------------------------------------------
|
||||
-- Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
-- of this software and associated documentation files (the "Software"), to deal
|
||||
-- in the Software without restriction, including without limitation the rights
|
||||
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
-- copies of the Software, and to permit persons to whom the Software is
|
||||
-- furnished to do so, subject to the following conditions:
|
||||
|
||||
-- The above copyright notice and this permission notice shall be included in all
|
||||
-- copies or substantial portions of the Software.
|
||||
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
-- SOFTWARE.
|
||||
------------------------------------------
|
||||
|
||||
------------------------------------------
|
||||
-- Set the SpiffUI lib version
|
||||
local SPIFFUI_VERSION = 2 --<<< DO NOT CHANGE UNLESS YOU KNOW WHAT YOU'RE DOING
|
||||
if SpiffUI then
|
||||
if SpiffUI.Version >= SPIFFUI_VERSION then
|
||||
return -- Don't do anything else
|
||||
else
|
||||
-- We only want the newest version, and this is it
|
||||
Events.OnGameBoot.Remove(SpiffUI.firstBoot)
|
||||
SpiffUI = nil
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- Start SpiffUI
|
||||
SpiffUI = {}
|
||||
SpiffUI.Version = SPIFFUI_VERSION
|
||||
|
||||
------------------------------------------
|
||||
-- Register Module
|
||||
function SpiffUI:Register(name)
|
||||
if not SpiffUI[name] then
|
||||
-- Add Key for our module
|
||||
table.insert(SpiffUI, name)
|
||||
|
||||
-- Add module
|
||||
SpiffUI[name] = {}
|
||||
end
|
||||
return SpiffUI[name]
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- Overrides for already-defined keys
|
||||
SpiffUI.KeyDefaults = {}
|
||||
|
||||
-- Add a new Key Default
|
||||
function SpiffUI:AddKeyDefault(name, key)
|
||||
SpiffUI.KeyDefaults[name] = tonumber(key)
|
||||
end
|
||||
|
||||
-- Add an array of keys
|
||||
---- Expected:
|
||||
---- binds {
|
||||
---- ["Name"] = key,
|
||||
---- }
|
||||
function SpiffUI:AddKeyDefaults(binds)
|
||||
for i,j in pairs(binds) do
|
||||
self:AddKeyDefault(i,j)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- Keys that will be removed from the binds
|
||||
SpiffUI.KeyDisables = {}
|
||||
|
||||
-- Add a new Key Disable
|
||||
function SpiffUI:AddKeyDisable(name)
|
||||
-- We do it where the name is the index to avoid dupes
|
||||
SpiffUI.KeyDisables[name] = true
|
||||
end
|
||||
|
||||
-- Add an array of keys
|
||||
---- Expected:
|
||||
---- binds {
|
||||
---- ["Name"] = true,
|
||||
---- }
|
||||
function SpiffUI:AddKeyDisables(binds)
|
||||
for i,_ in pairs(binds) do
|
||||
self:AddKeyDisable(i)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- New Keys to Add
|
||||
SpiffUI.KeyBinds = {
|
||||
{
|
||||
name = '[SpiffUI]', -- Title
|
||||
}
|
||||
}
|
||||
|
||||
-- Add a new Key Bind
|
||||
---- Expected:
|
||||
---- bind = {
|
||||
---- name = 'KeyBind', -- Name of Key
|
||||
---- key = Keyboard.KEY, -- Key
|
||||
---- qBlock = true, -- Don't perform key action with queue
|
||||
---- Down = actionDown, -- Action on Down -- Receives playerObj -- Optional
|
||||
---- Hold = actionHold, -- Action on Hold -- Receives playerObj -- Optional
|
||||
---- Up = actionUp -- Action on Up -- Receives playerObj -- Optional
|
||||
---- }
|
||||
function SpiffUI:AddKeyBind(bind)
|
||||
--SpiffUI.KeyDefaults[name] = tonumber(key)
|
||||
table.insert(SpiffUI.KeyBinds, bind)
|
||||
end
|
||||
|
||||
-- Add an array of keys
|
||||
---- Expected:
|
||||
---- binds = {
|
||||
---- {
|
||||
---- name = 'KeyBind', -- Name of Key
|
||||
---- key = Keyboard.KEY, -- Key
|
||||
---- qBlock = true, -- Don't perform key action with queue
|
||||
---- Down = actionDown, -- Action on Down -- Receives playerObj -- Optional
|
||||
---- Hold = actionHold, -- Action on Hold -- Receives playerObj -- Optional
|
||||
---- Up = actionUp -- Action on Up -- Receives playerObj -- Optional
|
||||
---- },
|
||||
---- }
|
||||
function SpiffUI:AddKeyBinds(binds)
|
||||
for _,j in ipairs(binds) do
|
||||
self:AddKeyBind(j)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- Key Handlers
|
||||
-- Common things to check for when checking a key
|
||||
---- Returns the player object if successful
|
||||
SpiffUI.preCheck = function()
|
||||
local player = getSpecificPlayer(0)
|
||||
|
||||
if not player or player:isDead() or player:isAsleep() then
|
||||
return nil
|
||||
end
|
||||
|
||||
if UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0) then
|
||||
return nil
|
||||
end
|
||||
|
||||
return player
|
||||
end
|
||||
|
||||
local function keyDown(key)
|
||||
--print("Pressed: " .. getKeyName(key) .. " | " .. key)
|
||||
local player = SpiffUI.preCheck(key)
|
||||
if not player then return end
|
||||
for _,bind in ipairs(SpiffUI.KeyBinds) do
|
||||
if key == getCore():getKey(bind.name) then
|
||||
if bind.Down then
|
||||
local queue = ISTimedActionQueue.queues[player]
|
||||
if bind.qBlock and queue and #queue.queue > 0 then
|
||||
return
|
||||
end
|
||||
bind.Down(player)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function keyHold(key)
|
||||
local player = SpiffUI.preCheck(key)
|
||||
if not player then return end
|
||||
|
||||
for _,bind in ipairs(SpiffUI.KeyBinds) do
|
||||
if key == getCore():getKey(bind.name) then
|
||||
if bind.Hold then
|
||||
local queue = ISTimedActionQueue.queues[player]
|
||||
if bind.qBlock and queue and #queue.queue > 0 then
|
||||
return
|
||||
end
|
||||
bind.Hold(player)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function keyRelease(key)
|
||||
local player = SpiffUI.preCheck(key)
|
||||
if not player then return end
|
||||
|
||||
for _,bind in ipairs(SpiffUI.KeyBinds) do
|
||||
if key == getCore():getKey(bind.name) then
|
||||
if bind.Up then
|
||||
local queue = ISTimedActionQueue.queues[player]
|
||||
if bind.qBlock and queue and #queue.queue > 0 then
|
||||
return
|
||||
end
|
||||
bind.Up(player)
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- Key Action Handlers
|
||||
---- used mostly for radials
|
||||
SpiffUI.action = {
|
||||
ticks = 0,
|
||||
delay = 500,
|
||||
ready = true,
|
||||
wasVisible = false
|
||||
}
|
||||
|
||||
-- onKeyDown starts an action
|
||||
SpiffUI.onKeyDown = function(player)
|
||||
-- The radial menu will also close without updating me
|
||||
---- So we need to catch this
|
||||
local radialMenu = getPlayerRadialMenu(0)
|
||||
if SpiffUI.action.ready and (not radialMenu:isReallyVisible() and SpiffUI.action.wasVisible) then
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
|
||||
-- True means we're not doing another action
|
||||
if SpiffUI.action.ready then
|
||||
-- Hide Radial Menu on Press if applicable
|
||||
if radialMenu:isReallyVisible() and getCore():getOptionRadialMenuKeyToggle() then
|
||||
radialMenu:removeFromUIManager()
|
||||
setJoypadFocus(player:getPlayerNum(), nil)
|
||||
SpiffUI.action.wasVisible = false
|
||||
SpiffUI.action.ready = true
|
||||
return
|
||||
end
|
||||
SpiffUI.action.ticks = getTimestampMs()
|
||||
SpiffUI.action.ready = false
|
||||
SpiffUI.action.wasVisible = false
|
||||
end
|
||||
end
|
||||
|
||||
-- We check here and set our state if true on hold
|
||||
SpiffUI.holdTime = function()
|
||||
if SpiffUI.action.ready then return false end
|
||||
SpiffUI.action.ready = (getTimestampMs() - SpiffUI.action.ticks) >= SpiffUI.action.delay
|
||||
return SpiffUI.action.ready
|
||||
end
|
||||
|
||||
-- We check here and set our state if true on release
|
||||
SpiffUI.releaseTime = function()
|
||||
if SpiffUI.action.ready then return false end
|
||||
SpiffUI.action.ready = (getTimestampMs() - SpiffUI.action.ticks) < SpiffUI.action.delay
|
||||
return SpiffUI.action.ready
|
||||
end
|
||||
|
||||
SpiffUI.resetKey = function()
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
-- ISEquippedItem Buttons
|
||||
SpiffUI.equippedItem = {
|
||||
["Inventory"] = true,
|
||||
["Health"] = true,
|
||||
["Craft"] = true,
|
||||
["Movable"] = true,
|
||||
["Search"] = true,
|
||||
["Map"] = true,
|
||||
["MiniMap"] = true,
|
||||
["Debug"] = true,
|
||||
["Client"] = true,
|
||||
["Admin"] = true
|
||||
}
|
||||
|
||||
function SpiffUI:updateEquippedItem()
|
||||
-- Redo the ISEquippedItem tree based on what we set
|
||||
local player = getPlayerData(0)
|
||||
local y = player.equipped.invBtn:getY()
|
||||
for i,v in pairs(SpiffUI.equippedItem) do
|
||||
if i == "Inventory" then
|
||||
player.equipped.invBtn:setVisible(v)
|
||||
if v then
|
||||
y = player.equipped.invBtn:getY() + player.equipped.inventoryTexture:getHeightOrig() + 5
|
||||
end
|
||||
elseif i == "Health" then
|
||||
player.equipped.healthBtn:setVisible(v)
|
||||
player.equipped.healthBtn:setY(y)
|
||||
if v then
|
||||
y = player.equipped.healthBtn:getY() + player.equipped.heartIcon:getHeightOrig() + 5
|
||||
end
|
||||
elseif i == "Craft" then
|
||||
player.equipped.craftingBtn:setVisible(v)
|
||||
player.equipped.craftingBtn:setY(y)
|
||||
if v then
|
||||
y = player.equipped.craftingBtn:getY() + player.equipped.craftingIcon:getHeightOrig() + 5
|
||||
end
|
||||
elseif i == "Movable" then
|
||||
player.equipped.movableBtn:setVisible(v)
|
||||
player.equipped.movableBtn:setY(y)
|
||||
player.equipped.movableTooltip:setY(y)
|
||||
player.equipped.movablePopup:setY(y)
|
||||
if v then
|
||||
y = player.equipped.movableBtn:getBottom() + 5
|
||||
end
|
||||
elseif i == "Search" then
|
||||
player.equipped.searchBtn:setVisible(v)
|
||||
player.equipped.searchBtn:setY(y)
|
||||
if v then
|
||||
y = player.equipped.searchBtn:getY() + player.equipped.searchIconOff:getHeightOrig() + 5
|
||||
end
|
||||
elseif i == "Map" then
|
||||
if ISWorldMap.IsAllowed() then
|
||||
player.equipped.mapBtn:setVisible(v)
|
||||
player.equipped.mapBtn:setY(y)
|
||||
|
||||
if ISMiniMap.IsAllowed() then
|
||||
player.equipped.mapPopup:setY(10 + y)
|
||||
end
|
||||
|
||||
if v then
|
||||
y = player.equipped.mapBtn:getBottom() + 5
|
||||
end
|
||||
end
|
||||
elseif i == "Debug" then
|
||||
if getCore():getDebug() or (ISDebugMenu.forceEnable and not isClient()) then
|
||||
player.equipped.debugBtn:setVisible(v)
|
||||
player.equipped.debugBtn:setY(y)
|
||||
if v then
|
||||
y = player.equipped.debugBtn:getY() + player.equipped.debugIcon:getHeightOrig() + 5
|
||||
end
|
||||
end
|
||||
elseif i == "Client" then
|
||||
if isClient() then
|
||||
player.equipped.clientBtn:setVisible(v)
|
||||
player.equipped.clientBtn:setY(y)
|
||||
if v then
|
||||
y = player.equipped.clientBtn:getY() + player.equipped.clientIcon:getHeightOrig() + 5
|
||||
end
|
||||
end
|
||||
elseif i == "Admin" then
|
||||
if isClient() then
|
||||
player.equipped.adminBtn:setVisible(v)
|
||||
player.equipped.adminBtn:setY(y)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUI:OnGameStart()
|
||||
for _,j in ipairs(SpiffUI) do
|
||||
local mod = SpiffUI[j]
|
||||
if mod and mod.Start then
|
||||
mod.Start()
|
||||
end
|
||||
end
|
||||
|
||||
Events.OnKeyStartPressed.Add(keyDown)
|
||||
Events.OnKeyKeepPressed.Add(keyHold)
|
||||
Events.OnKeyPressed.Add(keyRelease)
|
||||
|
||||
self:updateEquippedItem()
|
||||
end
|
||||
|
||||
function SpiffUI:ModOptions()
|
||||
SpiffUI.config = {}
|
||||
|
||||
if ModOptions and ModOptions.getInstance then
|
||||
local function apply(data)
|
||||
local options = data.settings.options
|
||||
-- Set options
|
||||
end
|
||||
|
||||
local SPIFFCONFIG = {
|
||||
options_data = {
|
||||
applyNewKeybinds = {
|
||||
name = "UI_ModOptions_SpiffUI_applyNewKeybinds",
|
||||
default = false
|
||||
},
|
||||
runAllResets = {
|
||||
name = "UI_ModOptions_SpiffUI_runAllResets",
|
||||
default = false,
|
||||
tooltip = "UI_ModOptions_SpiffUI_tooltip_runResets"
|
||||
}
|
||||
},
|
||||
mod_id = "SpiffUI",
|
||||
mod_shortname = "SpiffUI",
|
||||
mod_fullname = getText("UI_Name_SpiffUI")
|
||||
}
|
||||
|
||||
local optionsInstance = ModOptions:getInstance(SPIFFCONFIG)
|
||||
ModOptions:loadFile()
|
||||
|
||||
-- Modal for our Apply Defaults key
|
||||
local applyKeys = optionsInstance:getData("applyNewKeybinds")
|
||||
|
||||
function applyKeys:buildString(text,h)
|
||||
for name,key in pairs(SpiffUI.KeyDefaults) do
|
||||
text = text .. getText("UI_ModOptions_SpiffUI_Modal_aNKChild", getText("UI_optionscreen_binding_" .. name), getKeyName(key))
|
||||
h = h + 20
|
||||
end
|
||||
return text,h
|
||||
end
|
||||
|
||||
function applyKeys:onUpdate(newValue)
|
||||
if newValue then
|
||||
applyKeys:set(false)
|
||||
local w,h = 350,120
|
||||
local text = getText("UI_ModOptions_SpiffUI_Modal_applyNewKeybinds")
|
||||
text,h = self:buildString(text,h)
|
||||
SpiffUI.settingsModal(w, h, text, self, applyKeys.apply)
|
||||
end
|
||||
end
|
||||
|
||||
function applyKeys:apply(button)
|
||||
self.modal = nil
|
||||
if button.internal == "NO" then
|
||||
return
|
||||
end
|
||||
for name,key in pairs(SpiffUI.KeyDefaults) do
|
||||
for i,v in ipairs(MainOptions.keyText) do
|
||||
if not v.value then
|
||||
if v.txt:getName() == name then
|
||||
v.keyCode = key
|
||||
v.btn:setTitle(getKeyName(key))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
getCore():saveOptions()
|
||||
MainOptions.instance.gameOptions.changed = false
|
||||
end
|
||||
|
||||
local runResets = optionsInstance:getData("runAllResets")
|
||||
|
||||
function runResets:buildString(text,h)
|
||||
for _,j in ipairs(SpiffUI) do
|
||||
local mod = SpiffUI[j]
|
||||
if mod and mod.Reset then
|
||||
if mod.resetDesc then
|
||||
text = text .. mod.resetDesc
|
||||
else
|
||||
text = text .. " <LINE> " .. j
|
||||
end
|
||||
h = h + 20
|
||||
end
|
||||
end
|
||||
return text,h
|
||||
end
|
||||
|
||||
function runResets:onUpdate(newValue)
|
||||
if newValue then
|
||||
runResets:set(false)
|
||||
-- quick check if we're in game
|
||||
local player = getPlayerData(0)
|
||||
if not player then return end
|
||||
local w,h = 350,120
|
||||
local text = getText("UI_ModOptions_SpiffUI_Modal_runResets")
|
||||
text,h = self:buildString(text,h)
|
||||
SpiffUI.settingsModal(w, h, text, self, runResets.apply)
|
||||
end
|
||||
end
|
||||
|
||||
function runResets:apply(button)
|
||||
self.modal = nil
|
||||
if button.internal == "NO" then
|
||||
return
|
||||
end
|
||||
for _,j in ipairs(SpiffUI) do
|
||||
local mod = SpiffUI[j]
|
||||
if mod and mod.Reset then
|
||||
mod.Reset()
|
||||
end
|
||||
end
|
||||
MainOptions.instance.gameOptions.changed = false
|
||||
end
|
||||
|
||||
|
||||
Events.OnPreMapLoad.Add(function()
|
||||
apply({settings = SPIFFCONFIG})
|
||||
end)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
-- At first I had this run only once, but apparently when there's only 1 mod this breaks
|
||||
---- So, OnPostBoot is added to run things last
|
||||
SpiffUI.firstBoot = function()
|
||||
Events.OnGameBoot.Add(function()
|
||||
SpiffUI:OnPostBoot()
|
||||
end)
|
||||
--Events.OnGameBoot.Remove(SpiffUI.firstBoot)
|
||||
SpiffUI:OnGameBoot()
|
||||
end
|
||||
|
||||
function SpiffUI:OnGameBoot()
|
||||
self:ModOptions()
|
||||
|
||||
for _,j in ipairs(SpiffUI) do
|
||||
local mod = SpiffUI[j]
|
||||
if mod and mod.Boot then
|
||||
mod.Boot()
|
||||
end
|
||||
end
|
||||
|
||||
-- Let's Remove some keys
|
||||
for name,_ in pairs(SpiffUI.KeyDisables) do
|
||||
local found = false
|
||||
for i = 1, #keyBinding do
|
||||
if keyBinding[i].value == name then
|
||||
table.remove(keyBinding, i)
|
||||
--print("Removed Keybind: " .. name)
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- We may have a SpiffUI key we want to remove
|
||||
if not found then
|
||||
for i,bind in ipairs(SpiffUI.KeyBinds) do
|
||||
if bind.name == name then
|
||||
table.remove(SpiffUI.KeyBinds, i)
|
||||
--print("Removed SpiffUI Keybind: " .. name)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Now let's add ours!
|
||||
for _, bind in ipairs(SpiffUI.KeyBinds) do
|
||||
table.insert(keyBinding, { value = bind.name, key = bind.key })
|
||||
end
|
||||
|
||||
-- Events
|
||||
Events.OnGameStart.Add(function()
|
||||
SpiffUI:OnGameStart()
|
||||
end)
|
||||
|
||||
Events.OnCreatePlayer.Add(function(id)
|
||||
SpiffUI:OnCreatePlayer(id)
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
function SpiffUI:OnPostBoot()
|
||||
-- Let's Remove some keys possibly added by mods
|
||||
for name,_ in pairs(SpiffUI.KeyDisables) do
|
||||
local found = false
|
||||
for i = 1, #keyBinding do
|
||||
if keyBinding[i].value == name then
|
||||
table.remove(keyBinding, i)
|
||||
--print("Removed Keybind: " .. name)
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUI:OnCreatePlayer(id)
|
||||
for _,j in ipairs(SpiffUI) do
|
||||
local mod = SpiffUI[j]
|
||||
if mod and mod.CreatePlayer then
|
||||
mod.CreatePlayer(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI.settingsModal = function(w, h, text, key, callback)
|
||||
key.modal = ISModalRichText:new((getCore():getScreenWidth() / 2) - w / 2,
|
||||
(getCore():getScreenHeight() / 2) - h / 2, w, h,
|
||||
text, true, MainOptions.instance, callback)
|
||||
key.modal:initialise()
|
||||
key.modal:setCapture(true)
|
||||
key.modal:setAlwaysOnTop(true)
|
||||
key.modal:addToUIManager()
|
||||
if MainOptions.joyfocus then
|
||||
MainOptions.joyfocus.focus = key.modal
|
||||
updateJoypadFocus(key.joyfocus)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
Events.OnGameBoot.Add(SpiffUI.firstBoot)
|
||||
|
||||
-- Hello SpiffUI :)
|
||||
print(getText("UI_Hello_SpiffUI"))
|
||||
@@ -0,0 +1,15 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Radials
|
||||
---- ISFirearmRadialMenu getWeapon hack
|
||||
------------------------------------------
|
||||
|
||||
-- This lets us set call the radial without having the wepaon in-hand
|
||||
---- You must have the weapon equipped in primary in order to do an action though
|
||||
---- Useful as we can inject a weapon to show
|
||||
local _ISFirearmRadialMenu_getWeapon = ISFirearmRadialMenu.getWeapon
|
||||
function ISFirearmRadialMenu:getWeapon()
|
||||
if not self.weapon then
|
||||
return _ISFirearmRadialMenu_getWeapon(self)
|
||||
end
|
||||
return self.weapon
|
||||
end
|
||||
@@ -0,0 +1,435 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Radials
|
||||
---- Add tooltip to Radial
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our inventory
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIRadialRecipeTooltip = ISRecipeTooltip:derive("SpiffUIRadialRecipeTooltip")
|
||||
|
||||
function SpiffUIRadialRecipeTooltip:new()
|
||||
return ISRecipeTooltip.new(self)
|
||||
end
|
||||
|
||||
-- Taken from the base game's ISInventoryPaneContextMenu.lua
|
||||
---- CraftTooltip:layoutContents(x, y)
|
||||
----- This fixes the lag spike by limiting the number of sources we parse
|
||||
------ We also force-add our item if missing to ensure it shows :)
|
||||
function SpiffUIRadialRecipeTooltip:layoutContents(x, y)
|
||||
if self.contents then
|
||||
return self.contentsWidth, self.contentsHeight
|
||||
end
|
||||
|
||||
self:getContainers()
|
||||
self:getAvailableItemsType()
|
||||
|
||||
local FONT_HGT_SMALL = getTextManager():getFontHeight(UIFont.Small)
|
||||
local IMAGE_SIZE = 20
|
||||
|
||||
self.contents = {}
|
||||
local marginLeft = 20
|
||||
local marginTop = 10
|
||||
local marginBottom = 10
|
||||
local y1 = y + marginTop
|
||||
local lineHeight = math.max(FONT_HGT_SMALL, 20 + 2)
|
||||
local textDY = (lineHeight - FONT_HGT_SMALL) / 2
|
||||
local imageDY = (lineHeight - IMAGE_SIZE) / 2
|
||||
local singleSources = {}
|
||||
local multiSources = {}
|
||||
local allSources = {}
|
||||
|
||||
for j=0,self.recipe:getSource():size()-1 do
|
||||
local source = self.recipe:getSource():get(j)
|
||||
if source:getItems():size() == 1 then
|
||||
table.insert(singleSources, source)
|
||||
else
|
||||
table.insert(multiSources, source)
|
||||
end
|
||||
end
|
||||
|
||||
-- Display singleSources before multiSources
|
||||
for _,source in ipairs(singleSources) do
|
||||
table.insert(allSources, source)
|
||||
end
|
||||
|
||||
for _,source in ipairs(multiSources) do
|
||||
table.insert(allSources, source)
|
||||
end
|
||||
|
||||
local maxSingleSourceLabelWidth = 0
|
||||
for _,source in ipairs(singleSources) do
|
||||
local txt = self:getSingleSourceText(source)
|
||||
local width = getTextManager():MeasureStringX(UIFont.Small, txt)
|
||||
maxSingleSourceLabelWidth = math.max(maxSingleSourceLabelWidth, width)
|
||||
end
|
||||
|
||||
for scount,source in ipairs(allSources) do
|
||||
local txt = ""
|
||||
local x1 = x + marginLeft
|
||||
if source:getItems():size() > 1 then
|
||||
if source:isDestroy() then
|
||||
txt = getText("IGUI_CraftUI_SourceDestroyOneOf")
|
||||
elseif source:isKeep() then
|
||||
txt = getText("IGUI_CraftUI_SourceKeepOneOf")
|
||||
else
|
||||
txt = getText("IGUI_CraftUI_SourceUseOneOf")
|
||||
end
|
||||
self:addText(x1, y1 + textDY, txt)
|
||||
y1 = y1 + lineHeight
|
||||
else
|
||||
txt = self:getSingleSourceText(source)
|
||||
self:addText(x1, y1 + textDY, txt)
|
||||
x1 = x1 + maxSingleSourceLabelWidth + 10
|
||||
end
|
||||
|
||||
local itemDataList = {}
|
||||
|
||||
local searching = {}
|
||||
|
||||
-- Get 10 more items from our item's recipe
|
||||
---- This should cover all of the required items
|
||||
----- And give us some candy for the UI. :)
|
||||
------ Why 10? The UI stops at 10 sooooooooo.......
|
||||
local loopLength = 10
|
||||
if source:getItems():size() < loopLength then
|
||||
loopLength = source:getItems():size()
|
||||
end
|
||||
|
||||
-- on our first run
|
||||
---- The first iteration will be the item itself ("use one item", etc)
|
||||
if scount == 1 then
|
||||
local found = false
|
||||
-- We first need to check if our item is part of the 10
|
||||
for s=0,loopLength - 1 do
|
||||
found = (source:getItems():get(s) == self.item:getFullType())
|
||||
end
|
||||
-- if our item was not part of the 10 then we add it first
|
||||
if not found then
|
||||
searching[self.item:getFullType()] = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Add our items
|
||||
for s=0,loopLength - 1 do
|
||||
searching[source:getItems():get(s)] = true
|
||||
end
|
||||
|
||||
for fType,_ in pairs(searching) do
|
||||
local itemData = {}
|
||||
itemData.fullType = fType
|
||||
itemData.available = true
|
||||
local item = nil
|
||||
if itemData.fullType == "Water" then
|
||||
item = ISInventoryPaneContextMenu.getItemInstance("Base.WaterDrop")
|
||||
else
|
||||
if instanceof(self.recipe, "MovableRecipe") and (itemData.fullType == "Base."..self.recipe:getWorldSprite()) then
|
||||
item = ISInventoryPaneContextMenu.getItemInstance("Moveables.Moveable")
|
||||
else
|
||||
item = ISInventoryPaneContextMenu.getItemInstance(itemData.fullType)
|
||||
end
|
||||
--this reads the worldsprite so the generated item will have correct icon
|
||||
if instanceof(item, "Moveable") and instanceof(self.recipe, "MovableRecipe") then
|
||||
item:ReadFromWorldSprite(self.recipe:getWorldSprite());
|
||||
end
|
||||
end
|
||||
itemData.texture = ""
|
||||
if item then
|
||||
itemData.texture = item:getTex():getName()
|
||||
if itemData.fullType == "Water" then
|
||||
if source:getCount() == 1 then
|
||||
itemData.name = getText("IGUI_CraftUI_CountOneUnit", getText("ContextMenu_WaterName"))
|
||||
else
|
||||
itemData.name = getText("IGUI_CraftUI_CountUnits", getText("ContextMenu_WaterName"), source:getCount())
|
||||
end
|
||||
elseif source:getItems():size() > 1 then -- no units
|
||||
itemData.name = item:getDisplayName()
|
||||
elseif not source:isDestroy() and item:IsDrainable() then
|
||||
if source:getCount() == 1 then
|
||||
itemData.name = getText("IGUI_CraftUI_CountOneUnit", item:getDisplayName())
|
||||
else
|
||||
itemData.name = getText("IGUI_CraftUI_CountUnits", item:getDisplayName(), source:getCount())
|
||||
end
|
||||
elseif not source:isDestroy() and source:getUse() > 0 then -- food
|
||||
if source:getUse() == 1 then
|
||||
itemData.name = getText("IGUI_CraftUI_CountOneUnit", item:getDisplayName())
|
||||
else
|
||||
itemData.name = getText("IGUI_CraftUI_CountUnits", item:getDisplayName(), source:getUse())
|
||||
end
|
||||
elseif source:getCount() > 1 then
|
||||
itemData.name = getText("IGUI_CraftUI_CountNumber", item:getDisplayName(), source:getCount())
|
||||
else
|
||||
itemData.name = item:getDisplayName()
|
||||
end
|
||||
else
|
||||
itemData.name = itemData.fullType
|
||||
end
|
||||
local countAvailable = self.typesAvailable[itemData.fullType] or 0
|
||||
if countAvailable < source:getCount() and itemData.fullType ~= self.item:getFullType() then
|
||||
itemData.available = false
|
||||
itemData.r = 0.54
|
||||
itemData.g = 0.54
|
||||
itemData.b = 0.54
|
||||
end
|
||||
table.insert(itemDataList, itemData)
|
||||
end
|
||||
|
||||
-- Hack for "Dismantle Digital Watch" and similar recipes.
|
||||
-- Recipe sources include both left-hand and right-hand versions of the same item.
|
||||
-- We only want to display one of them.
|
||||
---[[
|
||||
for j=1,#itemDataList do
|
||||
local item = itemDataList[j]
|
||||
for k=#itemDataList,j+1,-1 do
|
||||
local item2 = itemDataList[k]
|
||||
if self:isExtraClothingItemOf(item, item2) then
|
||||
table.remove(itemDataList, k)
|
||||
end
|
||||
end
|
||||
end
|
||||
--]]
|
||||
|
||||
for i,itemData in ipairs(itemDataList) do
|
||||
local x2 = x1
|
||||
if source:getItems():size() > 1 then
|
||||
x2 = x2 + 20
|
||||
if source:getCount() > 1 then
|
||||
itemData.name = getText("IGUI_CraftUI_CountNumber", itemData.name, source:getCount())
|
||||
end
|
||||
end
|
||||
if itemData.texture ~= "" then
|
||||
self:addImage(x2, y1 + imageDY, itemData.texture)
|
||||
x2 = x2 + IMAGE_SIZE + 6
|
||||
end
|
||||
self:addText(x2, y1 + textDY, itemData.name, itemData.r, itemData.g, itemData.b)
|
||||
y1 = y1 + lineHeight
|
||||
|
||||
if i == 10 and i < source:getItems():size() then
|
||||
self:addText(x2, y1 + textDY, getText("Tooltip_AndNMore", source:getItems():size() - i))
|
||||
y1 = y1 + lineHeight
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if self.recipe:getTooltip() then
|
||||
local x1 = x + marginLeft
|
||||
local tooltip = getText(self.recipe:getTooltip())
|
||||
self:addText(x1, y1 + 8, tooltip)
|
||||
end
|
||||
|
||||
self.contentsX = x
|
||||
self.contentsY = y
|
||||
self.contentsWidth = 0
|
||||
self.contentsHeight = 0
|
||||
for _,v in ipairs(self.contents) do
|
||||
self.contentsWidth = math.max(self.contentsWidth, v.x + v.width - x)
|
||||
self.contentsHeight = math.max(self.contentsHeight, v.y + v.height + marginBottom - y)
|
||||
end
|
||||
return self.contentsWidth, self.contentsHeight
|
||||
end
|
||||
|
||||
function ISRadialMenu:makeToolTip()
|
||||
local player = getSpecificPlayer(self.playerNum)
|
||||
|
||||
self.toolRender = ISToolTipInv:new()
|
||||
self.toolRender:initialise()
|
||||
self.toolRender:setCharacter(player)
|
||||
|
||||
self.craftRender = SpiffUIRadialRecipeTooltip:new()
|
||||
self.craftRender:initialise()
|
||||
self.craftRender.character = player
|
||||
|
||||
self.invRender = ISToolTip:new()
|
||||
self.invRender:initialise()
|
||||
|
||||
if JoypadState.players[self.playerNum+1] then
|
||||
local x = getPlayerScreenLeft(self.playerNum) + 60
|
||||
local y = getPlayerScreenTop(self.playerNum) + 60
|
||||
self.invRender.followMouse = false
|
||||
self.invRender.desiredX = x
|
||||
self.invRender.desiredY = y
|
||||
|
||||
self.toolRender.followMouse = false
|
||||
self.toolRender:setX(x)
|
||||
self.toolRender:setY(y)
|
||||
|
||||
self.craftRender.followMouse = false
|
||||
self.craftRender.desiredX = x
|
||||
self.craftRender.desiredY = y
|
||||
end
|
||||
end
|
||||
|
||||
function ISRadialMenu:getSliceTooltipJoyPad()
|
||||
if not self.joyfocus or not self.joyfocus.id then return nil end
|
||||
|
||||
local sliceIndex = self.javaObject:getSliceIndexFromJoypad(self.joyfocus.id)
|
||||
if sliceIndex == -1 then return nil end
|
||||
|
||||
local command = self:getSliceCommand(sliceIndex + 1)
|
||||
|
||||
if command and command[2] and command[2].tooltip then
|
||||
return command[2].tooltip
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function ISRadialMenu:getSliceTooltipMouse(x, y)
|
||||
local sliceIndex = self.javaObject:getSliceIndexFromMouse(x, y)
|
||||
local command = self:getSliceCommand(sliceIndex + 1)
|
||||
|
||||
if command and command[2] and command[2].tooltip then
|
||||
return command[2].tooltip
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function ISRadialMenu:showTooltip(item)
|
||||
if item and spiff.config.showTooltips then
|
||||
if self.prev == item and (self.toolRender:getIsVisible()
|
||||
or self.craftRender:getIsVisible()
|
||||
or self.invRender:getIsVisible()) then return end
|
||||
|
||||
if self.toolRender:getIsVisible() then
|
||||
self.toolRender:removeFromUIManager()
|
||||
self.toolRender:setVisible(false)
|
||||
end
|
||||
|
||||
if self.craftRender:getIsVisible() then
|
||||
self.craftRender:removeFromUIManager()
|
||||
self.craftRender:setVisible(false)
|
||||
end
|
||||
|
||||
if self.invRender:getIsVisible() then
|
||||
self.invRender:removeFromUIManager()
|
||||
self.invRender:setVisible(false)
|
||||
end
|
||||
|
||||
self.prev = item
|
||||
|
||||
if instanceof(item, "InventoryItem") then
|
||||
|
||||
self.toolRender:setItem(item)
|
||||
|
||||
self.toolRender:setVisible(true)
|
||||
self.toolRender:addToUIManager()
|
||||
self.toolRender:bringToTop()
|
||||
|
||||
elseif item.isRecipe then
|
||||
-- We have to run the reset so the recipe is updated
|
||||
self.craftRender:reset()
|
||||
|
||||
-- Reset annoyingly changes this stuff..
|
||||
if JoypadState.players[self.playerNum+1] then
|
||||
self.craftRender.followMouse = false
|
||||
self.craftRender.desiredX = getPlayerScreenLeft(self.playerNum) + 60
|
||||
self.craftRender.desiredY = getPlayerScreenTop(self.playerNum) + 60
|
||||
end
|
||||
|
||||
self.craftRender.recipe = item.recipe
|
||||
self.craftRender.item = item.item
|
||||
self.craftRender:setName(item.recipe:getName())
|
||||
|
||||
if item.item:getTexture() and item.item:getTexture():getName() ~= "Question_On" then
|
||||
self.craftRender:setTexture(item.item:getTexture():getName())
|
||||
end
|
||||
|
||||
self.craftRender:setVisible(true)
|
||||
self.craftRender:addToUIManager()
|
||||
self.craftRender:bringToTop()
|
||||
|
||||
elseif item.isFix then
|
||||
|
||||
self.invRender:setName(item.name)
|
||||
self.invRender.texture = item.texture
|
||||
self.invRender.description = item.description
|
||||
|
||||
self.invRender:setVisible(true)
|
||||
self.invRender:addToUIManager()
|
||||
self.invRender:bringToTop()
|
||||
|
||||
end
|
||||
else
|
||||
if self.toolRender and self.toolRender:getIsVisible() then
|
||||
self.toolRender:removeFromUIManager()
|
||||
self.toolRender:setVisible(false)
|
||||
end
|
||||
if self.craftRender and self.craftRender:getIsVisible() then
|
||||
self.craftRender:removeFromUIManager()
|
||||
self.craftRender:setVisible(false)
|
||||
end
|
||||
if self.invRender and self.invRender:getIsVisible() then
|
||||
self.invRender:removeFromUIManager()
|
||||
self.invRender:setVisible(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Derived from ISPanelJoypad
|
||||
function ISRadialMenu:onMouseMove(dx, dy)
|
||||
if self.playerNum ~= 0 then return end
|
||||
ISPanelJoypad.onMouseMove(self, dx, dy)
|
||||
|
||||
local x = self:getMouseX()
|
||||
local y = self:getMouseY()
|
||||
|
||||
self:showTooltip(self:getSliceTooltipMouse(x, y))
|
||||
end
|
||||
|
||||
-- Derived from ISPanelJoypad
|
||||
function ISRadialMenu:onMouseMoveOutside(dx, dy)
|
||||
if self.playerNum ~= 0 then return end
|
||||
ISPanelJoypad.onMouseMoveOutside(self, dx, dy)
|
||||
|
||||
if self.toolRender and self.toolRender:getIsVisible() then
|
||||
self.toolRender:removeFromUIManager()
|
||||
self.toolRender:setVisible(false)
|
||||
end
|
||||
if self.craftRender and self.craftRender:getIsVisible() then
|
||||
self.craftRender:removeFromUIManager()
|
||||
self.craftRender:setVisible(false)
|
||||
end
|
||||
if self.invRender and self.invRender:getIsVisible() then
|
||||
self.invRender:removeFromUIManager()
|
||||
self.invRender:setVisible(false)
|
||||
end
|
||||
end
|
||||
|
||||
local _ISRadialMenu_undisplay = ISRadialMenu.undisplay
|
||||
function ISRadialMenu:undisplay()
|
||||
_ISRadialMenu_undisplay(self)
|
||||
|
||||
if self.toolRender and self.toolRender:getIsVisible() then
|
||||
self.toolRender:removeFromUIManager()
|
||||
self.toolRender:setVisible(false)
|
||||
end
|
||||
if self.craftRender and self.craftRender:getIsVisible() then
|
||||
self.craftRender:removeFromUIManager()
|
||||
self.craftRender:setVisible(false)
|
||||
end
|
||||
if self.invRender and self.invRender:getIsVisible() then
|
||||
self.invRender:removeFromUIManager()
|
||||
self.invRender:setVisible(false)
|
||||
end
|
||||
end
|
||||
|
||||
function ISRadialMenu:RadialTick()
|
||||
if self:isReallyVisible() then
|
||||
self:showTooltip(self:getSliceTooltipJoyPad())
|
||||
end
|
||||
end
|
||||
|
||||
local _ISRadialMenu_new = ISRadialMenu.new
|
||||
function ISRadialMenu:new(...)
|
||||
local o = _ISRadialMenu_new(self, ...)
|
||||
o:makeToolTip()
|
||||
if JoypadState.players[o.playerNum+1] then
|
||||
Events.OnRenderTick.Add(function()
|
||||
o:RadialTick()
|
||||
end)
|
||||
end
|
||||
return o
|
||||
end
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Radials
|
||||
---- Radial Menu Functions
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
-- Base SpiffUI Radial Menu
|
||||
local SpiffUIRadialMenu = ISBaseObject:derive("SpiffUIRadialMenu")
|
||||
|
||||
-- Base Radial Command
|
||||
local SpiffUIRadialCommand = ISBaseObject:derive("SpiffUIRadialCommand")
|
||||
|
||||
-- Radial Command for asking amount
|
||||
local SpiffUIRadialCommandAsk = SpiffUIRadialCommand:derive("SpiffUIRadialCommandAsk")
|
||||
|
||||
-- Radial Command for Next Page
|
||||
local SpiffUIRadialCommandNext = SpiffUIRadialCommand:derive("SpiffUIRadialCommandNext")
|
||||
|
||||
-- Radial Command for Prev Page
|
||||
local SpiffUIRadialCommandPrev = SpiffUIRadialCommand:derive("SpiffUIRadialCommandPrev")
|
||||
|
||||
------------------------------------------
|
||||
function SpiffUIRadialCommand:new(menu, text, texture, tooltip)
|
||||
local o = ISBaseObject.new(self)
|
||||
o.menu = menu
|
||||
o.rmenu = menu.rmenu
|
||||
o.player = menu.player
|
||||
o.playerNum = menu.playerNum
|
||||
|
||||
o.tooltip = tooltip
|
||||
|
||||
o.text = text
|
||||
o.texture = texture
|
||||
|
||||
o.shouldAsk = 0
|
||||
o.amount = 0
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
function SpiffUIRadialCommand:fillMenu()
|
||||
if spiff.config.showTooltips and self.tooltip then
|
||||
if self.forceText then
|
||||
self.rmenu:addSlice(self.text, self.texture, self.invoke, self)
|
||||
else
|
||||
self.rmenu:addSlice("", self.texture, self.invoke, self)
|
||||
end
|
||||
else
|
||||
self.rmenu:addSlice(self.text, self.texture, self.invoke, self)
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIRadialCommand:Action()
|
||||
print("Base SpiffUIRadialCommand Action -- Override me!")
|
||||
end
|
||||
|
||||
function SpiffUIRadialCommand:invoke()
|
||||
if self.shouldAsk > 0 then
|
||||
self.menu.command = self
|
||||
self.menu:askAmount()
|
||||
return
|
||||
end
|
||||
self:Action()
|
||||
end
|
||||
|
||||
-- Add Definition
|
||||
spiff.radialcommand = SpiffUIRadialCommand
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIRadialCommandAsk:invoke()
|
||||
self.menu.command.amount = self.amount
|
||||
self.menu.command:Action()
|
||||
end
|
||||
|
||||
function SpiffUIRadialCommandAsk:new(menu, text, texture, amount)
|
||||
local o = spiff.radialcommand.new(self, menu, text, texture, nil)
|
||||
o.amount = amount
|
||||
return o
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIRadialCommandNext:invoke()
|
||||
self.menu.page = self.menu.page + 1
|
||||
self.menu:show()
|
||||
end
|
||||
|
||||
function SpiffUIRadialCommandNext:new(menu, text, texture)
|
||||
return spiff.radialcommand.new(self, menu, text, texture, nil)
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIRadialCommandPrev:invoke()
|
||||
self.menu.page = self.menu.page - 1
|
||||
if self.menu.pageReset then
|
||||
self.menu.maxPage = self.menu.page
|
||||
end
|
||||
self.menu:show()
|
||||
end
|
||||
|
||||
function SpiffUIRadialCommandPrev:new(menu, text, texture)
|
||||
return spiff.radialcommand.new(self, menu, text, texture, nil)
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIRadialMenu:build()
|
||||
print("Base SpiffUIRadialMenu build -- Override me!")
|
||||
end
|
||||
|
||||
function SpiffUIRadialMenu:askAmount()
|
||||
self.rmenu:clear()
|
||||
--table.wipe(self.commands)
|
||||
|
||||
local askCommands = {}
|
||||
|
||||
if self.command.shouldAsk == 1 then -- Consume: 1 (all), 1/2, 1/4, Dieter
|
||||
table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[4], 1))
|
||||
table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[2], 0.5))
|
||||
table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[3], 0.25))
|
||||
table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.item:getName(), spiff.icons[5], -1))
|
||||
elseif self.command.shouldAsk == 2 then -- Crafting, all or 1
|
||||
table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.recipe:getName(), spiff.icons[4], true))
|
||||
table.insert(askCommands, SpiffUIRadialCommandAsk:new(self, self.command.recipe:getName(), spiff.icons[1], false))
|
||||
end
|
||||
|
||||
for _,command in ipairs(askCommands) do
|
||||
local count = #self.rmenu.slices
|
||||
command:fillMenu()
|
||||
if count == #self.rmenu.slices then
|
||||
self.rmenu:addSlice(nil, nil, nil)
|
||||
end
|
||||
end
|
||||
|
||||
self.rmenu:center()
|
||||
self.rmenu:addToUIManager()
|
||||
self.rmenu:setVisible(true)
|
||||
SpiffUI.action.wasVisible = true
|
||||
if JoypadState.players[self.playerNum+1] then
|
||||
self.rmenu:setHideWhenButtonReleased(Joypad.DPadUp)
|
||||
setJoypadFocus(self.playerNum, self.rmenu)
|
||||
self.player:setJoypadIgnoreAimUntilCentered(true)
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIRadialMenu:display()
|
||||
self:build()
|
||||
self.page = 1
|
||||
|
||||
self:show()
|
||||
end
|
||||
|
||||
function SpiffUIRadialMenu:show()
|
||||
self.rmenu:clear()
|
||||
|
||||
local hasCommands = false
|
||||
|
||||
-- Add the next page
|
||||
if self.maxPage > 1 and self.page < self.maxPage then
|
||||
local nextp = SpiffUIRadialCommandNext:new(self, "Next", self.nextTex)
|
||||
local count = #self.rmenu.slices
|
||||
nextp:fillMenu()
|
||||
if count == #self.rmenu.slices then
|
||||
self.rmenu:addSlice(nil, nil, nil)
|
||||
end
|
||||
end
|
||||
|
||||
if self.commands[self.page] then
|
||||
for _,command in ipairs(self.commands[self.page]) do
|
||||
local count = #self.rmenu.slices
|
||||
command:fillMenu()
|
||||
if count == #self.rmenu.slices then
|
||||
self.rmenu:addSlice(nil, nil, nil)
|
||||
end
|
||||
hasCommands = true
|
||||
end
|
||||
end
|
||||
|
||||
-- Add the previous page
|
||||
if self.maxPage > 1 and self.page > 1 then
|
||||
local nextp = SpiffUIRadialCommandPrev:new(self, "Previous", self.prevTex)
|
||||
local count = #self.rmenu.slices
|
||||
nextp:fillMenu()
|
||||
if count == #self.rmenu.slices then
|
||||
self.rmenu:addSlice(nil, nil, nil)
|
||||
end
|
||||
end
|
||||
|
||||
if hasCommands then
|
||||
self.rmenu:center()
|
||||
self.rmenu:addToUIManager()
|
||||
self.rmenu:setVisible(true)
|
||||
SpiffUI.action.wasVisible = true
|
||||
if JoypadState.players[self.playerNum+1] then
|
||||
self.rmenu:setHideWhenButtonReleased(Joypad.DPadUp)
|
||||
setJoypadFocus(self.playerNum, self.rmenu)
|
||||
self.player:setJoypadIgnoreAimUntilCentered(true)
|
||||
end
|
||||
else
|
||||
-- If no commands, just close the radial
|
||||
self.rmenu:undisplay()
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIRadialMenu:AddCommand(command)
|
||||
if self.cCount == self.cMax then
|
||||
--print("Adding New Page: " .. self.cCount)
|
||||
self.cCount = 0
|
||||
self.page = self.page + 1
|
||||
self.maxPage = self.page
|
||||
end
|
||||
|
||||
if not self.commands[self.page] then
|
||||
self.commands[self.page] = {}
|
||||
end
|
||||
table.insert(self.commands[self.page], command)
|
||||
self.cCount = self.cCount + 1
|
||||
--print("Count: " .. self.cCount)
|
||||
end
|
||||
|
||||
function SpiffUIRadialMenu:new(player)
|
||||
local o = ISBaseObject.new(self)
|
||||
|
||||
o.player = player
|
||||
o.playerNum = player:getPlayerNum()
|
||||
|
||||
o.rmenu = getPlayerRadialMenu(o.playerNum)
|
||||
|
||||
o.commands = {}
|
||||
o.cCount = 0
|
||||
o.cMax = 16
|
||||
o.page = 1
|
||||
o.maxPage = 1
|
||||
|
||||
o.nextTex = getTexture("media/SpiffUI/nextpage.png")
|
||||
o.prevTex = getTexture("media/SpiffUI/prevpage.png")
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
spiff.radialmenu = SpiffUIRadialMenu
|
||||
@@ -0,0 +1,186 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Crafting Radial Actions
|
||||
---- Radial Menu for Crafting
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUICraftingRadial = spiff.radialmenu:derive("SpiffUICraftingRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[0] = SpiffUICraftingRadial
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUICraftingRadialCommand = spiff.radialcommand:derive("SpiffUICraftingRadialCommand")
|
||||
|
||||
function SpiffUICraftingRadialCommand:Action()
|
||||
ISInventoryPaneContextMenu.OnCraft(self.item, self.recipe, self.player:getPlayerNum(), self.amount)
|
||||
end
|
||||
|
||||
function SpiffUICraftingRadialCommand:new(menu, recipe)
|
||||
local texture = InventoryItemFactory.CreateItem(recipe.recipe:getResult():getFullType()):getTexture()
|
||||
|
||||
local tooltip = {
|
||||
recipe = recipe.recipe,
|
||||
item = recipe.item,
|
||||
isRecipe = true
|
||||
}
|
||||
local o = spiff.radialcommand.new(self, menu, recipe.recipe:getName(), texture, tooltip)
|
||||
|
||||
o.recipe = recipe.recipe
|
||||
o.item = recipe.item
|
||||
|
||||
if spiff.config.craftAmount == -1 and recipe.num > 1 then
|
||||
-- Ask
|
||||
o.shouldAsk = 2
|
||||
elseif spiff.config.craftAmount == 1 then
|
||||
-- Craft All
|
||||
o.amount = true
|
||||
end
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
local function getRecipes(packs, player)
|
||||
local items = {}
|
||||
local recipes = {}
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return instanceof(item, "InventoryItem")
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
if item then
|
||||
if not items[item:getType()] then
|
||||
items[item:getType()] = item
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not spiff.config.craftShowSmokeables then
|
||||
for i,item in pairs(items) do
|
||||
if spiff.filters.smokeables[item:getType()] or item:getCustomMenuOption() == "Smoke" then
|
||||
items[item:getType()] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not spiff.config.craftShowMedical then
|
||||
for i,item in pairs(items) do
|
||||
if spiff.filters.firstAidCraft[item:getType()] or item:getStringItemType() == "Medical" then
|
||||
items[item:getType()] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not spiff.config.craftShowEquipped then
|
||||
for i,item in pairs(items) do
|
||||
if player:isEquipped(item) and (player:getPrimaryHandItem() ~= item and player:getSecondaryHandItem() ~= item) then
|
||||
items[item:getType()] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local count = 0
|
||||
for _,item in pairs(items) do
|
||||
local recs = RecipeManager.getUniqueRecipeItems(item, player, packs)
|
||||
for i = 0, recs:size() - 1 do
|
||||
local recipe = recs:get(i)
|
||||
local key
|
||||
if spiff.config.craftFilterUnique then
|
||||
key = recipe:getName()
|
||||
else
|
||||
key = count
|
||||
end
|
||||
if not recipes[key] then
|
||||
recipes[key] = {
|
||||
recipe = recipe,
|
||||
num = RecipeManager.getNumberOfTimesRecipeCanBeDone(recipe, player, packs, item),
|
||||
item = item
|
||||
}
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return recipes
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUICraftingRadial:build()
|
||||
local bags = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local recipes = getRecipes(bags, self.player)
|
||||
|
||||
local hasRecipes = false
|
||||
for i,j in pairs(recipes) do
|
||||
self:AddCommand(SpiffUICraftingRadialCommand:new(self, j))
|
||||
hasRecipes = true
|
||||
end
|
||||
|
||||
if not hasRecipes then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noCraft"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUICraftingRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function SpiffUICraftDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
if not SpiffUI.action.ready then
|
||||
local ui = getPlayerCraftingUI(player:getPlayerNum())
|
||||
if ui:getIsVisible() then
|
||||
ui:setVisible(false)
|
||||
ui:removeFromUIManager()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function SpiffUICraftHold(player)
|
||||
if SpiffUI.holdTime() then
|
||||
if spiff.config.craftSwitch then
|
||||
ISCraftingUI.toggleCraftingUI()
|
||||
else
|
||||
-- Create Menu
|
||||
local menu = SpiffUICraftingRadial:new(player)
|
||||
menu:display()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function SpiffUICraftRelease(player)
|
||||
if SpiffUI.releaseTime() then
|
||||
if spiff.config.craftSwitch then
|
||||
-- Create Menu
|
||||
local menu = SpiffUICraftingRadial:new(player)
|
||||
menu:display()
|
||||
else
|
||||
ISCraftingUI.toggleCraftingUI()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUICraftWheel',
|
||||
key = Keyboard.KEY_B,
|
||||
queue = false,
|
||||
Down = SpiffUICraftDown,
|
||||
Hold = SpiffUICraftHold,
|
||||
Up = SpiffUICraftRelease
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,246 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Drink Actions
|
||||
---- Radial Menu for drinks
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIDrinkRadial = spiff.radialmenu:derive("SpiffUIDrinkRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[1] = SpiffUIDrinkRadial
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIDrinkThirstRadialCommand = spiff.radialcommand:derive("SpiffUIDrinkThirstRadialCommand")
|
||||
|
||||
function SpiffUIDrinkThirstRadialCommand:Action()
|
||||
ISInventoryPaneContextMenu.onDrinkForThirst(self.item, self.player)
|
||||
|
||||
-- Return from whence it came...
|
||||
if self.item:getContainer() ~= self.player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(self.player, self.item, self.player:getInventory(), self.item:getContainer()))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIDrinkThirstRadialCommand:new(menu, item)
|
||||
local o = spiff.radialcommand.new(self, menu, item:getName(), item:getTexture(), item)
|
||||
|
||||
o.item = item
|
||||
return o
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIDrinkRadialCommand = spiff.radialcommand:derive("SpiffUIDrinkRadialCommand")
|
||||
|
||||
-- Code below is adapted from the "Dieter" feature of the excellent ExtraSauce Quality of Life mod by MonsterSauce
|
||||
local function round(num)
|
||||
return math.floor(num * 100 + 0.5) / 100;
|
||||
end
|
||||
|
||||
local function doDrink(item, player, amount)
|
||||
-- If we don't specify an amount, then figure it out
|
||||
if amount == -1 then
|
||||
local itemThirst = 0
|
||||
if (item.getThirstChange and item:getThirstChange()) then
|
||||
itemThirst = round(item:getThirstChange())
|
||||
end
|
||||
local charThirst = round(player:getStats():getThirst())
|
||||
|
||||
if itemThirst < 0 and charThirst >= 0.1 then
|
||||
|
||||
local percentage = 1
|
||||
|
||||
if (charThirst + itemThirst < 0) then
|
||||
percentage = -1 * round(charThirst / itemThirst)
|
||||
if (percentage > 0.95) then percentage = 1.0 end
|
||||
end
|
||||
amount = percentage
|
||||
end
|
||||
end
|
||||
|
||||
if amount ~= -1 then
|
||||
ISInventoryPaneContextMenu.eatItem(item, amount, player:getPlayerNum())
|
||||
else
|
||||
player:Say(getText("UI_character_SpiffUI_notThirsty"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIDrinkRadialCommand:Action()
|
||||
doDrink(self.item, self.player, self.amount)
|
||||
--ISInventoryPaneContextMenu.eatItem(self.item, self.amount, self.playerNum)
|
||||
|
||||
-- Return from whence it came...
|
||||
if self.item:getContainer() ~= self.player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(self.player, self.item, self.player:getInventory(), self.item:getContainer()))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIDrinkRadialCommand:new(menu, item)
|
||||
local o = spiff.radialcommand.new(self, menu, item:getName(), item:getTexture(), item)
|
||||
|
||||
o.amount = spiff.config.drinkAmount
|
||||
|
||||
o.item = item
|
||||
|
||||
if spiff.config.drinkAmount == 0 then
|
||||
o.shouldAsk = 1
|
||||
end
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
local function getItems(packs, player)
|
||||
local items = {}
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return not player:isKnownPoison(item) and (item:getCustomMenuOption() and item:getCustomMenuOption() == "Drink") or item:isWaterSource()
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
if item then
|
||||
if item:isWaterSource() then
|
||||
if not items[item:getType()] or items[item:getType()]:getUsedDelta() > item:getUsedDelta() then
|
||||
items[item:getType()] = item
|
||||
end
|
||||
else
|
||||
if not items[item:getType()] or items[item:getType()]:getThirstChange() < item:getThirstChange() then
|
||||
items[item:getType()] = item
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local drinks = nil
|
||||
|
||||
for _,j in pairs(items) do
|
||||
if not drinks then drinks = {} end
|
||||
table.insert(drinks, j)
|
||||
end
|
||||
|
||||
if drinks then
|
||||
table.sort(drinks, function(a,b)
|
||||
if a:isWaterSource() then
|
||||
return true
|
||||
end
|
||||
if b:isWaterSource() then
|
||||
return false
|
||||
end
|
||||
return a:getThirstChange() > b:getThirstChange()
|
||||
end)
|
||||
end
|
||||
|
||||
return drinks
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIDrinkRadial:build()
|
||||
local packs = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local drinks = getItems(packs, self.player)
|
||||
|
||||
if not drinks then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noDrinks"))
|
||||
return
|
||||
end
|
||||
|
||||
local hasCmd = false
|
||||
|
||||
-- Build
|
||||
for _,j in ipairs(drinks) do
|
||||
if j:isWaterSource() then
|
||||
if self.player:getStats():getThirst() > 0.1 then
|
||||
self:AddCommand(SpiffUIDrinkThirstRadialCommand:new(self, j))
|
||||
hasCmd = true
|
||||
end
|
||||
else
|
||||
self:AddCommand(SpiffUIDrinkRadialCommand:new(self, j))
|
||||
hasCmd = true
|
||||
end
|
||||
end
|
||||
|
||||
if not hasCmd then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noDrinks"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIDrinkRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function quickDrink(player)
|
||||
if player:getStats():getThirst() < 0.1 then
|
||||
player:Say(getText("UI_character_SpiffUI_notThirsty"))
|
||||
return
|
||||
end
|
||||
local packs = ISInventoryPaneContextMenu.getContainers(player)
|
||||
local items = getItems(packs, player)
|
||||
|
||||
if items then
|
||||
for _,item in ipairs(items) do
|
||||
if item:isWaterSource() then
|
||||
ISInventoryPaneContextMenu.onDrinkForThirst(item, player)
|
||||
else
|
||||
local amount = spiff.config.drinkQuickAmount
|
||||
if amount == 0 then amount = -1 end
|
||||
doDrink(item, player, amount)
|
||||
end
|
||||
-- Return from whence it came...
|
||||
if item:getContainer() ~= player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, player:getInventory(), item:getContainer()))
|
||||
end
|
||||
-- Just do the first
|
||||
return
|
||||
end
|
||||
else
|
||||
player:Say(getText("UI_character_SpiffUI_noDrinks"))
|
||||
end
|
||||
end
|
||||
|
||||
local function DrinksDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- If showNow and we're doing an action, do it now
|
||||
if spiff.config.drinkShowNow and not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIDrinkRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function DrinksHold(player)
|
||||
if SpiffUI.holdTime() then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIDrinkRadial:new(getSpecificPlayer(0))
|
||||
menu:display()
|
||||
end
|
||||
end
|
||||
|
||||
local function DrinksRelease(player)
|
||||
if SpiffUI.releaseTime() then
|
||||
quickDrink(player)
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIDrinkWheel',
|
||||
key = 26, -- {
|
||||
queue = true,
|
||||
Down = DrinksDown,
|
||||
Hold = DrinksHold,
|
||||
Up = DrinksRelease
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,199 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Eat Actions
|
||||
---- Radial Menu for food
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIEatRadial = spiff.radialmenu:derive("SpiffUIEatRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[2] = SpiffUIEatRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIEatRadialCommand = spiff.radialcommand:derive("SpiffUIEatRadialCommand")
|
||||
|
||||
-- Code below is adapted from the excellent ExtraSauce Quality of Life mod by MonsterSauce
|
||||
local function round(num)
|
||||
return math.floor(num * 100 + 0.5) / 100;
|
||||
end
|
||||
|
||||
local function doEat(item, player, amount)
|
||||
-- If we don't specify an amount, then figure it out
|
||||
if amount == -1 then
|
||||
local itemHunger = 0
|
||||
if (item.getBaseHunger and item:getBaseHunger()) then
|
||||
itemHunger = round(item:getBaseHunger())
|
||||
end
|
||||
|
||||
local charHunger = round(player:getStats():getHunger())
|
||||
|
||||
if itemHunger < 0 and charHunger >= 0.1 then
|
||||
|
||||
local percentage = 1
|
||||
|
||||
if (charHunger + itemHunger < 0) then
|
||||
percentage = -1 * round(charHunger / itemHunger)
|
||||
if (percentage > 0.95) then percentage = 1.0 end
|
||||
end
|
||||
amount = percentage
|
||||
end
|
||||
end
|
||||
|
||||
if amount ~= -1 then
|
||||
ISInventoryPaneContextMenu.eatItem(item, amount, player:getPlayerNum())
|
||||
else
|
||||
player:Say(getText("UI_character_SpiffUI_notHungry"))
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIEatRadialCommand:Action()
|
||||
doEat(self.item, self.player, self.amount)
|
||||
|
||||
-- Return from whence it came...
|
||||
if self.item:getContainer() ~= self.player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(self.player, self.item, self.player:getInventory(), self.item:getContainer()))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIEatRadialCommand:new(menu, item)
|
||||
local o = spiff.radialcommand.new(self, menu, item:getName(), item:getTexture(), item)
|
||||
|
||||
o.amount = spiff.config.eatAmount
|
||||
|
||||
o.item = item
|
||||
|
||||
if spiff.config.eatAmount == 0 then
|
||||
o.shouldAsk = 1
|
||||
end
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
local function getItems(packs)
|
||||
local items = {}
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return instanceof(item, "Food") and item:getHungChange() < 0 and not item:getScriptItem():isCantEat() and not item:getCustomMenuOption()
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
if item then
|
||||
if not items then items = {} end
|
||||
if not items[item:getType()] or items[item:getType()]:getHungChange() < item:getHungChange() then
|
||||
items[item:getType()] = item
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local food = nil
|
||||
|
||||
for _,j in pairs(items) do
|
||||
if not food then food = {} end
|
||||
table.insert(food, j)
|
||||
end
|
||||
|
||||
if food then
|
||||
table.sort(food, function(a,b)
|
||||
return a:getHungChange() > b:getHungChange()
|
||||
end)
|
||||
end
|
||||
|
||||
return food
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIEatRadial:build()
|
||||
local packs = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local food = getItems(packs)
|
||||
|
||||
if not food then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noFood"))
|
||||
return
|
||||
end
|
||||
|
||||
-- Build
|
||||
for _,j in ipairs(food) do
|
||||
self:AddCommand(SpiffUIEatRadialCommand:new(self, j))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIEatRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function quickEat(player)
|
||||
if player:getStats():getHunger() < 0.1 then
|
||||
player:Say(getText("UI_character_SpiffUI_notHungry"))
|
||||
return
|
||||
end
|
||||
local packs = ISInventoryPaneContextMenu.getContainers(player)
|
||||
local food = getItems(packs)
|
||||
|
||||
if not food then
|
||||
player:Say(getText("UI_character_SpiffUI_noFood"))
|
||||
return
|
||||
end
|
||||
|
||||
for _,item in ipairs(food) do
|
||||
-- Just do the first thing
|
||||
local amount = spiff.config.eatQuickAmount
|
||||
if amount == 0 then amount = -1 end
|
||||
doEat(item, player, amount)
|
||||
--ISInventoryPaneContextMenu.eatItem(item, spiff.config.eatQuickAmount, player:getPlayerNum())
|
||||
|
||||
-- Return from whence it came...
|
||||
if item:getContainer() ~= player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, player:getInventory(), item:getContainer()))
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local function EatDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- If showNow and we're doing an action, do it now
|
||||
if spiff.config.eatShowNow and not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIEatRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function EatHold(player)
|
||||
if SpiffUI.holdTime() then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIEatRadial:new(getSpecificPlayer(0))
|
||||
menu:display()
|
||||
end
|
||||
end
|
||||
|
||||
local function EatRelease(player)
|
||||
if SpiffUI.releaseTime() then
|
||||
quickEat(player)
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIEatWheel',
|
||||
key = 27, -- }
|
||||
queue = true,
|
||||
Down = EatDown,
|
||||
Hold = EatHold,
|
||||
Up = EatRelease
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,607 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Equipment Actions
|
||||
---- Radial Menu for Equipment
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIEquipmentRadial = spiff.radialmenu:derive("SpiffUIEquipmentRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[3] = SpiffUIEquipmentRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIEquipmentRadialCommand = spiff.radialcommand:derive("SpiffUIEquipmentRadialCommand")
|
||||
local SpiffUIEquipmentItemRadialCommand = spiff.radialcommand:derive("SpiffUIEquipmentItemRadialCommand")
|
||||
|
||||
local function returnItem(item, player)
|
||||
if item:getContainer() ~= player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, player:getInventory(), item:getContainer()))
|
||||
end
|
||||
end
|
||||
|
||||
local function returnItems(items, player)
|
||||
for i=0,items:size() - 1 do
|
||||
local item = items:get(i)
|
||||
returnItem(item, player)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIEquipmentItemRadialCommand:Action()
|
||||
if self.mode == 0 then -- "Inspect"
|
||||
ISInventoryPaneContextMenu.onInspectClothing(self.player, self.item.item)
|
||||
elseif self.mode == 1 then -- "Unequip"
|
||||
if self.item.inHotbar then
|
||||
-- We Detach it
|
||||
ISTimedActionQueue.add(ISDetachItemHotbar:new(self.player, self.item.item))
|
||||
end
|
||||
ISInventoryPaneContextMenu.unequipItem(self.item.item, self.playerNum)
|
||||
elseif self.mode == 2 then -- "Transfer To"
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(self.player, self.item.item, self.player:getInventory(), self.item.inv))
|
||||
elseif self.mode == 3 then -- "Drop"
|
||||
ISInventoryPaneContextMenu.dropItem(self.item.item, self.playerNum)
|
||||
elseif self.mode == 4 then -- Clothing Items Extra
|
||||
ISTimedActionQueue.add(ISClothingExtraAction:new(self.player, self.item.item, self.item.itype))
|
||||
elseif self.mode == 5 then --Recipes
|
||||
ISInventoryPaneContextMenu.OnCraft(self.item.item, self.item.recipe, self.playerNum, false)
|
||||
elseif self.mode == 6 then -- Item Repairs
|
||||
if not self.item.unavailable then
|
||||
local items = self.item.fixing:getRequiredItems(self.player, self.item.fixer, self.item.item)
|
||||
ISInventoryPaneContextMenu.onFix(self.item.item, self.playerNum, self.item.fixing, self.item.fixer)
|
||||
returnItems(items, self.player)
|
||||
else
|
||||
self.player:Say(getText("UI_character_SpiffUI_noRepairItems"))
|
||||
end
|
||||
elseif self.mode == 7 then -- Guns!
|
||||
if self.item.item ~= self.player:getPrimaryHandItem() then
|
||||
-- The gun has to be equipped in order for the radial menu to work
|
||||
ISInventoryPaneContextMenu.equipWeapon(self.item.item, true, self.item.item:isTwoHandWeapon(), self.playerNum)
|
||||
end
|
||||
local frm = ISFirearmRadialMenu:new(self.player)
|
||||
frm.weapon = self.item.item
|
||||
frm:fillMenu()
|
||||
frm:display()
|
||||
else
|
||||
self.player:Say("OOPS! I don't know how to do that. That's not supposed to happen!")
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIEquipmentItemRadialCommand:new(menu, stuff)
|
||||
local o = spiff.radialcommand.new(self, menu, stuff.label, stuff.texture, stuff.tooltip)
|
||||
o.item = stuff
|
||||
o.mode = stuff.mode
|
||||
o.forceText = true
|
||||
|
||||
return o
|
||||
end
|
||||
------------------------------------------
|
||||
|
||||
function SpiffUIEquipmentRadialCommand:Action()
|
||||
self.menu.page = self.menu.page + 1
|
||||
self.menu.maxPage = self.menu.page
|
||||
if self.mode == 0 then
|
||||
-- base menu, show item
|
||||
self.menu:itemOptions(self.item)
|
||||
elseif self.mode == 1 then
|
||||
-- show accessories
|
||||
self.menu:accessories()
|
||||
elseif self.mode == 2 then
|
||||
-- show accessories
|
||||
self.menu:hotbar()
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIEquipmentRadialCommand:new(menu, item, mode)
|
||||
local o
|
||||
if mode == 0 then
|
||||
o = spiff.radialcommand.new(self, menu, item:getName(), item:getTexture(), item)
|
||||
else
|
||||
o = spiff.radialcommand.new(self, menu, item.label, item.texture, nil)
|
||||
end
|
||||
|
||||
o.item = item
|
||||
o.mode = mode
|
||||
return o
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local clothesSort = {
|
||||
["Hat"] = 0,
|
||||
["FullHat"] = 1,
|
||||
["FullHelmet"] = 2,
|
||||
["FullSuit"] = 3,
|
||||
["FullSuitHead"] = 4,
|
||||
["FullTop"] = 5,
|
||||
["JacketHat"] = 6,
|
||||
["SweaterHat"] = 7,
|
||||
["Ears"] = 108,
|
||||
["EarTop"] = 109,
|
||||
["Eyes"] = 110,
|
||||
["MakeUp_Eyes"] = 111,
|
||||
["MakeUp_EyesShadow"] = 112,
|
||||
["MaskEyes"] = 113,
|
||||
["RightEye"] = 114,
|
||||
["LeftEye"] = 115,
|
||||
["Nose"] = 116,
|
||||
["MakeUp_Lips"] = 117,
|
||||
["MakeUp_FullFace"] = 118,
|
||||
["Mask"] = 119,
|
||||
["MaskFull"] = 120,
|
||||
["Neck"] = 121,
|
||||
["Necklace"] = 122,
|
||||
["Necklace_Long"] = 123,
|
||||
["Scarf"] = 24,
|
||||
["Jacket"] = 25,
|
||||
["Sweater"] = 26,
|
||||
["JacketHat"] = 27,
|
||||
["SweaterHat"] = 28,
|
||||
["Dress"] = 29,
|
||||
["BathRobe"] = 30,
|
||||
["Shirt"] = 31,
|
||||
["TankTop"] = 32,
|
||||
["TorsoExtra"] = 33,
|
||||
["Tshirt"] = 34,
|
||||
["ShortSleeveShirt"] = 35,
|
||||
["Sweater"] = 36,
|
||||
["AmmoStrap"] = 137,
|
||||
["BellyButton"] = 138,
|
||||
["Belt"] = 39,
|
||||
["Holster"] = 139,
|
||||
["BeltExtra"] = 140,
|
||||
["FannyPackBack"] = 41,
|
||||
["FannyPackFront"] = 42,
|
||||
["Hands"] = 43,
|
||||
["Left_MiddleFinger"] = 144,
|
||||
["Left_RingFinger"] = 145,
|
||||
["LeftWrist"] = 146,
|
||||
["Right_MiddleFinger"] = 147,
|
||||
["Right_RingFinger"] = 148,
|
||||
["RightWrist"] = 149,
|
||||
["Tail"] = 150,
|
||||
["Underwear"] = 51,
|
||||
["UnderwearBottom"] = 52,
|
||||
["UnderwearExtra1"] = 53,
|
||||
["UnderwearExtra2"] = 54,
|
||||
["UnderwearInner"] = 55,
|
||||
["UnderwearTop"] = 56,
|
||||
["Skirt"] = 57,
|
||||
["Torso1Legs1"] = 58,
|
||||
["Legs1"] = 59,
|
||||
["Pants"] = 60,
|
||||
["Socks"] = 61,
|
||||
["Shoes"] = 62,
|
||||
[""] = 99
|
||||
}
|
||||
|
||||
local clothesFilter = {
|
||||
["Bandage"] = true,
|
||||
["Wound"] = true,
|
||||
["ZedDmg"] = true
|
||||
}
|
||||
|
||||
local function getItems(packs, player)
|
||||
local items = nil
|
||||
|
||||
-- First get worn items
|
||||
local clothes = player:getWornItems()
|
||||
for i=0, clothes:size() - 1 do
|
||||
if not items then items = {} end
|
||||
local item = clothes:get(i):getItem()
|
||||
if item and not clothesFilter[item:getBodyLocation()] then
|
||||
table.insert(items, item)
|
||||
end
|
||||
end
|
||||
|
||||
-- Add any equipped items in our hands too
|
||||
local primary = player:getPrimaryHandItem()
|
||||
local secondary = player:getSecondaryHandItem()
|
||||
if primary then
|
||||
if not items then items = {} end
|
||||
table.insert(items, primary)
|
||||
end
|
||||
if secondary and secondary ~= primary then
|
||||
if not items then items = {} end
|
||||
table.insert(items, secondary)
|
||||
end
|
||||
|
||||
if items then
|
||||
-- order our clothes from head to toe
|
||||
table.sort(items, function(a,b)
|
||||
if not clothesSort[a:getBodyLocation()] or not clothesSort[b:getBodyLocation()] then return false end
|
||||
return clothesSort[a:getBodyLocation()] < clothesSort[b:getBodyLocation()]
|
||||
end)
|
||||
end
|
||||
return items
|
||||
end
|
||||
|
||||
-- This is mostly a combination function that reimplements 'ISInventoryPaneContextMenu.addFixerSubOption'
|
||||
---- The tooltip is used in our radial override tooltip
|
||||
---- returns a "stuff" table that is used to build a radial command
|
||||
local function fixerStuff(item, fixing, fixer, player)
|
||||
local unavailable = false
|
||||
local tooltip = {
|
||||
description = "",
|
||||
texture = item:getTex(),
|
||||
name = item:getName(),
|
||||
isFix = true
|
||||
}
|
||||
local fixerItem = fixing:haveThisFixer(player, fixer, item)
|
||||
|
||||
local usedItem = InventoryItemFactory.CreateItem(fixing:getModule():getName() .. "." .. fixer:getFixerName())
|
||||
local itemName
|
||||
if usedItem then
|
||||
tooltip.texture = usedItem:getTex()
|
||||
itemName = getItemNameFromFullType(usedItem:getFullType())
|
||||
else
|
||||
itemName = fixer:getFixerName()
|
||||
end
|
||||
tooltip.name = itemName
|
||||
|
||||
local condPercentRepaired = FixingManager.getCondRepaired(item, player, fixing, fixer)
|
||||
local color1 = "<RED>";
|
||||
if condPercentRepaired > 15 and condPercentRepaired <= 25 then
|
||||
color1 = "<ORANGE>";
|
||||
elseif condPercentRepaired > 25 then
|
||||
color1 = "<GREEN>";
|
||||
end
|
||||
|
||||
local chanceOfSucess = 100 - FixingManager.getChanceOfFail(item, player, fixing, fixer)
|
||||
local color2 = "<RED>";
|
||||
if chanceOfSucess > 15 and chanceOfSucess <= 40 then
|
||||
color2 = "<ORANGE>";
|
||||
elseif chanceOfSucess > 40 then
|
||||
color2 = "<GREEN>";
|
||||
end
|
||||
|
||||
tooltip.description = " " .. color1 .. " " .. getText("Tooltip_potentialRepair") .. " " .. math.ceil(condPercentRepaired) .. "%"
|
||||
tooltip.description = tooltip.description .. " <LINE> " .. color2 .. " " .. getText("Tooltip_chanceSuccess") .. " " .. math.ceil(chanceOfSucess) .. "%"
|
||||
tooltip.description = tooltip.description .. " <LINE> <LINE> <RGB:1,1,1> " .. getText("Tooltip_craft_Needs") .. ": <LINE> "
|
||||
|
||||
if fixing:getGlobalItem() then
|
||||
local globalItem = fixing:haveGlobalItem(player);
|
||||
local uses = fixing:countUses(player, fixing:getGlobalItem(), nil)
|
||||
if globalItem then
|
||||
tooltip.description = tooltip.description .. " <LINE> " .. globalItem:getName() .. " " .. uses .. "/" .. fixing:getGlobalItem():getNumberOfUse() .. " <LINE> "
|
||||
else
|
||||
local globalItem = InventoryItemFactory.CreateItem(fixing:getModule():getName() .. "." .. fixing:getGlobalItem():getFixerName())
|
||||
local name = fixing:getGlobalItem():getFixerName();
|
||||
if globalItem then name = globalItem:getName(); end
|
||||
tooltip.description = tooltip.description .. " <LINE> <RGB:1,0,0> " .. name .. " " .. uses .. "/" .. fixing:getGlobalItem():getNumberOfUse() .. " <LINE> "
|
||||
unavailable = true
|
||||
end
|
||||
end
|
||||
|
||||
local uses = fixing:countUses(player, fixer, item)
|
||||
if uses >= fixer:getNumberOfUse() then
|
||||
color1 = " <RGB:1,1,1> "
|
||||
else
|
||||
color1 = " <RED> "
|
||||
unavailable = true
|
||||
end
|
||||
tooltip.description = tooltip.description .. color1 .. itemName .. " " .. uses .. "/" .. fixer:getNumberOfUse()
|
||||
|
||||
if fixer:getFixerSkills() then
|
||||
local skills = fixer:getFixerSkills()
|
||||
for j=0,skills:size()-1 do
|
||||
local skill = skills:get(j)
|
||||
local perk = Perks.FromString(skill:getSkillName())
|
||||
local perkLvl = player:getPerkLevel(perk)
|
||||
if perkLvl >= skill:getSkillLevel() then
|
||||
color1 = " <RGB:1,1,1> "
|
||||
else
|
||||
color1 = " <RED> "
|
||||
unavailable = true
|
||||
end
|
||||
tooltip.description = tooltip.description .. " <LINE> " .. color1 .. PerkFactory.getPerk(perk):getName() .. " " .. perkLvl .. "/" .. skill:getSkillLevel()
|
||||
end
|
||||
end
|
||||
|
||||
if unavailable then
|
||||
tooltip.description = tooltip.description .. " <LINE> <RED> " .. "**FUCK YOU, ASSHOLE**"
|
||||
end
|
||||
|
||||
return {
|
||||
fixing = fixing,
|
||||
fixer = fixer,
|
||||
item = item,
|
||||
tooltip = tooltip,
|
||||
label = getText("ContextMenu_Repair") .. getItemNameFromFullType(item:getFullType()),
|
||||
texture = tooltip.texture,
|
||||
unavailable = unavailable,
|
||||
mode = 6
|
||||
}
|
||||
end
|
||||
-- spiff.functions = {}
|
||||
-- spiff.functions.FixerStuff = fixerStuff
|
||||
|
||||
function SpiffUIEquipmentRadial:itemOptions(item)
|
||||
if not self.commands[self.page] then
|
||||
self.commands[self.page] = {}
|
||||
else
|
||||
table.wipe(self.commands[self.page])
|
||||
end
|
||||
|
||||
if not item then return end
|
||||
|
||||
-- Get Hotbar
|
||||
local hotbar = getPlayerHotbar(self.player:getPlayerNum())
|
||||
|
||||
-- Add "Inspect"
|
||||
if item:getCategory() == "Clothing" and item:getCoveredParts():size() > 0 then
|
||||
local stuff = {
|
||||
item = item,
|
||||
label = getText("IGUI_invpanel_Inspect"),
|
||||
texture = item:getTexture(),
|
||||
tooltip = item,
|
||||
mode = 0
|
||||
}
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
|
||||
do -- Add "Unequip"
|
||||
local stuff = {
|
||||
item = item,
|
||||
label = getText("ContextMenu_Unequip"),
|
||||
texture = spiff.icons["unequip"],
|
||||
tooltip = item,
|
||||
inHotbar = hotbar:isInHotbar(item) and not self.player:isEquipped(item), -- Trigger a remove from hotbar if item is not equipped
|
||||
mode = 1
|
||||
}
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
|
||||
local loot = getPlayerLoot(self.playerNum)
|
||||
if loot.inventory:getType() ~= "floor" then
|
||||
local stuff = {
|
||||
item = item,
|
||||
label = getText("UI_radial_SpiffUI_Transfer") .. loot.title,
|
||||
texture = ContainerButtonIcons[loot.inventory:getType()],
|
||||
inv = loot.inventory,
|
||||
tooltip = item,
|
||||
mode = 2
|
||||
}
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
|
||||
-- Add "Drop"
|
||||
if spiff.config.equipShowDrop then
|
||||
local stuff = {
|
||||
item = item,
|
||||
label = getText("ContextMenu_Drop"),
|
||||
texture = spiff.icons["drop"],
|
||||
tooltip = item,
|
||||
mode = 3
|
||||
}
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
|
||||
|
||||
-- Add Clothing Items Extra
|
||||
if item.getClothingItemExtraOption and item:getClothingItemExtraOption() and spiff.config.equipShowClothingActions then
|
||||
for i=0,item:getClothingItemExtraOption():size()-1 do
|
||||
local action = item:getClothingItemExtraOption():get(i)
|
||||
local itemType = moduleDotType(item:getModule(), item:getClothingItemExtra():get(i))
|
||||
local stuff = {
|
||||
item = item,
|
||||
itype = itemType,
|
||||
label = getText("ContextMenu_" .. action),
|
||||
texture = InventoryItemFactory.CreateItem(itemType):getTexture(),
|
||||
tooltip = item,
|
||||
mode = 4
|
||||
}
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
end
|
||||
|
||||
--Add Recipes
|
||||
if spiff.config.equipShowRecipes then
|
||||
local recs = RecipeManager.getUniqueRecipeItems(item, self.player, self.packs)
|
||||
for i = 0, recs:size() - 1 do
|
||||
local recipe = recs:get(i)
|
||||
local stuff = {
|
||||
item = item,
|
||||
recipe = recipe,
|
||||
label = recipe:getName(),
|
||||
texture = InventoryItemFactory.CreateItem(recipe:getResult():getFullType()):getTexture(),
|
||||
tooltip = {
|
||||
recipe = recipe,
|
||||
item = item,
|
||||
isRecipe = true
|
||||
},
|
||||
mode = 5
|
||||
}
|
||||
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
end
|
||||
|
||||
-- Add Item Repairs
|
||||
if item:isBroken() or item:getCondition() < item:getConditionMax() then
|
||||
local fixingList = FixingManager.getFixes(item)
|
||||
if not fixingList:isEmpty() then
|
||||
for i=0,fixingList:size()-1 do
|
||||
local fixing = fixingList:get(i)
|
||||
for j=0,fixing:getFixers():size()-1 do
|
||||
local fixer = fixing:getFixers():get(j)
|
||||
local stuff = fixerStuff(item, fixing, fixer, self.player)
|
||||
if stuff.unavailable then
|
||||
if spiff.config.equipShowAllRepairs then
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
else
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Guns!
|
||||
if item.isRanged and item:isRanged() then
|
||||
local stuff = {
|
||||
item = item,
|
||||
label = "Firearm Radial",
|
||||
texture = item:getTexture(),
|
||||
tooltip = item,
|
||||
mode = 7
|
||||
}
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentItemRadialCommand:new(self, stuff))
|
||||
end
|
||||
|
||||
self:show()
|
||||
end
|
||||
|
||||
function SpiffUIEquipmentRadial:accessories()
|
||||
|
||||
if not self.commands[self.page] then
|
||||
self.commands[self.page] = {}
|
||||
else
|
||||
table.wipe(self.commands[self.page])
|
||||
end
|
||||
|
||||
for _,j in ipairs(self.items) do
|
||||
if not clothesSort[j:getBodyLocation()] or clothesSort[j:getBodyLocation()] > 100 then
|
||||
-- Add our items to page 2
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentRadialCommand:new(self, j, 0))
|
||||
end
|
||||
end
|
||||
|
||||
self:show()
|
||||
end
|
||||
|
||||
function SpiffUIEquipmentRadial:hotbar()
|
||||
if not self.commands[self.page] then
|
||||
self.commands[self.page] = {}
|
||||
else
|
||||
table.wipe(self.commands[self.page])
|
||||
end
|
||||
|
||||
local hotbar = getPlayerHotbar(self.playerNum)
|
||||
for i,item in pairs(hotbar.attachedItems) do
|
||||
table.insert(self.commands[self.page], SpiffUIEquipmentRadialCommand:new(self, item, 0))
|
||||
end
|
||||
|
||||
self:show()
|
||||
end
|
||||
|
||||
function SpiffUIEquipmentRadial:build()
|
||||
|
||||
self.packs = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
self.items = getItems(self.packs, self.player)
|
||||
|
||||
self.page = 1
|
||||
self.maxPage = 1
|
||||
|
||||
local haveAccs = false
|
||||
local accTex
|
||||
local hasItems = false
|
||||
if self.items then
|
||||
for _,j in ipairs(self.items) do
|
||||
if clothesSort[j:getBodyLocation()] and clothesSort[j:getBodyLocation()] < 100 then
|
||||
-- Add our items to page 1
|
||||
if not self.commands[1] then
|
||||
self.commands[1] = {}
|
||||
end
|
||||
table.insert(self.commands[1], SpiffUIEquipmentRadialCommand:new(self, j, 0))
|
||||
hasItems = true
|
||||
else
|
||||
haveAccs = true
|
||||
if not accTex then
|
||||
accTex = j:getTexture()
|
||||
end
|
||||
end
|
||||
end
|
||||
if haveAccs then
|
||||
local stuff = {
|
||||
label = getText("UI_radial_SpiffUI_Accessories"),
|
||||
texture = accTex
|
||||
}
|
||||
table.insert(self.commands[1], SpiffUIEquipmentRadialCommand:new(self, stuff, 1))
|
||||
hasItems = true
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local hotbar = getPlayerHotbar(self.playerNum)
|
||||
for _,item in pairs(hotbar.attachedItems) do
|
||||
if item then
|
||||
local stuff = {
|
||||
label = getText("UI_radial_SpiffUI_Hotbar"),
|
||||
texture = item:getTexture()
|
||||
}
|
||||
table.insert(self.commands[1], SpiffUIEquipmentRadialCommand:new(self, stuff, 2))
|
||||
hasItems = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not hasItems then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noEquip"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIEquipmentRadial:new(player)
|
||||
local o = spiff.radialmenu.new(self, player)
|
||||
-- If we end up back at page 1, then we're at the main menu
|
||||
o.pageReset = true
|
||||
return o
|
||||
end
|
||||
|
||||
local function EquipDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- If showNow and we're doing an action, do it now
|
||||
if not SpiffUI.action.ready then
|
||||
if getPlayerInventory(0):getIsVisible() then
|
||||
if SpiffUI["inventory"] then
|
||||
ISInventoryPage.SpiffOnKey(player)
|
||||
else
|
||||
getPlayerInventory(0):setVisible(false)
|
||||
getPlayerLoot(0):setVisible(false)
|
||||
end
|
||||
SpiffUI.action.wasVisible = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function EquipHold(player)
|
||||
if SpiffUI.holdTime() then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIEquipmentRadial:new(player)
|
||||
menu:display()
|
||||
end
|
||||
end
|
||||
|
||||
local function EquipRelease(player)
|
||||
if SpiffUI.releaseTime() then
|
||||
if not SpiffUI.action.wasVisible then
|
||||
if SpiffUI["inventory"] then
|
||||
ISInventoryPage.SpiffOnKey(player)
|
||||
else
|
||||
local toggle = getPlayerInventory(0):getIsVisible()
|
||||
getPlayerInventory(0):setVisible(not toggle)
|
||||
getPlayerLoot(0):setVisible(not toggle)
|
||||
end
|
||||
end
|
||||
SpiffUI.action.wasVisible = false
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIEquipmentWheel',
|
||||
key = Keyboard.KEY_TAB,
|
||||
queue = false,
|
||||
Down = EquipDown,
|
||||
Hold = EquipHold,
|
||||
Up = EquipRelease
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,130 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI First Aid Craft Actions
|
||||
---- Radial Menu for First Aid Crafting
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIFirstAidCraftRadial = spiff.radialmenu:derive("SpiffUIFirstAidCraftRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[4] = SpiffUIFirstAidCraftRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIFirstAidCraftRadialCommand = spiff.radialcommand:derive("SpiffUIFirstAidCraftRadialCommand")
|
||||
|
||||
function SpiffUIFirstAidCraftRadialCommand:Action()
|
||||
ISInventoryPaneContextMenu.OnCraft(self.item, self.recipe, self.player:getPlayerNum(), self.amount)
|
||||
end
|
||||
|
||||
function SpiffUIFirstAidCraftRadialCommand:new(menu, recipe)
|
||||
local texture = InventoryItemFactory.CreateItem(recipe.recipe:getResult():getFullType()):getTexture()
|
||||
|
||||
local tooltip = {
|
||||
recipe = recipe.recipe,
|
||||
item = recipe.item,
|
||||
isRecipe = true
|
||||
}
|
||||
|
||||
local o = spiff.radialcommand.new(self, menu, recipe.recipe:getName(), texture, tooltip)
|
||||
|
||||
o.recipe = recipe.recipe
|
||||
o.item = recipe.item
|
||||
|
||||
o.amount = false
|
||||
|
||||
-- If we should and and we can make more than 1
|
||||
if spiff.config.firstAidCraftAmount == -1 and recipe.num > 1 then
|
||||
-- Ask
|
||||
o.shouldAsk = 2
|
||||
elseif spiff.config.firstAidCraftAmount == 1 then
|
||||
-- Craft All
|
||||
o.amount = true
|
||||
end
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
local function getRecipes(packs, player)
|
||||
local items = {}
|
||||
local recipes = {}
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return spiff.filters.firstAidCraft[item:getType()] or item:getStringItemType() == "Medical"
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
if item then
|
||||
if not items[item:getType()] then
|
||||
items[item:getType()] = item
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for _,item in pairs(items) do
|
||||
local recs = RecipeManager.getUniqueRecipeItems(item, player, packs)
|
||||
for i = 0, recs:size() - 1 do
|
||||
local recipe = recs:get(i)
|
||||
local key = recipe:getResult():getFullType()
|
||||
recipes[key] = {
|
||||
recipe = recipe,
|
||||
num = RecipeManager.getNumberOfTimesRecipeCanBeDone(recipe, player, packs, item),
|
||||
item = item
|
||||
}
|
||||
end
|
||||
end
|
||||
return recipes
|
||||
end
|
||||
|
||||
function SpiffUIFirstAidCraftRadial:build()
|
||||
local recipes = {}
|
||||
|
||||
local bags = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local recipes = getRecipes(bags, self.player)
|
||||
|
||||
local hasCraft = false
|
||||
-- Build Smokeables
|
||||
for i,j in pairs(recipes) do
|
||||
self:AddCommand(SpiffUIFirstAidCraftRadialCommand:new(self, j))
|
||||
hasCraft = true
|
||||
end
|
||||
|
||||
if not hasCraft then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noCraft"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIFirstAidCraftRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function FirstAidCraftDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- if we're not ready, then we're doing an action.
|
||||
---- do it now
|
||||
if not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIFirstAidCraftRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIFirstAidCraftWheel',
|
||||
key = 39, -- ;
|
||||
queue = true,
|
||||
Down = FirstAidCraftDown
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,121 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI First Aid Craft Actions
|
||||
---- Radial Menu for First Aid Crafting
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIOneRadial = spiff.radialmenu:derive("SpiffUIOneRadial")
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIOneRadialCommand = spiff.radialcommand:derive("SpiffUIOneRadialCommand")
|
||||
|
||||
function SpiffUIOneRadialCommand:Action()
|
||||
local radial = spiff.radials[self.mode]
|
||||
if radial then
|
||||
local menu = radial:new(self.player)
|
||||
menu:display()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function SpiffUIOneRadialCommand:new(menu, name, texture, mode)
|
||||
local o = spiff.radialcommand.new(self, menu, name, texture, nil)
|
||||
o.mode = mode
|
||||
return o
|
||||
end
|
||||
|
||||
function SpiffUIOneRadial:build()
|
||||
-- Crafting
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Crafting",getTexture("media/SpiffUI/crafting.png"), 0))
|
||||
-- Drink
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Drink", InventoryItemFactory.CreateItem("Base.WaterBottleFull"):getTexture(), 1))
|
||||
-- Eat
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Eat", InventoryItemFactory.CreateItem("Base.ChickenFried"):getTexture(), 2))
|
||||
-- Equipment
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Equipment", getTexture("media/SpiffUI/inventory.png"), 3))
|
||||
-- First Aid Craft
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "First Aid Craft", InventoryItemFactory.CreateItem("Base.Bandage"):getTexture(), 4))
|
||||
-- Pills
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Pills", InventoryItemFactory.CreateItem("Base.PillsAntiDep"):getTexture(), 5))
|
||||
-- Repair
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Repair",InventoryItemFactory.CreateItem("Base.Hammer"):getTexture(), 6))
|
||||
-- Smoke Craft
|
||||
if getActivatedMods():contains('jiggasGreenfireMod') then
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("Greenfire.SmokingPipe"):getTexture(), 7))
|
||||
elseif getActivatedMods():contains('Smoker') then
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("SM.SMSmokingBlend"):getTexture(), 7))
|
||||
elseif getActivatedMods():contains('MoreCigsMod') then
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("Cigs.CigsOpenPackReg"):getTexture(), 7))
|
||||
else
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke Craft", InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture(), 7))
|
||||
end
|
||||
-- Smoke
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Smoke",InventoryItemFactory.CreateItem("Base.Cigarettes"):getTexture(), 8))
|
||||
if spiff.radials[9] then
|
||||
self:AddCommand(SpiffUIOneRadialCommand:new(self, "Clothing Action Radial Menu",InventoryItemFactory.CreateItem("Base.Hat_BaseballCapGreen"):getTexture(), 9))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIOneRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function OneDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- if we're not ready, then we're doing an action.
|
||||
---- do it now
|
||||
if not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIOneRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
--- For the DPad
|
||||
local function showRadialMenu(player)
|
||||
if UIManager.getSpeedControls() and (UIManager.getSpeedControls():getCurrentGameSpeed() == 0) then
|
||||
return
|
||||
end
|
||||
|
||||
if not player or player:isDead() then
|
||||
return
|
||||
end
|
||||
local queue = ISTimedActionQueue.queues[player]
|
||||
if queue and #queue.queue > 0 then
|
||||
return false
|
||||
end
|
||||
|
||||
local menu = SpiffUIOneRadial:new(player)
|
||||
menu:display()
|
||||
end
|
||||
|
||||
---- Show the Radial Menu on the Up DPad when there's not a car around
|
||||
local _ISDPadWheels_onDisplayUp = ISDPadWheels.onDisplayUp
|
||||
function ISDPadWheels.onDisplayUp(joypadData)
|
||||
local player = getSpecificPlayer(joypadData.player)
|
||||
if not player:getVehicle() and not ISVehicleMenu.getVehicleToInteractWith(player) then
|
||||
showRadialMenu(player)
|
||||
else
|
||||
_ISDPadWheels_onDisplayUp(joypadData)
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIOneWheel',
|
||||
key = Keyboard.KEY_CAPITAL, -- ;
|
||||
queue = true,
|
||||
Down = OneDown
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,212 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Pills Actions
|
||||
---- Radial Menu for pills
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIPillsRadial = spiff.radialmenu:derive("SpiffUIPillsRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[5] = SpiffUIPillsRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIPillsRadialCommand = spiff.radialcommand:derive("SpiffUIPillsRadialCommand")
|
||||
|
||||
local function takePill(item, player)
|
||||
ISInventoryPaneContextMenu.takePill(item, player:getPlayerNum())
|
||||
|
||||
-- Return from whence it came...
|
||||
if item:getContainer() ~= player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, player:getInventory(), item:getContainer()))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIPillsRadialCommand:Action()
|
||||
takePill(self.item, self.player)
|
||||
end
|
||||
|
||||
function SpiffUIPillsRadialCommand:new(menu, item)
|
||||
local o = spiff.radialcommand.new(self, menu, item:getName(), item:getTexture(), item)
|
||||
|
||||
o.item = item
|
||||
return o
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local function getItems(packs, pills)
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return luautils.stringStarts(item:getType(), "Pills") or item:getType() == "Antibiotics" -- special case
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local pill = ps:get(i)
|
||||
if pill then
|
||||
-- If not found or has less pills
|
||||
if not pills[pill:getType()] or pills[pill:getType()]:getUsedDelta() > pill:getUsedDelta() then
|
||||
pills[pill:getType()] = pill
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return pills
|
||||
end
|
||||
|
||||
function SpiffUIPillsRadial:build()
|
||||
local pills = {}
|
||||
|
||||
local packs = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
pills = getItems(packs, pills)
|
||||
|
||||
local hasPills = false
|
||||
-- Build
|
||||
for i,j in pairs(pills) do
|
||||
self:AddCommand(SpiffUIPillsRadialCommand:new(self, j))
|
||||
hasPills = true
|
||||
end
|
||||
if not hasPills then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noPills"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIPillsRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
------------------------------------------
|
||||
|
||||
local function getPillsQuick(player, ptype)
|
||||
return player:getInventory():getFirstEvalRecurse(function(item)
|
||||
return item:getType() == ptype
|
||||
end)
|
||||
end
|
||||
|
||||
local function takePills(items, player)
|
||||
-- First we'll take all our pills
|
||||
for _,item in ipairs(items) do
|
||||
ISInventoryPaneContextMenu.takePill(item, player:getPlayerNum())
|
||||
end
|
||||
|
||||
-- Then we send them back
|
||||
for _,item in ipairs(items) do
|
||||
if item:getContainer() ~= player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, player:getInventory(), item:getContainer()))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function quickPills(player)
|
||||
local tried = ""
|
||||
local pills = nil
|
||||
if player:getMoodles():getMoodleLevel(MoodleType.Pain) >= 1 then
|
||||
tried = getItemNameFromFullType("Base.Pills")
|
||||
-- Take Painpills
|
||||
local pill = getPillsQuick(player, "Pills")
|
||||
if pill then
|
||||
--print("Pain Pills")
|
||||
if not pills then pills = {} end
|
||||
table.insert(pills, pill)
|
||||
end
|
||||
end
|
||||
if player:getMoodles():getMoodleLevel(MoodleType.Tired) >= 1 then
|
||||
local name = getItemNameFromFullType("Base.PillsVitamins")
|
||||
if tried ~= "" then
|
||||
tried = tried .. ", " .. name
|
||||
else
|
||||
tried = name
|
||||
end
|
||||
-- Take Vitamins
|
||||
local pill = getPillsQuick(player, "PillsVitamins")
|
||||
if pill then
|
||||
--print("Vitamins")
|
||||
if not pills then pills = {} end
|
||||
table.insert(pills, pill)
|
||||
end
|
||||
end
|
||||
if player:getMoodles():getMoodleLevel(MoodleType.Panic) >= 1 then
|
||||
local name = getItemNameFromFullType("Base.PillsBeta")
|
||||
if tried ~= "" then
|
||||
tried = tried .. ", " .. name
|
||||
else
|
||||
tried = name
|
||||
end
|
||||
-- Take Beta Blockers
|
||||
local pill = getPillsQuick(player, "PillsBeta")
|
||||
if pill then
|
||||
--print("Beta Blockers")
|
||||
if not pills then pills = {} end
|
||||
table.insert(pills, pill)
|
||||
end
|
||||
end
|
||||
if player:getMoodles():getMoodleLevel(MoodleType.Unhappy) >= 1 then
|
||||
local name = getItemNameFromFullType("Base.PillsAntiDep")
|
||||
if tried ~= "" then
|
||||
tried = tried .. ", " .. name
|
||||
else
|
||||
tried = name
|
||||
end
|
||||
-- Take Antidepressents
|
||||
local pill = getPillsQuick(player, "PillsAntiDep")
|
||||
if pill then
|
||||
--print("Antidepressents")
|
||||
if not pills then pills = {} end
|
||||
table.insert(pills, pill)
|
||||
end
|
||||
end
|
||||
|
||||
if tried ~= "" then
|
||||
if not pills then
|
||||
player:Say(getText("UI_character_SpiffUI_noPillsQuick") .. tried)
|
||||
else
|
||||
takePills(pills, player)
|
||||
end
|
||||
else
|
||||
player:Say(getText("UI_character_SpiffUI_noPillsNeed"))
|
||||
end
|
||||
end
|
||||
|
||||
local function PillsDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- If showNow and we're doing an action, do it now
|
||||
if spiff.config.pillsShowNow and not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIPillsRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function PillsHold(player)
|
||||
if SpiffUI.holdTime() then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIPillsRadial:new(player)
|
||||
menu:display()
|
||||
end
|
||||
end
|
||||
|
||||
local function PillsRelease(player)
|
||||
if SpiffUI.releaseTime() then
|
||||
quickPills(player)
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIPillWheel',
|
||||
key = 40, -- '
|
||||
queue = true,
|
||||
Down = PillsDown,
|
||||
Hold = PillsHold,
|
||||
Up = PillsRelease
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,234 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Repair Actions
|
||||
---- Radial Menu for Repair
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUIRepairRadial = spiff.radialmenu:derive("SpiffUIRepairRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[6] = SpiffUIRepairRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUIRepairRadialCommand = spiff.radialcommand:derive("SpiffUIRepairRadialCommand")
|
||||
|
||||
local function returnItems(items, player)
|
||||
for i=0,items:size() - 1 do
|
||||
local item = items:get(i)
|
||||
if item:getContainer() ~= player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(player, item, player:getInventory(), item:getContainer()))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIRepairRadialCommand:Action()
|
||||
local items = self.item.fixing:getRequiredItems(self.player, self.item.fixer, self.item.item)
|
||||
ISInventoryPaneContextMenu.onFix(self.item.item, self.playerNum, self.item.fixing, self.item.fixer)
|
||||
returnItems(items, self.player)
|
||||
end
|
||||
|
||||
function SpiffUIRepairRadialCommand:new(menu, stuff)
|
||||
local o = spiff.radialcommand.new(self, menu, stuff.label, stuff.item:getTexture(), stuff.tooltip)
|
||||
o.item = stuff
|
||||
o.forceText = true
|
||||
return o
|
||||
end
|
||||
|
||||
-- This is mostly a combination function that reimplements 'ISInventoryPaneContextMenu.addFixerSubOption'
|
||||
---- The tooltip is used in our radial override tooltip
|
||||
---- returns a "stuff" table that is used to build a radial command
|
||||
local function fixerStuff(item, fixing, fixer, player)
|
||||
local unavailable = false
|
||||
local tooltip = {
|
||||
description = "",
|
||||
texture = item:getTex(),
|
||||
name = item:getName(),
|
||||
isFix = true
|
||||
}
|
||||
local fixerItem = fixing:haveThisFixer(player, fixer, item)
|
||||
|
||||
local usedItem = InventoryItemFactory.CreateItem(fixing:getModule():getName() .. "." .. fixer:getFixerName())
|
||||
local itemName
|
||||
if usedItem then
|
||||
tooltip.texture = usedItem:getTex()
|
||||
itemName = getItemNameFromFullType(usedItem:getFullType())
|
||||
else
|
||||
itemName = fixer:getFixerName()
|
||||
end
|
||||
tooltip.name = itemName
|
||||
|
||||
local condPercentRepaired = FixingManager.getCondRepaired(item, player, fixing, fixer)
|
||||
local color1 = "<RED>";
|
||||
if condPercentRepaired > 15 and condPercentRepaired <= 25 then
|
||||
color1 = "<ORANGE>";
|
||||
elseif condPercentRepaired > 25 then
|
||||
color1 = "<GREEN>";
|
||||
end
|
||||
|
||||
local chanceOfSucess = 100 - FixingManager.getChanceOfFail(item, player, fixing, fixer)
|
||||
local color2 = "<RED>";
|
||||
if chanceOfSucess > 15 and chanceOfSucess <= 40 then
|
||||
color2 = "<ORANGE>";
|
||||
elseif chanceOfSucess > 40 then
|
||||
color2 = "<GREEN>";
|
||||
end
|
||||
|
||||
tooltip.description = " " .. color1 .. " " .. getText("Tooltip_potentialRepair") .. " " .. math.ceil(condPercentRepaired) .. "%"
|
||||
tooltip.description = tooltip.description .. " <LINE> " .. color2 .. " " .. getText("Tooltip_chanceSuccess") .. " " .. math.ceil(chanceOfSucess) .. "%"
|
||||
tooltip.description = tooltip.description .. " <LINE> <LINE> <RGB:1,1,1> " .. getText("Tooltip_craft_Needs") .. ": <LINE> "
|
||||
|
||||
if fixing:getGlobalItem() then
|
||||
local globalItem = fixing:haveGlobalItem(player);
|
||||
local uses = fixing:countUses(player, fixing:getGlobalItem(), nil)
|
||||
if globalItem then
|
||||
tooltip.description = tooltip.description .. " <LINE> " .. globalItem:getName() .. " " .. uses .. "/" .. fixing:getGlobalItem():getNumberOfUse() .. " <LINE> "
|
||||
else
|
||||
local globalItem = InventoryItemFactory.CreateItem(fixing:getModule():getName() .. "." .. fixing:getGlobalItem():getFixerName())
|
||||
local name = fixing:getGlobalItem():getFixerName();
|
||||
if globalItem then name = globalItem:getName(); end
|
||||
tooltip.description = tooltip.description .. " <LINE> <RGB:1,0,0> " .. name .. " " .. uses .. "/" .. fixing:getGlobalItem():getNumberOfUse() .. " <LINE> "
|
||||
unavailable = true
|
||||
end
|
||||
end
|
||||
|
||||
local uses = fixing:countUses(player, fixer, item)
|
||||
if uses >= fixer:getNumberOfUse() then
|
||||
color1 = " <RGB:1,1,1> "
|
||||
else
|
||||
color1 = " <RED> "
|
||||
unavailable = true
|
||||
end
|
||||
tooltip.description = tooltip.description .. color1 .. itemName .. " " .. uses .. "/" .. fixer:getNumberOfUse()
|
||||
|
||||
if fixer:getFixerSkills() then
|
||||
local skills = fixer:getFixerSkills()
|
||||
for j=0,skills:size()-1 do
|
||||
local skill = skills:get(j)
|
||||
local perk = Perks.FromString(skill:getSkillName())
|
||||
local perkLvl = player:getPerkLevel(perk)
|
||||
if perkLvl >= skill:getSkillLevel() then
|
||||
color1 = " <RGB:1,1,1> "
|
||||
else
|
||||
color1 = " <RED> "
|
||||
unavailable = true
|
||||
end
|
||||
tooltip.description = tooltip.description .. " <LINE> " .. color1 .. PerkFactory.getPerk(perk):getName() .. " " .. perkLvl .. "/" .. skill:getSkillLevel()
|
||||
end
|
||||
end
|
||||
|
||||
if unavailable then
|
||||
tooltip.description = tooltip.description .. " <LINE> <RED> " .. "**FUCK YOU, ASSHOLE**"
|
||||
end
|
||||
|
||||
return {
|
||||
fixing = fixing,
|
||||
fixer = fixer,
|
||||
item = item,
|
||||
tooltip = tooltip,
|
||||
label = getText("ContextMenu_Repair") .. getItemNameFromFullType(item:getFullType()),
|
||||
texture = tooltip.texture,
|
||||
unavailable = unavailable,
|
||||
mode = 5
|
||||
}
|
||||
end
|
||||
|
||||
local function getItems(packs, player)
|
||||
local items = {}
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return item:isBroken() or item:getCondition() < item:getConditionMax()
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
if item then
|
||||
items[i] = item
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not spiff.config.repairShowEquipped then
|
||||
for i,item in pairs(items) do
|
||||
if player:isEquipped(item) then
|
||||
items[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not spiff.config.repairShowHotbar then
|
||||
local hotbar = getPlayerHotbar(player:getPlayerNum())
|
||||
for i,item in pairs(items) do
|
||||
if hotbar:isInHotbar(item) then
|
||||
items[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local repairs = nil
|
||||
local count = 0
|
||||
for _,item in pairs(items) do
|
||||
local fixingList = FixingManager.getFixes(item)
|
||||
if not fixingList:isEmpty() then
|
||||
for i=0,fixingList:size()-1 do
|
||||
local fixing = fixingList:get(i)
|
||||
for j=0,fixing:getFixers():size()-1 do
|
||||
local fixer = fixing:getFixers():get(j)
|
||||
local stuff = fixerStuff(item, fixing, fixer, player)
|
||||
if not stuff.unavailable then
|
||||
if not repairs then repairs = {} end
|
||||
table.insert(repairs, stuff)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return repairs
|
||||
end
|
||||
|
||||
function SpiffUIRepairRadial:build()
|
||||
|
||||
local packs = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local items = getItems(packs, self.player)
|
||||
|
||||
-- Build
|
||||
if items then
|
||||
for _,stuff in ipairs(items) do
|
||||
self:AddCommand(SpiffUIRepairRadialCommand:new(self, stuff))
|
||||
end
|
||||
else
|
||||
self.player:Say(getText("UI_character_SpiffUI_noRepair"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUIRepairRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function RepairDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- If showNow and we're doing an action, do it now
|
||||
if not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUIRepairRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUIRepairWheel',
|
||||
key = Keyboard.KEY_N,
|
||||
queue = true,
|
||||
Down = RepairDown
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,168 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Smoke Actions
|
||||
---- Radial Menu for drinks
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUISmokeCraftRadial = spiff.radialmenu:derive("SpiffUISmokeCraftRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[7] = SpiffUISmokeCraftRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUISmokeCraftRadialCommand = spiff.radialcommand:derive("SpiffUISmokeCraftRadialCommand")
|
||||
|
||||
function SpiffUISmokeCraftRadialCommand:Action()
|
||||
ISInventoryPaneContextMenu.OnCraft(self.item, self.recipe, self.player:getPlayerNum(), self.amount)
|
||||
end
|
||||
|
||||
function SpiffUISmokeCraftRadialCommand:new(menu, recipe)
|
||||
local texture = InventoryItemFactory.CreateItem(recipe.recipe:getResult():getFullType()):getTexture()
|
||||
|
||||
local tooltip = {
|
||||
recipe = recipe.recipe,
|
||||
item = recipe.item,
|
||||
isRecipe = true
|
||||
}
|
||||
|
||||
local o = spiff.radialcommand.new(self, menu, recipe.recipe:getName(), texture, tooltip)
|
||||
|
||||
o.recipe = recipe.recipe
|
||||
o.item = recipe.item
|
||||
|
||||
o.amount = false
|
||||
|
||||
-- If we should and and we can make more than 1
|
||||
if spiff.config.smokeCraftAmount == -1 and recipe.num > 1 then
|
||||
-- Ask
|
||||
o.shouldAsk = 2
|
||||
elseif spiff.config.smokeCraftAmount == 1 then
|
||||
-- Craft All
|
||||
o.amount = true
|
||||
end
|
||||
|
||||
return o
|
||||
end
|
||||
|
||||
local function getRecipes(packs, player)
|
||||
local items = {}
|
||||
local recipes = {}
|
||||
-- This will get cigs, or
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
return (spiff.filters.smokecraft[item:getType()] ~= nil or item:getCustomMenuOption() == "Smoke")
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
if item then
|
||||
if not items[item:getType()] then
|
||||
items[item:getType()] = {
|
||||
item = item,
|
||||
cat = spiff.filters.smokecraft[item:getType()] or "misc"
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local count = 0
|
||||
for _,item in pairs(items) do
|
||||
local recs = RecipeManager.getUniqueRecipeItems(item.item, player, packs)
|
||||
for i = 0, recs:size() - 1 do
|
||||
local recipe = recs:get(i)
|
||||
if item.cat == "misc" and item.item:getStressChange() > -0.01 then
|
||||
item.cat = "butts"
|
||||
end
|
||||
recipes[count] = {
|
||||
recipe = recipe,
|
||||
num = RecipeManager.getNumberOfTimesRecipeCanBeDone(recipe, player, packs, item.item),
|
||||
item = item.item,
|
||||
cat = item.cat
|
||||
}
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
return recipes
|
||||
end
|
||||
|
||||
|
||||
function SpiffUISmokeCraftRadial:build()
|
||||
local recipes = {}
|
||||
|
||||
local bags = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local recipes = getRecipes(bags, self.player)
|
||||
|
||||
-- Remove any breaking actions if applicable
|
||||
if not spiff.config.smokeCraftShowDismantle then
|
||||
for i,recipe in pairs(recipes) do
|
||||
local first = luautils.split(recipe.recipe:getName(), " ")[1]
|
||||
if spiff.rFilters.smokecraft.dismantle[first] then
|
||||
recipes[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Remove any cigpack actions if applicable
|
||||
if not spiff.config.smokeCraftShowCigPacks then
|
||||
for i,recipe in pairs(recipes) do
|
||||
local first = luautils.split(recipe.recipe:getName(), " ")[1]
|
||||
if spiff.rFilters.smokecraft.cigpacks[first] then
|
||||
recipes[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Always remove these ones
|
||||
for i,recipe in pairs(recipes) do
|
||||
local first = luautils.split(recipe.recipe:getName(), " ")[1]
|
||||
if spiff.rFilters.smokecraft.always[first] then
|
||||
recipes[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local hasCraft = false
|
||||
-- Build Smokeables
|
||||
for i,j in pairs(recipes) do
|
||||
self:AddCommand(SpiffUISmokeCraftRadialCommand:new(self, j))
|
||||
hasCraft = true
|
||||
end
|
||||
|
||||
if not hasCraft then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noCraft"))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUISmokeCraftRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function SmokeCraftDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- if we're not ready, then we're doing an action.
|
||||
---- do it now
|
||||
if not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUISmokeCraftRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUISmokeCraftWheel',
|
||||
key = 43, -- \
|
||||
queue = true,
|
||||
Down = SmokeCraftDown
|
||||
}
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,263 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Smoke Radial
|
||||
---- Radial Menu for smoking
|
||||
------------------------------------------
|
||||
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our Radials
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local SpiffUISmokeRadial = spiff.radialmenu:derive("SpiffUISmokeRadial")
|
||||
if not spiff.radials then spiff.radials = {} end
|
||||
spiff.radials[8] = SpiffUISmokeRadial
|
||||
------------------------------------------
|
||||
|
||||
local SpiffUISmokeRadialCommand = spiff.radialcommand:derive("SpiffUISmokeRadialCommand")
|
||||
|
||||
local function doSmokePack(pack, category, nextItem, player)
|
||||
-- Smoking a pack requires AutoSmoke.
|
||||
---- AutoSmoke already has support for various mods out there, and is very popular
|
||||
---- All Credit to NoctisFalco for the original AutoSmoke code
|
||||
if not AutoSmoke then return end
|
||||
AutoSmoke.currentAction = AutoSmoke.activeMod.unpackAction(player, pack, pack:getContainer(), nextItem,
|
||||
AutoSmoke.activeMod.actions[category].time, AutoSmoke.activeMod.actions[category].jobType, AutoSmoke.activeMod.actions[category].sound)
|
||||
|
||||
ISInventoryPaneContextMenu.transferIfNeeded(player, pack)
|
||||
ISTimedActionQueue.add(AutoSmoke.currentAction)
|
||||
end
|
||||
|
||||
function SpiffUISmokeRadialCommand:Action()
|
||||
local lighterInv
|
||||
-- let AutoSmoke handle the inventory for the lighter
|
||||
---- It seems to break it otherwise
|
||||
if not AutoSmoke then
|
||||
-- First we handle the lighter
|
||||
lighterInv = self.lighter:getContainer()
|
||||
ISInventoryPaneContextMenu.transferIfNeeded(self.player, self.lighter)
|
||||
end
|
||||
|
||||
-- If we have a "nextitem" its from a pack of something
|
||||
if self.item.next then
|
||||
doSmokePack(self.item.item, self.item.category, self.item.next, self.player)
|
||||
else
|
||||
ISInventoryPaneContextMenu.eatItem(self.item.item, 1, self.playerNum)
|
||||
end
|
||||
|
||||
-- Return lighter whence it came if needed!
|
||||
if lighterInv and lighterInv ~= self.player:getInventory() then
|
||||
ISTimedActionQueue.add(ISInventoryTransferAction:new(self.player, self.lighter, self.player:getInventory(), lighterInv))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUISmokeRadialCommand:new(menu, item, lighter)
|
||||
local o = spiff.radialcommand.new(self, menu, item.item:getName(), item.item:getTexture(), item.item)
|
||||
|
||||
o.item = item
|
||||
o.lighter = lighter
|
||||
return o
|
||||
end
|
||||
|
||||
local function getNext(item)
|
||||
for i,_ in pairs(spiff.filters.smoke) do
|
||||
local out = spiff.filters.smoke[i][item]
|
||||
if out then
|
||||
return out
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local function getCat(item)
|
||||
for i,_ in pairs(spiff.filters.smoke) do
|
||||
local out = spiff.filters.smoke[i][item]
|
||||
if out then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return "misc"
|
||||
end
|
||||
|
||||
local function findRecursive(item)
|
||||
local found = false
|
||||
local out
|
||||
local i = 0
|
||||
repeat
|
||||
local iS = luautils.split(item, ".")[2]
|
||||
if iS then
|
||||
item = iS
|
||||
end
|
||||
local t = getNext(item)
|
||||
if t and t ~= "" then
|
||||
if not out then out = {} end
|
||||
out[i] = t
|
||||
i = i + 1
|
||||
item = t
|
||||
else
|
||||
found = true
|
||||
end
|
||||
until(found)
|
||||
|
||||
return out
|
||||
end
|
||||
|
||||
local function checkFilters(item)
|
||||
if not AutoSmoke then return false end
|
||||
for i,_ in pairs(spiff.filters.smoke) do
|
||||
if spiff.filters.smoke[i][item] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function getItems(packs, lighter)
|
||||
local items = {}
|
||||
|
||||
-- This will get any smokeables
|
||||
for p = 0, packs:size() - 1 do
|
||||
local pack = packs:get(p)
|
||||
local ps = pack:getAllEval(function(item)
|
||||
-- Our Filter is only active if AutoSmoke is enabled
|
||||
return (checkFilters(item:getType()) or item:getCustomMenuOption() == "Smoke")
|
||||
end)
|
||||
if ps and ps:size() > 0 then
|
||||
for i = 0, ps:size() - 1 do
|
||||
local item = ps:get(i)
|
||||
local stuff = {
|
||||
item = item,
|
||||
category = getCat(item:getType()),
|
||||
next = nil,
|
||||
nexti = nil
|
||||
}
|
||||
local nexti = findRecursive(item:getType())
|
||||
if nexti then
|
||||
stuff.nexti = nexti
|
||||
stuff.next = nexti[0]
|
||||
end
|
||||
|
||||
local addItem = false
|
||||
if item then
|
||||
if spiff.rFilters.smoke.butts[item:getType()] then
|
||||
if spiff.config.smokeShowButts then
|
||||
addItem = true
|
||||
end
|
||||
elseif spiff.rFilters.smoke.gum[item:getType()] then
|
||||
if spiff.config.smokeShowGum then
|
||||
addItem = true
|
||||
end
|
||||
else
|
||||
-- Everything else
|
||||
addItem = true
|
||||
end
|
||||
if addItem and lighter then
|
||||
items[item:getFullType()] = stuff
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Only keep the most relevant. Cigs > Open Pack > Closed Pack > Carton | Gum > Gum Pack > Gum Carton
|
||||
for i,j in pairs(items) do
|
||||
if j.nexti then
|
||||
for _,m in pairs(j.nexti) do
|
||||
if items[m] then
|
||||
items[i] = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return items
|
||||
end
|
||||
|
||||
local function getLighter(pack)
|
||||
return pack:getFirstEvalRecurse(function(item)
|
||||
return (item:getType() == "Matches") or (item:getType() == "Lighter" and item:getUsedDelta() > 0)
|
||||
end)
|
||||
end
|
||||
|
||||
function SpiffUISmokeRadial:build()
|
||||
-- A lighter is required to be on you
|
||||
local lighter = getLighter(self.player:getInventory())
|
||||
|
||||
local bags = ISInventoryPaneContextMenu.getContainers(self.player)
|
||||
local items = getItems(bags, lighter)
|
||||
|
||||
local haveItems = false
|
||||
|
||||
for i,_ in pairs(items) do
|
||||
haveItems = true
|
||||
break
|
||||
end
|
||||
|
||||
-- We may still have gum!
|
||||
if not haveItems then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noSmokes"))
|
||||
return
|
||||
end
|
||||
if not haveItems and not lighter then
|
||||
self.player:Say(getText("UI_character_SpiffUI_noLighter"))
|
||||
return
|
||||
end
|
||||
|
||||
-- Build Smokeables
|
||||
for _,j in pairs(items) do
|
||||
self:AddCommand(SpiffUISmokeRadialCommand:new(self, j, lighter))
|
||||
end
|
||||
end
|
||||
|
||||
function SpiffUISmokeRadial:new(player)
|
||||
return spiff.radialmenu.new(self, player)
|
||||
end
|
||||
|
||||
local function SmokeDown(player)
|
||||
SpiffUI.onKeyDown(player)
|
||||
-- If showNow and we're doing an action, do it now
|
||||
if spiff.config.smokeShowNow and not SpiffUI.action.ready then
|
||||
-- Create Menu
|
||||
local menu = SpiffUISmokeRadial:new(player)
|
||||
menu:display()
|
||||
-- Ready for another action
|
||||
SpiffUI.action.ready = true
|
||||
end
|
||||
end
|
||||
|
||||
local function SmokeHold(player)
|
||||
if SpiffUI.holdTime() then
|
||||
-- Create Menu
|
||||
local menu = SpiffUISmokeRadial:new(player)
|
||||
menu:display()
|
||||
end
|
||||
end
|
||||
|
||||
local function SmokeRelease(player)
|
||||
if SpiffUI.releaseTime() then
|
||||
-- We do the AutoSmoke Stuff if we don't do the radial
|
||||
---- From AutoSmoke
|
||||
if AutoSmoke and AutoSmoke.player then
|
||||
if AutoSmoke.Options.characterSpeaks then
|
||||
AutoSmoke.pressedKey = true
|
||||
end
|
||||
AutoSmoke:checkInventory()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function actionInit()
|
||||
local bind = {
|
||||
name = 'SpiffUISmokeWheel',
|
||||
key = Keyboard.KEY_BACK,
|
||||
queue = true,
|
||||
Down = SmokeDown,
|
||||
Hold = SmokeHold,
|
||||
Up = SmokeRelease
|
||||
}
|
||||
|
||||
SpiffUI:AddKeyBind(bind)
|
||||
end
|
||||
|
||||
actionInit()
|
||||
@@ -0,0 +1,599 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Radials Module
|
||||
------------------------------------------
|
||||
SpiffUI = SpiffUI or {}
|
||||
|
||||
-- Register our inventory
|
||||
local spiff = SpiffUI:Register("radials")
|
||||
|
||||
local rOptions = {
|
||||
consume = {
|
||||
[1] = 1,
|
||||
[2] = 0.5,
|
||||
[3] = 0.25,
|
||||
[4] = 0,
|
||||
[5] = -1
|
||||
},
|
||||
craft = {
|
||||
[1] = 0,
|
||||
[2] = 1,
|
||||
[3] = -1
|
||||
}
|
||||
}
|
||||
|
||||
------------------------------------------
|
||||
-- Add functions
|
||||
---- Used later
|
||||
------------------------------------------
|
||||
spiff.functions = {}
|
||||
|
||||
------------------------------------------
|
||||
-- Main Functions
|
||||
------------------------------------------
|
||||
|
||||
local function SpiffUIOnGameStart()
|
||||
spiff.filters = {
|
||||
smoke = {
|
||||
["cigarettes"] = {
|
||||
-- Smoker Homemade
|
||||
["SMHomemadeCigarette2"] = "",
|
||||
["SMHomemadeCigarette"] = "",
|
||||
-- Smoker Cigs
|
||||
["SMCigarette"] = "",
|
||||
["SMCigaretteLight"] = "",
|
||||
["SMPCigaretteMenthol"] = "",
|
||||
["SMPCigaretteGold"] = "",
|
||||
-- MCM Cigs
|
||||
["CigsCigaretteReg"] = "",
|
||||
["CigsCigaretteLite"] = "",
|
||||
["CigsCigaretteReg"] = "",
|
||||
["CigsCigaretteReg"] = "",
|
||||
-- Greenfire Cigs
|
||||
["GFCigarette"] = "",
|
||||
},
|
||||
["butts"] = {
|
||||
-- Smoker Butts
|
||||
["SMButt"] = "",
|
||||
["SMButt2"] = "",
|
||||
-- MCM Butts
|
||||
["CigsButtReg"] = "",
|
||||
["CigsButtLite"] = "",
|
||||
["CigsButtMent"] = "",
|
||||
["CigsButtGold"] = "",
|
||||
},
|
||||
["openedPacks"] = {
|
||||
-- Smoker Open Pack
|
||||
["SMPack"] = "SM.SMCigarette",
|
||||
["SMPackLight"] = "SM.SMCigaretteLight",
|
||||
["SMPackMenthol"] = "SM.SMPCigaretteMenthol",
|
||||
["SMPackGold"] = "SM.SMPCigaretteGold",
|
||||
-- MCM Open Pack
|
||||
["CigsOpenPackReg"] = "Cigs.CigsCigaretteReg",
|
||||
["CigsOpenPackLite"] = "Cigs.CigsCigaretteLite",
|
||||
["CigsOpenPackMent"] = "Cigs.CigsCigaretteMent",
|
||||
["CigsOpenPackGold"] = "Cigs.CigsCigaretteGold",
|
||||
},
|
||||
["closedIncompletePacks"] = {
|
||||
-- Smoker Random Packs (Base.Cigarettes only)
|
||||
-- MCM Random packs (also Base.Cigarettes)
|
||||
["CigsSpawnPackLite"] = "Cigs.CigsOpenPackLite",
|
||||
["CigsSpawnPackMent"] = "Cigs.CigsOpenPackMent",
|
||||
["CigsSpawnPackGold"] = "Cigs.CigsOpenPackGold",
|
||||
},
|
||||
["closedPacks"] = {
|
||||
--Smoker Full Pack
|
||||
["SMFullPack"] = "SM.SMPack",
|
||||
["SMFullPackLight"] = "SM.SMPackLight",
|
||||
["SMFullPackMenthol"] = "SM.SMPackMenthol",
|
||||
["SMFullPackGold"] = "SM.SMPackGold",
|
||||
-- MCM Full Pack
|
||||
["CigsClosedPackReg"] = "Cigs.CigsOpenPackReg",
|
||||
["CigsClosedPackLite"] = "Cigs.CigsOpenPackLite",
|
||||
["CigsClosedPackMent"] = "Cigs.CigsOpenPackMent",
|
||||
["CigsClosedPackGold"] = "Cigs.CigsOpenPackGold",
|
||||
--Greenfire Pack
|
||||
["GFCigarettes"] = "Greenfire.GFCigarette",
|
||||
},
|
||||
["openedCartons"] = {
|
||||
--Greenfire Cartons
|
||||
["GFUsedCigaretteCarton"] = "Greenfire.GFCigarettes",
|
||||
},
|
||||
["cartons"] = {
|
||||
--Smoker Carton
|
||||
["SMCartonCigarettes"] = "SM.SMFullPack",
|
||||
["SMCartonCigarettesLight"] = "SM.SMFullPackLight",
|
||||
["SMCartonCigarettesMenthol"] = "SM.SMFullPackMenthol",
|
||||
["SMCartonCigarettesGold"] = "SM.SMFullPackGold",
|
||||
-- MCM Carton
|
||||
["CigsCartonReg"] = "Cigs.CigsClosedPackReg",
|
||||
["CigsCartonLite"] = "Cigs.CigsClosedPackLite",
|
||||
["CigsCartonMent"] = "Cigs.CigsClosedPackMent",
|
||||
["CigsCartonGold"] = "Cigs.CigsClosedPackGold",
|
||||
--Greenfire Cartons
|
||||
["GFCigaretteCarton"] = "Greenfire.GFCigarettes",
|
||||
},
|
||||
["gum"] = {
|
||||
-- Smoker Gum
|
||||
["SMGum"] = "",
|
||||
},
|
||||
["gumBlister"] = {
|
||||
-- Smoker Gum pack
|
||||
["SMNicorette"] = "SM.SMGum",
|
||||
},
|
||||
["gumPack"] = {
|
||||
-- Smoker Gum Carton
|
||||
["SMNicoretteBox"] = "SM.SMNicorette"
|
||||
}
|
||||
},
|
||||
smokecraft = {
|
||||
["Tobacco"] = "misc",
|
||||
["Cannabis"] = "misc",
|
||||
["CannabisShake"] = "misc",
|
||||
["Hashish"] = "misc",
|
||||
["CigarLeaf"] = "misc",
|
||||
["SMPinchTobacco"] = "misc",
|
||||
["SMSmallHandfulTobacco"] = "misc",
|
||||
["SMHandfulTobacco"] = "misc",
|
||||
["SMPileTobacco"] = "misc",
|
||||
["SMBigPileTobacco"] = "misc",
|
||||
["SMTobaccoPouches"] = "misc",
|
||||
["FreshUnCanna"] = "misc",
|
||||
["DryUnCanna"] = "misc",
|
||||
["FreshTCanna"] = "misc",
|
||||
["DryTCanna"] = "misc",
|
||||
["FreshCannabisFanLeaf"] = "misc",
|
||||
["DryCannabisFanLeaf"] = "misc",
|
||||
["FreshCannabisSugarLeaf"] = "misc",
|
||||
["DryCannabisSugarLeaf"] = "misc",
|
||||
["CannaJar"] = "misc",
|
||||
["CannaJar2"] = "misc",
|
||||
["CannaJar3"] = "misc",
|
||||
["CannaJar4"] = "misc",
|
||||
["UnCannaJar"] = "misc",
|
||||
["UnCannaJar2"] = "misc",
|
||||
["UnCannaJar3"] = "misc",
|
||||
["UnCannaJar4"] = "misc",
|
||||
["Cannabis"] = "misc",
|
||||
["OzCannabis"] = "misc",
|
||||
["KgCannabis"] = "misc",
|
||||
["CannabisShake"] = "misc",
|
||||
["FreshBTobacco"] = "misc",
|
||||
["DryBTobacco"] = "misc",
|
||||
["SMSmokingBlend"] = "misc",
|
||||
},
|
||||
eat = {
|
||||
["Cannabis"] = true
|
||||
},
|
||||
smokeables = {
|
||||
["Bong"] = "misc",
|
||||
["SmokingPipe"] = "misc",
|
||||
["RollingPapers"] = "misc",
|
||||
["GFGrinder"] = "misc",
|
||||
["BluntWrap"] = "misc",
|
||||
["SMFilter"] = "misc"
|
||||
},
|
||||
firstAid = {
|
||||
["Bandage"] = true,
|
||||
["Bandaid"] = true,
|
||||
["RippedSheets"] = true,
|
||||
["Disinfectant"] = true,
|
||||
["Needle"] = true,
|
||||
["Thread"] = true,
|
||||
["SutureNeedle"] = true,
|
||||
["Tweezers"] = true,
|
||||
["SutureNeedleHolder"] = true,
|
||||
["Splint"] = true,
|
||||
["TreeBranch"] = true,
|
||||
["WoodenStick"] = true,
|
||||
["PlantainCataplasm"] = true,
|
||||
["WildGarlicCataplasm"] = true,
|
||||
["ComfreyCataplasm"] = true
|
||||
},
|
||||
firstAidCraft = {
|
||||
["Bandage"] = true,
|
||||
["BandageDirty"] = true,
|
||||
["Bandaid"] = true,
|
||||
["RippedSheets"] = true,
|
||||
["RippedSheetsDirty"] = true,
|
||||
["Disinfectant"] = true,
|
||||
["Needle"] = true,
|
||||
["Thread"] = true,
|
||||
["SutureNeedle"] = true,
|
||||
["Tweezers"] = true,
|
||||
["SutureNeedleHolder"] = true,
|
||||
["Splint"] = true,
|
||||
["TreeBranch"] = true,
|
||||
["WoodenStick"] = true,
|
||||
["PlantainCataplasm"] = true,
|
||||
["WildGarlicCataplasm"] = true,
|
||||
["ComfreyCataplasm"] = true
|
||||
}
|
||||
}
|
||||
|
||||
-- Lets add the base Cigs
|
||||
if getActivatedMods():contains('Smoker') then
|
||||
spiff.filters.smoke["closedIncompletePacks"]["Cigarettes"] = "SM.SMPack"
|
||||
elseif getActivatedMods():contains('MoreCigsMod') then
|
||||
spiff.filters.smoke["closedIncompletePacks"]["Cigarettes"] = "Cigs.CigsOpenPackReg"
|
||||
else
|
||||
spiff.filters.smoke["cigarettes"]["Cigarettes"] = ""
|
||||
end
|
||||
|
||||
-- Add Smokes to Smokeables
|
||||
for i,_ in pairs(spiff.filters.smoke) do
|
||||
for j,k in pairs(spiff.filters.smoke[i]) do
|
||||
spiff.filters.smokeables[j] = k
|
||||
end
|
||||
end
|
||||
|
||||
-- Add Smoke Craft to Smokeables
|
||||
for i,j in pairs(spiff.filters.smokecraft) do
|
||||
spiff.filters.smokeables[i] = j
|
||||
end
|
||||
|
||||
-- Add Smokes to Smoke Craft
|
||||
for i,_ in pairs(spiff.filters.smoke) do
|
||||
if not luautils.stringStarts(i, "gum") then
|
||||
for j,_ in pairs(spiff.filters.smoke[i]) do
|
||||
spiff.filters.smokecraft[j] = "cigs"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
spiff.rFilters = {
|
||||
smoke = {
|
||||
butts = {
|
||||
-- Smoker Butts
|
||||
["SMButt"] = true,
|
||||
["SMButt2"] = true,
|
||||
-- MCM Butts
|
||||
["CigsButtReg"] = true,
|
||||
["CigsButtLite"] = true,
|
||||
["CigsButtMent"] = true,
|
||||
["CigsButtGold"] = true
|
||||
},
|
||||
gum = {
|
||||
-- Smoker Gum
|
||||
["SMGum"] = true,
|
||||
-- Smoker Gum pack
|
||||
["SMNicorette"] = true,
|
||||
-- Smoker Gum Carton
|
||||
["SMNicoretteBox"] = true
|
||||
}
|
||||
},
|
||||
smokecraft = {
|
||||
dismantle = {
|
||||
["Unload"] = true,
|
||||
["Dismantle"] = true,
|
||||
["Break"] = true,
|
||||
["Remove"] = true,
|
||||
["Unpack"] = true
|
||||
},
|
||||
cigpacks = {
|
||||
["Put"] = true,
|
||||
["Take"] = true,
|
||||
["Open"] = true,
|
||||
["Close"] = true
|
||||
},
|
||||
always = {
|
||||
["Convert"] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
local function SpiffUIBoot()
|
||||
|
||||
spiff.config = {
|
||||
showTooltips = true,
|
||||
smokeShowButts = true,
|
||||
smokeShowGum = true,
|
||||
smokeCraftShowDismantle = true,
|
||||
smokeCraftShowCigPacks = true,
|
||||
smokeCraftAmount = -1,
|
||||
craftShowEquipped = false,
|
||||
craftShowSmokeables = false,
|
||||
craftShowMedical = false,
|
||||
craftAmount = -1,
|
||||
craftSwitch = true,
|
||||
craftFilterUnique = true,
|
||||
equipShowDrop = true,
|
||||
equipShowAllRepairs = false,
|
||||
equipShowClothingActions = true,
|
||||
equipShowRecipes = true,
|
||||
repairShowEquipped = false,
|
||||
repairShowHotbar = true,
|
||||
firstAidCraftAmount = -1,
|
||||
eatAmount = 0,
|
||||
drinkAmount = 0,
|
||||
eatQuickAmount = 1,
|
||||
drinkQuickAmount = 1
|
||||
}
|
||||
|
||||
if ModOptions and ModOptions.getInstance then
|
||||
local function apply(data)
|
||||
local options = data.settings.options
|
||||
spiff.config.showTooltips = options.showTooltips
|
||||
|
||||
spiff.config.smokeShowNow = options.smokeShowNow
|
||||
spiff.config.smokeShowButts = options.smokeShowButts
|
||||
spiff.config.smokeShowGum = options.smokeShowGum
|
||||
|
||||
spiff.config.smokeCraftShowDismantle = options.smokeCraftShowDismantle
|
||||
spiff.config.smokeCraftShowCigPacks = options.smokeCraftShowCigPacks
|
||||
|
||||
spiff.config.craftSwitch = options.craftSwitch
|
||||
spiff.config.craftShowEquipped = options.craftShowEquipped
|
||||
spiff.config.craftShowSmokeables = options.craftShowSmokeables
|
||||
spiff.config.craftShowMedical = options.craftShowMedical
|
||||
spiff.config.craftFilterUnique = options.craftFilterUnique
|
||||
|
||||
spiff.config.eatShowNow = options.eatShowNow
|
||||
spiff.config.drinkShowNow = options.drinkShowNow
|
||||
spiff.config.pillsShowNow = options.pillsShowNow
|
||||
|
||||
spiff.config.equipShowDrop = options.equipShowDrop
|
||||
spiff.config.equipShowAllRepairs = options.equipShowAllRepairs
|
||||
spiff.config.equipShowClothingActions = options.equipShowClothingActions
|
||||
spiff.config.equipShowRecipes = options.equipShowRecipes
|
||||
|
||||
spiff.config.repairShowEquipped = options.repairShowEquipped
|
||||
spiff.config.repairShowHotbar = options.repairShowHotbar
|
||||
|
||||
spiff.config.smokeCraftAmount = rOptions.craft[options.smokeCraftAmount]
|
||||
spiff.config.craftAmount = rOptions.craft[options.craftAmount]
|
||||
spiff.config.eatAmount = rOptions.consume[options.eatAmount]
|
||||
spiff.config.eatQuickAmount = rOptions.consume[options.eatQuickAmount]
|
||||
spiff.config.drinkAmount = rOptions.consume[options.drinkAmount]
|
||||
spiff.config.drinkQuickAmount = rOptions.consume[options.drinkQuickAmount]
|
||||
|
||||
SpiffUI.equippedItem["Craft"] = not options.hideCraftButton
|
||||
end
|
||||
|
||||
local function applyGame(data)
|
||||
apply(data)
|
||||
local options = data.settings.options
|
||||
SpiffUI:updateEquippedItem()
|
||||
end
|
||||
|
||||
local SETTINGS = {
|
||||
options_data = {
|
||||
showTooltips = {
|
||||
name = "UI_ModOptions_SpiffUI_showTooltips",
|
||||
default = true,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_showTooltips"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
hideCraftButton = {
|
||||
name = "UI_ModOptions_SpiffUI_hideCraftButton",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = applyGame,
|
||||
},
|
||||
eatShowNow = {
|
||||
name = "UI_ModOptions_SpiffUI_eatShowNow",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_eatShowNow"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
eatAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"),
|
||||
getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Ask"),
|
||||
getText("UI_amount_SpiffUI_Full"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_eatAmount",
|
||||
default = 4,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
eatQuickAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"),
|
||||
getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Full"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_eatQuickAmount",
|
||||
default = 1,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
drinkShowNow = {
|
||||
name = "UI_ModOptions_SpiffUI_drinkShowNow",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_drinkShowNow"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
drinkAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"),
|
||||
getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Ask"),
|
||||
getText("UI_amount_SpiffUI_Full"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_drinkAmount",
|
||||
default = 4,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
drinkQuickAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_Half"),
|
||||
getText("UI_amount_SpiffUI_Quarter"), getText("UI_amount_SpiffUI_Full"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_drinkQuickAmount",
|
||||
default = 1,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
pillsShowNow = {
|
||||
name = "UI_ModOptions_SpiffUI_pillsShowNow",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_pillsShowNow"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
smokeShowNow = {
|
||||
name = "UI_ModOptions_SpiffUI_smokeShowNow",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_smokeShowNow"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
smokeShowButts = {
|
||||
name = "UI_ModOptions_SpiffUI_smokeShowButts",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
smokeShowGum = {
|
||||
name = "UI_ModOptions_SpiffUI_smokeShowGum",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
smokeCraftShowDismantle = {
|
||||
name = "UI_ModOptions_SpiffUI_smokeCraftShowDismantle",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
smokeCraftShowCigPacks = {
|
||||
name = "UI_ModOptions_SpiffUI_smokeCraftShowCigPacks",
|
||||
default = false,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
smokeCraftAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_All"),
|
||||
getText("UI_amount_SpiffUI_Ask"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_smokeCraftAmount",
|
||||
default = 3,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
craftSwitch = {
|
||||
name = "UI_ModOptions_SpiffUI_craftSwitch",
|
||||
default = true,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_CraftingWheelSwitch"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
craftShowEquipped = {
|
||||
name = "UI_ModOptions_SpiffUI_craftShowEquipped",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_craftShowEquipped"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
craftShowSmokeables = {
|
||||
name = "UI_ModOptions_SpiffUI_craftShowSmokeables",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
craftShowMedical = {
|
||||
name = "UI_ModOptions_SpiffUI_craftShowMedical",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_craftShowMedical"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
craftFilterUnique = {
|
||||
name = "UI_ModOptions_SpiffUI_craftFilterUnique",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
craftAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_All"),
|
||||
getText("UI_amount_SpiffUI_Ask"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_craftAmount",
|
||||
default = 3,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
equipShowDrop = {
|
||||
name = "UI_ModOptions_SpiffUI_equipShowDrop",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
equipShowAllRepairs = {
|
||||
name = "UI_ModOptions_SpiffUI_equipShowAllRepairs",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_equipShowAllRepairs"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
equipShowClothingActions = {
|
||||
name = "UI_ModOptions_SpiffUI_equipShowClothingActions",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
equipShowRecipes = {
|
||||
name = "UI_ModOptions_SpiffUI_equipShowRecipes",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
repairShowEquipped = {
|
||||
name = "UI_ModOptions_SpiffUI_repairShowEquipped",
|
||||
default = false,
|
||||
tooltip = getText("UI_ModOptions_SpiffUI_tooltip_repairShowEquipped"),
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
repairShowHotbar = {
|
||||
name = "UI_ModOptions_SpiffUI_repairShowHotbar",
|
||||
default = true,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply,
|
||||
},
|
||||
firstAidCraftAmount = {
|
||||
getText("UI_amount_SpiffUI_One"), getText("UI_amount_SpiffUI_All"),
|
||||
getText("UI_amount_SpiffUI_Ask"),
|
||||
|
||||
name = "UI_ModOptions_SpiffUI_firstAidCraftAmount",
|
||||
default = 3,
|
||||
OnApplyMainMenu = apply,
|
||||
OnApplyInGame = apply
|
||||
}
|
||||
},
|
||||
mod_id = "SpiffUI-Rads",
|
||||
mod_shortname = "SpiffUI-Rads",
|
||||
mod_fullname = getText("UI_Name_SpiffUI_Radials")
|
||||
}
|
||||
|
||||
local oInstance = ModOptions:getInstance(SETTINGS)
|
||||
ModOptions:loadFile()
|
||||
|
||||
Events.OnPreMapLoad.Add(function()
|
||||
apply({settings = SETTINGS})
|
||||
end)
|
||||
end
|
||||
|
||||
spiff.icons = {
|
||||
[1] = getTexture("media/SpiffUI/1.png"),
|
||||
[2] = getTexture("media/SpiffUI/1-2.png"),
|
||||
[3] = getTexture("media/SpiffUI/1-4.png"),
|
||||
[4] = getTexture("media/SpiffUI/ALL.png"),
|
||||
[5] = getTexture("media/SpiffUI/FULL.png"),
|
||||
["unequip"] = getTexture("media/ui/Icon_InventoryBasic.png"),
|
||||
["drop"] = getTexture("media/ui/Container_Floor.png")
|
||||
}
|
||||
|
||||
SpiffUI:AddKeyDisable("Toggle Inventory")
|
||||
SpiffUI:AddKeyDisable("Crafting UI")
|
||||
SpiffUI:AddKeyDisable("SpiffUI_Inv")
|
||||
SpiffUI:AddKeyDisable("NF Smoke")
|
||||
|
||||
SpiffUI:AddKeyDefault("Toggle Moveable Panel Mode", 0)
|
||||
SpiffUI:AddKeyDefault("Display FPS", 0)
|
||||
|
||||
print(getText("UI_Hello_SpiffUI_Radials"))
|
||||
end
|
||||
|
||||
spiff.Boot = SpiffUIBoot
|
||||
spiff.Start = SpiffUIOnGameStart
|
||||
@@ -0,0 +1,22 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI Clothing Extra Action override
|
||||
---- Adds time to the Clothing Extra Action
|
||||
------------------------------------------
|
||||
|
||||
-- This is included with the Clothing Actions Radial Menu already
|
||||
if getActivatedMods():contains('ClothingActionsRM') then return end
|
||||
|
||||
-- I just want to change a few of the init things
|
||||
local _ISClothingExtraAction_new = ISClothingExtraAction.new
|
||||
function ISClothingExtraAction:new(...)
|
||||
local o = _ISClothingExtraAction_new(self, ...)
|
||||
o.stopOnAim = false
|
||||
o.stopOnWalk = false
|
||||
o.stopOnRun = true
|
||||
o.maxTime = 25
|
||||
o.useProgressBar = false
|
||||
if o.character:isTimedActionInstant() then
|
||||
o.maxTime = 1
|
||||
end
|
||||
return o
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI ISFixAction
|
||||
---- Adds an animation to ISFixAction
|
||||
------------------------------------------
|
||||
|
||||
local _ISFixAction_start = ISFixAction.start
|
||||
function ISFixAction:start()
|
||||
_ISFixAction_start(self)
|
||||
|
||||
self:setActionAnim(CharacterActionAnims.Craft)
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
------------------------------------------
|
||||
-- SpiffUI ISWearClothing
|
||||
---- Allows you to walk and put on clothes that makes sense
|
||||
------------------------------------------
|
||||
|
||||
local _ISWearClothing_new = ISWearClothing.new
|
||||
function ISWearClothing:new(...)
|
||||
local o = _ISWearClothing_new(self, ...)
|
||||
|
||||
o.stopOnAim = false
|
||||
o.stopOnWalk = false
|
||||
o.stopOnRun = true
|
||||
|
||||
return o
|
||||
end
|
||||
@@ -0,0 +1,119 @@
|
||||
UI_EN = {
|
||||
-- SpiffUI
|
||||
UI_Hello_SpiffUI = "Hello SpiffUI!",
|
||||
UI_Name_SpiffUI = "SpiffUI",
|
||||
UI_optionscreen_binding_SpiffUI = "SpiffUI"
|
||||
|
||||
UI_ModOptions_SpiffUI_applyNewKeybinds = "Set SpiffUI Recommended Keybinds",
|
||||
UI_ModOptions_SpiffUI_Modal_applyNewKeybinds = "<CENTRE><SIZE:medium> Set SpiffUI Keybinds <LINE><LINE><LEFT><SIZE:small> Sets the following Keybinds: <LINE>",
|
||||
UI_ModOptions_SpiffUI_Modal_aNKChild = " <LINE> %1 to: [%2] ",
|
||||
|
||||
UI_ModOptions_SpiffUI_runAllResets = "Run All SpiffUI Resets",
|
||||
UI_ModOptions_SpiffUI_tooltip_runResets = "Only works In-Game!",
|
||||
UI_ModOptions_SpiffUI_Modal_runResets = "<CENTRE><SIZE:medium> SpiffUI Reset <LINE><LINE><LEFT><SIZE:small> The following will be reset: <LINE>",
|
||||
|
||||
-- SpiffUI -- Radials
|
||||
UI_Hello_SpiffUI_Radials = "Hello SpiffUI - Radials",
|
||||
|
||||
UI_Name_SpiffUI_Radials = "SpiffUI - Radials",
|
||||
|
||||
UI_ModOptions_SpiffUI_showTooltips = "Show Tooltips",
|
||||
UI_ModOptions_SpiffUI_hideCraftButton = "Hide Crafting Button",
|
||||
|
||||
UI_ModOptions_SpiffUI_smokeShowButts = "Show Cigarette Butts (Smoke)",
|
||||
UI_ModOptions_SpiffUI_smokeShowGum = "Show Gum (Smoke)",
|
||||
UI_ModOptions_SpiffUI_smokeShowNow = "Show Radial on Press (Smoke)",
|
||||
|
||||
UI_ModOptions_SpiffUI_pillsShowNow = "Show Radial on Press (Pills)",
|
||||
|
||||
UI_ModOptions_SpiffUI_eatAmount = "Amount to Eat (Food)",
|
||||
UI_ModOptions_SpiffUI_eatQuickAmount = "Amount to Quick Eat (Food)",
|
||||
UI_ModOptions_SpiffUI_eatShowNow = "Show Radial on Press (Food)",
|
||||
|
||||
UI_ModOptions_SpiffUI_drinkAmount = "Amount to Drink (Drink)",
|
||||
UI_ModOptions_SpiffUI_drinkQuickAmount = "Amount to Quick Drink (Drink)",
|
||||
UI_ModOptions_SpiffUI_drinkShowNow = "Show Radial on Press (Drink)",
|
||||
|
||||
UI_ModOptions_SpiffUI_smokeCraftShowDismantle = "Show Dismantle Recipes (Smoke Craft)",
|
||||
UI_ModOptions_SpiffUI_smokeCraftShowCigPacks = "Show Cigarette Packs (Smoke Craft)",
|
||||
UI_ModOptions_SpiffUI_smokeCraftAmount = "Amount To Craft (Smoke Craft)",
|
||||
|
||||
UI_ModOptions_SpiffUI_craftSwitch = "Show on Press (Crafting)",
|
||||
UI_ModOptions_SpiffUI_craftShowEquipped = "Show Recipes on Equipped Items (Crafting)",
|
||||
UI_ModOptions_SpiffUI_craftShowSmokeables = "Show Smokeable Recipes (Crafting)",
|
||||
UI_ModOptions_SpiffUI_craftShowMedical = "Show Medical Recipes (Crafting)",
|
||||
UI_ModOptions_SpiffUI_craftAmount = "Amount To Craft (Crafting)",
|
||||
UI_ModOptions_SpiffUI_craftFilterUnique = "Filter Duplicate Recipes (Crafting)",
|
||||
|
||||
UI_ModOptions_SpiffUI_equipShowDrop = "Show Drop Action (Equipment)",
|
||||
UI_ModOptions_SpiffUI_equipShowAllRepairs = "Show Unavailable Repair Options (Equipment)",
|
||||
UI_ModOptions_SpiffUI_equipShowClothingActions = "Show Extra Clothing Actions (Equipment)",
|
||||
UI_ModOptions_SpiffUI_equipShowRecipes = "Show Recipes (Equipment)",
|
||||
|
||||
UI_ModOptions_SpiffUI_repairShowEquipped = "Show Repairs on Equipped Items (Repair)",
|
||||
UI_ModOptions_SpiffUI_repairShowHotbar = "Show Repairs for Items in Hotbar (Repair)",
|
||||
|
||||
UI_ModOptions_SpiffUI_firstAidCraftAmount = "Amount to Craft (Medical Craft)",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_showTooltips = "Show Tooltips in Radial Menus for Items, Recipes, and Repairs (Recommended)",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_pillsShowNow = "Note: Disables Quick Pills Action",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_drinkShowNow = "Note: Disables Quick Drink Water Action",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_eatShowNow = "Note: Disables Quick Eat Food Action",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_craftShowMedical = "Note: Some Recipes may still filter through. Consider using the First Aid Crafting Menu instead!",
|
||||
UI_ModOptions_SpiffUI_tooltip_craftShowEquipped = "Note: Recipes on worn items can be done from the Equipment Menu. Items in your hand will still show recipes",
|
||||
UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables = "Consider using the Smoke Crafting Menu instead!"
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_smokeShowNow = "Note: Disables AutoSmoke Quick Smoke",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_CraftingWheelSwitch = "Press Opens Radial Menu, Hold for Crafting Window",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_equipShowAllRepairs = "Show Repair Options even if the required items are not in your inventory",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_repairShowEquipped = "Repairs for Equipment can be done from the Equipment Menu",
|
||||
|
||||
UI_amount_SpiffUI_Ask = "Ask",
|
||||
UI_amount_SpiffUI_All = "All",
|
||||
UI_amount_SpiffUI_Full = "Dieter",
|
||||
UI_amount_SpiffUI_One = "1",
|
||||
UI_amount_SpiffUI_Half = "1/2",
|
||||
UI_amount_SpiffUI_Quarter = "1/4",
|
||||
|
||||
UI_radial_SpiffUI_Accessories = "Accessories",
|
||||
UI_radial_SpiffUI_Hotbar = "Hotbar",
|
||||
UI_radial_SpiffUI_Transfer = "Transfer to ",
|
||||
|
||||
UI_optionscreen_binding_SpiffUIPillWheel = "Pill Radial",
|
||||
UI_optionscreen_binding_SpiffUIDrinkWheel = "Drink Radial",
|
||||
UI_optionscreen_binding_SpiffUIEatWheel = "Eat Radial",
|
||||
UI_optionscreen_binding_SpiffUISmokeWheel = "Smoke Radial",
|
||||
UI_optionscreen_binding_SpiffUISmokeCraftWheel = "Smoke Craft Radial",
|
||||
UI_optionscreen_binding_SpiffUICraftWheel = "Crafting UI/Radial",
|
||||
UI_optionscreen_binding_SpiffUIEquipmentWheel = "Inventory Toggle/Radial",
|
||||
UI_optionscreen_binding_SpiffUIRepairWheel = "Repair Radial",
|
||||
UI_optionscreen_binding_SpiffUIFirstAidCraftWheel = "First Aid Craft",
|
||||
UI_optionscreen_binding_SpiffUIOneWheel = "SpiffUI Radial",
|
||||
|
||||
UI_character_SpiffUI_noLighter = "I need a lighter.",
|
||||
UI_character_SpiffUI_noSmokes = "There's nothing to Smoke.",
|
||||
|
||||
UI_character_SpiffUI_noCraft = "There's nothing to Craft.",
|
||||
|
||||
UI_character_SpiffUI_noEquip = "I am Naked!",
|
||||
|
||||
UI_character_SpiffUI_notHungry = "I'm not Hungry.",
|
||||
UI_character_SpiffUI_noFood = "There's no Food to Eat.",
|
||||
|
||||
UI_character_SpiffUI_notThirsty = "I'm not Thirsty.",
|
||||
UI_character_SpiffUI_noDrinks = "There's nothing to Drink.",
|
||||
|
||||
UI_character_SpiffUI_noRepair = "There's nothing to Repair.",
|
||||
UI_character_SpiffUI_noRepairItems = "I can't Reapir that.",
|
||||
|
||||
UI_character_SpiffUI_noPillsQuick = "I have no ",
|
||||
UI_character_SpiffUI_noPills = "There's no pills",
|
||||
UI_character_SpiffUI_noPillsNeed = "I'm not in any Mood."
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
UI_RU = {
|
||||
-- Translation By: fourteensix
|
||||
-- Перевод: fourteensix
|
||||
|
||||
-- SpiffUI Radial
|
||||
UI_Hello_SpiffUI = "Hello SpiffUI!",
|
||||
UI_Name_SpiffUI = "SpiffUI",
|
||||
UI_optionscreen_binding_SpiffUI = "SpiffUI"
|
||||
|
||||
UI_ModOptions_SpiffUI_applyNewKeybinds = "Установите рекомендуемые сочетания клавиш SpiffUI",
|
||||
UI_ModOptions_SpiffUI_Modal_applyNewKeybinds = "<CENTRE><SIZE:medium> Установить привязки клавиш SpiffUI <LINE><LINE><LEFT><SIZE:small> Устанавливает следующие сочетания клавиш: <LINE>",
|
||||
UI_ModOptions_SpiffUI_Modal_aNKChild = " <LINE> %1 для: [%2] ",
|
||||
|
||||
UI_ModOptions_SpiffUI_runAllResets = "Запустить полный сброс SpiffUI",
|
||||
UI_ModOptions_SpiffUI_tooltip_runResets = "Работает только в игре!",
|
||||
UI_ModOptions_SpiffUI_Modal_runResets = "<CENTRE><SIZE:medium> Сброс SpiffUI <LINE><LINE><LEFT><SIZE:small> Будет сброшено следующее: <LINE>",
|
||||
|
||||
-- SpiffUI -- Radials
|
||||
UI_Hello_SpiffUI_Radials = "Hello SpiffUI - Radials",
|
||||
|
||||
UI_Name_SpiffUI_Radials = "SpiffUI - Radials",
|
||||
|
||||
UI_ModOptions_SpiffUI_showTooltips = "Показать подсказки",
|
||||
UI_ModOptions_SpiffUI_hideCraftButton = "Скрыть кнопку крафта",
|
||||
|
||||
UI_ModOptions_SpiffUI_smokeShowButts = "Показать окурки (мод Smoke)",
|
||||
UI_ModOptions_SpiffUI_smokeShowGum = "Показать жвачку (мод Smoke)",
|
||||
UI_ModOptions_SpiffUI_smokeShowNow = "Показать радиальное меню при нажатии (мод Smoke)",
|
||||
|
||||
UI_ModOptions_SpiffUI_pillsShowNow = "Показать радиальное меню при нажатии (Таблетки)",
|
||||
|
||||
UI_ModOptions_SpiffUI_eatAmount = "Количество еды (Еда)",
|
||||
UI_ModOptions_SpiffUI_eatQuickAmount = "Количество еды для быстрого перекуса (Еда)",
|
||||
UI_ModOptions_SpiffUI_eatShowNow = "Показать радиальное меню при нажатии (Еда)",
|
||||
|
||||
UI_ModOptions_SpiffUI_drinkAmount = "Количество питья (Напитки)",
|
||||
UI_ModOptions_SpiffUI_drinkQuickAmount = "Количество напитка для быстрого удаления жажды (Напитки)",
|
||||
UI_ModOptions_SpiffUI_drinkShowNow = "Показать радиальное меню при нажатии (Напитки)",
|
||||
|
||||
UI_ModOptions_SpiffUI_smokeCraftShowDismantle = "Показать рецепты разборки (крафт мода Smoke)",
|
||||
UI_ModOptions_SpiffUI_smokeCraftShowCigPacks = "Показать пачки сигарет (крафт мода Smoke)",
|
||||
UI_ModOptions_SpiffUI_smokeCraftAmount = "Количество для создания (крафт мода Smoke)",
|
||||
|
||||
UI_ModOptions_SpiffUI_craftSwitch = "Показать радиальное меню при нажатии (Крафт)",
|
||||
UI_ModOptions_SpiffUI_craftShowEquipped = "Показать рецепты на экипированных предметах (Крафт)",
|
||||
UI_ModOptions_SpiffUI_craftShowSmokeables = "Показать рецепты для курения (Крафт)",
|
||||
UI_ModOptions_SpiffUI_craftShowMedical = "Показать медицинские рецепты (Крафт)",
|
||||
UI_ModOptions_SpiffUI_craftAmount = "Количество для крафта (Крафт)",
|
||||
UI_ModOptions_SpiffUI_craftFilterUnique = "Фильтр повторяющихся рецептов (Крафт)",
|
||||
|
||||
UI_ModOptions_SpiffUI_equipShowDrop = "Показать действие дропа (Экипировка)",
|
||||
UI_ModOptions_SpiffUI_equipShowAllRepairs = "Показать недоступные параметры ремонта (Экипировка)",
|
||||
UI_ModOptions_SpiffUI_equipShowClothingActions = "Показать действия с дополнительной одеждой (Экипировка)",
|
||||
UI_ModOptions_SpiffUI_equipShowRecipes = "Показать рецепты (Экипировка)",
|
||||
|
||||
UI_ModOptions_SpiffUI_repairShowEquipped = "Показать ремонт экипированных предметов (Ремонт)",
|
||||
UI_ModOptions_SpiffUI_repairShowHotbar = "Показать ремонт предметов в хотбаре (Ремонт)",
|
||||
|
||||
UI_ModOptions_SpiffUI_firstAidCraftAmount = "Количество для крафта (Крафт медикаментов)",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_showTooltips = "Показывать всплывающие подсказки в радиальных меню для предметов, рецептов и ремонтов (Рекомендуется)",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_pillsShowNow = "Примечание: отключает действие *Быстрые таблетки*",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_drinkShowNow = "Примечание: отключает действие *Быстрое питьё воды*",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_eatShowNow = "Примечание: отключает действие *Быстро съесть еду*",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_craftShowMedical = "Примечание: некоторые рецепты могут по-прежнему фильтроваться. Вместо этого рассмотрите возможность использования меню крафта первой помощи!",
|
||||
UI_ModOptions_SpiffUI_tooltip_craftShowEquipped = "Примечание: рецепты на изношенные предметы можно сделать из меню снаряжения. Предметы в вашей руке по-прежнему будут показывать рецепты",
|
||||
UI_ModOptions_SpiffUI_tooltip_craftShowSmokeables = "Вместо этого рассмотрите возможность использования меню крафта мода Smoke!"
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_smokeShowNow = "Примечание: отключает мод AutoSmoke для быстрого курения",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_CraftingWheelSwitch = "Нажмите, чтобы открыть радиальное меню, удерживайте, чтобы открыть окно крафта",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_equipShowAllRepairs = "Показать параметры ремонта, даже если требуемых предметов нет в вашем инвентаре",
|
||||
|
||||
UI_ModOptions_SpiffUI_tooltip_repairShowEquipped = "Ремонт снаряжения можно выполнить из меню снаряжения.",
|
||||
|
||||
UI_amount_SpiffUI_Ask = "Спросить",
|
||||
UI_amount_SpiffUI_All = "Всё",
|
||||
UI_amount_SpiffUI_Full = "Диетолог",
|
||||
UI_amount_SpiffUI_One = "1",
|
||||
UI_amount_SpiffUI_Half = "1/2",
|
||||
UI_amount_SpiffUI_Quarter = "1/4",
|
||||
|
||||
UI_radial_SpiffUI_Accessories = "Аксессуары",
|
||||
UI_radial_SpiffUI_Hotbar = "Хотбар",
|
||||
UI_radial_SpiffUI_Transfer = "Переместить на ",
|
||||
|
||||
UI_optionscreen_binding_SpiffUIPillWheel = "Таблетки в меню",
|
||||
UI_optionscreen_binding_SpiffUIDrinkWheel = "Напитки в меню",
|
||||
UI_optionscreen_binding_SpiffUIEatWheel = "Еда в меню",
|
||||
UI_optionscreen_binding_SpiffUISmokeWheel = "Курение в меню",
|
||||
UI_optionscreen_binding_SpiffUISmokeCraftWheel = "Крафт мода Smoke в меню",
|
||||
UI_optionscreen_binding_SpiffUICraftWheel = "Интерфейс крафта/радиальное меню",
|
||||
UI_optionscreen_binding_SpiffUIEquipmentWheel = "Переключатель инвентаря/Радиальное меню",
|
||||
UI_optionscreen_binding_SpiffUIRepairWheel = "Ремонт в радиальном меню",
|
||||
UI_optionscreen_binding_SpiffUIFirstAidCraftWheel = "Крафт для первой помощи",
|
||||
UI_optionscreen_binding_SpiffUIOneWheel = "SpiffUI Радиальное меню",
|
||||
|
||||
UI_character_SpiffUI_noLighter = "Мне нужна зажигалка.",
|
||||
UI_character_SpiffUI_noSmokes = "Нечего курить.",
|
||||
|
||||
UI_character_SpiffUI_noCraft = "Крафтить нечего.",
|
||||
|
||||
UI_character_SpiffUI_noEquip = "Я Голый!",
|
||||
|
||||
UI_character_SpiffUI_notHungry = "Я не голоден.",
|
||||
UI_character_SpiffUI_noFood = "Нет еды, чтобы поесть.",
|
||||
|
||||
UI_character_SpiffUI_notThirsty = "Я не хочу пить.",
|
||||
UI_character_SpiffUI_noDrinks = "Пить нечего.",
|
||||
|
||||
UI_character_SpiffUI_noRepair = "Ремонтировать нечего.",
|
||||
UI_character_SpiffUI_noRepairItems = "Я не могу отремонтировать это.",
|
||||
|
||||
UI_character_SpiffUI_noPillsQuick = "У меня нет ",
|
||||
UI_character_SpiffUI_noPills = "Нет таблеток",
|
||||
UI_character_SpiffUI_noPillsNeed = "Я не в настроении.",
|
||||
}
|
||||
10
SpiffUI-Radials/Contents/mods/SpiffUI-Radials/mod.info
Normal file
@@ -0,0 +1,10 @@
|
||||
name=SpiffUI - Radials
|
||||
id=SpiffUI-Rads
|
||||
authors=dhert
|
||||
|
||||
description=Adds a bunch of Radial Menus for various things
|
||||
|
||||
pzversion=41
|
||||
tags=Interface;Framework;Misc
|
||||
|
||||
poster=poster.png
|
||||
BIN
SpiffUI-Radials/Contents/mods/SpiffUI-Radials/poster.png
Normal file
|
After Width: | Height: | Size: 188 KiB |
306
SpiffUI-Radials/README.md
Normal file
@@ -0,0 +1,306 @@
|
||||
# SpiffUI Radials
|
||||
|
||||

|
||||
|
||||
**Supports B41+. Works in Multiplayer**
|
||||
|
||||
## SpiffUI - Radials
|
||||
|
||||
Adds 9 New Radials for easy interactions with the objects that are in your inventories and the world. If a Radial is unavailable, your character will Say something. Items return to their original location when used.
|
||||
|
||||
Included Radials:
|
||||
- Crafting Radial
|
||||
- Medical Craft Radial
|
||||
- Smoke Craft Radial
|
||||
- Equipment Radial
|
||||
- Drink Radial
|
||||
- Food Radial
|
||||
- Pill Radial
|
||||
- Repair Radial
|
||||
- Smoke Radial
|
||||
|
||||
Possibly Next:
|
||||
- Medical Radial - Would allow for quick access to any injuries.
|
||||
- Inspect Radial - Port the Inspect Window to a Radial (I have this somewhat working)
|
||||
- More Mod Compatibility
|
||||
|
||||
Got an idea for a Radial or any features I missed? Let me know!
|
||||
|
||||
### Included Base Game Fixes
|
||||
|
||||
These are small tweaks to Base Game Actions that I overall help the immersion of these Radials and the game overall.
|
||||
|
||||
- ISFixAction - (Repair)
|
||||
- Added an Animation when doing a Repair Action
|
||||
- ISWearAction - (Wear Clothes)
|
||||
- Fixed the Rules for Equipping Clothes.
|
||||
- You can now walk and equip any upper-body pieces of clothing (ie. shirts).
|
||||
- Your character now stops walking for lower-body clothes (ie. shoes).
|
||||
- This matches how the Unequip Actions works for these items
|
||||
- ISClothingExtraActions - (Clothing Extra Actions)
|
||||
- Fixed the Rules for Clothing Extra Actions similarly to the ISWearAction
|
||||
- Added time (Half the Equip Time) to show an Animation
|
||||
|
||||
### Controlers!
|
||||
|
||||
Controllers are currently not supported. The Radials are currently not designed to give focus to the Radial either so, really, don't try it please; it won't work.
|
||||
|
||||
There are simply too many radials to accomodate a controller at this time. I have something in the works regarding this, but for now no controllers.
|
||||
|
||||
### Quick Actions
|
||||
|
||||
Some Radials have a "Quick Action" that is performed by a quick press of the key; the Radial is shown with a press and hold. Each available quick action is explained further in the description. If you set the Radial to be "Show on Press" the Quick Action will be disabled.
|
||||
|
||||
### Amount to Eat/Drink/Craft
|
||||
|
||||
Some actions can be performed on part or all of the items when you use the context menu, and these Radials can too! A new Radial will appear asking to confirm how much if applicable.
|
||||
|
||||
You can also specify an amount to always perform by default in the ModOptions.
|
||||
|
||||
Quick Actions can only be set to an amount and will not ask.
|
||||
|
||||
### Radial Pages
|
||||
|
||||
The Radials will automatically paginate if enough items or recipes are available. "Next" and "Previous" buttons will become available when applicable.
|
||||
|
||||
### Tooltips
|
||||
|
||||
The Tooltips have been ported to show in these Radials for all Recipes, Items, and Repairs. When enabled, the item name does not appear in the middle of the Radial anymore. This was a design decision as often the name is too long. Besides, the name is in the Tooltip! The Tooltips can be disabled, but are recommended.
|
||||
|
||||
**Known issue for the Recipe Tooltip:** I modified this from the default to prevent the lag from having too many items. One side-effect of this is that sometimes an ingredient will be duplicated or listed in the wrong category. This ONLY affects the Tooltip, the Recipe works as intended.
|
||||
|
||||
### Recommended External Mods
|
||||
Some Radials have external mod soft requirements listed below. Each Radial will work without any external mods, however, certain features and apparent usefulness are only available with other mods.
|
||||
|
||||
- AutoSmoke by NoctisFalco: It is highly recommended that you use have this mod to unlock the full Smoke Radial Menu. I use AutoSmoke's Item Filters and Actions to include support for the various cigarette mods in both the Smoke and Smoke Craft Radials. Without this mod, you will still be able to smoke cigarettes but will be unable to interact with packs in the Smoke or Smoke Craft Radials. Either AutoSmoke or AutoSmoke-Stable can be used.
|
||||
|
||||
- Having AutoSmoke gives support for both Smoker by Nebula and More Cigarettes Mod by Madman_Andre. ONE of these mods is recommended as well.
|
||||
|
||||
- jigga's Green Fire by jiggawut: Honestly, the reason I made the Smoke Craft Radial. This mod is one of my personal favorites. Adds items that populates the Radial.
|
||||
|
||||
- SpiffUI - Inventory: Modified behaviors to show and hide the Inventory Window, and part of SpiffUI!
|
||||
|
||||
## SpiffUI Configuration
|
||||
|
||||
If ModOptions is installed (Recommended) SpiffUI will appear as a category. This is intended to have common configuration across all of SpiffUI, as well as tools to help configure the game to SpiffUI recommendations.
|
||||
|
||||
- Set SpiffUI Recommended Keybinds
|
||||
- Default: (None) It's a Button!
|
||||
- Sets keybinds for built-in keys to recommended defaults. A dialog will ask confirming this change, and will display the changes it will make.
|
||||
- Run All SpiffUI Resets
|
||||
- Default: (None) It's a Button!
|
||||
- Runs all "Reset" functions for SpiffUI modules. A user is able to change where the UI is, its size, etc. This will set this to default. A dialog will ask confirming this change, and will display the changes it will make.
|
||||
- **NOTE:** This will only be usable in-game.
|
||||
|
||||
## SpiffUI - Radials Configuration
|
||||
|
||||
- Show Tooltips
|
||||
- Default: True
|
||||
- Show Tooltips in Radial Menus for Items, Recipes, and Repairs (Recommended)
|
||||
- Hide Crafting Button
|
||||
- Default: True
|
||||
- Hides the Crafting button in the left sidemenu
|
||||
|
||||
## Radials
|
||||
|
||||
### Crafting Radial
|
||||
|
||||
Unlock the full power of Crafting with the Crafting Radial! Shows available recipes for items that can be performed for items on the player and in the world.
|
||||
|
||||
**Default Key:** `B`
|
||||
|
||||
By default, this changes the behavior so pressing the key opens the Radial while a long press will open the Crafting window.
|
||||
|
||||
**Configuration:**
|
||||
- Show on Press (Crafting)
|
||||
- Default: True
|
||||
- Press Opens Radial Menu, Hold for Crafting Window
|
||||
- Show Recipes on Equipped Items (Crafting)
|
||||
- Default: False
|
||||
- Note: Recipes on worn items can be done from the Equipment Menu. Items in your hand will still show recipes
|
||||
- Show Smokeable Recipes (Crafting)
|
||||
- Default: False
|
||||
- Consider using the Smoke Crafting Menu instead!
|
||||
- Show Medical Recipes (Crafting)
|
||||
- Default: False
|
||||
- Note: Some Recipes may still filter through. For example, having a Plank and Ripped Sheets will still the recipe for a Splint due to the Plank. Consider using the First Aid Crafting Menu instead!
|
||||
- Craft Amount (Crafting)
|
||||
- Default: Ask
|
||||
- How many to craft (Only shows if more than 1 is available)
|
||||
- Filter Duplicate Recipes (Crafting)
|
||||
- Default: True
|
||||
- Filters Duplicate Crafting Recipes to help de-clutter the Radial
|
||||
|
||||
### Medical Craft Radial
|
||||
|
||||
Easy Access to those life-saving crafing recipes quick!
|
||||
|
||||
**Default Key:** `;`
|
||||
|
||||
Shows on press
|
||||
|
||||
**Configuration:**
|
||||
- Craft Amount (Medical Craft)
|
||||
- Default: Ask
|
||||
- How many to craft (Only shows if more than 1 is available)
|
||||
|
||||
### Smoke Craft Radial
|
||||
|
||||
Want to role-play as a hipster who rolls their own cigarettes? Or a stoner who is always keeping things packed? Or maybe you're just classy and only smoke from a pipe? Here's for you!
|
||||
|
||||
This Radial may be a bit niche, but hey we're just having fun!
|
||||
|
||||
**Default Key:** `\`
|
||||
|
||||
Shows on press
|
||||
|
||||
**Configuration:**
|
||||
- Show Dismantle Recipes (Smoke Craft)
|
||||
- Default: True
|
||||
- Shows Recipes to Break/Unpack Items
|
||||
- Show Cigarette Packs (Smoke Craft)
|
||||
- Default: False
|
||||
- Shows the Unpack actions on cigarettes
|
||||
- Amount To Craft (Smoke Craft)
|
||||
- Default: Ask
|
||||
- How many to craft (Only shows if more than 1 is available)
|
||||
|
||||
|
||||
### Equipment Radial
|
||||
|
||||
A Radial that shows equipped items from Head-to-Toe! Accessories, such as Glasses, Jewelry, etc, and items in your Hotbar are organized in a submenu to help declutter the Radial.
|
||||
|
||||
Selecting an item gives many of the same options as the Context Menu such as Unequiping, "Inspect" (shows the Insepct Window), any Recipes (configurable), Repairs, and item-specific interactions!
|
||||
|
||||
**Default Key:** `Tab`
|
||||
|
||||
Press and hold
|
||||
|
||||
**Configuration:**
|
||||
|
||||
- Show Drop Action (Equipment)
|
||||
- Default: True
|
||||
- Shows Option to Drop an item
|
||||
- Show Unavailable Repair Options (Equipment)
|
||||
- Default: False
|
||||
- Shows all Repair Recipes even if you don't have the items/skills
|
||||
- Show Extra Clothing Actions (Equipment)
|
||||
- Default: True
|
||||
- Shows "Extra Clothing Actions" on clothing Items (Putting up the Hood, Turning your hat, etc)
|
||||
- Show Recipes (Equipment)
|
||||
- Default: True
|
||||
- Shows available Recipes for an item
|
||||
|
||||
### Drink Radial
|
||||
|
||||
Shows available drinks on or around your character. There's a Zombie Apocolypse, no one will blame you for chugging that warm 2-liter of Orange Soda 90+ days in. Also perfect for an Alcoholic on-the-go who loves choice!
|
||||
|
||||
**Default Key:** `{`
|
||||
|
||||
**Quick Action:** Drink!
|
||||
|
||||
Drinks water or the first found drinkable in your inventory if you are Thirsty. If Water, drinks how much you need. Otherwise uses the "Amount to Quick Drink" setting.
|
||||
|
||||
**WARNING** Poisons **WILL** appear in the Radial and can be chosen for the Quick Action if your character doesn't know its Poisonous!!!!
|
||||
|
||||
**Configuration:**
|
||||
|
||||
- Amount to Drink (Drink)
|
||||
- Default: Ask
|
||||
- How much to Drink
|
||||
- Amount to Quick Drink (Drink)
|
||||
- Default: All
|
||||
- How much to Drink on Quick Action
|
||||
- Show Radial on Press (Drink)
|
||||
- Default: False
|
||||
- Shows the Drink Radial on Press. Disables the Quick Drink Action
|
||||
|
||||
### Food Radial
|
||||
|
||||
Shows available food on or around your character. We all get Snacky.
|
||||
|
||||
**Default Key:** `}`
|
||||
|
||||
**Quick Action:** Eat a Snack!
|
||||
|
||||
Eats the food item in your inventory that has the lowest Hunger Change.
|
||||
|
||||
**Configuration:**
|
||||
|
||||
- Amount to Eat (Food)
|
||||
- Default: Ask
|
||||
- How much to Eat
|
||||
- Amount to Quick Eat (Food)
|
||||
- Default: All
|
||||
- How much to Eat on Quick Action
|
||||
- Show Radial on Press (Food)
|
||||
- Default: False
|
||||
- Shows the Food Radial on Press. Disables the Quick Eat Action
|
||||
|
||||
### Pill Radial
|
||||
|
||||
Shows available pills on or around your character.
|
||||
|
||||
**Default Key:** `'`
|
||||
|
||||
**Quick Action:** Take Needed Pills
|
||||
|
||||
Takes the pills to control Moodlets! Supports "Pain Pills", "Vitamins", "Beta Blockers", and "Antidepressents". Will attempt to take ALL needed pills.
|
||||
|
||||
**Configuration:**
|
||||
- Show Radial on Press (Pills)
|
||||
- Default: False
|
||||
- Shows the Pill Radial on Press. Disables the Quick Pills Action
|
||||
|
||||
### Repair Radial
|
||||
|
||||
Shows available Repairs for items on or around your character.
|
||||
|
||||
**Default Key:** `N`
|
||||
|
||||
Shows on press
|
||||
|
||||
**Configuration:**
|
||||
|
||||
- Show Repairs on Equipped Items (Repair)
|
||||
- Default: False
|
||||
- Can instead be done from the Equipment Radial! Note, the items in your Hands will still show
|
||||
- Show Repairs for Items in Hotbar (Repair)
|
||||
- Default: False
|
||||
- Can instead be done from the Equipment Radial! Note, the items in your Hands will still show
|
||||
|
||||
### Smoke Radial
|
||||
|
||||
Shows available Smokeables on or around your character. A Lighter or Matches is required in order to display items.
|
||||
|
||||
**Default Key:** `Backspace`
|
||||
|
||||
**Quick Action:** AutoSmoke
|
||||
|
||||
If AutoSmoke is not enabled, there is no Quick Action
|
||||
|
||||
**Configuration:**
|
||||
|
||||
- Show Cigarette Butts (Smoke)
|
||||
- Default: False
|
||||
- Show Cigarette Butts if added by a Mod
|
||||
- Show Gum (Smoke)
|
||||
- Default: True
|
||||
- Show Nicotine Gum if added by a Mod
|
||||
- Show Radial on Press (Smoke)
|
||||
- Default: False
|
||||
- Shows the Smoke Radial on Press. Disables the AutoSmoke Quick Action
|
||||
|
||||
## Translations
|
||||
|
||||
English
|
||||
|
||||
Russian - fourteensix
|
||||
|
||||
If you would like to help with translations, please submit a Pull Request.
|
||||
|
||||
|
||||
```
|
||||
Workshop ID: 2802525922
|
||||
Mod ID: SpiffUI-Rads
|
||||
```
|
||||
BIN
SpiffUI-Radials/preview.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
136
SpiffUI-Radials/workshop.txt
Normal file
@@ -0,0 +1,136 @@
|
||||
version=1
|
||||
id=2802525922
|
||||
title=SpiffUI - Radials
|
||||
description=[h1]Supports B41+. Works in Multiplayer[/h1]
|
||||
description=[h3]A new save is not required[/h3]
|
||||
description=
|
||||
description=SpiffUI (pronounced "Spiffy") Radials adds 10 new Radial Menus for easy interactions with the objects that are in your inventories and the world. If a Radial is unavailable, your character will Say something. Items return to their original location when used.
|
||||
description=
|
||||
description=[b]Included Radials:[/b]
|
||||
description=[list]
|
||||
description=[*]Crafting Radial
|
||||
description=[*]Medical Craft Radial
|
||||
description=[*]Smoke Craft Radial
|
||||
description=[*]Equipment Radial
|
||||
description=[*]Drink Radial
|
||||
description=[*]Food Radial
|
||||
description=[*]Pill Radial
|
||||
description=[*]Repair Radial
|
||||
description=[*]Smoke Radial
|
||||
description=[*]SpiffUI Radial -- A quick way to access ALL of the Radials!
|
||||
description=[/list]
|
||||
description=
|
||||
description=Please see the Discussion [url=https://steamcommunity.com/workshop/filedetails/discussion/2802525922/3273564019257617796]SpiffUI Radials and their Configurations[/url] for further information on each Radial, including each keybind.
|
||||
description=
|
||||
description=[b]Possibly Next:[/b]
|
||||
description=[list]
|
||||
description=[*]Medical Radial - Would allow for quick access to any injuries.
|
||||
description=[*]Inspect Radial - Port the Inspect Window to a Radial (I have this somewhat working)
|
||||
description=[*]More Mod Compatibility
|
||||
description=[/list]
|
||||
description=
|
||||
description=Got an idea for a Radial or any features I missed? Let me know!
|
||||
description=
|
||||
description=[h2]Included Base Game Fixes[/h2]
|
||||
description=These are small tweaks to Base Game Actions that help the immersion of these Radials and the game overall.
|
||||
description=
|
||||
description=[b]ISFixAction[/b] - (Repair)
|
||||
description=[list]
|
||||
description=[*]Added an Animation when doing a Repair Action
|
||||
description=[/list]
|
||||
description=[b]ISWearAction[/b] - (Wear Clothes)
|
||||
description=[list]
|
||||
description=[*]Fixed the Rules for Equipping Clothes.
|
||||
description=[*]You can now walk and equip any upper-body pieces of clothing (ie. shirts).
|
||||
description=[*]Your character now stops walking for lower-body clothes (ie. shoes).
|
||||
description=[*]This matches how the Unequip Actions works for these items
|
||||
description=[/list]
|
||||
description=[b]ISClothingExtraActions[/b] - (Clothing Extra Actions)
|
||||
description=[list]
|
||||
description=[*]Fixed the Rules for Clothing Extra Actions similarly to the ISWearAction
|
||||
description=[*]Added time (Half the Equip Time) to show an Animation
|
||||
description=[/list]
|
||||
description=
|
||||
description=[h2]Controllers[/h2]
|
||||
description=Press UP on the D-PAD to show the Main SpiffUI Radial! Accessing options in each submenu is done by pressing "Up" on the D-PAD as well.
|
||||
description=
|
||||
description=[b]NOTE:[/b]This will ONLY work if your character is not in or near a car.
|
||||
description=
|
||||
description=[h2]Other Features:[/h2]
|
||||
description=
|
||||
description=[h3]Quick Actions[/h3]
|
||||
description=Some Radials have a "Quick Action" that is performed by a quick press of the key; the Radial is shown with a press and hold. Each available quick action is explained further in the description. If you set the Radial to "Show on Press" the Quick Action will be disabled.
|
||||
description=
|
||||
description=[h3]Amount to Eat/Drink/Craft[/h3]
|
||||
description=Some actions can be performed on part or all of the items when you use the context menu, and these Radials can too! A new Radial will appear asking to confirm how much if applicable.
|
||||
description=
|
||||
description=You can also specify an amount to always perform by default in the ModOptions.
|
||||
description=
|
||||
description=Quick Actions can only be set to an amount and will not ask.
|
||||
description=
|
||||
description=[h3]Radial Pages[/h3]
|
||||
description=The Radials will automatically paginate if enough items or recipes are available. "Next" and "Previous" buttons will become available when applicable.
|
||||
description=
|
||||
description=[h3]Tooltips[/h3]
|
||||
description=The Tooltips have been ported to show in these Radials for all Recipes, Items, and Repairs. When enabled, the item name does not appear in the middle of the Radial anymore. This was a design decision as often the name is too long. Besides, the name is in the Tooltip! The Tooltips can be disabled, but are recommended.
|
||||
description=
|
||||
description=[b]Known issue for the Recipe Tooltip:[/b] I modified this from the default to prevent the lag from having too many items. One side-effect of this is that sometimes an ingredient will be duplicated or listed in the wrong category. This ONLY affects the Tooltip, the Recipe works as intended.
|
||||
description=
|
||||
description=[h2]Recommended External Mods[/h2]
|
||||
description=Some Radials have external mod soft requirements listed below. Each Radial will work without any external mods, however, certain features and apparent usefulness are only available with other mods.
|
||||
description=[list]
|
||||
description=[*][b][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2643751872]AutoSmoke[/url] by NoctisFalco[/b]: It is highly recommended that you use have this mod to unlock the full Smoke Radial Menu. I use AutoSmoke's Actions to include support for the various cigarette mods in Smoke Radial. Without this mod, you will still be able to smoke cigarettes but will be unable to interact with packs in the Smoke Radial. Either AutoSmoke or [url=https://steamcommunity.com/sharedfiles/filedetails/?id=2691602472]AutoSmoke-Stable[/url] can be used.
|
||||
description=[*]Having AutoSmoke gives support for both [b][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2026976958]Smoker[/url] by Nebula[/b] and [b][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2396329386]More Cigarettes Mod[/url] by Madman_Andre[/b]. Using only ONE of these cigarette mods is recommended as well.
|
||||
description=[*][b][url=https://steamcommunity.com/sharedfiles/filedetails/?id=1703604612]jigga's Green Fire[/url] by jiggawut[/b]: Honestly, the reason I made the Smoke Craft Radial. This mod is one of my personal favorites. Adds items that populates the Smoke Craft Radial.
|
||||
description=[*][b][url=https://steamcommunity.com/sharedfiles/filedetails/?id=2799848602]SpiffUI - Inventory[/url][/b]: Modified behaviors to show and hide the Inventory Window, and part of SpiffUI!
|
||||
description=[/list]
|
||||
description=
|
||||
description=[h2]SpiffUI Configuration[/h2]
|
||||
description=
|
||||
description=[url=https://steamcommunity.com/workshop/filedetails/?id=2169435993]ModOptions[/url] is required for futher configuration, but the mod will function without.
|
||||
description=If ModOptions is installed (Recommended) SpiffUI will appear as a category. This is intended to have common configuration across all of SpiffUI, as well as tools to help configure the game to SpiffUI recommendations.
|
||||
description=
|
||||
description=[table]
|
||||
description=[tr]
|
||||
description=[th]Name[/th]
|
||||
description=[th]Default[/th]
|
||||
description=[th]Description[/th]
|
||||
description=[/tr]
|
||||
description=[tr]
|
||||
description=[td]Set SpiffUI Recommended Keybinds[/td]
|
||||
description=[td](None) It's a Button![/td]
|
||||
description=[td]Sets keybinds for built-in keys to recommended defaults. A dialog will ask confirming this change, and will display the changes it will make.[/td]
|
||||
description=[/tr]
|
||||
description=[tr]
|
||||
description=[td]Run All SpiffUI Resets[/td]
|
||||
description=[td](None) It's a Button![/td]
|
||||
description=[td]Runs all "Reset" functions for SpiffUI modules. A user is able to change where the UI is, its size, etc. This will set this to default. A dialog will ask confirming this change, and will display the changes it will make. PLEASE NOTE: This will only be usable in-game.[/td]
|
||||
description=[/tr]
|
||||
description=[/table]
|
||||
description=
|
||||
description=[h2]SpiffUI - Radials Configuration[/h2]
|
||||
description=
|
||||
description=[table]
|
||||
description=[tr]
|
||||
description=[th]Name[/th]
|
||||
description=[th]Default[/th]
|
||||
description=[th]Description[/th]
|
||||
description=[/tr]
|
||||
description=[tr]
|
||||
description=[td]Show Tooltips[/td]
|
||||
description=[td]True[/td]
|
||||
description=[td]Show Tooltips in Radial Menus for Items, Recipes, and Repairs (Recommended)[/td]
|
||||
description=[/tr]
|
||||
description=[tr]
|
||||
description=[td]Hide Crafting Button[/td]
|
||||
description=[td]True[/td]
|
||||
description=[td]Hides the Crafting button in the left sidemenu[/td]
|
||||
description=[/tr]
|
||||
description=[/table]
|
||||
description=
|
||||
description=Each Radial has its own Configuration as well. This is expanded upon in the Discussion [url=https://steamcommunity.com/workshop/filedetails/discussion/2802525922/3273564019257617796]SpiffUI Radials and their Configurations[/url].
|
||||
description=
|
||||
description=[h2]Translations[/h2]
|
||||
description=Item Names, Recipes, and others use the built-in translations; mods must include this. If you would like to contribute a translation, please submit a pull request on [url=https://github.com/hlfstr/pz-mods]GitHub![/url] I will happily give credit!
|
||||
tags=Build 41;Food;Interface;Silly/Fun
|
||||
visibility=public
|
||||