Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

(изменено)

@AndrewMor, У меня сайт вообще не работает.

 

Можно.

ххахах... очень полезный и детальный ответ.

Изменено пользователем TIGER_VLAD
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Всем привет. Есть какие-то варианты отключения звука шагов в определенный момент? Ну или как-то заменять звук шагов на свой звук(пустой) ?

Поделиться этим сообщением


Ссылка на сообщение

@dsh, да знаю, этот момент( как-то раз неправильно настроил костюм в SDK и звук шагов пропал). Такой вариант не хочу использовать и так костылей хватает у меня))

Поделиться этим сообщением


Ссылка на сообщение

@MJRamon, создай файл dik_hot_key.script . В нем напиши:

 

 

local con = nil -- переменная для объекта консоли
local con_command = "mm_net_player_name" -- консольная команда
local def_value = "_" -- значение по умолчанию - символ подчеркивания

function update()
    if not con then -- инициализируем схему
        con = get_console() -- кешируем консоль
        con:execute( con_command .." ".. def_value ) -- инициализируем дефотлным значением, т.к. кнопка не нажата
        for k,v in pairs(_G[script_name()]) do -- перебираем функции в текущем файле
             -- v это функция     и её имя является кодом клавиши
            if type(v)=='function' and DIK_keys[string.upper(k)] then
                local key = "k"..string.gsub(k,"dik_","") -- формируем ключ и
                con:execute("bind_console "..con_command.." "..k.." "..key) -- биндим кнопку на него
            end
        end
    else
        -- получаем из консоли значение параметра для нашей команды
        local str = con:get_string(con_command)
        -- если оно не является значением по умолчанию
        -- и в этом файле есть функция с таким именем, то выполняем её
        if str~=def_value and this[str] then
            this[str]()
            con:execute(con_command.." "..def_value) -- записываем значение по умолчанию
        end
    end


end

function dik_numpad0()
news_manager.send_tip(db.actor,"нажали кнопку numpad0")
end

function dik_numpad1()
news_manager.send_tip(db.actor,"нажали кнопку numpad1")
end

function dik_numpad2()
news_manager.send_tip(db.actor,"нажали кнопку numpad2")
end

 

 

 

Далее зайди в bind_stalker.script и найди строчку "function actor_binder:update(delta)". Внутри этой функции вызови твою функцию  dik_hot_key.update()

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@MJRamon, Достаточно положить файл  dik_hot_key.script в папку gamedata\scripts и вызвать его в bind_stalker.script.

