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

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


Halford

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

dsh, а в какое место сию проверку поместить

 

local sobj = alife():create()

sobj:brain():update()

выведи в лог sobj:smart_terrain_id()

 

в функцию спавна, прямо в тело цикла?

 

for s = 1, 3 do
alife():create("dog_weak",vector():set(128.0493927002,16.724941253662,63.131950378418),1144984,4025)
end

 

Я просто со скриптами на вы, надеюсь, пока.

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

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

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


Ссылка на сообщение
может, ты забыл указать в точках путей количество мобов, которые будут записаны на работу этого пути? В general_lair это читается из way_point'ов. И еще вроде какие-то параметры туда пишутся.

Точку одну указал, совпадающую с центром смарта:

 

[pred_dog_home_1]

points = p0

p0:name = name00

p0:position = 132.74263000488,22.745307922363,6.7319641113281

p0:game_vertex_id = 4026

p0:level_vertex_id = 1152786

 

 

Смотрел на примере кровососа у элеватора на Кордоне. Может, их три надо было указать?

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

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

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


Ссылка на сообщение
capacity в твоем гулаге - 3, а по умолчанию на каждую точку "home" в general_lair назначается 10 работ. Попробуй в точке явно указать количество: p0:name = name00|count=3

Попробую.

 

 

 

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

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

В общем, я создал смарт и хочу, чтобы мобы спавнились в другой точке, но шли бы каждый на свою работу. Как им тогда way-point правильно прописать?

 

И как тогда правильно их спавнить, указав кастом-дату?

Не в первый раз сталкиваюсь с таким вылетом:

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description :

[error]Arguments : LUA error: ...lishing\stalker-shoc\gamedata\scripts\ph_door.script:88: C stack overflow

 

 

Возникает редко и в разных ситуациях. Конкретно этот вылет возник при переходе из Припяти на Радар. Причем здесь вообще ph_door.script? Ни в Припяти, ни на Радаре никаких дверей нету.

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

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

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


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

dsh, написал, как ты и сказал, только log2 заменил на printf. Вот кусок лога:

 

! Unknown command: [smart_terrain_pred_dog]_register_called_obj=dog_weak51725_gulag_type=general_lair
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_object_setup_offline:_obj=dog_weak51725
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_setJob:_obj=dog_weak51725_job=1_logic@pred_dog_home_1
* Log file has been saved successfully!
! Unknown command: ***__pred_dog_--_State:_0_--_Total_population:_1/3_--_Non_exclusive_population:_1/3
* Log file has been saved successfully!
! Unknown command: My_smart:_dog_weak51725:_smart_terrain_id_=_38827
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_register_called_obj=dog_weak51727_gulag_type=general_lair
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_object_setup_offline:_obj=dog_weak51727
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_setJob:_obj=dog_weak51725_job=1_logic@pred_dog_home_1
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_setJob:_obj=dog_weak51727_job=7_logic@pred_dog_home_1
* Log file has been saved successfully!
! Unknown command: ***__pred_dog_--_State:_0_--_Total_population:_2/3_--_Non_exclusive_population:_2/3
* Log file has been saved successfully!
! Unknown command: My_smart:_dog_weak51727:_smart_terrain_id_=_38827
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_register_called_obj=dog_weak51729_gulag_type=general_lair
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_object_setup_offline:_obj=dog_weak51729
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_setJob:_obj=dog_weak51727_job=1_logic@pred_dog_home_1
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_setJob:_obj=dog_weak51729_job=7_logic@pred_dog_home_1
* Log file has been saved successfully!
! Unknown command: [smart_terrain_pred_dog]_gulag:_setJob:_obj=dog_weak51725_job=6_logic@pred_dog_home_1
* Log file has been saved successfully!
! Unknown command: ***__pred_dog_--_State:_0_--_Total_population:_3/3_--_Non_exclusive_population:_3/3
* Log file has been saved successfully!
! Unknown command: My_smart:_dog_weak51729:_smart_terrain_id_=_38827
* Log file has been saved successfully!

 

 

По всему, собачки берутся по этот смарт, что радует. Значит, точка смарта должна совпадать с точкой спавна собак, так надо понимать.

 

Спасибо за наводку!

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

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

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


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

@dsh, ну мне и надо, чтобы они на работу вышли. А заспавнил примерно метрах в шестидесяти.

 

Но возник еще вопрос: почему при подсчете численности гулага выдается 0? Считал так:

 

local text = xr_gulag.getGulagPopulation("pred_dog")
news_manager.send_tip(db.actor, text, nil, nil, 30000)

 

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

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


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

 

 

Дошедшими на работу считаются те, кто находится в радиусе job_position_threshold от первой точки пути работы. Если у тебя не переделанный каким-то образом xr_gulag.

xr_gulag не переделан никоим образом. А job_position_threshold прописан 120, вроде бы в радиус попадает. Есть еще функция getGulagPopulationComed, считающая только пришедшие персонажи, но и она выдает 0. Почему так?


