• Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта NetZONA.org: https://netzona.org/help/public-offer/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами использования Ваших файлов cookie на Проекте NetZONA.org: https://netzona.org/help/cookies/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с Политикой конфиденциальности Проекта NetZONA.org: https://netzona.org/pages/privacy-policy/

  • Ответы на основные вопросы: https://netzona.org/threads/populjarnye-voprosy-i-otvety-na-nix.6122/

  • Приветствуем на сайте, Гость! Приобрести (купить) Информационную услугу (в том числе группу "Проверенный") на Проекте NetZONA.org: https://netzona.org/account/upgrades

ContextMenu Third Person

NoteDevil

Пользователь
Регистрация
30 Окт 2018
Сообщения
22
Реакции
0
Баллы
17
Можете помочь, я не знаю что нужно вырезать из SUP сборки для 3 лица.

Сам код 3 лицо:

cvar.Register 'enable_thirdperson'
:SetDefault(false, true)
:AddMetadata('Menu', 'Вид от третьего лица')
:ConCommand(function(self, pl, args)
if (!args[1]) then
self:SetValue(!self:GetValue())
else
self:SetValue(args[1] == "1")
end
end)
rp.thirdPerson = {}
local toggleCamLock = false
local x = CreateClientConVar('sup_thirdperson_x', '120')
local y = CreateClientConVar('sup_thirdperson_y', '0')
local z = CreateClientConVar('sup_thirdperson_z', '15')
local xmin, xmax = 40, 120
local ymin, ymax = -40, 40
local zmin, zmax = -15, 15
local fov = 90
local dist = 0
local function isThirdPerson(pl)
pl = pl or LocalPlayer()
if ((IsValid(pl:GetViewEntity()) and pl:GetViewEntity():GetClass() == "gmod_cameraprop") or (IsValid(pl:GetActiveWeapon()) and pl:GetActiveWeapon():GetClass() == "gmod_camera")) then return false end

return cvar.GetValue('enable_thirdperson') and (not pl:InVehicle()) and (pl:GetObserverMode() == OBS_MODE_NONE) and pl:Alive()
end
rp.thirdPerson.isEnabled = isThirdPerson
local view = {}
local freecam_ang
local lastAim = nil
local htfilter = function(ent)
return !(ent:GetParent() == LocalPlayer() or ent:IsPlayer())
end
hook('CalcView', 'ThirdPerson.CalcView', function(pl, pos, angles)
local tp = isThirdPerson(pl)
if ((tp or dist > 0) and pl.camera_ang) then
if (tp) then
dist = math.min(dist + (1 - dist) * FrameTime() * 9, 1)
if (dist > .99) then dist = 1 end
else
dist = math.max(dist - dist * FrameTime() * 9, 0)
if (dist < .01) then dist = 0 end
end
local toggleCamLock = toggleCamLock
if (pl:KeyDown(IN_WALK)) then toggleCamLock = !toggleCamLock end
if (freecam_ang and !toggleCamLock) then
pl.camera_ang = Angle(freecam_ang.p, freecam_ang.y, freecam_ang.r)
freecam_ang = nil
elseif (!freecam_ang and toggleCamLock) then
freecam_ang = Angle(pl.camera_ang.p, pl.camera_ang.y, pl.camera_ang.r)
end
pos = pos + (pl.camera_ang:Forward() * dist * (-math.Clamp(x:GetInt(), xmin, xmax))) + (pl.camera_ang:Right() * dist * (math.Clamp(y:GetInt(), ymin, ymax))) + (pl.camera_ang:Up() * dist * (math.Clamp(z:GetInt(), zmin, zmax)))
local hulltr = util.TraceHull({
start = pl:GetShootPos(),
endpos = pos,
filter = htfilter,
mask = MASK_SHOT_HULL,
mins = Vector(-10, -10, -10),
maxs = Vector(10, 10, 10)
})
if (hulltr.Hit) then
pos = hulltr.HitPos + (pl:GetShootPos() - hulltr.HitPos):GetNormal() * 10
end
local aimtr = util.TraceLine({
start = pl:EyePos(),--pos + (pl.camera_ang:Forward() * (-z:GetInt() + 45)),
endpos = pos + (pl.camera_ang:Forward() * 100000),
filter = htfilter
})
view.origin = pos
view.fov = fov
view.angles = pl.camera_ang
view.drawviewer = true
if (tp and pl:GetMoveType() == MOVETYPE_NOCLIP) then
pl:SetEyeAngles(freecam_ang or pl.camera_ang)
elseif (tp and !toggleCamLock) then
local newAng = (aimtr.HitPos - pl:EyePos()):Angle()
sp = aimtr.HitPos
pl:SetEyeAngles(newAng)
end
return view
else
if (view and view.drawviewer) then
view.drawviewer = false
return view
end
end
end)

