0% found this document useful (0 votes)
17 views3 pages

Message 2

Uploaded by

sleezyezzy09
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views3 pages

Message 2

Uploaded by

sleezyezzy09
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

-- Basic Inventory and Trading System

-- Services
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

-- Remote Events
local InventoryEvent = Instance.new("RemoteEvent")
InventoryEvent.Name = "InventoryEvent"
InventoryEvent.Parent = ReplicatedStorage

local TradeEvent = Instance.new("RemoteEvent")


TradeEvent.Name = "TradeEvent"
TradeEvent.Parent = ReplicatedStorage

-- Inventory Class
local Inventory = {}
Inventory.__index = Inventory

function Inventory.new()
local self = setmetatable({}, Inventory)
self.Items = {}
return self
end

function Inventory:AddItem(item)
table.insert(self.Items, item)
end

function Inventory:RemoveItem(itemName)
for i, item in ipairs(self.Items) do
if item.Name == itemName then
table.remove(self.Items, i)
break
end
end
end

function Inventory:GetItems()
return self.Items
end

-- Trade System
local TradeSystem = {}
TradeSystem.__index = TradeSystem

function TradeSystem.new()
local self = setmetatable({}, TradeSystem)
self.Trades = {}
return self
end

function TradeSystem:CreateTrade(player1, player2, items1, items2)


local tradeId = tostring(math.random(1000, 9999))
local trade = {
Id = tradeId,
Player1 = player1,
Player2 = player2,
Items1 = items1,
Items2 = items2,
Status = "Pending"
}
table.insert(self.Trades, trade)
return tradeId
end

function TradeSystem:GetTrade(tradeId)
for _, trade in ipairs(self.Trades) do
if trade.Id == tradeId then
return trade
end
end
return nil
end

-- Player Inventory and Trade Management


local playerInventories = {}
local tradeSystem = TradeSystem.new()

local function GetPlayerInventory(player)


if not playerInventories[player.UserId] then
local inventory = Inventory.new()
playerInventories[player.UserId] = inventory
end
return playerInventories[player.UserId]
end

local function OnInventoryRequest(player)


local inventory = GetPlayerInventory(player)
InventoryEvent:FireClient(player, "UpdateInventory", inventory:GetItems())
end

local function OnItemAddRequest(player, item)


local inventory = GetPlayerInventory(player)
inventory:AddItem(item)
InventoryEvent:FireClient(player, "UpdateInventory", inventory:GetItems())
end

local function OnItemRemoveRequest(player, itemName)


local inventory = GetPlayerInventory(player)
inventory:RemoveItem(itemName)
InventoryEvent:FireClient(player, "UpdateInventory", inventory:GetItems())
end

local function OnTradeCreateRequest(player1, player2, items1, items2)


local tradeId = tradeSystem:CreateTrade(player1.UserId, player2.UserId, items1,
items2)
TradeEvent:FireClient(player1, "TradeCreated", tradeId)
TradeEvent:FireClient(player2, "TradeCreated", tradeId)
end

local function OnTradeAcceptRequest(player, tradeId)


local trade = tradeSystem:GetTrade(tradeId)
if trade and trade.Status == "Pending" then
trade.Status = "Accepted"
TradeEvent:FireClient(player, "TradeAccepted", tradeId)
local otherPlayer = Players:GetPlayerByUserId(trade.Player1 ==
player.UserId and trade.Player2 or trade.Player1)
if otherPlayer then
TradeEvent:FireClient(otherPlayer, "TradeAccepted", tradeId)
end
else
TradeEvent:FireClient(player, "TradeAcceptFailed", tradeId)
end
end

local function OnTradeRejectRequest(player, tradeId)


local trade = tradeSystem:GetTrade(tradeId)
if trade and trade.Status == "Pending" then
trade.Status = "Rejected"
TradeEvent:FireClient(player, "TradeRejected", tradeId)
local otherPlayer = Players:GetPlayerByUserId(trade.Player1 ==
player.UserId and trade.Player2 or trade.Player1)
if otherPlayer then
TradeEvent:FireClient(otherPlayer, "TradeRejected", tradeId)
end
else
TradeEvent:FireClient(player, "TradeRejectFailed", tradeId)
end
end

-- Player Added Event


Players.PlayerAdded:Connect(function(player)
-- Initialize player inventory
GetPlayerInventory(player)

-- Listen to RemoteEvents from client


InventoryEvent.OnServerEvent:Connect(function(player, action, data)
if action == "RequestInventory" then
OnInventoryRequest(player)
elseif action == "AddItem" then
OnItemAddRequest(player, data)
elseif action == "RemoveItem" then
OnItemRemoveRequest(player, data)
end
end)

TradeEvent.OnServerEvent:Connect(function(player, action, data)


if action == "CreateTrade" then
local player2 = Players:GetPlayerByUserId(data.Player2Id)
if player2 then
OnTradeCreateRequest(player, player2, data.Items1, data.Items2)
end
elseif action == "AcceptTrade" then
OnTradeAcceptRequest(player, data.TradeId)
elseif action == "RejectTrade" then
OnTradeRejectRequest(player, data.TradeId)
end
end)
end)

-- Player Removing Event


Players.PlayerRemoving:Connect(function(player)
playerInventories[player.UserId] = nil
end)

You might also like