mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
139 lines
4.5 KiB
Lua
139 lines
4.5 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/
|
|
--]]
|
|
|
|
AdvDupe2 = {
|
|
Version = "1.1.0",
|
|
Revision = 51
|
|
}
|
|
|
|
AdvDupe2.DataFolder = "advdupe2" --name of the folder in data where dupes will be saved
|
|
|
|
function AdvDupe2.Notify(ply,msg,typ, showsvr, dur)
|
|
net.Start("AdvDupe2Notify")
|
|
net.WriteString(msg)
|
|
net.WriteUInt(typ or 0, 8)
|
|
net.WriteFloat(dur or 5)
|
|
net.Send(ply)
|
|
|
|
if(showsvr==true)then
|
|
print("[AdvDupe2Notify]\t"..ply:Nick()..": "..msg)
|
|
end
|
|
end
|
|
|
|
AddCSLuaFile( "autorun/client/advdupe2_cl_init.lua" )
|
|
AddCSLuaFile( "advdupe2/file_browser.lua" )
|
|
AddCSLuaFile( "advdupe2/sh_codec.lua" )
|
|
AddCSLuaFile( "advdupe2/cl_file.lua" )
|
|
AddCSLuaFile( "advdupe2/cl_ghost.lua" )
|
|
|
|
util.AddNetworkString("AdvDupe2_ReportClass")
|
|
util.AddNetworkString("AdvDupe2_ReportModel")
|
|
util.AddNetworkString("AdvDupe2Notify")
|
|
util.AddNetworkString("AdvDupe2_RemoveGhosts")
|
|
util.AddNetworkString("AdvDupe2_ResetDupeInfo")
|
|
util.AddNetworkString("AdvDupe2_StartGhosting")
|
|
util.AddNetworkString("AdvDupe2_InitProgressBar")
|
|
util.AddNetworkString("AdvDupe2_DrawSelectBox")
|
|
util.AddNetworkString("AdvDupe2_RemoveSelectBox")
|
|
util.AddNetworkString("AdvDupe2_UpdateProgressBar")
|
|
util.AddNetworkString("AdvDupe2_RemoveProgressBar")
|
|
util.AddNetworkString("AdvDupe2_ResetOffsets")
|
|
util.AddNetworkString("AdvDupe2_SetDupeInfo")
|
|
util.AddNetworkString("AdvDupe2_ReceiveFile")
|
|
util.AddNetworkString("AdvDupe2_CanAutoSave")
|
|
|
|
CreateConVar("AdvDupe2_DebugInfo", "0", {FCVAR_ARCHIVE}, "Should extra info be printed to console?", 0, 1)
|
|
CreateConVar("AdvDupe2_SpawnRate", "1", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MaxFileSize", "200", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MaxEntities", "0", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MaxConstraints", "0", {FCVAR_ARCHIVE})
|
|
|
|
CreateConVar("AdvDupe2_MaxContraptionEntities", "10", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MaxContraptionConstraints", "15", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MinContraptionSpawnDelay", "0.2", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MinContraptionUndoDelay", "0.1", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MaxContraptionUndoDelay", "60", {FCVAR_ARCHIVE})
|
|
|
|
CreateConVar("AdvDupe2_FileModificationDelay", "5", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_UpdateFilesDelay", "10", {FCVAR_ARCHIVE})
|
|
|
|
CreateConVar("AdvDupe2_LoadMap", "0", {FCVAR_ARCHIVE})
|
|
CreateConVar("AdvDupe2_MapFileName", "", {FCVAR_ARCHIVE})
|
|
|
|
local function PasteMap()
|
|
if(GetConVarString("AdvDupe2_LoadMap")=="0")then return end
|
|
local filename = GetConVarString("AdvDupe2_MapFileName")
|
|
|
|
if(not filename or filename == "")then
|
|
print("[AdvDupe2Notify]\tInvalid file name to loap map save.")
|
|
return
|
|
end
|
|
|
|
if(not file.Exists("advdupe2_maps/"..filename..".txt", "DATA"))then
|
|
print("[AdvDupe2Notify]\tFile does not exist for a map save.")
|
|
return
|
|
end
|
|
|
|
local map = file.Read("advdupe2_maps/"..filename..".txt")
|
|
local success,dupe,info,moreinfo = AdvDupe2.Decode(map)
|
|
if not success then
|
|
print("[AdvDupe2Notify]\tCould not open map save "..dupe)
|
|
return
|
|
end
|
|
|
|
local Tab = {Entities=dupe["Entities"], Constraints=dupe["Constraints"], HeadEnt=dupe["HeadEnt"]}
|
|
local Entities = AdvDupe2.duplicator.Paste(nil, table.Copy(Tab.Entities), Tab.Constraints, nil, nil, Tab.HeadEnt.Pos, true)
|
|
local maptype = GetConVarString("AdvDupe2_LoadMap")
|
|
|
|
if(maptype=="1")then
|
|
local PhysObj
|
|
for k,v in pairs(Entities) do
|
|
if(IsValid(v))then
|
|
for i=0, #Tab.Entities[k].PhysicsObjects do
|
|
if(Tab.Entities[k].PhysicsObjects[i].Frozen)then
|
|
PhysObj = v:GetPhysicsObjectNum( i )
|
|
if IsValid(PhysObj) then
|
|
PhysObj:EnableMotion(true)
|
|
end
|
|
end
|
|
end
|
|
if v.CPPISetOwner then v:CPPISetOwner(game.GetWorld()) end
|
|
end
|
|
end
|
|
elseif(maptype=="2")then
|
|
local PhysObj
|
|
for k,v in pairs(Entities) do
|
|
if(IsValid(v))then
|
|
for i=0, #Tab.Entities[k].PhysicsObjects do
|
|
PhysObj = v:GetPhysicsObjectNum( i )
|
|
if IsValid(PhysObj) then
|
|
PhysObj:EnableMotion(true)
|
|
end
|
|
end
|
|
if v.CPPISetOwner then v:CPPISetOwner(game.GetWorld()) end
|
|
end
|
|
end
|
|
end
|
|
|
|
print("[AdvDupe2Notify]\tMap save pasted.")
|
|
end
|
|
hook.Add("InitPostEntity", "AdvDupe2_PasteMap", PasteMap)
|
|
hook.Add("PostCleanupMap", "AdvDupe2_PasteMap", PasteMap)
|
|
hook.Add("PlayerInitialSpawn","AdvDupe2_AddPlayerTable",function(ply)
|
|
ply.AdvDupe2 = {}
|
|
end)
|
|
|
|
include( "advdupe2/sv_clipboard.lua" )
|
|
include( "advdupe2/sh_codec.lua" )
|
|
include( "advdupe2/sv_misc.lua" )
|
|
include( "advdupe2/sv_file.lua" )
|
|
include( "advdupe2/sv_ghost.lua" )
|
|
|