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

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


Svoboда

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

@Снайпер56

 

function spawn_npc()
 local obj = alife():create("clear_sky_1",vector():set(-133.097,1.284,-277.065),79374,3377)
 local params = amk.read_stalker_params(obj)
 params.custom = "[logic]\ncfg = scripts\\new\\clear_sky_1.ltx" - путь к файлу логики НПС и имя самого файла.лтх
 amk.write_stalker_params(params,obj)
end

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


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

Столкнулся со со следующей задачей: добавить в однотипные квесты возможность поиска предметов на классах, отличных от классов оружия и брони.

Благодаря совету Dennis_Chikin   http://www.amk-team.ru/forum/index.php?showtopic=5525&page=533#entry787682

попробовал выполнить отрегистрацию предметов в se_item.script по аналогии с:

 

function se_weapon_magazined_w_gl:on_register()
    cse_alife_item_weapon_magazined_w_gl.on_register( self )
    -- Регистрация в таскменеджере
    task_manager.get_random_task():register_target(self)

    -- Собираем статистику по предметам.
    if registred_items[self:section_name()] == nil then
        registred_items[self:section_name()] = 1
    else
        registred_items[self:section_name()] = registred_items[self:section_name()] + 1
    end
end

function se_weapon_magazined_w_gl:on_unregister()
    --' Отрегистрация в таскменеджере
    task_manager.get_random_task():unregister_target(self)
end

 

вот так:

class "se_item_detector" (cse_alife_item_detector)
    function se_item_detector:__init (section) super (section)
end

function se_item_detector:on_register()
    cse_alife_item_detector.on_register( self )
    -- Регистрация в таскменеджере
    task_manager.get_random_task():register_target(self)

    -- Собираем статистику по предметам.
    if registred_items[self:section_name()] == nil then
        registred_items[self:section_name()] = 1
    else
        registred_items[self:section_name()] = registred_items[self:section_name()] + 1
    end
end

function se_item_detector:on_unregister()
    --' Отрегистрация в таскменеджере
    task_manager.get_random_task():unregister_target(self)
end

 

Также добавил класс в class_rehistrator.script (насколько я понял, туда тоже нужно):

cs_register (object_factory, "CDetector",       "se_item.se_item_detector",  "D_SIMDET",    "detector_s")
 

Поставил в поле таска target = detector_simple - и квест не появляется.

Что не так?

Изменено пользователем ColR_iT
Неужели так сложно вставить теги?

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


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

Заранее извиняюсь, если было - ткните куда копать. Как скриптово узнать, что открыта вкладка КПК "Карта"? Дано: прикручиваю к своей сборке установку своих меток на карте в КПК из адддона Shadows'а 0.6 к РМА... Так вот, всё работает, но эти кнопки установки-удаления меток рисуются поверх всех окон и вкладок КПК... Ранее уже сталкивался с подобным, решения не нашёл. Заранее спасибо всем.

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


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

Рано я возрадовался... Все инфопоршни вкладок в КПК, кроме ui_pda, не работают. Похоже, без движковых правок тут всё же не обойтись. А жаль...

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


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

Проверил через мобилу модмейкера от Singapur22 выдачу нужного мне поршня ui_pda_map_global - не выдаётся он. ui_pda - выдаётся исправно, тот нет. P.S. В Shadows Addon кнопки меток кстати тоже поверх всех вкладок и окон висят.

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


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

Хм, поршень ui_pda_map_local выдался. Но при попытке завязать на него появление меток схлопотал уже от скрипта Shadows'а вылет при попытке открыть КПК.

Дескать, в строке  self.owner:AttachChild(self.stat) onwer = nil 

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


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

Если честно, я в этих оконнных скриптах так и не разобрался... сам скрипт, если кому интересно покопаться, вот:

download_1.jpg

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


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

Можно ли в ТЧ скриптовым способом, в обход движка, запретить перемещать артефакты на пояс при отсутствии надетого на ГГ определённого костюма (со встроенным контейнером для артов)? В идеале бы неплохо разное количество переносимых артов для разных костюмов как в ЧН / ЗП...

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


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

@Kondr48

окей, параметр в костюмы дописать не проблема...

А что конкретно из X-ray extensions подключать? У меня SVN_portable_r230, если что. И где подсмотреть примеры скриптов?

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


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

Где-то в темах скриптования или логики НПС помню, было что-то о том, что если в оригинале ТЧ сталкера, который в начале Агропрома встречает нас с обрезом дробовика, дать любое другое оружие, то это вызовет какой-то хитрый вылет из-за его кривой логики. Хочу поправить сиё недоразумение, где копать?

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


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

@Maksud

пользуйся script Syntax Checker для Lua...

 

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

