mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
288
gamemodes/darkrp/plugins/smuggler/sv_hooks.lua
Normal file
288
gamemodes/darkrp/plugins/smuggler/sv_hooks.lua
Normal file
@@ -0,0 +1,288 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
function PLUGIN:PlayerLoadedCharacter(client, character)
|
||||
if (CAMI.PlayerHasAccess(client, "Helix - Manage Smugglers")) then
|
||||
netstream.Start(client, "ixSmugglingCacheUIDs", self.cacheIDList)
|
||||
end
|
||||
|
||||
local uniqueID = "ixSmuggling"..client:SteamID64()
|
||||
timer.Create(uniqueID, 60, 0, function()
|
||||
if (!IsValid(client)) then timer.Remove(uniqueID) return end
|
||||
|
||||
local char = client:GetCharacter()
|
||||
if (!char) then return end
|
||||
|
||||
local pickupItems = char:GetSmugglingPickupDelay()
|
||||
|
||||
if (#pickupItems == 0) then return end
|
||||
|
||||
local k = 1
|
||||
while (#pickupItems >= k and pickupItems[k][1] < os.time()) do
|
||||
char:SetSmugglingPickupItems(pickupItems[k][2], pickupItems[k][3], 1)
|
||||
|
||||
k = k + 1
|
||||
end
|
||||
|
||||
if (k > 1) then
|
||||
local newTbl = {}
|
||||
for i = k, #pickupItems do
|
||||
newTbl[#newTbl + 1] = pickupItems[i]
|
||||
end
|
||||
|
||||
char.vars.smugglingPickupDelay = newTbl
|
||||
char:Save()
|
||||
end
|
||||
|
||||
client:UpdateStashWaypoints()
|
||||
end)
|
||||
|
||||
local pickupItems = character:GetSmugglingPickupItems()
|
||||
for k, v in pairs(pickupItems) do
|
||||
if (k == "__invalid_cache") then continue end
|
||||
|
||||
local bFound = false
|
||||
for _, v1 in pairs(self.pickupCaches) do
|
||||
if (k == v1.uniqueID) then
|
||||
bFound = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if (bFound) then continue end
|
||||
|
||||
pickupItems["__invalid_cache"] = pickupItems["__invalid_cache"] or {}
|
||||
for k1, v1 in pairs(v) do
|
||||
pickupItems["__invalid_cache"][k1] = (pickupItems["__invalid_cache"][k1] or 0) + v1
|
||||
end
|
||||
|
||||
pickupItems[k] = nil
|
||||
end
|
||||
|
||||
character.vars.smugglingPickupItems = pickupItems
|
||||
|
||||
client:UpdateStashWaypoints(pickupItems)
|
||||
end
|
||||
|
||||
function PLUGIN:RegisterSaveEnts()
|
||||
ix.saveEnts:RegisterEntity("ix_smuggler", true, true, true, {
|
||||
OnSave = function(entity, data) --OnSave
|
||||
data.name = entity:GetDisplayName()
|
||||
data.description = entity:GetDescription()
|
||||
data.model = entity:GetModel()
|
||||
data.items = entity.items
|
||||
data.money = entity.money
|
||||
data.maxStock = entity.maxStock
|
||||
data.stashList = entity.stashList
|
||||
data.motion = nil
|
||||
|
||||
if (entity.ixIsActiveSmuggler) then
|
||||
data.active = self.nextRotation
|
||||
end
|
||||
end,
|
||||
OnRestore = function(entity, data) --OnRestore
|
||||
entity:SetModel(data.model)
|
||||
entity:SetSolid(SOLID_BBOX)
|
||||
entity:PhysicsInit(SOLID_BBOX)
|
||||
|
||||
local physObj = entity:GetPhysicsObject()
|
||||
if (IsValid(physObj)) then
|
||||
physObj:EnableMotion()
|
||||
physObj:Sleep()
|
||||
end
|
||||
|
||||
entity:SetDisplayName(data.name)
|
||||
entity:SetDescription(data.description)
|
||||
|
||||
local items = {}
|
||||
for uniqueID, itemData in pairs(data.items) do
|
||||
items[tostring(uniqueID)] = itemData
|
||||
end
|
||||
|
||||
entity.items = items
|
||||
entity.money = data.money
|
||||
entity.maxStock = data.maxStock
|
||||
entity.stashList = data.stashList
|
||||
|
||||
if (data.active and !self.nextRotation and data.active > os.time() + 300) then
|
||||
self.nextRotation = data.active
|
||||
entity:SetActive()
|
||||
else
|
||||
entity:SetInactive()
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
ix.saveEnts:RegisterEntity("ix_pickupcache", true, true, true, {
|
||||
OnSave = function(entity, data) --OnSave
|
||||
data.name = entity:GetDisplayName()
|
||||
data.uniqueID = entity.uniqueID
|
||||
data.model = entity:GetModel()
|
||||
data.locationId = entity:GetLocationId()
|
||||
data.motion = false
|
||||
end,
|
||||
OnRestore = function(entity, data) --OnRestore
|
||||
entity:SetNewModel(data.model)
|
||||
|
||||
local physObj = entity:GetPhysicsObject()
|
||||
if (IsValid(physObj)) then
|
||||
physObj:EnableMotion()
|
||||
physObj:Sleep()
|
||||
end
|
||||
|
||||
entity:SetDisplayName(data.name)
|
||||
entity:SetLocationId(data.locationId)
|
||||
entity:UpdateUniqueID(data.uniqueID)
|
||||
end,
|
||||
ShouldSave = function(entity)
|
||||
return self.pickupCaches[entity.uniqueID]
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
function PLUGIN:SaveData()
|
||||
local smugglers = {}
|
||||
for _, entity in ipairs(ents.FindByClass("ix_smuggler")) do
|
||||
local bodygroups = {}
|
||||
|
||||
for _, v in ipairs(entity:GetBodyGroups() or {}) do
|
||||
bodygroups[v.id] = entity:GetBodygroup(v.id)
|
||||
end
|
||||
|
||||
smugglers[#smugglers + 1] = {
|
||||
name = entity:GetDisplayName(),
|
||||
description = entity:GetDescription(),
|
||||
pos = entity:GetPos(),
|
||||
angles = entity:GetAngles(),
|
||||
model = entity:GetModel(),
|
||||
skin = entity:GetSkin(),
|
||||
bodygroups = bodygroups,
|
||||
items = entity.items,
|
||||
money = entity.money,
|
||||
maxStock = entity.maxStock,
|
||||
stashList = entity.stashList
|
||||
}
|
||||
|
||||
if (entity.ixIsActiveSmuggler) then
|
||||
smugglers[#smugglers].active = self.nextRotation
|
||||
end
|
||||
end
|
||||
ix.data.Set("smugglers", smugglers)
|
||||
|
||||
local caches = {}
|
||||
for uid, entity in pairs(self.pickupCaches) do
|
||||
if (!IsValid(entity)) then
|
||||
self.pickupCaches[uid] = nil
|
||||
continue
|
||||
end
|
||||
|
||||
local bodygroups = {}
|
||||
|
||||
for _, v in ipairs(entity:GetBodyGroups() or {}) do
|
||||
bodygroups[v.id] = entity:GetBodygroup(v.id)
|
||||
end
|
||||
|
||||
caches[#caches + 1] = {
|
||||
name = entity:GetDisplayName(),
|
||||
uniqueID = uid,
|
||||
pos = entity:GetPos(),
|
||||
angles = entity:GetAngles(),
|
||||
model = entity:GetModel(),
|
||||
skin = entity:GetSkin(),
|
||||
bodygroups = bodygroups,
|
||||
locationId = entity:GetLocationId()
|
||||
}
|
||||
end
|
||||
ix.data.Set("smuggling_caches", caches)
|
||||
end
|
||||
|
||||
function PLUGIN:LoadData()
|
||||
if (!ix.config.Get("SaveEntsOldLoadingEnabled")) then return end
|
||||
|
||||
local caches = ix.data.Get("smuggling_caches") or {}
|
||||
for _, v in ipairs(caches) do
|
||||
local entity = ents.Create("ix_pickupcache")
|
||||
entity:SetPos(v.pos)
|
||||
entity:SetAngles(v.angles)
|
||||
entity:Spawn()
|
||||
|
||||
entity:SetNewModel(v.model)
|
||||
entity:SetSkin(v.skin or 0)
|
||||
|
||||
local physObj = entity:GetPhysicsObject()
|
||||
if (IsValid(physObj)) then
|
||||
physObj:EnableMotion(false)
|
||||
physObj:Sleep()
|
||||
end
|
||||
|
||||
entity:SetDisplayName(v.name)
|
||||
entity:SetLocationId(v.locationId)
|
||||
|
||||
for id, bodygroup in pairs(v.bodygroups or {}) do
|
||||
entity:SetBodygroup(id, bodygroup)
|
||||
end
|
||||
|
||||
entity:UpdateUniqueID(v.uniqueID)
|
||||
end
|
||||
|
||||
for _, v in ipairs(ix.data.Get("smugglers") or {}) do
|
||||
local entity = ents.Create("ix_smuggler")
|
||||
entity:SetPos(v.pos)
|
||||
entity:SetAngles(v.angles)
|
||||
entity:Spawn()
|
||||
|
||||
entity:SetModel(v.model)
|
||||
entity:SetSkin(v.skin or 0)
|
||||
entity:SetSolid(SOLID_BBOX)
|
||||
entity:PhysicsInit(SOLID_BBOX)
|
||||
|
||||
local physObj = entity:GetPhysicsObject()
|
||||
|
||||
if (IsValid(physObj)) then
|
||||
physObj:EnableMotion(false)
|
||||
physObj:Sleep()
|
||||
end
|
||||
|
||||
entity:SetDisplayName(v.name)
|
||||
entity:SetDescription(v.description)
|
||||
|
||||
for id, bodygroup in pairs(v.bodygroups or {}) do
|
||||
entity:SetBodygroup(id, bodygroup)
|
||||
end
|
||||
|
||||
local items = {}
|
||||
for uniqueID, data in pairs(v.items) do
|
||||
items[tostring(uniqueID)] = data
|
||||
end
|
||||
|
||||
entity.items = items
|
||||
entity.money = v.money
|
||||
entity.maxStock = v.maxStock
|
||||
entity.stashList = v.stashList
|
||||
|
||||
if (v.active and !self.nextRotation and v.active > os.time() + 300) then
|
||||
self.nextRotation = v.active
|
||||
entity:SetActive()
|
||||
else
|
||||
entity:SetInactive()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:PostLoadData()
|
||||
timer.Simple(10, function()
|
||||
if (!self.nextRotation) then
|
||||
self:RotateActiveSmuggler()
|
||||
end
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user