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

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


Halford

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

место, откуда вызывается, выбрано, конечно, "гениально".

Но даже так:

function spawn_npc()

  local id = db.storage[0].pstor.esc_tol

  if id then

    local obj = alife():object( tonumber( id ) )

    if obj and obj:section_name() == "esc_tol" then

      if obj:alive() then return

      else alife():release( obj, true )

      end

    end

  end

  local obj = alife():create("esc_tol",vector():set(-240.34, -20.01, -157.63),14953,47)

  db.storage[0].pstor.esc_tol = tostring( obj.id )

end

 

Это если почувствовать себя Кашпировским, и предположить, что нужно восстановление непися при загрузке в случае, если тот помер.

 

Если неписей больше одного - прописывать свежесозданным sid, и далее проверять по списку.

Если нужен непись в конкретном месте - проверять это конкретное место.

 

Короче, смотрим шапку темы касательно телепатии и стука по батарее.

 

P.S. Аналогично - с "переселениями народов".

 

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


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

Актуально для везде, где тщательно не проверены все модели этих самых неписей. Плюс еще бы и в движки поглядеть надо на предмет необходимости НИ после такого.

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

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


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

Внезапно, логика есть у всего. Даже у огнетушителей.

А вот это самое "здесь так принято", с непременными путями в матерной нотации и прочими черточками и кракозябрами, регулярно дает неизменно превосходные результаты вида [error]Description   : any vertex in patrol path или вообще без лога, как на тех крысах, бегущих на ДТ, еще в 10й соли.

 

@nasar75, вот только проверяются стволы, как правило, именно на тот слот, который для актора. А потом неписи очень забавно себя ведут с разными анимациями.

 

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


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

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

В приведенном же примере - крысам, создававшимся в припяти прописывался вертекс, существующий на ДТ, и не существующий в баре. Забавно получалось, да...

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


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

В соли почему-то у всех моделек контролеров поломана атака рукой. Точно помню, что была, сейчас он просто какое-то странное движение плечами производит.

 

По рестрам - самоудаление в se_zones добавлено. Но это тоже не есть хорошо, ибо, во-первых, болтается в памяти до этого самого события, во вторых - еще и дополнительные операции со строками для всех этих болтающихся при каждой регистрации ну и собственно на локации.

 

Сейчас вот только на одной ДТ 41 рестриктор снес. И это еще не все.

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

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


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

С обычными как раз "не то".

Впрочем, в оригинале вроде всего один был, а сейчас этих "обычных" именно что куча разных. Возможно, не все из них одинаково полезны.

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

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


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

Ну а я, тогда, простите, где эту атаку рукой мог бы видеть, если ЧН еще на болотах и снес?

Только ТЧ. Махал он рукой вблизи. Без всяких скриптов.

 

Ну и анимация атаки должна быть в модельках, естественно, а не где-то "в движке".

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

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


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

В 2008ом?

Я, конечно, понимаю, что виндовс, компьютер и колесо тоже Пропер создал...

Изменено пользователем Dennis_Chikin
  • Смешно 2

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


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

Это примерно так:


local t_del = false

function dummy() end

function del_zones()
	if t_del then
		local obj
		for k, v in pairs( t_del ) do
			obj = sim:object( k )
			if obj and obj:name() == v then sim:release( obj, true ) end
		end
	end
	t_del = false
	return true
end

function se_restrictor:on_register()
	cse_alife_space_restrictor.on_register( self )
	if not self.init_flag then
		self.init_flag = true
		local ini = self:spawn_ini()
		if ini and ini:section_exist( "spawner" ) and ini:line_exist( "spawner","auto_dell" ) then
			local t = xr_logic.parse_condlist1( ini:r_string( "spawner","auto_dell" ) )
			if xr_logic.pick_section_from_condlist( db.actor, self, t ) ~= nil then
				if t_del then t_del[self.id] = self:name()
				else
					t_del = { [self.id] = self:name() }
					if sim then level.add_call( del_zones, dummy ) end
	end	end	end	end
end

 

  • Спасибо 1

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


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

alife():release() из самого себя не вполне корректно. Плюс кто-нибудь может этому рестриктору вписать тип, отличный от 0 или 3 со всеми вытекающими висяками неписей.

 

Впрочем, от вписывания его же в base_inr или base_outr все равно не спасает.

 

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

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


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

"по кругу" - на текущей локации.

 

