dsh 3 824 Опубликовано 25 Января 2017 Поделиться Опубликовано 25 Января 2017 (изменено) @losiara, у меня нет исходников 1.0004, но думаю, этот код не менялся. Судя по вылету, что-то запросило информацию о группировке из строки communities, которой там нет. Т.е. в communities указано меньше группировок. Изменено 25 Января 2017 пользователем dsh 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
AndrewMor 527 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 Товарищи скриптеры, прошу помощи. 1. Как вообще отключить системный респавн в чистом ТЧ? 2. Правильно ли я понимаю, что респавн вызывается ТОЛЬКО из smart_terrain.script в функции se_smart_terrain:call_respawn()? 3. И достаточно ли для отключения респавна полностью закомментировать строку se_respawn.spawn( self.gparams.respawn )? Просьба знающих ответить по пунктам. Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 1. se_respawn.script: -- Обновление в офлайне function se_respawn:update() cse_alife_smart_zone.update( self ) --'printf("RESPAWN: [%s] se_respawn update_offline", tostring(self:name())) self:execute() end Здесь с этим можно что-нибудь сделать. 2. нет, неправильно. Это заполнение синих ящиков патронами от пм и воткой. 3. недостаточно. 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndrewMor 527 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) Dennis_Chikin, в каком-то уроке видел вызов респавнера из рестриктора: %=respawner_spawn(имя респавнера)% - соответственно, функция из xr_effects.script, которая как раз и вызывает se_respawn.spawn. Выходит, урок неправильный? (Сейчас проверить не могу, ибо на работе). Тогда выходит надо комментировать все вызовы функций se_respawn:execute, se_respawn:update, se_respawn:update_online в se_respawn.script? П.С. Тогда верно ли, что респавн вызывается из bind_respawn.script, строчкой self.se_respawn:update_online()? И достаточно ее закомментировать для того, чтобы системный респавн не вызывался вообще? Мне собственно что нужно: полностью вырубить системный респавн НПС и мутов, но оставить возможность вызова конкретного респавнера скриптово в необходимый момент времени. Изменено 26 Января 2017 пользователем AndrewMor Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) bind_respawn.script - это при заходе на локацию. xr_effects.script - это если вызывается еще откуда-то (из непися, дверей, ворон и прочих лампочек). соответственно, убираешь то, что тебе не нужно, и оставляешь то, что нужно. Что-то я переутомился, что-ли... self.dir1 = npc:direction() local npc_pos = npc:position() local n = 1 local lvid1, pos local dir = self.dir1 for i = r1, r1 + 10, 2 do lvid1 = level.vertex_in_direction( npc_pos, dir, i ) if lvid1 ~= npc_lvid then pos = level.vertex_position( lvid1 ) log( "info", "r1: %s, i: %s, lvid: %s, dist: %s", r1, i, lvid1, pos:distance_to( npc_pos ) ) end endr1: 7.8898077011108, i: 7.8898077011108, lvid: 43, dist: 229.41188049316r1: 7.8898077011108, i: 9.8898077011108, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 11.889807701111, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 13.889807701111, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 15.889807701111, lvid: 43, dist: 229.41188049316 r1: 7.8898077011108, i: 17.889808654785, lvid: 43, dist: 229.41188049316 Изменено 26 Января 2017 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
gam 117 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 Что-то я переутомился, что-ли... что за проверка if lvid1 ~= npc_lvid then параметр npc_lvid это npc:level_vertex_id()? Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) Да. А есть разница ? Мне нужно, банально, какой-нибудь вертекс там, куда смотрит непись. Не прямо под носом, и не очень далеко. Любой, блин. Вертекс, который в 300 метрах сзади непися - это что-то явное не то. upd: однако, и вправду переутомился. в vertex_in_direction() должна быть не позиция, а npc_lvid. Изменено 26 Января 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
gam 117 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) не совсем понял использование lvid1 = level.vertex_in_direction( npc_pos, dir, i ) npc_pos - должен быть npc:level_vertex_id() dir - заменяет вектор i - это радиус в пределах которого будет двигаться нпс. т.е npc_pos и дожен стать точкой куда двинется нпс. Изменено 26 Января 2017 пользователем gam Ссылка на комментарий
dsh 3 824 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 level.vertex_in_direction( npc_pos, dir, i ) Т.е. получается, что level.vertex_in_direction( npc_pos, dir, 17 ) возвращает вертекс на расстоянии 229 метров? Чудеса. lvid1 = level.vertex_in_direction( npc_pos, dir, i ) Только сейчас обратил внимание. Почему npc_pos? Тут нет ошибки? Разве первый параметр не должен быть вертекс, а не позиция? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
AndrewMor 527 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 bind_respawn.script - это при заходе на локацию. Так все-таки я так и не въехал до конца. Что и где конкретно надо закомментить, чтобы отрубить системный респавн? Если нетрудно, разжуй пожалуйста Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) Только сейчас обратил внимание.Ага, видимо, холода на всех действуют... системный респавн если именно регулярный, который в локациях где актора сейчас нет - тогда self:execute() в se_respawn:update() npc:accessible_nearest() в каком случае 1 возвращает ? -1 я уже видел, nil - тоже. Что у него еще припасено ? Изменено 26 Января 2017 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndrewMor 527 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 если именно регулярный, который в локациях где актора сейчас нет А есть и другой? Под системным респавном я всегда подразумевал стандартный респ НПС и мобов. Сталкер - наше всё! Ссылка на комментарий
MJRamon 0 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 Поднял один вопрос о выполнении скриптов в игре без паузы, в связи со срочностью дам здесь ссылку на вопрос: http://www.amk-team.ru/forum/topic/5525-soc-kovyriaemsia-v-fajlakh/?p=1062559 Очень нужна помощь. Спасибо. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 Гм. Чем дальше в лес, тем толще партизаны... lvid1 = level.vertex_in_direction( npc_lvid, self.dir[1], i ) С разных исходных позиций: targets[1], r1,i: 9.4276762008667,9.4276762008667, lvid: 29341, dist: 0.65685898065567 targets[1], r1,i: 9.0319900512695,9.0319900512695, lvid: 30935, dist: 9.6079540252686 targets[1], r1,i: 9.4302082061768,9.4302082061768, lvid: 31782, dist: 0.99326068162918 Какой смысл задавать ему расстояния ? А есть и другой? Под системным респавном я всегда подразумевал стандартный респ НПС и мобов. Все-таки это погода. Есть и другой. bind_respawn.script Как видно из когда, работает только на текущей локации. Где se_respawn:update() не работает. Делает function respawn_binder:update( delta ) object_binder.update( self, delta ) self.se_respawn:update_online() endЕсть еще xr_effects.script - когда кто-то где-то прописал что-нибудь типа %respawner_spawn(что:попало)% 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 @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 0 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) @MJRamon, создай файл dik_hot_key.script . В нем напиши: Спасибо. Файл скрипта никак подключать не нужно? Файл запрашивается вызовом одноименной функции? И еще - где взять полный список обозначения клавиш, и можно ли использовать комбинации? Изменено 27 Января 2017 пользователем Eugen81 Не нужно полностью цитировать посты. Ссылка на комментарий
dsh 3 824 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 Какой смысл задавать ему расстояния ? Не понятно, что именно тебя удивляет? Насколько я понимаю, vertex_in_direction() возвращает самый ближний, валидный, вертекс к той точке, которая находится на запрашиваемом расстоянии от переданного вертекса и в указанном направлении. Если с разных исходных позиций - это значит передача первым параметром разных вертексов, то закономерно, что и результат возвращается разный. Или ты что-то другое имел ввиду? dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) @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; Изменено 26 Января 2017 пользователем TIGER_VLAD Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 Не понятно, что именно тебя удивляет? Насколько я понимаю, vertex_in_direction() возвращает самый ближний, валидный, вертекс к той точке, которая находится на запрашиваемом расстоянии от переданного вертекса Вот так и не понял: ближний к той, или ближний к этой. То одно, то другое. Вот что мне делать, чтобы получить который не ближе 10, но не дальше 20 метров оттуда, откуда смотрим ? С горя уже начал пробовать высчитать координаты "руками", а потом попросить ближайший доступный. Так и там - то -1, то nil, то 1 откуда-то лезет. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
MJRamon 0 Опубликовано 26 Января 2017 Поделиться Опубликовано 26 Января 2017 (изменено) @MJRamon, Достаточно положить файл dik_hot_key.script в папку gamedata\scripts и вызвать его в bind_stalker.script. Спасибо, все прекрасно работает. Однако в итоге вся глобальная идея, которая могла бы оказаться отличным зрелищем, провалилась Дело в том, что все это нужно для стримов, где зритель мог влиять на события: используя программу RutonyChat я отправляю команду на нажатие клавиши в игре. Вот только нажатие клавиш подобным образом срабатывает в любом другом приложении, но не в окне Сталкера. Печально, очень печально. Изменено 27 Января 2017 пользователем Eugen81 Добавлено Eugen81, 27 Января 2017 Правила цитирования. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти