Как сделать спавн меню (Q меню) в ТТТ

В режиме ттт не существует спавн меню, его тупо нету, а на Q ты выкидываешь оружие. Есть ли аддон какой-то скрипт который делает так, чтобы было спавн меню (и чтобы онли для администрации). Скажите кто знает

Ты должен понимать что Q меню это не просто спавн меню, это считай полноценный режим Sandbox.

Как добавить Q меню в TTT

Инструкция:

  1. В terrortown/gamemode/shared.lua
    добавить сверху DeriveGamemode(“sandbox”)
  2. В terrortown/gamemode/cl_keys.lua
    Найти GM:OnSpawnMenuOpen и заменить на:
function GM:OnSpawnMenuOpen()
   if LocalPlayer( ):IsSuperAdmin( ) and hook.Call( "SpawnMenuOpen", self ) then
      if ( IsValid( g_SpawnMenu ) ) then
         g_SpawnMenu:Open()
         menubar.ParentTo( g_SpawnMenu )
      end

      hook.Call( "SpawnMenuOpened", self )
      return
   end

   SendWeaponDrop()
end
  1. В terrortown/gamemode/cl_keys.lua
    найти PlayerBindPress и заменить бинд для gmod_undo
    заменить 3 строки (до):
   elseif (bind == "gmod_undo" or bind == "undo") and pressed then
      RunConsoleCommand("ttt_dropammo")
      return true
  1. после:
   elseif (bind == "gmod_undo" or bind == "undo") and pressed then
      if LocalPlayer( ):IsSuperAdmin( ) then
         return
      end
      
      RunConsoleCommand("ttt_dropammo")
      return true

Изменённые файлы:
shared.lua (5.8 КБ)
cl_keys.lua (4.2 КБ)

Почему не выдаёт оружие?

В TTT все сторонние оружия позначены как нежелательные ( даже Physgun ).
Чтобы обходить это ограничение суперадминам нужно изменить 2 файла: ( предупреждение: некоторые оружия действительно нежелательные. При их выдаче может сломаться ХУД )

  1. terrortown/gamemode/player_ext_shd.lua. Найти функцию CanCarryWeapon и заменить её:
function plymeta:CanCarryWeapon(wep)
   if (not wep) or (not wep.Kind) then return self:IsSuperAdmin( ) end

   return self:CanCarryType(wep.Kind)
end
  1. terrortown/gamemode/weaponry.lua. Найти функцию WeaponEquip и заменить её:
function GM:WeaponEquip(wep, owner)
   if IsValid(wep) then
      -- only remove if they lack critical stuff
      if not wep.Kind and !owner:IsSuperAdmin( ) then
         wep:Remove()
         ErrorNoHalt("Equipped weapon " .. wep:GetClass() .. " is not compatible with TTT\n")
      end
   end
end

player_ext_shd.lua (7.0 КБ)
weaponry.lua (15.0 КБ)

Итог

Замени 4 файла и Superadmin сможет открывать Q меню и даже выдавать себе оружие
Только есть 2 проблемы:

  1. кнопка Q - Суперадмины не могут выбросить оружие
  2. кнопка Зет - Суперадмины не могут выбросить патроны

P.S. Не знаю зачем тебе это, я не рекомендую переносить Q меню в TTT
Если кто-то прийдет бить тебя по морде — ты меня не знаешь (lovely :hearts:).

Очень благодарен, а как забиндить Q и Z на другие кнопки?

  1. Если ты хочешь заменить открытие спавнменю и отмены(undo) на другие кнопки, то
    В файле terrortown/gamemode/cl_keys.lua вставь сверху:
    cl_keys.lua (4.5 КБ) ( или замени, если что-то не получается )
    (В этом случае открытие спавнменю - на N, отмена(undo) - на X)
local spawnmenuButton = KEY_N
local undoButton = KEY_X
hook.Add( "PlayerButtonDown", "Test", function( _, btn )
   if !IsFirstTimePredicted( ) then return end

   if btn == spawnmenuButton then
      if ( IsValid( g_SpawnMenu ) ) then
         g_SpawnMenu:Open()
         menubar.ParentTo( g_SpawnMenu )
      end

      hook.Call( "SpawnMenuOpened", self )

   elseif btn == undoButton then
      RunConsoleCommand( "undo" )
   end
end )

hook.Add( "PlayerButtonUp", "Test", function( _, btn )
   if !IsFirstTimePredicted( ) then return end

   if btn == spawnmenuButton then
      hook.Run( "OnSpawnMenuClose" )
   end
end )
  1. А если ты хочешь перебиндить выбросывание оружия и патрон на другие кнопки, то замени файл:
    cl_keys.lua (4.3 КБ)
    Сверху можешь изменить кнопки
    image