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

Скриптование


Svoboда

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

Возникал вот такая проблема:

На локации "Предбанник" в подвале, где арсенал, вместо одного из декоративных калашей поставил G36C. Поставил не как муляж, а как оружие. Прописал ему полный магазин, оптику и глушак. Если стоят обвесы, то при переходе ствола в on-line - вылет без лога. Второе, если убрать обвесы вылета нет, но когда беру ствол у него получается большой вес и при разрядке вместо 30 патронов девять-с-хреном тысяч. Где я мог накосячить? Спавнил в all.spawn.

 

Если вопрос не в тему, то скажите где спросить.

Лучше спросить глупость, чем её совершить.

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


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

Имеется код:

local level_name = {

["l01_escape"] = "Кордон",

["l02_garbage"] = "Свалка",

["l03_agroprom"] = "НИИ Агропром",

["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",

["l04_darkvalley"] = "Тёмная долина",

["l04u_labx18"] = "Лаборатория X-18",

["l05_bar"] = "Бар",

["l06_rostok"] = "Дикая территория",

["l07_military"] = "Арм.склады",

["l08_yantar"] = "Янтарь",

["l08u_brainlab"] = "Лаборатория X-16",

["l10u_bunker"] = "Лаборатория X-10",

["l10_radar"] = "Радар",

["l11_pripyat"] = "Припять",

["l12_stancia"] = "ЧАЭС",

["l12_stancia_2"] = "ЧАЭС",

["l12u_sarcofag"] = "Саркофаг",

["l12u_control_monolith"] = "Управление Монолитом"

}

 

local community = {

["stalker"] = "Сталкер",

["monolith"] = "Монолит",

["military"] = "Военные",

["bandit"] = "Бандит",

["killer"] = "Наемник",

["ecolog"] = "Эколог",

["dolg"] = "Долг",

["freedom"] = "Свобода",

["zombied"] = "Зомбированный",

["trader"] = "Торговец"

}

 

function kill_npc(victim, who)

if victim and IsStalker(victim) then

local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""

db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)

end

end

 

.

Далее делаю по иструкции:

Далее открываем xr_motivator.script, который находится в gamedata\scripts, ищем функцию:

 

function motivator_binder:death_callback(victim, who)

 

и после пишем: имя_вашего_файла.news_of_npc_kill(victim) в итоге:

 

function motivator_binder:death_callback(victim, who)

имя_вашего_файла.kill_npc(victim, who)

if who:id() == db.actor:id() then

xr_statistic.addKillCount(self.object)

end

 

Вот собственно и все!

.

На основных локациях работает, захожу на "предбанник", валю первого попавшегося npc получаю вылет:

* [win32]: free[884348 K], reserved[184740 K], committed[1028000 K]

* [ D3D ]: textures[345979 K]

* [x-ray]: crt heap[347446 K], process heap[509894 K], game lua[22431 K], engine lua[195 K], render[1255 K]

* [x-ray]: economy: strings[4565 K], smem[30037 K]

* MEMORY USAGE: 355412 K

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

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

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...t.a.l.k.e.r\gamedata\scripts\news_of_npc_kill.script:37: attempt to concatenate field '?' (a nil value)

 

 

stack trace:

.

 

Меняю код:

local level_name = {

["l01_escape"] = "Кордон",

["l02_garbage"] = "Свалка",

["l03_agroprom"] = "НИИ Агропром",

["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",

["l04_darkvalley"] = "Тёмная долина",

["l04u_labx18"] = "Лаборатория X-18",

["l05_bar"] = "Бар",

["l06_rostok"] = "Дикая территория",

["l07_military"] = "Арм.склады",

["l08_yantar"] = "Янтарь",

["l08u_brainlab"] = "Лаборатория X-16",

["l10u_bunker"] = "Лаборатория X-10",

["l10_radar"] = "Радар",

["l11_pripyat"] = "Припять",

["l12_stancia"] = "ЧАЭС",

["l12_stancia_2"] = "ЧАЭС",

["l12u_sarcofag"] = "Саркофаг",

["l12u_control_monolith"] = "Управление Монолитом"

["predbannik"] = "predbannik"

}

 

local community = {

["stalker"] = "Сталкер",

["monolith"] = "Монолит",

["military"] = "Военные",

["bandit"] = "Бандит",

["killer"] = "Наемник",

["ecolog"] = "Эколог",

["dolg"] = "Долг",

["freedom"] = "Свобода",

["zombied"] = "Зомбированный",

["trader"] = "Торговец"

}

 

function kill_npc(victim, who)

if victim and IsStalker(victim) then

local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""

db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)

end

end

, начинаю новую игру, валю первого попавшегося на "кордоне", получаю вылет:

Intro start 1361

* MEMORY USAGE: 333535 K

 

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

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

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:162: attempt to index global 'news_of_npc_kill' (a nil value)

 

 

stack trace:

 

.

Вопрос: что я не так сделал?

 

 

Лучше спросить глупость, чем её совершить.

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


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

