mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
197
gamemodes/darkrp/plugins/customitems/sv_plugin.lua
Normal file
197
gamemodes/darkrp/plugins/customitems/sv_plugin.lua
Normal file
@@ -0,0 +1,197 @@
|
||||
--[[
|
||||
| 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)
|
||||
Reference in New Issue
Block a user