mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
108
gamemodes/darkrp/plugins/willardskills/cl_hooks.lua
Normal file
108
gamemodes/darkrp/plugins/willardskills/cl_hooks.lua
Normal file
@@ -0,0 +1,108 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
local smallerIconSize = SScaleMin(16 / 3)
|
||||
local function firstUpper(str)
|
||||
return str:gsub("^%l", string.utf8upper)
|
||||
end
|
||||
|
||||
function PLUGIN:PopulateHelpMenu(tabs)
|
||||
local permitsList = ix.permits.get()
|
||||
if (permitsList and !table.IsEmpty(permitsList)) then
|
||||
tabs["İzinler"] = function(container)
|
||||
local permits = table.GetKeys(permitsList)
|
||||
table.sort(permits)
|
||||
|
||||
for _, v in pairs(permits) do
|
||||
local permitsButton = container:Add("DButton")
|
||||
permitsButton:Dock(TOP)
|
||||
permitsButton:SetText(Schema:FirstToUpper(v))
|
||||
permitsButton:SetFont("TitlesFontNoClamp")
|
||||
permitsButton:SizeToContents()
|
||||
permitsButton.Paint = nil
|
||||
permitsButton:SetContentAlignment(4)
|
||||
permitsButton.DoClick = function()
|
||||
LocalPlayer():NotifyLocalized("Permit ID '"..v.."' panoya kopyalandı")
|
||||
SetClipboardText( v )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:CreateExtraCharacterTabInfo(character, informationSubframe, CreatePart)
|
||||
-- Permits
|
||||
local permitsPanel = informationSubframe:Add("Panel")
|
||||
local permitsData = LocalPlayer():GetCharacter():GetGenericdata().permits
|
||||
if !istable(permitsData) then
|
||||
CreatePart(permitsPanel, "İş İzinleri:", "İzin yok", "licenses", true, false, true)
|
||||
return
|
||||
end
|
||||
|
||||
permitsData = table.GetKeys(LocalPlayer():GetCharacter():GetGenericdata().permits)
|
||||
|
||||
for k, v in pairs(permitsData) do
|
||||
permitsData[k] = firstUpper(v)
|
||||
end
|
||||
|
||||
if !table.IsEmpty(permitsData) then
|
||||
CreatePart(permitsPanel, "İş İzinleri:", table.concat(permitsData, ", "), "licenses", true, false, true)
|
||||
else
|
||||
CreatePart(permitsPanel, "İş İzinleri:", "İzin yok", "licenses", true, false, true)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:AdjustInnerStatusPanel(innerStatus, CreateTitle, CreateSubBar)
|
||||
if (ix.special) then
|
||||
local attributesTitle = innerStatus:Add("DLabel")
|
||||
CreateTitle(attributesTitle, "NITELIKLER")
|
||||
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
for attributeID, v in pairs(ix.special.list) do
|
||||
local attribute = innerStatus:Add("Panel")
|
||||
local special = character:GetSpecial(tostring(v.uniqueID))
|
||||
|
||||
CreateSubBar(attribute, "willardnetworks/tabmenu/inventory/inv_" .. attributeID .. ".png", v.name, special .. "/10", smallerIconSize, smallerIconSize)
|
||||
end
|
||||
end
|
||||
|
||||
if (ix.skill) then
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
|
||||
local skillsTitle = innerStatus:Add("DLabel")
|
||||
CreateTitle(skillsTitle, "BECERILER")
|
||||
|
||||
for skillID, skillInfo in pairs(ix.skill.list) do
|
||||
if (skillInfo.name == "Vortessence" and !LocalPlayer():IsVortigaunt()) or skillInfo.name == "Bartering" then
|
||||
continue
|
||||
end
|
||||
|
||||
local skillsPanel = innerStatus:Add("Panel")
|
||||
local level = character:GetSkillLevel(skillID)
|
||||
CreateSubBar(skillsPanel, "willardnetworks/tabmenu/inventory/inv_" .. skillID .. ".png", skillInfo.name, level .. "/50", smallerIconSize, smallerIconSize)
|
||||
end
|
||||
|
||||
local char = LocalPlayer().GetCharacter and LocalPlayer():GetCharacter()
|
||||
|
||||
-- Misc section
|
||||
local miscTitle = innerStatus:Add("DLabel")
|
||||
CreateTitle(miscTitle, "DIGER")
|
||||
|
||||
if char then
|
||||
local money = char.GetMoney and char:GetMoney() or 0
|
||||
-- Display the amount of chips the player has
|
||||
local chipsPanel = innerStatus:Add("Panel")
|
||||
CreateSubBar(chipsPanel, "willardnetworks/tabmenu/charmenu/chips.png", "Chips", money, smallerIconSize, smallerIconSize)
|
||||
end
|
||||
end
|
||||
end
|
||||
33
gamemodes/darkrp/plugins/willardskills/cl_recipe.lua
Normal file
33
gamemodes/darkrp/plugins/willardskills/cl_recipe.lua
Normal file
@@ -0,0 +1,33 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
netstream.Hook("RebuildCrafting", function(data)
|
||||
PLUGIN.craftingPanel:Rebuild()
|
||||
end)
|
||||
|
||||
netstream.Hook("CraftTime", function(data)
|
||||
ix.CraftCooldown = data
|
||||
end)
|
||||
|
||||
netstream.Hook("SendMessageListToClient", function(messagelist, storedNewspapers)
|
||||
LocalPlayer().messagelist = messagelist
|
||||
local capda = vgui.Create("ixCAPDA")
|
||||
capda.storedNewspapers = storedNewspapers
|
||||
capda:CreateNewspaperButton()
|
||||
end)
|
||||
|
||||
-- Called when the local player's crafting is rebuilt.
|
||||
function PLUGIN:PlayerCraftingRebuilt(panel, categories) end
|
||||
|
||||
-- Called when the local player's crafting item should be adjusted.
|
||||
function PLUGIN:PlayerAdjustCraftingRecipe(recipe) end
|
||||
1279
gamemodes/darkrp/plugins/willardskills/derma/cl_baserecipepanel.lua
Normal file
1279
gamemodes/darkrp/plugins/willardskills/derma/cl_baserecipepanel.lua
Normal file
File diff suppressed because it is too large
Load Diff
493
gamemodes/darkrp/plugins/willardskills/derma/cl_capda.lua
Normal file
493
gamemodes/darkrp/plugins/willardskills/derma/cl_capda.lua
Normal file
@@ -0,0 +1,493 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
local padding = SScaleMin(10 / 3)
|
||||
|
||||
function PANEL:Init()
|
||||
self:SetSize(ScrW(), ScrH())
|
||||
self:SetAlpha(0)
|
||||
self:AlphaTo(255, 0.5, 0)
|
||||
self.Paint = function( self, w, h )
|
||||
surface.SetDrawColor(Color(63, 58, 115, 220))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
Derma_DrawBackgroundBlur( self, 1 )
|
||||
end
|
||||
|
||||
self.content = self:Add("EditablePanel")
|
||||
self.content:SetSize(SScaleMin(400 / 3), SScaleMin(600 / 3))
|
||||
self.content:Center()
|
||||
self.content:MakePopup()
|
||||
Schema:AllowMessage(self.content)
|
||||
self.content.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
self.topbar = self.content:Add("Panel")
|
||||
self.topbar:SetSize(self.content:GetWide(), SScaleMin(50 / 3))
|
||||
self.topbar:Dock(TOP)
|
||||
self.topbar.Paint = function( self, w, h )
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local titleText = self.topbar:Add("DLabel")
|
||||
titleText:SetFont("LargerTitlesFontNoClamp")
|
||||
titleText:Dock(LEFT)
|
||||
titleText:SetText("Civil Administration")
|
||||
titleText:DockMargin(SScaleMin(10 / 3), 0, 0, 0)
|
||||
titleText:SetContentAlignment(4)
|
||||
titleText:SizeToContents()
|
||||
|
||||
local exit = self.topbar:Add("DImageButton")
|
||||
exit:SetImage("willardnetworks/tabmenu/navicons/exit.png")
|
||||
exit:SetSize(SScaleMin(20 / 3), SScaleMin(20 / 3))
|
||||
exit:DockMargin(0, SScaleMin(15 / 3), SScaleMin(10 / 3), SScaleMin(15 / 3))
|
||||
exit:Dock(RIGHT)
|
||||
exit.DoClick = function()
|
||||
LocalPlayer().messagelist = nil
|
||||
self:Remove()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
end
|
||||
|
||||
self:CreateInner()
|
||||
end
|
||||
|
||||
local function PaintButton(self, w, h)
|
||||
surface.SetDrawColor(Color(0, 0, 0, 100))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
function PANEL:CreateBackButton()
|
||||
local divider = self.topbar:Add("DShape")
|
||||
divider:SetType("Rect")
|
||||
divider:Dock(RIGHT)
|
||||
divider:DockMargin(padding, padding, padding, padding)
|
||||
divider:SetWide(1)
|
||||
divider:SetColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
|
||||
local back = self.topbar:Add("DButton")
|
||||
back:Dock(RIGHT)
|
||||
back:SetText("BACK")
|
||||
back:SetFont("TitlesFontNoClamp")
|
||||
back.Paint = nil
|
||||
back:SizeToContents()
|
||||
back.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self:Remove()
|
||||
local panel = vgui.Create("ixCAPDA")
|
||||
panel:SetAlpha(255)
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateNewspaperButton()
|
||||
self.newspapers = self.innerContent:Add("DButton")
|
||||
self.newspapers:Dock(TOP)
|
||||
self.newspapers:SetTall(SScaleMin(50 / 3))
|
||||
self.newspapers:SetText("Union Newspapers")
|
||||
self.newspapers:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
self.newspapers:SetContentAlignment(4)
|
||||
self.newspapers:SetTextInset(SScaleMin(10 / 3), 0)
|
||||
self.newspapers.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
self.newspapers:DockMargin(0, -1, 0, 0)
|
||||
|
||||
self.newspapers.DoClick = function()
|
||||
self:CreateBackButton()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self.innerContent:Clear()
|
||||
|
||||
for k, v in pairs(self.storedNewspapers) do
|
||||
local newspaper = self.innerContent:Add("DButton")
|
||||
newspaper:Dock(TOP)
|
||||
newspaper:SetTall(SScaleMin(50 / 3))
|
||||
newspaper:SetText(v[3][1].columnTitle.." | "..v[3][1].columnSubtitle)
|
||||
newspaper:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
newspaper:SetContentAlignment(4)
|
||||
newspaper:SetTextInset(SScaleMin(10 / 3), 0)
|
||||
newspaper.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
if k != 1 then
|
||||
newspaper:DockMargin(0, -1, 0, 0)
|
||||
end
|
||||
|
||||
newspaper.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
local areyousure = vgui.Create("Panel")
|
||||
areyousure:SetSize(SScaleMin(300 / 3), SScaleMin(100 / 3))
|
||||
areyousure:Center()
|
||||
areyousure:MakePopup()
|
||||
areyousure.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
local label = areyousure:Add("DLabel")
|
||||
label:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
label:SetText("Remove stored newspaper?")
|
||||
label:SizeToContents()
|
||||
label:Dock(TOP)
|
||||
label:SetContentAlignment(5)
|
||||
|
||||
local buttonpanel = areyousure:Add("Panel")
|
||||
buttonpanel:Dock(BOTTOM)
|
||||
buttonpanel:SetTall(SScaleMin(50 / 3))
|
||||
|
||||
local yes = buttonpanel:Add("DButton")
|
||||
yes:Dock(LEFT)
|
||||
yes:SetWide((areyousure:GetWide() * 0.5) - SScaleMin(5 / 3))
|
||||
yes:SetText("Yes")
|
||||
yes:SetFont("MenuFontNoClamp")
|
||||
yes.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
yes.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
areyousure:Remove()
|
||||
newspaper:Remove()
|
||||
|
||||
netstream.Start("RemoveStoredNewspaper", k)
|
||||
end
|
||||
|
||||
local no = buttonpanel:Add("DButton")
|
||||
no:Dock(RIGHT)
|
||||
no:SetWide((areyousure:GetWide() * 0.5) - SScaleMin(5 / 3))
|
||||
no:SetText("No")
|
||||
no:SetFont("MenuFontNoClamp")
|
||||
no.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
no.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
areyousure:Remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateDoorAccessButton()
|
||||
self.doorAccess = self.innerContent:Add("DButton")
|
||||
self.doorAccess:Dock(TOP)
|
||||
self.doorAccess:SetTall(SScaleMin(50 / 3))
|
||||
self.doorAccess:SetText("Combine Doors")
|
||||
self.doorAccess:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
self.doorAccess:SetContentAlignment(4)
|
||||
self.doorAccess:SetTextInset(SScaleMin(10 / 3), 0)
|
||||
self.doorAccess.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
self.doorAccess:DockMargin(0, -1, 0, 0)
|
||||
|
||||
self.doorAccess.DoClick = function()
|
||||
self:CreateBackButton()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self.innerContent:Clear()
|
||||
|
||||
for k, v in ipairs(ents.GetAll()) do
|
||||
if (v:IsDoor()) then
|
||||
if (!v:HasSpawnFlags(256) and !v:HasSpawnFlags(1024) and v:GetNetVar("combineDoor")) then
|
||||
local name = v:GetNetVar("combineDoor")
|
||||
if name then
|
||||
local doorNameButton = self.innerContent:Add("DButton")
|
||||
doorNameButton:Dock(TOP)
|
||||
doorNameButton:SetText(name)
|
||||
doorNameButton:SetTall(SScaleMin(50 / 3))
|
||||
doorNameButton:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
doorNameButton:SetContentAlignment(4)
|
||||
doorNameButton:SetTextInset(padding, 0)
|
||||
doorNameButton.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
doorNameButton.DoClick = function()
|
||||
Derma_StringRequest(
|
||||
"Grant Access",
|
||||
"Enter CID",
|
||||
"",
|
||||
function(enteredCid)
|
||||
for k2, v2 in pairs(ix.char.loaded) do
|
||||
if v2:GetCid() == enteredCid then
|
||||
netstream.Start("SetDoorAccessCID", v, k2)
|
||||
break
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
nil
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateInner()
|
||||
self.innerContent = self.content:Add("DScrollPanel")
|
||||
self.innerContent:Dock(TOP)
|
||||
self.innerContent:SetTall(self.content:GetTall() - SScaleMin(50 / 3))
|
||||
|
||||
self.barteringConfigs = self.innerContent:Add("DButton")
|
||||
self.barteringConfigs:Dock(TOP)
|
||||
self.barteringConfigs:SetTall(SScaleMin(50 / 3))
|
||||
self.barteringConfigs:SetText("Bartering")
|
||||
self.barteringConfigs:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
self.barteringConfigs:SetContentAlignment(4)
|
||||
self.barteringConfigs:SetTextInset(padding, 0)
|
||||
self.barteringConfigs.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
self.barteringConfigs.DoClick = function()
|
||||
self:CreateBackButton()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self.innerContent:Clear()
|
||||
|
||||
local recipes = ix.recipe.stored
|
||||
local categories = {}
|
||||
for uniqueID, RECIPE in SortedPairs(recipes) do
|
||||
if RECIPE.cost and RECIPE.skill == "bartering" then
|
||||
if !table.HasValue(categories, RECIPE.category) then
|
||||
table.insert(categories, RECIPE.category)
|
||||
|
||||
local priceMultiplier = self.innerContent:Add("DButton")
|
||||
priceMultiplier:Dock(TOP)
|
||||
priceMultiplier:SetText("Price Multiplier "..RECIPE.category)
|
||||
priceMultiplier:SetTall(SScaleMin(50 / 3))
|
||||
priceMultiplier:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
priceMultiplier:SetContentAlignment(4)
|
||||
priceMultiplier:SetTextInset(padding, 0)
|
||||
priceMultiplier.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
priceMultiplier.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
Derma_StringRequest(
|
||||
"Set Multiplier "..RECIPE.category,
|
||||
"Price multiplier "..RECIPE.category.." (1 decimal max, default is 1.0)",
|
||||
ix.config.Get("BarteringPriceMultiplier"..RECIPE.category),
|
||||
function(number)
|
||||
local toNumber = tonumber(number)
|
||||
if isnumber(toNumber) then
|
||||
local maxValue = ix.config.stored.BarteringPriceMultiplierClothing.data.data.max or 100
|
||||
local minValue = ix.config.stored.BarteringPriceMultiplierClothing.data.data.min or 0
|
||||
if (toNumber <= maxValue) and (toNumber >= minValue) then
|
||||
netstream.Start("ixBarteringPriceMultiplier", RECIPE.category, tonumber(number))
|
||||
LocalPlayer():NotifyLocalized("Set Bartering Price Multiplier "..RECIPE.category.." to "..number)
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("Number needs to be below or equal to 100 and above or equal to 0")
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
nil
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self.ration = self.innerContent:Add("DButton")
|
||||
self.ration:Dock(TOP)
|
||||
self.ration:SetTall(SScaleMin(50 / 3))
|
||||
self.ration:SetText("Rations")
|
||||
self.ration:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
self.ration:SetContentAlignment(4)
|
||||
self.ration:SetTextInset(padding, 0)
|
||||
self.ration.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
self.ration:DockMargin(0, -1, 0, 0)
|
||||
|
||||
self.ration.DoClick = function()
|
||||
self:CreateBackButton()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self.innerContent:Clear()
|
||||
|
||||
local rationInterval = self.innerContent:Add("DButton")
|
||||
rationInterval:Dock(TOP)
|
||||
rationInterval:SetTall(SScaleMin(50 / 3))
|
||||
rationInterval:SetText("Ration Interval")
|
||||
rationInterval:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
rationInterval:SetContentAlignment(4)
|
||||
rationInterval:SetTextInset(padding, 0)
|
||||
rationInterval.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
rationInterval.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
Derma_StringRequest(
|
||||
"Set Ration Interval",
|
||||
"Set Ration Interval in hours (0 decimals, default is 4)",
|
||||
ix.config.Get("rationInterval"),
|
||||
function(number)
|
||||
local toNumber = tonumber(number)
|
||||
if isnumber(toNumber) then
|
||||
local maxValue = ix.config.stored.rationInterval.data.data.max or 10
|
||||
local minValue = ix.config.stored.rationInterval.data.data.min or 1
|
||||
if (toNumber <= maxValue) and (toNumber >= minValue) then
|
||||
netstream.Start("SetRationIntervalPDA", tonumber(number))
|
||||
LocalPlayer():NotifyLocalized("Set Ration Interval timer to "..number.. " hours")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("Number needs to be below or equal to 10 and above or equal to 1")
|
||||
end
|
||||
end
|
||||
end,
|
||||
nil)
|
||||
end
|
||||
end
|
||||
|
||||
if istable(LocalPlayer().messagelist) then
|
||||
if !table.IsEmpty(LocalPlayer().messagelist) then
|
||||
self.messages = self.innerContent:Add("DButton")
|
||||
self.messages:Dock(TOP)
|
||||
self.messages:SetTall(SScaleMin(50 / 3))
|
||||
self.messages:SetText("Messages")
|
||||
self.messages:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
self.messages:SetContentAlignment(4)
|
||||
self.messages:SetTextInset(padding, 0)
|
||||
self.messages.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
self.messages:DockMargin(0, -1, 0, 0)
|
||||
|
||||
self.messages.DoClick = function()
|
||||
self:CreateBackButton()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self.innerContent:Clear()
|
||||
|
||||
local messagePanel = self.innerContent:Add("Panel")
|
||||
messagePanel:Dock(TOP)
|
||||
messagePanel:SetTall(self.innerContent:GetTall())
|
||||
|
||||
for k, v in pairs(LocalPlayer().messagelist) do
|
||||
local message = messagePanel:Add("DButton")
|
||||
message:Dock(TOP)
|
||||
message:SetTall(SScaleMin(50 / 3))
|
||||
message:SetText(v["message_date"].." | "..string.utf8sub(v["message_poster"], 1, 18).." | #"..v["message_cid"])
|
||||
if v["message_reply"] then
|
||||
message:SetTextColor(Color(210, 255, 255, 255))
|
||||
else
|
||||
message:SetTextColor(Color(255, 205, 205, 255))
|
||||
end
|
||||
message:SetFont("WNBleedingMinutesBold")
|
||||
message:SetContentAlignment(4)
|
||||
message:SetTextInset(padding, 0)
|
||||
message.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
if k != 1 then
|
||||
message:DockMargin(0, -1, 0, 0)
|
||||
end
|
||||
|
||||
message.DoClick = function()
|
||||
messagePanel:Clear()
|
||||
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
|
||||
local textEntry = messagePanel:Add("DTextEntry")
|
||||
textEntry:Dock(FILL)
|
||||
textEntry:SetTextColor(Color(200, 200, 200, 255))
|
||||
textEntry:SetMultiline( true )
|
||||
textEntry:SetEditable(false)
|
||||
textEntry:SetVerticalScrollbarEnabled( true )
|
||||
textEntry:SetCursorColor(Color(200, 200, 200, 255))
|
||||
textEntry:SetValue(v["message_text"])
|
||||
textEntry.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(Color(0, 0, 0, 100))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
|
||||
self:DrawTextEntryText( self:GetTextColor(), self:GetHighlightColor(), self:GetCursorColor() )
|
||||
end
|
||||
|
||||
local optionsPanel = messagePanel:Add("Panel")
|
||||
optionsPanel:Dock(BOTTOM)
|
||||
optionsPanel:SetSize(self.content:GetWide(), SScaleMin(50 / 3))
|
||||
|
||||
local remove = optionsPanel:Add("DButton")
|
||||
remove:Dock(FILL)
|
||||
remove:SetText("REMOVE")
|
||||
remove:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
remove:SetContentAlignment(5)
|
||||
remove.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
remove.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
LocalPlayer().messagelist[k] = nil
|
||||
netstream.Start("RemoveCAMessage", v["message_id"])
|
||||
|
||||
self.innerContent:Remove()
|
||||
self:CreateInner()
|
||||
end
|
||||
|
||||
local sendReply = optionsPanel:Add("DButton")
|
||||
sendReply:Dock(RIGHT)
|
||||
sendReply:SetWide(optionsPanel:GetWide() * 0.5)
|
||||
if v["message_reply"] then
|
||||
sendReply:SetText("READ REPLY")
|
||||
else
|
||||
sendReply:SetText("REPLY")
|
||||
end
|
||||
sendReply:SetFont("WNBleedingMinutesBold")
|
||||
sendReply:SetContentAlignment(5)
|
||||
sendReply.Paint = function(self, w, h)
|
||||
PaintButton(self, w, h)
|
||||
end
|
||||
|
||||
sendReply.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
if v["message_reply"] then
|
||||
textEntry:SetValue(v["message_reply"])
|
||||
return
|
||||
end
|
||||
|
||||
textEntry:SetEditable(true)
|
||||
sendReply:SetText("SEND REPLY")
|
||||
textEntry:SetValue("Write your reply here..")
|
||||
|
||||
sendReply.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
v["message_reply"] = textEntry:GetValue()
|
||||
netstream.Start("SetCAMessageReply", v["message_id"], textEntry:GetValue())
|
||||
self.innerContent:Remove()
|
||||
self:CreateInner()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self:CreateDoorAccessButton()
|
||||
end
|
||||
|
||||
vgui.Register("ixCAPDA", PANEL, "EditablePanel")
|
||||
@@ -0,0 +1,224 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
self:SetSize(ScrW(), ScrH())
|
||||
self:SetAlpha(0)
|
||||
self:AlphaTo(255, 0.5, 0)
|
||||
self.Paint = function(this, w, h)
|
||||
surface.SetDrawColor(Color(63, 58, 115, 220))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
Derma_DrawBackgroundBlur( this, 1 )
|
||||
end
|
||||
|
||||
self.innerContent = self:Add("Panel")
|
||||
self.innerContent:SetSize(SScaleMin(500 / 3), SScaleMin(600 / 3))
|
||||
self.innerContent:Center()
|
||||
self.innerContent:MakePopup()
|
||||
Schema:AllowMessage(self.innerContent)
|
||||
self.innerContent.Paint = function(this, w, h)
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
self:CreateTopBar()
|
||||
self:CreateItems()
|
||||
end
|
||||
|
||||
function PANEL:CreateTopBar()
|
||||
local topbar = self.innerContent:Add("Panel")
|
||||
topbar:SetSize(self.innerContent:GetWide(), SScaleMin(50 / 3))
|
||||
topbar:Dock(TOP)
|
||||
topbar.Paint = function( this, w, h )
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
self.titleText = topbar:Add("DLabel")
|
||||
self.titleText:SetFont("CharCreationBoldTitleNoClamp")
|
||||
self.titleText:Dock(LEFT)
|
||||
self.titleText:SetText("Alınacak Eşyayı Seçin")
|
||||
self.titleText:DockMargin(SScaleMin(10 / 3), 0, 0, 0)
|
||||
self.titleText:SetContentAlignment(4)
|
||||
self.titleText:SizeToContents()
|
||||
|
||||
self.exit = topbar:Add("DImageButton")
|
||||
self.exit:SetImage("willardnetworks/tabmenu/navicons/exit.png")
|
||||
self.exit:SetSize(SScaleMin(20 / 3), SScaleMin(20 / 3))
|
||||
self.exit:DockMargin(0, SScaleMin(15 / 3), SScaleMin(10 / 3), SScaleMin(15 / 3))
|
||||
self.exit:Dock(RIGHT)
|
||||
self.exit.DoClick = function()
|
||||
netstream.Start("ClosePanels", LocalPlayer().activePickupDispenser)
|
||||
LocalPlayer().activePickupDispenser = nil
|
||||
LocalPlayer().boughtItems = nil
|
||||
self:Remove()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
end
|
||||
|
||||
local function createDivider(parent)
|
||||
parent:SetSize(1, topbar:GetTall())
|
||||
parent:Dock(RIGHT)
|
||||
parent:DockMargin(0, SScaleMin(10 / 3), SScaleMin(SScaleMin(10 / 3) / 3), SScaleMin(10 / 3))
|
||||
parent.Paint = function(this, w, h)
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawLine(0, 0, 0, h)
|
||||
end
|
||||
end
|
||||
|
||||
local divider = topbar:Add("Panel")
|
||||
createDivider(divider)
|
||||
end
|
||||
|
||||
function PANEL:CreateItems()
|
||||
if !LocalPlayer().boughtItems then
|
||||
return
|
||||
end
|
||||
|
||||
local scrollPanel = self.innerContent:Add("DScrollPanel")
|
||||
scrollPanel:Dock(TOP)
|
||||
scrollPanel:SetSize(self.innerContent:GetWide(), self.innerContent:GetTall() - SScaleMin(50 / 3))
|
||||
|
||||
for k, v in pairs (LocalPlayer().boughtItems) do
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
local inventory = character:GetInventory()
|
||||
|
||||
local width = istable(v) and 1 or ix.item.list[k].width or 1
|
||||
local height = istable(v) and 1 or ix.item.list[k].height or 1
|
||||
|
||||
local frame, modelPanel, textPanel, amountPanel, amount, title = self:CreateItem(scrollPanel, k, v)
|
||||
local actualAmount = istable(v) and 1 or v or 1
|
||||
local actualTitle = istable(v) and v.title or ix.item.list[k].name or "Cardboard Box"
|
||||
|
||||
if !inventory:FindEmptySlot(width, height) then
|
||||
amount:SetTextColor(Color(150, 150, 150, 255))
|
||||
title:SetTextColor(Color(150, 150, 150, 255))
|
||||
end
|
||||
|
||||
self:CreateInvisibleButton(frame, modelPanel, textPanel, amountPanel, inventory, width, height, actualAmount, actualTitle, amount, k)
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateInvisibleButton(frame, modelPanel, textPanel, amountPanel, inventory, width, height, actualAmount, actualTitle, amount, k)
|
||||
local invisibleButton = frame:Add("DButton")
|
||||
invisibleButton:SetSize(modelPanel:GetWide() + textPanel:GetWide() + amountPanel:GetWide(), frame:GetTall())
|
||||
invisibleButton:SetText("")
|
||||
invisibleButton.Paint = function(this, w, h)
|
||||
if inventory then
|
||||
if (this:IsHovered() and !inventory:FindEmptySlot(width, height)) then
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 15)))
|
||||
surface.DrawOutlinedRect(SScaleMin(4 / 3), SScaleMin(4 / 3), w - SScaleMin(8 / 3), h - SScaleMin(8 / 3))
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if (this:IsHovered()) then
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 15)))
|
||||
surface.DrawOutlinedRect(SScaleMin(4 / 3), SScaleMin(4 / 3), w - SScaleMin(8 / 3), h - SScaleMin(8 / 3))
|
||||
end
|
||||
end
|
||||
|
||||
invisibleButton.DoClick = function()
|
||||
if inventory then
|
||||
if inventory:FindEmptySlot(width, height) then
|
||||
actualAmount = actualAmount - 1
|
||||
amount:SetText(actualAmount)
|
||||
|
||||
if actualAmount == 0 then
|
||||
frame:Remove()
|
||||
end
|
||||
|
||||
LocalPlayer():NotifyLocalized("You have picked up a "..actualTitle)
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
netstream.Start("SetPurchasedItems", k, LocalPlayer().activePickupDispenser)
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have enough space for "..actualTitle.."!")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return invisibleButton
|
||||
end
|
||||
|
||||
function PANEL:CreateItem(scrollPanel, itemID, number)
|
||||
local frame = scrollPanel:Add("Panel")
|
||||
frame:Dock(TOP)
|
||||
frame:DockMargin(0, 0, 0, -1)
|
||||
frame:SetTall(SScaleMin(110 / 3) - 5)
|
||||
frame.Paint = function(this, w, h)
|
||||
surface.SetDrawColor(Color(0, 0, 0, 100))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local modelPanel = frame:Add("Panel")
|
||||
modelPanel:Dock(LEFT)
|
||||
modelPanel:SetWide(scrollPanel:GetWide() / 3)
|
||||
modelPanel.Paint = function(this, w, h)
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawLine(w - 1, SScaleMin(10 / 3), w - 1, h - SScaleMin(10 / 3))
|
||||
end
|
||||
|
||||
local modelIcon = modelPanel:Add("SpawnIcon")
|
||||
local model = istable(number) and "models/props_c17/paper01.mdl" or ix.item.list[itemID].model or "models/props_junk/cardboard_box004a.mdl"
|
||||
modelIcon:Dock(FILL)
|
||||
modelIcon:DockMargin(SScaleMin(43 / 3), SScaleMin(10 / 3), SScaleMin(43 / 3), SScaleMin(10 / 3))
|
||||
modelIcon:SetModel(model)
|
||||
modelIcon.Paint = nil
|
||||
|
||||
modelIcon.PaintOver = nil
|
||||
modelIcon:SetTooltip(nil)
|
||||
|
||||
local textPanel = frame:Add("Panel")
|
||||
textPanel:Dock(LEFT)
|
||||
textPanel:DockPadding(SScaleMin(10 / 3), 0, SScaleMin(10 / 3), 0)
|
||||
textPanel:SetSize(scrollPanel:GetWide() / 2, frame:GetTall())
|
||||
textPanel.Paint = function(this, w, h)
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawLine(w - 1, SScaleMin(10 / 3), w - 1, h - SScaleMin(10 / 3))
|
||||
end
|
||||
|
||||
local title = textPanel:Add("DLabel")
|
||||
local actualTitle = istable(number) and number.title or ix.item.list[itemID].name or "Cardboard Box"
|
||||
title:Dock(TOP)
|
||||
title:SetText(actualTitle..(istable(number) and " - FROM: "..number.fromName.." | "..number.fromCID or ""))
|
||||
title:SetFont(istable(number) and "MenuFontBoldNoClamp" or "WNBleedingMinutesBoldNoClamp")
|
||||
title:SetWrap(true)
|
||||
title:SetAutoStretchVertical(true)
|
||||
title.PerformLayout = function(this)
|
||||
this:DockMargin(0, textPanel:GetTall() * 0.5 - this:GetTall() * 0.5, 0, textPanel:GetTall() * 0.5 - this:GetTall() * 0.5)
|
||||
end
|
||||
|
||||
local amountPanel = frame:Add("Panel")
|
||||
amountPanel:Dock(FILL)
|
||||
amountPanel:SetSize(scrollPanel:GetWide() - modelPanel:GetWide() - textPanel:GetWide(), frame:GetTall())
|
||||
if LocalPlayer().boughtItems and istable(LocalPlayer().boughtItems) then
|
||||
if table.Count(LocalPlayer().boughtItems) >= 6 then
|
||||
amountPanel:SetWide(amountPanel:GetWide() - SScaleMin(15 / 3))
|
||||
end
|
||||
end
|
||||
|
||||
local amount = amountPanel:Add("DLabel")
|
||||
local actualAmount = istable(number) and 1 or number or 1
|
||||
amount:SetContentAlignment(5)
|
||||
amount:SetText(actualAmount)
|
||||
amount:SetFont("WNBleedingMinutesBoldNoClamp")
|
||||
amount:SizeToContents()
|
||||
amount:Center()
|
||||
|
||||
return frame, modelPanel, textPanel, amountPanel, amount, title
|
||||
end
|
||||
|
||||
vgui.Register("PickupDispenser", PANEL, "EditablePanel")
|
||||
@@ -0,0 +1,63 @@
|
||||
--[[
|
||||
| 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 vgui = vgui
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Sevkiyat"
|
||||
self.secondTitle = "Satın Al"
|
||||
self.thirdTitle = "Önizleme"
|
||||
self.nothingSelected = "Hiçbir öğe seçili değil"
|
||||
self.requirementsTitleText = "Gereksinimleri: "
|
||||
self.skill = "bartering"
|
||||
self.built = false
|
||||
|
||||
ix.city:SyncCityStock()
|
||||
end
|
||||
|
||||
function PANEL:Proceed()
|
||||
self.built = true
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
function PANEL:Remove()
|
||||
if (self.model) then
|
||||
self.model:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("BarteringBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateBarteringPanel(container)
|
||||
local panel = container:Add("BarteringBasePanel")
|
||||
|
||||
ix.gui.barteringpanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "BarteringBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["bartering"].uniqueID] = CreateBarteringPanel
|
||||
end)
|
||||
@@ -0,0 +1,58 @@
|
||||
--[[
|
||||
| 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 vgui = vgui
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Tarifler"
|
||||
self.secondTitle = "Pişirme"
|
||||
self.thirdTitle = "Önizleme"
|
||||
self.nothingSelected = "Hiçbir öğe seçili değil"
|
||||
self.requirementsTitleText = "Gereksinimleri: "
|
||||
self.ingredientsTitleText = "Malzemeler:"
|
||||
self.skill = "cooking"
|
||||
self.craftSound = "willardnetworks/skills/skill_cooking.wav"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
function PANEL:Remove()
|
||||
if (self.model) then
|
||||
self.model:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("CookingBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateCookingPanel(container)
|
||||
local panel = container:Add("CookingBasePanel")
|
||||
|
||||
ix.gui.cookingpanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "CookingBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["cooking"].uniqueID] = CreateCookingPanel
|
||||
end)
|
||||
@@ -0,0 +1,102 @@
|
||||
--[[
|
||||
| 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 vgui = vgui
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
if parent then
|
||||
if parent.contentPanel then
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
else
|
||||
self:SetSize(ScrW() * 0.75, ScrH() * 0.70)
|
||||
end
|
||||
else
|
||||
self:SetSize(ScrW() * 0.75, ScrH() * 0.70)
|
||||
end
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Tarifler"
|
||||
self.secondTitle = "Üretim"
|
||||
self.thirdTitle = "Önizleme"
|
||||
self.nothingSelected = "Hiçbir ürün/tarif seçilmedi"
|
||||
self.requirementsTitleText = "Gereksinimleri: "
|
||||
self.ingredientsTitleText = "Malzemeler:"
|
||||
self.skill = "crafting"
|
||||
self.craftSound = "willardnetworks/skills/skill_crafting.wav"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
function PANEL:Remove()
|
||||
if (self.model) then
|
||||
self.model:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("CraftingBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateCraftingPanel(container)
|
||||
local panel = container:Add("CraftingBasePanel")
|
||||
|
||||
ix.gui.craftingpanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "CraftingBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["crafting"].uniqueID] = CreateCraftingPanel
|
||||
end)
|
||||
|
||||
netstream.Hook("OpenCraftingMenu", function()
|
||||
if ix.gui.craftingpanel then
|
||||
if ix.gui.craftingpanel.Remove then
|
||||
ix.gui.craftingpanel:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
local parentPanel = vgui.Create("Panel")
|
||||
parentPanel:SetSize(ScrW(), ScrH())
|
||||
parentPanel:SetAlpha(0)
|
||||
parentPanel:AlphaTo(200, 0.5, 0)
|
||||
parentPanel.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(0, 0, 0, 255)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local craftingPanel = parentPanel:Add("CraftingBasePanel")
|
||||
craftingPanel:MakePopup()
|
||||
craftingPanel:Center()
|
||||
|
||||
local close = craftingPanel:Add("DButton")
|
||||
close:Dock(BOTTOM)
|
||||
close:SetFont("TitlesFont")
|
||||
close:SetText("CLOSE CRAFTING")
|
||||
close:DockMargin(((craftingPanel:GetWide() + 20) / 1.5), 0, 2, 0)
|
||||
close:SetTall(math.Clamp(ScreenScale(50 / 3), 0, 50))
|
||||
close.DoClick = function()
|
||||
parentPanel:AlphaTo(0, 0.5, 0, function()
|
||||
parentPanel:Remove()
|
||||
end)
|
||||
end
|
||||
|
||||
ix.gui.craftingpanel = craftingPanel
|
||||
ix.gui.activeSkill = craftingPanel
|
||||
end)
|
||||
@@ -0,0 +1,44 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Level Unlocks"
|
||||
self.skill = "guns"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
vgui.Register("GunsBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateGunsPanel(container)
|
||||
local panel = container:Add("GunsBasePanel")
|
||||
|
||||
ix.gui.gunspanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "GunsBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["guns"].uniqueID] = CreateGunsPanel
|
||||
end)
|
||||
@@ -0,0 +1,58 @@
|
||||
--[[
|
||||
| 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 vgui = vgui
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Tarifler"
|
||||
self.secondTitle = "Üretim"
|
||||
self.thirdTitle = "Önizleme"
|
||||
self.nothingSelected = "Hiçbir ürün/tarif seçilmedi"
|
||||
self.requirementsTitleText = "Gereksinimleri: "
|
||||
self.ingredientsTitleText = "Malzemeler:"
|
||||
self.skill = "medicine"
|
||||
self.craftSound = "willardnetworks/skills/skill_medicine.wav"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
function PANEL:Remove()
|
||||
if (self.model) then
|
||||
self.model:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("MedicalBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateMedicalPanel(container)
|
||||
local panel = container:Add("MedicalBasePanel")
|
||||
|
||||
ix.gui.medicalpanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "MedicalBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["medicine"].uniqueID] = CreateMedicalPanel
|
||||
end)
|
||||
@@ -0,0 +1,44 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Level Unlocks"
|
||||
self.skill = "melee"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
vgui.Register("MeleeBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateMeleePanel(container)
|
||||
local panel = container:Add("MeleeBasePanel")
|
||||
|
||||
ix.gui.gunspanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "MeleeBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["melee"].uniqueID] = CreateMeleePanel
|
||||
end)
|
||||
@@ -0,0 +1,56 @@
|
||||
--[[
|
||||
| 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 vgui = vgui
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Eşya"
|
||||
self.secondTitle = "Bilgi"
|
||||
self.thirdTitle = "Önizleme"
|
||||
self.nothingSelected = "Hiçbir öğe seçili değil"
|
||||
self.requirementsTitleText = "Gereksinimleri: "
|
||||
self.skill = "smuggling"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
function PANEL:Remove()
|
||||
if (self.model) then
|
||||
self.model:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
vgui.Register("SmugglingBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateSmugglingPanel(container)
|
||||
local panel = container:Add("SmugglingBasePanel")
|
||||
|
||||
ix.gui.smugglingpanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "SmugglingBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["smuggling"].uniqueID] = CreateSmugglingPanel
|
||||
end)
|
||||
@@ -0,0 +1,44 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
local parent = self:GetParent():GetParent()
|
||||
self:SetSize(parent.contentPanel:GetSize())
|
||||
|
||||
-- Config
|
||||
self.firstTitle = "Level Unlocks"
|
||||
self.skill = "speed"
|
||||
|
||||
-- Create titles
|
||||
self:Add("CraftingBaseTopTitleBase")
|
||||
|
||||
-- Create inner content
|
||||
self:Add("CraftingBaseInnerContent")
|
||||
|
||||
-- Rebuild inner content
|
||||
self:Add("CraftingBaseRebuild")
|
||||
end
|
||||
|
||||
vgui.Register("SpeedBasePanel", PANEL, "EditablePanel")
|
||||
|
||||
local function CreateSpeedPanel(container)
|
||||
local panel = container:Add("SpeedBasePanel")
|
||||
|
||||
ix.gui.speedpanel = panel
|
||||
ix.gui.activeSkill = panel
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
hook.Add("CreateSkillPanels", "SpeedBasePanel", function(tabs)
|
||||
tabs[ix.skill.list["speed"].uniqueID] = CreateSpeedPanel
|
||||
end)
|
||||
722
gamemodes/darkrp/plugins/willardskills/derma/cl_skills.lua
Normal file
722
gamemodes/darkrp/plugins/willardskills/derma/cl_skills.lua
Normal file
@@ -0,0 +1,722 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
local titlePushDown = SScaleMin(85 / 3)
|
||||
local fixHeight = SScaleMin(55 / 3)
|
||||
local scale780 = SScaleMin(780 / 3)
|
||||
local scale120 = SScaleMin(120 / 3)
|
||||
|
||||
function PANEL:Init()
|
||||
ix.gui.skills = self
|
||||
|
||||
local margin = SScaleMin(10 / 3)
|
||||
local topPushDown = SScaleMin(150 / 3)
|
||||
|
||||
self:SetWide(ScrW() - (topPushDown * 2))
|
||||
|
||||
local sizeXtitle, sizeYtitle = self:GetWide(), scale120
|
||||
local sizeXcontent, sizeYcontent = self:GetWide(), (scale780) - fixHeight
|
||||
|
||||
self.titlePanel = self:Add("Panel")
|
||||
self.titlePanel:SetSize(sizeXtitle, sizeYtitle)
|
||||
self.titlePanel:SetPos(self:GetWide() * 0.5 - self.titlePanel:GetWide() * 0.5)
|
||||
|
||||
self.contentPanel = self:Add("Panel")
|
||||
self.contentPanel:SetSize(sizeXcontent, sizeYcontent)
|
||||
self.contentPanel:SetPos(self:GetWide() * 0.5 - self.contentPanel:GetWide() * 0.5, titlePushDown)
|
||||
|
||||
self:SetTall(scale120 + scale780 - fixHeight + titlePushDown)
|
||||
self:Center()
|
||||
|
||||
local skillsIcon = self.titlePanel:Add("DImage")
|
||||
skillsIcon:SetImage("willardnetworks/tabmenu/navicons/crafting.png")
|
||||
skillsIcon:SetSize(SScaleMin(18 / 3), SScaleMin(18 / 3))
|
||||
skillsIcon:SetPos(0, SScaleMin(3 / 3))
|
||||
|
||||
local skillsTitle = self.titlePanel:Add("DLabel")
|
||||
skillsTitle:SetFont("TitlesFontNoClamp")
|
||||
skillsTitle:SetText(LocalPlayer():Name() .. " Kişisinin Becerileri")
|
||||
skillsTitle:SetPos(SScaleMin(26 / 3))
|
||||
skillsTitle:SizeToContents()
|
||||
|
||||
local skillsDesc = self.titlePanel:Add("DLabel")
|
||||
skillsDesc:SetFont("MenuFontLargerNoClamp")
|
||||
skillsDesc:SetText("Unutmayın ki maksimum toplam yetenek seviyesi " .. ix.config.Get("MaxTotalSkill", 0) .. ".")
|
||||
skillsDesc:SetTextColor(Color(200, 200, 200, 255))
|
||||
skillsDesc:SetPos(0, SScaleMin(25 / 3) + margin * 0.7)
|
||||
skillsDesc:SizeToContents()
|
||||
|
||||
local skillsDesc2 = self.titlePanel:Add("DLabel")
|
||||
skillsDesc2:SetFont("MenuFontLargerBoldNoFix")
|
||||
skillsDesc2:SetTextColor(Color(255, 78, 69, 255))
|
||||
skillsDesc2:SetText("Beceri seviyeleri: " .. LocalPlayer():GetCharacter():GetTotalSkillLevel() .. "/" .. ix.config.Get("MaxTotalSkill", 0))
|
||||
skillsDesc2:SetPos(0, SScaleMin(42 / 3) + margin * 0.7)
|
||||
skillsDesc2:SizeToContents()
|
||||
|
||||
self:CreateAttributesPanel()
|
||||
|
||||
self.panels = {}
|
||||
|
||||
hook.Run("CreateSkillPanels", self.panels) -- Create subpanels for example Crafting
|
||||
|
||||
self:CreateSkills()
|
||||
end
|
||||
|
||||
function PANEL:CreateSkills()
|
||||
if (self.skillPanels) then
|
||||
for _, v in ipairs(self.skillPanels) do
|
||||
v:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
self.skillPanels = {}
|
||||
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
|
||||
self.skillGrid = self.contentPanel:Add("DGrid")
|
||||
self.skillGrid:Dock(FILL)
|
||||
self.skillGrid:SetCols( 3 )
|
||||
self.skillGrid:SetColWide( self.contentPanel:GetWide() / 3 )
|
||||
self.skillGrid:SetRowHeight( self.contentPanel:GetTall() / 3 )
|
||||
|
||||
for skillID, skillInfo in SortedPairs(ix.skill.list) do
|
||||
if character:GetFaction() != FACTION_VORT and skillInfo.name == "Vortessence" then
|
||||
continue
|
||||
end
|
||||
|
||||
self.skillPanels[skillID] = self:CreateSkillPanel(skillID, skillInfo)
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateSkillPanel(skillID, skillInfo)
|
||||
local bottomPanelH = SScaleMin(35 / 3)
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
|
||||
local skillPanel = vgui.Create("Panel")
|
||||
skillPanel:SetSize((self.contentPanel:GetWide() / 3) - SScaleMin(10 / 3), (self.contentPanel:GetTall() / 3) - SScaleMin(10 / 3))
|
||||
skillPanel:Center()
|
||||
skillPanel.Paint = function(_, w, h)
|
||||
surface.SetDrawColor(color_white)
|
||||
surface.SetMaterial(ix.util.GetMaterial(skillInfo.image))
|
||||
surface.DrawTexturedRect(0, 0, w, h - bottomPanelH)
|
||||
|
||||
surface.SetDrawColor(ColorAlpha(color_black, 100))
|
||||
surface.DrawRect(0, h - bottomPanelH, w, bottomPanelH)
|
||||
|
||||
surface.SetDrawColor(Color(116, 113, 130, 255))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
|
||||
surface.DrawLine(0, h - bottomPanelH, w, h - bottomPanelH)
|
||||
end
|
||||
|
||||
-- Bottom Panel
|
||||
local dPadding = SScaleMin(5 / 3)
|
||||
local bottomPanel = skillPanel:Add("Panel")
|
||||
bottomPanel:Dock(BOTTOM)
|
||||
bottomPanel:SetTall(bottomPanelH)
|
||||
|
||||
local skillName = bottomPanel:Add("DLabel")
|
||||
self:CreateSkillLabel(skillName, skillInfo.name, "TitlesFontNoClamp", dPadding * 4, dPadding * 2)
|
||||
|
||||
skillPanel.skillLevel = bottomPanel:Add("DLabel")
|
||||
self:CreateSkillLabel(skillPanel.skillLevel, "Beceri Seviyesi: " .. character:GetSkillLevel(skillID) .. "/" .. ix.skill.MAX_SKILL, "MenuFontLargerNoClamp", 0, 0, Color(255, 204, 0, 255))
|
||||
|
||||
local experiencePanel = bottomPanel:Add("Panel")
|
||||
experiencePanel:Dock(RIGHT)
|
||||
experiencePanel:SetWide(SScaleMin(200 / 3))
|
||||
experiencePanel:DockMargin(dPadding * 2, dPadding, dPadding * 4, dPadding)
|
||||
experiencePanel:DockPadding(dPadding, dPadding, dPadding, dPadding)
|
||||
experiencePanel.Paint = function(_, w, h)
|
||||
surface.SetDrawColor(ColorAlpha(color_black, 100))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(116, 113, 130, 255))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local skillProgress = math.Clamp(character:GetSkillStoredExp(skillID) / 1000, 0, 1)
|
||||
|
||||
skillPanel.progressBar = experiencePanel:Add("Panel")
|
||||
skillPanel.progressBar:Dock(FILL)
|
||||
skillPanel.progressBar.progress = skillProgress
|
||||
skillPanel.progressBar.Paint = function(panel, w, h)
|
||||
surface.SetDrawColor(Color(255, 78, 70, 255))
|
||||
surface.DrawRect(0, 0, w * panel.progress, h)
|
||||
end
|
||||
|
||||
skillPanel.processLabel = skillPanel.progressBar:Add("DLabel")
|
||||
skillPanel.processLabel.skillID = skillID
|
||||
skillPanel.processLabel.SetupText = function(panel, char)
|
||||
if (char:GetSkill(skillID) == ix.skill.MAX_SKILL) then
|
||||
panel:SetText("SON SEVİYE")
|
||||
elseif (char:GetTotalSkillLevel() == ix.config.Get("MaxTotalSkill")) then
|
||||
panel:SetText("SON TOPLAM SEVİYE")
|
||||
elseif (char:CanLevelSkill(panel.skillID)) then
|
||||
panel:SetText("LEVEL ATLADI")
|
||||
else
|
||||
local skillProg = math.Clamp(character:GetSkillStoredExp(panel.skillID) / 1000, 0, 1)
|
||||
panel:SetText((skillProg * 100) .. "%")
|
||||
end
|
||||
end
|
||||
|
||||
skillPanel.processLabel:SetupText(character)
|
||||
skillPanel.processLabel:SetFont("MenuFontLargerNoClamp")
|
||||
skillPanel.processLabel:SetContentAlignment(5)
|
||||
skillPanel.processLabel:Dock(FILL)
|
||||
|
||||
local levelUp = skillPanel.progressBar:Add("DButton")
|
||||
levelUp:Dock(FILL)
|
||||
levelUp:SetText("")
|
||||
levelUp.Paint = nil
|
||||
levelUp.DoClick = function()
|
||||
if character:CanLevelSkill(skillID) then
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
|
||||
net.Start("ixSkillLevelUp")
|
||||
net.WriteString(skillID)
|
||||
net.SendToServer()
|
||||
end
|
||||
end
|
||||
|
||||
local imagePanel = skillPanel:Add("Panel")
|
||||
imagePanel:Dock(FILL)
|
||||
|
||||
local boostPanel = imagePanel:Add("Panel")
|
||||
boostPanel:SetSize(skillPanel:GetWide(), skillPanel:GetTall() - bottomPanelH)
|
||||
boostPanel:DockPadding(dPadding * 4, dPadding * 3, dPadding * 4, dPadding * 4)
|
||||
boostPanel.Paint = self.CoolHover
|
||||
|
||||
local skillButton = imagePanel:Add("DButton")
|
||||
skillButton:Dock(FILL)
|
||||
skillButton:SetText("")
|
||||
skillButton:DockPadding(dPadding * 4, dPadding * 4, dPadding * 4, dPadding * 4)
|
||||
skillButton.Paint = nil
|
||||
|
||||
skillButton.OnCursorEntered = function()
|
||||
surface.PlaySound("helix/ui/rollover.wav")
|
||||
boostPanel.Paint = nil
|
||||
end
|
||||
|
||||
skillButton.OnCursorExited = function()
|
||||
boostPanel.Paint = self.CoolHover
|
||||
end
|
||||
|
||||
skillButton.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self:OpenSkillPanel(skillInfo)
|
||||
end
|
||||
|
||||
self:CreateBoostInfo(boostPanel, skillInfo)
|
||||
self:CheckForCurrent(skillInfo)
|
||||
|
||||
local autoLevel = skillButton:Add("DButton")
|
||||
skillPanel.autoLevel = autoLevel
|
||||
|
||||
autoLevel.autoLevel = character:GetSkillAutoLevel(skillID)
|
||||
autoLevel:Dock(BOTTOM)
|
||||
autoLevel:SetTall(SScaleMin(20 / 3))
|
||||
autoLevel:SetContentAlignment(4)
|
||||
autoLevel:SetText("Oto-Yükseltme")
|
||||
autoLevel:SetFont("MenuFontBoldNoClamp")
|
||||
autoLevel:SetTextInset(SScaleMin(30 / 3), 0)
|
||||
autoLevel:DockMargin(0, 0, skillPanel:GetWide() * 0.63, 0)
|
||||
autoLevel.Paint = function(panel, w, h)
|
||||
surface.SetDrawColor(color_white)
|
||||
surface.DrawOutlinedRect(0, 0, SScaleMin(20 / 3), h)
|
||||
|
||||
if panel.autoLevel then
|
||||
surface.SetMaterial(ix.util.GetMaterial("willardnetworks/tabmenu/skills_v2/tick.png"))
|
||||
surface.DrawTexturedRect(SScaleMin(20 / 3) * 0.5 - SScaleMin(15 / 3) * 0.5, SScaleMin(20 / 3) * 0.5 - SScaleMin(10 / 3) * 0.5, SScaleMin(15 / 3), SScaleMin(11 / 3))
|
||||
end
|
||||
end
|
||||
|
||||
autoLevel.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
net.Start("ixSkillSetAutoLevel")
|
||||
net.WriteString(skillID)
|
||||
net.SendToServer()
|
||||
|
||||
autoLevel.autoLevel = !autoLevel.autoLevel
|
||||
end
|
||||
|
||||
if skillInfo.name == "Bartering" then
|
||||
experiencePanel:SetVisible(false)
|
||||
skillPanel.skillLevel:SetText("Aktif " .. (istable(character:GetPermits()) and table.Count(character:GetPermits()) or "0") .. " izniniz bulunmaktadır")
|
||||
skillPanel.skillLevel:SizeToContents()
|
||||
autoLevel:SetVisible(false)
|
||||
end
|
||||
|
||||
self.skillGrid:AddItem( skillPanel )
|
||||
return skillPanel
|
||||
end
|
||||
|
||||
function PANEL:OpenSkillPanel(skill)
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
if self.panels[skill.uniqueID] then
|
||||
if (self.contentPanel) then
|
||||
self.contentPanelOriginX, self.contentPanelOriginY = self.contentPanel:GetPos()
|
||||
self.contentPanel:MoveTo(ScrW(), self.contentPanelOriginY, 1, 0)
|
||||
end
|
||||
|
||||
for k, v in pairs(self.panels) do
|
||||
if k == skill.uniqueID then
|
||||
self:CreateNewContent(v, skill.uniqueID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CheckForCurrent(skill)
|
||||
if self.panels[skill.uniqueID] then
|
||||
if self.contentPanel then
|
||||
if LocalPlayer().lastSelectedSkill then
|
||||
if LocalPlayer().lastSelectedSkill == skill.uniqueID then
|
||||
self.contentPanelOriginX, self.contentPanelOriginY = self.contentPanel:GetPos()
|
||||
|
||||
self.contentPanel:SetPos(ScrW(), self.contentPanelOriginY)
|
||||
|
||||
for k, v in pairs(self.panels) do
|
||||
if k == skill.uniqueID then
|
||||
self:CreateNewContent(v, skill.uniqueID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL.CoolHover(self, w, h)
|
||||
surface.SetDrawColor(Color(0, 0, 0, 150))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
function PANEL:CreateBoostInfo(boostPanel, skill)
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
local attributes = ix.special.list or {}
|
||||
local skillAttributes = {}
|
||||
|
||||
-- Find the attributes that boost the skill
|
||||
for _, v in pairs(attributes) do
|
||||
if v.skills then
|
||||
if v.skills[skill.uniqueID] then
|
||||
skillAttributes[v.skills[skill.uniqueID]] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if skillAttributes[2] then
|
||||
local boostedByLabel = boostPanel:Add("DLabel")
|
||||
boostedByLabel:SetText("Yüksek takviye: " .. skillAttributes[2].name)
|
||||
boostedByLabel:SetFont("MenuFontBoldNoClamp")
|
||||
boostedByLabel:SetContentAlignment(4)
|
||||
boostedByLabel:SizeToContents()
|
||||
boostedByLabel:Dock(TOP)
|
||||
end
|
||||
|
||||
if skillAttributes[1] then
|
||||
local boostedByLabel = boostPanel:Add("DLabel")
|
||||
boostedByLabel:SetText("Düşük takviye: " .. skillAttributes[1].name)
|
||||
boostedByLabel:SetFont("MenuFontBoldNoClamp")
|
||||
boostedByLabel:SetContentAlignment(4)
|
||||
boostedByLabel:SizeToContents()
|
||||
boostedByLabel:Dock(TOP)
|
||||
end
|
||||
|
||||
local varBoostLevel = character:GetSkillBoostLevels(skill.uniqueID)
|
||||
local varNeedsLevel, reducedHunger, reducedThirst, reducedGas, reducedHealth = character:GetSkillNeedsReducing(skill.uniqueID)
|
||||
|
||||
if (varBoostLevel > 0) then
|
||||
-- ATLE HAPPY
|
||||
local boostedLevels = boostPanel:Add("DLabel")
|
||||
boostedLevels:Dock(TOP)
|
||||
boostedLevels:SetContentAlignment(4)
|
||||
boostedLevels:SetFont("MenuFontLargerBoldNoFix")
|
||||
boostedLevels:SetTextColor(Color(75, 238, 75))
|
||||
boostedLevels:SetText("Arttırılmış Seviyeler: +" .. varBoostLevel)
|
||||
boostedLevels:SizeToContents()
|
||||
end
|
||||
|
||||
if (varNeedsLevel > 0) then
|
||||
if (reducedHunger) then
|
||||
local hungerReducing = boostPanel:Add("DLabel")
|
||||
hungerReducing:Dock(TOP)
|
||||
hungerReducing:SetContentAlignment(4)
|
||||
hungerReducing:SetFont("MenuFontLargerBoldNoFix")
|
||||
hungerReducing:SetTextColor(Color(238, 75, 75))
|
||||
hungerReducing:SetText("-" .. math.Round(reducedHunger, 1) .. " açlık sebebiyle")
|
||||
hungerReducing:SizeToContents()
|
||||
end
|
||||
|
||||
if (reducedThirst) then
|
||||
local thirstReducing = boostPanel:Add("DLabel")
|
||||
thirstReducing:Dock(TOP)
|
||||
thirstReducing:SetContentAlignment(4)
|
||||
thirstReducing:SetFont("MenuFontLargerBoldNoFix")
|
||||
thirstReducing:SetTextColor(Color(238, 75, 75))
|
||||
thirstReducing:SetText("-" .. math.Round(reducedThirst, 1) .. " susuzluk sebebiyle")
|
||||
thirstReducing:SizeToContents()
|
||||
end
|
||||
|
||||
if (reducedGas) then
|
||||
local gasReducing = boostPanel:Add("DLabel")
|
||||
gasReducing:Dock(TOP)
|
||||
gasReducing:SetContentAlignment(4)
|
||||
gasReducing:SetFont("MenuFontLargerBoldNoFix")
|
||||
gasReducing:SetTextColor(Color(238, 75, 75))
|
||||
gasReducing:SetText("-" .. math.Round(reducedGas, 1) .. " spor sebebiyle")
|
||||
gasReducing:SizeToContents()
|
||||
end
|
||||
|
||||
if (reducedHealth) then
|
||||
local healthReducing = boostPanel:Add("DLabel")
|
||||
healthReducing:Dock(TOP)
|
||||
healthReducing:SetContentAlignment(4)
|
||||
healthReducing:SetFont("MenuFontLargerBoldNoFix")
|
||||
healthReducing:SetTextColor(Color(238, 75, 75))
|
||||
healthReducing:SetText("-" .. math.Round(reducedHealth, 1) .. " yaralanma sebebiyle")
|
||||
healthReducing:SizeToContents()
|
||||
end
|
||||
|
||||
local needsReducing = boostPanel:Add("DLabel")
|
||||
needsReducing:Dock(TOP)
|
||||
needsReducing:SetContentAlignment(4)
|
||||
needsReducing:SetFont("MenuFontLargerBoldNoFix")
|
||||
needsReducing:SetTextColor(Color(238, 75, 75))
|
||||
needsReducing:SetText("Düşürülen Seviyeler: -" .. varNeedsLevel)
|
||||
needsReducing:SizeToContents()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateSkillLabel(parent, text, font, leftMargin, rightMargin, color)
|
||||
parent:Dock(LEFT)
|
||||
parent:SetFont(font)
|
||||
parent:SetText(text or "")
|
||||
parent:SetContentAlignment(4)
|
||||
parent:DockMargin(leftMargin, 0, rightMargin, 0)
|
||||
parent:SizeToContents()
|
||||
parent:SetTextColor(color or color_white)
|
||||
end
|
||||
|
||||
function PANEL:CreateNewContent(v, name)
|
||||
local newContent = self:Add("Panel")
|
||||
newContent:SetSize(self.contentPanel:GetSize())
|
||||
newContent:SetPos(self:GetWide() * 0.5 - self.contentPanel:GetWide() * 0.5, titlePushDown)
|
||||
local x, y = newContent:GetPos()
|
||||
|
||||
if !LocalPlayer().lastSelectedSkill then
|
||||
newContent:SetPos(0 - ScrW(), y)
|
||||
newContent:MoveTo(x, y, 1, 0)
|
||||
else
|
||||
newContent:SetPos(x, y)
|
||||
end
|
||||
|
||||
LocalPlayer().lastSelectedSkill = name
|
||||
|
||||
if self.chosenSkillPanel then
|
||||
self.chosenSkillPanel:Remove()
|
||||
end
|
||||
|
||||
if self.backButton then
|
||||
self.backButton:Remove()
|
||||
end
|
||||
|
||||
self.chosenSkillPanel = v(newContent)
|
||||
|
||||
self.attributesButton:SetVisible(false)
|
||||
|
||||
self.backButton = self.titlePanel:Add("DButton")
|
||||
self.backButton:Dock(RIGHT)
|
||||
self.backButton:SetText("Beceriler menüsüne dön")
|
||||
self.backButton:SetFont("TitlesFontNoClamp")
|
||||
self.backButton:SetContentAlignment(6)
|
||||
self.backButton:SetAlpha(0)
|
||||
self.backButton:AlphaTo(255, 1, 0)
|
||||
self.backButton:SizeToContents()
|
||||
self.backButton:DockMargin(0, self.titlePanel:GetTall() * 0.3 - self.backButton:GetTall(), 0, self.titlePanel:GetTall() * 0.5 - self.backButton:GetTall() * 0.5)
|
||||
self.backButton.Paint = function(_, w, h) end
|
||||
|
||||
self.backButton.OnCursorEntered = function()
|
||||
self.backButton:SetTextColor(Color(200, 200, 200, 255))
|
||||
surface.PlaySound("willardnetworks/charactercreation/hover.wav")
|
||||
end
|
||||
|
||||
self.backButton.OnCursorExited = function()
|
||||
self.backButton:SetTextColor(Color(255, 255, 255, 255))
|
||||
end
|
||||
|
||||
self.backButton.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self.backButton:AlphaTo(0, 1, 0, function()
|
||||
self.attributesButton:SetVisible(true)
|
||||
self.attributesButton:SetAlpha(0)
|
||||
self.attributesButton:AlphaTo(255, 0.5, 0)
|
||||
end)
|
||||
newContent:MoveTo(0 - ScrW(), y, 1, 0)
|
||||
self.contentPanel:MoveTo(self:GetWide() * 0.5 - self.contentPanel:GetWide() * 0.5, self.contentPanelOriginY, 1, 0)
|
||||
LocalPlayer().lastSelectedSkill = nil
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateAttributesPanel()
|
||||
self.attributesButton = self.titlePanel:Add("DButton")
|
||||
self.attributesButton:Dock(RIGHT)
|
||||
self.attributesButton:DockMargin(0, SScaleMin(25 / 3), 0, SScaleMin(63 / 3))
|
||||
self.attributesButton:SetText("Nitelik Arttırmaları")
|
||||
self.attributesButton:SetFont("MenuFontBoldNoClamp")
|
||||
self.attributesButton:SetWide(SScaleMin(170 / 3))
|
||||
self.attributesButton.Paint = function(_, w, h)
|
||||
surface.SetDrawColor(0, 0, 0, 100)
|
||||
surface.DrawRect(0, 1, w - 2, h - 1)
|
||||
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
self.attributesButton.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
self:CreateAttributePopup()
|
||||
end
|
||||
end
|
||||
|
||||
local attributePadding = SScaleMin(10 / 3)
|
||||
|
||||
function PANEL:CreateAttributeBar(parent, attributeID)
|
||||
local character = LocalPlayer():GetCharacter()
|
||||
local special = tonumber(character:GetSpecial(attributeID)) or 0
|
||||
local attribute = ix.special:Find(attributeID)
|
||||
local icon = attribute.icon or ""
|
||||
local boost = tonumber(character:GetBoostedAttribute(attributeID)) or 0
|
||||
local specialBoost = character:GetSpecialBoost()[attributeID] or {}
|
||||
|
||||
parent:SetTall(SScaleMin(100 / 3))
|
||||
parent:Dock(TOP)
|
||||
parent:DockMargin(attributePadding * 2, 0, attributePadding * 2, attributePadding)
|
||||
|
||||
local barPanel = parent:Add("Panel")
|
||||
barPanel:Dock(TOP)
|
||||
barPanel:SetTall(SScaleMin(27 / 3))
|
||||
|
||||
-- icon
|
||||
local iconImage = barPanel:Add("DImage")
|
||||
iconImage:Dock(LEFT)
|
||||
iconImage:SetWide(SScaleMin(20 / 3))
|
||||
iconImage:SetImage(icon)
|
||||
iconImage:DockMargin(0, SScaleMin(2 / 3), attributePadding * 2, SScaleMin(2 / 3))
|
||||
|
||||
local backgroundBar = barPanel:Add("Panel")
|
||||
backgroundBar:Dock(FILL)
|
||||
backgroundBar.Paint = function(_, w, h)
|
||||
surface.SetDrawColor(Color(0, 0, 0, 100))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local positivePoints = 0
|
||||
local negativePoints = 0
|
||||
|
||||
for _, v in pairs(specialBoost) do
|
||||
if v.level > 0 then
|
||||
positivePoints = positivePoints + v.level
|
||||
elseif v.level < 0 then
|
||||
negativePoints = negativePoints - v.level
|
||||
end
|
||||
end
|
||||
|
||||
local green = Color(138, 200, 97, 255)
|
||||
local grey = Color(200, 200, 200, 255)
|
||||
local red = Color(200, 97, 97, 255)
|
||||
|
||||
local baseBar = backgroundBar:Add("Panel")
|
||||
baseBar:SetSize(SScaleMin(360 / 3), barPanel:GetTall())
|
||||
baseBar.Paint = function(_, w, h)
|
||||
if positivePoints > 0 then
|
||||
surface.SetDrawColor(green)
|
||||
surface.DrawRect(0, 0, (positivePoints + special) * (w / 10), h)
|
||||
end
|
||||
|
||||
if special > 0 then
|
||||
surface.SetDrawColor(Color(200, 200, 200, 255))
|
||||
surface.DrawRect(0, 0, (special * w) / 10, h)
|
||||
end
|
||||
|
||||
if negativePoints > 0 then
|
||||
surface.SetDrawColor(red)
|
||||
surface.DrawRect(math.max((positivePoints + special) - negativePoints, 0) * (w / 10), 0, negativePoints, h)
|
||||
end
|
||||
end
|
||||
|
||||
local attributeAmount = barPanel:Add("DLabel")
|
||||
attributeAmount:Dock(RIGHT)
|
||||
attributeAmount:SetText(boost .. "/10")
|
||||
attributeAmount:SetTextColor((boost > special and green) or (boost < special and red) or grey)
|
||||
attributeAmount:DockMargin(attributePadding * 2 + ((boost == 10 and SScaleMin(3 / 3)) or SScaleMin(11 / 3)), 0, 0, 0)
|
||||
attributeAmount:SetFont("MenuFontNoClamp")
|
||||
attributeAmount:SizeToContents()
|
||||
|
||||
if specialBoost.long then
|
||||
local level = specialBoost.long.level
|
||||
local longBoost = parent:Add("DLabel")
|
||||
longBoost:Dock(TOP)
|
||||
if (level != 0) then
|
||||
local change = level > specialBoost.long.target and "decreasing" or "increasing"
|
||||
local sign = level > 0 and "+" or ""
|
||||
longBoost:SetText(string.format("Şu an %s%d yiyecek artışı, %s 1 dakikada %d dakika boyunca", sign, level, change, specialBoost.long.time))
|
||||
elseif (specialBoost.long.time) then
|
||||
local sign = specialBoost.long.target > 0 and "+" or "-"
|
||||
longBoost:SetText(string.format("%s1 yiyecek artışı, %d dakika içinde etkinleşecek", sign, specialBoost.long.time))
|
||||
end
|
||||
longBoost:SetContentAlignment(5)
|
||||
longBoost:SetFont("MenuFontNoClamp")
|
||||
longBoost:DockMargin(0, attributePadding, 0, attributePadding)
|
||||
longBoost:SizeToContents()
|
||||
end
|
||||
|
||||
if specialBoost.short then
|
||||
local level = specialBoost.short.level
|
||||
local shortBoost = parent:Add("DLabel")
|
||||
shortBoost:Dock(TOP)
|
||||
if (level != 0) then
|
||||
local change = level > specialBoost.short.target and "decreasing" or "increasing"
|
||||
local sign = level > 0 and "+" or ""
|
||||
shortBoost:SetText(string.format("Şu an %s%d ilaç artışı, %s 1 saniyede %d saniye boyunca", sign, level, change, specialBoost.short.time))
|
||||
elseif (specialBoost.short.time) then
|
||||
local sign = specialBoost.short.target > 0 and "+" or "-"
|
||||
shortBoost:SetText(string.format("%s1 ilaç artışı, %d saniye içinde etkinleşecek", sign, specialBoost.short.time))
|
||||
end
|
||||
shortBoost:SetContentAlignment(5)
|
||||
shortBoost:SetFont("MenuFontNoClamp")
|
||||
shortBoost:DockMargin(0, attributePadding, 0, 0)
|
||||
shortBoost:SizeToContents()
|
||||
end
|
||||
|
||||
if specialBoost.neg then
|
||||
local negativeBoost = parent:Add("DLabel")
|
||||
negativeBoost:Dock(TOP)
|
||||
negativeBoost:SetText("-" .. specialBoost.neg.level .. " açlık ve susuzluktan")
|
||||
negativeBoost:SetContentAlignment(5)
|
||||
negativeBoost:SetFont("MenuFontNoClamp")
|
||||
negativeBoost:DockMargin(0, attributePadding, 0, 0)
|
||||
negativeBoost:SizeToContents()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:CreateAttributePopup()
|
||||
if ix.gui.attributeFrame then
|
||||
ix.gui.attributeFrame:Remove()
|
||||
end
|
||||
|
||||
ix.gui.attributeFrame = vgui.Create("Panel")
|
||||
local attributeFrame = ix.gui.attributeFrame
|
||||
attributeFrame:SetSize(SScaleMin(500 / 3), SScaleMin(507 / 3))
|
||||
attributeFrame:SetAlpha(0)
|
||||
attributeFrame:AlphaTo(255, 0.5, 0)
|
||||
attributeFrame:Center()
|
||||
attributeFrame:MakePopup()
|
||||
attributeFrame.Paint = function(panel, w, h)
|
||||
local blur = Material("pp/blurscreen")
|
||||
|
||||
local x, y = panel:LocalToScreen(0, 0)
|
||||
surface.SetDrawColor( 255, 255, 255 )
|
||||
surface.SetMaterial( blur )
|
||||
|
||||
for i = 1, 6 do
|
||||
blur:SetFloat( "$blur", (i / 6 ) * ( 3 ) )
|
||||
blur:Recompute()
|
||||
render.UpdateScreenEffectTexture()
|
||||
surface.DrawTexturedRect( x * -1, y * -1, ScrW(), ScrH() )
|
||||
end
|
||||
|
||||
surface.SetDrawColor(Color(0, 0, 0, 100))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawOutlinedRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
attributeFrame.Think = function()
|
||||
if !IsValid(PLUGIN.SkillsMenu) then
|
||||
ix.gui.attributeFrame:Remove()
|
||||
end
|
||||
|
||||
if ix.gui.attributeFrame then
|
||||
ix.gui.attributeFrame:MoveToFront()
|
||||
end
|
||||
end
|
||||
|
||||
local topbar = attributeFrame:Add("Panel")
|
||||
topbar:SetSize(attributeFrame:GetWide(), SScaleMin(50 / 3))
|
||||
topbar:Dock(TOP)
|
||||
topbar:DockMargin(0, 0, 0, attributePadding)
|
||||
topbar.Paint = function( _, w, h )
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local titleText = topbar:Add("DLabel")
|
||||
titleText:SetFont("CharCreationBoldTitleNoClamp")
|
||||
titleText:Dock(LEFT)
|
||||
titleText:SetText("Nitelik Arttırmaları")
|
||||
titleText:DockMargin(attributePadding, 0, 0, 0)
|
||||
titleText:SetContentAlignment(4)
|
||||
titleText:SizeToContents()
|
||||
|
||||
local exit = topbar:Add("DImageButton")
|
||||
exit:SetImage("willardnetworks/tabmenu/navicons/exit.png")
|
||||
exit:SetSize(SScaleMin(20 / 3), SScaleMin(20 / 3))
|
||||
exit:DockMargin(0, SScaleMin(15 / 3), attributePadding, SScaleMin(15 / 3))
|
||||
exit:Dock(RIGHT)
|
||||
exit.DoClick = function()
|
||||
if !IsValid(self) then
|
||||
return
|
||||
end
|
||||
|
||||
if attributeFrame then
|
||||
attributeFrame:Remove()
|
||||
end
|
||||
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
end
|
||||
|
||||
local strength = attributeFrame:Add("Panel")
|
||||
self:CreateAttributeBar(strength, "strength")
|
||||
|
||||
local intelligence = attributeFrame:Add("Panel")
|
||||
self:CreateAttributeBar(intelligence, "intelligence")
|
||||
|
||||
local perception = attributeFrame:Add("Panel")
|
||||
self:CreateAttributeBar(perception, "perception")
|
||||
|
||||
local agility = attributeFrame:Add("Panel")
|
||||
self:CreateAttributeBar(agility, "agility")
|
||||
end
|
||||
|
||||
vgui.Register("WNSkillPanel", PANEL, "EditablePanel")
|
||||
|
||||
hook.Add("CreateMenuButtons", "WNSkillPanel", function(tabs)
|
||||
tabs["skills"] = {
|
||||
RowNumber = 2,
|
||||
Width = 18,
|
||||
Height = 18,
|
||||
Icon = "willardnetworks/tabmenu/navicons/crafting.png",
|
||||
Create = function(info, container)
|
||||
if PLUGIN.SkillsMenu then
|
||||
PLUGIN.SkillsMenu:Remove()
|
||||
end
|
||||
|
||||
PLUGIN.SkillsMenu = container:Add("WNSkillPanel")
|
||||
end
|
||||
}
|
||||
end)
|
||||
@@ -0,0 +1,54 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
include("shared.lua")
|
||||
|
||||
-- Called when the entity initializes.
|
||||
function ENT:Initialize()
|
||||
self.fireSize = 100
|
||||
self.nextFlicker = 0
|
||||
end
|
||||
|
||||
-- Called when the entity should draw.
|
||||
function ENT:Draw()
|
||||
self:DrawModel()
|
||||
end
|
||||
|
||||
-- Called when the entity should think.
|
||||
function ENT:Think()
|
||||
local curTime = CurTime()
|
||||
local dlight = DynamicLight( self:EntIndex() )
|
||||
|
||||
if (!self.nextFlicker) then
|
||||
self.nextFlicker = curTime + math.random(0.1, 0.15)
|
||||
end
|
||||
|
||||
if ( dlight ) then
|
||||
local r, g, b, a = self:GetColor()
|
||||
dlight.Pos = self:GetPos()
|
||||
dlight.r = 250
|
||||
dlight.g = 255
|
||||
dlight.b = 125
|
||||
dlight.Brightness = 0
|
||||
dlight.Size = self.fireSize
|
||||
dlight.Decay = 5
|
||||
dlight.DieTime = CurTime() + 0.1
|
||||
self:Flicker()
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:Flicker()
|
||||
local curTime = CurTime()
|
||||
|
||||
if (curTime >= self.nextFlicker) then
|
||||
self.fireSize = math.random(300, 400)
|
||||
self.nextFlicker = nil
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,117 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
include("shared.lua")
|
||||
|
||||
AddCSLuaFile("cl_init.lua")
|
||||
AddCSLuaFile("shared.lua")
|
||||
|
||||
-- Called when the entity initializes.
|
||||
function ENT:Initialize()
|
||||
self:SetModel("models/props_junk/rock001a.mdl")
|
||||
self:PhysicsInit(SOLID_VPHYSICS)
|
||||
self:SetMoveType(MOVETYPE_VPHYSICS)
|
||||
self:SetSolid(SOLID_VPHYSICS)
|
||||
self:SetMaterial("models/effects/splode1_sheet")
|
||||
local phys = self:GetPhysicsObject()
|
||||
if phys:IsValid() then
|
||||
phys:Wake()
|
||||
phys:EnableMotion(false)
|
||||
end
|
||||
self:SpawnProps()
|
||||
self:startFire()
|
||||
end
|
||||
|
||||
-- Called when the entity is spawned.
|
||||
function ENT:SpawnProps()
|
||||
|
||||
local rotation1 = Vector(0, 0, 45)
|
||||
local angle1 = self:GetAngles()
|
||||
angle1:RotateAroundAxis(angle1:Forward(), rotation1.z)
|
||||
|
||||
local rotation2 = Vector(90, 0, 45)
|
||||
local angle2 = self:GetAngles()
|
||||
angle2:RotateAroundAxis(angle2:Up(), rotation2.x)
|
||||
angle2:RotateAroundAxis(angle2:Forward(), rotation2.z)
|
||||
|
||||
local rotation3 = Vector(180, 0, 45)
|
||||
local angle3 = self:GetAngles()
|
||||
angle3:RotateAroundAxis(angle3:Up(), rotation3.x)
|
||||
angle3:RotateAroundAxis(angle3:Forward(), rotation3.z)
|
||||
|
||||
local rotation4 = Vector(270, 0, 45)
|
||||
local angle4 = self:GetAngles()
|
||||
angle4:RotateAroundAxis(angle4:Up(), rotation4.x)
|
||||
angle4:RotateAroundAxis(angle4:Forward(), rotation4.z)
|
||||
|
||||
local Up = 16
|
||||
|
||||
local wood1 = ents.Create("prop_dynamic")
|
||||
wood1:SetPos(self:GetPos() + self:GetUp() * Up)
|
||||
wood1:SetAngles(angle1)
|
||||
wood1:SetModel("models/props_debris/wood_chunk01b.mdl")
|
||||
wood1:Activate()
|
||||
wood1:SetParent(self)
|
||||
wood1:Spawn()
|
||||
wood1:DeleteOnRemove(self)
|
||||
|
||||
local ground = ents.Create("prop_dynamic")
|
||||
ground:SetPos(self:GetPos())
|
||||
ground:SetAngles(self:GetAngles())
|
||||
ground:SetModel("models/willardnetworks/skills/campfire.mdl")
|
||||
ground:Activate()
|
||||
ground:SetParent(self)
|
||||
ground:Spawn()
|
||||
ground:DeleteOnRemove(self)
|
||||
|
||||
local wood2 = ents.Create("prop_dynamic")
|
||||
wood2:SetPos(self:GetPos() + self:GetUp() * Up)
|
||||
wood2:SetAngles(angle2)
|
||||
wood2:SetModel("models/props_debris/wood_chunk01b.mdl")
|
||||
wood2:Activate()
|
||||
wood2:SetParent(self)
|
||||
wood2:Spawn()
|
||||
wood2:DeleteOnRemove(self)
|
||||
|
||||
local wood3 = ents.Create("prop_dynamic")
|
||||
wood3:SetPos(self:GetPos() + self:GetUp() * Up)
|
||||
wood3:SetAngles(angle3)
|
||||
wood3:SetModel("models/props_debris/wood_chunk01b.mdl")
|
||||
wood3:Activate()
|
||||
wood3:SetParent(self)
|
||||
wood3:Spawn()
|
||||
wood3:DeleteOnRemove(self)
|
||||
|
||||
local wood4 = ents.Create("prop_dynamic")
|
||||
wood4:SetPos(self:GetPos() + self:GetUp() * Up)
|
||||
wood4:SetAngles(angle4)
|
||||
wood4:SetModel("models/props_debris/wood_chunk01b.mdl")
|
||||
wood4:Activate()
|
||||
wood4:SetParent(self)
|
||||
wood4:Spawn()
|
||||
wood4:DeleteOnRemove(self)
|
||||
end
|
||||
|
||||
function ENT:OnRemove()
|
||||
self:stopFire()
|
||||
end
|
||||
|
||||
function ENT:startFire()
|
||||
self:Ignite(1)
|
||||
timer.Create( tostring(self:GetCreationID()), 1, 0,
|
||||
function()
|
||||
self:Ignite(1)
|
||||
end)
|
||||
end
|
||||
|
||||
function ENT:stopFire()
|
||||
timer.Remove( tostring(self:GetCreationID()) )
|
||||
self:Extinguish()
|
||||
end
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
DEFINE_BASECLASS("base_gmodentity");
|
||||
|
||||
ENT.Type = "anim";
|
||||
ENT.Author = "RJ";
|
||||
ENT.PrintName = "Campfire";
|
||||
ENT.Spawnable = true;
|
||||
ENT.AdminSpawnable = true;
|
||||
@@ -0,0 +1,65 @@
|
||||
--[[
|
||||
| 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
|
||||
include('shared.lua')
|
||||
|
||||
netstream.Hook("OpenPickupDispenser", function(boughtItems, entity)
|
||||
LocalPlayer().activePickupDispenser = entity
|
||||
LocalPlayer().boughtItems = boughtItems
|
||||
vgui.Create("PickupDispenser")
|
||||
end)
|
||||
|
||||
netstream.Hook("OpenCIDSelector", function(entity)
|
||||
LocalPlayer().activePickupDispenser = entity
|
||||
local cidSelector = vgui.Create("CIDSelector")
|
||||
cidSelector.activeEntity = entity
|
||||
|
||||
cidSelector.ExitCallback = function()
|
||||
netstream.Start("ClosePanels", LocalPlayer().activePickupDispenser)
|
||||
LocalPlayer().activePickupDispenser = nil
|
||||
LocalPlayer().boughtItems = nil
|
||||
end
|
||||
|
||||
cidSelector.SelectCallback = function(idCardID, cid, cidName, entity2)
|
||||
netstream.Start("SelectCID", idCardID, cid, cidName, entity2)
|
||||
end
|
||||
end)
|
||||
|
||||
function ENT:Draw()
|
||||
local position, angles = self:GetPos(), self:GetAngles()
|
||||
local display = self.Displays[self:GetDisplay()] or self.Displays[6]
|
||||
|
||||
angles:RotateAroundAxis(angles:Forward(), 90)
|
||||
angles:RotateAroundAxis(angles:Right(), 270)
|
||||
|
||||
cam.Start3D2D(position + self:GetForward() * 8.4 + self:GetRight()* 8.5 + self:GetUp() * 3, angles, 0.1)
|
||||
render.PushFilterMin(TEXFILTER.NONE)
|
||||
render.PushFilterMag(TEXFILTER.NONE)
|
||||
|
||||
surface.SetDrawColor(color_black)
|
||||
surface.DrawRect(10, 16, 153, 40)
|
||||
|
||||
surface.SetDrawColor(60, 60, 60)
|
||||
surface.DrawOutlinedRect(9, 16, 155, 40)
|
||||
|
||||
surface.SetDrawColor( Color( 255, 255, 255, 3 ) )
|
||||
surface.DrawRect( 11, 36 + math.sin( CurTime() * 4 ) * 38 / 2, 151, 1 )
|
||||
|
||||
local alpha = 191 + 64 * math.sin( CurTime() * 4 )
|
||||
local color = ColorAlpha(display[2], alpha)
|
||||
|
||||
draw.SimpleText(display[1], "MenuFont", 86, 36, color, TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
|
||||
|
||||
render.PopFilterMin()
|
||||
render.PopFilterMag()
|
||||
cam.End3D2D()
|
||||
end
|
||||
@@ -0,0 +1,377 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
AddCSLuaFile( "cl_init.lua" )
|
||||
AddCSLuaFile( "shared.lua" )
|
||||
|
||||
include('shared.lua')
|
||||
|
||||
function ENT:SpawnFunction(client, trace)
|
||||
local dispenser = ents.Create("ix_pickupterminal")
|
||||
|
||||
dispenser:SetPos(trace.HitPos)
|
||||
dispenser:SetAngles(trace.HitNormal:Angle())
|
||||
dispenser:Spawn()
|
||||
dispenser:Activate()
|
||||
|
||||
ix.saveEnts:SaveEntity(dispenser)
|
||||
PLUGIN:SavePickupTerminals()
|
||||
return dispenser
|
||||
end
|
||||
|
||||
ix.log.AddType("pickupDispenserGotItem", function(client)
|
||||
return string.format("[PICKUP DISPENSER] %s ( %s ) picked up an item from the pickup dispenser.", client:SteamName(), client:Name())
|
||||
end)
|
||||
|
||||
function ENT:Initialize()
|
||||
-- Because dispenser model has no physics object in order to allow pass through walls
|
||||
self:SetModel("models/props_junk/watermelon01.mdl")
|
||||
self:SetSolid(SOLID_VPHYSICS)
|
||||
self:SetMoveType(MOVETYPE_VPHYSICS)
|
||||
self:DrawShadow(false)
|
||||
self:SetUseType(SIMPLE_USE)
|
||||
self:SetDisplay(1)
|
||||
self:PhysicsInit(SOLID_VPHYSICS)
|
||||
|
||||
self.dispenser = ents.Create("prop_dynamic")
|
||||
self.dispenser:SetModel("models/props_combine/pickup_dispenser3.mdl")
|
||||
self.dispenser:SetPos(self:GetPos())
|
||||
self.dispenser:SetAngles(self:GetAngles())
|
||||
self.dispenser:SetParent(self)
|
||||
self.dispenser:Spawn()
|
||||
self.dispenser:Activate()
|
||||
self.dispenser:SetTrigger(true)
|
||||
self:DeleteOnRemove(self.dispenser)
|
||||
|
||||
local physics = self.dispenser:GetPhysicsObject()
|
||||
physics:EnableMotion(false)
|
||||
physics:Wake()
|
||||
|
||||
self.canUse = true
|
||||
self.nextUseTime = CurTime()
|
||||
end
|
||||
|
||||
function ENT:ItemChoiceLogic(item, inventory, cid, purchasedItems)
|
||||
if (item == "newspaper_printer") then
|
||||
if (!inventory:Add(item, 1, {registeredCID = cid:GetData("cid")})) then
|
||||
return false
|
||||
end
|
||||
elseif (item == "apartmentkey" or item == "shopkey") then
|
||||
local housing = ix.plugin.list["housing"]
|
||||
if housing and housing.GetApartmentByCID then
|
||||
local cidData = cid:GetData("cid")
|
||||
local appID = housing:GetApartmentByCID(cidData, item)
|
||||
if appID then
|
||||
if (!inventory:Add(item, 1, {cid = cidData, apartment = appID})) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif (string.find(item, "letter")) then
|
||||
local itemData = purchasedItems[item]
|
||||
if (!inventory:Add("paper", 1, {title = itemData.title, writingID = itemData.writingID, owner = itemData.currentOwner})) then
|
||||
return false
|
||||
end
|
||||
else
|
||||
if (!inventory:Add(item)) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT:GiveItem(client, item, cid)
|
||||
local character = client:GetCharacter()
|
||||
local inventory = character:GetInventory()
|
||||
local itemTable = string.find(item, "letter") and ix.item.list["paper"] or ix.item.list[item]
|
||||
if (!itemTable) then return false end
|
||||
|
||||
if (!inventory:FindEmptySlot(itemTable.width, itemTable.height)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if !inventory:GetItemByID(cid.id) then
|
||||
return false
|
||||
end
|
||||
|
||||
if self.charLoaded then
|
||||
if ix.char.loaded[self.charLoaded] then
|
||||
local items = ix.char.loaded[self.charLoaded]:GetPurchasedItems()
|
||||
if (!items[item] or (!istable(items[item]) and items[item] <= 0)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if self:ItemChoiceLogic(item, inventory, cid, items) then
|
||||
ix.char.loaded[self.charLoaded]:SetPurchasedItems(item)
|
||||
ix.log.Add(client, "pickupDispenserGotItem")
|
||||
end
|
||||
end
|
||||
else
|
||||
if self.dbGeneric then
|
||||
local queryObj = mysql:Select("ix_characters_data")
|
||||
queryObj:Where("id", self.dbGeneric)
|
||||
queryObj:Where("key", "purchasedItems")
|
||||
queryObj:Select("data")
|
||||
queryObj:Callback(function(result)
|
||||
if (!istable(result) or !result[1]) then return end
|
||||
if !result[1].data then return end
|
||||
local items = util.JSONToTable(result[1].data)
|
||||
|
||||
if !items[item] then return end
|
||||
|
||||
if !istable(items[item]) then
|
||||
if items[item] > 0 then
|
||||
items[item] = items[item] - 1
|
||||
|
||||
if items[item] == 0 then
|
||||
items[item] = nil
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
if items[item] then items[item] = nil end
|
||||
end
|
||||
|
||||
if self:ItemChoiceLogic(item, inventory, cid, items) then
|
||||
local updateQuery = mysql:Update("ix_characters_data")
|
||||
updateQuery:Update("data", util.TableToJSON(items))
|
||||
updateQuery:Where("id", self.dbGeneric)
|
||||
updateQuery:Where("key", "purchasedItems")
|
||||
updateQuery:Execute()
|
||||
ix.log.Add(client, "pickupDispenserGotItem")
|
||||
end
|
||||
end)
|
||||
|
||||
queryObj:Execute()
|
||||
end
|
||||
end
|
||||
|
||||
self:EmitSound("buttons/button1.wav")
|
||||
self:SetDisplay(3)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT:OpenCIDSelector(client)
|
||||
netstream.Start(client, "OpenCIDSelector", self)
|
||||
end
|
||||
|
||||
function ENT:CreateCombineAlert(client, message)
|
||||
ix.combineNotify:AddImportantNotification(message, nil, client, self:GetPos())
|
||||
end
|
||||
|
||||
function ENT.OpenDispenserFail(idCard, client, activeDispenser)
|
||||
if (!IsValid(activeDispenser)) then return end
|
||||
|
||||
activeDispenser:SetDisplay(4)
|
||||
activeDispenser:EmitSound("ambient/machines/combine_terminal_idle1.wav")
|
||||
activeDispenser.charLoaded = nil
|
||||
activeDispenser.dbGeneric = nil
|
||||
activeDispenser.activeCID = nil
|
||||
|
||||
timer.Simple(2, function()
|
||||
if IsValid(activeDispenser) then
|
||||
activeDispenser:SetDisplay(1)
|
||||
activeDispenser.canUse = true
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function ENT:CheckForVerdicts(client, idCard, genericData)
|
||||
if (idCard:GetData("active", false) == false) then
|
||||
self:CreateCombineAlert(client, "WRN:// Inactive Identification Card #" .. idCard:GetData("cid", 00000) .. " usage attempt detected")
|
||||
|
||||
self:SetDisplay(9)
|
||||
timer.Simple(1.5, function()
|
||||
if self then
|
||||
self.OpenDispenserFail(nil, client, self)
|
||||
end
|
||||
end)
|
||||
return
|
||||
end
|
||||
|
||||
local isBOL = genericData.bol
|
||||
local isAC = genericData.anticitizen
|
||||
if (isBOL or isAC) then
|
||||
local text = isBOL and "BOL Suspect" or "Anti-Citizen"
|
||||
self:CreateCombineAlert(client, "WRN:// " .. text .. " Identification Card activity detected")
|
||||
|
||||
if isAC then
|
||||
self:SetDisplay(9)
|
||||
timer.Simple(1.5, function()
|
||||
if self then
|
||||
self.OpenDispenserFail(nil, client, self)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
return !isAC -- stop if isAC, continue for isBOL
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT.OpenDispenser(idCard, genericData, client, activeTerminal)
|
||||
if (!IsValid(activeTerminal)) then return end
|
||||
|
||||
activeTerminal:EmitSound("buttons/button4.wav")
|
||||
|
||||
activeTerminal:SetDisplay(2)
|
||||
if (activeTerminal:CheckForVerdicts(client, idCard, genericData)) then
|
||||
timer.Simple(2, function()
|
||||
if table.IsEmpty(genericData) then
|
||||
activeTerminal:SetDisplay(9)
|
||||
activeTerminal:EmitSound("buttons/button2.wav")
|
||||
timer.Simple(2, function()
|
||||
if IsValid(activeTerminal) then
|
||||
activeTerminal.charLoaded = nil
|
||||
activeTerminal.dbGeneric = nil
|
||||
activeTerminal.activeCID = nil
|
||||
activeTerminal:SetDisplay(1)
|
||||
activeTerminal.canUse = true
|
||||
end
|
||||
end)
|
||||
else
|
||||
activeTerminal:OnSuccess(idCard, genericData, client)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:OnSuccess(idCard, genericData, client)
|
||||
self:SetDisplay(7)
|
||||
self:EmitSound("ambient/machines/combine_terminal_idle3.wav")
|
||||
self.activeCID = idCard
|
||||
|
||||
if ix.char.loaded[genericData.id] then
|
||||
self.charLoaded = genericData.id
|
||||
netstream.Start(client, "OpenPickupDispenser", ix.char.loaded[genericData.id]:GetPurchasedItems(), self)
|
||||
return
|
||||
end
|
||||
|
||||
local queryObj = mysql:Select("ix_characters_data")
|
||||
queryObj:Where("id", genericData.id)
|
||||
queryObj:Where("key", "purchasedItems")
|
||||
queryObj:Select("data")
|
||||
queryObj:Callback(function(result)
|
||||
if (!istable(result) or !result[1]) then return end
|
||||
if !result[1].data then return end
|
||||
|
||||
netstream.Start(client, "OpenPickupDispenser", util.JSONToTable(result[1].data), self)
|
||||
self.dbGeneric = genericData.id
|
||||
end)
|
||||
|
||||
queryObj:Execute()
|
||||
end
|
||||
|
||||
function ENT:CheckForCID(client)
|
||||
local idCards = self.activeCharacter:GetInventory():GetItemsByUniqueID("id_card")
|
||||
|
||||
if (#idCards > 1) then
|
||||
self:OpenCIDSelector(client)
|
||||
return
|
||||
end
|
||||
|
||||
if (#idCards == 1) then
|
||||
idCards[1]:LoadOwnerGenericData(self.OpenDispenser, self.OpenDispenserFail, client, self)
|
||||
else
|
||||
self.canUse = false
|
||||
self:EmitSound("buttons/button2.wav")
|
||||
timer.Simple(1, function()
|
||||
if (IsValid(self)) then
|
||||
self.canUse = true
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:CheckGlobalUse(client)
|
||||
if client.CantPlace then
|
||||
client:NotifyLocalized("Bunu kullanmak için biraz beklemelisin!")
|
||||
return false
|
||||
end
|
||||
|
||||
client.CantPlace = true
|
||||
|
||||
timer.Simple(3, function()
|
||||
if client then
|
||||
client.CantPlace = false
|
||||
end
|
||||
end)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT:CheckLocalUse(client)
|
||||
if (!self.canUse and IsValid(self.activePlayer) and self.activePlayer:GetCharacter() == self.activeCharacter) then
|
||||
return false
|
||||
else
|
||||
self.canUse = false
|
||||
self.activePlayer = client
|
||||
self.activeCharacter = client:GetCharacter()
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:StartTouch(entity)
|
||||
if (entity:GetClass() != "ix_item") then return end
|
||||
if !self.canUse then return end
|
||||
|
||||
self.canUse = false
|
||||
|
||||
local itemID = entity:GetItemID()
|
||||
if ix.city:IsDisallowment(itemID) then
|
||||
self:SetDisplay(11)
|
||||
self:EmitSound("ambient/machines/combine_terminal_idle1.wav")
|
||||
|
||||
timer.Simple(2, function()
|
||||
if IsValid(self) then
|
||||
self:SetDisplay(1)
|
||||
self.canUse = true
|
||||
end
|
||||
end)
|
||||
else
|
||||
ix.city.main:AddItem(itemID, entity:GetData("stack", 1))
|
||||
entity:Remove()
|
||||
|
||||
self:SetDisplay(10)
|
||||
self:EmitSound("ambient/machines/combine_terminal_idle1.wav")
|
||||
|
||||
timer.Simple(2, function()
|
||||
if IsValid(self) then
|
||||
self:SetDisplay(1)
|
||||
self.canUse = true
|
||||
end
|
||||
end)
|
||||
|
||||
self:EmitSound("physics/metal/weapon_impact_soft" .. math.random(1, 3) .. ".wav")
|
||||
end
|
||||
end
|
||||
|
||||
function ENT:OnUse(client)
|
||||
self:CheckForCID(client)
|
||||
end
|
||||
|
||||
function ENT:Use(client)
|
||||
if !self:CheckGlobalUse(client) then
|
||||
return false
|
||||
end
|
||||
|
||||
if !self:CheckLocalUse(client) then
|
||||
return false
|
||||
end
|
||||
|
||||
self:OnUse(client)
|
||||
end
|
||||
@@ -0,0 +1,45 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
ENT.Type = "anim"
|
||||
ENT.PrintName = "Pickup Terminal"
|
||||
ENT.Author = "Fruity"
|
||||
ENT.Contact = "Willard Networks"
|
||||
ENT.Purpose = "Pickup items bought with certain skills."
|
||||
ENT.Instructions = "Press E"
|
||||
ENT.Category = "HL2 RP"
|
||||
|
||||
ENT.Spawnable = true
|
||||
ENT.AdminOnly = true
|
||||
ENT.PhysgunDisable = true
|
||||
ENT.bNoPersist = true
|
||||
|
||||
ENT.canMalfunction = true
|
||||
|
||||
ENT.Displays = {
|
||||
[1] = {"ID BEKLENIYOR", Color( 255, 255, 180 ), true},
|
||||
[2] = {"KONTROL EDILIYOR", Color(255, 200, 0)},
|
||||
[3] = {"DAGITIM", Color(0, 255, 0)},
|
||||
[4] = {"YENILENIYOR", Color(255, 200, 0)},
|
||||
[5] = {"KAPALI", Color(255, 0, 0), true},
|
||||
[6] = {"ID BEKLENIYOR", Color( 255, 255, 180 )},
|
||||
[7] = {"HAZIRLANIYOR", Color(0, 255, 0)},
|
||||
[8] = {"ALINAN ESYA YOK", Color(0, 255, 0)},
|
||||
[9] = {"GECERSIZ ID", Color(255, 0, 0)},
|
||||
[10] = {"ESYA EKLENDI", Color(0, 255, 0)},
|
||||
[11] = {"ESYA REDDEDILDI", Color(255, 0, 0), true},
|
||||
}
|
||||
|
||||
function ENT:SetupDataTables()
|
||||
self:NetworkVar("Int", 0, "Display")
|
||||
end
|
||||
@@ -0,0 +1,564 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
if (SERVER) then
|
||||
AddCSLuaFile("shared.lua")
|
||||
end
|
||||
|
||||
SWEP.PrintName = "CIVIL ADMINISTRATION PDA"
|
||||
SWEP.Category = "Half-Life 2"
|
||||
SWEP.Spawnable= true
|
||||
SWEP.AdminSpawnable= true
|
||||
SWEP.AdminOnly = false
|
||||
|
||||
SWEP.ViewModelFOV = 70
|
||||
SWEP.ViewModel = "models/weapons/c_slam.mdl"
|
||||
SWEP.WorldModel = "models/weapons/c_slam.mdl"
|
||||
SWEP.ShowViewModel = false
|
||||
SWEP.ShowWorldModel = false
|
||||
SWEP.ViewModelFlip = false
|
||||
SWEP.BobScale = 1
|
||||
SWEP.SwayScale = 0
|
||||
|
||||
SWEP.AutoSwitchTo = false
|
||||
SWEP.AutoSwitchFrom = false
|
||||
SWEP.Weight = 0
|
||||
SWEP.Slot = 0
|
||||
SWEP.SlotPos = 1
|
||||
|
||||
SWEP.UseHands = true
|
||||
SWEP.FireWhenLowered = true
|
||||
SWEP.FiresUnderwater = true
|
||||
SWEP.DrawAmmo = false
|
||||
SWEP.CSMuzzleFlashes = 1
|
||||
SWEP.Base = "weapon_base"
|
||||
SWEP.IsAlwaysRaised = true
|
||||
SWEP.HoldType = "knife"
|
||||
|
||||
SWEP.Primary.ClipSize = -1
|
||||
SWEP.Primary.DefaultClip = -1
|
||||
SWEP.Primary.Automatic = false
|
||||
SWEP.Primary.Ammo = ""
|
||||
SWEP.Primary.Damage = 5
|
||||
SWEP.Primary.Delay = 0.75
|
||||
|
||||
SWEP.Secondary.ClipSize = -1
|
||||
SWEP.Secondary.DefaultClip = 0
|
||||
SWEP.Secondary.Automatic = false
|
||||
SWEP.Secondary.Ammo = ""
|
||||
SWEP.Secondary.Delay = 0.5
|
||||
|
||||
SWEP.MaxOffFlat = 80 -- Maximum degrees off of flat to be.
|
||||
|
||||
SWEP.LastFire = 0
|
||||
|
||||
SWEP.IronSightsPos = Vector(0, 0, 0)
|
||||
SWEP.IronSightsAng = Vector(0, 0, 0)
|
||||
|
||||
SWEP.ViewModelBoneMods = {
|
||||
["ValveBiped.Bip01_R_UpperArm"] = { scale = Vector(1, 1, 1), pos = Vector(-1, 1, 0), angle = Angle(5, 10, 5) },
|
||||
["ValveBiped.Bip01_L_UpperArm"] = { scale = Vector(1, 1, 1), pos = Vector(-3.5,-1.8, 0.8), angle = Angle(12, -5, 0) },
|
||||
["Slam_base"] = { scale = Vector(0.001, 0.001, 0.001), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) },
|
||||
["Detonator"] = { scale = Vector(0.001, 0.001, 0.001), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }
|
||||
}
|
||||
|
||||
SWEP.VElements = {
|
||||
["v_element"] = { type = "Model", model = "models/fruity/pda.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(4.68, 2.7514, -1.198), angle = Angle(-90, -50.392, 90), size = Vector(1, 1, 1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
|
||||
}
|
||||
|
||||
SWEP.WElements = {
|
||||
["w_element"] = { type = "Model", model = "models/fruity/pda.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(5, 1.111, 0), angle = Angle(-90, -50.392, 90), size = Vector(1, 1, 1), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
|
||||
}
|
||||
|
||||
function SWEP:Initialize()
|
||||
self:SetWeaponHoldType( self.HoldType )
|
||||
|
||||
if CLIENT then
|
||||
// Create a new table for every weapon instance
|
||||
self.VElements = table.FullCopy( self.VElements )
|
||||
self.WElements = table.FullCopy( self.WElements )
|
||||
self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods )
|
||||
self:SetWeaponHoldType( self.HoldType )
|
||||
|
||||
self:CreateModels(self.VElements) // create viewmodels
|
||||
self:CreateModels(self.WElements) // create worldmodels
|
||||
|
||||
// init view model bone build function
|
||||
if IsValid(self.Owner) then
|
||||
local vm = self.Owner:GetViewModel()
|
||||
if IsValid(vm) then
|
||||
self:ResetBonePositions(vm)
|
||||
|
||||
// Init viewmodel visibility
|
||||
if (self.ShowViewModel == nil or self.ShowViewModel) then
|
||||
vm:SetColor(Color(255,255,255,255))
|
||||
else
|
||||
// we set the alpha to 1 instead of 0 because else ViewModelDrawn stops being called
|
||||
vm:SetColor(Color(255,255,255,1))
|
||||
// ^ stopped working in GMod 13 because you have to do Entity:SetRenderMode(1) for translucency to kick in
|
||||
// however for some reason the view model resets to render mode 0 every frame so we just apply a debug material to prevent it from drawing
|
||||
vm:SetMaterial("Debug/hsv")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
if CLIENT then
|
||||
|
||||
SWEP.vRenderOrder = nil
|
||||
function SWEP:ViewModelDrawn()
|
||||
|
||||
local vm = self.Owner:GetViewModel()
|
||||
if !IsValid(vm) then return end
|
||||
|
||||
if (!self.VElements) then return end
|
||||
|
||||
self:UpdateBonePositions(vm)
|
||||
|
||||
if (!self.vRenderOrder) then
|
||||
|
||||
// we build a render order because sprites need to be drawn after models
|
||||
self.vRenderOrder = {}
|
||||
|
||||
for k, v in pairs( self.VElements ) do
|
||||
if (v.type == "Model") then
|
||||
table.insert(self.vRenderOrder, 1, k)
|
||||
elseif (v.type == "Sprite" or v.type == "Quad") then
|
||||
table.insert(self.vRenderOrder, k)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
for k, name in ipairs( self.vRenderOrder ) do
|
||||
|
||||
local v = self.VElements[name]
|
||||
if (!v) then self.vRenderOrder = nil break end
|
||||
if (v.hide) then continue end
|
||||
|
||||
local model = v.modelEnt
|
||||
local sprite = v.spriteMaterial
|
||||
|
||||
if (!v.bone) then continue end
|
||||
|
||||
local pos, ang = self:GetBoneOrientation( self.VElements, v, vm )
|
||||
|
||||
if (!pos) then continue end
|
||||
|
||||
if (v.type == "Model" and IsValid(model)) then
|
||||
|
||||
model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
|
||||
ang:RotateAroundAxis(ang:Up(), v.angle.y)
|
||||
ang:RotateAroundAxis(ang:Right(), v.angle.p)
|
||||
ang:RotateAroundAxis(ang:Forward(), v.angle.r)
|
||||
|
||||
model:SetAngles(ang)
|
||||
//model:SetModelScale(v.size)
|
||||
local matrix = Matrix()
|
||||
matrix:Scale(v.size)
|
||||
model:EnableMatrix( "RenderMultiply", matrix )
|
||||
|
||||
if (v.material == "") then
|
||||
model:SetMaterial("")
|
||||
elseif (model:GetMaterial() != v.material) then
|
||||
model:SetMaterial( v.material )
|
||||
end
|
||||
|
||||
model:SetSkin(0)
|
||||
|
||||
if (v.bodygroup) then
|
||||
for k, v in pairs( v.bodygroup ) do
|
||||
if (model:GetBodygroup(k) != v) then
|
||||
model:SetBodygroup(k, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (v.surpresslightning) then
|
||||
render.SuppressEngineLighting(true)
|
||||
end
|
||||
|
||||
render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
|
||||
render.SetBlend(v.color.a/255)
|
||||
model:DrawModel()
|
||||
render.SetBlend(1)
|
||||
render.SetColorModulation(1, 1, 1)
|
||||
|
||||
if (v.surpresslightning) then
|
||||
render.SuppressEngineLighting(false)
|
||||
end
|
||||
|
||||
elseif (v.type == "Sprite" and sprite) then
|
||||
|
||||
local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
|
||||
render.SetMaterial(sprite)
|
||||
render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
|
||||
|
||||
elseif (v.type == "Quad" and v.draw_func) then
|
||||
|
||||
local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
|
||||
ang:RotateAroundAxis(ang:Up(), v.angle.y)
|
||||
ang:RotateAroundAxis(ang:Right(), v.angle.p)
|
||||
ang:RotateAroundAxis(ang:Forward(), v.angle.r)
|
||||
|
||||
cam.Start3D2D(drawpos, ang, v.size)
|
||||
v.draw_func( self )
|
||||
cam.End3D2D()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
SWEP.wRenderOrder = nil
|
||||
function SWEP:DrawWorldModel()
|
||||
|
||||
if (self.ShowWorldModel == nil or self.ShowWorldModel) then
|
||||
end
|
||||
|
||||
if (!self.WElements) then return end
|
||||
|
||||
if (!self.wRenderOrder) then
|
||||
|
||||
self.wRenderOrder = {}
|
||||
|
||||
for k, v in pairs( self.WElements ) do
|
||||
if (v.type == "Model") then
|
||||
table.insert(self.wRenderOrder, 1, k)
|
||||
elseif (v.type == "Sprite" or v.type == "Quad") then
|
||||
table.insert(self.wRenderOrder, k)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if (IsValid(self.Owner)) then
|
||||
bone_ent = self.Owner
|
||||
else
|
||||
// when the weapon is dropped
|
||||
bone_ent = self
|
||||
end
|
||||
|
||||
for k, name in pairs( self.wRenderOrder ) do
|
||||
|
||||
local v = self.WElements[name]
|
||||
if (!v) then self.wRenderOrder = nil break end
|
||||
if (v.hide) then continue end
|
||||
|
||||
local pos, ang
|
||||
|
||||
if (v.bone) then
|
||||
pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent )
|
||||
else
|
||||
pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" )
|
||||
end
|
||||
|
||||
if (!pos) then continue end
|
||||
|
||||
local model = v.modelEnt
|
||||
local sprite = v.spriteMaterial
|
||||
|
||||
if (v.type == "Model" and IsValid(model)) then
|
||||
|
||||
model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
|
||||
ang:RotateAroundAxis(ang:Up(), v.angle.y)
|
||||
ang:RotateAroundAxis(ang:Right(), v.angle.p)
|
||||
ang:RotateAroundAxis(ang:Forward(), v.angle.r)
|
||||
|
||||
model:SetAngles(ang)
|
||||
//model:SetModelScale(v.size)
|
||||
local matrix = Matrix()
|
||||
matrix:Scale(v.size)
|
||||
model:EnableMatrix( "RenderMultiply", matrix )
|
||||
|
||||
if (v.material == "") then
|
||||
model:SetMaterial("")
|
||||
elseif (model:GetMaterial() != v.material) then
|
||||
model:SetMaterial( v.material )
|
||||
end
|
||||
|
||||
model:SetSkin(0)
|
||||
|
||||
if (v.bodygroup) then
|
||||
for k, v in pairs( v.bodygroup ) do
|
||||
if (model:GetBodygroup(k) != v) then
|
||||
model:SetBodygroup(k, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (v.surpresslightning) then
|
||||
render.SuppressEngineLighting(true)
|
||||
end
|
||||
|
||||
render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
|
||||
render.SetBlend(v.color.a/255)
|
||||
model:DrawModel()
|
||||
render.SetBlend(1)
|
||||
render.SetColorModulation(1, 1, 1)
|
||||
|
||||
if (v.surpresslightning) then
|
||||
render.SuppressEngineLighting(false)
|
||||
end
|
||||
|
||||
elseif (v.type == "Sprite" and sprite) then
|
||||
|
||||
local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
|
||||
render.SetMaterial(sprite)
|
||||
render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
|
||||
|
||||
elseif (v.type == "Quad" and v.draw_func) then
|
||||
|
||||
local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
|
||||
ang:RotateAroundAxis(ang:Up(), v.angle.y)
|
||||
ang:RotateAroundAxis(ang:Right(), v.angle.p)
|
||||
ang:RotateAroundAxis(ang:Forward(), v.angle.r)
|
||||
|
||||
cam.Start3D2D(drawpos, ang, v.size)
|
||||
v.draw_func( self )
|
||||
cam.End3D2D()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override )
|
||||
|
||||
local bone, pos, ang
|
||||
if (tab.rel and tab.rel != "") then
|
||||
|
||||
local v = basetab[tab.rel]
|
||||
|
||||
if (!v) then return end
|
||||
|
||||
|
||||
pos, ang = self:GetBoneOrientation( basetab, v, ent )
|
||||
|
||||
if (!pos) then return end
|
||||
|
||||
pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
|
||||
ang:RotateAroundAxis(ang:Up(), v.angle.y)
|
||||
ang:RotateAroundAxis(ang:Right(), v.angle.p)
|
||||
ang:RotateAroundAxis(ang:Forward(), v.angle.r)
|
||||
|
||||
else
|
||||
|
||||
bone = ent:LookupBone(bone_override or tab.bone)
|
||||
|
||||
if (!bone) then return end
|
||||
|
||||
pos, ang = Vector(0,0,0), Angle(0,0,0)
|
||||
local m = ent:GetBoneMatrix(bone)
|
||||
if (m) then
|
||||
pos, ang = m:GetTranslation(), m:GetAngles()
|
||||
end
|
||||
|
||||
if (IsValid(self.Owner) and self.Owner:IsPlayer() and
|
||||
ent == self.Owner:GetViewModel() and self.ViewModelFlip) then
|
||||
ang.r = -ang.r // Fixes mirrored models
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
return pos, ang
|
||||
end
|
||||
|
||||
function SWEP:CreateModels( tab )
|
||||
|
||||
if (!tab) then return end
|
||||
|
||||
for k, v in pairs( tab ) do
|
||||
if (v.type == "Model" and v.model and v.model != "" and (!IsValid(v.modelEnt) or v.createdModel != v.model) and
|
||||
string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then
|
||||
|
||||
v.modelEnt = ClientsideModel(v.model, RENDER_GROUP_VIEW_MODEL_OPAQUE)
|
||||
if (IsValid(v.modelEnt)) then
|
||||
v.modelEnt:SetPos(self:GetPos())
|
||||
v.modelEnt:SetAngles(self:GetAngles())
|
||||
v.modelEnt:SetParent(self)
|
||||
v.modelEnt:SetNoDraw(true)
|
||||
v.createdModel = v.model
|
||||
else
|
||||
v.modelEnt = nil
|
||||
end
|
||||
|
||||
elseif (v.type == "Sprite" and v.sprite and v.sprite != "" and (!v.spriteMaterial or v.createdSprite != v.sprite)
|
||||
and file.Exists ("materials/"..v.sprite..".vmt", "GAME")) then
|
||||
|
||||
local name = v.sprite.."-"
|
||||
local params = { ["$basetexture"] = v.sprite }
|
||||
// make sure we create a unique name based on the selected options
|
||||
local tocheck = { "nocull", "additive", "vertexalpha", "vertexcolor", "ignorez" }
|
||||
for i, j in pairs( tocheck ) do
|
||||
if (v[j]) then
|
||||
params["$"..j] = 1
|
||||
name = name.."1"
|
||||
else
|
||||
name = name.."0"
|
||||
end
|
||||
end
|
||||
|
||||
v.createdSprite = v.sprite
|
||||
v.spriteMaterial = CreateMaterial(name,"UnlitGeneric",params)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local allbones
|
||||
local hasGarryFixedBoneScalingYet = false
|
||||
|
||||
function SWEP:UpdateBonePositions(vm)
|
||||
|
||||
if self.ViewModelBoneMods then
|
||||
|
||||
if (!vm:GetBoneCount()) then return end
|
||||
|
||||
// !! WORKAROUND !! //
|
||||
// We need to check all model names :/
|
||||
local loopthrough = self.ViewModelBoneMods
|
||||
if (!hasGarryFixedBoneScalingYet) then
|
||||
allbones = {}
|
||||
for i=0, vm:GetBoneCount() do
|
||||
local bonename = vm:GetBoneName(i)
|
||||
if (self.ViewModelBoneMods[bonename]) then
|
||||
allbones[bonename] = self.ViewModelBoneMods[bonename]
|
||||
else
|
||||
allbones[bonename] = {
|
||||
scale = Vector(1,1,1),
|
||||
pos = Vector(0,0,0),
|
||||
angle = Angle(0,0,0)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
loopthrough = allbones
|
||||
end
|
||||
// !! ----------- !! //
|
||||
|
||||
for k, v in pairs( loopthrough ) do
|
||||
local bone = vm:LookupBone(k)
|
||||
if (!bone) then continue end
|
||||
|
||||
// !! WORKAROUND !! //
|
||||
local s = Vector(v.scale.x,v.scale.y,v.scale.z)
|
||||
local p = Vector(v.pos.x,v.pos.y,v.pos.z)
|
||||
local ms = Vector(1,1,1)
|
||||
if (!hasGarryFixedBoneScalingYet) then
|
||||
local cur = vm:GetBoneParent(bone)
|
||||
while(cur >= 0) do
|
||||
local pscale = loopthrough[vm:GetBoneName(cur)].scale
|
||||
ms = ms * pscale
|
||||
cur = vm:GetBoneParent(cur)
|
||||
end
|
||||
end
|
||||
|
||||
s = s * ms
|
||||
// !! ----------- !! //
|
||||
|
||||
if vm:GetManipulateBoneScale(bone) != s then
|
||||
vm:ManipulateBoneScale( bone, s )
|
||||
end
|
||||
if vm:GetManipulateBoneAngles(bone) != v.angle then
|
||||
vm:ManipulateBoneAngles( bone, v.angle )
|
||||
end
|
||||
if vm:GetManipulateBonePosition(bone) != p then
|
||||
vm:ManipulateBonePosition( bone, p )
|
||||
end
|
||||
end
|
||||
else
|
||||
self:ResetBonePositions(vm)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function SWEP:ResetBonePositions(vm)
|
||||
|
||||
if (!vm:GetBoneCount()) then return end
|
||||
for i=0, vm:GetBoneCount() do
|
||||
vm:ManipulateBoneScale( i, Vector(1, 1, 1) )
|
||||
vm:ManipulateBoneAngles( i, Angle(0, 0, 0) )
|
||||
vm:ManipulateBonePosition( i, Vector(0, 0, 0) )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
function table.FullCopy( tab )
|
||||
|
||||
if (!tab) then return nil end
|
||||
|
||||
local res = {}
|
||||
for k, v in pairs( tab ) do
|
||||
if (type(v) == "table") then
|
||||
res[k] = table.FullCopy(v)
|
||||
elseif (type(v) == "Vector") then
|
||||
res[k] = Vector(v.x, v.y, v.z)
|
||||
elseif (type(v) == "Angle") then
|
||||
res[k] = Angle(v.p, v.y, v.r)
|
||||
else
|
||||
res[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
return res
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
function SWEP:Deploy()
|
||||
--if !IsValid(self.Owner.C4s) then self.Owner.C4s = {} end
|
||||
self.Weapon:SendWeaponAnim(ACT_SLAM_TRIPMINE_DRAW)
|
||||
end
|
||||
|
||||
function SWEP:PrimaryAttack()
|
||||
self:EmitSound( "UI/buttonclick.wav" )
|
||||
self:SetNextPrimaryFire( CurTime()+2 )
|
||||
if CLIENT and IsFirstTimePredicted() then
|
||||
if self.Owner:GetCharacter() then
|
||||
if self.Owner:GetCharacter():GetFaction() == FACTION_ADMIN then
|
||||
if IsValid(self.Owner) then
|
||||
netstream.Start("GetMessageList")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:SecondaryAttack()
|
||||
end
|
||||
|
||||
function SWEP:Holster()
|
||||
|
||||
if CLIENT and IsValid(self.Owner) then
|
||||
local vm = self.Owner:GetViewModel()
|
||||
if IsValid(vm) then
|
||||
self:ResetBonePositions(vm)
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function SWEP:OnRemove()
|
||||
self:Holster()
|
||||
end
|
||||
@@ -0,0 +1,253 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
AddCSLuaFile()
|
||||
|
||||
SWEP.PrintName = "Workbench Placer"
|
||||
SWEP.Author = "JohnyReaper/Fruity"
|
||||
SWEP.Purpose = ""
|
||||
SWEP.Category = "HL2 RP"
|
||||
|
||||
SWEP.Slot = 0
|
||||
SWEP.SlotPos = 1
|
||||
|
||||
SWEP.ViewModel = Model("")
|
||||
SWEP.WorldModel = Model("")
|
||||
SWEP.ViewModelFOV = 70
|
||||
SWEP.UseHands = false
|
||||
SWEP.HoldType = "normal"
|
||||
|
||||
SWEP.Ent = "ix_item"
|
||||
SWEP.BarricadePlace = nil
|
||||
SWEP.item = false
|
||||
|
||||
SWEP.PreviewModel = false
|
||||
|
||||
SWEP.Spawnable = true
|
||||
|
||||
SWEP.Primary.ClipSize = -1
|
||||
SWEP.Primary.DefaultClip = -1
|
||||
SWEP.Primary.Automatic = false
|
||||
SWEP.Primary.Ammo = "none"
|
||||
|
||||
SWEP.Secondary.ClipSize = -1
|
||||
SWEP.Secondary.DefaultClip = -1
|
||||
SWEP.Secondary.Automatic = false
|
||||
SWEP.Secondary.Ammo = "none"
|
||||
|
||||
SWEP.DrawAmmo = false
|
||||
|
||||
SWEP.IsAlwaysLowered = true
|
||||
SWEP.FireWhenLowered = true
|
||||
|
||||
function SWEP:Initialize()
|
||||
self:SetWeaponHoldType(self.HoldType)
|
||||
if CLIENT then
|
||||
self:GhostProp()
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:Deploy()
|
||||
if CLIENT then
|
||||
self:GhostProp()
|
||||
end
|
||||
end
|
||||
|
||||
if (CLIENT) then
|
||||
SWEP.nextModelRequest = CurTime()
|
||||
|
||||
net.Receive("ixRequestWorkBenchGhostModel", function()
|
||||
local model = net.ReadString()
|
||||
|
||||
if LocalPlayer().ghostProp and IsValid(LocalPlayer().ghostProp) then
|
||||
LocalPlayer().ghostProp:SetModel(model)
|
||||
end
|
||||
end)
|
||||
else
|
||||
util.AddNetworkString("ixRequestWorkBenchGhostModel")
|
||||
|
||||
net.Receive("ixRequestWorkBenchGhostModel", function(_, client)
|
||||
local weapon = client:GetActiveWeapon()
|
||||
if IsValid(weapon) and weapon.GetClass and weapon:GetClass() == "weapon_workbench_placer" then
|
||||
net.Start("ixRequestWorkBenchGhostModel")
|
||||
net.WriteString(weapon.PreviewModel)
|
||||
net.Send(client)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function SWEP:GhostProp()
|
||||
if (IsValid(self.ghostProp)) then self.ghostProp:Remove() end
|
||||
self.ghostProp = ents.CreateClientProp()
|
||||
|
||||
local curTime = CurTime()
|
||||
if !self.PreviewModel and self.nextModelRequest <= curTime then
|
||||
LocalPlayer().ghostProp = self.ghostProp
|
||||
|
||||
net.Start("ixRequestWorkBenchGhostModel")
|
||||
net.SendToServer()
|
||||
|
||||
self.nextModelRequest = curTime + 2
|
||||
return
|
||||
end
|
||||
|
||||
-- self.ghostProp:SetMaterial("models/wireframe")
|
||||
self.ghostProp:Spawn()
|
||||
self.ghostProp:Activate()
|
||||
self.ghostProp:SetParent(self.Owner)
|
||||
self.ghostProp:SetRenderMode(RENDERMODE_TRANSALPHA)
|
||||
end
|
||||
|
||||
function SWEP:CalcViewModelView(vm, oldPos, oldAng, pos, ang)
|
||||
local newPos = pos + ang:Up() * 5 + ang:Forward()
|
||||
return newPos, ang
|
||||
end
|
||||
|
||||
function SWEP:SetInfo(uniqueID, model)
|
||||
self.item = uniqueID
|
||||
self.PreviewModel = model
|
||||
end
|
||||
|
||||
function SWEP:PrimaryAttack()
|
||||
local tr = self.Owner:GetEyeTrace()
|
||||
if (game.SinglePlayer()) then self:CallOnClient("PrimaryAttack") end
|
||||
|
||||
if (SERVER) then
|
||||
self.Owner:SetAnimation(PLAYER_ATTACK1)
|
||||
end
|
||||
|
||||
if (tr.HitWorld) then
|
||||
if (!self.BarricadePlace) then
|
||||
self.BarricadePlace = self.Owner:GetPos() + Angle(0, self.Owner:GetAngles().y, 0):Forward() * 50 + Angle(0, self.Owner:GetAngles().y, 0):Right() * -10 + Angle(0, self.Owner:GetAngles().y, 0):Up()
|
||||
self.testowyang = Angle(0, self.Owner:GetAngles().y + 180, 0):SnapTo("y", 1)
|
||||
end
|
||||
|
||||
if (SERVER) then
|
||||
if (self.BarricadePlace) then
|
||||
local angles = self.testowyang
|
||||
angles.p = 0
|
||||
angles.r = 0
|
||||
angles:RotateAroundAxis(angles:Up(), 360)
|
||||
|
||||
if (self.item) then
|
||||
local client = self:GetOwner()
|
||||
local char = client.GetCharacter and client:GetCharacter()
|
||||
local id = char and char.GetID and char:GetID()
|
||||
local actualItem = char:GetInventory():HasItem(self.item)
|
||||
|
||||
if (actualItem) then
|
||||
actualItem:Remove()
|
||||
|
||||
local currentItems = client:GetNetVar("visibleItems", {})
|
||||
local itemName = ix.item.list[self.item].name
|
||||
|
||||
if (currentItems[itemName]) then
|
||||
currentItems[itemName] = nil
|
||||
end
|
||||
|
||||
client:SetNetVar("visibleItems", currentItems)
|
||||
|
||||
if (id) then
|
||||
ix.item.Spawn(self.item, self.BarricadePlace, function(_, entity)
|
||||
if IsValid(entity) then
|
||||
local physObj = entity:GetPhysicsObject()
|
||||
if IsValid(physObj) then
|
||||
physObj:EnableMotion( false )
|
||||
end
|
||||
end
|
||||
end, angles, {placer = id})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (self.Owner.previousWep) then
|
||||
self.Owner:SelectWeapon(self.Owner.previousWep)
|
||||
self.Owner.previousWep = nil
|
||||
end
|
||||
|
||||
self:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
self.Owner:EmitSound("physics/metal/metal_canister_impact_soft"..math.random(1,3)..".wav", 60, 100, 0.5)
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:SecondaryAttack()
|
||||
if (SERVER) then
|
||||
local char = self.Owner:GetCharacter()
|
||||
local inventory = char:GetInventory()
|
||||
|
||||
if (self.Owner.previousWep) then
|
||||
self.Owner:SelectWeapon(self.Owner.previousWep)
|
||||
self.Owner.previousWep = nil
|
||||
end
|
||||
|
||||
self:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
if (CLIENT) then
|
||||
function SWEP:DrawHUD()
|
||||
local ply = LocalPlayer()
|
||||
if (!ply:Alive()) then return end
|
||||
|
||||
draw.SimpleTextOutlined("Press LMB to place", "DermaLarge", ScrW() / 2, ScrH()-230, Color(250,250,250), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(25, 25, 25, 250))
|
||||
draw.SimpleTextOutlined("Press RMB to exit", "DermaLarge", ScrW() / 2, ScrH()-200, Color(250,250,250), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER, 1, Color(25, 25, 25, 250))
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:Think()
|
||||
if (CLIENT) then
|
||||
|
||||
if (IsValid(self.ghostProp)) then
|
||||
self.ghostProp:SetPos(self.Owner:GetPos() + Angle(0, self.Owner:GetAngles().y, 0):Forward() * 50 + Angle(0, self.Owner:GetAngles().y, 0):Right() * -10 + Angle(0, self.Owner:GetAngles().y, 0):Up() )
|
||||
self.ghostProp:SetAngles(Angle(0, self.Owner:GetAngles().y + 180, 0):SnapTo("y", 1))
|
||||
|
||||
else
|
||||
self:GhostProp()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function SWEP:PreDrawViewModel()
|
||||
if (CLIENT) then
|
||||
if (!IsValid(self.ghostProp)) then
|
||||
self:GhostProp()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function SWEP:Holster()
|
||||
if (CLIENT) then
|
||||
if (IsValid(self.ghostProp)) then
|
||||
self.ghostProp:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
if (SERVER) then
|
||||
self:Remove()
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function SWEP:OnDrop()
|
||||
self:Remove()
|
||||
end
|
||||
|
||||
function SWEP:OnRemove()
|
||||
if (CLIENT) then
|
||||
if (IsValid(self.ghostProp)) then
|
||||
self.ghostProp:Remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,21 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "tool_chembench_assembly"
|
||||
ITEM.name = "Kimya Tezgahı Montaj Kiti"
|
||||
ITEM.description = "Bu ahşap paket, bir dizi talimatın yanı sıra Kimya aparatı için çok sayıda farklı bileşen parçası içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_chembench"
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
@@ -0,0 +1,21 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "tool_craftingbench_assembly"
|
||||
ITEM.name = "Üretim Tezgahı Montaj Kiti"
|
||||
ITEM.description = "Bu ahşap paket, bir dizi talimatın yanı sıra, Üretim aparatı için çok sayıda farklı bileşen parçası içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_craftingbench"
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
@@ -0,0 +1,21 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "tool_distillery_assembly"
|
||||
ITEM.name = "Damıtma Tesisi Montaj Kiti"
|
||||
ITEM.description = "Bir dizi talimatın yanı sıra, bu ahşap paket, bir İçki Fabrikası oluşturmak için farklı bileşen parçalarından oluşan büyük bir çile içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_distillery"
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
@@ -0,0 +1,22 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "tool_metalbench_assembly"
|
||||
ITEM.name = "Metal Tezgah Montaj Kiti"
|
||||
ITEM.description = "Bu ahşap paket, bir dizi talimatın yanı sıra, Üretim aparatı için çok sayıda farklı bileşen parçası içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_metalbench"
|
||||
ITEM.openRequirementAmount = 1
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
@@ -0,0 +1,21 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "tool_oven_assembly"
|
||||
ITEM.name = "Fırın Montaj Kiti"
|
||||
ITEM.description = "Bu ahşap paket, bir dizi talimatın yanı sıra, Pişirme aparatı için çok sayıda farklı bileşen parçası içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_oven"
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
@@ -0,0 +1,21 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "tool_oven_rusty_assembly"
|
||||
ITEM.name = "Paslı Fırın Montaj Kiti"
|
||||
ITEM.description = "Bu ahşap paket, bir dizi talimatın yanı sıra, Pişirme aparatı için çok sayıda farklı bileşen parçası içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_oven_rusty"
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
@@ -0,0 +1,82 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "base_assembly"
|
||||
ITEM.name = "Taban Montaj Kiti"
|
||||
ITEM.description = "Bu ahşap paket, bir dizi talimatın yanı sıra, Crafting aparatı için çok sayıda farklı bileşen parçası içerir."
|
||||
ITEM.category = "Tools"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.useSound = "physics/metal/metal_box_break1.wav"
|
||||
ITEM.openedItem = "tool_craftingbench"
|
||||
ITEM.openRequirement = "tool_toolkit"
|
||||
|
||||
ITEM.functions.Assemble = {
|
||||
icon = "icon16/wrench.png",
|
||||
OnCanRun = function(item)
|
||||
return !IsValid(item.entity)
|
||||
end,
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
|
||||
if (client.CantPlace) then
|
||||
client:NotifyLocalized("assembleCant")
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
client.CantPlace = true
|
||||
|
||||
timer.Simple(3, function()
|
||||
if (client) then
|
||||
client.CantPlace = false
|
||||
end
|
||||
end)
|
||||
|
||||
local character = client:GetCharacter()
|
||||
local inventory = character:GetInventory()
|
||||
local requirementTable = ix.item.list[item.openRequirement]
|
||||
local requirementName = requirementTable.name or item.openRequirement
|
||||
local openerItem = inventory:HasItem(item.openRequirement)
|
||||
|
||||
if (!openerItem) then
|
||||
client:NotifyLocalized("assembleMissingRequirement", requirementName)
|
||||
|
||||
return false
|
||||
else
|
||||
if (item.openedItem) then
|
||||
local openedItemName = ix.item.list[item.openedItem].name or item.openedItem
|
||||
local openedItemWidth, openedItemHeight = ix.item.list[item.openedItem].width, ix.item.list[item.openedItem].height
|
||||
|
||||
timer.Simple(0.25, function()
|
||||
if (inventory:FindEmptySlot(openedItemWidth, openedItemHeight)) then
|
||||
inventory:Add(item.openedItem)
|
||||
|
||||
if (openerItem.isTool) then
|
||||
openerItem:DamageDurability(1)
|
||||
end
|
||||
|
||||
client:EmitSound(item.useSound)
|
||||
|
||||
client:NotifyLocalized("assembleSuccess", openedItemName)
|
||||
else
|
||||
client:NotifyLocalized("assembleNoSpace", openedItemWidth, openedItemHeight)
|
||||
|
||||
inventory:Add(item.uniqueID)
|
||||
end
|
||||
end)
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Üretim Bileşenleri Tabanı"
|
||||
ITEM.description = "Sadece dosya yapılandırması için, bir öğe değil."
|
||||
ITEM.category = "Crafting Components"
|
||||
ITEM.base = "base_stackable"
|
||||
|
||||
ITEM.maxStackSize = 8
|
||||
@@ -0,0 +1,13 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Dummy Base"
|
||||
ITEM.description = "Just for file structuring, not an item."
|
||||
ITEM.category = "Dummy"
|
||||
@@ -0,0 +1,13 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Expedition Base"
|
||||
ITEM.description = "Just for file structuring, not an item."
|
||||
ITEM.category = "Expedition"
|
||||
@@ -0,0 +1,16 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Ingredient Base"
|
||||
ITEM.description = "Just for file structuring, not an item."
|
||||
ITEM.category = "Ingredients"
|
||||
ITEM.base = "base_stackable"
|
||||
|
||||
ITEM.maxStackSize = 8
|
||||
@@ -0,0 +1,13 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Junk Base"
|
||||
ITEM.description = "Just for file structuring, not an item."
|
||||
ITEM.category = "Junk"
|
||||
227
gamemodes/darkrp/plugins/willardskills/items/base/sh_liquor.lua
Normal file
227
gamemodes/darkrp/plugins/willardskills/items/base/sh_liquor.lua
Normal file
@@ -0,0 +1,227 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.name = "Liquor Base"
|
||||
ITEM.model = Model("models/props_junk/garbage_takeoutcarton001a.mdl")
|
||||
ITEM.description = "A base for alcoholic consumables."
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.category = "Consumable"
|
||||
|
||||
ITEM.useSound = {"npc/barnacle/barnacle_crunch3.wav", "npc/barnacle/barnacle_crunch2.wav"}
|
||||
|
||||
ITEM.hunger = 0
|
||||
ITEM.thirst = 0
|
||||
ITEM.health = 0
|
||||
ITEM.damage = 0
|
||||
ITEM.strength = 25
|
||||
ITEM.abv = 10
|
||||
ITEM.colorAppendix = {}
|
||||
|
||||
ITEM.base = "base_stackable"
|
||||
ITEM.maxStackSize = 1
|
||||
|
||||
ITEM.boosts = {
|
||||
strength = 3,
|
||||
agility = -3,
|
||||
perception = -2,
|
||||
intelligence = 1
|
||||
}
|
||||
|
||||
ITEM.grade = "LOW" -- ix.inebriation.grades
|
||||
|
||||
function ITEM:GetBoostAppend()
|
||||
local boostAppend = {}
|
||||
if (self.boosts) then
|
||||
boostAppend[#boostAppend + 1] = "SHORT-TERM BOOSTS:\n"
|
||||
|
||||
if (self.boosts.strength) then
|
||||
boostAppend[#boostAppend + 1] = string.format("Strength: %d\n", self.boosts.strength)
|
||||
end
|
||||
if (self.boosts.agility) then
|
||||
boostAppend[#boostAppend + 1] = string.format("Agility: %d\n", self.boosts.agility)
|
||||
end
|
||||
if (self.boosts.intelligence) then
|
||||
boostAppend[#boostAppend + 1] = string.format("Intelligence: %d\n", self.boosts.intelligence)
|
||||
end
|
||||
if (self.boosts.perception) then
|
||||
boostAppend[#boostAppend + 1] = string.format("Perception: %d", self.boosts.perception)
|
||||
end
|
||||
end
|
||||
|
||||
return table.concat(boostAppend, "")
|
||||
end
|
||||
|
||||
function ITEM:GetColorAppendix()
|
||||
local tbl = {
|
||||
["yellow"] = self:GetBoostAppend(),
|
||||
["blue"] = "\nABV: "..tostring(self.abv or 0).."%%"
|
||||
}
|
||||
|
||||
if (self.shotsPerItem and self.shotsPoured) then
|
||||
tbl["red"] = "Glasses Left: "..tostring(self.shotsPerItem - self.shotsPoured)
|
||||
end
|
||||
|
||||
if (self.grade and ix.inebriation.grades[self.grade]) then
|
||||
local _grade = ix.inebriation.grades[self.grade]
|
||||
if (_grade and _grade.appendText) then
|
||||
tbl["green"] = "Grade: ".._grade.appendText
|
||||
end
|
||||
end
|
||||
|
||||
return tbl
|
||||
end
|
||||
|
||||
function ITEM:OnInstanced()
|
||||
if (!self:GetData("stack")) then
|
||||
self:SetStack(self:GetStackSize())
|
||||
end
|
||||
end
|
||||
|
||||
local function consume(item, client, character)
|
||||
if (item.useSound) then
|
||||
if (istable(item.useSound)) then
|
||||
client:EmitSound(table.Random(item.useSound))
|
||||
else
|
||||
client:EmitSound(item.useSound)
|
||||
end
|
||||
end
|
||||
|
||||
if item.OnConsume then
|
||||
item:OnConsume(client, character)
|
||||
end
|
||||
if (item.thirst > 0) then
|
||||
character:SetThirst(math.Clamp(character:GetThirst() - (client:Team() == FACTION_BIRD and item.thirst * 2 or item.thirst), 0, 100))
|
||||
end
|
||||
|
||||
if (item.hunger > 0) then
|
||||
character:SetHunger(math.Clamp(character:GetHunger() - (client:Team() == FACTION_BIRD and item.hunger * 2 or item.hunger), 0, 100))
|
||||
end
|
||||
|
||||
if (item.health > 0) then
|
||||
client:SetHealth(math.Clamp(client:Health() + (client:Team() == FACTION_BIRD and item.health * 2 or item.health), 0, client:GetMaxHealth()))
|
||||
end
|
||||
|
||||
if (item.strength > 0) then
|
||||
if (ix.inebriation and ix.inebriation.allowedFactions[character:GetFaction()]) then
|
||||
character:SetInebriation(character:GetInebriation() + item.strength)
|
||||
client:SetNetVar("inebriation", character:GetInebriation())
|
||||
end
|
||||
end
|
||||
|
||||
if (item.grade) then
|
||||
local grade = ix.inebriation.grades[item.grade]
|
||||
if (grade.damage > 0) then
|
||||
client:SetHealth(math.Clamp(client:Health() - grade.damage, 0, client:GetMaxHealth()))
|
||||
end
|
||||
end
|
||||
|
||||
if (item.boosts) then
|
||||
for k, v in pairs(item.boosts) do
|
||||
character:SetSpecialBoost(k, v, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ITEM.functions.Consume = {
|
||||
icon = "icon16/user.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
local character = item.player:GetCharacter()
|
||||
|
||||
consume(item, client, character)
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.give = {
|
||||
name = "Use on character",
|
||||
tip = "giveTip",
|
||||
icon = "icon16/user_go.png",
|
||||
OnCanRun = function(item)
|
||||
if (item.entity) then return false end
|
||||
|
||||
local trace = item.player:GetEyeTraceNoCursor()
|
||||
local target = trace.Entity
|
||||
if (!IsValid(target)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (CLIENT and target:GetClass() == "prop_ragdoll") then
|
||||
return true
|
||||
end
|
||||
|
||||
if (target:GetClass() == "prop_ragdoll" and IsValid(target.ixPlayer)) then
|
||||
target = target.ixPlayer
|
||||
end
|
||||
|
||||
if (!target:IsPlayer() or !target:GetCharacter()) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (target:Health() >= target:GetMaxHealth()) then
|
||||
local targetChar = target:GetCharacter()
|
||||
if (targetChar:GetHealing("fakeHealth") == 0 and targetChar:GetBleedout() == -1) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end,
|
||||
OnRun = function(item)
|
||||
local trace = item.player:GetEyeTraceNoCursor()
|
||||
local target = trace.Entity
|
||||
if (target:GetClass() == "prop_ragdoll" and IsValid(target.ixPlayer)) then
|
||||
target = target.ixPlayer
|
||||
end
|
||||
|
||||
local targetChar = target:GetCharacter()
|
||||
|
||||
consume(item, target, targetChar)
|
||||
end,
|
||||
}
|
||||
|
||||
ITEM.functions.Pour = {
|
||||
OnCanRun = function(item)
|
||||
return item.shareable and ix.item.list[item.shotItem]
|
||||
end,
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
local character = item.player:GetCharacter()
|
||||
local inventory = character:GetInventory()
|
||||
|
||||
local itemName = ix.item.list[item.shotItem] and ix.item.list[item.shotItem].uniqueID or item.shotItem
|
||||
if (!itemName) then
|
||||
client:NotifyLocalized("Invalid item.")
|
||||
return
|
||||
end
|
||||
|
||||
local tr = client:GetEyeTrace()
|
||||
|
||||
ix.item.Spawn(itemName, tr.HitPos, function(_item, _)
|
||||
_item.grade = item.grade or "LOW"
|
||||
end)
|
||||
|
||||
client:NotifyLocalized("You have poured a glass of "..item.name..".")
|
||||
|
||||
item.shotsPoured = item.shotsPoured + 1
|
||||
if (item.shotsPoured >= item.shotsPerItem) then
|
||||
client:NotifyLocalized("You have poured the last glass of "..item.name..".")
|
||||
if (item.junk) then
|
||||
if (!inventory:Add(item.junk)) then
|
||||
ix.item.Spawn(item.junk, client)
|
||||
end
|
||||
end
|
||||
else
|
||||
-- don't remove the item if it's not the last shot
|
||||
return false
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Medical Components Base"
|
||||
ITEM.description = "Just for file structuring, not an item."
|
||||
ITEM.category = "Medical Components"
|
||||
ITEM.base = "base_stackable"
|
||||
|
||||
ITEM.maxStackSize = 4
|
||||
@@ -0,0 +1,187 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.name = "Workbench Base"
|
||||
ITEM.description = "It is a workbench. Can only be picked up by the first person to place it."
|
||||
ITEM.category = "Workbenches"
|
||||
ITEM.isWorkbench = true
|
||||
|
||||
ITEM.functions.place = {
|
||||
name = "Yerleştir",
|
||||
tip = "Place the workbench",
|
||||
icon = "icon16/brick_add.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
|
||||
if (!client:Alive()) then return false end
|
||||
client:EmitSound("physics/cardboard/cardboard_box_break3.wav")
|
||||
|
||||
client.previousWep = client:GetActiveWeapon():GetClass()
|
||||
client:Give("weapon_workbench_placer")
|
||||
client:SelectWeapon("weapon_workbench_placer")
|
||||
|
||||
local weapon = client:GetActiveWeapon()
|
||||
weapon:SetInfo(item.uniqueID, item.model)
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(item)
|
||||
return (!IsValid(item.entity))
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.Use = {
|
||||
name = "Kullan",
|
||||
icon = "icon16/wrench.png",
|
||||
OnCanRun = function(itemTable)
|
||||
return IsValid(itemTable.entity)
|
||||
end,
|
||||
OnClick = function(itemTable)
|
||||
LocalPlayer().lastSelectedSkill = itemTable.workbenchSkill
|
||||
ix.gui.lastMenuTab = 3
|
||||
|
||||
if (!IsValid(ix.gui.menu)) then
|
||||
vgui.Create("ixMenu")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.PackUp = {
|
||||
name = "Paketle",
|
||||
icon = "icon16/box.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
local character = client and IsValid(client) and client.GetCharacter and client:GetCharacter()
|
||||
local inventory = character:GetInventory()
|
||||
local toolkit = inventory:HasItem("tool_toolkit")
|
||||
|
||||
if (!toolkit) then
|
||||
client:Notify("Bu tezgahı toplamak için bir alet takımına ihtiyacınız var!")
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
if (item:GetData("bolted", false)) then
|
||||
client:Notify("Bu tezgah cıvatalandı!")
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
local placerData = item:GetData("placer", false)
|
||||
if placerData and character:GetID() != placerData then
|
||||
client:Notify("Bu tezgahın sahibi sen değilsin!")
|
||||
return false
|
||||
end
|
||||
|
||||
client:SetAction("Packing up workbench...", 10, function()
|
||||
if (inventory:Add(item.uniqueID .. "_assembly")) then
|
||||
toolkit:DamageDurability(1)
|
||||
client:Notify("Çalışma tezgahı paketlendi.")
|
||||
else
|
||||
client:Notify("Bu tezgahı toplamak için yeterli envanter alanınız yok!")
|
||||
|
||||
return false
|
||||
end
|
||||
end)
|
||||
end,
|
||||
OnCanRun = function(item)
|
||||
return !item.noPackUp
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.Bolt = {
|
||||
name = "Cıvatala",
|
||||
icon = "icon16/wrench.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
local inventory = client:GetCharacter():GetInventory()
|
||||
local toolkit = inventory:HasItem("tool_toolkit")
|
||||
|
||||
if (!toolkit) then
|
||||
client:Notify("Bu tezgahı yıkmak için bir araç setine ihtiyacınız var!")
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
client:SetAction("Tezgahı cıvatalıyorsun...", 10, function()
|
||||
item:SetData("bolted", true)
|
||||
|
||||
client:Notify("Çalışma tezgahını cıvataladınız.")
|
||||
end)
|
||||
|
||||
toolkit:DamageDurability(1)
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return itemTable.entity and itemTable.entity:IsValid() and !itemTable:GetData("bolted", false)
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.UnBolt = {
|
||||
name = "Sök",
|
||||
icon = "icon16/wrench_orange.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
|
||||
if (client:IsAdmin()) then
|
||||
item:SetData("bolted", false)
|
||||
|
||||
client:Notify("Tezgah söküldü.")
|
||||
else
|
||||
client:Notify("Tezgah sökme işlemi yetkili gözetimi gerektirir. Lütfen devam etmeden önce biriyle iletişime geçin!")
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return itemTable.entity and itemTable.entity:IsValid() and itemTable:GetData("bolted", false)
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.postHooks.drop = function(item, result)
|
||||
if (item.player and !item:GetData("placer")) then
|
||||
item:SetData("placer", item.player:GetCharacter():GetID())
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:CanTransfer(oldInventory, newInventory)
|
||||
local placerData = self:GetData("placer", false)
|
||||
local newInvOwner = newInventory and newInventory.GetOwner and newInventory:GetOwner()
|
||||
|
||||
if newInventory and newInvOwner then
|
||||
if newInvOwner and IsValid(newInvOwner) then
|
||||
if placerData and newInvOwner.GetCharacter and newInvOwner:GetCharacter():GetID() != placerData then
|
||||
newInvOwner:Notify("Bu tezgahın sahibi sen değilsin!")
|
||||
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ITEM:OnEntityCreated(entity)
|
||||
timer.Simple(1, function()
|
||||
if (IsValid(entity)) then
|
||||
local physObj = entity:GetPhysicsObject()
|
||||
physObj:EnableMotion(false)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function ITEM:OnEntityTakeDamage(entity, damage)
|
||||
return false
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Arcade Montaj Kiti"
|
||||
ITEM.description = "Bir arcade makinesini bir araya getirmek için bir montaj kiti."
|
||||
ITEM.category = "misc"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu bir arcade makinesi varlığına dönüştürmek için bir yönetici ile iletişime geçin."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "İnşaat malzemesi"
|
||||
ITEM.description = "Combine Lojistik Komitesi tarafından paketlenmiş birkaç inşaat malzemesi."
|
||||
ITEM.category = "misc"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/props_junk/cardboard_box001a.mdl"
|
||||
ITEM.maxStackSize = 4
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Dama Masası Montaj Kiti"
|
||||
ITEM.description = "Dama masasını bir araya getirmek için bir montaj kiti."
|
||||
ITEM.category = "misc"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu bir dama masası varlığına dönüştürmek için bir yönetici ile iletişime geçin."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Satranç Masası Montaj Kiti"
|
||||
ITEM.description = "Bir satranç masasını bir araya getirmek için bir montaj kiti."
|
||||
ITEM.category = "misc"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu bir satranç tablosu varlığına dönüştürmek için bir yönetici ile iletişime geçin."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,24 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_charcoal"
|
||||
ITEM.name = "Kömür"
|
||||
ITEM.description = "Kendi yaptığım bir kömür bloğu."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/props/charcoal.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkârlık becerisi ile yapılabilir.", ["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(1642.86, 1354.28, 862.92),
|
||||
ang = Angle(22.03, 219.49, 0),
|
||||
fov = 0.27
|
||||
}
|
||||
ITEM.maxStackSize = 8
|
||||
@@ -0,0 +1,24 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_charcoal_refill"
|
||||
ITEM.name = "Kömür Filtresi Dolumu"
|
||||
ITEM.description = "Filtre olarak kullanılmak üzere beze düzgünce sarılmış, kendi yaptığınız bir miktar odun kömürü."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/props/charcoal.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkârlık becerisi ile yapılabilir."}
|
||||
ITEM.maxStackSize = 4
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(1642.86, 1354.28, 862.92),
|
||||
ang = Angle(22.03, 219.49, 0),
|
||||
fov = 0.27
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_cloth"
|
||||
ITEM.name = "Bez Paçavralar"
|
||||
ITEM.description = "Bir parça kirli bez parçası, işçilik için kullanılabilir."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/cloth.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu öğeyi Zanaatkarlık becerisi Parçalama işleviyle veya çöp yığınlarını arayarak elde edebilirsiniz.", ["red"] = "Bu türden 8'den fazla eşya taşımak şüphelidir."}
|
||||
ITEM.maxStackSize = 24
|
||||
@@ -0,0 +1,23 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_condensed_resin"
|
||||
ITEM.name = "Yoğunlaştırılmış Reçine"
|
||||
ITEM.description = "Dokunulduğunda yumuşak bir his veren gri katı silindir malzemesi. Hafif ve kolay kırılabilir... uyumlu bir makinede kullanılabilir."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/willardnetworks/props_combine/resin_puck.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(173.79, 146.1, 107.55),
|
||||
ang = Angle(25.1, 219.9, 0),
|
||||
fov = 3.8
|
||||
}
|
||||
ITEM.outlineColor = Color(255, 102, 0)
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Elektronik devreler"
|
||||
ITEM.description = "Hurdaya çıkmış elektronik parçalar. Acaba bunlar ne için kullanılıyordu?"
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/circuit.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu öğeyi Zanaatkarlık becerisi Parçalama işleviyle veya çöp yığınlarını arayarak elde edebilirsiniz.", ["red"] = "Bu türden 8'den fazla eşya taşımak şüphelidir."}
|
||||
ITEM.maxStackSize = 24
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_explosive"
|
||||
ITEM.name = "Yüksek Patlayıcı Madde"
|
||||
ITEM.description = "Yumuşak patlayıcı bileşimi. Şimdi patlayıcılarla oynamaya kalkma."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/explosive_material.mdl"
|
||||
ITEM.maxStackSize = 6
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_fabric"
|
||||
ITEM.name = "Kumaş"
|
||||
ITEM.description = "Bir parça kumaş. Oldukça yumuşak."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/fabric.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.maxStackSize = 8
|
||||
@@ -0,0 +1,23 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_heavy_weapon_parts"
|
||||
ITEM.name = "Ağır Silah Parçaları"
|
||||
ITEM.description = "Silah yapımında kullanılan daha büyük ve daha ağır silah parçaları."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/willardnetworks/skills/weaponparts.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(173.79, 146.1, 107.55),
|
||||
ang = Angle(25.1, 219.9, 0),
|
||||
fov = 3.8
|
||||
}
|
||||
ITEM.outlineColor = Color(255, 78, 69, 100)
|
||||
@@ -0,0 +1,24 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_iron"
|
||||
ITEM.name = "Demir"
|
||||
ITEM.description = "Geri dönüştürülmüş hurdalardan yapılmış demir. Eskisinden daha güçlü ve daha ağır."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/willardnetworks/props/reshaped_metal.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(509.64, 427.61, 310.24),
|
||||
ang = Angle(25, 220, 0),
|
||||
fov = 1.27
|
||||
}
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkârlık becerisi ile yapılabilir.", ["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.maxStackSize = 12
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_plastic"
|
||||
ITEM.name = "Plastik Çöp"
|
||||
ITEM.description = "Plastik atık elementleri. Önceden ne olduğunu kim bilir."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_junk/garbage_bag001a.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu öğeyi Zanaatkarlık becerisi Parçalama işleviyle veya çöp yığınlarını arayarak elde edebilirsiniz.", ["red"] = "Bu türden 8'den fazla eşya taşımak şüphelidir."}
|
||||
ITEM.maxStackSize = 24
|
||||
@@ -0,0 +1,20 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_refined_plastic"
|
||||
ITEM.name = "Plastik Levhalar"
|
||||
ITEM.description = "Plastik levhalar. Plastik çöplerden üretilmiştir."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_junk/garbage_bag001a.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkarlık becerisi ile yapılabilir.", ["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.outlineColor = Color(255, 204, 0, 100)
|
||||
ITEM.maxStackSize = 12
|
||||
@@ -0,0 +1,23 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_resin"
|
||||
ITEM.name = "Reçine"
|
||||
ITEM.description = "Dokunulduğunda yumuşak bir his veren gri katı silindir madde. Hafif ve kolayca kırılabilir... uyumlu bir makinede kullanılabilir."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/willardnetworks/props_combine/resin_puck.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(173.79, 146.1, 107.55),
|
||||
ang = Angle(25.1, 219.9, 0),
|
||||
fov = 3.8
|
||||
}
|
||||
ITEM.outlineColor = Color(255, 204, 0)
|
||||
@@ -0,0 +1,20 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_rivbolts"
|
||||
ITEM.name = "Perçin ve Cıvata Kutusu"
|
||||
ITEM.description = "Deneyimli zanaatkarlar için kullanışlı bir kutu sağlam vida."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/screws.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkârlık becerisi ile yapılabilir.", ["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.outlineColor = Color(255, 204, 0, 100)
|
||||
ITEM.maxStackSize = 8
|
||||
@@ -0,0 +1,24 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_scrap"
|
||||
ITEM.name = "Hurda Metal"
|
||||
ITEM.description = "İşçiliği için yararlı hurda metal parçaları."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/willardnetworks/props/scrap.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(509.64, 427.61, 310.24),
|
||||
ang = Angle(25, 220, 0),
|
||||
fov = 1.27
|
||||
}
|
||||
ITEM.colorAppendix = {["blue"] = "Bu öğeyi Zanaatkarlık becerisi Parçalama işleviyle veya çöp yığınlarını arayarak elde edebilirsiniz.", ["red"] = "Bu türden 8'den fazla eşya taşımak şüphelidir."}
|
||||
ITEM.maxStackSize = 24
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_screws"
|
||||
ITEM.name = "Vida Kutusu"
|
||||
ITEM.description = "Küçük bir kutu vida. Biraz paslı görünüyorlar."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/screws.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu öğeyi Zanaatkarlık becerisi Parçalama işleviyle veya çöp yığınlarını arayarak elde edebilirsiniz.", ["red"] = "Bu türden 8'den fazla eşya taşımak şüphelidir."}
|
||||
ITEM.maxStackSize = 24
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_steel"
|
||||
ITEM.name = "Çelik"
|
||||
ITEM.description = "Mükemmel bir işçilik ile yapılan Sertleştirilmiş Çelik. Son derece güçlü ve iyi yapılmış."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/gibs/scanner_gib02.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkârlık becerisi ile yapılabilir.", ["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.maxStackSize = 8
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_stitched_cloth"
|
||||
ITEM.name = "Dikişli Kumaş"
|
||||
ITEM.description = "Dikişli bir kumaş parçası. Eskisinden daha sert."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/stitched_cloth.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya Zanaatkârlık becerisi ile yapılabilir.", ["red"] = "CP'ler bu eşya ile bulunursanız sizi şüpheli olarak görecektir."}
|
||||
ITEM.maxStackSize = 12
|
||||
@@ -0,0 +1,20 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "comp_weapon_parts"
|
||||
ITEM.name = "Silah Parçaları"
|
||||
ITEM.description = "Silah için metal parçalar."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/willardnetworks/skills/weaponparts.mdl"
|
||||
|
||||
ITEM.outlineColor = Color(255, 204, 0, 100)
|
||||
ITEM.maxStackSize = 6
|
||||
@@ -0,0 +1,33 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
ITEM.uniqueID = "comp_wood"
|
||||
ITEM.name = "Ahşap Talaşları"
|
||||
ITEM.description = "Eşya yapmak için yeniden kullanılabilecek ahşap yongalardan oluşan bir koleksiyon."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Gibs/wood_gib01a.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu öğeyi Zanaatkarlık becerisi Parçalama işleviyle veya çöp yığınlarını arayarak elde edebilirsiniz.", ["red"] = "Bu türden 8'den fazla eşya taşımak şüphelidir."}
|
||||
|
||||
ITEM.maxStackSize = 24
|
||||
|
||||
ITEM.functions.Breakdown = {
|
||||
icon = "icon16/link_break.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
|
||||
client:GetCharacter():GetInventory():Add("woodstick", 10)
|
||||
end,
|
||||
OnCanRun = function(item)
|
||||
return !IsValid(item.entity) and item.player:Team() == FACTION_BIRD
|
||||
end
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Büyük Konteyner"
|
||||
ITEM.description = "9x9 boyutunda konteyner. Bu öğeyi hazırladığınızda bu konteyneri kurmak için bir yöneticiyle iletişime geçtiğinizden emin olun."
|
||||
ITEM.category = "Storage"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 4
|
||||
ITEM.model = "models/props_wasteland/controlroom_storagecloset001a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu bir konteynere dönüştürmek için bir yönetici ile iletişime geçin. En az 5 üyeden oluşan bir grup gerektirir.", ["blue"] = "Oyuncu başına 2 küçük VEYA 1 orta boy kişisel konteyner sınırımız vardır.\nGruplar ayrıca 3 büyük konteyner alabilir."}
|
||||
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Büyük Sandık"
|
||||
ITEM.description = "10x10 boyutunda konteyner. Bu öğeyi hazırladığınızda bu konteyneri kurmak için bir yöneticiyle iletişime geçtiğinizden emin olun."
|
||||
ITEM.category = "Storage"
|
||||
ITEM.width = 4
|
||||
ITEM.height = 4
|
||||
ITEM.model = "models/props_junk/wood_crate002a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu işleyen bir konteynere dönüştürmek için bir yönetici ile iletişime geçin.", ["blue"] = "Sınırlamalar uyarınca, kendinize ait yalnızca 1 sandığınız olabilir."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Orta Boy Konteyner"
|
||||
ITEM.description = "5x8 boyutunda konteyner. Bu öğeyi hazırladığınızda bu konteyneri kurmak için bir yöneticiyle iletişime geçtiğinizden emin olun."
|
||||
ITEM.category = "Storage"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/props_wasteland/controlroom_filecabinet002a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu işleyen bir konteynere dönüştürmek için bir yönetici ile iletişime geçin.", ["blue"] = "Oyuncu başına 2 küçük VEYA 1 orta boy kişisel konteyner sınırımız vardır.\nGruplar ayrıca 3 büyük konteyner alabilir."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Standart Sandık"
|
||||
ITEM.description = "6x6 sized container. Make sure to contact an admin to setup this container when you've crafted this item."
|
||||
ITEM.category = "Storage"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/props_junk/wood_crate001a.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu işleyen bir konteynere dönüştürmek için bir yönetici ile iletişime geçin.", ["blue"] = "Sınırlamalar uyarınca, kendinize ait yalnızca 1 sandığınız olabilir."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Küçük Konteyner"
|
||||
ITEM.description = "5x3 boyutunda konteyner. Bu öğeyi hazırladığınızda bu konteyneri kurmak için bir yöneticiyle iletişime geçtiğinizden emin olun."
|
||||
ITEM.category = "Storage"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/props_lab/filecabinet02.mdl"
|
||||
ITEM.colorAppendix = {["red"] = "Bunu işleyen bir konteynere dönüştürmek için bir yönetici ile iletişime geçin.", ["blue"] = "Oyuncu başına 2 küçük VEYA 1 orta boy kişisel konteyner sınırımız vardır.\nGruplar ayrıca 3 büyük konteyner alabilir."}
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,47 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "crafting_water"
|
||||
ITEM.name = "Su İşçiliği"
|
||||
ITEM.description = "İşçilik için kullanılan dönüştürülmüş bir su tenekesi."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_junk/popcan01a.mdl"
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(509.64, 427.61, 310.24),
|
||||
ang = Angle(25.01, 220.01, 0),
|
||||
fov = 0.6
|
||||
}
|
||||
ITEM.maxStackSize = 4
|
||||
|
||||
ITEM.functions.Convert = {
|
||||
name = "Dönüştür",
|
||||
icon = "icon16/wrench.png",
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
local inventory = client:GetCharacter():GetInventory()
|
||||
local originalID = item:GetData("original")
|
||||
local original = ix.item.list[originalID]
|
||||
|
||||
if (!original) then return end
|
||||
|
||||
inventory:Add(originalID, 1, {spoilTime = item:GetData("spoilTime", 0)})
|
||||
client:Notify("Üretim Suyunu şu hale getirdiniz: " .. original.name .. ".")
|
||||
end,
|
||||
OnCanRun = function(item)
|
||||
return item:GetData("original")
|
||||
end
|
||||
}
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local item = ix.item.list[self:GetData("original")]
|
||||
return "Dönüştürülmüş bir " .. (item and item.name or "su tenekesi") .. " üretim için kullanılır."
|
||||
end
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Pulse Firing Chamber"
|
||||
ITEM.description = "The main chamber that secures the most fragile part of all Pulse weaponry within it. Important for safety reasons."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/props_junk/cardboard_box004a.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.maxStackSize = 2
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Pulse Firing Mechanism"
|
||||
ITEM.description = "A firing mechanism for Pulse Weaponry. Important to get Pulse weapons to fire without the Biolock installed."
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/props_junk/cardboard_box004a.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.maxStackSize = 2
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Pulse Weaponry - Main Body"
|
||||
ITEM.description = "The main external body of pulse weaponry. Needs to be placed around internal components"
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/props_junk/cardboard_box004a.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.maxStackSize = 1
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.name = "Pulse stock"
|
||||
ITEM.description = "A stock for a pulse weapon... just for the back if making an AR-2 or SR-1"
|
||||
ITEM.category = "Crafting"
|
||||
ITEM.model = "models/props_junk/cardboard_box004a.mdl"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.maxStackSize = 2
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_biolock_ar2"
|
||||
ITEM.name = "Biyokilitli Pulse-Rifle"
|
||||
ITEM.description = "Evrensel Birlik'e ait Pulse-Rifle, askerlerden düşmüş olmalı... içindeki bir mekanizma yüzünden kilitli gibi duruyor. Bir Vortigaunt'un bu silah üzerinde çalışması gerek."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 4
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/weapons/w_IRifle.mdl"
|
||||
@@ -0,0 +1,51 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_biolock_ociw"
|
||||
ITEM.name = "Biyokilitli Taktiksel Overwatch Tüfeği"
|
||||
ITEM.description = "Overwatch askerlerinin özel olarak kullandığı taktiksel tüfek. Ne yazık ki içsel bir mekanizma tarafından kilitli."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 4
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/weapons/oicw/w_oicw.mdl"
|
||||
|
||||
ITEM.useSound = "ambient/energy/weld1.wav"
|
||||
ITEM.unlockedItem = "tacticalrifle"
|
||||
ITEM.unlockRequirementAmount = 1
|
||||
|
||||
ITEM.functions.Unlock = {
|
||||
OnRun = function(item)
|
||||
local client = item.player
|
||||
local position = item.player:GetPos()
|
||||
local character = item.player:GetCharacter()
|
||||
local inventory = character:GetInventory()
|
||||
|
||||
client:EmitSound(item.useSound)
|
||||
|
||||
-- Spawn the opened item if it exists
|
||||
local requirementAmount = item.unlockRequirementAmount or 1
|
||||
if (character:GetFaction() == FACTION_VORT) then
|
||||
if (item.unlockedItem) then
|
||||
local openedItemName = ix.item.list[item.unlockedItem].name or item.unlockedItem
|
||||
if (!inventory:Add(item.unlockedItem, requirementAmount)) then
|
||||
client:NotifyLocalized("You need "..requirementAmount.." inventory spaces to open this item.")
|
||||
return
|
||||
end
|
||||
|
||||
client:NotifyLocalized("You have unlocked a "..item.name.." and been given a "..openedItemName)
|
||||
end
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
OnCanRun = function(item)
|
||||
if (IsValid(item.entity) or !IsValid(item.player)) then return false end
|
||||
end
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_biolock_psmg"
|
||||
ITEM.name = "Biolocked Pulse Sub-machine gun"
|
||||
ITEM.description = "An Overwatch Pulse SMG, a standard weapon of theirs... however not yet usable."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/weapons/w_IRifle.mdl"
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_biolock_sg1"
|
||||
ITEM.name = "Biolocked Overwatch Shotgun"
|
||||
ITEM.description = "The bulky and heavy shotgun of the Overwatch, capable of dealing major damage to not just humans, but also structures."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 4
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/weapons/w_IRifle.mdl"
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_biolock_sr1"
|
||||
ITEM.name = "Biyokilitli Ordinal Tüfeği"
|
||||
ITEM.description = "Overwatch'a ait bir Ordinal Tüfeği. Gerçi, kullanışsız görünüyor."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 4
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/weapons/oar/w_orifle.mdl"
|
||||
@@ -0,0 +1,17 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_biolock_sup"
|
||||
ITEM.name = "Biolocked Suppressor"
|
||||
ITEM.description = "The Overwatch Suppressor LMG... generally far too heavy to be carrying around and deadweight."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 5
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/weapons/w_IRifle.mdl"
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_emp"
|
||||
ITEM.name = "Geliştirilmiş EMP Bombası"
|
||||
ITEM.description = "Elektronik aletleri kısa süreliğine devre dışı bırakmak için kullanılan küçük, tek kullanımlık bir EMP cihazı. Aynı zamanda Evrensel Birlik teknolojisi üzerinde de kullanılabilir- \"Forcefield\"ları 5 dakika boyunca, \"Taret\"leri 10 dakika boyunca devre dışı bırakabilir ve \"Scanner\"ları tamamen devre dışı bırakabilir."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/car_battery01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu bir RP eşyası, kullanmak için GM çağırın. Bu gelişmiş versiyon tüm combine teknolojilerini devre dışı bırakabilir. Sentetik ve Gelişmiş Combine teçhizatı hariç."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_largebomb"
|
||||
ITEM.name = "Büyük Bomba"
|
||||
ITEM.description = "Eski taslaklarla \"Outlands\"de bulunan hurdalardan yapılabilecek en büyük bomba, 10KG TNT gücünde bir patlama yaratma özelliğine sahip, bu bomba aynı anda birden fazla binayı yıkma ve bir Sektörde büyük hasara neden olma kapasitesine sahiptir."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 3
|
||||
ITEM.model = "models/Items/car_battery01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu bir RP eşyası, kullanmak için GM çağırın.", ["red"] = "BU EŞYA SUNUCU KONSEYİ İZNİ OLMADAN SPAWNLANAMAZ VE KULLANILAMAZ!"}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_littlebomb"
|
||||
ITEM.name = "Minik Bomba"
|
||||
ITEM.description = "Fazla hasar yaratmayacak; küçük, el yapımı bir patlayıcı. Esas olarak Anti-Personel Mayını veya tuzak olarak kullanılır, bir duvarı yıkabilecek kapasitededir. Yaklaşık 13oz'luk Bileşim B patlayıcı kullanılarak yapılmıştır."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/car_battery01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu bir RP eşyası, kullanmak için GM çağırın."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_mediumbomb"
|
||||
ITEM.name = "Orta Bomba"
|
||||
ITEM.description = "C4 veya IED şeklinde orta büyüklükte bir patlayıcı, 4KG TNT'ye eşit bir kuvvete sahip. Binaları veya Evrensel Birlik Kontrol Noktalarını havaya uçurmak için mükemmel bir seçenek."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/Items/car_battery01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "This is an RP item, call a GM to use."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "dummy_smallbomb"
|
||||
ITEM.name = "Küçük Bomba"
|
||||
ITEM.description = "Minik bombanın aksine, bu bomba 1KG TNT değerinde patlama gücüne sahip. Binanın temeline çok da hasar vermeden bir duvarı patlatabilir. Aynı minik bomba gibi: yaklaşık 36 oz'luk Bileşim B Patlayıcı'dan yapılmıştır.."
|
||||
ITEM.category = "Dummy"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/car_battery01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu bir RP eşyası, kullanmak için GM çağırın."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_aamissile"
|
||||
ITEM.name = "Hava Savunma Füzesi"
|
||||
ITEM.description = "Düşman hava araçlarını düşürebilen bir hava savunma füzesi. En iyi şekilde, hava savunma platformlarında veya hedef kilitleme özellikli RPG'lerde kullanılır."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/weapons/w_missile_closed.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_axel"
|
||||
ITEM.name = "Otomobil Aksı"
|
||||
ITEM.description = "Otomobil Aksı. Otomobil tekerleklerinin hareket etmesini sağlar."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_vehicles/carparts_axel01a.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_battery"
|
||||
ITEM.name = "Otomobil Bataryası (Dolu)"
|
||||
ITEM.description = ""
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/car_battery01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_belt"
|
||||
ITEM.name = "Motor Kayışı"
|
||||
ITEM.description = "İçinde bir motor kayışı bulunan bir kutu. Kayışı doğru bir şekilde zamanlamak önemlidir, aksi takdirde araba başlamaz ve bir hata olduğunu düşünebilirsin."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_lab/box01a.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_campingbag"
|
||||
ITEM.name = "Kamp Çantası"
|
||||
ITEM.description = "Kamp için tasarlanmış, yeniden kullanılabilir bir ekipman parçası. En fazla 3 kişi dinlenebilir."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/vj_props/duffle_bag.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_energycell"
|
||||
ITEM.name = "Enerji Hücresi"
|
||||
ITEM.description = "Tau topu gibi enerji tabanlı silahlara güç sağlayabilen bir enerji hücresi."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/combine_rifle_ammo01.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_engine"
|
||||
ITEM.name = "Motor"
|
||||
ITEM.description = "Otomobil için çalışan bir motor, ancak oldukça ağır..."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 3
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/props_c17/TrapPropeller_Engine.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_engine_parts"
|
||||
ITEM.name = "Motor Parçaları"
|
||||
ITEM.description = "Motor parçaları motor yapmak için... oldukça önemli eğer çalışan bir motor istiyorsan."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props/cs_assault/engine_solo.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_gascan"
|
||||
ITEM.name = "Benzin Bidonu (Dolu)"
|
||||
ITEM.description = "Araçları doldurmak için kullanılan tek seferlik benzin bidonu. Bidon başına maksimum 155,5 Kilometre seyahat mesafesine izin verir."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_junk/metalgascan.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_gearbox"
|
||||
ITEM.name = "Vites Kutusu"
|
||||
ITEM.description = "Vites kutusu tüm araçların ihtiyacı olan şey... unutma."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/gibs/airboat_broken_engine.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_headlight"
|
||||
ITEM.name = "Far"
|
||||
ITEM.description = "Otomobil farı. Yolu aydınlatmak için kullanışlı."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_wasteland/light_spotlight02_lamp.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_hmg"
|
||||
ITEM.name = "Ağır Makineli Tüfek Mermisi"
|
||||
ITEM.description = "Zırhlı araçları için ağır makineli tüfek mermisi."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/BoxMRounds.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_lmg"
|
||||
ITEM.name = "Hafif Makineli Tüfek Mermisi"
|
||||
ITEM.description = "Zırhlı araçlar için hafif makineli tüfek mermisi"
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/Items/BoxSRounds.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_settlementkit"
|
||||
ITEM.name = "Yerleşim İnşaat Kiti"
|
||||
ITEM.description = "Yerleşim inşaat kiti, yerleşim inşaat etmek için kullanışlı."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 2
|
||||
ITEM.height = 2
|
||||
ITEM.model = "models/props/de_prodigy/concretebags3.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_steeringwheel"
|
||||
ITEM.name = "Direksiyon"
|
||||
ITEM.description = "Metal direskiyon. Rahat değil ama olmak zorunda..."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props_borealis/door_wheel001a.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_tankshell"
|
||||
ITEM.name = "Tank Mermisi"
|
||||
ITEM.description = "Düşman araçları kolayca yok etmek için tanklarda kullanılan silahsız bir tank mermisi."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props/de_inferno/hr_i/missile/missile_02.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_tracks"
|
||||
ITEM.name = "Tank Paleti"
|
||||
ITEM.description = "Her türlü zırhlı aracın, MRAP'lerin, ZPT'lerin, ZZA'ların ve tankların kırık paletlerini değiştirmek için kullanılan bir tank paleti."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props/gg_handling/baggage_track_conveyor_96.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_transmission"
|
||||
ITEM.name = "Şanzıman"
|
||||
ITEM.description = "Araç için bir aktarma sistemi."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/xqm/jetenginepropellermedium.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
@@ -0,0 +1,18 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
ITEM.uniqueID = "expo_wheel"
|
||||
ITEM.name = "Tekerlek"
|
||||
ITEM.description = "Mevcut veya yeni araçların tekerleklerini değiştirmek veya yeni tekerlek eklemek için kullanılan bir otomobil tekerleği."
|
||||
ITEM.category = "Expedition"
|
||||
ITEM.width = 1
|
||||
ITEM.height = 1
|
||||
ITEM.model = "models/props/de_nuke/hr_nuke/nuke_forklift/forklift_tire_02.mdl"
|
||||
ITEM.colorAppendix = {["blue"] = "Bu eşya tamamen rol yapmak için, herhangi bir özelliği yok."}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user