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. **All** of the Beatrun settings can be changed in the configuration menu.
* Localization support.\ * Localization support.\
For now Russian and English are supported. 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 the ability to get off of ladders.
* Added an arrow that shows the next checkpoint. * Added an arrow that shows the next checkpoint.
* Added a ConVar to allow Overdrive usage on the server - `Beatrun_AllowOverdriveInMultiplayer`. * 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 из данного меню. Вам доступны **все** настройки Beatrun из данного меню.
* Поддержка локализации.\ * Поддержка локализации.\
На данный момент доступны Русский и Английский языки. На данный момент доступны Русский и Английский языки.
* Улучшения режима строительства.\
Можно заспавнить любой проп из меню спавна и он сохранится в курсе.
* Добавлена возможность слезания с лестниц. * Добавлена возможность слезания с лестниц.
* Добавлена стрелка указывающая на следующую контрольную точку. * Добавлена стрелка указывающая на следующую контрольную точку.
* Добавлена переменная которая разрешает использование Overdrive на сервере - `Beatrun_AllowOverdriveInMultiplayer`. * Добавлена переменная которая разрешает использование 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.sidestepdesc=Toggles Side Step Move\nA/D + RMB
beatrun.toolsmenu.moves.disarm=Disarm 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 beatrun.toolsmenu.moves.divesettings=Dive Settings
@ -235,4 +235,4 @@ beatrun.infection.infected=was infected!
beatrun.infection.infectedby=has infected beatrun.infection.infectedby=has infected
beatrun.infection.award=You were awarded 200 XP for surviving! 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.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.sidestepdesc=Переключает Side Step\nA/D + ПКМ
beatrun.toolsmenu.moves.disarm=Разоружение beatrun.toolsmenu.moves.disarm=Разоружение
beatrun.toolsmenu.moves.disarmdesc=Переключает возможность разоружить (убить) NPC\nНажмите "%s" на NPC beatrun.toolsmenu.moves.disarmdesc=Переключает возможность разоружить (убить) NPC\nНажмите ИСПОЛЬЗОВАТЬ на NPC
beatrun.toolsmenu.moves.divesettings=Настройки ныряния beatrun.toolsmenu.moves.divesettings=Настройки ныряния
@ -235,4 +235,4 @@ beatrun.infection.infected=был заражён!
beatrun.infection.infectedby=заразил beatrun.infection.infectedby=заразил
beatrun.infection.award=Вы получили 200 XP за выживание! beatrun.infection.award=Вы получили 200 XP за выживание!
beatrun.infection.awardinfected=Вы получили 100 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 CamAddAng = false
CamIgnoreAng = 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 BodyAnimPos = Vector(0, 0, 0)
-- local BodyAnimAngLerp = Angle(0, 0, 0) -- local BodyAnimAngLerp = Angle(0, 0, 0)
-- local DidDraw = false -- local DidDraw = false
@ -338,8 +362,6 @@ function StartBodyAnim(animtable)
BodyAnim:SetPos(ply:GetPos()) BodyAnim:SetPos(ply:GetPos())
BodyAnim:SetNoDraw(false) BodyAnim:SetNoDraw(false)
BodyAnimStartPos:Set(BodyAnim:GetPos())
if not IsValid(ply:GetHands()) then return end if not IsValid(ply:GetHands()) then return end
local plymodel = ply local plymodel = ply
@ -480,6 +502,13 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
return return
end 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 IsValid(BodyAnim) and pos:Distance(ply:EyePos()) > 20 then
if updatethirdperson then if updatethirdperson then
ply:SetNoDraw(false) ply:SetNoDraw(false)
@ -575,7 +604,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
end end
if attach ~= nil then 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 if savedeyeangb == Angle(0, 0, 0) then
savedeyeangb = Angle(0, attach.Ang.y, 0) savedeyeangb = Angle(0, attach.Ang.y, 0)
@ -583,10 +612,10 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
view.angles = ply:EyeAngles() view.angles = ply:EyeAngles()
if lockang2 then if lockang2 and not has_tool_equipped then
view.angles = attach.Ang view.angles = has_tool_equipped and angles or attach.Ang
view.angles.x = ply:EyeAngles().x view.angles.x = ply:EyeAngles().x
view.origin = attach.Pos view.origin = has_tool_equipped and pos or attach.Pos
end end
allowedangchange = true allowedangchange = true
@ -598,7 +627,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
lastlockangstart:Set(lasteyeang) lastlockangstart:Set(lasteyeang)
end end
if ply:Alive() and lockang then if ply:Alive() and (lockang and not has_tool_equipped) then
local attachId = BodyAnim:LookupAttachment(camjoint) local attachId = BodyAnim:LookupAttachment(camjoint)
local attach = BodyAnim:GetAttachment(attachId) or attach local attach = BodyAnim:GetAttachment(attachId) or attach
local ang = attach.Ang local ang = attach.Ang
@ -608,7 +637,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
lerplockang = math.Approach(lerplockang, 1, FrameTime() * 4.5) lerplockang = math.Approach(lerplockang, 1, FrameTime() * 4.5)
end end
view.angles = ang view.angles = has_tool_equipped and angles or ang
view.angles:Add(ViewTiltAngle) view.angles:Add(ViewTiltAngle)
allowedangchange = false allowedangchange = false
@ -672,7 +701,10 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
hook.Run("BodyAnimCalcView", view) hook.Run("BodyAnimCalcView", view)
pos:Set(view.origin) pos:Set(view.origin)
angles:Set(view.angles)
if not has_tool_equipped then
angles:Set(view.angles)
end
if lerpchangeatt < 1 then if lerpchangeatt < 1 then
pos:Set(lerpedpos) pos:Set(lerpedpos)
@ -697,7 +729,7 @@ function BodyAnimCalcView2(ply, pos, angles, fov)
end end
if attach == nil or CurTime() < (mantletimer or 0) then if attach == nil or CurTime() < (mantletimer or 0) then
view.origin = lastattachpos view.origin = has_tool_equipped and pos or lastattachpos
pos:Set(lastattachpos) pos:Set(lastattachpos)
return return
@ -745,8 +777,8 @@ hook.Add("CreateMove", "BodyAnim_Mouse", function(cmd)
local limitx = BodyLimitX or 30 local limitx = BodyLimitX or 30
local limity = BodyLimitY or 50 local limity = BodyLimitY or 50
pastlimitx = limitx < math.AngleDifference(nang.x, oang.x) pastlimitx = limitx < math.AngleDifference(nang.x, oang.x) and not has_tool_equipped
pastlimity = limity < math.abs(math.AngleDifference(nang.y, oang.y)) 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 if limitx ~= lastlimitx and pastlimitx or limity ~= lastlimity and pastlimity then
BodyAnimLimitEase = true BodyAnimLimitEase = true
@ -796,7 +828,7 @@ end)
hook.Add("InputMouseApply", "BodyAnim_Mouse", function(cmd) hook.Add("InputMouseApply", "BodyAnim_Mouse", function(cmd)
local newvalues = false local newvalues = false
if lockang then if lockang and not has_tool_equipped then
cmd:SetMouseX(0) cmd:SetMouseX(0)
cmd:SetMouseY(0) cmd:SetMouseY(0)

View file

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

View file

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

View file

@ -35,8 +35,9 @@ XP_floatingxp = {}
hook.Add("OnParkour", "ParkourXP", function(event) hook.Add("OnParkour", "ParkourXP", function(event)
local ply = LocalPlayer() 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() 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 spawn = {"PlayerGiveSWEP", "PlayerSpawnEffect", "PlayerSpawnNPC", "PlayerSpawnObject", "PlayerSpawnProp", "PlayerSpawnRagdoll", "PlayerSpawnSENT", "PlayerSpawnSWEP", "PlayerSpawnVehicle"}
local function BlockSpawn(ply) 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 end
for _, v in ipairs(spawn) do for _, v in ipairs(spawn) do

View file

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

View file

@ -207,7 +207,7 @@ local function ClimbingThink(ply, mv, cmd)
return return
end 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 tr = ply.ClimbingTraceSafety
local trout = ply.ClimbingTraceSafetyOut local trout = ply.ClimbingTraceSafetyOut
local mins, maxs = ply:GetHull() local mins, maxs = ply:GetHull()

View file

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