dsh, ты оказался прав. Функция выдавала количество дошедших до работы мобов, потому и 0. Другая функция выдавала общее население смарта - 3. Но фишка в том, что если всех собак перебить, население смарта все равно 3. А мне надо знать количество живого населения. Как такое сотворить?

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

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


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

Напомните, кто-нибудь плиз, как прикрутить логику к заспавненному скриптом мобу или НПС. Видел конструкцию раньше, буквально пять строк, но совершенно не помню, как это сделать. Буквально, как к заспавненному скрипто мобу прикрутить смарт-террейн.

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

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


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

naxac, а примерчиком не поделитесь? Нужно именно прикрутить смарт-террейн.

 

_Val_, дело в том, что секция [smart_terrains], прописанная в файл логики, оттуда не читается.

 

Я пробовал прикрутить логику, вроде получилось. А вот со смартом - беда..

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

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


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

 

 

проще и надежнее всего в секции непися указать файл с custom_data. А в этом файле уже писать все, что нужно.

А как конкретно? Ну или где такое подсмотреть?

 

А если придется много разных НПС заспавнить с разными смартами - для каждого свою секцию создавать нужно, так выходит?

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

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


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

 

 

Т.к. ты не программист

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

 

Сорри за оффтоп.


naxac, dsh: огромное вам спасибо за участие, камрады, всё получилось!!! Вроде мелочь, а приятно, что что-то смог, пусть и с вашей помощью.

 

Модераторы, не сочтите за сильный оффтоп, но даже с read-only я согласен.

  • Спасибо 1

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

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


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

Опять прошу помощи. Появляюсь на локации, запрашиваю xr_gulag.getGulagPopulation("pred_flesh_plant") - выдает 0. Подхожу ближе к смарту, опять запрашиваю - выдает 5, как и должно быть.

 

Собственно, вопрос: как, появившись на локации, узнать количество населения смарта, даже если он далеко и находится в оффлайне?

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

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

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


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

dsh, попробовал, все равно выдает 0.

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

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


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

@dsh, если написать

local population = strn.gulag:get_population()

news_manager.send_tip(db.actor, population, nil, nil, 30000)

 

то ничего не возвращает, сообщение не выдается.

 

А если написать

 

if population == 0 then

news_manager.send_tip(db.actor, "любой текст", nil, nil, 30000)

end

 

то как раз "любой текст" и выдается на экран в теле сообщения.
 

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

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


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

 

 

send_tip(db.actor, tostring(population), nil, nil, 30000)

Так мне ж не сообщение выдать нужно, а именно число знать. И если конструкция

 

if population == 0 then

  news_manager.send_tip(db.actor, "любой текст", nil, nil, 30000)

end

 

работает, значит, population как раз и равна нулю, что не есть хорошо.


 

 

Попробуй так: send_tip(db.actor, tostring(population), nil, nil, 30000)

Пробовал, выдает 0.

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

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


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

 

 

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

Это я уже и сам понял...

 

 

 

Смотри в сторону smart_terrain.script, он как я понимаю обрабатывает смарт и в офф-лайне.

Спасибо, буду пробовать.

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

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


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

 

 

кстати есть ф-ция se_smart_terrain:stat(), а в ней local pop = self.gulag:get_population()

Я так и не понял, как мне эту функцию вызвать, а примеров ее вызова не нашел.

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

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


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

 

 

У меня выдает 14(у меня в нем действительно 14 душ), вызывал ф-цию на Свалке, т.е. Кордон стопудово офф-лайн, значит это вроде то что тебе нуно...

Огромное спасибо, вечерком попробую.

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

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


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

А как же тогда получить живое население гулага в оффлайне? Например, можно ли использовать (и как) функцию

 

function gulag:get_population()

 return self.population

end

 

из xr_gulag?

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

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

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


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

 

 

в task_manager для этого используется get_population_comed():

Да вроде не работала, когда смарт в оффлайне, выдавала живое население 0. В онлайне - все было нормуль.

 

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

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

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


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

Выручайте, камрады.

Спавню сталкера-зомбированного (это важно) такой конструкцией, чтоб логику прикрутить:

 

local obj = alife():create("stalker_zombied",vector():set(132.84954833984,8.5610275268555,-19.224378585815),1152755,4019)
local params=amk.read_stalker_params(obj)
params.custom="[logic]\ncfg = scripts\\zombied1.ltx"
amk.write_stalker_params(params,obj)

 

 

Сама логика:

 

[logic]
active = walker
on_death = death

[walker]
path_walk = pred_zombied_path1
sound_idle = state

[death]
on_info = %+jup_und_zombied1_death%

 

 

Сталкер спавнится, но спавнится нейтралом, а не зомбированным. Собсно, вопрос: почему? И как сие исправить?

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

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

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


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

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