187 lines
5.8 KiB
Lua
187 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,
|
|||
|
})
|