119 lines
No EOL
3.2 KiB
Lua
119 lines
No EOL
3.2 KiB
Lua
netstream.Hook('dbg-phone.cr', function(ply, ent, s)
|
|
if (ply.nextEMSRequest or 0) > CurTime() then return end
|
|
local name = ply:Nick()
|
|
if IsValid(ent) then
|
|
if ent:GetClass() ~= 'ent_dbg_phone' or ply:AtStationaryPhone() ~= ent then return end
|
|
name = ent:GetNick()
|
|
elseif not ply:HasMobilePhone() then return end
|
|
DarkRP.callEMS(ply, name, tostring(s))
|
|
end)
|
|
|
|
local ply = FindMetaTable 'Player'
|
|
|
|
function ply:HasMobilePhone()
|
|
return self.inv and self:FindItem({class = 'phone', on = true}) ~= nil
|
|
end
|
|
|
|
function ply:AtStationaryPhone()
|
|
local ent = octolib.use.getTrace(self).Entity
|
|
if IsValid(ent) and ent:GetClass() == 'ent_dbg_phone' and not ent.off then
|
|
return ent
|
|
end
|
|
end
|
|
|
|
function ply:HasPhone()
|
|
return not self:IsGhost() and (self:HasMobilePhone() or self:AtStationaryPhone())
|
|
end
|
|
|
|
function ply:SendSMS(...)
|
|
if not self:HasMobilePhone() then return end
|
|
|
|
octochat.talkTo(self, ...)
|
|
|
|
local phone = self:FindItem({class = 'phone', on = true})
|
|
if phone:GetData('notification') then
|
|
self:EmitSound('phone/phone_notification.wav', 38)
|
|
end
|
|
|
|
if phone:GetData('vibration') then
|
|
self:EmitSound('phone/phone_vibration.wav', 25)
|
|
end
|
|
end
|
|
|
|
hook.Add('octochat.canExecute', 'dbg-phone', function(ply, cmd)
|
|
|
|
if octochat.commands[cmd].phone and not ply:HasPhone() then
|
|
return false, L.need_phone
|
|
end
|
|
|
|
end)
|
|
|
|
hook.Add('octoinv.shop.order-override', 'dbg-phone', function(ply)
|
|
|
|
if not ply:HasPhone() then
|
|
return false, L.need_phone
|
|
end
|
|
|
|
end)
|
|
|
|
local function updateTypeStatus(ply, state, sounds)
|
|
|
|
if not ply:Alive() or ply:IsGhost() or not ply:HasMobilePhone() then return end
|
|
if ply:GetNetVar('sgMuted') then return end
|
|
|
|
if state then
|
|
local weapon = ply:GetActiveWeapon()
|
|
|
|
if IsValid(weapon) and weapon:GetHoldType() ~= 'normal' and not ply:Crouching() and not ply:InVehicle() then
|
|
if weapon:GetHoldType() ~= 'revolver' then return end
|
|
ply.last_wep = {wep = weapon:GetClass(), hold = weapon:GetHoldType()}
|
|
weapon:SetHoldType('normal')
|
|
end
|
|
|
|
ply:SetNetVar('UsingPhone', true)
|
|
else
|
|
ply:SetNetVar('UsingPhone', false)
|
|
if ply:Alive() then
|
|
local weapon = ply:GetActiveWeapon()
|
|
local last_wep = ply.last_wep
|
|
if last_wep then
|
|
local wep, hold = ply.last_wep.wep, ply.last_wep.hold
|
|
|
|
if IsValid(weapon) and wep and hold and weapon:GetClass() == wep then
|
|
weapon:SetHoldType(hold or 'normal')
|
|
end
|
|
end
|
|
end
|
|
ply.last_wep = {}
|
|
end
|
|
end
|
|
|
|
netstream.Hook('dbg-phone.updateTypeStatus', function(ply, state)
|
|
updateTypeStatus(ply, state)
|
|
end)
|
|
|
|
octolib.func.loop(function(done)
|
|
octolib.func.throttle(player.GetAll(), 10, 0.2, function(ply)
|
|
|
|
if not IsValid(ply) then return end
|
|
if not ply:HasMobilePhone() or not ply:GetNetVar('UsingPhone') then return end
|
|
|
|
local weapon = ply:GetActiveWeapon()
|
|
if not IsValid(weapon) then return end
|
|
|
|
if (weapon:GetHoldType() ~= 'normal' or weapon:GetHoldType() ~= 'passive') and not ply:Crouching() and not ply:InVehicle() then
|
|
ply.last_wep = {wep = weapon:GetClass(), hold = weapon:GetHoldType()}
|
|
weapon:SetHoldType('normal')
|
|
end
|
|
|
|
end):Then(done)
|
|
end)
|
|
|
|
netstream.Hook('dbg-phone.typingSMS', function(ply)
|
|
if not IsValid(ply) then return end
|
|
|
|
local phone = ply.inv and ply:FindItem({class = 'phone', on = true, notification = true})
|
|
if phone then
|
|
ply:EmitSound('type.mp3', 50)
|
|
end
|
|
end) |