hook("CreateMove", "ThirdPerson.CreateMove", function(cmd)
local pl = LocalPlayer()
if (isThirdPerson(pl) and pl.camera_ang and pl:GetMoveType() != MOVETYPE_NOCLIP) then
local realAng = freecam_ang or pl.camera_ang
local plAng = pl:GetAimVector():Angle()
local curVec = Vector(cmd:GetForwardMove(), cmd:GetSideMove(), cmd:GetUpMove())
curVec:Rotate(plAng - realAng)
cmd:SetForwardMove(curVec.x)
cmd:SetSideMove(curVec.y)
cmd:SetUpMove(curVec.z)
return false
end
end)
hook("InputMouseApply", "ThirdPerson.InputMouseApply", function(cmd, x, y, ang)
local pl = LocalPlayer()
if (isThirdPerson(pl)) then
if (!pl.camera_ang) then
pl.camera_ang = pl:EyeAngles()
end
pl.camera_ang.p = math.Clamp(math.NormalizeAngle(pl.camera_ang.p + y / 50), -90, 90)
pl.camera_ang.y = math.NormalizeAngle(pl.camera_ang.y - x / 50)
return true
else
pl.camera_ang = pl:EyeAngles()
end
end)
-- hook('ShouldDrawLocalPlayer', 'ThirdPersonDrawPlayer', function()
-- if cvar.GetValue('enable_thirdperson') then
-- return isThirdPerson(LocalPlayer())
-- end
-- end)
local lastPress
hook("PlayerBindPress", "ThirdPerson.PlayerBindPress", function(pl, bind, pressed)
if (pressed and bind:lower() == "+walk") then
local st = SysTime()
if (lastPress and lastPress > st - 0.75) then
toggleCamLock = !toggleCamLock
end
lastPress = st
end
end)
-- Edit menu!
local fr, chk
hook('OnContextMenuOpen', 'rp.ThirdPerson.OnContextMenuOpen', function()
local pl = LocalPlayer()
chk = ui.Create('ui_checkbox', function(self, p)
self:SetPos(10, 40)
self:SetText('Вид от третьего лица')
self:SizeToContents()
self:SetConVar('enable_thirdperson')
self:SetMouseInputEnabled(true)
end, g_ContextMenu)
if (isThirdPerson(pl) and pl.camera_ang) then
fr = ui.Create('ui_frame', function(self, p)
self:SetPos(10, 61)
self:SetSize(159, 168)
self:SetTitle("Позиция камеры")
self:ShowCloseButton(false)
self:SetMouseInputEnabled(true)
self:SetDraggable(false)
end, g_ContextMenu)
local btn
local grid = ui.Create('Panel', function(self, p)
self:SetSize(128, 128)
self:SetPos(fr:GetDockPos())
self.Paint = function(s, w, h)
surface.SetDrawColor(ui.col.OffWhite)
surface.DrawOutlinedRect(0, 0, w, h)
surface.DrawLine(btn.x+8, 0, btn.x+8, h)
surface.DrawLine(0, btn.y+8, w, btn.y+8)
surface.SetDrawColor(ui.col.Hover)
surface.DrawOutlinedRect(w * .25, h * .25, w * .5, h * .5)
surface.DrawLine(0, h * .5, w, h * .5)
surface.DrawLine(w * .5, 0, w * .5, h)
end
end, fr)
btn = ui.Create('DButton', function(self, p)
self:SetText('')
self:SetSize(16, 16)
self.OnMousePressed = function(s)
s.Dragging = true
end
self.Think = function(s)
if (s.Dragging) then
if (!input.IsMouseDown(MOUSE_LEFT)) then
s.Dragging = false
return
end
local mx, my = grid:CursorPos()
local sx, sy = self.x, self.y
self:SetPos(math.Clamp(mx - 8, 0, grid:GetWide() - 16), math.Clamp(my - 8, 0, grid:GetTall() - 16))
if (self.x != sx or self.y != sy) then
local ymul = self.x / (grid:GetWide() - 16)
local zmul = 1 - (self.y / (grid:GetTall() - 16))
y:SetInt(ymin + (ymul * (ymax - ymin)))
z:SetInt(zmin + (zmul * (zmax - zmin)))
end
end
end
end, grid)
local slider = ui.Create('ui_slider_vertical', function(self, p)
local _, y = fr:GetDockPos()
self:SetPos(138, y)
self:SetTall(128)
self.OnChange = function(self, val)
val = 1 - val
x:SetInt(xmin + (val * (xmax - xmin)))
end
end, fr);
slider:SetValue(1 - ((x:GetInt() - xmin) / (xmax - xmin)))
local bx = ((y:GetInt() - ymin) / (ymax - ymin)) * (grid:GetWide() - 16)
local by = (1 - ((z:GetInt() - zmin) / (zmax - zmin))) * (grid:GetTall() - 16)
btn:SetPos(bx, by)
end
end)
hook('OnContextMenuClose', 'rp.ThirdPerson.OnContextMenuClose', function()
if (IsValid(fr)) then
fr:Remove()
end
if (IsValid(chk)) then
chk:Remove()
end

end)


Ошибка:
[ERROR] gamemodes/starwarsrp/gamemode/modules/ui/cl_contextmenu.lua:1: attempt to index global 'cvar' (a nil value)
1. unknown - gamemodes/starwarsrp/gamemode/modules/ui/cl_contextmenu.lua:1
2. include_cl - [C]:-1
3. include_load - gamemodes/starwarsrp/gamemode/sh_include.lua:20
4. include_dir - gamemodes/starwarsrp/gamemode/sh_include.lua:39
5. unknown - gamemodes/starwarsrp/gamemode/sh_include.lua:66
6. include - [C]:-1
7. unknown - gamemodes/starwarsrp/gamemode/cl_init.lua:3
 
Не могу помочь с этим хд лучше самому написать
 
Кста, я скоро выложу уже нормальный вид от 3 лица
 
Это саповский вид от третьего лица чтоль? На обычный дрп ты его просто так не поставишь, надо будет перепичывать.
А твоя ошибка в конварах, используй:
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).
 
Главная Регистрация
Назад
Сверху