• MONEY за подписку! Ничего делать не надо совсем, всего-то подписаться на тг одмена и нажать кнопку "Принять участие" в розыгрыше: https://t.me/govthing/7650

Вопрос [NL] Как определить свое положение?

  • Автор темы Автор темы Jas3
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Май 2022
Сообщения
74
Реакции
18
Всем ку, недавно начал изучать луа-скриптинг и решил написать свой билдер на NL. Но столкнулся с проблемой, т.к не могу понять как нам получить местоположение себя (типо global, standing и т.д). Смотрел в исходниках у других луашек, но они там написаны как-то замудрено и я конечно могу в тупую спастить, но я хочу именно сам понять как это реализовать.
Я не прошу прислать мне исходник, можно просто идею, чтобы я понял как это вообще работает, спасибо.
 
не могу понять как нам получить местоположение себя (типо global, standing и т.д).
local flags = entity.get_local_player().m_fFlags

Через флаги можно сделать часть действий.

256 - in air
257 - on ground
262 - in air+crouch
263 - crouch

Тут есть проблема - если ты бхопишь, то на 1 тик касаешься земли => Стейт меняется (аир->граунд) и аа свитчаются. Если сильно волнует это, там можно сделать проверку через количество тиков, которое ты находишься на земле. (Домой приду и скину)

local induck = entity.get_local_player().m_flDuckAmount > 0

Проверка на крауч другим методом.

И про велосити не забудь, просто скорость через нетпроп получи.


Билдер выглядит примерно так:

if state == standing and aaForThisConditionCheckboxStanding then aa(stand) --еслм чек бокс стендингов включен и ты стоишь, то сетаются аа для стендов
elseid state == moving and aaForThisConditionCheckboxMoving then
aa(moving) --для мувов
else
aa(global)
end

И так дальше с другими стейтами
 
Если сильно волнует это, там можно сделать проверку через количество тиков, которое ты находишься на земле. (Домой приду и скину)
get_ground_ticks func:
Expand Collapse Copy
local gt

local function get_ground_ticks()
    local g = bit.band(entity.get_local_player().m_fFlags, 1) == 1
    gt = g and gt + 1 or 0
    return gt
end


if state == standing and aaForThisConditionCheckboxStanding then aa(stand) --еслм чек бокс стендингов включен и ты стоишь, то сетаются аа для стендов
elseid state == moving and aaForThisConditionCheckboxMoving then
aa(moving) --для мувов
else
aa(global)
end


builder example:
Expand Collapse Copy
local vars = {
    current_state = nil,
    states = {'писька', 'попка'}
}

local menu = {
    builders = {
        base = { },
        defensive = { }
    }
}

for i, s in ipairs(vars.states) do
    menu.builders.base[s] = { }
    local ctx = menu.builders.base[s]

    ctx.overriden_state = groups.anti_hit.position:switch('Override \v' .. s)

    ctx.yaw_method = groups.anti_hit.yaw:combo('Method\aFFFFFF00' .. s, {'Off', 'Static', 'Jitter'})
    ctx.yaw_offset = groups.anti_hit.yaw:slider('Offset\aFFFFFF00' .. s, -180, 180)
end

events.createmove:set(function(cmd)
    vars.current_state = get_state(cmd)
    local adjusted_state = menu.builders.base[vars.current_state].overriden_state:get() and vars.current_state or 'Shared'
    local ctx = menu.builders.base[adjusted_state]

    if ctx.yaw_method:get() == 'Static' then
        yaw.offset:override(ctx.yaw_offset:get())
    end
end)

надо дописать самому естественно а не "втупую спастить", прям как ты и просил, надеюсь помог ибо я устал все это переименовывать что бы было более понятно... (это тсу)


Так же хотел бы добавить, узнай хотя бы не много с каким евентом ты работаешь.

Например createmove, он обновляется вроде 64 раза в секунду, потому что тирейт сервера == 64 тикам(количество обновлений анимок игрока в секунду следовательно) тоже достаточно важно, ведь был такой индивид который в рендер евенте аашки делал... сумасшедший...)

Также следуя из информации выше 'количество обновлений анимок игрока в секунду следовательно', нам не надо проверять:

сервер шизофрения:
Expand Collapse Copy
events.createmove:set(function(cmd)
    local m = entity.get_local_player()
    if not m then return end -- нету смысла

    print('сосал? -' .. m)
end)

Надеюсь снова достаточно понятно объяснил, мб где то не прав поправите ес чо.
 
Последнее редактирование:
Спасибо парни
 
Назад
Сверху Снизу