Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Редактирование и создание скриптов
denis2000Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Редактирование и создание скриптов

Редактирование и создание скриптов на языке LUA

Если у вас появились вопросы по применению скриптов в игре. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[ Если у вас не открывается файл CHM(Этот текст скрыт от гостей) ]


[ Где найти лог игры после вылета ]
[ Получение более подробной информации о вылете (ХОВАН) ]



Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
gamerДата: Вс, 14.09.2014, 16:58 | Сообщение # 541
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

подскажите в каком скрипте в ЗП находится функции потребности еды,сна?

В ЗП этого нет! Так, что говорим правду и только правду об установленном моде. denis2000

Сна нет,но голод есть .....

Подскажите где искать

Голод в движке, и особенно не влияет на геймплей. Разве что при минимальной сытости ограничены сила ГГ, но это не смертельно. Поэтому если хочешь полноценный голод и сонливость сделай скриптами сам или возьми готовые из другого мода. denis2000


Сообщение отредактировал gamer - Пн, 15.09.2014, 13:40
 
sergej5500Дата: Пт, 19.09.2014, 09:59 | Сообщение # 542
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем добрый день.

На базе Рассвета в СГМ добавил торговца. По сюжету база должна погибнуть. Убиваю торговца командой kill_squad из рестриктора квестовой линии.

После смерти торговца вижу это.




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

Готовой функции нет ее надо писать. Если труп не сильно нужен, просто удали объект вместо убийства. denis2000
 
makdmДата: Пт, 19.09.2014, 10:58 | Сообщение # 543
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, в SGM моде предусмотрено удаление лута торговцев в случае их гибели.
Файл death_manager.script

Строки
if find_in_string(self.npc:section(),"_trader") then
self.npc:iterate_inventory(release_all_immediately,self.npc)
end

Здесь вызывается функция release_all_immediately, которая также есть в этом файле.
Как видно проверка идёт по секции торговца и в этом случае, чтобы скрипт сработал, необходимо, чтобы в секции торговца была запись _trader дописанная, как правило в конце.

Например: zat_b15_stalker_trader


Терпение......
И все получится!
 
sergej5500Дата: Пт, 19.09.2014, 11:39 | Сообщение # 544
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

makdm,

[ Секции торговца ]


Кончаются словом _trader.

[ Логика ]


Функция очистки инвентаря должна работать. Может, она работает только если непись погиб от внешних причин и не срабатывает при команде kill_squad?
 
makdmДата: Пт, 19.09.2014, 13:50 | Сообщение # 545
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, от команды это не зависит. А вот зависит от того - находится объкет online или offline
Если вы убиваете сквад, который OFFline, то классу drop_manager из death_manager.script не передаётся управление.
Поэтому убивать сквад нужно, когда он online.
В логике работы сквада пишите:

on_info = {условие_убийства_ сквада =dist_to_actor_le(150)} %=kill_squad(story_id_сквада)%

где 150 - это switch_distance
В этом случае сразу после перехода сквада ONline произойдёт его убийство и чистка лута выполнится.


Терпение......
И все получится!
 
GhosT1803Дата: Пн, 29.09.2014, 07:59 | Сообщение # 546
Удаленные



FATAL ERROR