Всем доброго времени суток. Возник такой вопрос: какой файл(скрипт, конфиг) запрещает на какой-либо локации спавнить нпс определённого ранга? Хочу при респавне на кордоне заспавнить бандюков в ранге "мастер", но простым редактированием spawn_sections.ltx это у меня не получается. Подскажите решение, пожалуйста.

 

Задавайте вопросы более внятно.

1. 'Запрет' и 'не разрешение' - различные понятия. Нет нкаких запретов на (ре)спавн по рангам и по локациям. Имеются нте или иные конфиги/параметры. И если чего-то нет или параметр 'мал' - то не нужно путуть с запретом.

2. 'Респавном' - не спавнят, это 'автоматическое' событие, и тем более, при чем тут редактирование 'spawn_sections.ltx'?

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

--/ Artos

 

Добавлено через 84 мин.:

Именно настроить респавн на кордоне, на АТП. В 'spawn_sections.ltx' прописывается ранг нпс при респавне и простое изменение новичков на мастеров не срабатывает. Почему?

 

Потому что метод тыка в подобных вещах порочен и практически на 100% бесполезен.

В 'spawn_sections.ltx' прописаны СЕКЦИИ объектос (НПС), в которых в отличии от исходной родительской секции, дополнительно прописываются треьуемые параметры, в том числе и ранг. Эти секции предназначены для любого спавна (само название файла говорит за себя!) и 'респавн' - это только частный случай.

Респавны в игре НЕ читают рангов, а оперирует названиями секций и группировками.

--/ Artos

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

Лучше спросить глупость, чем её совершить.

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


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

Artos, а какие могут быть иные ограничения? Дописать секции в спавнере не проблема.

Ну во первых не в 'спавнер', а в конфиг секций для спавна. 'Спавнером' все же называют иль скрипт иль схему (se_respawn).

Во-вторых, имел ввиду в основном уже имеющиеся секции, которые могут иметь и кастомдату, иль в кодах игры именно этим секциям добавлена логика/ограничения.

Дописанные новые - врядли будут иметь ограничения. Хотя дописывать? ... Упомянутые 'cit'- бандиты все одно являются рудиментами от вырезенной локации и ограничений для подобного спавна также не имеют.

--/ Artos

 

Добавлено через 37 мин.:

Понял, теперь следующее, если удалить с локации смарты, то нпс, заспавненные на ней будут просто бродить везде, где позволяет сетка и реагировать на противника согласно своей стандартной логике?

Если удалить смарты с локации, то как минимум потребуется скорректировать немало логики и скриптов ...

Но НПС, заспавненные на локации, если им не прописано '[smart_terrains] none = true' - не будут бродить, а проследуют на те локации, где им найдется работенка. Конечно строго по сетке и отвлекаясь на опасности иль подобное.

 

Добавлено через 21 мин.:

Хорошо, тогда как сделать привязку нпс к определённой локации?

Хм, ... привязать его к какому-либо смарту/гулагу на какой-либо локации. :-)

И навязать ему работу из этого смарта/гулага (хоть на другой локации).

Работа должна быть по координатам для нужной локации (не обязательно одной с гулагом ее дающим).

--/ Artos

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

Лучше спросить глупость, чем её совершить.

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


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

Можно ли как-то отключить удаление лута из инвентаря трупов, путём редактирования death_manager.script?

Лучше спросить глупость, чем её совершить.

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


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

Удаляются ножи, пда, фонарики,детекторы и прочее. Меня интересует отмена этого удаления. Теперь понятно?

Лучше спросить глупость, чем её совершить.

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


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

Всем доброго времени суток, с прошедшими праздниками и наступившим Рождеством. Возник такой вопрос: что отвечает за непереход некоторых NPC в offline? Объясняю: в SoC на кордоне новички с Волком переходят в offline, а солдатня на блокпосте - нет. Сравнил их секции в All.spawn и заметил разницу в флагах. Причина только в этом?

Лучше спросить глупость, чем её совершить.

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


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

Попробую. Ещё вопрос: заспавнил рюкзак

[10279]
; cse_abstract properties
section_name = physic_object
name = predbannik_physic_object_0108
position = -425.600646972656,12.9063091278076,-149.377365112305
direction = 0,-1.92239999771118,0

; cse_alife_object properties
game_vertex_id = 3908
distance = 0
level_vertex_id = 290047
object_flags = 0xffffff3a

; cse_visual properties
visual_name = equipments\item_rukzak

; cse_ph_skeleton properties

; cse_alife_object_physic properties
physic_type = 0x3
mass = 1000
fixed_bones = link

, сделал из него тайник

[10280]
; cse_abstract properties
section_name = inventory_box
name = predbannik_inventory_box_0008
position = -425.600646972656,12.9063091278076,-149.377365112305
direction = 0,-1.92239999771118,0

; cse_alife_object properties
game_vertex_id = 3908
distance = 35
level_vertex_id = 290047
object_flags = 0xffffff3b
custom_data = <<END
[spawn]
mag_30_7.62x39_fmj = 10
END

; cse_visual properties
visual_name = equipments\item_rukzak

, забираю всё из тайника и вижу как один из рюкзачков плавно поднимается примерно на метр. Как это можно исправить?

Лучше спросить глупость, чем её совершить.

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


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

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