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

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

@losiara, у меня нет исходников 1.0004, но думаю, этот код не менялся. Судя по вылету, что-то запросило информацию о группировке из строки communities, которой там нет. Т.е. в communities указано меньше группировок.

Изменено пользователем dsh
  • Спасибо 1
Ссылка на комментарий

Товарищи скриптеры, прошу помощи.

 

1. Как вообще отключить системный респавн в чистом ТЧ?

2. Правильно ли я понимаю, что респавн вызывается ТОЛЬКО из smart_terrain.script в функции se_smart_terrain:call_respawn()?

3. И достаточно ли для отключения респавна полностью закомментировать строку se_respawn.spawn( self.gparams.respawn )?

 

Просьба знающих ответить по пунктам.

Сталкер - наше всё!

Ссылка на комментарий

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
Ссылка на комментарий

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()? И достаточно ее закомментировать для того, чтобы системный респавн не вызывался вообще?

 

 

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

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

Сталкер - наше всё!

Ссылка на комментарий

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	end
r1: 7.8898077011108, i: 7.8898077011108, lvid: 43, dist: 229.41188049316

r1: 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

Изменено пользователем Dennis_Chikin
  • Спасибо 1
Ссылка на комментарий

Да. А есть разница ?

Мне нужно, банально, какой-нибудь вертекс там, куда смотрит непись. Не прямо под носом, и не очень далеко. Любой, блин.

Вертекс, который в 300 метрах сзади непися - это что-то явное не то.

 

upd: однако, и вправду переутомился.

в vertex_in_direction() должна быть не позиция, а npc_lvid.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

не совсем понял использование lvid1 = level.vertex_in_direction( npc_pos, dir, i )

 

npc_pos - должен быть npc:level_vertex_id()

 

dir - заменяет вектор

 

i - это радиус в пределах которого будет двигаться нпс.


т.е npc_pos и дожен стать точкой куда двинется нпс.

Изменено пользователем gam
Ссылка на комментарий

 

 

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? Тут нет ошибки? Разве первый параметр не должен быть вертекс, а не позиция?

Ссылка на комментарий

 

 

bind_respawn.script - это при заходе на локацию.

Так все-таки я так и не въехал до конца. Что и где конкретно надо закомментить, чтобы отрубить системный респавн? Если нетрудно, разжуй пожалуйста :)

Сталкер - наше всё!

Ссылка на комментарий

Только сейчас обратил внимание.

Ага, видимо, холода на всех действуют...

 

системный респавн

если именно регулярный, который в локациях где актора сейчас нет - тогда self:execute()

в se_respawn:update()

 


npc:accessible_nearest() в каком случае 1 возвращает ? -1 я уже видел, nil - тоже. Что у него еще припасено ?

Изменено пользователем Dennis_Chikin
  • Спасибо 1
Ссылка на комментарий

 

 

если именно регулярный, который в локациях где актора сейчас нет

А есть и другой? Под системным респавном я всегда подразумевал стандартный респ НПС и мобов.

Сталкер - наше всё!

Ссылка на комментарий

Поднял один вопрос о выполнении скриптов в игре без паузы, в связи со срочностью дам здесь ссылку на вопрос: http://www.amk-team.ru/forum/topic/5525-soc-kovyriaemsia-v-fajlakh/?p=1062559

Очень нужна помощь. Спасибо.

Ссылка на комментарий

 

Гм. Чем дальше в лес, тем толще партизаны...

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
Ссылка на комментарий

@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 . В нем напиши:

Спасибо. Файл скрипта никак подключать не нужно? Файл запрашивается вызовом одноименной функции?

И еще - где взять полный список обозначения клавиш, и можно ли использовать комбинации? 

Изменено пользователем Eugen81
Не нужно полностью цитировать посты.
Ссылка на комментарий

 

 

Какой смысл задавать ему расстояния ?

 

Не понятно, что именно тебя удивляет? Насколько я понимаю, vertex_in_direction() возвращает самый ближний, валидный, вертекс к той точке, которая находится на запрашиваемом расстоянии от переданного вертекса и в указанном направлении. Если с разных исходных позиций - это значит передача первым параметром разных вертексов, то закономерно, что и результат возвращается разный. Или ты что-то другое имел ввиду?

Ссылка на комментарий

@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
Ссылка на комментарий

 

 

Не понятно, что именно тебя удивляет? Насколько я понимаю, vertex_in_direction() возвращает самый ближний, валидный, вертекс к той точке, которая находится на запрашиваемом расстоянии от переданного вертекса

 

Вот так и не понял: ближний к той, или ближний к этой. То одно, то другое. Вот что мне делать, чтобы получить который не ближе 10, но не дальше 20 метров оттуда, откуда смотрим ? С горя уже начал пробовать высчитать координаты "руками", а потом попросить ближайший доступный. Так и там - то -1, то nil, то 1 откуда-то лезет.

Ссылка на комментарий

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

Спасибо, все прекрасно работает. Однако в итоге вся глобальная идея, которая могла бы оказаться отличным зрелищем, провалилась :(

Дело в том, что все это нужно для стримов, где зритель мог влиять на события: используя программу RutonyChat я отправляю команду на нажатие клавиши в игре. Вот только нажатие клавиш подобным образом срабатывает в любом другом приложении, но не в окне Сталкера. Печально, очень печально.

Изменено пользователем Eugen81
Добавлено Eugen81,

Правила цитирования.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

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