[error]Expression : !m_error_code
[error]Function : raii_guard::~raii_guard
[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line : 748
[error]Description : ... - Зов Припяти\gamedata\scripts\xr_conditions.script:131: attempt to index local 'npc_job' (a nil value)

Подскажите ламеру ребят, что делать?
 
makdmДата: Пн, 29.09.2014, 08:59 | Сообщение # 547
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата GhosT1803 ()
Подскажите ламеру ребят, что делать?

Прочитать шапку темы. Особенно то, что выделено жёлтым цветом. И попробовать снова задать вопрос.


Терпение......
И все получится!
 
sergej5500Дата: Вс, 12.10.2014, 14:52 | Сообщение # 548
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем добрый день. В ходе создания дополнения для СГМ 2.1 два раза встретился с такими логами.

[ Лог ]


Оба раза вылеты были как-то связаны с применением дистанционной взрывчатки.

Первый случай на Армейских Складах. Там надо было подорвать нору мутантов. Тогда я не заметил связи вылета со взрывчаткой.

Сегодня тестировал квест на Кордоне. По сюжету игрок вместе со сталкерами должен будет зачистить отряд бандитов на ферме севернее моста. До первого выстрела по бандитам они нейтральны к игроку. До начала квеста заложил на ферме заряд и ушел к квестодателю в деревню, где бункер Сидоровича. Между фермой и деревней 300-400 метров. То есть заложенный заряд оказался в оффлайне. После начала квеста вернулся к мосту. Заряд вернулся в онлайн. Подорвал заряд штатно. Он взорвался и прибил немало бандитов. После срабатывания заряда через несколько десятков секунд игра вылетает. Объект, изображающий установленный заряд, лежит на земле. Хотя он должен исчезнуть после взрыва. Если заряд не использовать, то никаких вылетов нет.

Возможна ли связь заряда с вылетом?

Скрипты, связанные с зарядом

[ sgm_callbacks ]


[ _g ]


Возможно, скрипты, связанные с зарядами, есть и в других файлах.

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


Сообщение отредактировал sergej5500 - Вс, 12.10.2014, 16:50
 
denis2000Дата: Пн, 13.10.2014, 12:05 | Сообщение # 549
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Попробуй в функции activate_detonate_charge перед:
Код
sgm_flags.value_detonation_charge=obj.id
start_flague_timer("timer_detonation_charge",timer)

добавить:
Код
obj:can_switch_offline(false)


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Сб, 01.11.2014, 20:11 | Сообщение # 550
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый вечер.

smart_terrain

Можно ли поправить файл, чтобы движок не ставил непися на работу, даже если эта работа ему подходит, если эта работа уже занята другим НПС? Иногда неписи становятся на одну работу по двое. Если файл можно поправить, то как это правильно сделать?
 
denis2000Дата: Сб, 01.11.2014, 21:11 | Сообщение # 551
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
Если файл можно поправить, то как это правильно сделать?

Я например считаю, что правильнее сделать больше работ и назначать им различные приоритеты, тогда скрипт отрабатывает правильно. Дело в том что скрипт проверяет свободна ли работа:
Код
-- Если работа пустая или ее занимаем мы сами - выбираем ее.
      if v.npc_id == nil then

И мне думается, что проблема не в том что работа занята, а в том что НПС могут отбирать работу у других НПС, а тут сложилась ситуация когда размен работами не возможен.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
BIZonnikДата: Вт, 11.11.2014, 19:28 | Сообщение # 552
Гражданский
Пользователи
Сообщений: 14
Награды: 0
Репутация: [ 0 ]

Подскажите скрипт для выпадения нескольких предметов при использовании одного(как например мед. сумка в sgm)

КМБ Урок 56 для кого? denis2000
 
СахарДата: Пн, 01.12.2014, 10:23 | Сообщение # 553
Гражданский
Пользователи
Сообщений: 2
Награды: 4
Репутация: [ 69 ]

Всем доброго здравия.
Попробовал сегодня создать «СМС» с новой иконкой.
Код
function test_sms()
  news_manager.(actor, d3_czech_start_dialog, ui_inGame2_neutral_2_mask)
end

Так как я в скриптах полный 0, так что последовал вполне логичный вылет.
Код
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....e.r. - Çîâ Ïðèïÿòè\gamedata\scripts\xr_logic.script:648: attempt to index global 'xr_effects' (a nil value)

Может, кто объяснить, в чём ошибка?


 
sergej5500Дата: Пн, 22.12.2014, 23:38 | Сообщение # 554
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Сахар,

Думаю, что проблема в кавычках. Их нет.

Я делаю СМС-ки так.

function esc_b2_bandit_enemy_task_sms(actor,npc)
news_manager.send_tip(db.actor,"esc_b2_bandit_enemy_task_sms_text",0,"portrait_Wolf",8000,nil,"esc_b2_stalker_wolf_title")
end

esc_b2_bandit_enemy_task_sms_text - ссылка на текст СМС. Файл в configs\text\rus.
esc_b2_stalker_wolf_title - ссылка на автора СМС. Файл в configs\text\rus.

portrait_Wolf - ссылка на news_manager.script. Там должна быть строка типа portrait_Wolf = "ui_inGame2_wolf",
ссылка на секцию в ui_actor_portrets

Добавлено (22.12.2014, 23:38)
---------------------------------------------
Добрый вечер.

Возникло два вопроса.

Несколько месяцев назад Дмитрий (makdm) для моей сборки предложил функцию принудительной уборки оружия в рюкзак из активного слота и блокировки пользования GPS-навигаторами.

[ Функция ]


Сегодня тестеры обнаружили, что при перемещении ствола в рюкзак теряются обвесы (прицелы и т.п.). Для проверки заспавнил себе Абакан, навесил прицел. После срабатывания функции Абакан в рюкзаке. Прицел пропал с концами.
Можно ли это исправить?

И еще вопрос. Нормально эта функция вызывается рестриктором. Для теста попробовал вызвать её горячей клавишей.

elseif dik==DIK_keys.DIK_S then
xr_effects.stop_weapon_and_guidebook()

Немедленно поймал лог.

[ Лог ]


Строка 5244 if actor:item_in_slot(2) ~= nil then.

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

 
makdmДата: Вт, 23.12.2014, 20:16 | Сообщение # 555
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
функцию принудительной уборки оружия в рюкзак из активного слота и блокировки пользования GPS-навигаторами.

sergej5500, попробуй другую функцию.
В xr_effects.script пишешь:

[ функции(Этот текст скрыт от гостей) ]


Соответственно в логике рестриктора

[sr_idle@_1]
on_info = %=disable_weapon_and_guidebook%
on_info2 = {Условие} sr_idle@_2 %=enable_weapon%

[sr_idle@_2]

Цитата sergej5500 ()
Почему функция нормально работает, если вызывается рестриктором и дает жука по
горячей клавише?

Потому что в функцию не передан аргумент actor
Вызов должен быть такой

xr_effects.stop_weapon_and_guidebook(db.actor)


Терпение......
И все получится!


Сообщение отредактировал makdm - Вт, 23.12.2014, 20:19
 
Поиск: