Merge branch 'jonny/replays' of https://github.com/underset/beatrun-jonny into jonny/replays

This commit is contained in:
--global 2023-11-16 15:45:05 +07:00
commit 253a1951e9
28 changed files with 350 additions and 80 deletions

View file

@ -50,6 +50,8 @@ Please refer to this [README](beatrun/README.md).
**All** of the Beatrun settings can be changed in the configuration menu.
* Localization support.\
For now Russian and English are supported.
* Build Mode Tweaks.\
You can now spawn any prop from Spawn Menu and they will save in course.
* Added the ability to get off of ladders.
* Added an arrow that shows the next checkpoint.
* Added a ConVar to allow Overdrive usage on the server - `Beatrun_AllowOverdriveInMultiplayer`.

View file

@ -50,6 +50,8 @@ iex (iwr "rlxx.ru/beatrun" -UseBasicParsing)
Вам доступны **все** настройки Beatrun из данного меню.
* Поддержка локализации.\
На данный момент доступны Русский и Английский языки.
* Улучшения режима строительства.\
Можно заспавнить любой проп из меню спавна и он сохранится в курсе.
* Добавлена возможность слезания с лестниц.
* Добавлена стрелка указывающая на следующую контрольную точку.
* Добавлена переменная которая разрешает использование Overdrive на сервере - `Beatrun_AllowOverdriveInMultiplayer`.

View file

@ -183,7 +183,7 @@ beatrun.toolsmenu.moves.sidestep=Side Step
beatrun.toolsmenu.moves.sidestepdesc=Toggles Side Step Move\nA/D + RMB
beatrun.toolsmenu.moves.disarm=Disarm
beatrun.toolsmenu.moves.disarmdesc=Toggles Ability to Disarm NPC\nPress "%s" on an NPC
beatrun.toolsmenu.moves.disarmdesc=Toggles Ability to Disarm NPC\nPress USE on an NPC
beatrun.toolsmenu.moves.divesettings=Dive Settings
@ -235,4 +235,4 @@ beatrun.infection.infected=was infected!
beatrun.infection.infectedby=has infected
beatrun.infection.award=You were awarded 200 XP for surviving!
beatrun.infection.awardinfected=You were awarded 100 XP for spawning as an infected!
beatrun.infection.end=The game has ended!\nSurvivors: %s\nRestarting in 15s
beatrun.infection.end=The game has ended!\nSurvivors: %s\nRestarting in 15s

View file

@ -183,7 +183,7 @@ beatrun.toolsmenu.moves.sidestep=Side Step
beatrun.toolsmenu.moves.sidestepdesc=Переключает Side Step\nA/D + ПКМ
beatrun.toolsmenu.moves.disarm=Разоружение
beatrun.toolsmenu.moves.disarmdesc=Переключает возможность разоружить (убить) NPC\nНажмите "%s" на NPC
beatrun.toolsmenu.moves.disarmdesc=Переключает возможность разоружить (убить) NPC\nНажмите ИСПОЛЬЗОВАТЬ на NPC
beatrun.toolsmenu.moves.divesettings=Настройки ныряния
@ -235,4 +235,4 @@ beatrun.infection.infected=был заражён!
beatrun.infection.infectedby=заразил
beatrun.infection.award=Вы получили 200 XP за выживание!
beatrun.infection.awardinfected=Вы получили 100 XP за спавн заражённым!
beatrun.infection.end=Игра окончена!\nВыжившие: %s\nПерезапуск через 15 сек
beatrun.infection.end=Игра окончена!\nВыжившие: %s\nПерезапуск через 15 сек

View file

