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

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

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...

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


Подарки

  • 2
  • 3
  • 2
  • 5
  • Ссылка на комментарий

    @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

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