function necrolog(oVictim)
local level_name = {
["la01_escape"] = "Кордон",
["la02_garbage"] = "Свалка",
["la03_agroprom"] = "НИИ Агропром",
["la04_darkdolina"] = "Тёмная долина",
["la17u_labx7"] = "Лаборатория X-7",
["la05_bar_rostok"] = "Бар",
["la14_rostok_factory"] = "Завод Росток",
["la07_military"] = "Арм.склады",
["la06_yantar"] = "Янтарь",
["la16u_labx16"] = "Лаборатория X-16",
["la19_country"] = "Деревня",
["la10_radar"] = "Радар",
["la11_pripyat"] = "Припять",
["la12_stancia"] = "ЧАЭС",
["la10u_bunker"] = "Бункер Х-10",
["la12u_sarcofag"] = "Саркофаг",
["la13u_warlab"] = "Варлаб",
["la22_forest"] = "Лес",
["la08_deadcity"] = "Мертвый город",
["la09_swamp"] = "Большие болота",
["la13_generators"] = "Генераторы",
["la04u_darklab"] = "Лаборатория Х-18",
["la13u_oso"] = "Осознание",
["la14u_secret_lab"] = "Секретная лаборатория ЧАЭС",
["la15_darkscape"] = "Темная Лощина",
["la15u_mines"] = "Неизвестная територия",
["la16_lost_factory"] = "Цементный Завод",
["la18_damned"] = "Подземелье припяти",
["la20_forgotten"] = "Стройплощадка",
["la21_generators_2"] = "Генераторы 2",
["la17_outskirts"] = "Чернобыль",
["la20_test"] = "Тест",
["la20_final_test"] = "Тест финальный"
}

local death_komment = {
"Я знал, что он допрыгается...",
"[Вырезано цензурой]",
"Ещё один...",
"Таак...",
"Мдя, ни дня без этого.",
"Одним больше, одним меньше...",
"Все там будем",
"Помянуть надо бы...",
"Зона тебе пухом.",
"Как в воду глядел - скопытился!"
}

local community = {
["actor"] = "Сталкер",
["stalker"] = "Сталкер",
["monolith"] = "Монолит",
["army"] = "Военные",
["bandit"] = "Бандит",
["killer"] = "Наемник",
["ecolog"] = "Эколог",
["dolg"] = "Долг",
["freedom"] = "Свобода",
["dark_stalker"] = "Грех",
["arena_enemy"] = "Опонент",
["zombied"] = "Зомбированный"
}

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

local necrolog_text = "\\n%c[255,160,160,160]Погиб сталкер: %c[default]"..oVictim:character_name().."\\n%c[255,160,160,160]Группировка: %c[default]"..community[oVictim:character_community()].."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
local shans = math.random(1,100)
local comment_text = death_komment[math.random(table.getn(death_komment))]

if oVictim and IsStalker(oVictim) and shans>27 then
db.actor:give_game_news(necrolog_text, "ui\\ui_iconstotal",Frect():set(83,470,83,47),3000,3000)
xr_sound.set_sound_play(db.actor:id(), "pda_tips")
if shans>70 then
db.actor:give_game_news(comment_text, "ui\\ui_iconstotal",Frect():set(83,470,83,47),3000,3000)
end
end
end
--Сообщение о гибели сталкеров

 

  • Спасибо 1

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


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

Вопрос по воронам - их класс вообще полностью поддерживает скриптовую обвязку bind_monster?

Попробовал добавить строку вида:

script_binding = bind_monster.bind

в конфиг, вроде эффект есть, функция хита при обыске трупа вороны срабатывает, например, но выдача инфопоршня при убийстве - нет. Последнее делал по аналогии с OGSM, где при убийстве монстра даётся статья о нём.

Код:

 --if string.find(self.object:section(), "m_crow") then - не работает
 if self.object:section() == "m_crow" then - тоже метод не работает
 if not has_alife_info("crow_dead") then db.actor:give_info_portion("crow_dead") end
 end

Upd. подсмотрел метод в моде OLR, кому интересно - смотрите скрипт bind_crow.

Изменено пользователем Капрал Хикс
неактуальность помощи
  • Полезно 1

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


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

Вопрос такой - как монстрячую логику Сидоровича отвязать от скрипта mob_trader.script?

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

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

  • Не нравится 1

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


Ссылка на сообщение
15 минут назад, aka_sektor сказал:

@Капрал Хикс модель Сидоровича NPC.

она и у меня есть, для ТЧ, из новой Соли, меня логика интересует. Как я понял, в НС 2016 эта новая модель используется для кат-сцен, в каморке же сидит обычный монстрячий Сидор.

  • Не нравится 1
  • Согласен 1

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


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

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

При вот такой логике:

Скрытый текст

[logic]
active = trader@new_idle
on_trade = trade@new
trade = misc\trade_trader.ltx

;----------------------------------
;------------- Idle ---------------
;----------------------------------
[trader@new_idle]
anim = sit_idle

on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | trader@new_wait

;----------------------------------
;-------------- New ---------------
;----------------------------------