Впрочем, имеет смысл удалять его банально по имени/sid в числе прочих операций, когда реально становится не нужен, точно так же, как в ходе прочих операций создается. Проверка ВСЕХ существующих на наличие каких-то строк в кастомдате при каждой загрузке игры - действительно, перебор.

 

Как пример - временная мера с удалением всего ненужного при переходе на янтарь с ДТ -

...
for i, v in ipairs( {	-- более не нужный мусор на ДТ
		"rostok_space_restrictor_0001", "rostok_sniper_space_restrictor_01",
		"rostok_volkodav_talking", "rostok_space_restrictor", "rostok_start_killer_combat",
		"bar_help_professor_restrictor", "rostok_cheat_sound_restrictor",
		"ros_zone_flame_small_0005", "ros_zone_flame_small_0006", "ros_zone_flame_small_0007",
		"ros_zone_flame_small_0008", "ros_zone_flame_small_0010", "zone_flame_0000",
		"zone_flame_0001", "zone_flame_0002", "rostok_zombied_spawner",
		"rostok_sniper_pda_restrictor", "rostok_heli_scene_start_restr",
		"rostok_start_killer_combat", "rostok_chase_restrictor", "rostok_freedom_attack_zone",
		"rostok_scientist_guard_restrictor", "rostok_space_restrictor_0002",
		"rostok_volkodav_band_mapspot", "rostok_kruglov_finish_mapspot",
		"rostok_volkodav_fire_sound", "rostok_volkodav_fire_sound_end",
		"rostok_sniper_space_restrictor_01_0000", "rostok_chase_reastictor_1"
	  } ) do
		v = sim:object( v )
		if v then sim:release( v, true ) end
	end
...

с вызовом через

    for i, v in ipairs( t_info ) do

        if v[1] and ( not ( v[4] and actor:has_info( v[4] ) ) ) then

 

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

 

 

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

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


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

1,2,4,5 - такое должно удаляться только в случае, если не успело войти в онлайн (и не пытается "вот прям счаз"). То есть, грубо говоря, лучше, когда находимся на другой локации.

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


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

OUT и IN. Прописывать - можно, удалять в онлайне - нельзя.

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

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


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

Почитать тему внимательно начиная с первого поста.

в файле character_desc, внезапно, и должны быть только шаблоны для неписей. Очевидно, что для зверья ни имен, ни биографий, ни принадлежности к группировкам, ни костюмов, ни диалогов быть не не должно.

 

По остальным пунктам - аналогично. Без понимания, что мы вообще хотим сделать - невозможно.

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


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

Ну, ошибка здесь собственно в том, что каждые 20ms зачем-то вызывается проверка того, что требуется один раз при загрузке.

 

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

Возможно, предполагается еще наличие функции, которая вызывается через некоторое время после зомбоспавна, и снова делает corspoff = true (а заодно вызывает мегалаг, пока тот сякоуборщик перебирает все объекты в игре, чтоб было нелегко и нерадостно).

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

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

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


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

Где там кто "посередине подфункций"?

 

Хотя, конечно, если в игре нет табунов в 1000 зомбей, я бы вставил куда-нибудь в net_spawn()

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


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

Если руки шаловливые не поковырялись - remove_gulag( true ), и добавить сохранение/загрузку флага.

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


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

remove_gulag() вызывается штатно для каждого смарта, когда в нем никого нет или надо очистить. Флаг - первоначально отладочная фича, но она работоспособна, если ничего не поломано.

А вообще про взаимоотношения неписей со смартами, чувствую, пора статью писать. Что-то многовато последнее время однотипных проблем...

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


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

{условие} вероятность создания при каждом апдейте, вероятность при невыполнении условия.

 

Я вроде эту часть тоже разбирал подробно.

  • Спасибо 1

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


Ссылка на сообщение
(изменено)
function rostok_chase3()
    if not rostok_strn3 then rostok_strn3 = alife():object( "bar_freedom_chasers_attack" ) end
    local g = rostok_strn3 and rostok_strn3.gulag
    if g and g.population_comed >= 1 then return false
    elseif actor:dont_has_info( "bar_ambush_dead" ) then
        actor:give_info_portion( "bar_ambush_dead" )
    end

    return true
end

 

Впрочем, и этот пост, как и соседнюю тему, все равно никто читать не будет. Не для этого на сей форум заходят, чтобы что-то там читать.

 

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

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


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

AMK-Team.ru

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