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

[SoC] Ковыряемся в файлах


Halford

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

Берем, и ВЕЗДЕ меняем. Либо на game.CTime(), либо сохранения делаем как-то типа вот так:

 

    local n = 0    -- корректировка и сохранение времени
    for k, v in pairs( tm_sec ) do n = n + 1 end
    pk:w_u32( n )
    for k, v in pairs( tm_sec ) do pk:w_stringZ( k ); pk:w_float( v - game_time_sec ) end
    n = 0
    for k, v in pairs( tm_ms ) do n = n + 1 end
    pk:w_u32( n )
    for k, v in pairs( tm_ms ) do pk:w_stringZ( k ); pk:w_float( v - game_time_ms ) end

преимущества последнего варианта - меньший объем сэйва, быстрее все вычисления, недостаток - кто-то из принципа может проторчать на одной локации не сохраняясь до 35 мая. ;)
 

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


Ссылка на сообщение
это в g.script?

 

Ну, у меня отдельным модулем. И все "временные" данные на сохранение везде кладутся в отдельное место, и сохраняется тоже  в отдельное место.. Можно и прямо по месту сохранений, но их - МНОГО.

 

Принципиальная разница между двумя вариантами - либо операции с 64 битами, и время от старта игры или от изобретения персоналок, либо 32 бита "от загрузки".

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

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


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

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

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


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

Вообще-то обычный непись на оригинальном движке так не может.

Ему надо дернуть за npc:buy_supplies( ini, section )

 

И, да, есть, как всегда, флажок, говорящий, что оружие, назначенное preffered, он в торговле не показывает.

 

Ну а за пределами оригнала, тем более в солянке, тем боле в ее клонах - куча разного, которое постоянно что-то спавнит-удаляет.

 

 

upd: а вот что у движка действительно есть, так это поганая манера после смерти непися в непонятно какой момент пытаться удалить часть патронов, по непонятному принципу, но не обращая внимания на их существование к моменту собственно удаления.

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

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


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

Внезапно глупый вопрос: а где-то регулируется скорость стрельбы неписей из рпг ?

Что-то заметил, что они из него строчат как из пулемета...

 

Или только запретить "бесконечные боеприпасы", и спавн гранат вручную ?

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


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

ef_weapon_type

 

И что это даст ?

По идее, это надо неписям с анимациями что-то делать, чтобы перезаряжали какое-то длительное время, но хотелось бы "малой кровью".

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


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

В продолжение вопроса об гранатомете с пулеметной лентой:

 

can_be_unlimited = true в секции боеприпасов - это, часом, не оно ли ?

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


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

function get_key( npc )	-- Формирование ключа персонажа
	local npc_id = npc:id()
	local ovr = get_overrides( npc )
	local key = ( ovr and ovr.soundgroup ) or tostring( npc_id )

	if t_keys[ npc_id ] ~= key then
		local n = t_keys[npc_id]	-- если непись уже в другой группе - убираем
		if t_grps[n] then t_grps[n].num = t_grps[n].num - 1 end

		t_keys[npc_id] = key	-- и создаем новую
		local t = t_grps[key]
		if t then t.num = t.num + 1
			-- if npc:name() == "esc_tolik" then
			--	log( "info", "get_key, group: %s, n: %s (%s)", key, t.num, to_str( npc ) )
			-- end

		else t_grps[key] = { ["num"] = 1, ["idle"] = 0, ["upd_time"] = 0 }
			-- if npc:name() == "esc_tolik" then
			--	log( "info", "get_key, group: %s, single (%s)", key, to_str( npc ) )
			-- end
	end	end
	return key
end
как-то так.

 

А bar_bar_hunter прописано в script_sound.ltx, да.

Или в аналогах. ;)

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

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


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

look смотри.

 

Правда, там еще с "толяном" все очень смешно, да...

  • Согласен 1

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


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

Уже не помню, но сцена срабатывает через раз. Короче, там проще все закрасить было, чем отскребать. Что в итоге Петрович и сделал.

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


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

Вы удивитесь, но ЛЮБАЯ функция, вызываемая из логики будь то {=...} или %=...% получает в аргументах этого самого непися. Имя этого непися получается, внезапно, через npc:name()

 

А чтобы узнать, в каком смарте любой непись, то на это есть obj:smart_terrain_id() возвращающая id объекта smart_terrain либо 65535.

 

 

