Модостроение. Редактирование и создание скриптов
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Редактирование и создание скриптов Редактирование и создание скриптов на языке LUA Если у вас появились вопросы по применению скриптов в игре. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Code Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Вс, 23.08.2015, 11:33 | Сообщение # 661 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, вот так попробуй
Код function test_anomaly_spawn() local anomaly = { "sgm_zone_mine_electric_weak", "sgm_zone_mine_gravitational_weak", "sgm_zone_mine_streem_weak", "sgm_zone_mine_steam_weak", "sgm_zone_mine_thermal_weak" } for i = 1, 100 do local position = vector():set( 0, 0, 0 ) while ( true ) do local right_position = true local pos_r_x = -330.95910644531+math.random(-100,100) local pos_r_z = 344.20275878906+math.random(-100,100) local pos = vector():set( pos_r_x, 0, pos_r_z ) local vert = level.vertex_id( pos ) position = level.vertex_position( vert ) if ( position.x <= -292 and position.x >= -293 ) and ( position.y <= -20 and position.y >= -21 ) and ( position.z <= -266 and position.z >= -267 ) then right_position = false end if right_position == true then break end end local section = anomaly[math.random(#anomaly)] sgm_packet.create_anomaly_2( section, 4, position.x, position.y, position.z, 289384, 121 ) end end
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 23.08.2015, 16:25 | Сообщение # 662 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| makdm,
Спасибо за помощь. Аномалии заспавнились на сетке. Просьба прояснить один вопрос.
Что дает абзац:
if (position.x <= -292 and position.x >= -293) and (position.y <= -20 and position.y >= -21) and (position.z <= -266 and position.z >= -267) then right_position = false end
Почему числа именно такие? В квадрат спавна эта точка не попадает. Если я задам другой квадрат спавна, то какие числа нужно будет выставлять?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Вс, 23.08.2015, 22:20 | Сообщение # 663 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 ( ) Почему числа именно такие? Так работает движок. Когда функция level.vertex_position( vert ) определяет, что вертекс лежит не на АИ-сетке, то она возвращает позицию вертекса, которая и лежит в пределах, которые проверяются в функции. Работает для любой локации и не зависит от координат, которые вы задаёте.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 10.09.2015, 12:19 | Сообщение # 664 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
В аддоне Время Альянса есть функция
[cut=Функция] function send_message(actor, npc, p) --' p[1] - id текста сообщения из папки text\rus --' p[2] - story_id сендера --' p[3] - id имени сендера из папки text\rus --' p[4] - длительность показа сообщения в миллисек, по-умолчанию 5 секунд. --' =send_message(p[1]:p[2]:p[3]:p[4]) - вызов функции if p == nil then abort("Wrong parameters in 'send_message' function!!!") end if p[4] == nil then p[4] = 5000 end local news_text = game.translate_string(p[1]) local news_caption = game.translate_string(p[3]) local showtime = p[4] local sender = get_story_object(p[2]) local texture = "ui_iconsTotal_grouping" if sender then texture = sender:character_icon() end xr_sound.set_sound_play(db.actor:id(), "pda_tips") db.actor:give_game_news(news_caption, news_text, texture, 0, showtime, 0) end[/cut]
Скопировал её в чистый Зов Припяти. Попробовал выдать тестовую СМС от Бороды. Функция сработала. Но показывается дефолтная иконка персонажа.
Можно ли доработать функцию, чтобы показывалась иконка персонажа-отправителя? Что и в каких файлах нужно поправить?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 10.09.2015, 12:51 | Сообщение # 665 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Ничего править не нужно, функция позволяет выводить иконку персонажа: --' p[1] - id текста сообщения из папки text\rus --' p[2] - story_id сендера --' p[3] - id имени сендера из папки text\rus --' p[4] - длительность показа сообщения в миллисек, по-умолчанию 5 секунд. --' =send_message(p[1]:p[2]:p[3]:p[4]) - вызов функции local sender = get_story_object(p[2]) if sender then texture = sender:character_icon() end db.actor:give_game_news(news_caption, news_text, texture, 0, showtime, 0)
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Пт, 11.09.2015, 09:24 | Сообщение # 666 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата denis2000 ( ) Ничего править не нужно, функция позволяет выводить иконку персонажа
Должна. Но не выводит. Может, я что-то не так делаю?
Вызов сообщения.
%=send_message(zat_a2_stalker_barmen_test:zat_a2_stalker_barmen:zat_a2_stalker_barmen_name:30000)%
[cut=Секции Бороды]
[zat_a2_stalker_barmen]:stalker $spawn = "respawn\zat_a2_stalker_barmen" character_profile = zat_a2_stalker_barmen story_id = zat_a2_stalker_barmen
<specific_character id="zat_a2_stalker_barmen" team_default="1"> <name>zat_a2_stalker_barmen_name</name> <icon>ui_inGame2_Boroda</icon> <map_icon x="1" y="0"> </map_icon> <bio>Опытный сталкер. Детальная информация отсутствует.</bio> <class>zat_a2_stalker_barmen</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_02\stalker\</snd_config> <rank>60</rank> <reputation>300</reputation> <money min="480000" max="480000" infinitive="1" /> <visual>actors\stalker_neutral\stalker_neutral_3_face_1</visual> <supplies>
[spawn] \n wpn_sig550 \n ammo_5.56x45_ap = 1 \n wpn_beretta \n ammo_9x19_fmj = 1 \n grenade_rgd5 = 3 \n
#include "gameplay\character_items_3_nl.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs_3.xml" </supplies> #include "gameplay\character_criticals_4.xml"
<start_dialog>zat_a2_stalker_barmen_start_dialog</start_dialog>
<actor_dialog>zat_a2_linker_b14_quest_init</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_done</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_strange_item</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_sell_artefact</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_wrong</actor_dialog> <actor_dialog>zat_b57_barmen_about_bloodsucker_lair_dialog</actor_dialog> <actor_dialog>zat_b57_barman_reward_dialog</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor1</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor2</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor3</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor4</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b7_actor_start</actor_dialog> <actor_dialog>zat_b22_barmen_b5_daring_quest_stalkers</actor_dialog> <actor_dialog>zat_b22_barmen_about_after_quest_b5_dealer_actor4</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_about_new_detector</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_about_compass</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_compass_give_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_compass_double_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_compass_revert_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_take_business_actor_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_army</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_about_sci_guards</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_about_sci_helpers</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_about_halfart_jup_b1</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_oasis_art_sell</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b52_about_snag</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b52_about_nimble</actor_dialog> <actor_dialog>zat_a2_linker_b29_actor_info</actor_dialog> <actor_dialog>zat_a2_linker_b29_actor_get_adv_task</actor_dialog> <actor_dialog>zat_a2_linker_b29_actor_give_adv_task</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_take_money_actor_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>[/cut]
На экране вижу это. Иконки Бороды нет.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Пт, 11.09.2015, 18:05 | Сообщение # 667 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, дело в том, что движковый метод character_icon() работает только с клиентским классом объекта, т.е. возвращает иконку, если объект находится он-лайн. Если у тебя Борода в офф-лайн, то будет выводиться дефолтная иконка.
Для вывода иконки Бороды, если он офф-лайн, необходимо явно указывать его иконку в скрипте.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 27.09.2015, 14:36 | Сообщение # 668 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день.
Подключил Кордон к чистому ЗП. Написал такой рестриктор.
[cut=Логика][logic] active = sr_idle@start
[sr_idle@start] on_actor_inside = sr_idle@task_1 %=send_message(st_esc_b1_monster_attack_start_sms:esc_b1_stalker_commander:esc_b1_stalker_commander_name:20000) +esc_b1_monster_attack_task_start =give_task(esc_b1_monster_attack_task)%
[sr_idle@task_1] on_game_timer = 30 | sr_idle@task_2
[sr_idle@task_2] on_info = {-esc_b1_monster_attack_start_save} %+esc_b1_monster_attack_start_save =scenario_autosave(st_save_esc_b1_monster_attack_start)% on_info2 = {+esc_b1_monster_attack_start_save} sr_idle@task_3
[sr_idle@task_3] on_game_timer = 95 | sr_idle@task_4 %=set_counter(esc_b1_monster_attack_count:0)%
[sr_idle@task_4] on_info = {=counter_greater(esc_b1_monster_attack_count:7)} sr_idle@task_8 %=send_message(st_esc_b1_monster_attack_final_sms:esc_b1_stalker_commander:esc_b1_stalker_commander_name:20000) +esc_b1_monster_attack_task_final%, sr_idle@task_5
[sr_idle@task_5] on_info = {~55} sr_idle@task_6 %=create_squad(esc_b1_monster_attack_1_squad:esc_b1)%, sr_idle@task_6 %=create_squad(esc_b1_monster_attack_2_squad:esc_b1)%
[sr_idle@task_6] on_game_timer = 65 | sr_idle@task_7
[sr_idle@task_7] on_info = {!squad_exist(esc_b1_monster_attack_squad)} sr_idle@task_4 %=inc_counter(esc_b1_monster_attack_count:1)%
[sr_idle@task_8][/cut]
В квесте используется переменная esc_b1_monster_attack_count, равная числу убитых сквадов. Планирую добавить счетчики числа убитых игроком и погибших сталкеров-союзников.
Возникла пара вопросов. Как в скрипте выдачи награды за квест проверить текущее значение счетчика для вычисления наградной суммы? В СГМ можно было воспользоваться кодом типа.
[cut=Код]function esc_b1_monster_attack_task_complete(actor,npc) local reward=1000 if sgm_functions.read_variable("esc_b1_monster_attack_death_all_count") ~= nil then reward=reward + sgm_functions.read_variable("esc_b1_monster_attack_death_all_count")*300 end if sgm_functions.read_variable("esc_b1_army_death_all_count") ~= nil then reward=reward - sgm_functions.read_variable("esc_b1_army_death_all_count")*500 end if reward>0 then dialogs.relocate_money(npc,reward,"in") end if reward>1500 then give_random_treasure() give_secret(1) end give_reward("medkit_army",2) give_reward("ammo_5.45x39_ap",2) end[/cut]
За каждого убитого врага платят по 300. За погибшего союзника штраф 500. Как аналогичную по смыслу функцию написать в чистом ЗП?
Можно ли удалить переменные после завершения квеста? Чтобы они не висели в сохранениях. Какой функцией можно воспользоваться?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Вс, 27.09.2015, 15:33 | Сообщение # 669 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, вот так будет для ЗП, правда функции give_reward, give_random_treasure, give_secret нужно добавить в _g.script
Код function esc_b1_monster_attack_task_complete(actor,npc) --Награда в деньгах по дефолту local reward_0 = 1000 --Читаем счётчики и вычисляем награду local reward_1 = xr_logic.pstor_retrieve( actor, "esc_b1_monster_attack_death_all_count", 0 ) local reward_2 = xr_logic.pstor_retrieve( actor, "esc_b1_army_death_all_count", 0 ) local reward = reward_0 + reward_1*300 - reward_2*500 --Выдаём награду в деньгах и тайниках if reward > 0 then dialogs.relocate_money(npc,reward,"in") end if reward > 1500 then give_random_treasure() give_secret(1) end --Выдаём награду в натур продуктах give_reward("medkit_army",2) give_reward("ammo_5.45x39_ap",2)
-- Удаляем счётчики db.storage[ actor:id() ].pstor[ "esc_b1_monster_attack_death_all_count" ] = nil db.storage[ actor:id() ].pstor[ "esc_b1_army_death_all_count" ] = nil
end
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 27.09.2015, 19:08 | Сообщение # 670 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| makdm,
Попробовал предложенную функцию. В таком виде.
[cut=Код]function esc_b1_monster_attack_task_reward(actor,npc) local reward_1 = 3000 local reward_2 = xr_logic.pstor_retrieve(actor,"esc_b1_monster_attack_count_2",0) local reward_3 = xr_logic.pstor_retrieve(actor,"esc_b1_monster_attack_count_3",0) local reward = reward_1 + reward_2*300 - reward_3*500 if reward > 0 then dialogs.relocate_money(npc,reward,"in") end give_reward("medkit_army",2) give_reward("ammo_5.45x39_ap",2) end[/cut]
Результат нулевой. Получаю 3000. Такое впечатление, что параметры esc_b1_monster_attack_count_2 и esc_b1_monster_attack_count_3 не читаются или обнуляются.
В квесте три параметра.
esc_b1_monster_attack_count_1 -- число сквдов монстров, уничтоженных в квесте. Параметр точно не равен нулю. Об этом можно судить по нормальной работе рестриктора квеста. Квест обновляется при уничтожении 7 сквадов.
esc_b1_monster_attack_count_2 -- число убитых игроком монстров. esc_b1_monster_attack_count_3 -- число погибших сталкеров.
Пробовал вставлять в наградную функцию esc_b1_monster_attack_count_1, число заведомо не равное нулю. Результат один. Параметры не читаются.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Пн, 28.09.2015, 06:54 | Сообщение # 671 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 ( ) Такое впечатление, что параметры esc_b1_monster_attack_count_2 и esc_b1_monster_attack_count_3 не читаются или обнуляются. А где и как пишутся эти параметры?
Обычно их пишут в логике НПС, где при смерти НПС срабатывает счётчик. Например для сталкеров:
on_death = death
[death] on_info = {=killed_by_actor} %=inc_counter(esc_b1_monster_attack_count_3)%
Терпение...... И все получится!
Сообщение отредактировал makdm - Пн, 28.09.2015, 07:08 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Пн, 28.09.2015, 09:43 | Сообщение # 672 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата makdm ( ) А где и как пишутся эти параметры?
Счетчик погибших сквадов. В рестрикторе квеста.
[sr_idle@task_7] on_info = {!squad_exist(esc_b1_monster_attack_squad)} sr_idle@task_4 %=inc_counter(esc_b1_monster_attack_count_1:1)%
Счетчик погибших монстров. Вызывается из логики монстров.
on_death = mob_death
[mob_death] on_info = {=killed_by_actor +esc_b1_monster_attack_task_start -esc_b1_monster_attack_task_final -esc_b1_monster_attack_task_fail} %=inc_counter(esc_b1_monster_attack_count_2:1)%
Счетчик погибших сталкеров. Работает из логики ствлкеров.
on_death = death
[death] on_info = {+esc_b1_monster_attack_task_start -esc_b1_monster_attack_task_final -esc_b1_monster_attack_task_fail} %=inc_counter(esc_b1_monster_attack_count_3:1)%
Я в предыдущем посте писал, что вставлял в наградную функцию первый счетчик. Число погибших сквадов. Он заведомо не равен 0. Рестриктор переключается на "получить награду" после отстрела 7 сквадов монстров. Так что первый счетчик работает верно. И он ненулевой. Но и с ним наградная функция не работает.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Пн, 28.09.2015, 13:20 | Сообщение # 673 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, тогда откуда вызывается функция esc_b1_monster_attack_task_reward ??? Если из диалога, то естественно всё будет равно нулю.
Если функция вызывается из диалога то должна быть такой:
function esc_b1_monster_attack_task_reward( first_speaker, second_speaker )
local reward_1 = 3000 local reward_2 = xr_logic.pstor_retrieve( db.actor,"esc_b1_monster_attack_count_2",0 ) local reward_3 = xr_logic.pstor_retrieve( db.actor,"esc_b1_monster_attack_count_3",0 ) local reward = reward_1 + reward_2*300 - reward_3*500 if reward > 0 then dialogs.relocate_money( first_speaker, reward, "in" ) end give_reward("medkit_army",2) give_reward("ammo_5.45x39_ap",2) end
Если награда не будет выдана, то замени first_speaker на second_speaker
dialogs.relocate_money( second_speaker, reward, "in" )
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 03.10.2015, 21:35 | Сообщение # 674 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
В чистом ЗП сделал квест на защиту базы от монстров. После завершения квеста вокруг валялось много убитых мутантов.
Такое впечатление, что трупы монстров не убираются. Делал сейвы, бегал на другой конец локации. Монстры валяются, как были.
Зов Припяти чистый. Файлы, отвечающие за уборку трупов, никак не правились.
Как улучшить уборку трупов монстров?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Сб, 03.10.2015, 22:51 | Сообщение # 675 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, в чистом ЗП уборка трупов монстров не предусмотрена разрабами. Для уборки трупов нужно открыть файл bind_monster.script и в методе generic_object_binder:death_callback(victim, who)
написать
release_body_manager.get_release_body_manager():moving_dead_body(self.object)
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
|