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

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

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

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

 

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

 

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

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

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

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

Здрасьте.

 

Сделал иконку состояния брони (набор статиков) с вызовом из 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 15.11.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 15.11.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, тебе очень хочется иметь ее в класс_регистратор ? И какой с этого профит ?

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

@AndreySol, я про таблицы значений clsid, на которых эти функции работают. Неудобно, когда они разбросаны по куче разных файлов. Лучше иметь одну большую таблицу, где всё это собрано.

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

Здрасьте.

 

Делаю счетчик хилок на HUD: создал группу скриптовых статиков, вывел через get_hud():AddDialogToRender(…) и записал в таблицу, чтобы статики не потерялись при уборке.

Проблема: если добавлять статики в таблицу через table.insert, то индексы получаются просто числами, и найти среди них нужный статик (для привязки текста или для удаления статика, если каких-то предметов 0) невозможно. Если добавлять статики в таблицу по секции предмета list[sect] = static, то случается безлоговый вылет через секунду после загрузки – так же, как при отсутствии хранения ссылок на статики. Что я упускаю?

 

Мой мод и оригинал счетчика: https://drive.google.com/open?id=16gX0BYqim6zB6aZnGLqSV-kMPMB3QjQC

 

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

Шпаргалка

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

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

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

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

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

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

Войти

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

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

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