Полный список(из lua_help.script):

 

 

    const DIK_0 = 11;
    const DIK_1 = 2;
    const DIK_2 = 3;
    const DIK_3 = 4;
    const DIK_4 = 5;
    const DIK_5 = 6;
    const DIK_6 = 7;
    const DIK_7 = 8;
    const DIK_8 = 9;
    const DIK_9 = 10;
    const DIK_A = 30;
    const DIK_ADD = 78;
    const DIK_APOSTROPHE = 40;
    const DIK_APPS = 221;
    const DIK_AT = 145;
    const DIK_AX = 150;
    const DIK_B = 48;
    const DIK_BACK = 14;
    const DIK_BACKSLASH = 43;
    const DIK_C = 46;
    const DIK_CAPITAL = 58;
    const DIK_CIRCUMFLEX = 144;
    const DIK_COLON = 146;
    const DIK_COMMA = 51;
    const DIK_CONVERT = 121;
    const DIK_D = 32;
    const DIK_DECIMAL = 83;
    const DIK_DELETE = 211;
    const DIK_DIVIDE = 181;
    const DIK_DOWN = 208;
    const DIK_E = 18;
    const DIK_END = 207;
    const DIK_EQUALS = 13;
    const DIK_ESCAPE = 1;
    const DIK_F = 33;
    const DIK_F1 = 59;
    const DIK_F10 = 68;
    const DIK_F11 = 87;
    const DIK_F12 = 88;
    const DIK_F13 = 100;
    const DIK_F14 = 101;
    const DIK_F15 = 102;
    const DIK_F2 = 60;
    const DIK_F3 = 61;
    const DIK_F4 = 62;
    const DIK_F5 = 63;
    const DIK_F6 = 64;
    const DIK_F7 = 65;
    const DIK_F8 = 66;
    const DIK_F9 = 67;
    const DIK_G = 34;
    const DIK_GRAVE = 41;
    const DIK_H = 35;
    const DIK_HOME = 199;
    const DIK_I = 23;
    const DIK_INSERT = 210;
    const DIK_J = 36;
    const DIK_K = 37;
    const DIK_KANA = 112;
    const DIK_KANJI = 148;
    const DIK_L = 38;
    const DIK_LBRACKET = 26;
    const DIK_LCONTROL = 29;
    const DIK_LEFT = 203;
    const DIK_LMENU = 56;
    const DIK_LSHIFT = 42;
    const DIK_LWIN = 219;
    const DIK_M = 50;
    const DIK_MINUS = 12;
    const DIK_MULTIPLY = 55;
    const DIK_N = 49;
    const DIK_NEXT = 209;
    const DIK_NOCONVERT = 123;
    const DIK_NUMLOCK = 69;
    const DIK_NUMPAD0 = 82;
    const DIK_NUMPAD1 = 79;
    const DIK_NUMPAD2 = 80;
    const DIK_NUMPAD3 = 81;
    const DIK_NUMPAD4 = 75;
    const DIK_NUMPAD5 = 76;
    const DIK_NUMPAD6 = 77;
    const DIK_NUMPAD7 = 71;
    const DIK_NUMPAD8 = 72;
    const DIK_NUMPAD9 = 73;
    const DIK_NUMPADCOMMA = 179;
    const DIK_NUMPADENTER = 156;
    const DIK_NUMPADEQUALS = 141;
    const DIK_O = 24;
    const DIK_P = 25;
    const DIK_PAUSE = 197;
    const DIK_PERIOD = 52;
    const DIK_PRIOR = 201;
    const DIK_Q = 16;
    const DIK_R = 19;
    const DIK_RBRACKET = 27;
    const DIK_RCONTROL = 157;
    const DIK_RETURN = 28;
    const DIK_RIGHT = 205;
    const DIK_RMENU = 184;
    const DIK_RSHIFT = 54;
    const DIK_RWIN = 220;
    const DIK_S = 31;
    const DIK_SCROLL = 70;
    const DIK_SEMICOLON = 39;
    const DIK_SLASH = 53;
    const DIK_SPACE = 57;
    const DIK_STOP = 149;
    const DIK_SUBTRACT = 74;
    const DIK_SYSRQ = 183;
    const DIK_T = 20;
    const DIK_TAB = 15;
    const DIK_U = 22;
    const DIK_UNDERLINE = 147;
    const DIK_UNLABELED = 151;
    const DIK_UP = 200;
    const DIK_V = 47;
    const DIK_W = 17;
    const DIK_X = 45;
    const DIK_Y = 21;
    const DIK_YEN = 125;
    const DIK_Z = 44;
    const MOUSE_1 = 256;
    const MOUSE_2 = 512;
    const MOUSE_3 = 1024;

 

 

Изменено пользователем TIGER_VLAD

Поделиться этим сообщением


Ссылка на сообщение

@Карлан, Тоже интересует этот вопрос. Пробовал когда-то отследить хит от радиации возле этого грузовика и ничего не получилось. Хита походу от радиации нет, просто отнимается жизнь.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Всем привет. Словил себя на том, что много трачу времени на перемещение по локации тестируя что-то. Решил сделать что-то похожее на Noclip режим(режим свободного полета). 

Код:

 

function noclip_upd()
local position = db.actor:position() 
local direction = device().cam_dir 

        if noclip_active == true then
                  local v = vector()
                  v.x = position.x + direction.x          --или просто v= position:add(direction)
                  v.y = position.y + direction.y 
                  v.z = position.z + direction.z 

                  db.actor:set_actor_position(v)
        end
end

 


Вроде бы все работает,