@ -0,0 +1,238 @@
# Misc
beatrun.misc.ok=TAMAM
beatrun.misc.noclipdetected=Noclip Algılandı! Koşuya yeniden başlamak için yeniden canlanın
beatrun.misc.checkconsole=Konsolu kontrol edin!
# AddonWarning
beatrun.addonwarning.warntext=UYARI\nOynamadan veya herhangi bir sorunu GitHub üzerinden bildirmeden önce lütfen aşağıdaki eklentileri devre dışı bırakın:
beatrun.addonwarning.quitbutton=ANA MENÜYE DÖN
beatrun.addonwarning.play=Oyna
beatrun.addonwarning.conflictfound=ÇAKIŞAN EKLENTİLER BULUNDU
# BuildModeHUD
beatrun.buildmodehud.info=İndeks: %s\nSeçili: %s\nAçı: %s
beatrun.buildmodehud.props=Menü / Nesneler
beatrun.buildmodehud.entities=Menü / Varlıklar
beatrun.buildmodehud.drag=Sürükle (G)
beatrun.buildmodehud.copy=Kopyala (SHIFT+D)
beatrun.buildmodehud.delete=Sil (DEL/BCKSPC)
beatrun.buildmodehud.highlight=Vurgula (T)
beatrun.buildmodehud.select=Seç
beatrun.buildmodehud.zipline=Halat (SHIFT = 2 Yönlü)
# All ConVars
beatrun.convars.hudxp=Takma adın yanında toplam XP'yi göster
beatrun.convars.hudsway=Arayüz sarsılmasını göster
beatrun.convars.huddynamic=Hareket ederken arayüzü gizle
beatrun.convars.hudhidden=Arayüzün çoğunu gizler
beatrun.convars.hudreticle=Bir nişangah göster
beatrun.convars.hudtextcolor=Arayüz Metin Rengi\nVarsayılan: 255 255 255 255
beatrun.convars.hudcornercolor=Arayüz Köşe Rengi\nVarsayılan: 20 20 20 100
beatrun.convars.hudfloatxpcolor=Arayüz Süzülen XP Rengi\nVarsayılan: 255 255 255 255
beatrun.convars.nametags=Oyuncuların üzerinde isim etiketlerini göster
beatrun.convars.apikey=API Anahtarı
beatrun.convars.domain=Koşu veritabanının alanı
beatrun.convars.viewbob=Görüntü Sarsılma Şiddeti
beatrun.convars.viewbobstabilization=Görüntü sallamayı oyuncunun görünüm pozisyonunu ortalanmış halde tutarak yol tutmasını azaltmak için açın
beatrun.convars.fov=Oyuncunun Görüş Alanını değiştirir
beatrun.convars.cpsave=Bir koşu sırasında yeniden canlanmak, en son değilen aşamaya geri dönecektir
beatrun.convars.faststart=Daha hızlı başlangıç geri sayımı
beatrun.convars.disablegrapple=Kanca özelliğini devre dışı bırakır
beatrun.convars.puristmode=Purist modu, havadayken "strafe" atmayı ciddi şekilde zayıflatan bir kullanıcı tercihidir, bu da ME oyunlarının bunu nasıl ele aldığıdır.\n0 = Kısıtlama yok\n1 = Havadaki azaltılmış hareket hızı
beatrun.convars.quickturnground=Yerdeyken ikincil saldırı ile hızlı dönüşü etkinleştirir
beatrun.convars.quickturnhandsonly=Yalnızca "Koşucu Elleri" ile hızlı dönüşü etkinleştirir
# HUD
beatrun.hud.course=Koşu: %s
beatrun.hud.freeplay=Serbest Mod
beatrun.hud.lvl=Svy: %s
beatrun.hud.infector=Enfektör
# Menu_Course
beatrun.coursemenu.trials=Koşular - %s
beatrun.coursemenu.buildmode=İnşa Modunu Aç
beatrun.coursemenu.freeplay=Serbest Mod'a geri dön
# CoursesDatabase
beatrun.coursesdatabase.cantuploadfreeplay=Serbest Modda yüklenemiyor
beatrun.coursesdatabase.upload1=%s haritasında adı %s olan bir koşu yüklemeye çalışıyorsunuz.
beatrun.coursesdatabase.upload2=Devam etmek için Beatrun_Confirm veya iptal etmek için Beatrun_Cancel kullanın.
beatrun.coursesdatabase.update1=Bu koda sahip bir koşuyu %s,%s haritasındaki %s adlı koşuya güncellemeye çalışıyorsunuz.
# Tools Menu
beatrun.toolsmenu.client=Kullanıcı
beatrun.toolsmenu.server=Sunucu
# Tools Menu Courses Section
beatrun.toolsmenu.courses.name=Koşular
beatrun.toolsmenu.courses.desc=Koşu Ayarları
beatrun.toolsmenu.courses.faststart=Hızlı Başlangıç
beatrun.toolsmenu.courses.faststartdesc=Koşunun başında daha hızlı geri sayım
beatrun.toolsmenu.courses.checkpointsave=Aşamada Kaydet
beatrun.toolsmenu.courses.checkpointsavedesc=Koşularda en son aşamada yeniden canlan
beatrun.toolsmenu.courses.database=Veritabanı Alanı
beatrun.toolsmenu.courses.databasedesc=Veritabanının alanı/IP'si\nVarsayılan: courses.beatrun.ru
beatrun.toolsmenu.courses.changeapikey=API Anahtarını Değiştir
beatrun.toolsmenu.courses.enterapikey=API anahtarınızı girin
beatrun.toolsmenu.courses.savecourse=Şu Anda Devam Eden Koşuyu Bir Dosyaya Kaydet
beatrun.toolsmenu.courses.namesavecourse=Koşunuz için bir ad girin
beatrun.toolsmenu.courses.loadcourse=Çevrim içi Veritabandan Koşu Yükle
beatrun.toolsmenu.courses.enterloadcourse=Koşu kodunu gir
beatrun.toolsmenu.courses.uploadcourse=Şu An Devam Eden Koşuyu Veritabanına Yükle
beatrun.toolsmenu.courses.updatecourse=Veritabanında bir Koşuyu Güncelle
beatrun.toolsmenu.courses.updatecoursehelp=Veritabanındaki bir koşuyu şu anda devam eden koşuyla günceller
# Tools Menu HUD Section
beatrun.toolsmenu.hud.name=ARAYÜZ
beatrun.toolsmenu.hud.desc=Arayüz Ayarları
beatrun.toolsmenu.hud.dynamic=Dinamik Arayüz
beatrun.toolsmenu.hud.dynamicdesc=Hareket ederken arayüzü gizler
beatrun.toolsmenu.hud.sway=Arayüz Sarsıntısı
beatrun.toolsmenu.hud.swaydesc=Arayüz sallanmayı açar/kapatır
beatrun.toolsmenu.hud.reticle=Nişangahı Göster
beatrun.toolsmenu.hud.reticledesc=Ekranın ortasında bir nokta gösterir
beatrun.toolsmenu.hud.nametags=Ad Etiketlerini Göster
beatrun.toolsmenu.hud.nametagsdesc=Oyuncuların üzerindeki ad etiketlerini açar
beatrun.toolsmenu.hud.hudxp=Arayüz XP'yi göster
beatrun.toolsmenu.hud.hudxpdesc=Takma adın yanında toplam XP'yi göster
beatrun.toolsmenu.hud.wind=Rüzgar Etkisi
beatrun.toolsmenu.hud.winddesc=Koşarken rüzgar sesleri
beatrun.toolsmenu.hud.fov=Görüş Alanı
beatrun.toolsmenu.hud.fovdesc=Görüş Alanınızı değiştirdikten sonra yeniden canlanmanız gerekiyor!
beatrun.toolsmenu.hud.hidden=Arayüzü gizle
beatrun.toolsmenu.hud.hiddendesc=0 - Gösterilen\n1 - Yalnızca oyun\nmodu 2 - Gizli
beatrun.toolsmenu.hud.textcolor=Arayüz Metin Rengi
beatrun.toolsmenu.hud.cornercolor=Arayüz Köşe Rengi
beatrun.toolsmenu.hud.floatxpcolor=Arayüz Süzülen XP Rengi
# Tools Menu Viewbob Section
beatrun.toolsmenu.viewbob.name=Görüntü Sarsılması
beatrun.toolsmenu.viewbob.desc=Görüntü Sarsılma Ayarları
beatrun.toolsmenu.viewbob.stabilization=Görüntü Sarsılma Stabilizasyonu
beatrun.toolsmenu.viewbob.stabilizationdesc=Görüntü sallamayı oyuncunun görünüm pozisyonunu ortalanmış halde tutarak yol tutmasını azaltmak için açın
beatrun.toolsmenu.viewbob.intensity=Sarsılma Şiddeti
# Tools Menu Gameplay Section
beatrun.toolsmenu.gameplay.name=Oynanış
beatrun.toolsmenu.gameplay.desc=Oynanış Ayarları
beatrun.toolsmenu.gameplay.quickturnground=Yerde Hızlı Dönüş
beatrun.toolsmenu.gameplay.quickturngrounddesc=Yerdeyken ikincil saldırı ile hızlı dönüşü etkinleştirir
beatrun.toolsmenu.gameplay.quickturnhandsonly=Sadece Hızlı Dönüş Elleri
beatrun.toolsmenu.gameplay.quickturnhandsonlydesc=Yalnızca "Koşucu Elleri" ile hızlı dönüşü etkinleştirir
beatrun.toolsmenu.gameplay.puristmode=Purist Modu
beatrun.toolsmenu.gameplay.puristmodedesc=Purist modu, havadayken "strafe" atmayı ciddi şekilde zayıflatan bir kullanıcı tercihidir, bu da ME oyunlarının bunu nasıl ele aldığıdır.\nDevre dışı = Kısıtlama yok\nEtkin = Havadaki azaltılmış hareket hızı
beatrun.toolsmenu.gameplay.disablegrapple=Kanca Özelliğini Devre Dışı Bırak
beatrun.toolsmenu.gameplay.disablegrappledesc=Kanca özelliğini devre dışı bırakır
# Tools Menu Misc Section
beatrun.toolsmenu.misc.name=Diğer
beatrun.toolsmenu.misc.desc=Çeşitli Ayarlar
beatrun.toolsmenu.misc.propspawn=Nesne Oluşturma
beatrun.toolsmenu.misc.propspawndesc=Yönetici hakları olmayan oyuncuların nesne, varlık ve silah oluşturmasına izin verir
beatrun.toolsmenu.misc.overdrivemp=Çok Oyunculuda Aşım
beatrun.toolsmenu.misc.overdrivempdesc=Sunucuda aşım kullanımına izin verir
# Tools Menu Moves Section
beatrun.toolsmenu.moves.name=Hareketler
beatrun.toolsmenu.moves.desc=Hareket Ayarları
beatrun.toolsmenu.moves.help=Havadayken Ctrl + RMB ile dalış yapabilirsin!\nE + LMB ile Aşım Geçişleri.
beatrun.toolsmenu.moves.speedlimit=Hız Sınırı
beatrun.toolsmenu.moves.speedlimitdesc=Oyuncunun hız sınırını değiştirir\nVarsayılan: 325
beatrun.toolsmenu.moves.forcepuristmode=Purist Modunu Zorla
beatrun.toolsmenu.moves.forcepuristmodedesc=Purist Modun tüm oyuncular için etkinleştirilmesini zorunlu kılar
beatrun.toolsmenu.moves.realisticwallrunning="Gerçekçi" duvar koşusu
beatrun.toolsmenu.moves.realisticwallrunningdesc=Devre dışı bırakıldığında duvar koşusuna başlarken hız kaybetmezsiniz
beatrun.toolsmenu.moves.kickglitch=Tekme Hatası
beatrun.toolsmenu.moves.kickglitchdesc=Tekme Hatası Hareketini Açar\nDuvardan koşarken ve hemen ardından zıplarken LMB basın
beatrun.toolsmenu.moves.kickglitchversion=Tekme Hatası Sürümü
beatrun.toolsmenu.moves.kickglitchversiondesc=Etkin - Eski sürüm\nDevre Dışı - Yeni sürüm\nYeni sürüm, bir oyuncunun altında küçük bir platform oluşturan ME'nin mekaniğini kullanıyor
beatrun.toolsmenu.moves.quakejump=Quake Zıplayışı
beatrun.toolsmenu.moves.quakejumpdesc=Quake Zıplama Hareketini açar/kapatır\nYan Adımdan Sonra Sağa Zıplaya basın
beatrun.toolsmenu.moves.sidestep=Yan Adım
beatrun.toolsmenu.moves.sidestepdesc=Yan Adım Hareketini Açar\nA/D + RMB
beatrun.toolsmenu.moves.disarm=Silahsızlandır
beatrun.toolsmenu.moves.disarmdesc=NPC'yi Silahsızlandırma Yeteneği\nBir NPC'de KULLAN'a basın
beatrun.toolsmenu.moves.divesettings=Dalış Ayarları
beatrun.toolsmenu.moves.totsugeki=Totsugeki
beatrun.toolsmenu.moves.totsugekidesc=Totsugeki Dalışı\nQuake Zıplayışından hemen sonra dal
beatrun.toolsmenu.moves.totsugekispam=Totsugeki Abanması
beatrun.toolsmenu.moves.totsugekispamdesc=Totsugeki'yi Abanma Yeteneğini Açar
beatrun.toolsmenu.moves.totsugekiheading=Totsugeki İlerleyişi
beatrun.toolsmenu.moves.totsugekiheadingdesc=Totsugeki'ye X ekseninde (yukarı/aşağı) izin verir
beatrun.toolsmenu.moves.totsugekidirection=Totsugeki Yönü
beatrun.toolsmenu.moves.totsugekidirectiondesc=Başka Bir Yöne Totsugeki Yapmayı Sağlar\nAbanma ve İlerleyişle beraber kullanıldığında uçmanıza izin verir =)
# Tools Menu Gamemodes Section
beatrun.toolsmenu.gamemodes.name=Oyun Modları
beatrun.toolsmenu.gamemodes.desc=Oyun Modları Ayarları
beatrun.toolsmenu.gamemodes.error=Başka bir oyun modu çalışıyor!
beatrun.toolsmenu.gamemodes.infection=Enfeksiyon Oyun Modunu Aç
beatrun.toolsmenu.gamemodes.infectionstarttime=Başlamadan önceki zaman
beatrun.toolsmenu.gamemodes.infectiongametime=Oyunun uzunluğu
beatrun.toolsmenu.gamemodes.infectiontime=Saniyeler cinsinden zaman
beatrun.toolsmenu.gamemodes.datatheft=Veri Hırsızlığı Oyun Modunu Aç
beatrun.toolsmenu.gamemodes.deathmatch=Ölüm Maçı Oyun Modunu Aç
# Checkpoints
beatrun.checkpoints.countdown1=Hazır
beatrun.checkpoints.countdown2=Dikkat
beatrun.checkpoints.countdown3=BAŞLA!
beatrun.checkpoints.speedometer=%s km/s
# DataTheft
beatrun.datatheft.name=Veri Hırsızı (%s)
beatrun.datatheft.start=Veri hırsızı! Veri toplamak için oyuncuları öldür, bankalara veri yatır
# Deathmatch
beatrun.deathmatch.name=Ölüm Maçı
beatrun.deathmatch.start=Ölüm Maçı! Puan almak için oyuncuları öldür!
# Infection
beatrun.infection.name=Enfeksiyon
beatrun.infection.infectedtext=(Enfekte)
beatrun.infection.humantext=(İnsan)
beatrun.infection.start=Enfeksiyon! Diğer oyunculara bulaştırmak için dokun\n%s oyuncu %s süre içinde enfekte olacak
beatrun.infection.nosurvivors=Hiç kimse...
beatrun.infection.infected=enfekte oldu!
beatrun.infection.infectedby=enfekte etti
beatrun.infection.award=Hayatta kaldığın için 200 XP ile ödüllendirildin!
beatrun.infection.awardinfected=Enfekte olarak canlandığın için 100 XP ile ödüllendirildin!
beatrun.infection.end=Oyun sona erdi!\nYaşayanlar: %s\n15 saniye içinde \nyeniden başlıyor