[trade@new]
anim = sit_idle
on_info = {=trading =trade_exchanged} trader@new_trade_exchanged
on_info2 = {!trading =trade_exchanged} trader@new_trade_good
on_info3 = {!trading !trade_exchanged} trader@new_trade_bad

[trader@new_trade_exchanged]
anim = sit_idle
anim_head = head_talk_0
sound_phrase = trader_exchanged
on_signal = sound_phrase_end | trader@new_idle
on_actor_dist_ge_nvis = 12 | trader@new_wait

[trader@new_trade_good]
anim = sit_idle
anim_head = head_talk_0
sound_phrase = trader_good_trade
on_signal = sound_phrase_end | trader@new_idle
on_actor_dist_ge_nvis = 12 | trader@new_wait

[trader@new_trade_bad]
anim = sit_idle
anim_head = head_talk_0
sound_phrase = trader_bad_trade
on_signal = sound_phrase_end | trader@new_idle
on_actor_dist_ge_nvis = 12 | trader@new_wait

[trader@new_hello]
anim = sit_idle
anim_head = head_talk_0
sound_phrase = trader_hello_what_have_you_got
on_signal = animation_end | trader@new_idle

[trader@new_bye]
on_actor_dist_ge_nvis = 12 |trader@new_wait
anim = sit_idle
anim_head = head_talk_0
sound_phrase = trader_bye
on_signal = animation_end | trader@new_wait

[trader@new_wait]
anim = sit_idle
on_actor_dist_le_nvis = 3 | {-esc_trader_hello_played} trader@new_hello %+esc_trader_hello_played%
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | %-esc_trader_hello_played -esc_trader_bye_played%

он просто исчезает, хотя в спавне числится.

  • Не нравится 1

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


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

Дано: скриптовая эмуляция невидимых слотов (нож, болт, ПДА, бинокль). У меня два бинокля и при попытке вставить бинокль в слот, где уже есть другой, происходит движковый вылет, лог,:

Скрытый текст

0023:0494C077 xrGame.dll
0023:0494C513 xrGame.dll
0023:049A8C3A xrGame.dll
0023:049A7BD6 xrGame.dll
0023:049892B0 xrGame.dll
0023:049A91B0 xrGame.dll
0023:049892B0 xrGame.dll
0023:0494AC39 xrGame.dll
0023:04A111DC xrGame.dll
0023:04737410 xrGame.dll

Есть ли где подсмотреть готовое решение / костыль / затычку от вылета? Поиском решение не нашёл, DMX мод пока не предлагать, там немного другая система реализации скриптовых слотов, нежели Кираговская, попытки совместить решения оттуда не увенчались успехом.

Изменено пользователем Капрал Хикс

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


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

Пытаюсь сделать разные звуки дыхания при разных надетых противогазах. Оригинальный скрипт из DMX мода для НарСоли...

И... мне не хватает умений переписать функцию function breathing():

Скрытый текст

local outfit_type = 0
local breathing_sound
function get_wearing_suit_with_helmet()
                  local outfit = db.actor:get_current_outfit()
    if outfit then
    local section = outfit:section()
    if string.find(section, "_gaz") or
    string.find(section, "neytral_exo_antigas")
    then outfit_type = outfit_type +1
end
    if  string.find(section, "specnaz_m1") or
    string.find(section, "military_outfit") or string.find(section, "militaryspec_outfit") or
    string.find(section, "exo_") or string.find(section, "_exoskeleton")
    then outfit_type = outfit_type +2
end
    if  string.find(section, "military_commander_outfit") or
    string.find(section, "ecolog_outfit") or
    string.find(section, "protection_outfit") or
    string.find(section, "scientific")
    then outfit_type = outfit_type +3
end

function breathing()
    if get_wearing_suit_with_helmet() and amk.load_variable("option_hud",2)==2 and db.actor.power > 0.18 then
        if not (breathing_sound and breathing_sound:playing()) and outfit_type = 1 then
        breathing_sound = xr_sound.get_safe_sound_object([[actor\gasmask_idle_1]]))
        breathing_sound:play_at_pos(db.actor, vector(), 0, sound_object.s2d + sound_object.looped)
end
if outfit_type = 2 then
        breathing_sound = xr_sound.get_safe_sound_object([[actor\gasmask_idle_2]]))
        breathing_sound:play_at_pos(db.actor, vector(), 0, sound_object.s2d + sound_object.looped)
end
if outfit_type = 3 then
        breathing_sound = xr_sound.get_safe_sound_object([[actor\gasmask_idle_3]]))
        breathing_sound:play_at_pos(db.actor, vector(), 0, sound_object.s2d + sound_object.looped)
end
    elseif breathing_sound and breathing_sound:playing() then
        breathing_sound:stop() breathing_sound = nil
    end
end

Прошу помощи :).

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


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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...
⚠ ВНИМАНИЕ! НЕ РЕКОМЕНДУЕМ ПРОИЗВОДИТЬ РЕГИСТРАЦИЮ НА ФОРУМЕ.