This commit is contained in:
lifestorm
2024-08-05 18:40:29 +03:00
parent 9f505a0646
commit c6d9b6f580
8044 changed files with 1853472 additions and 21 deletions

View File

@@ -0,0 +1,209 @@
--[[
| 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 IsValid = IsValid
local Vector = Vector
local ix = ix
local PLUGIN = PLUGIN
function PLUGIN:PrePlayerLoadedCharacter(client, character, currentChar)
if (IsValid(currentChar) and currentChar:GetFaction() != FACTION_BIRD) then return end
client:SetMaxHealth(100)
client:SetViewOffset(Vector(0, 0, 64))
client:SetViewOffsetDucked(Vector(0, 0, 32))
client:ResetHull()
client:SetWalkSpeed(ix.config.Get("walkSpeed"))
client:SetRunSpeed(ix.config.Get("runSpeed"))
end
local birdSounds = {
["models/crow.mdl"] = {
"npc/crow/alert2.wav",
"npc/crow/idle1.wav",
"npc/crow/idle3.wav",
"npc/crow/alert3.wav"
},
["models/pigeon.mdl"] = {
"ambient/creatures/pigeon_idle1.wav",
"ambient/creatures/pigeon_idle2.wav",
"ambient/creatures/pigeon_idle3.wav",
"ambient/creatures/pigeon_idle4.wav"
},
["models/seagull.mdl"] = {
"ambient/creatures/seagull_idle1.wav",
"ambient/creatures/seagull_idle2.wav",
"ambient/creatures/seagull_idle3.wav"
}
}
function PLUGIN:KeyPress(client, key)
if (client:Team() == FACTION_BIRD) then
if (key == IN_ATTACK) then
if (client.isBuildingNest and client:OnGround()) then
local stickItem = client:GetCharacter():GetInventory():HasItem("woodstick")
if (stickItem) then
local nest = ents.Create("ix_birdnest")
nest:SetPos(client:GetPos() + Angle(0, client:EyeAngles().y, 0):Forward() * 20 + Angle(0, client:EyeAngles().y, 0):Up() * -0.1)
nest:SetAngles(Angle(0, client:EyeAngles().y + 180, 0):SnapTo("y", 1))
nest:Spawn()
nest:SetProgress(1)
stickItem:Remove()
end
client.isBuildingNest = false
net.Start("toggleBuildingNest")
net.WriteBool(false)
net.Send(client)
else
if (!client.nextBirdSound or client.nextBirdSound < CurTime()) then
client.nextBirdSound = CurTime() + 5
client:EmitSound(birdSounds[client:GetModel()][math.random(1, #birdSounds[client:GetModel()])])
end
end
elseif (key == IN_ATTACK2) then
if (client.isBuildingNest) then
client.isBuildingNest = false
net.Start("toggleBuildingNest")
net.WriteBool(false)
net.Send(client)
else
if (client:OnGround()) then
if (!client.lastPeck or client.lastPeck < CurTime()) then
client.lastPeck = CurTime() + 60
client:Notify("You begin pecking the ground for hints of crumbs or other edible food...")
client:ForceSequence("Eat_A", function()
if (math.random(1, 2) == 1) then
local character = client:GetCharacter()
client:Notify("You found some hints of food on the ground.")
character:SetHunger(math.Clamp(character:GetHunger() - 5, 0, 100))
character:SetThirst(math.Clamp(character:GetThirst() - 5, 0, 100))
else
client:Notify("You did not find anything edible.")
end
end)
else
client:Notify("You can't peck the ground again for another " .. math.ceil(client.lastPeck - CurTime()) .. " seconds!")
end
else
client:Notify("You must be on the ground in order to look for food!")
end
end
elseif (key == IN_JUMP and client:GetNetVar("ixBirdMounting")) then
local target = client:GetNetVar("ixBirdMounting")
self:BirdMountCharacter(client, target, false)
elseif (key == IN_RELOAD) then
local character = client:GetCharacter()
if (character:GetHunger() < 50 and character:GetThirst() < 50) then
character:SetHunger(character:GetHunger() + 25)
character:SetThirst(character:GetThirst() + 25)
util.Decal("BirdPoop", client:GetPos(), client:GetPos() + Vector(0, 0, -2000), client)
client:EmitSound("weapons/bugbait/bugbait_squeeze" .. math.random(1, 3) .. ".wav")
else
client:Notify("You are too hungry or thirsty to defecate.")
end
end
end
end
function PLUGIN:CanPlayerTakeItem(client, entity)
local item = ix.item.instances[entity.ixItemID]
if (client:Team() == FACTION_BIRD) then
if (table.Count(client:GetCharacter():GetInventory():GetItems()) > 0) then
client:Notify("You can only carry one item at a time!")
return false
elseif (item.width > 1 or item.height > 1) then
client:Notify("That item is too heavy for you to carry!")
return false
end
end
end
function PLUGIN:PlayerDeath(client)
if (client:Team() == FACTION_BIRD) then
local character = client:GetCharacter()
if (character:GetData("babyBird")) then -- Auto-PK non-donator birds on death.
character:SetData("banned", true)
character:Kick()
character:Save()
end
else
local bird = client:GetNetVar("ixBirdMounted")
if (bird and IsValid(bird)) then
self:BirdMountCharacter(bird, client, false)
end
end
end
-- Don't let the player farm food.
function PLUGIN:PostDropCharacterInventory(client, items, container, inventory)
if (client:Team() == FACTION_BIRD and client:GetCharacter():GetData("babyBird", 0) < os.time()) then
local character = client:GetCharacter()
inventory:Add("ing_bird_meat")
inventory:HasItem("ing_bird_meat").playerID = client:SteamID64()
inventory:HasItem("ing_bird_meat").characterID = 0 -- This has to be networked, or it gets stuck in your inv if you take it. ...I think I'll leave it. Punishment for those who try to exploit. :troll:
end
end
function PLUGIN:PlayerDisconnected(client)
local bird = client:GetNetVar("ixBirdMounted")
if (bird and IsValid(bird)) then
self:BirdMountCharacter(bird, client, false)
end
end
function PLUGIN:CharacterLoaded(character)
local client = character:GetPlayer()
local bird = client:GetNetVar("ixBirdMounted")
if (bird and IsValid(bird)) then
self:BirdMountCharacter(bird, client, false)
end
if (character:GetFaction() == FACTION_BIRD and character:GetData("babyBird", 0) > os.time() and !character:GetData("firstTimeBirdLoaded")) then
character:SetData("firstTimeBirdLoaded", true)
timer.Simple(3, function()
client:Notify("Please update your description to more accurately describe your character.")
timer.Simple(2, function()
client:Notify("Also, please reach out to a member of staff to update your name.")
end)
end)
end
end
function PLUGIN:OnCharacterKicked(character)
local client = character:GetPlayer()
local bird = client:GetNetVar("ixBirdMounted")
if (bird and IsValid(bird)) then
self:BirdMountCharacter(bird, client, false)
end
end