186 lines
5.8 KiB
Lua
186 lines
5.8 KiB
Lua
octoinv.registerItem('fish_line', {
|
||
name = 'Леска',
|
||
icon = 'octoteam/icons/rope.png',
|
||
mass = 0.017,
|
||
nostack = true,
|
||
volume = 0.02,
|
||
desc = L.descCraft,
|
||
})
|
||
|
||
octoinv.registerItem('fish_tackle', {
|
||
name = 'Рыболовная снасть',
|
||
icon = 'octoteam/icons/fishing_tackle.png',
|
||
mass = 0.21,
|
||
volume = 0.04,
|
||
desc = L.descCraft,
|
||
})
|
||
|
||
octoinv.registerItem('fish_bait', {
|
||
name = 'Приманка',
|
||
icon = 'octoteam/icons/box3.png',
|
||
mass = 0.4,
|
||
volume = 0.5,
|
||
desc = 'Приманка, используется для ловли рыбы',
|
||
nostack = true,
|
||
use = {
|
||
function(ply, item)
|
||
local wep = ply:GetActiveWeapon()
|
||
if not IsValid(wep) or wep:GetClass() ~= 'weapon_octo_fishing_rod' then return false, 'В руках должна быть удочка' end
|
||
if wep.bait then return false, 'На крючке уже есть приманка' end
|
||
return 'Зацепить на удочку', 'octoteam/icons/fishing_tackle.png', function(ply, item)
|
||
local left = (item:GetData('baitsLeft') or 10) - 1
|
||
|
||
wep.bait = item:GetData('bait')
|
||
item:SetData('desc', ('В пачке осталось %s %s'):format(left, octolib.string.formatCount(left, 'штука', 'штуки', 'штук')))
|
||
item:SetData('baitsLeft', left)
|
||
|
||
return left <= 0 and 1 or 0
|
||
end
|
||
end,
|
||
}
|
||
})
|
||
|
||
local function useAddLine(ply, item, tThin)
|
||
local action = ('Прикрепить %s леску'):format(tThin and 'тонкую' or 'крепкую')
|
||
if not item then return end
|
||
if item:GetData('thin') ~= nil then return end
|
||
local cont = item:GetParent()
|
||
if not cont then return end
|
||
local line = cont:FindItem({class = 'fish_line', thin = tThin})
|
||
if not line then return false, action end
|
||
return action, 'octoteam/icons/rope.png', function(ply, item)
|
||
if not line then return end
|
||
ply:DelayedAction('fishlineadd', 'Крепление лески', {
|
||
time = 5,
|
||
check = function() return IsValid(ply) and ply:HasItem(item) and item:GetData('thin') == nil and cont:HasItem(line) end,
|
||
succ = function()
|
||
cont:TakeItem(line)
|
||
item:SetData('thin', tThin)
|
||
item:SetData('usesLeft', 50)
|
||
item:SetData('desc', ('Используется для ловли рыбы.\n\nЛеска %s, новая'):format(tThin and 'тонкая' or 'крепкая'))
|
||
cont:QueueSync()
|
||
end,
|
||
}, {
|
||
time = 1.5,
|
||
inst = true,
|
||
action = function()
|
||
ply:DoAnimation(ACT_GMOD_GESTURE_ITEM_DROP + math.random(0,1))
|
||
local sound = 'weapons/357/357_reload'.. math.random(1, 4) ..'.wav'
|
||
ply:EmitSound(sound, 50)
|
||
end,
|
||
})
|
||
end
|
||
end
|
||
|
||
octoinv.registerItem('fishing_rod', {
|
||
name = 'Удочка',
|
||
icon = 'octoteam/icons/fishing_rod.png',
|
||
mass = 1.13,
|
||
nostack = true,
|
||
volume = 0.37,
|
||
randomWeight = 0.25,
|
||
desc = 'Используется для ловли рыбы',
|
||
model = 'models/fishingmod_custom/fishingrod_beta2.mdl',
|
||
use = {
|
||
function(ply, item)
|
||
if item:GetData('thin') == nil then return end
|
||
return L.take_in_hand, 'octoteam/icons/fishing_rod.png', function(ply, item)
|
||
if item:GetData('thin') == nil then return end
|
||
local wep = ents.Create('weapon_octo_fishing_rod')
|
||
if not wep:IsValid() then return 0 end
|
||
if not wep:IsWeapon() then wep:Remove() return 0 end
|
||
if not hook.Call('PlayerCanPickupWeapon', GAMEMODE, ply, wep) then return 0 end
|
||
wep:Remove()
|
||
|
||
local wep = ply:Give('weapon_octo_fishing_rod')
|
||
wep:SetShouldPlayPickupSound(false)
|
||
wep.itemData = item:Export()
|
||
wep.itemCont = item:GetParent().id
|
||
wep.thin = item:GetData('thin')
|
||
wep.usesLeft = item:GetData('usesLeft') or 0
|
||
|
||
timer.Simple(0, function()
|
||
ply:SelectWeapon('weapon_octo_fishing_rod')
|
||
end)
|
||
|
||
return 1
|
||
end
|
||
end,
|
||
function(ply, item)
|
||
if item:GetData('thin') == nil then return end
|
||
local msg = ('%s леску'):format(item:GetData('usesLeft') == 50 and 'Снять' or 'Выкинуть')
|
||
return msg, 'octoteam/icons/rope.png', function(ply, item)
|
||
local thin = item:GetData('thin') or false
|
||
ply:DelayedAction('fishlineremove', 'Снятие лески', {
|
||
time = 5,
|
||
check = function() return IsValid(ply) and tobool(ply:HasItem(item)) and item:GetData('thin') ~= nil end,
|
||
succ = function()
|
||
if not ply:HasItem(item) then return end
|
||
if item:GetData('thin') == nil then return end
|
||
if item:GetData('usesLeft') == 50 then
|
||
local cnt, line = ply:AddItem('fish_line')
|
||
if line ~= nil then
|
||
line:SetData('name', item:GetData('thin') and 'Тонкая леска' or 'Крепкая леска')
|
||
line:SetData('thin', item:GetData('thin'))
|
||
end
|
||
end
|
||
item:SetData('thin', nil)
|
||
item:SetData('usesLeft', 0)
|
||
item:SetData('desc', 'Используется для ловли рыбы')
|
||
item:GetParent():QueueSync()
|
||
end,
|
||
}, {
|
||
time = 1.5,
|
||
inst = true,
|
||
action = function()
|
||
ply:DoAnimation(ACT_GMOD_GESTURE_ITEM_DROP + math.random(0,1))
|
||
local sound = 'weapons/357/357_reload'.. math.random(1, 4) ..'.wav'
|
||
ply:EmitSound(sound, 50)
|
||
end,
|
||
})
|
||
end
|
||
end,
|
||
function(ply, item)
|
||
return useAddLine(ply, item, true)
|
||
end,
|
||
function(ply, item, cont)
|
||
return useAddLine(ply, item, false)
|
||
end,
|
||
}
|
||
})
|
||
|
||
octoinv.registerItem('ing_fish1', {
|
||
name = 'Окунь',
|
||
icon = 'octoteam/icons/fish_perch.png',
|
||
mass = 2.5,
|
||
volume = 2,
|
||
randomWeight = 0.2,
|
||
desc = L.descing,
|
||
})
|
||
|
||
octoinv.registerItem('ing_fish2', {
|
||
name = 'Карп',
|
||
icon = 'octoteam/icons/fish_carp.png',
|
||
mass = 2.5,
|
||
volume = 2,
|
||
randomWeight = 0.2,
|
||
desc = L.descing,
|
||
})
|
||
|
||
octoinv.registerItem('ing_fish3', {
|
||
name = 'Форель',
|
||
icon = 'octoteam/icons/fish_trout.png',
|
||
mass = 5,
|
||
volume = 3,
|
||
randomWeight = 0.25,
|
||
desc = L.descing,
|
||
})
|
||
|
||
octoinv.registerItem('ing_fish4', {
|
||
name = 'Щука',
|
||
icon = 'octoteam/icons/fish_pike.png',
|
||
mass = 8,
|
||
volume = 5,
|
||
randomWeight = 0.1,
|
||
desc = L.descing,
|
||
})
|