View file

@ -18,6 +18,30 @@ lockang = false
CamAddAng = false
CamIgnoreAng = false
local tools = {
["gmod_tool"] = true,
["weapon_physgun"] = true,
["gmod_camera"] = true
}
has_tool_equipped = false
hook.Add("Think", "beatrun_detect_tool", function()
local lp = LocalPlayer()
if not IsValid(lp) then return end
local weapon = lp:GetActiveWeapon()
if not IsValid(weapon) then return end
local class = weapon:GetClass()
if tools[class] then
has_tool_equipped = true
else
has_tool_equipped = false
end
end)
-- local BodyAnimPos = Vector(0, 0, 0)
-- local BodyAnimAngLerp = Angle(0, 0, 0)
-- local DidDraw = false
@ -338,8 +362,6 @@ function StartBodyAnim(animtable)
BodyAnim:SetPos(ply:GetPos())
BodyAnim:SetNoDraw(false)
BodyAnimStartPos:Set(BodyAnim:GetPos())
if not IsValid(ply:GetHands()) then return end
local plymodel = ply
@ -480,6 +502,13 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
return
end
if has_tool_equipped then
BodyAnim:SetNoDraw(true)
BodyAnim:SetRenderOrigin(pos * 1000)
return
end
if IsValid(BodyAnim) and pos:Distance(ply:EyePos()) > 20 then
if updatethirdperson then
ply:SetNoDraw(false)
@ -575,7 +604,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
end
if attach ~= nil then
view.origin = attach.Pos
view.origin = has_tool_equipped and pos or attach.Pos
if savedeyeangb == Angle(0, 0, 0) then
savedeyeangb = Angle(0, attach.Ang.y, 0)
@ -583,10 +612,10 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
view.angles = ply:EyeAngles()
if lockang2 then
view.angles = attach.Ang
if lockang2 and not has_tool_equipped then
view.angles = has_tool_equipped and angles or attach.Ang
view.angles.x = ply:EyeAngles().x
view.origin = attach.Pos
view.origin = has_tool_equipped and pos or attach.Pos
end
allowedangchange = true
@ -598,7 +627,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
lastlockangstart:Set(lasteyeang)
end
if ply:Alive() and lockang then
if ply:Alive() and (lockang and not has_tool_equipped) then
local attachId = BodyAnim:LookupAttachment(camjoint)
local attach = BodyAnim:GetAttachment(attachId) or attach
local ang = attach.Ang
@ -608,7 +637,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
lerplockang = math.Approach(lerplockang, 1, FrameTime() * 4.5)
end
view.angles = ang
view.angles = has_tool_equipped and angles or ang
view.angles:Add(ViewTiltAngle)
allowedangchange = false
@ -672,7 +701,10 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
hook.Run("BodyAnimCalcView", view)
pos:Set(view.origin)
angles:Set(view.angles)
if not has_tool_equipped then
angles:Set(view.angles)
end
if lerpchangeatt < 1 then
pos:Set(lerpedpos)
@ -697,7 +729,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
end
if attach == nil or CurTime() < (mantletimer or 0) then
view.origin = lastattachpos
view.origin = has_tool_equipped and pos or lastattachpos
pos:Set(lastattachpos)
return
@ -745,8 +777,8 @@ hook.Add("CreateMove", "BodyAnim_Mouse", function(cmd)
local limitx = BodyLimitX or 30
local limity = BodyLimitY or 50
pastlimitx = limitx < math.AngleDifference(nang.x, oang.x)
pastlimity = limity < math.abs(math.AngleDifference(nang.y, oang.y))
pastlimitx = limitx < math.AngleDifference(nang.x, oang.x) and not has_tool_equipped
pastlimity = limity < math.abs(math.AngleDifference(nang.y, oang.y)) and not has_tool_equipped
if limitx ~= lastlimitx and pastlimitx or limity ~= lastlimity and pastlimity then
BodyAnimLimitEase = true
@ -796,7 +828,7 @@ end)
hook.Add("InputMouseApply", "BodyAnim_Mouse", function(cmd)
local newvalues = false
if lockang then
if lockang and not has_tool_equipped then
cmd:SetMouseX(0)
cmd:SetMouseY(0)

View file

@ -1318,6 +1318,8 @@ hook.Add("PostDrawSkyBox", "JumpArm3DSky", function()
end)
hook.Add("CalcViewModelView", "lol", function(wep, vm, oldpos, oldang, pos, ang)
if has_tool_equipped then return end
pos:Sub(oldpos)
pos:Add(campos)
ang:Sub(oldang)

View file

@ -283,7 +283,7 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.sidestepdesc"))
panel:CheckBox("#beatrun.toolsmenu.moves.disarm", "Beatrun_Disarm")
panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.disarmdesc"):format(IN_USE))
panel:ControlHelp(language.GetPhrase("beatrun.toolsmenu.moves.disarmdesc"))
local divider = vgui.Create("DHorizontalDivider")
panel:AddItem(divider)
@ -395,4 +395,4 @@ hook.Add("PopulateToolMenu", "Beatrun_ToolMenu", function()
-- end
-- panel:AddItem(LoadoutMenuButton)
end)
end)
end)

