--[[ | 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 ix = ix local math = math local string = string local table = table local PLUGIN = PLUGIN local randomBirdWords = {"cik", "vik", "caavk", "çik", "şik", "vrak", "gaak"} function PLUGIN:InitializedChatClasses() ix.chat.Register("icbird", { format = " \"%s\"", icon = "willardnetworks/chat/message_icon.png", indicator = "chatTalking", GetColor = function(self, speaker, text) -- If you are looking at the speaker, make it greener to easier identify who is talking. if (LocalPlayer():GetEyeTrace().Entity == speaker) then return ix.config.Get("chatListenColor") end -- Otherwise, use the normal text color. return color_white end, OnChatAdd = function(self, speaker, text, anonymous, info) local color = self:GetColor(speaker, text, info) local name = anonymous and L"someone" or hook.Run("GetCharacterName", speaker, "ic") or (IsValid(speaker) and speaker:Name() or "Console") local translated = L2("icWNFormat", text) local bToYou = speaker:GetEyeTraceNoCursor().Entity == LocalPlayer() if (LocalPlayer():Team() != FACTION_BIRD) then text = string.Split(text, " ") for i = 1, #text do text[i] = randomBirdWords[math.random(#randomBirdWords)] end text = table.concat(text, " ") end text = ix.chat.Format(text) if (ix.option.Get("standardIconsEnabled")) then chat.AddText(ix.util.GetMaterial(self.icon), Color(255, 254, 153, 255), name, " diyor ki", bToYou and " (sana)" or "", color, translated or string.format(self.format, text)) else chat.AddText(Color(255, 254, 153, 255), name, " diyor ki", bToYou and " (sana)" or "", color, translated or string.format(self.format, text)) end end, CanHear = ix.config.Get("chatRange", 280) }) ix.chat.Register("wbird", { format = "%s whispers \"%s\"", icon = "willardnetworks/chat/whisper_icon.png", color = Color(158, 162, 191, 255), CanHear = ix.config.Get("chatRange", 280) * 0.25, OnChatAdd = function(self, speaker, text, bAnonymous, data) local color = self.color local name = anonymous and L"someone" or hook.Run("GetCharacterName", speaker, "wbird") or (IsValid(speaker) and speaker:Name() or "Console") local translated = L2("wbird" .." Format", name, text) if (LocalPlayer():Team() != FACTION_BIRD) then text = string.Split(text, " ") for i = 1, #text do text[i] = randomBirdWords[math.random(#randomBirdWords)] end text = table.concat(text, " ") end text = ix.chat.Format(text) if (ix.option.Get("standardIconsEnabled")) then chat.AddText(ix.util.GetMaterial(self.icon), color, translated or string.format(self.format, name, text)) else chat.AddText(color, translated or string.format(self.format, name, text)) end end }) ix.chat.Register("ybird", { format = "%s yells \"%s\"", color = Color(254, 171, 103, 255), icon = "willardnetworks/chat/yell_icon.png", CanHear = ix.config.Get("chatRange", 280) * 2, OnChatAdd = function(self, speaker, text, bAnonymous, data) local color = self.color local name = anonymous and L"someone" or hook.Run("GetCharacterName", speaker, "ybird") or (IsValid(speaker) and speaker:Name() or "Console") local translated = L2("ybird" .. "Format", name, text) if (LocalPlayer():Team() != FACTION_BIRD) then text = string.Split(text, " ") for i = 1, #text do text[i] = randomBirdWords[math.random(#randomBirdWords)] end text = table.concat(text, " ") end text = ix.chat.Format(text) if (ix.option.Get("standardIconsEnabled")) then chat.AddText(ix.util.GetMaterial(self.icon), color, translated or string.format(self.format, name, text)) else chat.AddText(color, translated or string.format(self.format, name, text)) end end }) end function PLUGIN:SetupMove(client, mv, cmd) if (client:Team() == FACTION_BIRD and !client:OnGround() and !client:GetNetVar("noFlying")) then local speed = ix.config.Get("birdFlightSpeed", 50) local angs = mv:GetAngles() if (cmd:KeyDown(IN_JUMP) and client:GetLocalVar("stm", 0) > 0) then angs.p = -30 mv:SetVelocity(angs:Forward() * (100 * ((speed / 100) + 1))) elseif (cmd:KeyDown(IN_DUCK)) then angs.p = 30 mv:SetVelocity(angs:Forward() * (100 * ((speed / 100) + 1))) else angs.p = 10 mv:SetVelocity(angs:Forward() * (150 * ((speed / 100) + 1))) end end end -- Makes the player soar if they're falling down. Taken out for now because CalcMainActivity is awful. --[[ function PLUGIN:CalcMainActivity(client, velocity) if (SERVER and client:Team() == FACTION_BIRD) then if (client:GetNetVar("forcedSequence") and client:GetNetVar("forcedSequence") != 4) then client:LeaveSequence() end if (!client:OnGround()) then if (!client:GetNetVar("forcedSequence")) then client:ForceSequence("soar", nil, nil, true) end end end end --]] local birdPainSounds = {"npc/crow/pain2.wav", "npc/crow/pain1.wav"} local birdDeathSounds = {"npc/crow/die1.wav", "npc/crow/die2.wav"} function PLUGIN:GetPlayerPainSound(client) if (client:Team() == FACTION_BIRD) then return birdPainSounds[math.random(#birdPainSounds)] end end function PLUGIN:GetPlayerDeathSound(client) if (client:Team() == FACTION_BIRD) then return birdDeathSounds[math.random(#birdDeathSounds)] end end function PLUGIN:IsCharacterRecognized(character, id) local client = character:GetPlayer() local other = ix.char.loaded[id]:GetPlayer() if (other and ix.config.Get("birdRecogniseEachother", true) and (client:Team() == FACTION_BIRD and other:Team() == FACTION_BIRD)) then return true end end function PLUGIN:PrePlayerMessageSend(client, chatType, message, anonymous) if (client:Team() == FACTION_BIRD) then if (chatType == "ic" or chatType == "w" or chatType == "y") and ix.config.Get("birdChat", true) then ix.chat.Send(client, chatType .. "bird", message) ix.log.Add(client, "chat", string.upper(chatType), message) return false elseif ((chatType == "me" or chatType == "it") and !ix.config.Get("birdActions", true)) then client:Notify("Kuş olarak bu komutu kullanamazsın!") return false elseif (chatType == "ooc" and !ix.config.Get("birdOOC", true)) then client:Notify("Kuş olarak bu komutu kullanamazsın!") return false end end end function PLUGIN:CanTransferItem(item, oldInv, newInv) local client = item.player or item.GetOwner and item:GetOwner() or item.playerID and player.GetBySteamID64(item.playerID) or nil -- what the fuck? Why is this so inconsistent? if (client and client:Team() == FACTION_BIRD and oldInv != newInv and client:GetCharacter():GetInventory().id == newInv.id) then if (table.Count(client:GetCharacter():GetInventory():GetItems()) > 0) then client:Notify("Tek seferde tek bir eşya taşıyabilirsin!") return false elseif (item.width > 1 or item.height > 1) then client:Notify("Bu eşya taşıyabilmen için çok ağır!") return false end end end function PLUGIN:CanPlayerUseCharacter(client, character) if (character:GetFaction() == FACTION_BIRD) then local ratio = ix.config.Get("birdRatio", 10) local playerCount = player.GetCount() local birdCount = #team.GetPlayers(FACTION_BIRD) if (birdCount >= math.floor(playerCount / ratio)) then return false, "Kuş karakterine geçmek için yeterli oyuncu yok!" end if (character:GetData("babyBird") and !character:GetData("banned")) then return true -- Bad, I know, but, eh. end end end function PLUGIN:InitializedPlugins() if (ix.plugin.list.inventoryslosts and FACTION_BIRD) then ix.plugin.list.inventoryslots.noEquipFactions[FACTION_BIRD] = true end if (SERVER and ix.saveEnts) then ix.saveEnts:RegisterEntity("ix_birdnest", true, true, true, { OnSave = function(entity, data) data.progress = entity:GetNetVar("progress", 0) end, OnRestore = function(entity, data) entity:SetNetVar("progress", data.progress) end }) end end