[SoC] Ковыряемся в файлах - Страница 376 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

[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

 

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

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

        <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, это я делал для теста, т.к. выдавал себе "ломоть мяса" в начале.

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

сначало идет <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

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"

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

Вроде все

 

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

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

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

Такая проблема-я прописал новую волыну в игру,прописал её у 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

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

 

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

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

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

Где я ошибся?

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

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

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

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

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

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

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

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

Войти

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

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

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