summaryrefslogtreecommitdiffstats
path: root/MCServer/Plugins/Core/give.lua
diff options
context:
space:
mode:
Diffstat (limited to 'MCServer/Plugins/Core/give.lua')
-rw-r--r--MCServer/Plugins/Core/give.lua74
1 files changed, 50 insertions, 24 deletions
diff --git a/MCServer/Plugins/Core/give.lua b/MCServer/Plugins/Core/give.lua
index d1c7ae59f..ba3a1eb41 100644
--- a/MCServer/Plugins/Core/give.lua
+++ b/MCServer/Plugins/Core/give.lua
@@ -1,39 +1,65 @@
function HandleGiveCommand(Split, Player)
- if ((#Split ~= 2) and (#Split ~=3)) then
- Player:SendMessage(cChatColor.Yellow .. "[INFO] " .. cChatColor.White .. "Usage: /give [ItemType/Name:Dmg] <Amount>" );
- return true;
+
+ -- Make sure there are a correct number of arguments.
+ if #Split ~= 3 and #Split ~= 4 and #Split ~= 5 then
+ Player:SendMessage( cChatColor.Yellow .. "[INFO] " .. cChatColor.White .. "Usage: /give <player> <item> [amount] [meta]" )
+ return true
end
- local Item = cItem();
- local FoundItem = StringToItem(Split[2], Item);
-
- if not(IsValidItem(Item.m_ItemType)) then -- StringToItem does not check if item is valid
+ -- Get the item from the arguments and check it's valid.
+ local Item = cItem()
+ if #Split == 5 then
+ local FoundItem = StringToItem(Split[3] .. ":" .. Split[5], Item)
+ else
+ local FoundItem = StringToItem(Split[3], Item)
+ end
+ if not IsValidItem(Item.m_ItemType) then -- StringToItem does not check if item is valid
FoundItem = false
end
- if not(FoundItem) then
+ if not FoundItem then
Player:SendMessage(cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "Invalid item id or name!" )
return true
end
- local ItemAmount = 1;
- if (#Split == 3) then
- ItemAmount = tonumber(Split[3]);
- if ((ItemAmount == nil) or (ItemAmount < 1) or (ItemAmount > 512)) then
- Player:SendMessage(cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "Invalid amount!" );
- return true;
+ -- Work out how many items the user wants.
+ local ItemAmount = 1
+ if #Split > 3 then
+ ItemAmount = tonumber(Split[4])
+ if ItemAmount == nil or ItemAmount < 1 or ItemAmount > 512 then
+ Player:SendMessage(cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "Invalid amount!" )
+ return true
end
end
- Item.m_ItemCount = ItemAmount;
+ Item.m_ItemCount = ItemAmount
- local ItemsGiven = Player:GetInventory():AddItem(Item);
- if (ItemsGiven == ItemAmount) then
- Player:SendMessage(cChatColor.Green .. "[INFO] " .. cChatColor.White .. "There you go!" );
- LOG("Gave " .. Player:GetName() .. " " .. Item.m_ItemCount .. " times " .. Item.m_ItemType .. ":" .. Item.m_ItemDamage);
- else
- Player:SendMessage(cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "Not enough space in inventory, only gave " .. ItemsGiven);
- LOG("Player " .. Player:GetName() .. " asked for " .. Item.m_ItemCount .. " times " .. Item.m_ItemType .. ":" .. Item.m_ItemDamage ..", but only could fit " .. ItemsGiven);
+ -- Get the playername from the split.
+ local playerName = Split[2]
+
+ local function giveItems(newPlayer)
+ local ItemsGiven = newPlayer:GetInventory():AddItem(Item)
+ if ItemsGiven == ItemAmount then
+ newPlayer:SendMessage(cChatColor.Green .. "[INFO] " .. cChatColor.White .. "You were given " .. Item.m_ItemCount .. " of " .. Item.m_ItemType .. "." )
+ if not newPlayer == Player then
+ Player:SendMessage(cChatColor.Green .. "[INFO] " .. cChatColor.White .. "Items given!" )
+ end
+ LOG("Gave " .. newPlayer:GetName() .. " " .. Item.m_ItemCount .. " times " .. Item.m_ItemType .. ":" .. Item.m_ItemDamage)
+ else
+ Player:SendMessage( cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "Not enough space in inventory, only gave " .. ItemsGiven)
+ LOG( "Player " .. Player:GetName() .. " asked for " .. Item.m_ItemCount .. " times " .. Item.m_ItemType .. ":" .. Item.m_ItemDamage ..", but only could fit " .. ItemsGiven )
+ end
+ return true
+ end
+
+ -- Finally give the items to the player.
+ itemStatus = cRoot:Get():FindAndDoWithPlayer(playerName, giveItems)
+
+ -- Check to make sure that giving items was successful.
+ if not itemStatus then
+ Player:SendMessage( cChatColor.Rose .. "[INFO] " .. cChatColor.White .. "There was no player that matched your query.")
end
- return true;
-end \ No newline at end of file
+
+ return true
+
+end