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

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

dsh- у меня действительно есть группировки, но они указаны и прописаны во всех файлах, гуляют их представители, разговаривают и выполняют квесты. При убиении обыскиваются, при нанесении хитов выдают поршни, логику отрабатывают, вылетов не было ни разу!!!

Единственное что меня смущало в game_relations, это вот это:

 

;названия группировок
communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10, freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, zone, 18, osoznanyie, 19

две последнии мои

 

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

названия группировок


communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10, freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18
Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других.

 

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

Жизнь следует измерять поступками, а не временем...

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

 

 

Единственное что меня смущало в game_relations, это вот это:

Я добавлял новые группировки, продолжая нумерацию без пропусков. Полагаю, в твоем случае нужно делать то же самое.

  • Спасибо 1

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

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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