http://www.amk-team.ru/forum/topic/12926-sistema-alife-logika-povedeniia-igrovykh-obektov/?p=1019434 и далее. "На дворе шел 2017 год, а посреди степи стояло 2 метра бетонной стены с многочисленными вмятинами от голов модоразработчиков".

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

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


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

Так а в чем, собственно, проблема ?

 

level.add_call(), внутри - device:pause( true ), get_console():execute( "save " .. fn ), device:pause( false ) - не ?

 

Но вообще, просто не надо в момент сэйва создавать/удалять пачками объекты.

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

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


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

Лис - gulag_escape.script

	if type == "esc_stalker_camp" then
		return function(gulag)
			if has_alife_info("yan_provodnik_spawn") then
				return 1
			else
				return 0
			end
		end
	end
Остальные - идея та же, но в олспавне.

 

 

2 АndrewMor: Порги и Бесс - это опера такая. ;) Но с гендером здесь явно что-то не то.

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

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


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

Вылет, разумеется, будет, поскольку состояние 0 должно быть всегда.

Если что-то менять, то это там, где оно используется: выше в том же файле:

 

	if type == "esc_stalker_camp" then
		t = { section = "logic@esc_stalker_camp_provodnik",
			idle = 0,
			prior = 10, state = {0},
			online = false,
			in_rest = "", out_rest = "",
			predicate = function(obj_info)
			            	return obj_info.profile_name == "esc_provodnik"
			            end
		}
		table.insert(sj, t)
		t = { section = "logic@esc_stalker_fox",
			idle = 0,
			prior = 10, state = {0},
			in_rest = "", out_rest = "",
			predicate = function(obj_info)
			            	return obj_info.profile_name == "esc_fox"
			            end
		}
		table.insert(sj, t)

		t = { section = "logic@esc_stalker_camp_provodnik",
			idle = 0,
			prior = 10, state = {1},
			in_rest = "", out_rest = "",
			predicate = function(obj_info)
			            	return obj_info.profile_name == "esc_provodnik"
			            end
		}
		table.insert(sj, t)
		t = { section = "logic@esc_stalker_camp1",
			idle = 0,
			prior = 8, state = {1},
			online = false,
			in_rest = "", out_rest = "",
			predicate = function(obj_info)
			            	return obj_info.profile_name == "esc_fox"
			            end
		}
		table.insert(sj, t)
	end

 

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


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

надо по экспериментировать

Не надо экспериментировать. Надо просто понять: что делается, и зачем.

Например, state = {0}, online = false - "не выпускать Проводника".

Или state = {1}, online = false - спрятать Лиса.

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


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

Угадали. Единственно, что - если посмотреть варианты рядом, то там вообще нет ни каких online, и этого вполне достаточно.

  • Спасибо 1

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


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

Ну мы вроде ВСЕ знаем, зачем именно в _g.script пишут printf( "%s" ), не ?

По тому что если до этого дошло, то УЖЕ в морг. А причина, по которой дошло - может быть разной.

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


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

current_level_going_speed =

монстрам вообще нужна, или где-то в недрах есть дефолтная ?

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


Ссылка на сообщение
В 15.06.2017 в 23:20, Morder07 сказал:

Если я правильно понимаю,

146% авторов модов прибивают свое собственное время респавна гвоздями, и на эти строчки им плевать. Кроме того, у 145% время отсчитывается не от события, ПОСЛЕ которого должен случится респавн, и даже не интервалы проверки, а "время готовности замены свежему трупу".

То есть, чтоб как только кто-то помер - другой появился НЕМЕДЛЕННО на какой-то из соседних локаций, и спасибо что не на голову игроку.

 

В разделе есть темка, где расписываются подробности.

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


Ссылка на сообщение
В 24.06.2017 в 16:32, MGS сказал:

e_parent && e_entity

Аналогично, читайте соседние темки. Ни какой "уборщик трупов", удаления непонятно чего и даже замены движка Вам не помогут. (точнее, один из случаев подобного вылета лечится в ОГСЕ, но именно один из).

 

Кроме того, занятие "угадай игру", оно, конечно, увлекательно, но малопродуктивно.

Это Вы ведь про "минера" из win3.11 сейчас писали, да ? ;)

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


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

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