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

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


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

Valerich, насчет цифр ты не прав, открой диалог_ескейп и увидишь пысовский ужас)), здесь одно правило что указал в теге next то и должно быть, а посоветую только одно-сделать ветку типа до встречи где куча прекондишинов, без всяких условий Изменено пользователем Вампир35
Ссылка на комментарий

Desertir, Вампир35 Да да да, сейчас поворошил (распечаточки) то что забыл - Вы правы.

Для Wookie Напиши что ты хочешь сделать (под споллер со всеми своими фразами и какие истины и проверки тебе нужны), так будет проще и тебе напишут так как надо, а там разберешся

Да и ещё, судя по файлам тойже Солянки

 

сначало идет <precondition>...</precondition>

Затем <text>...</text>

А потом <action>...</action>

 

НО, как и написал выше - ЧТО ты хочешь получить - мы не знаем. Пиши подумаем ;)

Изменено пользователем Valerich
Ссылка на комментарий

Valerich, я хотел сделать проверку на арты у ГГ (На каждую ветку по арту - Медуза, Кровь камня, Выверт и Ломоть мяса). Как я понял, вылетало из-за отсутсвия вариантов диалога.

-- Проверки на арты у Сидора
function if_give_art1(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_medusa") ~= nil
end
return false
end

function if_give_art2(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_blood") ~= nil
end
return false
end

function if_give_art3(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_mincer_meat") ~= nil
end
return false
end

function if_give_art4(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_vyvert") ~= nil
end
return false
end

-- Проверки на части монстров у Сидора
function if_give_booty1()
return booty_task_sidor=="mutant_flesh_eye" and db.actor:object("mutant_flesh_eye")
end

function if_give_booty2()
return booty_task_sidor=="mutant_boar_leg" and db.actor:object("mutant_boar_leg")
end

function if_give_booty3()
return booty_task_sidor=="mutant_dog_tail" and db.actor:object("mutant_dog_tail")
end

-- Убор артов у ГГ и добавление к личной сумме нужных УЕ
function gave_art1(actor, npc)
dialogs.relocate_item_section(npc, "af_medusa", "out")
art_task_sidor = nil
this.add_money(500, sidor)
end

function gave_art2(actor, npc)
dialogs.relocate_item_section(npc, "af_blood", "out")
art_task_sidor = nil
this.add_money(300, sidor)
end

function gave_art3(actor, npc)
dialogs.relocate_item_section(npc, "af_mincer_meat", "out")
art_task_sidor = nil
this.add_money(800, sidor)
end

function gave_art4(actor, npc)
dialogs.relocate_item_section(npc, "af_vyvert", "out")
art_task_sidor = nil
this.add_money(600, sidor)
end

 

Добавил еще один вариант ответа (ничего не достал, пойду опять искать) вылетать перестало, но арты не проверяются. Точнее - хоть есть, хоть нет арта - диалога нет.

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

Ссылка на комментарий

Перепроверь правильно ли заданы имена скриптов. Проверь сами скрипты на наличие ошибок.

        <precondition>wookie_trader_status.if_give_art4</precondition>
        <action>wookie_trader_status.gave_art1</action>
        <precondition>wookie_trader_status.if_give_art4</precondition>
        <action>wookie_trader_status.gave_art2</action>
        <precondition>wookie_trader_status.if_give_art4</precondition>
        <action>wookie_trader_status.gave_art3</action>
        <precondition>wookie_trader_status.if_give_art4</precondition>
        <action>wookie_trader_status.gave_art4</action>

Сейчас вот открыл через IE - xml код рабочий, ошибок нет. Так что проверяй скрипты.

У тебя кстати прекондишн во всех случаях одинаковый.

 

Что есть такое?

[b]this[/b].add_money(600, sidor)

И кстати проверка идет не на ломоть мяса, а на выверт.

Изменено пользователем Galil
Ссылка на комментарий

Кстати в чем ошибка этой ф-ии?

function add_money(trader_money, trader)
trader = trader + trader_money
end

function hate_money(trader_money, trader)
trader = trader - trader_money
end
-- Применение
function add_mon()
this.add_money(600, sidor)
end
-- Local (в начале скрипта)
local sidor = 0
-- Что делает функция - у нас есть условный счет у Сидора, и мы добавляем деньги - сначала пишем сколько надо, потом название торговца (ссылка на переменную с баблом у сидора)

 

 

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

Galil, это я делал для теста, т.к. выдавал себе "ломоть мяса" в начале.

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

Ссылка на комментарий

Туповатый вопрос, но все же. Как сделать Сидоровскую дверь всегда открытой? А то логику правил - надпись, что открыто есть, а дверь не отворяется

Ссылка на комментарий
сначало идет <precondition>...</precondition>

Затем <text>...</text>

А потом <action>...</action>

Совершенно фиолетово, в каком порядке будут идти теги во фразе.

 

Wookie, записывать значение счета Сидора лучше в пстор актора.

У тебя в скрипте есть глобальная переменная, но она будет равна нулю про новой инициализации скрипта (первом вызове любой функции из этого скрипта), т.е. после загрузки игры и непосредственно диалоге с NPC. Поэтому лучше записать значение в пстор, потом его читать. В итоге имеем:

--пополнение счета
function add_money(trader_money, trader)
trader = trader + trader_money
xr_logic.pstor_store(db.actor,"acc_sidor",trader)
end
--снятие со счета
function hate_money(trader_money, trader)
trader = trader - trader_money
xr_logic.pstor_store(db.actor,"acc_sidor",trader)
end
--вызов
function add_mon()
local sidor = xr_logic.pstor_retrieve(db.actor,"acc_sidor")
if sidor == nil then sidor = 0 end
this.add_money(600, sidor)
end

А глобальную переменную sidor убрать.

 

На счет прекондишенов.

Теги has_info, dont_has_info и precondition позволяют задавать условия доступности диалога по наличию/отсутствию инфопорции или скриптовой функцией. Функция должна иметь вид:

function dialog_prec(first_speaker, second_speaker, dlg_id)
    ...
    return true/false
end

здесь:

dlg_id - идентификатор диалога, для которого проверяется предусловие

first_speaker - тот, кто будет говорить первым. Если это стартовый диалог, то это NPC, если диалог актора, то актор.

second_speaker - соответственно, второй собеседник

 

Я бы проверял так

function if_give_art4(first_speaker,second_speaker,dlg_id)
if db.actor:object("af_vyvert") ~= nil then
return true
else
return false
end
end

Возможно примитивно, но работать должно.

И кстати проверка идет не на ломоть мяса, а на выверт.

Именно.

И что за переменные art_task_sidor и booty_task_sidor?

 

Galil, this (этот) - выполнить из этого скрипта. Лично я не пользуюсь, указываю имя явно.

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

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Desertir, art_task_sidor и booty_task это квесты соответственно на арты и на части монстров, но они не отображаются в инвентаре. Идет все так - выбирается один из случайных артов\конечностей, записанных в таблицу, потом идет проверка на соответствующий арт и выдача через amk.send_tip нового сообщения.

Вот весь скрипт -

-------------------------------------
--- Статусы торговцев
--- copyright © Wookie, 2011
-------------------------------------
local sidor = 0 -- Стартовое кол-во денег за квесты у Сидора
local barman = 0 -- Стартовое кол-во денег за квесты у Бармена
-- Остальных оставим, так как Артем Кулинар бармен, Сахаров ученый а не барыга, с Вороном думаю

-- Переменные квестов
local art_task_sidor
local art_task_barmen
local booty_task_sidor
local booty_task_barmen
-- Переменные квестов

-- Артефакты которые нужны Сидору (Подогнаны под Кордон)
local sidor_arts={
"af_medusa",
"af_blood",
"af_mincer_meat",
"af_vyvert"
}

-- Артефакты нужные Бармену (Подогнаны под Бар и окрестности)
local barmen_arts={
"af_fireball",
"af_electra_moonlight",
"af_cristall_flower",
"af_soul",
"af_ameba_slug"
}

-- Части монстров нужные Сидору (Подогнаны под Кордон)
local sidor_booty={
"mutant_flesh_eye",
"mutant_boar_leg",
"mutant_dog_tail"
}

-- Части монстров нужные Бармену (Подогнаны под Бар и окрестности)
local barmen_booty={
"mutant_psevdodog_tail",
"mutant_krovosos_jaw",
"mutant_burer_hand",
"mutant_snork_leg",
"mutant_chimera_cogot"
}

function add_money(trader_money, trader)
trader = trader + trader_money
end

function hate_money(trader_money, trader)
trader = trader - trader_money
end

function give_sidor_task_arts()
art_task_sidor = sidor_arts[math.random(4)]
if art_task_sidor=="af_medusa" then
amk.send_tip("Твоя цель - артефакт Медуза, найдешь и принесешь - запишу 500 рублей на твой счет", "Сидорович")
end
if art_task_sidor=="af_blood" then
amk.send_tip("Твоя цель - артефакт Кровь камня, найдешь и принесешь - запишу 300 рублей на твой счет", "Сидорович")
end
if art_task_sidor=="af_mincer_meat" then
amk.send_tip("Твоя цель - артефакт Ломоть Мяса, найдешь и принесешь - запишу 800 рублей на твой счет", "Сидорович")
end
if art_task_sidor=="af_vyvert" then
amk.send_tip("Твоя цель - артефакт Выверт, найдешь и принесешь - запишу 600 рублей на твой счет", "Сидорович")
end
end

function give_sidor_task_booty()
booty_task_sidor = sidor_booty[math.random(3)]
if booty_task_sidor=="mutant_flesh_eye" then
amk.send_tip("Твоя цель - глаз плоти, найдешь и принесешь - запишу 200 рублей на твой счет", "Сидорович")
end
if booty_task_sidor=="mutant_boar_leg" then
amk.send_tip("Твоя цель - копыто кабана, найдешь и принесешь - запишу 600 рублей на твой счет", "Сидорович")
end
if booty_task_sidor=="mutant_dog_tail" then
amk.send_tip("Твоя цель - хвост слепого пса, найдешь и принесешь - запишу 100 рублей на твой счет", "Сидорович")
end
end

function sidor_private_count()
  news_manager.send_tip(db.actor, "Сидорович:\\nТвой счет: " ..(sidor), nil, nil, 3000)
end

-------------------------------------------------------------------------------------------------------------------------------------------
--                             Диалоги                                         --
-------------------------------------------------------------------------------------------------------------------------------------------
-- Проверки на арты у Сидора
function if_give_art1(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_medusa") ~= nil
end
return false
end

function if_give_art2(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_blood") ~= nil
end
return false
end

function if_give_art3(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_mincer_meat") ~= nil
end
return false
end

function if_give_art4(task, objective) 
if db.actor ~= nil then
return db.actor:object("af_vyvert") ~= nil
end
return false
end

-- Проверки на части монстров у Сидора
function if_give_booty1()
return booty_task_sidor=="mutant_flesh_eye" and db.actor:object("mutant_flesh_eye")
end

function if_give_booty2()
return booty_task_sidor=="mutant_boar_leg" and db.actor:object("mutant_boar_leg")
end

function if_give_booty3()
return booty_task_sidor=="mutant_dog_tail" and db.actor:object("mutant_dog_tail")
end

-- Убор артов у ГГ и добавление к личной сумме нужных УЕ
function gave_art1(actor, npc)
dialogs.relocate_item_section(npc, "af_medusa", "out")
art_task_sidor = nil
this.add_money(500, sidor)
end

function gave_art2(actor, npc)
dialogs.relocate_item_section(npc, "af_blood", "out")
art_task_sidor = nil
this.add_money(300, sidor)
end

function gave_art3(actor, npc)
dialogs.relocate_item_section(npc, "af_mincer_meat", "out")
art_task_sidor = nil
this.add_money(800, sidor)
end

function gave_art4(actor, npc)
dialogs.relocate_item_section(npc, "af_vyvert", "out")
art_task_sidor = nil
this.add_money(600, sidor)
end

-- Торговля
-- Проверки на бабло
function if_give_800_money()
return sidor >= 800
end

 

 

Ну после выдачи сообщения надо искать арт, потом отдавать его сидору (проблему решил кстати) хотел в прекондишне ставить -

return db.actor:object("af_medusa") and art_task_sidor=="af_medusa"

, но не знаю, будет так работать или нет.

Ну и если все условия прекондишна выполнены - отдаем арт сидору, тот записывает нам на счет *** денег (не обычных).

https://www.youtube.com/embed/U0no-6tCxhU

Канал на "Трубе"

Ссылка на комментарий

return db.actor:object("af_medusa") and art_task_sidor=="af_medusa"

По идее, должно :)

art_task_sidor и booty_task это квесты соответственно на арты и на части монстров, но они не отображаются в инвентаре

Тогда эти флаги тоже придется записывать в пстор, потом проверять их наличие (если true - квест идет, квест выполнился - записываем false или удаляем (записываем nil)).

 

Вообще то мы делаем:

Подходим к Сидору\Бармену и спрашиваем про задание.

Он дает нам задание на конкретный арт\часть тела.

Записываем в пстор что задание активно.

Находим арт\часть тела.

По каллбеку на взятие отслеживаем это дело - выдаем сообщение о выполнении заказа.

Приносим арт\часть тела и отдаем его\ее.

Записываем в пстор, что для конкретного(ой) арта\части тела задание выполнено.

Записываем в пстор надбавку к счету Сидоровича\Бармена.

Вроде все

 

ну он у меня там онулялся и вроде все

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

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

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Такая проблема-я прописал новую волыну в игру,прописал её у NPC-она есть,но весит у него гдето над головой-помогите,как от этого избавиться?

 

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

Такая проблема-я прописал новую волыну в игру,прописал её у NPC-она есть,но весит у него гдето над головой-помогите,как от этого избавиться?

Ссылка на комментарий

Здравствуйте уважаемые Сталкеры.

Подскажите как переделать шлем у броника "Стальной крыс" чтоб обзор был полный, а не как сейчас, сам я ничего в этом не понимаю, или может кто то сделает ?

1.Вид из броника Скат 15

http://i3.imageban.ru/out/2011/11/01/17f62...959d1f5e0af.jpg

2.Вид из броника Стальной крыс

http://i1.imageban.ru/out/2011/11/01/072c2...574dbaeba42.jpg

3.Визуал Скат 15

http://i3.imageban.ru/out/2011/11/01/924f1...b70020c15a6.jpg

4.Визуал Стальной крыс

http://i4.imageban.ru/out/2011/11/01/69ee2...3a2ead6bda7.jpg

 

 

Строгое предупреждение от модератора ColR_iT
Пункт правил 2.2
Изменено пользователем ColR_iT
Ссылка на комментарий

ScheiTan, чтобы у Сидора была всегда не запертая дверь:

Оригинальная логика:

[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
snd_open_start = trader_door_unlock
on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%

[ph_door@closed]
closed = true
locked = false
on_use = ph_door@open %-esc_close_door%
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

[ph_door@open]
closed = false
locked = false
on_use = ph_door@closed
on_info = {+esc_close_door} ph_door@closed
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

Тут нужно изменить всего лишь одну строчку:

active = ph_door@locked

на

active = ph_door@closed

 

Ссылка на комментарий

Вроде как найдена причина вылета на Болотах при стрельбе с навесным глушаком.

С этим вылетом боролись и ДЛЛкой и ехе-шником, а все намного проще.

Дело в параметре silencer_light_range.

Везде он равен 0.01

silencer_light_range        = 0.01

стоит его заменить на 2

silencer_light_range        = 2

и вылет уходит. Проверено неоднократными тестами.

При значении 1 и меньше вылет остается.

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

AMD Ryzen 5 3600 Box, MB Asus Prime B450-Plus, 2x8 Gb Kingston DDR4-3200, MSI GeForce GTX 1060 3GB, SSD Samsung 840 EVO 120GB, Kingston A400 120 Gb, Samsung HD103SJ SATA2, Samsung HD502HJ SATA2

 

Ссылка на комментарий

Здравствуйте! Объясните пожалуйста какие файлы нужно чистить, для полной очистки игры от сценария.

 

В шапке темы есть готовое решение (часто задаваемые вопросы). Cyclone

Ссылка на комментарий

Залез в файл m_chimera.ltx

дабы сделать так, чтобы она умирала хотя бы с одной обоймы калашникова. Однако я уже и параметр Health до 40 понизил и иммунитеты все до 0.9 поднял, а все равно не умирает. Где я ошибся? Было бы лучше, если бы вы сказали какие параметры надо точно изменять, так как у меня исключительно гуманитарный склад ума, и все эти циферки меня ввергают в оцепенение.

Ссылка на комментарий
Где я ошибся?

Берём иммунитет fire_wound_immunity (оно как раз отвечает за огнестрельные ранения) и правим. В файле m_chimera.

А значение подбирается опытным путем.


256 символов
Ссылка на комментарий

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

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

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