. Но мне так и не удалось изменить скорость полета и еще заметил, что скорость зависит от фпс ( на краях карты скорость больше). Пробовал вектор умножать/делить на delta - получаю очень большую скорость. На delta * 0.001 - получаю
Также пробовал изменять длину вектора или сделать длину единичной с помощью методов vector:set_length(n) и vector:normalize()  , вот
Что подскажете сделать, как решить проблему?
Изменено пользователем TIGER_VLAD
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@naxac, Да пробовал уже так. Вот так этот код работает

. Получается, что ГГ летит не по направлению взгляда ( То есть я например повернул камеру влево/вправо где-то на 20-30 градусов, а направление не меняется, стоит мне повернуть больше и только тогда направление меняется). Думаю сам телепорт(db.actor:set_actor_position) актора нужно как то привязать к аргументу delta метода update, так как скорость телепорта зависит от фпс. На видео видно, что скорость на краях локации сильно увеличивается.

 

local delta = 0.05 -- подобрать опытным путём: чем больше, тем быстрее

 пробовал от 0.5 - 0.00005 все равно скорость большая

Изменено пользователем TIGER_VLAD

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@Shkiper2012, Только что попробовал твой код, нажимаю T - cкорость уменьшается, но все равно большая. Я бы хотел добиться скорости приблизительную к скорости ходьбы. Пробовал изменять значение переменной на local distant_step = 0.1 и получаю

, когда ГГ летит не по направлению взгляда. Видать не получится у меня ничего, ну и на том всем спасибо. Изменено пользователем TIGER_VLAD

Поделиться этим сообщением


Ссылка на сообщение

Всем привет. Пытаюсь заставить актора зависнуть в воздухе. По нажатию клавиши получаю координаты позиции и телепортирую на апдейте в это тучку с помощью db.actor:set_actor_position. Актора начинает трясти, как в воздухе так и на земле. Пробовал вместо апдейта использовать fastcall, но его еще больше начинает трясти и даже раздваивает.

Видео

 

. Почему так происходит ?

Поделиться этим сообщением


Ссылка на сообщение

@Lebedev30 Как вариант: перед переходом поставить большой рестриктор и в логике вызывать функцию, когда ГГ будет внутри. А в функции телепортировать (например 2 метра назад) и развернуть ГГ и написать сообщение на экран типа "Переход заблокирован". После выполнения квеста, рестриктор удаляем.

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
5 часов назад, Graff46 сказал:

Можно спавнить переход по условию, до определённого события перехода просто не будет.

Вот только тогда игрок сможет выйти за пределы локации и упасть например)

Поделиться этим сообщением


Ссылка на сообщение

Всем привет. Есть какие-то способы спрятать оружие актору не считая bind_stalker.hide_weapon() ? bind_stalker.hide_weapon()  - прячет оружие слишком резко, отключается худ модели и анимация holster не наблюдается, слышен только звук. А вот restore_weapon() работает нормально.

Поделиться этим сообщением


Ссылка на сообщение
22 минуты назад, Shkiper2012 сказал:

Можно попробовать, через имитацию нажатия клавиши

Только этот вариант и был на уме. Думал может есть попроще вариант.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)
3 часа назад, Shkiper2012 сказал:

Можно ли скриптом "повесить" актора в пространстве? Чтоб он завис в воздухе.

Пробовал делать через "db.actor:set_actor_position( ... точка в пространстве ... )"

set_actor_position не точно устанавливает позицию актора. 

Если ЗП, можешь раз установить позицию(не на апдейте) и выключить гравитацию : level.physics_world():set_gravity(0). 

Если ТЧ(исходники), можешь перенести метод set_gravity из ЗП. 

А я для ТЧ xray extensions, с помощью m_netpk спавнил под актором невидимую плоскость и фиксировал. Вот : 

 

Изменено пользователем TIGER_VLAD
  • Нравится 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@DaSTi002 В оригинальном ТЧ, если убьешь сталкера в деревне новичков с одного выстрела попаданием в голову, то НПСы не будут на тебя обижаться, а перейдут в схему опасности.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...