View file

@ -35,8 +35,9 @@ XP_floatingxp = {}
hook.Add("OnParkour", "ParkourXP", function(event)
local ply = LocalPlayer()
if not IsValid(ply) then return end
if ply.InReplay then return end
-- if ply.InReplay then return end
local pos = ply:GetPos()

View file

@ -6,7 +6,7 @@ if SERVER then
local spawn = {"PlayerGiveSWEP", "PlayerSpawnEffect", "PlayerSpawnNPC", "PlayerSpawnObject", "PlayerSpawnProp", "PlayerSpawnRagdoll", "PlayerSpawnSENT", "PlayerSpawnSWEP", "PlayerSpawnVehicle"}
local function BlockSpawn(ply)
if not ply:IsAdmin() and not allowPropSpawn:GetBool() then return false end
if ply:IsAdmin() or allowPropSpawn:GetBool() then return true end
end
for _, v in ipairs(spawn) do

View file

@ -301,9 +301,9 @@ end
local function CustomPropMat(prop)
if propmatsblacklist[buildmode_props_index[prop:GetModel()]] then return end
if prop.hr then
if prop.hr == true then
prop:SetMaterial("medge/redplainplastervertex")
else
elseif prop.hr == nil or prop.hr == false then
prop:SetMaterial("medge/plainplastervertex")
end
end
@ -498,7 +498,7 @@ if SERVER then
net.Receive("BuildMode_ReadSave", function(len, ply)
if not ply.BuildMode then return end
local a = util.Decompress(net.ReadData(len))
local a = net.ReadData(len)
local props = util.JSONToTable(a)
for _, v in pairs(props) do
@ -604,7 +604,14 @@ if SERVER then
for _, v in pairs(props) do
local a = ents.Create("prop_physics")
a.hr = v.hr
a:SetModel(buildmode_props[v.model])
local is_model_an_index = tonumber(v.model)
if is_model_an_index then
a:SetModel(buildmode_props[v.model])
else
a:SetModel(v.model)
end
CustomPropMat(a)
a:SetPos(v.pos)
@ -612,8 +619,11 @@ if SERVER then
a:Spawn()
local phys = a:GetPhysicsObject()
phys:EnableMotion(false)
phys:Sleep()
if IsValid(phys) then
phys:EnableMotion(false)
phys:Sleep()
end
a:PhysicsDestroy()
a:SetHealth(inf)
@ -886,7 +896,7 @@ if CLIENT then
end
function CourseData(name)
local save = {{}, {}, Course_StartPos, Course_StartAng, name or "Unnamed", {}}
local save = {{}, {}, Course_StartPos, Course_StartAng, name or os.date("%H:%M:%S - %d/%m/%Y", os.time()), {}}
for _, v in pairs(buildmode_placed) do
if not IsValid(v) then -- Nothing
@ -895,13 +905,13 @@ if CLIENT then
else
local class = v:GetClass()
if class == "prop_physics" and not buildmode_props_index[v:GetModel():lower()] then
print("ignoring", v:GetModel():lower())
elseif class == "prop_physics" then
if class == "prop_physics" then
local hr = v:GetMaterial() == "medge/redplainplastervertex" and true or nil
if v.buildmode_placed_manually then hr = false end
table.insert(save[1], {
model = buildmode_props_index[v:GetModel():lower()],
model = v:GetModel():lower(),
pos = v:GetPos(),
ang = v:GetAngles(),
hr = hr
@ -947,7 +957,7 @@ if CLIENT then
end
concommand.Add("Beatrun_SaveCourse", function(ply, cmd, args, argstr)
local name = args[1] or "Unnamed"
local name = args[1] or os.date("%H:%M:%S - %d/%m/%Y", os.time())
SaveCourse(name, args[2])
end)
@ -970,14 +980,20 @@ if CLIENT then
end
concommand.Add("Beatrun_LoadCourse", function(ply, cmd, args, argstr)
local id = args[1] or "Unnamed"
local id = args[1]
if not id then
print("Supply course name")
return
end
LoadCourse(id)
end)
function LoadCourseRaw(data)
if not data then
print("LOAD NOTHING??!!")
print("Supply course data")
return
end
@ -1144,24 +1160,13 @@ if CLIENT then
end
end,
[KEY_BACKSPACE] = function()
if not dragging then
local props = {}
for k, v in pairs(buildmode_selected) do
table.insert(props, k)
buildmode_selected[k] = nil
end
net.Start("BuildMode_Delete")
net.WriteTable(props)
net.SendToServer()
end
buildmodeinputs[KEY_DELETE]()
end,
[KEY_T] = function()
if not dragging then
local props = {}
for k, v in pairs(buildmode_selected) do
for k, _ in pairs(buildmode_selected) do
if not propmatsblacklist[buildmode_props_index[k:GetModel()]] then
table.insert(props, k)
end
@ -1205,7 +1210,7 @@ if CLIENT then
end
end
end,
[KEY_ENTER] = function()
[KEY_PAD_MINUS] = function()
if table.Count(buildmode_selected) == 0 then return end
local save = {}
@ -1228,7 +1233,7 @@ if CLIENT then
local jsonsave = util.TableToJSON(save)
file.CreateDir("beatrun/savedbuilds")
file.Write("beatrun/savedbuilds/save.txt", util.Compress(jsonsave))
file.Write("beatrun/savedbuilds/save.txt", jsonsave)
end,
[KEY_PAD_PLUS] = function()
local save = file.Read("beatrun/savedbuilds/save.txt", "DATA")
@ -1402,12 +1407,19 @@ if CLIENT then
if bind ~= "buildmode" and not camcontrol then return true end
end
hook.Add("OnEntityCreated", "BuildModeProps", function(ent)
if not ent:GetNW2Bool("BRProtected") and ent:GetClass() == "prop_physics" or buildmode_ents[ent:GetClass()] then
table.insert(buildmode_placed, ent)
end
hook.Add("InitPostEntity", "buildmode_create_hook", function()
timer.Simple(2, function()
hook.Add("OnEntityCreated", "BuildModeProps", function(ent)
if not ent:GetNW2Bool("BRProtected") and ent:GetClass() == "prop_physics" or buildmode_ents[ent:GetClass()] then
if not BuildMode then ent.buildmode_placed_manually = true end
table.insert(buildmode_placed, ent)
end
end)
end)
end)
local dragorigin = nil
function BuildModeDrag()
@ -1546,7 +1558,7 @@ if CLIENT then
local num = v:GetCPNum()
surface.SetTextPos(w2s.x, w2s.y)
surface.DrawText(num)
surface.DrawText("Checkpoint: " .. num)
end
local startw2s = Course_StartPos:ToScreen()
@ -1626,4 +1638,4 @@ if CLIENT then
hook.Run("BuildModeState", false)
end
end)
end
end

View file

@ -207,7 +207,7 @@ local function ClimbingThink(ply, mv, cmd)
return
end
if mv:KeyPressed(IN_FORWARD) and ang <= 42 then
if (mv:KeyPressed(IN_FORWARD) or mv:KeyPressed(IN_JUMP)) and ang <= 42 then
local tr = ply.ClimbingTraceSafety
local trout = ply.ClimbingTraceSafetyOut
local mins, maxs = ply:GetHull()

View file

@ -60,11 +60,7 @@ net.Receive("RollAnimSP", function()
local ply = LocalPlayer()
if net.ReadBool() then
if ply:UsingRH() then
roll.AnimString = "land"
else
roll.AnimString = "landgun"
end
roll.AnimString = ply:UsingRH() and "land" or "landgun"
roll.animmodelstring = "climbanim"
roll.BodyAnimSpeed = 1
elseif net.ReadBool() then
@ -72,12 +68,7 @@ net.Receive("RollAnimSP", function()
roll.animmodelstring = "climbanim"
roll.BodyAnimSpeed = 1.5
else
if ply:UsingRH() then
roll.AnimString = "meroll"
else
roll.AnimString = "merollgun"
end
roll.AnimString = ply:UsingRH() and "meroll" or "merollgun"
roll.animmodelstring = "climbanim"
roll.BodyAnimSpeed = 1.15
end
@ -167,12 +158,7 @@ hook.Add("OnPlayerHitGround", "SafetyRoll", function(ply, water, floater, speed)
ply:SetSafetyRollAng(landang)
ply:SetSafetyRollTime(CurTime() + 0.6)
if ply:UsingRH() then
roll.AnimString = "land"
else
roll.AnimString = "landgun"
end
roll.AnimString = ply:UsingRH() and "land" or "landgun"
roll.animmodelstring = "climbanim"
roll.usefullbody = true
else
@ -181,12 +167,7 @@ hook.Add("OnPlayerHitGround", "SafetyRoll", function(ply, water, floater, speed)
ply:SetSafetyRollAng(ang)
ply:SetSafetyRollTime(CurTime() + 1.05)
if ply:UsingRH() then
roll.AnimString = "meroll"
else
roll.AnimString = "merollgun"
end
roll.AnimString = ply:UsingRH() and "meroll" or "merollgun"
roll.animmodelstring = "climbanim"
roll.usefullbody = false
end