mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
198 lines
5.7 KiB
Lua
198 lines
5.7 KiB
Lua
--[[
|
||
| This file was obtained through the combined efforts
|
||
| of Madbluntz & Plymouth Antiquarian Society.
|
||
|
|
||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||
| Maloy, DrPepper10 @ RIP, Atle!
|
||
|
|
||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||
--]]
|
||
|
||
|
||
local PLUGIN = PLUGIN
|
||
|
||
util.AddNetworkString("ixCreateCustomItem")
|
||
util.AddNetworkString("ixNetworkCustomItemCreation")
|
||
util.AddNetworkString("ixRequestCustomItems")
|
||
util.AddNetworkString("ixDeleteCustomItem")
|
||
|
||
function PLUGIN:DeleteItemFromDatabase(itemID)
|
||
local query = mysql:Delete("ix_items")
|
||
query:Where("unique_id", itemID)
|
||
query:Execute()
|
||
end
|
||
|
||
net.Receive("ixCreateCustomItem", function(_, client)
|
||
if (!CAMI.PlayerHasAccess(client, "Helix - Create Custom Script")) then return end
|
||
|
||
local data = {
|
||
base = net.ReadString(),
|
||
uniqueID = net.ReadString(),
|
||
name = net.ReadString(),
|
||
description = net.ReadString(),
|
||
model = net.ReadString(),
|
||
skin = net.ReadUInt(5),
|
||
category = net.ReadString(),
|
||
iconCam = net.ReadString(),
|
||
material = net.ReadString(),
|
||
width = net.ReadUInt(5),
|
||
height = net.ReadUInt(5),
|
||
color = net.ReadColor(),
|
||
rotate = net.ReadBool(),
|
||
maxStackSize = net.ReadUInt(8),
|
||
hunger = net.ReadUInt(8),
|
||
thirst = net.ReadUInt(8),
|
||
spoilTime = net.ReadUInt(6),
|
||
damage = net.ReadUInt(8),
|
||
health = net.ReadUInt(8),
|
||
amount = net.ReadUInt(7)
|
||
}
|
||
|
||
for key, value in pairs(data) do
|
||
if (!isstring(value)) then continue end
|
||
|
||
data[key] = string.Trim(value)
|
||
end
|
||
|
||
if (data.uniqueID == "") then return end
|
||
if (ix.item.list[data.uniqueID]) then return end
|
||
|
||
local base = data.base
|
||
local iconCam = data.iconCam
|
||
|
||
if (data.base == "No Base") then
|
||
base = nil
|
||
end
|
||
|
||
if (data.iconCam == "") then
|
||
iconCam = nil
|
||
else
|
||
iconCam = util.JSONToTable(iconCam)
|
||
end
|
||
|
||
data.uniqueID = string.Replace(data.uniqueID, " ", "_")
|
||
|
||
local ITEM = ix.item.Register(data.uniqueID, base, false, nil, true)
|
||
ITEM.name = data.name
|
||
ITEM.description = data.description
|
||
ITEM.model = data.model
|
||
ITEM.skin = data.skin
|
||
ITEM.category = data.category
|
||
ITEM.iconCam = iconCam
|
||
ITEM.material = data.material
|
||
ITEM.width = data.width
|
||
ITEM.height = data.height
|
||
ITEM.color = data.color
|
||
ITEM.rotate = data.rotate
|
||
ITEM.maxStackSize = data.maxStackSize
|
||
ITEM.hunger = data.hunger
|
||
ITEM.thirst = data.thirst
|
||
ITEM.spoilTime = data.spoilTime
|
||
ITEM.damage = data.damage
|
||
ITEM.health = data.health
|
||
ITEM.amount = data.amount -- Credits. lol
|
||
ITEM.customItem = true
|
||
|
||
net.Start("ixNetworkCustomItemCreation")
|
||
net.WriteString(data.base)
|
||
net.WriteString(data.uniqueID)
|
||
net.WriteString(data.name)
|
||
net.WriteString(data.description)
|
||
net.WriteString(data.model)
|
||
net.WriteUInt(data.skin, 5)
|
||
net.WriteString(data.category)
|
||
net.WriteString(data.iconCam)
|
||
net.WriteString(data.material)
|
||
net.WriteUInt(data.width, 5)
|
||
net.WriteUInt(data.height, 5)
|
||
net.WriteColor(data.color)
|
||
net.WriteBool(data.rotate)
|
||
net.WriteUInt(data.maxStackSize, 8)
|
||
net.WriteUInt(data.hunger, 8)
|
||
net.WriteUInt(data.thirst, 8)
|
||
net.WriteUInt(data.spoilTime, 6)
|
||
net.WriteUInt(data.damage, 8)
|
||
net.WriteUInt(data.health, 8)
|
||
net.WriteUInt(data.amount, 7)
|
||
net.Broadcast()
|
||
|
||
file.CreateDir("customitems")
|
||
file.Write("customitems/" .. data.uniqueID .. ".json", util.TableToJSON(data))
|
||
|
||
-- Timer probably isn't needed, but I like to give it some space just in case.
|
||
timer.Simple(1, function()
|
||
if (!client:GetCharacter():GetInventory():Add(data.uniqueID)) then
|
||
ix.item.Spawn(data.uniqueID, client)
|
||
end
|
||
end)
|
||
|
||
client:Notify("\"" .. data.name .. "\" başarılı bir şekilde yaratıldı. Bulmak için Item Spawner'ı yenileyin.")
|
||
end)
|
||
|
||
net.Receive("ixRequestCustomItems", function(_, client)
|
||
if (client.receivedItems) then return end -- Avoid spam
|
||
|
||
local files, _ = file.Find("customitems/*", "DATA")
|
||
local itemList = {}
|
||
|
||
for _, itemFile in ipairs(files) do
|
||
local item = util.JSONToTable(file.Read("customitems/" .. itemFile, "DATA") or "")
|
||
if (!item) then continue end
|
||
|
||
itemList[#itemList + 1] = item
|
||
end
|
||
|
||
for k, data in ipairs(itemList) do
|
||
timer.Simple(1 * k, function()
|
||
net.Start("ixNetworkCustomItemCreation")
|
||
net.WriteString(data.base)
|
||
net.WriteString(data.uniqueID)
|
||
net.WriteString(data.name)
|
||
net.WriteString(data.description)
|
||
net.WriteString(data.model)
|
||
net.WriteUInt(data.skin, 5)
|
||
net.WriteString(data.category)
|
||
net.WriteString(data.iconCam)
|
||
net.WriteString(data.material)
|
||
net.WriteUInt(data.width, 5)
|
||
net.WriteUInt(data.height, 5)
|
||
net.WriteColor(IsColor(data.color) and data.color or istable(data.color) and Color(data.color.r, data.color.g, data.color.b) or Color(255, 255, 255))
|
||
net.WriteBool(data.rotate)
|
||
net.WriteUInt(data.maxStackSize, 8)
|
||
net.WriteUInt(data.hunger, 8)
|
||
net.WriteUInt(data.thirst, 8)
|
||
net.WriteUInt(data.spoilTime, 6)
|
||
net.WriteUInt(data.damage, 8)
|
||
net.WriteUInt(data.health, 8)
|
||
net.WriteUInt(data.amount, 7)
|
||
net.Send(client)
|
||
end)
|
||
end
|
||
|
||
client.receivedItems = true
|
||
end)
|
||
|
||
net.Receive("ixDeleteCustomItem", function(_, client)
|
||
if (!CAMI.PlayerHasAccess(client, "Helix - Create Custom Script")) then return end
|
||
|
||
local itemID = net.ReadString()
|
||
local item = ix.item.list[itemID]
|
||
|
||
if (!item) then return end
|
||
if (!item.customItem) then
|
||
client:Notify("Bu custom item değildir - silinemez!")
|
||
|
||
return
|
||
end
|
||
|
||
if (!file.Exists("customitems/" .. itemID .. ".json", "DATA")) then
|
||
client:Notify("Bu öğe yok. Zaten silinmek üzere işaretlenmiş olabilir!")
|
||
|
||
return
|
||
end
|
||
|
||
file.Delete("customitems/" .. itemID .. ".json", "DATA")
|
||
PLUGIN:DeleteItemFromDatabase(itemID) -- We remove the item from the database, so the inventory doesn't break due to null items.
|
||
client:Notify("\"" .. item.name .. "\" silinmek üzere işaretlendi. Sunucu yeniden başlatıldığında kaldırılacak.")
|
||
end)
|