mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
208
gamemodes/darkrp/plugins/combinesuits/sv_plugin.lua
Normal file
208
gamemodes/darkrp/plugins/combinesuits/sv_plugin.lua
Normal file
@@ -0,0 +1,208 @@
|
||||
--[[
|
||||
| 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 util = util
|
||||
local ix = ix
|
||||
local string = string
|
||||
local timer = timer
|
||||
local GetNetVar = GetNetVar
|
||||
local unpack = unpack
|
||||
local math = math
|
||||
local EmitSentence = EmitSentence
|
||||
local SentenceDuration = SentenceDuration
|
||||
local net = net
|
||||
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
|
||||
util.AddNetworkString("ixTypingBeep")
|
||||
util.AddNetworkString("ixVisorNotify")
|
||||
|
||||
ix.log.AddType("combineSuitsAdminActivate", function(client, item, bDeactivate)
|
||||
return string.format("%s has admin-activated a '%s' (#%d)", client:GetName(), bDeactivate and "de" or "", item:GetName(), item:GetID())
|
||||
end)
|
||||
ix.log.AddType("combineSuitsAdminTracking", function(client, item, bDeactivate)
|
||||
return string.format("%s has admin-désactivated the tracker on a '%s' (#%d)", client:GetName(), bDeactivate and "de" or "", item:GetName(), item:GetID())
|
||||
end)
|
||||
ix.log.AddType("combineSuitsAdminOwner", function(client, item)
|
||||
return string.format("%s has admin-disabled the owner on a '%s' (#%d)", client:GetName(), item:GetName(), item:GetID())
|
||||
end)
|
||||
ix.log.AddType("combineSuitsAdminOwnerClear", function(client, item)
|
||||
return string.format("%s has admin-cleared the owner on a '%s' (#%d)", client:GetName(), item:GetName(), item:GetID())
|
||||
end)
|
||||
ix.log.AddType("combineSuitsAdminName", function(client, item)
|
||||
return string.format("%s has admin-changed the name a '%s' (#%d) to %s.", client:GetName(), item:GetName(), item:GetID(), item:GetData("ownerName"))
|
||||
end)
|
||||
|
||||
PLUGIN.voiceLines = {
|
||||
["METROPOLICE_IDLE"] = 7,
|
||||
["METROPOLICE_IDLE_CHECK"] = 3,
|
||||
["METROPOLICE_IDLE_CLEAR"] = 18,
|
||||
["METROPOLICE_IDLE_QUEST"] = 7,
|
||||
["METROPOLICE_IDLE_ANSWER"] = 6,
|
||||
["METROPOLICE_HEARD_SOMETHING"] = 3,
|
||||
["METROPOLICE_IDLE_CR"] = 18,
|
||||
["METROPOLICE_IDLE_CHECK_CR"] = 7,
|
||||
["METROPOLICE_IDLE_CLEAR_CR"] = 4,
|
||||
["METROPOLICE_IDLE_QUEST_CR"] = 6,
|
||||
["METROPOLICE_IDLE_ANSWER_CR"] = 6,
|
||||
["COMBINE_IDLE"] = 4,
|
||||
["COMBINE_CHECK"] = 2,
|
||||
["COMBINE_CLEAR"] = 6,
|
||||
["COMBINE_QUEST"] = 5,
|
||||
["COMBINE_ANSWER"] = 4,
|
||||
["COMBINE_ALERT"] = 9,
|
||||
}
|
||||
|
||||
PLUGIN.cpLines = {
|
||||
{"METROPOLICE_IDLE"},
|
||||
{"METROPOLICE_IDLE_CHECK", "METROPOLICE_IDLE_CLEAR"},
|
||||
{"METROPOLICE_IDLE_QUEST", "METROPOLICE_IDLE_ANSWER"},
|
||||
{"METROPOLICE_HEARD_SOMETHING", "METROPOLICE_IDLE_CLEAR", 2}
|
||||
}
|
||||
PLUGIN.cpLinesCR = {
|
||||
{"METROPOLICE_IDLE_CR"},
|
||||
{"METROPOLICE_IDLE_CHECK_CR", "METROPOLICE_IDLE_CLEAR_CR"},
|
||||
{"METROPOLICE_IDLE_QUEST_CR", "METROPOLICE_IDLE_ANSWER_CR"},
|
||||
{"METROPOLICE_HEARD_SOMETHING", "METROPOLICE_IDLE_CLEAR_CR", 2}
|
||||
}
|
||||
PLUGIN.otaLines = {
|
||||
{"COMBINE_IDLE"},
|
||||
{"COMBINE_CHECK", "COMBINE_CLEAR"},
|
||||
{"COMBINE_QUEST", "COMBINE_ANSWER"},
|
||||
{"COMBINE_ALERT"}
|
||||
}
|
||||
PLUGIN.otaLinesBlue = {
|
||||
{"COMBINE_CHECK", "COMBINE_CLEAR", false, 600},
|
||||
}
|
||||
|
||||
function PLUGIN:ClientChatter(client, uniqueID)
|
||||
local character = client:GetCharacter()
|
||||
if (!character) then return end
|
||||
|
||||
if (client:IsAFK() or
|
||||
(client:GetMoveType() == MOVETYPE_NOCLIP and !client:InVehicle()) or
|
||||
!client:Alive() or
|
||||
!ix.option.Get(client, "ChatterEnabled", true) or
|
||||
!client:HasActiveCombineMask()) then
|
||||
-- Reset a reply if one is still pending
|
||||
if (client.ixSentenceReply) then
|
||||
timer.Adjust(uniqueID, ix.option.Get(client, "ChatterInterval", 120))
|
||||
client.ixSentenceReply = nil
|
||||
client.ixSentenceReplyInterval = nil
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if (client.ixSentenceReply) then
|
||||
self:EmitSentence(client, client.ixSentenceReply, nil, nil, client.ixSentenceReplyInterval)
|
||||
client.ixSentenceReply = nil
|
||||
return
|
||||
end
|
||||
|
||||
local suit = client:GetActiveCombineSuit()
|
||||
local soundTable
|
||||
if (suit.isCP) then
|
||||
if (GetNetVar("visorColor", "blue") != "blue") then
|
||||
soundTable = self.cpLinesCR
|
||||
else
|
||||
soundTable = self.cpLines
|
||||
end
|
||||
elseif (suit.isOTA) then
|
||||
if (GetNetVar("visorColor", "blue") != "blue") then
|
||||
soundTable = self.otaLines
|
||||
else
|
||||
soundTable = self.otaLinesBlue
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
|
||||
self:EmitSentence(client, unpack(soundTable[math.random(#soundTable)]))
|
||||
end
|
||||
|
||||
function PLUGIN:EmitSentence(client, sentence, answer, delay, interval)
|
||||
if (self.voiceLines[sentence]) then
|
||||
sentence = sentence..math.random(0, self.voiceLines[sentence])
|
||||
end
|
||||
EmitSentence(sentence, client:GetPos(), client:EntIndex(), CHAN_AUTO, 1, 75, 0, 100)
|
||||
|
||||
if (answer) then
|
||||
client.ixSentenceReply = answer..math.random(0, self.voiceLines[answer])
|
||||
client.ixSentenceReplyInterval = interval or 30
|
||||
--luacheck: read globals SentenceDuration
|
||||
timer.Adjust("ixChatter"..client:SteamID64(), (delay or 0) + math.random(3, 5) + SentenceDuration(sentence))
|
||||
else
|
||||
interval = interval or ix.option.Get(client, "ChatterInterval", 120)
|
||||
timer.Adjust("ixChatter"..client:SteamID64(), math.random(interval, interval * 2))
|
||||
end
|
||||
end
|
||||
|
||||
net.Receive("ixTypingBeep", function(len, client)
|
||||
if (net.ReadBool() == false and client.bTypingBeep) then
|
||||
client.bTypingBeep = nil
|
||||
|
||||
local suit = client:GetActiveCombineSuit()
|
||||
if (!suit or !client:HasActiveCombineMask() or (client:GetMoveType() == MOVETYPE_NOCLIP and !client:InVehicle())) then return end
|
||||
|
||||
if (suit.isCP) then
|
||||
client:EmitSound("NPC_MetroPolice.Radio.Off")
|
||||
elseif (suit.isOTA) then
|
||||
client:EmitSound("voices/transhuman/radio/off"..math.random(1, 3)..".wav")
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if (!client.bTypingBeep) then
|
||||
local suit = client:GetActiveCombineSuit()
|
||||
if (!suit or !client:HasActiveCombineMask() or (client:GetMoveType() == MOVETYPE_NOCLIP and !client:InVehicle())) then return end
|
||||
|
||||
if (suit.isCP) then
|
||||
client:EmitSound("NPC_MetroPolice.Radio.On")
|
||||
client.bTypingBeep = true
|
||||
elseif (suit.isOTA) then
|
||||
client:EmitSound("voices/transhuman/radio/on"..math.random(1, 2)..".wav")
|
||||
client.bTypingBeep = true
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function PLUGIN:ResetSCTimer(client, character)
|
||||
local delay = ix.config.Get("passiveStcTimer", 60)
|
||||
|
||||
if (delay <= 0) then return end
|
||||
|
||||
local uniqueID = "ixPassiveSC" .. client:SteamID64()
|
||||
|
||||
timer.Create(uniqueID, 300, 0, function()
|
||||
if (ix.config.Get("suitsNoConnection")) then return end
|
||||
|
||||
if (!IsValid(client) or !client:GetCharacter()) then
|
||||
timer.Remove(uniqueID)
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if (!client:GetActiveCombineSuit() or !client:HasActiveCombineMask() or client:IsAFK()) then return end
|
||||
|
||||
local progress = character:GetPassiveSCProgress()
|
||||
|
||||
if (progress < delay - 5) then
|
||||
character:SetPassiveSCProgress(progress + 5)
|
||||
else
|
||||
character.vars.genericdata.socialCredits = character.vars.genericdata.socialCredits + 1
|
||||
character:Save()
|
||||
|
||||
character:SetPassiveSCProgress(0)
|
||||
self:ResetSCTimer(client, character)
|
||||
end
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user