Merge branch 'Inventory2'
This commit is contained in:
commit
76b33970b0
@ -1155,6 +1155,7 @@ These ItemGrids are available in the API and can be manipulated by the plugins,
|
|||||||
HasItems = { Params = "{{cItem|cItem}}", Return = "bool", Notes = "Returns true if there are at least as many items of the specified type as in the parameter" },
|
HasItems = { Params = "{{cItem|cItem}}", Return = "bool", Notes = "Returns true if there are at least as many items of the specified type as in the parameter" },
|
||||||
HowManyCanFit = { Params = "{{cItem|cItem}}", Return = "number", Notes = "Returns the number of the specified items that can fit in the storage, including empty slots" },
|
HowManyCanFit = { Params = "{{cItem|cItem}}", Return = "number", Notes = "Returns the number of the specified items that can fit in the storage, including empty slots" },
|
||||||
HowManyItems = { Params = "{{cItem|cItem}}", Return = "number", Notes = "Returns the number of the specified items that are currently stored" },
|
HowManyItems = { Params = "{{cItem|cItem}}", Return = "number", Notes = "Returns the number of the specified items that are currently stored" },
|
||||||
|
RemoveItem = { Params = "{{cItem}}", Return = "number", Notes = "Removes the specified item from the inventory, as many as possible, up to the item's m_ItemCount. Returns the number of items that were removed." },
|
||||||
RemoveOneEquippedItem = { Params = "", Return = "", Notes = "Removes one item from the hotbar's currently selected slot" },
|
RemoveOneEquippedItem = { Params = "", Return = "", Notes = "Removes one item from the hotbar's currently selected slot" },
|
||||||
SetArmorSlot = { Params = "ArmorSlotNum, {{cItem|cItem}}", Return = "", Notes = "Sets the specified armor slot contents" },
|
SetArmorSlot = { Params = "ArmorSlotNum, {{cItem|cItem}}", Return = "", Notes = "Sets the specified armor slot contents" },
|
||||||
SetEquippedSlotNum = { Params = "EquippedSlotNum", Return = "", Notes = "Sets the currently selected hotbar slot number" },
|
SetEquippedSlotNum = { Params = "EquippedSlotNum", Return = "", Notes = "Sets the currently selected hotbar slot number" },
|
||||||
@ -1384,6 +1385,7 @@ local Item5 = cItem(E_ITEM_DIAMOND_CHESTPLATE, 1, 0, "thorns=1;unbreaking=3");
|
|||||||
{ Params = "SlotNum", Return = "bool", Notes = "Returns true if the specified slot is empty, or an invalid slot is specified" },
|
{ Params = "SlotNum", Return = "bool", Notes = "Returns true if the specified slot is empty, or an invalid slot is specified" },
|
||||||
{ Params = "X, Y", Return = "bool", Notes = "Returns true if the specified slot is empty, or an invalid slot is specified" },
|
{ Params = "X, Y", Return = "bool", Notes = "Returns true if the specified slot is empty, or an invalid slot is specified" },
|
||||||
},
|
},
|
||||||
|
RemoveItem = { Params = "{{cItem}}", Return = "number", Notes = "Removes the specified item from the grid, as many as possible, up to the item's m_ItemCount. Returns the number of items that were removed." },
|
||||||
RemoveOneItem =
|
RemoveOneItem =
|
||||||
{
|
{
|
||||||
{ Params = "SlotNum", Return = "{{cItem|cItem}}", Notes = "Removes one item from the stack in the specified slot and returns it as a single cItem. Empty slots are skipped and an empty item is returned" },
|
{ Params = "SlotNum", Return = "{{cItem|cItem}}", Notes = "Removes one item from the stack in the specified slot and returns it as a single cItem. Empty slots are skipped and an empty item is returned" },
|
||||||
|
@ -60,9 +60,10 @@ function Initialize(Plugin)
|
|||||||
PM:BindCommand("/ff", "debuggers", HandleFurnaceFuel, "- Shows how long the currently held item would burn in a furnace");
|
PM:BindCommand("/ff", "debuggers", HandleFurnaceFuel, "- Shows how long the currently held item would burn in a furnace");
|
||||||
PM:BindCommand("/sched", "debuggers", HandleSched, "- Schedules a simple countdown using cWorld:ScheduleTask()");
|
PM:BindCommand("/sched", "debuggers", HandleSched, "- Schedules a simple countdown using cWorld:ScheduleTask()");
|
||||||
PM:BindCommand("/cs", "debuggers", HandleChunkStay, "- Tests the ChunkStay Lua integration for the specified chunk coords");
|
PM:BindCommand("/cs", "debuggers", HandleChunkStay, "- Tests the ChunkStay Lua integration for the specified chunk coords");
|
||||||
PM:BindCommand("/compo", "debuggers", HandleCompo, "- Tests the cCompositeChat bindings")
|
PM:BindCommand("/compo", "debuggers", HandleCompo, "- Tests the cCompositeChat bindings");
|
||||||
PM:BindCommand("/sb", "debuggers", HandleSetBiome, "- Sets the biome around you to the specified one")
|
PM:BindCommand("/sb", "debuggers", HandleSetBiome, "- Sets the biome around you to the specified one");
|
||||||
PM:BindCommand("/wesel", "debuggers", HandleWESel, "- Expands the current WE selection by 1 block in X/Z")
|
PM:BindCommand("/wesel", "debuggers", HandleWESel, "- Expands the current WE selection by 1 block in X/Z");
|
||||||
|
PM:BindCommand("/rmitem", "debuggers", HandleRMItem, "- Remove the specified item from the inventory.");
|
||||||
|
|
||||||
Plugin:AddWebTab("Debuggers", HandleRequest_Debuggers)
|
Plugin:AddWebTab("Debuggers", HandleRequest_Debuggers)
|
||||||
Plugin:AddWebTab("StressTest", HandleRequest_StressTest)
|
Plugin:AddWebTab("StressTest", HandleRequest_StressTest)
|
||||||
@ -533,7 +534,7 @@ function OnTakeDamage(Receiver, TDI)
|
|||||||
-- Receiver is cPawn
|
-- Receiver is cPawn
|
||||||
-- TDI is TakeDamageInfo
|
-- TDI is TakeDamageInfo
|
||||||
|
|
||||||
LOG(Receiver:GetClass() .. " was dealt " .. DamageTypeToString(TDI.DamageType) .. " damage: Raw " .. TDI.RawDamage .. ", Final " .. TDI.FinalDamage .. " (" .. (TDI.RawDamage - TDI.FinalDamage) .. " covered by armor)");
|
-- LOG(Receiver:GetClass() .. " was dealt " .. DamageTypeToString(TDI.DamageType) .. " damage: Raw " .. TDI.RawDamage .. ", Final " .. TDI.FinalDamage .. " (" .. (TDI.RawDamage - TDI.FinalDamage) .. " covered by armor)");
|
||||||
return false;
|
return false;
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1105,6 +1106,41 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function HandleRMItem(a_Split, a_Player)
|
||||||
|
-- Check params:
|
||||||
|
if (a_Split[2] == nil) then
|
||||||
|
a_Player:SendMessage("Usage: /rmitem <Item> [Count]")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Parse the item type:
|
||||||
|
local Item = cItem()
|
||||||
|
if (not StringToItem(a_Split[2], Item)) then
|
||||||
|
a_Player:SendMessageFailure(a_Split[2] .. " isn't a valid item")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Parse the optional item count
|
||||||
|
if (a_Split[3] ~= nil) then
|
||||||
|
local Count = tonumber(a_Split[3])
|
||||||
|
if (Count == nil) then
|
||||||
|
a_Player:SendMessageFailure(a_Split[3] .. " isn't a valid number")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
Item.m_ItemCount = Count
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Remove the item:
|
||||||
|
local NumRemovedItems = a_Player:GetInventory():RemoveItem(Item)
|
||||||
|
a_Player:SendMessageSuccess("Removed " .. NumRemovedItems .. " Items!")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function HandleRequest_Debuggers(a_Request)
|
function HandleRequest_Debuggers(a_Request)
|
||||||
local FolderContents = cFile:GetFolderContents("./");
|
local FolderContents = cFile:GetFolderContents("./");
|
||||||
return "<p>The following objects have been returned by cFile:GetFolderContents():<ul><li>" .. table.concat(FolderContents, "</li><li>") .. "</li></ul></p>";
|
return "<p>The following objects have been returned by cFile:GetFolderContents():<ul><li>" .. table.concat(FolderContents, "</li><li>") .. "</li></ul></p>";
|
||||||
|
@ -151,6 +151,24 @@ int cInventory::AddItems(cItems & a_ItemStackList, bool a_AllowNewStacks, bool a
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cInventory::RemoveItem(const cItem & a_ItemStack)
|
||||||
|
{
|
||||||
|
int RemovedItems = m_HotbarSlots.RemoveItem(a_ItemStack);
|
||||||
|
|
||||||
|
if (RemovedItems < a_ItemStack.m_ItemCount)
|
||||||
|
{
|
||||||
|
cItem Temp(a_ItemStack);
|
||||||
|
Temp.m_ItemCount -= RemovedItems;
|
||||||
|
RemovedItems += m_InventorySlots.RemoveItem(Temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RemovedItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cInventory::RemoveOneEquippedItem(void)
|
bool cInventory::RemoveOneEquippedItem(void)
|
||||||
{
|
{
|
||||||
if (m_HotbarSlots.GetSlot(m_EquippedSlotNum).IsEmpty())
|
if (m_HotbarSlots.GetSlot(m_EquippedSlotNum).IsEmpty())
|
||||||
|
@ -86,6 +86,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
int AddItems(cItems & a_ItemStackList, bool a_AllowNewStacks, bool a_tryToFillEquippedFirst);
|
int AddItems(cItems & a_ItemStackList, bool a_AllowNewStacks, bool a_tryToFillEquippedFirst);
|
||||||
|
|
||||||
|
/** Removes the specified item from the inventory, as many as possible, up to a_ItemStack.m_ItemCount.
|
||||||
|
Returns the number of items that were removed. */
|
||||||
|
int RemoveItem(const cItem & a_ItemStack);
|
||||||
|
|
||||||
/** Removes one item out of the currently equipped item stack, returns true if successful, false if empty-handed */
|
/** Removes one item out of the currently equipped item stack, returns true if successful, false if empty-handed */
|
||||||
bool RemoveOneEquippedItem(void);
|
bool RemoveOneEquippedItem(void);
|
||||||
|
|
||||||
|
@ -345,6 +345,39 @@ int cItemGrid::AddItems(cItems & a_ItemStackList, bool a_AllowNewStacks, int a_P
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cItemGrid::RemoveItem(const cItem & a_ItemStack)
|
||||||
|
{
|
||||||
|
int NumLeft = a_ItemStack.m_ItemCount;
|
||||||
|
|
||||||
|
for (int i = 0; i < m_NumSlots; i++)
|
||||||
|
{
|
||||||
|
if (NumLeft <= 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_Slots[i].IsEqual(a_ItemStack))
|
||||||
|
{
|
||||||
|
int NumToRemove = std::min(NumLeft, (int)m_Slots[i].m_ItemCount);
|
||||||
|
NumLeft -= NumToRemove;
|
||||||
|
m_Slots[i].m_ItemCount -= NumToRemove;
|
||||||
|
|
||||||
|
if (m_Slots[i].m_ItemCount <= 0)
|
||||||
|
{
|
||||||
|
m_Slots[i].Empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
TriggerListeners(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (a_ItemStack.m_ItemCount - NumLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cItemGrid::ChangeSlotCount(int a_SlotNum, int a_AddToCount)
|
int cItemGrid::ChangeSlotCount(int a_SlotNum, int a_AddToCount)
|
||||||
{
|
{
|
||||||
if ((a_SlotNum < 0) || (a_SlotNum >= m_NumSlots))
|
if ((a_SlotNum < 0) || (a_SlotNum >= m_NumSlots))
|
||||||
|
@ -97,6 +97,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
int AddItems(cItems & a_ItemStackList, bool a_AllowNewStacks = true, int a_PrioritarySlot = -1);
|
int AddItems(cItems & a_ItemStackList, bool a_AllowNewStacks = true, int a_PrioritarySlot = -1);
|
||||||
|
|
||||||
|
/** Removes the specified item from the grid, as many as possible, up to a_ItemStack.m_ItemCount.
|
||||||
|
Returns the number of items that were removed. */
|
||||||
|
int RemoveItem(const cItem & a_ItemStack);
|
||||||
|
|
||||||
/** Adds (or subtracts, if a_AddToCount is negative) to the count of items in the specified slot.
|
/** Adds (or subtracts, if a_AddToCount is negative) to the count of items in the specified slot.
|
||||||
If the slot is empty, ignores the call.
|
If the slot is empty, ignores the call.
|
||||||
Returns the new count.
|
Returns the new count.
|
||||||
|
Loading…
Reference in New Issue
Block a user