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

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

14 часов назад, _Sk8_AsTeR_ сказал:

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

 

Думаю, надо изменить код так, чтобы название смарт-террейна вообще не фигурировало в скрипте. Указывать только 

 

flame = "zone_flame_small_0001", light = "lights_camp_fire_omni_r1_r2_0001", а их названия взять из распакованного спавна.

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

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

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

@Norman Eisenherz@Fenrir02 верно говорит - исключи из цикла актера, начинай перебирать с 1

for i = 1, 65534 do...

  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@naxac Просмотрел, что кроме шага еще и отсчет с 1 начинается. В таком виде работает даже без задержки запуска.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

Здрасьте.

 

Сделал иконку состояния брони (набор статиков) с вызовом из function actor_binder:update(delta): на двух старых сейвах статик загружается и успешно работает, еще примерно на 10 старых сейвах и в новой игре не загружается, а при попытке сохранения и перезагрузки игры приводит к вылету с одним из двух приведенных ниже сообщений. Методом исключения удалось выяснить, что статикам мешает работать уборщик – мешает даже не перебором объектов на сервере, а конкретно той частью, которая удаляет бесхозное оружие. Добавил к запуску уборщика условие if device().precache_frame <= 1 – проблема разрешилась, но все-таки хочется знать, что вызывало эту проблему.

ТЧ 1.0006, без глобальных модов.

https://drive.google.com/open?id=1Yp4s8CvySYUsv0j2EolZYWdAan0JHsfN

Spoiler

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:411: attempt to concatenate field '?' (a nil value)

 

для справки – указанная строка [bind_stalker.script] (с модами): get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])


Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...alker shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, это у тебя где-то что-то виснет в биндере актера, и потом бьётся сохранение. Загружая его, получаешь этот вылет.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий
6 часов назад, Norman Eisenherz сказал:

attempt to concatenate field '?'

naxac дело говорит, я ловил такую дрянь, в другой ситуации. Тогда у меня нет-пакет портился из-за негодной адаптации, а я то думал, что там с загрузкой моего difficulty...

Здесь могла быть ваша реклама.

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

@naxac Можно ли подробнее? Куда копать?

Потестил еще: условие precache_frame привело к тому, что теперь уборщик не срабатывает на текущей локации.

@mole venomous Нет-пакеты я точно не трогал.

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, вот в  этом цикле


						for j = 1, #bodies do
							if del.position:distance_to(bodies[j].position) > 5 then
								alife():release(del)
							end
						end

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

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

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

@Norman Eisenherz

Вот этоl

local act = db.actor

стоит перенести из глобальной области скрипта в функцию, где объект актера используется.

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

@naxac Проверил еще раз уборщик – старая логика действительно должна была сбоить: проверяется расстояние до 1-го трупа из списка, объект (возможно) удаляется, потом проверяется расстояние от этого же объекта до 2-го, 3-го трупа и т. д., и тот же объект снова удаляется (по крайней мере, делается такая попытка).

Оператор break можно поставить только на негативное условие: если при переборе расстояний найдено значение меньше 5 , то закончить перебор для данного объекта и перейти к следующему, в противном случае удалить объект и перейти к следующему. Не до конца понимаю, как это правильно оформить, чтобы проверка не стопорилась на первом же значении > 5.

Пошел другим путем: создать таблицу расстояний от текущего объекта до всех трупов, взять минимум, сравнить его с заданной величиной (5) и удалить, если этот минимум больше.

Spoiler

        if next(wpn_near) ~= 0 then
            for i = 1, #wpn_near do
                local del = wpn_near[i]
                if del.position:distance_to(act:position()) > 10 then
                    if next(bodies) ~= 0 then
                        local distance = {}
                        for j = 1, #bodies do
                            local dist = del.position:distance_to(bodies[j].position)
                            table.insert(distance, dist)
                        end

                        table.sort(distance)
                        if distance[1] > 5 then
                            alife():release(del)
                        end
                    else
                        alife():release(del)
                    end
                end
            end
        end

 

 

@AndreySol Если функций несколько, лучше обозначать такие переменные в каждой из них или в общей области?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, на мой взгляд - сильно "замудрил".

Попробуй так:

	for k, wpn in pairs(wpn_near)do
		if wpn.position:distance_to(act:position()) > 10 then
			if #bodies ~= 0 then
				for k, bod in pairs(bodies) do
					if wpn.position:distance_to(bod.position) > 5 then
						alife():release(wpn)
						break
					end
				end
			else
				alife():release(wpn)
			end
		end
	end

 

S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)

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

@WinCap Кроме способа перебора (ну и еще остановки), это опять старая логика: "если до первого трупа в списке > 5 метров, то удалить оружие". Должно быть "если до всех трупов на локации > 5 метров, тогда удалять".

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz, тогда так:

			if #bodies ~= 0 then
				local del = true
				for k, bod in pairs(bodies) do
					if wpn.position:distance_to(bod.position) < 5 then
						del = false
						break
					end
				end
				if del then alife():release(wpn) end
			else

 

  • Согласен 1

S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)

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

Здрасьте.

 

Можно ли без правок движка изменить формат счетчика оставшегося времени для заданий? Единственный подходящий файл – [scripts\ask_manager.script], но сообщения в явном виде или его фрагментов (ui_st_time_remains, ui_st_days и ui_st_hours) в нем нет, как и ссылки на блок rem_time из файла [config\ui\job_item.xml].

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

А никто ещё не переписывал скрипт  class_registrator так, чтобы в нем хранились все таблицы с данными для регистрации классов и классификации объектов?

В оригинале данные просто используются один раз при старте игры и не хранятся нигде, что неудобно.

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

@AndreySol, данные, необходимые для любых функций классификации (IsMonster и тому подобных). Туда же можно сохранить значение stype (modules.stype_чтонибудь). Да много всего можно там хранить, чтобы каждый раз не делать свою табличку для классификации.

Ссылка на комментарий
6 часов назад, Полтергейст сказал:

IsMonster

Ну так эта ф-ция объявлена в _G.script, тебе очень хочется иметь ее в класс_регистратор ? И какой с этого профит ?

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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