mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
106
gamemodes/ixhl2rp/plugins/cid/items/sh_cmru_card.lua
Normal file
106
gamemodes/ixhl2rp/plugins/cid/items/sh_cmru_card.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
--[[
|
||||
| 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 = "CMRU Access Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A Civil Medical & Research Union Keycard."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.skin = 2
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(25, 400, 0),
|
||||
fov = 0.59
|
||||
}
|
||||
|
||||
function ITEM:GetName()
|
||||
local accessLevel = self:GetData("accessLevel", 1)
|
||||
|
||||
return "CMRU Level " .. accessLevel .. " Access Keycard"
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or
|
||||
(self:GetData("cardID") and self.description.."\n\nCurrently bound." or self.description)
|
||||
end
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(LocalPlayer():GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to CMRU Card", "Please select a ID card to bind to this CMRU Card:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindCMRUCard", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this CMRU Card?", "Bind ID Card to CMRU Card",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindCMRUCard", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have ID card to bind to this CMRU Card.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!IsValid(itemTable.player)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
|
||||
if (!inventory:HasItem("id_card")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:GetData("cardID")) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.SetAccessLevel = {
|
||||
name = "Toggle Card Access Level",
|
||||
icon = "icon16/vcard_add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
local accessLevel = itemTable:GetData("accessLevel", 1)
|
||||
|
||||
accessLevel = accessLevel != 5 and accessLevel + 1 or 1
|
||||
itemTable:SetData("accessLevel", accessLevel)
|
||||
client:NotifyLocalized("You have set this card's Access Level to Access Level " .. accessLevel .. ".")
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return (!IsValid(itemTable.entity) and IsValid(itemTable.player) and (itemTable.player:Team() == FACTION_ADMIN or itemTable.player:IsCombine() or itemTable.player:GetCharacter():HasFlags("M"))) == true
|
||||
end
|
||||
}
|
||||
106
gamemodes/ixhl2rp/plugins/cid/items/sh_con_card.lua
Normal file
106
gamemodes/ixhl2rp/plugins/cid/items/sh_con_card.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
--[[
|
||||
| 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 = "Conscript Access Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A Conscript Access Keycard."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.skin = 2
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(25, 400, 0),
|
||||
fov = 0.59
|
||||
}
|
||||
|
||||
function ITEM:GetName()
|
||||
local accessLevel = self:GetData("accessLevel", 1)
|
||||
|
||||
return "Conscript Level " .. accessLevel .. " Access Keycard"
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or
|
||||
(self:GetData("cardID") and self.description.."\n\nCurrently bound." or self.description)
|
||||
end
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(LocalPlayer():GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to Conscript Card", "Please select a ID card to bind to this Conscript Card:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindConCard", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this Conscript Card?", "Bind ID Card to Conscript Card",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindConCard", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have ID card to bind to this Conscript Card.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!IsValid(itemTable.player)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
|
||||
if (!inventory:HasItem("id_card")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:GetData("cardID")) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.SetAccessLevel = {
|
||||
name = "Toggle Card Access Level",
|
||||
icon = "icon16/vcard_add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
local accessLevel = itemTable:GetData("accessLevel", 1)
|
||||
|
||||
accessLevel = accessLevel != 5 and accessLevel + 1 or 1
|
||||
itemTable:SetData("accessLevel", accessLevel)
|
||||
client:NotifyLocalized("You have set this card's Access Level to Access Level " .. accessLevel .. ".")
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return (!IsValid(itemTable.entity) and IsValid(itemTable.player) and (itemTable.player:Team() == FACTION_ADMIN or itemTable.player:IsCombine() or itemTable.player:GetCharacter():HasFlags("M"))) == true
|
||||
end
|
||||
}
|
||||
181
gamemodes/ixhl2rp/plugins/cid/items/sh_cwu_card.lua
Normal file
181
gamemodes/ixhl2rp/plugins/cid/items/sh_cwu_card.lua
Normal file
@@ -0,0 +1,181 @@
|
||||
--[[
|
||||
| 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 = "CWU Access Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A Civil Workers' Union Access Keycard."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.skin = 2
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(25, 400, 0),
|
||||
fov = 0.59
|
||||
}
|
||||
|
||||
function ITEM:GetName()
|
||||
local accessLevel = self:GetData("accessLevel", "Member Access")
|
||||
|
||||
return "CWU " .. accessLevel .. " Keycard"
|
||||
end
|
||||
|
||||
function ITEM:GetFactionInfo()
|
||||
return self:GetData("faction", false) and ix.factionBudget.list[self:GetData("faction")] and "Binded to: " .. ix.factionBudget.list[self:GetData("faction")].name or "This card is not binded to any faction."
|
||||
end
|
||||
|
||||
function ITEM:GetColorAppendix()
|
||||
local info = {["green"] = self:GetFactionInfo()}
|
||||
|
||||
return info
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or
|
||||
(self:GetData("cardID") and self.description.."\n\nCurrently bound." or self.description)
|
||||
end
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(LocalPlayer():GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to CWU Card", "Please select a ID card to bind to this CWU Card:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindCWUCard", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this CWU Card?", "Bind ID Card to CWU Card",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindCWUCard", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have ID card to bind to this CWU Card.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!IsValid(itemTable.player)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
|
||||
if (!inventory:HasItem("id_card")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:GetData("cardID")) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.SetAccessLevel = {
|
||||
name = "Toggle Card Access Level",
|
||||
icon = "icon16/vcard_add.png",
|
||||
isMulti = true,
|
||||
multiOptions = function(item, player)
|
||||
local keys = table.GetKeys(ix.city.cwuAccess)
|
||||
local accessLevels = {}
|
||||
for _, accessLevel in pairs(keys) do
|
||||
accessLevels[#accessLevels + 1] = {name = accessLevel, data = {aLevel = accessLevel .. " Access"}}
|
||||
end
|
||||
|
||||
return accessLevels
|
||||
end,
|
||||
OnRun = function(itemTable, accessLevel)
|
||||
local client = itemTable.player
|
||||
|
||||
itemTable:SetData("accessLevel", accessLevel.aLevel)
|
||||
client:NotifyLocalized("You have set this card's Access Level to " .. accessLevel.aLevel .. ".")
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return (!IsValid(itemTable.entity) and IsValid(itemTable.player) and (itemTable.player:Team() == FACTION_ADMIN or itemTable.player:IsCombine() or itemTable.player:GetCharacter():HasFlags("M"))) == true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.SetFaction = {
|
||||
name = "Set Card Faction",
|
||||
icon = "icon16/vcard_add.png",
|
||||
isMulti = true,
|
||||
multiOptions = function(item, player)
|
||||
local factions = {}
|
||||
for id, faction in pairs(ix.factionBudget.list) do
|
||||
factions[#factions + 1] = {name = faction.name, data = faction}
|
||||
end
|
||||
|
||||
return factions
|
||||
end,
|
||||
OnRun = function(item, data)
|
||||
item:SetData("faction", data.id)
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return (!IsValid(itemTable.entity) and IsValid(itemTable.player) and (itemTable.player:Team() == FACTION_ADMIN or itemTable.player:IsCombine() or itemTable.player:GetCharacter():HasFlags("M"))) == true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.insert = {
|
||||
name = "Insert card",
|
||||
icon = "icon16/add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
local ent = client:GetEyeTrace().Entity
|
||||
if (!ent.CWUInsert) or client:EyePos():DistToSqr(ent:GetPos()) > 62500 then
|
||||
return false
|
||||
end
|
||||
|
||||
local bSuccess, error = itemTable:Transfer(nil, nil, nil, client)
|
||||
if (!bSuccess and isstring(error)) then
|
||||
client:NotifyLocalized(error)
|
||||
return false
|
||||
else
|
||||
client:EmitSound("npc/zombie/foot_slide" .. math.random(1, 3) .. ".wav", 75, math.random(90, 120), 1)
|
||||
end
|
||||
|
||||
if bSuccess and IsEntity(bSuccess) then
|
||||
ent:CWUInsert(bSuccess)
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
if (!client:GetEyeTrace().Entity.CWUInsert) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
106
gamemodes/ixhl2rp/plugins/cid/items/sh_dob_card.lua
Normal file
106
gamemodes/ixhl2rp/plugins/cid/items/sh_dob_card.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
--[[
|
||||
| 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 = "DOB Access Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A Department of Business Access Keycard."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.skin = 2
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(25, 400, 0),
|
||||
fov = 0.59
|
||||
}
|
||||
|
||||
function ITEM:GetName()
|
||||
local accessLevel = self:GetData("accessLevel", "Member Access")
|
||||
|
||||
return "DOB " .. accessLevel .. " Keycard"
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or
|
||||
(self:GetData("cardID") and self.description.."\n\nCurrently bound." or self.description)
|
||||
end
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(LocalPlayer():GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to DOB Card", "Please select a ID card to bind to this DOB Card:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindDOBCard", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this DOB Card?", "Bind ID Card to DOB Card",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindDOBCard", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have ID card to bind to this DOB Card.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!IsValid(itemTable.player)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
|
||||
if (!inventory:HasItem("id_card")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:GetData("cardID")) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.SetAccessLevel = {
|
||||
name = "Toggle Card Access Level",
|
||||
icon = "icon16/vcard_add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
local accessLevel = itemTable:GetData("accessLevel", "Member Access")
|
||||
local target = accessLevel == "Member Access" and "Management Access" or "Member Access"
|
||||
|
||||
itemTable:SetData("accessLevel", target)
|
||||
client:NotifyLocalized("You have set this card's Access Level to " .. target .. ".")
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return (!IsValid(itemTable.entity) and IsValid(itemTable.player) and (itemTable.player:Team() == FACTION_ADMIN or itemTable.player:IsCombine() or itemTable.player:GetCharacter():HasFlags("M"))) == true
|
||||
end
|
||||
}
|
||||
66
gamemodes/ixhl2rp/plugins/cid/items/sh_fake_id_card.lua
Normal file
66
gamemodes/ixhl2rp/plugins/cid/items/sh_fake_id_card.lua
Normal file
@@ -0,0 +1,66 @@
|
||||
--[[
|
||||
| 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 = "#00000's Identity Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A citizen identification card assigned to %s, CID #%s.\n\nCard Number: %s\nGenetic description:\n%s.\n\nThis card is property of the Combine Civil Administration. Illegal possession and identity fraud are punishable by law and will result in prosecution by Civil Protection. If found, please return this card immediately to the nearest Civil Protection team."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(0, 0, 10),
|
||||
ang = Angle(90, 90, 0),
|
||||
fov = 45,
|
||||
}
|
||||
|
||||
if (CLIENT) then
|
||||
function ITEM:PaintOver(item, w, h)
|
||||
surface.SetDrawColor(110, 255, 110, 100)
|
||||
surface.DrawRect(w - 14, h - 14, 8, 8)
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:GetName()
|
||||
return "#" .. self:GetData("cid", "00000") .. "'s Identity Card"
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
return string.format(self.description,
|
||||
self:GetData("name", "Nobody"),
|
||||
self:GetData("cid", "00000"),
|
||||
self:GetData("cardNumber", "00-0000-0000-00"),
|
||||
self:GetData("geneticDesc", "N/A | N/A | N/A EYES | N/A HAIR"))
|
||||
end
|
||||
|
||||
local prime = 9999999787 -- prime % 4 = 3! DO NOT CHANGE EVER
|
||||
local offset = 100000 -- slightly larger than sqrt(prime) is ok. DO NOT CHANGE EVER
|
||||
local block = 100000000
|
||||
local function generateCardNumber(id)
|
||||
id = (id + offset) % prime
|
||||
|
||||
local cardNum = 0
|
||||
|
||||
for _ = 1, math.floor(id/block) do
|
||||
cardNum = (cardNum + (id * block) % prime) % prime
|
||||
end
|
||||
|
||||
cardNum = (cardNum + (id * (id % block) % prime)) % prime
|
||||
|
||||
if (2 * id < prime) then
|
||||
return cardNum
|
||||
else
|
||||
return prime - cardNum
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:OnInstanced()
|
||||
local cardNum = Schema:ZeroNumber(generateCardNumber(self:GetID()), 10)
|
||||
|
||||
self:SetData("cardNumber", string.utf8sub(cardNum, 1, 2) .. "-" .. string.utf8sub(cardNum, 3, 6) .. "-" .. string.utf8sub(cardNum, 7, 10) .. "-" .. Schema:ZeroNumber(cardNum % 97, 2))
|
||||
end
|
||||
@@ -0,0 +1,52 @@
|
||||
--[[
|
||||
| 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 = "Counterfeit Identity Card Creation Device"
|
||||
ITEM.model = Model("models/props_lab/reciever01a.mdl")
|
||||
ITEM.description = "A device used to modify blank Identity Cards to look like real, functional ones."
|
||||
ITEM.category = "Tools"
|
||||
|
||||
ITEM.functions.CreateID = {
|
||||
name = "Create Counterfeit ID",
|
||||
icon = "icon16/vcard.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
client:RequestString("Name", "Enter the name of the person that this counterfeit ID will be for", function(name)
|
||||
client:RequestString("CID", "Enter the CID of the person that this counterfeit ID will be for", function(cid)
|
||||
client:RequestString("Generic Description", "Enter the generic description of the person that this counterfeit ID will be for", function(desc)
|
||||
local inventory = client:GetCharacter():GetInventory()
|
||||
local card = inventory:HasItem("id_card_blank")
|
||||
|
||||
if (!card) then
|
||||
client:Notify("You need a Blank Identity Card to turn into a counterfeit one!")
|
||||
client:EmitSound("buttons/combine_button_locked.wav")
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
card:Remove()
|
||||
|
||||
inventory:Add("fake_id_card", 1, {
|
||||
name = name,
|
||||
cid = cid,
|
||||
geneticDesc = desc
|
||||
})
|
||||
|
||||
client:Notify("Counterfeit Identity Card created.")
|
||||
client:EmitSound("ambient/machines/combine_terminal_idle2.wav")
|
||||
end, "YOUNG ADULT/ADULT/MIDDLE-AGED/ELDERLY | 0\'00\" | [COLOR] EYES | [COLOR] HAIR")
|
||||
end, "00000")
|
||||
end, "")
|
||||
|
||||
return false
|
||||
end
|
||||
}
|
||||
289
gamemodes/ixhl2rp/plugins/cid/items/sh_id_card.lua
Normal file
289
gamemodes/ixhl2rp/plugins/cid/items/sh_id_card.lua
Normal file
@@ -0,0 +1,289 @@
|
||||
--[[
|
||||
| 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 = "#00000's Identity Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A citizen identification card assigned to %s, CID #%s.\n\nCard Number: %s\nGenetic description:\n%s.\n\nThis card is property of the Combine Civil Administration. Illegal possession and identity fraud are punishable by law and will result in prosecution by Civil Protection. If found, please return this card immediately to the nearest Civil Protection team."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(0, 0, 10),
|
||||
ang = Angle(90, 90, 0),
|
||||
fov = 45,
|
||||
}
|
||||
|
||||
if (CLIENT) then
|
||||
function ITEM:PaintOver(item, w, h)
|
||||
if (item:GetData("active")) then
|
||||
surface.SetDrawColor(110, 255, 110, 100)
|
||||
surface.DrawRect(w - 14, h - 14, 8, 8)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:GetName()
|
||||
return "#" .. self:GetData("cid", "00000") .. "'s Identity Card"
|
||||
end
|
||||
|
||||
-- It's also possible to use ITEM.KeepOnDeath = true
|
||||
function ITEM:KeepOnDeath(client)
|
||||
return self:GetData("owner") == client:GetCharacter():GetID() and self:GetData("active")
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
return string.format(self.description,
|
||||
self:GetData("name", "Nobody"),
|
||||
self:GetData("cid", "00000"),
|
||||
self:GetData("cardNumber", "00-0000-0000-00"),
|
||||
self:GetData("geneticDesc", "N/A | N/A | N/A EYES | N/A HAIR"))
|
||||
end
|
||||
|
||||
local prime = 9999999787 -- prime % 4 = 3! DO NOT CHANGE EVER
|
||||
local offset = 100000 -- slightly larger than sqrt(prime) is ok. DO NOT CHANGE EVER
|
||||
local block = 100000000
|
||||
local function generateCardNumber(id)
|
||||
id = (id + offset) % prime
|
||||
|
||||
local cardNum = 0
|
||||
|
||||
for _ = 1, math.floor(id/block) do
|
||||
cardNum = (cardNum + (id * block) % prime) % prime
|
||||
end
|
||||
|
||||
cardNum = (cardNum + (id * (id % block) % prime)) % prime
|
||||
|
||||
if (2 * id < prime) then
|
||||
return cardNum
|
||||
else
|
||||
return prime - cardNum
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:GetCredits()
|
||||
return self:GetData("credits", 0)
|
||||
end
|
||||
|
||||
function ITEM:HasCredits(amount)
|
||||
return amount <= self:GetData("credits", 0)
|
||||
end
|
||||
|
||||
if (SERVER) then
|
||||
function ITEM:SetCredits(amount)
|
||||
self:SetData("credits", math.floor(amount))
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ITEM:GiveCredits(amount, sender, reason)
|
||||
if (amount < 0 and !self:HasCredits(math.abs(amount))) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (amount == 0) then
|
||||
return true
|
||||
end
|
||||
|
||||
if (sender) then
|
||||
local insert = mysql:Insert("ix_cid_transactions")
|
||||
insert:Insert("datetime", os.time())
|
||||
insert:Insert("sender_name", sender)
|
||||
insert:Insert("sender_cid", "00000")
|
||||
insert:Insert("sender_cardid", 0)
|
||||
insert:Insert("receiver_name", self:GetData("name", "UNKNOWN"))
|
||||
insert:Insert("receiver_cid", self:GetData("cid", "INVALID"))
|
||||
insert:Insert("receiver_cardid", self:GetID())
|
||||
insert:Insert("amount", amount)
|
||||
if (reason and reason != "") then
|
||||
insert:Insert("reason", string.len(reason) > 250 and string.sub(reason, 1, 250) or reason)
|
||||
else
|
||||
insert:Insert("reason", "no reason given")
|
||||
end
|
||||
|
||||
insert:Insert("pos", 0)
|
||||
insert:Insert("read", 1)
|
||||
insert:Execute()
|
||||
end
|
||||
|
||||
return self:SetCredits(amount + self:GetCredits())
|
||||
end
|
||||
|
||||
function ITEM:TakeCredits(amount, receiver, reason)
|
||||
if (amount > 0 and !self:HasCredits(amount)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (amount == 0) then
|
||||
return true
|
||||
end
|
||||
|
||||
if (receiver) then
|
||||
local insert = mysql:Insert("ix_cid_transactions")
|
||||
insert:Insert("datetime", os.time())
|
||||
insert:Insert("sender_name", self:GetData("name", "UNKNOWN"))
|
||||
insert:Insert("sender_cid", self:GetData("cid", "INVALID"))
|
||||
insert:Insert("sender_cardid", self:GetID())
|
||||
insert:Insert("receiver_name", receiver)
|
||||
insert:Insert("receiver_cid", "00000")
|
||||
insert:Insert("receiver_cardid", 0)
|
||||
insert:Insert("amount", amount)
|
||||
if (reason and reason != "") then
|
||||
insert:Insert("reason", string.len(reason) > 250 and string.sub(reason, 1, 250) or reason)
|
||||
else
|
||||
insert:Insert("reason", "no reason given")
|
||||
end
|
||||
|
||||
insert:Insert("pos", 0)
|
||||
insert:Insert("read", 1)
|
||||
insert:Execute()
|
||||
end
|
||||
|
||||
return self:SetCredits(self:GetCredits() - amount)
|
||||
end
|
||||
|
||||
function ITEM:OnInstanced()
|
||||
local cardNum = Schema:ZeroNumber(generateCardNumber(self:GetID()), 10)
|
||||
self:SetData("cardNumber", string.utf8sub(cardNum, 1, 2).."-"..string.utf8sub(cardNum, 3, 6).."-"..string.utf8sub(cardNum, 7, 10)..
|
||||
"-"..Schema:ZeroNumber(cardNum % 97, 2))
|
||||
end
|
||||
|
||||
function ITEM:TransferData(newCard, wipe)
|
||||
newCard:SetData("credits", self:GetData("credits", 0))
|
||||
newCard:SetData("nextRationTime", self:GetData("nextRationTime", 0))
|
||||
|
||||
if (wipe) then
|
||||
self:SetData("active", false)
|
||||
self:SetData("credits", 0)
|
||||
self:SetData("nextRationTime", 0)
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:OnRemoved()
|
||||
if (self:GetData("active") != false) then
|
||||
local ownerId = self:GetData("owner")
|
||||
local data = {credits = self:GetData("credits", 0), ration = self:GetData("nextRationTime", 0)}
|
||||
if (ix.char.loaded[ownerId]) then
|
||||
ix.char.loaded[ownerId]:SetIdCardBackup(data)
|
||||
ix.char.loaded[ownerId]:SetIdCard(nil)
|
||||
end
|
||||
|
||||
local updateQuery = mysql:Update("ix_characters_data")
|
||||
updateQuery:Update("data", util.TableToJSON(data))
|
||||
updateQuery:Where("id", ownerId)
|
||||
updateQuery:Where("key", "idCardBackup")
|
||||
updateQuery:Execute()
|
||||
|
||||
local idCardQuery = mysql:Update("ix_characters")
|
||||
idCardQuery.updateList[#idCardQuery.updateList + 1] = {"`idcard`", "NULL"}
|
||||
idCardQuery:Where("id", ownerId)
|
||||
idCardQuery:Where("schema", Schema and Schema.folder or "helix")
|
||||
idCardQuery:Execute()
|
||||
|
||||
self:SetData("active", false)
|
||||
end
|
||||
end
|
||||
|
||||
function ITEM:LoadOwnerGenericData(callback, error, ...)
|
||||
if (!callback) then return end
|
||||
|
||||
local arg = {...}
|
||||
local queryObj = mysql:Select("ix_characters_data")
|
||||
queryObj:Where("id", self:GetData("owner", 0))
|
||||
queryObj:Where("key", "genericdata")
|
||||
queryObj:Select("data")
|
||||
queryObj:Callback(function(result)
|
||||
if (!istable(result) or !result[1]) then
|
||||
if (error) then
|
||||
error(self, unpack(arg))
|
||||
end
|
||||
else
|
||||
callback(self, util.JSONToTable(result[1].data or ""), unpack(arg))
|
||||
end
|
||||
end)
|
||||
queryObj:Execute()
|
||||
end
|
||||
|
||||
netstream.Hook("ixSetIDCardCredits", function(client, itemID, amount)
|
||||
ix.item.instances[itemID]:SetCredits(amount)
|
||||
end)
|
||||
end
|
||||
|
||||
ITEM.functions.SetCredits = {
|
||||
name = "Set Credits",
|
||||
icon = "icon16/money_add.png",
|
||||
OnClick = function(itemTable)
|
||||
local client = itemTable.player
|
||||
Derma_StringRequest("Set Credits", "What do you want to set the credits to?", itemTable:GetData("credits", 0), function(text)
|
||||
local amount = tonumber(text)
|
||||
|
||||
if (amount and amount >= 0) then
|
||||
netstream.Start("ixSetIDCardCredits", itemTable:GetID(), math.floor(amount))
|
||||
else
|
||||
client:NotifyLocalized("numNotValid")
|
||||
end
|
||||
end)
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!CAMI.PlayerHasAccess(itemTable.player, "Helix - Set Credits")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!itemTable:GetData("active", false)) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.insert = {
|
||||
name = "Insert CID",
|
||||
icon = "icon16/add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
local ent = client:GetEyeTrace().Entity
|
||||
if (!ent.CIDInsert) or client:EyePos():DistToSqr(ent:GetPos()) > 62500 then
|
||||
return false
|
||||
end
|
||||
|
||||
local bSuccess, error = itemTable:Transfer(nil, nil, nil, client)
|
||||
if (!bSuccess and isstring(error)) then
|
||||
client:NotifyLocalized(error)
|
||||
return false
|
||||
else
|
||||
client:EmitSound("npc/zombie/foot_slide" .. math.random(1, 3) .. ".wav", 75, math.random(90, 120), 1)
|
||||
end
|
||||
|
||||
if bSuccess and IsEntity(bSuccess) then
|
||||
ent:CIDInsert(bSuccess)
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
if (!client:GetEyeTrace().Entity.CIDInsert) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!itemTable:GetData("active", false)) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
19
gamemodes/ixhl2rp/plugins/cid/items/sh_id_card_blank.lua
Normal file
19
gamemodes/ixhl2rp/plugins/cid/items/sh_id_card_blank.lua
Normal file
@@ -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 = "Blank CID card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A blank citizen identification card without any data."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(25, 400, 0),
|
||||
fov = 0.59
|
||||
}
|
||||
114
gamemodes/ixhl2rp/plugins/cid/items/sh_id_card_creator.lua
Normal file
114
gamemodes/ixhl2rp/plugins/cid/items/sh_id_card_creator.lua
Normal file
@@ -0,0 +1,114 @@
|
||||
--[[
|
||||
| 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 = "Identity Card Creation Device"
|
||||
ITEM.model = Model("models/props_lab/reciever01d.mdl")
|
||||
ITEM.description = "A device used to bind blank Identity Cards to a specific person."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.functions.CreateIDTarget = {
|
||||
name = "Create Identity Card for target",
|
||||
icon = "icon16/vcard_add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
if (ix.config.Get("creditsNoConnection")) then
|
||||
client:EmitSound("hl1/fvox/buzz.wav", 60, 100, 0.5)
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:CheckAccess(client, itemTable) == false) then
|
||||
client:EmitSound("buttons/combine_button_locked.wav", 60, 100, 0.5)
|
||||
return false
|
||||
end
|
||||
|
||||
local data = {}
|
||||
data.start = client:GetShootPos()
|
||||
data.endpos = data.start + client:GetAimVector() * 96
|
||||
data.filter = client
|
||||
local target = util.TraceLine(data).Entity
|
||||
|
||||
if (IsValid(target) and target:IsPlayer() and target:GetCharacter()) then
|
||||
client:SetAction("@scanning", 5)
|
||||
client:EmitSound("buttons/button18.wav", 60, 100, 0.5)
|
||||
client:DoStaredAction(target, function()
|
||||
itemTable:CreateIDCard(client, target)
|
||||
end, 5, function()
|
||||
client:SetAction()
|
||||
client:EmitSound("buttons/combine_button_locked.wav", 60, 100, 0.5)
|
||||
end)
|
||||
else
|
||||
client:NotifyLocalized("plyNotValid")
|
||||
end
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return !IsValid(itemTable.entity)
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.CreateIDSelf = {
|
||||
name = "Create Identity Card for yourself",
|
||||
icon = "icon16/vcard.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
if (ix.config.Get("creditsNoConnection")) then
|
||||
client:EmitSound("hl1/fvox/buzz.wav", 60, 100, 0.5)
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:CheckAccess(client, itemTable) == false) then
|
||||
client:EmitSound("buttons/combine_button_locked.wav", 60, 100, 0.5)
|
||||
return false
|
||||
end
|
||||
|
||||
client:SetAction("@scanning", 5, function()
|
||||
itemTable:CreateIDCard(client, client)
|
||||
end)
|
||||
client:EmitSound("buttons/button18.wav", 60, 100, 0.5)
|
||||
return false
|
||||
end
|
||||
}
|
||||
|
||||
function ITEM:CreateIDCard(client, target)
|
||||
local character = target:GetCharacter()
|
||||
local cid = character:GetCid()
|
||||
|
||||
if (!cid) then
|
||||
client:NotifyLocalized("idNotFound")
|
||||
client:EmitSound("buttons/combine_button_locked.wav", 60, 100, 0.5)
|
||||
return
|
||||
end
|
||||
|
||||
local inventory = client:GetCharacter():GetInventory()
|
||||
local blankCard = inventory:HasItem("id_card_blank")
|
||||
|
||||
if (!blankCard) then
|
||||
client:NotifyLocalized("idNoBlank")
|
||||
client:EmitSound("buttons/combine_button_locked.wav", 60, 100, 0.5)
|
||||
return
|
||||
end
|
||||
|
||||
blankCard:Remove()
|
||||
character:CreateIDCard()
|
||||
client:EmitSound("buttons/button4.wav", 60, 100, 0.5)
|
||||
client:NotifyLocalized("idCardAdded")
|
||||
|
||||
ix.combineNotify:AddNotification("NTC:// Identification Card #" .. character:GetCid() .. " created by " .. client:GetCombineTag())
|
||||
end
|
||||
|
||||
function ITEM:CheckAccess(client, itemTable)
|
||||
if (!client:HasActiveCombineSuit() and !ix.faction.Get(client:Team()).allowCIDCreator) then
|
||||
client:NotifyLocalized("idNotAllowed")
|
||||
return false
|
||||
end
|
||||
end
|
||||
106
gamemodes/ixhl2rp/plugins/cid/items/sh_moe_card.lua
Normal file
106
gamemodes/ixhl2rp/plugins/cid/items/sh_moe_card.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
--[[
|
||||
| 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 = "MOE Access Card"
|
||||
ITEM.model = Model("models/n7/props/n7_cid_card.mdl")
|
||||
ITEM.description = "A Ministry of Enlightenment Access Keycard."
|
||||
ITEM.category = "Combine"
|
||||
ITEM.skin = 2
|
||||
ITEM.iconCam = {
|
||||
pos = Vector(-509.64, -427.61, 310.24),
|
||||
ang = Angle(25, 400, 0),
|
||||
fov = 0.59
|
||||
}
|
||||
|
||||
function ITEM:GetName()
|
||||
local accessLevel = self:GetData("accessLevel", "Member Access")
|
||||
|
||||
return "MOE " .. accessLevel .. " Keycard"
|
||||
end
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or
|
||||
(self:GetData("cardID") and self.description.."\n\nCurrently bound." or self.description)
|
||||
end
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(LocalPlayer():GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to MOE Card", "Please select a ID card to bind to this MOE Card:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindMOECard", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this MOE Card?", "Bind ID Card to MOE Card",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindMOECard", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have ID card to bind to this MOE Card.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!IsValid(itemTable.player)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
|
||||
if (!inventory:HasItem("id_card")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (itemTable:GetData("cardID")) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.SetAccessLevel = {
|
||||
name = "Toggle Card Access Level",
|
||||
icon = "icon16/vcard_add.png",
|
||||
OnRun = function(itemTable)
|
||||
local client = itemTable.player
|
||||
local accessLevel = itemTable:GetData("accessLevel", "Member Access")
|
||||
local target = accessLevel == "Member Access" and "Management Access" or "Member Access"
|
||||
|
||||
itemTable:SetData("accessLevel", target)
|
||||
client:NotifyLocalized("You have set this card's Access Level to " .. target .. ".")
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
return (!IsValid(itemTable.entity) and IsValid(itemTable.player) and (itemTable.player:Team() == FACTION_ADMIN or itemTable.player:IsCombine() or itemTable.player:GetCharacter():HasFlags("M"))) == true
|
||||
end
|
||||
}
|
||||
226
gamemodes/ixhl2rp/plugins/cid/items/sh_pos_terminal.lua
Normal file
226
gamemodes/ixhl2rp/plugins/cid/items/sh_pos_terminal.lua
Normal file
@@ -0,0 +1,226 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
ITEM.name = "POS Terminal"
|
||||
ITEM.model = Model("models/willardnetworks/props/posterminal.mdl")
|
||||
ITEM.description = "A device that allows someone to request money from another person to be deposited upon another card."
|
||||
ITEM.category = "Combine"
|
||||
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or self.description
|
||||
end
|
||||
|
||||
if (SERVER) then
|
||||
function ITEM:AddTransactionID(id)
|
||||
local ids = self:GetData("transactionIDs", {})
|
||||
ids[#ids + 1] = id
|
||||
self:SetData("transactionIDs", ids, false, false, true)
|
||||
end
|
||||
end
|
||||
|
||||
ITEM.functions.RequestCredits = {
|
||||
name = "Request credits",
|
||||
icon = "icon16/money.png",
|
||||
OnClick = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
if (ix.config.Get("creditsNoConnection")) then
|
||||
client:EmitSound("hl1/fvox/buzz.wav", 60, 100, 0.5)
|
||||
client:NotifyLocalized("errorNoConnection")
|
||||
return false
|
||||
end
|
||||
|
||||
Derma_StringRequest("Request credits", "How many credits do you want to request?", itemTable:GetData("lastAmount", 0), function(text)
|
||||
local amount = tonumber(text)
|
||||
|
||||
if (amount) then
|
||||
Derma_StringRequest("Request credits - COMMENT", "Please state the reason for the transaction:", "", function(reason)
|
||||
if (text == "") then
|
||||
client:NotifyLocalized("reasonNotValid")
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
netstream.Start("ixRequestCredits", itemTable:GetID(), math.floor(amount), reason)
|
||||
end)
|
||||
else
|
||||
client:NotifyLocalized("numNotValid")
|
||||
end
|
||||
end)
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!itemTable:GetData("cardID", false)) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local client = itemTable.player
|
||||
|
||||
if (ix.config.Get("creditsNoConnection")) then
|
||||
client:EmitSound("hl1/fvox/buzz.wav", 60, 100, 0.5)
|
||||
client:NotifyLocalized("errorNoConnection")
|
||||
return false
|
||||
end
|
||||
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(client:GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to POS", "Please select a ID card to bind to this POS terminal:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindTerminal", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this POS terminal?", "Bind ID Card to POS",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindTerminal", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
client:NotifyLocalized("You do not have ID card to bind to this terminal.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then return false end
|
||||
if (!IsValid(itemTable.player)) then return false end
|
||||
|
||||
if (itemTable:GetData("cardIDLock", false)) then return false end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
if (!inventory:HasItem("id_card")) then return false end
|
||||
if (!itemTable:GetData("cardID", false)) then return true end
|
||||
|
||||
if (inventory:GetItemCount("id_card") == 1 and inventory:GetItemByID(itemTable:GetData("cardID"))) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.ShowLog = {
|
||||
name = "Show Transactions",
|
||||
icon = "icon16/eye.png",
|
||||
OnRun = function(itemTable, data)
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
PLUGIN:SelectTransactions(itemTable.player, "pos", itemTable:GetID(), data and data[1], itemTable:GetData("cardIDLock", false) and !inventory:GetItemByID(itemTable:GetData("cardID")))
|
||||
|
||||
return false
|
||||
end,
|
||||
isMulti = true,
|
||||
multiOptions = function(item, player)
|
||||
local options = {{name = "1 day", data = {1}}}
|
||||
|
||||
for i = 2, 6 do
|
||||
options[#options + 1] = {name = i.." days", data = {i}}
|
||||
end
|
||||
options[#options + 1] = {name = "1 week", data = {7}}
|
||||
options[#options + 1] = {name = "2 week", data = {14}}
|
||||
options[#options + 1] = {name = "1 month", data = {30}}
|
||||
|
||||
options[#options + 1] = {name = "other", data = {-1}, OnClick = function(itemTable)
|
||||
Derma_StringRequest("Transaction Log Days", "How many days of transaction logs do you wish to see?", "7", function(text)
|
||||
local amount = tonumber(text)
|
||||
if (!amount or amount <= 0) then return end
|
||||
|
||||
net.Start("ixInventoryAction")
|
||||
net.WriteString("ShowLog")
|
||||
net.WriteUInt(itemTable.id, 32)
|
||||
net.WriteUInt(itemTable.invID, 32)
|
||||
net.WriteTable({amount})
|
||||
net.SendToServer()
|
||||
end)
|
||||
|
||||
return false
|
||||
end}
|
||||
|
||||
return options
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then return false end
|
||||
if (!IsValid(itemTable.player)) then return false end
|
||||
if (!itemTable:GetData("cardID", false)) then return false end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
ITEM.functions.Lock = {
|
||||
name = "Lock ID Card",
|
||||
icon = "icon16/lock.png",
|
||||
OnRun = function(itemTable)
|
||||
itemTable:SetData("cardIDLock", true)
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then return false end
|
||||
if (!IsValid(itemTable.player)) then return false end
|
||||
|
||||
if (itemTable:GetData("cardIDLock", false)) then return false end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
if (!itemTable:GetData("cardID", false)) then return false end
|
||||
if (!inventory:GetItemByID(itemTable:GetData("cardID"))) then return false end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
ITEM.functions.LockUn = {
|
||||
name = "UnLock ID Card",
|
||||
icon = "icon16/lock_open.png",
|
||||
OnRun = function(itemTable)
|
||||
itemTable:SetData("cardIDLock", false)
|
||||
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then return false end
|
||||
if (!IsValid(itemTable.player)) then return false end
|
||||
|
||||
if (!itemTable:GetData("cardIDLock", false)) then return false end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
if (!itemTable:GetData("cardID", false)) then return false end
|
||||
if (!inventory:GetItemByID(itemTable:GetData("cardID"))) then return false end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
157
gamemodes/ixhl2rp/plugins/cid/items/sh_request_device.lua
Normal file
157
gamemodes/ixhl2rp/plugins/cid/items/sh_request_device.lua
Normal file
@@ -0,0 +1,157 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
REQUEST_CP = 0
|
||||
REQUEST_MED = 1
|
||||
REQUEST_WORK = 2
|
||||
|
||||
ITEM.name = "Request Device"
|
||||
ITEM.model = Model("models/gibs/shield_scanner_gib1.mdl")
|
||||
ITEM.description = "A small device with rounded corners, housing one button. A small combine logo is visible.\n\nThe instructions read: please first register this device by holding your ID card against this device. Once registration is completed, you can request assistance from Civil Protection by pressing the button and stating your request. Your name and CID is automatically included with the request.\nPlease be aware the misuse of the request device, making false statements to Civil Protection and identity fraud are punishable by law and will result in prosecution by Civil Protection."
|
||||
ITEM.price = 20
|
||||
ITEM.category = "Combine"
|
||||
function ITEM:GetDescription()
|
||||
local idCard = ix.item.instances[self:GetData("cardID")]
|
||||
return idCard and string.format(self.description.."\n\nCurrently bound to identity card #%s.", idCard:GetData("cardNumber")) or self.description
|
||||
end
|
||||
|
||||
local function GetRequestTable(data)
|
||||
return {
|
||||
name = data.actionName,
|
||||
icon = "icon16/help.png",
|
||||
OnClick = function(itemTable)
|
||||
if (ix.config.Get("creditsNoConnection")) then
|
||||
itemTable.player:EmitSound("hl1/fvox/buzz.wav", 60, 100, 0.5)
|
||||
return
|
||||
end
|
||||
|
||||
Derma_StringRequest(data.requestTitle, data.requestMessage, PLUGIN.text,
|
||||
function(text)
|
||||
if (text and string.utf8len(text) > 0) then
|
||||
netstream.Start("ixRequest", itemTable:GetID(), text, data.requestType)
|
||||
end
|
||||
|
||||
PLUGIN.text = nil
|
||||
end,
|
||||
function(text)
|
||||
if (text == PLUGIN.text) then
|
||||
PLUGIN.text = text
|
||||
elseif (text and string.utf8len(text) > 0)then
|
||||
PLUGIN.text = text
|
||||
else
|
||||
PLUGIN.text = nil
|
||||
end
|
||||
end, "MAKE REQUEST", "CANCEL"
|
||||
)
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!itemTable:GetData("cardID", false)) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
ITEM.functions.RequestCp = GetRequestTable({
|
||||
actionName = "Make CP Request",
|
||||
requestTitle = "Request Civil Protection Assistance",
|
||||
requestMessage = "Please enter your assistance request for Civil Protection. Your name and CID will automatically be included in the request.",
|
||||
requestType = REQUEST_CP
|
||||
})
|
||||
|
||||
ITEM.functions.RequestMed = GetRequestTable({
|
||||
actionName = "Make CMRU Request",
|
||||
requestTitle = "Request Civil Medical & Research Union Assistance",
|
||||
requestMessage = "Please enter your assistance request for Civil Medical Research Union. Your name and CID will automatically be included in the request. Do not forget to tell your location!",
|
||||
requestType = REQUEST_MED
|
||||
})
|
||||
|
||||
ITEM.functions.RequestCwu = GetRequestTable({
|
||||
actionName = "Make CWU Request",
|
||||
requestTitle = "Request Civil Workers Union Assistance",
|
||||
requestMessage = "Please enter your assistance request for Civil Workers Union. Your name and CID will automatically be included in the request.",
|
||||
requestType = REQUEST_WORK
|
||||
})
|
||||
|
||||
ITEM.functions.Bind = {
|
||||
name = "Bind ID Card",
|
||||
icon = "icon16/vcard_edit.png",
|
||||
OnClick = function(itemTable)
|
||||
local cards = {}
|
||||
|
||||
for _, v in pairs(LocalPlayer():GetCharacter():GetInventory():GetItemsByUniqueID("id_card")) do
|
||||
table.insert(cards, {
|
||||
text = v:GetName(),
|
||||
value = v
|
||||
})
|
||||
end
|
||||
|
||||
local cardsCount = table.Count(cards)
|
||||
if (cardsCount > 1) then
|
||||
Derma_Select("Bind ID Card to RD", "Please select a ID card to bind to this Request Device:",
|
||||
cards, "Select ID card",
|
||||
"Confirm Operation", function(value, name)
|
||||
netstream.Start("ixBindRequestDevice", itemTable:GetID(), value:GetID())
|
||||
end, "Cancel")
|
||||
elseif (cardsCount == 1) then
|
||||
Derma_Query("Are you sure you wish to bind your ID to this Request Device?", "Bind ID Card to RD",
|
||||
"Confirm Operation", function()
|
||||
netstream.Start("ixBindRequestDevice", itemTable:GetID(), cards[1].value:GetID())
|
||||
end, "Cancel")
|
||||
else
|
||||
LocalPlayer():NotifyLocalized("You do not have ID card to bind to this request device.")
|
||||
end
|
||||
end,
|
||||
OnRun = function(itemTable)
|
||||
return false
|
||||
end,
|
||||
OnCanRun = function(itemTable)
|
||||
if (IsValid(itemTable.entity)) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!IsValid(itemTable.player)) then
|
||||
return false
|
||||
end
|
||||
|
||||
local inventory = itemTable.player:GetCharacter():GetInventory()
|
||||
if (!inventory:HasItem("id_card")) then
|
||||
return false
|
||||
end
|
||||
|
||||
if (!itemTable:GetData("cardID", false)) then
|
||||
return true
|
||||
end
|
||||
|
||||
if (inventory:GetItemCount("id_card") == 1 and inventory:GetItemByID(itemTable:GetData("cardID"))) then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
if (CLIENT) then
|
||||
netstream.Hook("rdMoreThanOneText", function(text)
|
||||
PLUGIN.rdText = text
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user