Difference between revisions of "Cycle Inventory Items (CMS)"

From The Official Visionaire Studio: Adventure Game Engine Wiki
m
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{| class="wikitable" style="width:100%"
+
{| class="ts" style="width:100%"
 
|-
 
|-
 
! style="text-align:left" | Name !! style="text-align:left" | Type !! style="text-align:left" | By
 
! style="text-align:left" | Name !! style="text-align:left" | Type !! style="text-align:left" | By
 
|-
 
|-
| Replace Item Function || Definition || AFRLme
+
| Cycle Inventory Items || Definition || [https://www.patreon.com/AFRLme AFRLme]
 
|}
 
|}
  
This script allows you to replace one item with another while keeping the items position in the inventory. This script is especially useful for when you are replacing a manipulated item such as an empty bucket that has just been filled with water. By default Visionaire Studio would add the new item to the end of the inventory.
+
This script allows you to cycle through the items in your inventory system.
  
 
== Instructions ==
 
== Instructions ==
1. Add the [[#Main_Script|main script]] to the Visionaire Studio Script Editor & set the script as a definition script.<br/>
+
1. Add the [[#Main_Script|main script]] to the Visionaire Studio Script Editor & set the script as a definition script.<br />
2. To use this function you have to include both the names of the item you want to replace, & the item that that you will be replacing it with; item names are case & character sensitive.
+
2. Edit the '''slots = 0''' value inside of the script to the amount of inventory slots you added to your interface.<br />
<syntaxhighlight>
+
3. By default the script will only allow you to cycle the inventory items when the amount of items in the inventory equals the same or greater than the amount of inventory slots. You can toggle between the default mode & always cycle by creating an ''execute a script'' action containing:
replaceItem("empty_bucket", "bucket_of_water")
+
<syntaxhighlight lang="lua">
 +
toggleCycleMode()
 +
</syntaxhighlight>
 +
4. To cycle inventory items forward (ascending) you should create an ''execute a script'' action containing:
 +
<syntaxhighlight lang="lua">
 +
cycleItems(true)
 +
</syntaxhighlight>
 +
5. To cycle inventory items backwards (descending) you should create an ''execute a script'' action containing:
 +
<syntaxhighlight lang="lua">
 +
cycleItems(false)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Main Script ==
 
== Main Script ==
<syntaxhighlight>
+
<syntaxhighlight lang="lua">
 
--[[
 
--[[
Replace item function [v1] (31/05/2014)
+
Cycle inventory items by ascending or descending order [v2] (12/02/2014)
 
Written by AFRLme [Lee Clarke]
 
Written by AFRLme [Lee Clarke]
 
-- + --
 
-- + --
Line 28: Line 37:
 
--]]
 
--]]
  
-- * tables * --
+
-- * local variables * --
local itm = {} -- creates an empty table
+
local char, items, item, amt -- empty variables
itm["_temporary_"] = "" -- set the table as temporary (we don't want it to store any data in the save files)
+
local slots = 0 -- define inventory slot amount here
 +
local cycle = false -- false = only cycle inventory when item amount equals same as or more than inventory slots. true = always cycle
 +
 
 +
-- * function for changing cycle mode * --
 +
function toggleCycleMode()
 +
if cycle then cycle = false else cycle = true end
 +
end
  
-- * function for swapping 2 items while keeping the position of the current item * --
+
-- * function for cycling through the inventory items * --
function replaceItem( init, repl )
+
function cycleItems(asc)
  itm["gItm"] = game:getLinks(VGameItems) -- get all game items & store them in a table
+
  char = game:getLink(VGameCurrentCharacter) -- store current character
  itm["cItm"] = game:getLink(VGameCurrentCharacter):getLinks(VCharacterItems) -- get all character items & store them in a table
+
  items = char:getLinks(VCharacterItems) -- store inventory items into a table
  itm["rItm"] = nil
+
  amt = table.maxn(items) -- get index number of last item
-- + --
+
if cycle or amt >= slots then
for i = 1, #(itm.gItm) do -- run a check to see if replacement item exists in game item table & if so, store item link in variable
+
   if asc then item = items[amt]; table.remove(items, amt); table.insert(items, 1, item) else item = items[1]; table.remove(items, 1); table.insert(items, (table.maxn(items)+1), item) end
   if itm.gItm[i]:getName() == repl then itm["rItm"] = getObject("Game.GameItems[" .. repl .. "]") break end
+
  char:setValue(VCharacterItems, items) -- update the inventory
 
  end
 
  end
-- + --
 
for j = 1, #(itm.cItm) do -- if initial item exists and rItm is not empty then replace init item with replacement item
 
  if itm.cItm[j]:getName() == init and itm.rItm ~= nil then itm.cItm[j] = itm.rItm break end
 
end
 
-- + --
 
if itm.rItm ~= nil then game:getLink(VGameCurrentCharacter):setValue(VCharacterItems, itm.cItm) end -- update character items
 
 
end
 
end
</syntaxhighlight>
+
</syntaxhighlight>{{toc}}

Revision as of 16:44, 13 June 2018

Name Type By
Cycle Inventory Items Definition AFRLme

This script allows you to cycle through the items in your inventory system.

Instructions

1. Add the main script to the Visionaire Studio Script Editor & set the script as a definition script.
2. Edit the slots = 0 value inside of the script to the amount of inventory slots you added to your interface.
3. By default the script will only allow you to cycle the inventory items when the amount of items in the inventory equals the same or greater than the amount of inventory slots. You can toggle between the default mode & always cycle by creating an execute a script action containing:

toggleCycleMode()

4. To cycle inventory items forward (ascending) you should create an execute a script action containing:

cycleItems(true)

5. To cycle inventory items backwards (descending) you should create an execute a script action containing:

cycleItems(false)

Main Script

--[[
Cycle inventory items by ascending or descending order [v2] (12/02/2014)
Written by AFRLme [Lee Clarke]
-- + --
alternatingfrequencies@hotmail.com | skype @ AFRLme
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]

-- * local variables * --
local char, items, item, amt -- empty variables
local slots = 0 -- define inventory slot amount here
local cycle = false -- false = only cycle inventory when item amount equals same as or more than inventory slots. true = always cycle

-- * function for changing cycle mode * --
function toggleCycleMode()
 if cycle then cycle = false else cycle = true end
end

-- * function for cycling through the inventory items * --
function cycleItems(asc)
 char = game:getLink(VGameCurrentCharacter) -- store current character
 items = char:getLinks(VCharacterItems) -- store inventory items into a table
 amt = table.maxn(items) -- get index number of last item
 if cycle or amt >= slots then
  if asc then item = items[amt]; table.remove(items, amt); table.insert(items, 1, item) else item = items[1]; table.remove(items, 1); table.insert(items, (table.maxn(items)+1), item) end
  char:setValue(VCharacterItems, items) -- update the inventory
 end
end