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

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

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

16 минут назад, Hind сказал:

прописать логику персу?

https://disk.yandex.ru/d/_IchXWINjkZa5g

16 минут назад, Hind сказал:

как именно прописать конкретный спавн

Там же, п.3.7. Либо в момент выполнения какой то функции воткнуть спавн нужного НПС. 

Можно вообще средствами АМК-мода записать логику прямо в спавне, но я бы уже не стал так делать.

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

например,

 

    local obj=amk.spawn_item("ros_killer_respawn_1",vector():set(-70.358726501465,-13.440641403198,-160.03511047363),107,201811)
    if IsStalker(obj) then 
        local t=amk.read_stalker_params(obj) 
        t.custom="[logic]\nactive=walker\n[walker]\npath_walk=add_merc_esc_walk\npath_look=add_merc_esc_look"
        amk.write_stalker_params(t,obj)        
    end    

 

Изменено пользователем mole venomous
  • Спасибо 1

Здесь могла быть ваша реклама.

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

А по поводу meet_dialog. Если мне надо, чтобы он был, а потом при получении определенной инфы, этот стартовый диалог переставал быть таким, и у перса появляется все диалоги которые ему прописаны. Как это сделать?

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

Установки в скелете диалога. Ты об этом?

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

PttpcO9U.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2013-10-2022%2019:35:12.jpg

<has_info> - диалог доступен только после инфо

<dont_has_info> - недоступен после инфо

 

Здесь могла быть ваша реклама.

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

@mole venomous попробую. Просто я так и делал, а всё равно, мит диалог как был до получения инфы так и оставался после получения

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


Попробуй переводить НПС на следующую активную схему по выдаче инфо, где meet уже нет :unknw:

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

Здесь могла быть ваша реклама.

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

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

    if victim ~= nil then

        local whocls = get_clsid(who)

        monster_classes = {
            [clsid.bloodsucker_s]             = "Кровосос",
            [clsid.boar_s]                     = "Кабан",
            [clsid.dog_s]                     = "Собака",
            [clsid.flesh_s]                 = "Плоть",
            [clsid.pseudodog_s]             = "Псевдособака",
            [clsid.burer_s]                 = "Бюрер",
            [clsid.cat_s]                     = "Кошка",
            [clsid.chimera_s]                 = "Химера",
            [clsid.controller_s]             = "Контролер",
            [clsid.poltergeist_s]             = "Полтергейст",
            [clsid.gigant_s]                 = "Псевдогигант",
            [clsid.zombie_s]                 = "Зомби",
            [clsid.snork_s]                 = "Снорк",
            [clsid.tushkano_s]                 = "Тушкан",
            [clsid.psy_dog_s]                 = "Пси собака",
            [clsid.psy_dog_phantom_s]         = "Пси собака",
            [clsid.fracture_s]                 = "Излом"

        }
        

        local death_komment = {
            "Ещё один...",
            "Мдя, ни дня без этого.",
            "Одним больше, одним меньше...",
            "Все там будем",
            "Помянуть надо бы...",
            "Зона тебе пухом...",
            "Был пацан, не стало пацана"
        }

        --
        --
        -- victim_name - имя жертвы
        -- killer_name - имя убивайца
        -- killer_comm - групировка убивайца
        -- victim_comm - групировка жертвы
        --
        --

         local m_game_vertex = who:game_vertex_id()
        local lvert = game_graph():vertex(m_game_vertex)
        local lid = lvert:level_id()
        local mlevel = alife():level_name(lid)
        local m_s_level = mlevel
        local victim_name  = victim:character_name()
        local killer_name  = who:character_name()
        local victim_comm = victim:character_community()
        local killer_comm = nil
        if IsStalker(who) then
            if killer_name == victim_name then
                killer_name = "аномалия"
                killer_comm = "monster"
            else
                killer_comm = who:character_community()
                                                       -- Чтобы показывать имя, кто убил удали строку ниже
                killer_name = "Пулевое ранение"
            end
        else
            killer_comm = "monster"
            if whocls ~= nil then
                killer_name = monster_classes[whocls]
            end
        end
         
        if killer_comm ~= nil then
            if killer_name == nil then
                -- это если имя убийцы неизвестно или мутантик какой неизвестен
                killer_name = "%c[default] Неизвестна"
            end
            local m_text_kill_string="Погиб: "..victim_name.."\\nГруппировка: "..victim_comm.."\\nМесто гибели: "..game.translate_string(m_s_level).."\\nПричина смерти: "..killer_name --\\nГруппировка: "..victim_comm.."--
            local news_text = "%c[default]"..m_text_kill_string
            local news_caption = game.translate_string("DeadMans")
        local task_texture, task_rect = get_texture_info("ui_iconsTotal_obituary")
             local shans = math.random(1,100)
        db.actor:give_game_news(news_text, task_texture, task_rect, 5*1000, 5*1000)
        if shans > 90 then
                local task_texture, task_rect = get_texture_info("ui_iconsTotal_shared_channel")
                 local dead_news = death_komment[math.random(table.getn(death_komment))]
                db.actor:give_game_news(dead_news, task_texture, task_rect, 5*1000, 5*1000)
             end
        end
    end

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

local community = {
            ["stalker"] = "Одиночка",
            ["military"] = "Военные",
            ["bandit"] = "Бандит",
            ["killer"] = "Наемник",
            ["ecolog"] = "Эколог",
            ["dolg"] = "Долг",
            ["stranger"] = "Неизвестные",
            ["freedom"] = "Свобода",
            ["arena_enemy"] = "Участник арены",
            ["trader"] = "Торговец"}
        }

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

  if victim and IsStalker(victim) and victim:character_community()~="monolith" and victim:character_community()~="zombied" and victim:character_community()~="military" and victim:character_community()~="killer" then
 

 

Подскажите, как к некрологу прикрутить выше упомянутый код(ы)?

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

@андрей дронав немного не понял что именно ты хочешь сделать..

Ну, локальную комьюнити хоть куда пихай (по крайней мере я так делаю и робит) )
if victim я не знаю.

Набросал следующую схему логики непися:
 

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

 

[smart_terrains]
esc_blokpost = true


[logic]
active = remark@base 
danger = danger_condition 
meet = meet
 
[remark@base]
meet = meet
 
[meet] 
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true

 


В гулаге убрал мне ненужные работы (патруль и сон). В игре непись стоит дуб дубом. Что делать?

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

@HindПогиб: Жора Лягушкин

               Группировка: Soldier -- Здесь должно быть: Военные

Все группировки отображаются техническими названиями, а нужно чтоб по русски.

  if victim and IsStalker(victim) -- это запрет на показ текста указанной групировки

@Hind 

10 минут назад, Hind сказал:

Ну, локальную комьюнити хоть куда пихай (по крайней мере я так делаю и робит) )

Пихаю, и получаю такое: gamedata\scripts\bind_stalker.script:2: attempt to index global 'xr_motivator' (a nil value)

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

@андрей дронав судя по логу вылета у тебя весь скрипт заточен bind_stalker? Или куда.. Просто я использовал отдельный скрипт, новосозданный.

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

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

Был другой вылет из-за моей криворукости - там ругалось что dmb = nil value (т.е. в моём скрипте какая то лажа). Но утверждать ничё не могу

Надо мне сделать так, чтобы при поулчении инфопоршня, спавнился песель в n-ой зоне, который не реагировал на игрока до того момента как он подойдет в плотную, при этом чтобы после его убийства - засчиталось выполнение цели миссии

Интересует: логика собачки, и как сделать так чтобы после её смерти выполнялась цель мисии (или давался инфопоршн)

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

Ссылка на комментарий
25 минут назад, Hind сказал:

логика собачки, и как сделать так чтобы после её смерти выполнялась цель мисии (или давался инфопоршн)

Само собой, нужна отдельная секция пёселя, к которой прикручена кастом-дата, например:

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

[dog_puppy]:dog_weak
custom_data             = scripts\test_dog.ltx

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

[smart_terrains]
none = true

[logic]
active   = mob_home
on_death = death@puppy

[mob_home]
path_home = way_point 
home_min_radius = 10
home_max_radius = 20
aggressive_home
on_signal = sig_attacked | mob_combat

[mob_combat]
on_timer = 30000 | mob_home

[death@puppy]
on_info = %+info%

 

  • Спасибо 1

Здесь могла быть ваша реклама.

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

@андрей дронав для определения группировки нпс, вместо таблиц типа:

Скрытый текст
local community = {
            ["stalker"] = "Одиночка",
            ["military"] = "Военные",
            ["bandit"] = "Бандит",
            ["killer"] = "Наемник",
            ["ecolog"] = "Эколог",
            ["dolg"] = "Долг",
            ["stranger"] = "Неизвестные",
            ["freedom"] = "Свобода",
            ["arena_enemy"] = "Участник арены",
            ["trader"] = "Торговец"}
        }

 

 

красивей проще и правильней использовать код:

killer_name = who:character_name().." "..game.translate_string(who:character_community())        -- Выдаёт имя и группировку киллера
victim_name = victim:character_name().." "..game.translate_string(victim:character_community())  -- тоже самое с жертвой

 

полный скрипт с определением кто погиб и от чего - там и нпс и монстры и аномалии:

 

Скрытый текст
-------------------------------------<<Сообшения о смерти НПС>>------------------------------------- 
function kill_npc(victim, who)
monstr_class = {
	[clsid.bloodsucker_s]		= "Кровосос",
	[clsid.boar_s]			= "Кабан",
	[clsid.dog_s]			= "Слепой пес",
	[clsid.flesh_s]			= "Псевдоплоть",
	[clsid.pseudodog_s]		= "Псевдособака",
	[clsid.poltergeist_s]		= "Полтергейст",
	[clsid.gigant_s]		= "Псевдогигант",
	[clsid.zombie_s]		= "Зомби",
	[clsid.snork_s]			= "Снорк",
	[clsid.psy_dog_s]		= "Псевдособака",
	[clsid.psy_dog_phantom_s]	= "Пси собака",
	[clsid.controller_s]		= "Контролёр",
	[clsid.tushkano_s]		= "Тушкан",
	[clsid.burer_s]			= "Бюрер",
	[clsid.cat_s]			= "Дикая кошка",
	[clsid.chimera_s]		= "Химера",
	[clsid.fracture_s]		= "Излом" 
}
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Суицид~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	if victim and IsStalker(victim) and IsStalker(who) and (victim:id() == who:id()) then
		killer_name = "Суицид"
	elseif victim and IsStalker(victim) and IsStalker(who) and (victim:id() ~= who:id()) then
		killer_name = who:character_name().." \""..game.translate_string(who:character_community())
	elseif victim and IsStalker(victim) and IsMonster(who) then
		local m_clsid = get_clsid(who)
		killer_name = monstr_class[m_clsid]
	elseif victim and (IsStalker(victim) and (who == nil or (not IsStalker(who) and not IsMonster(who)))) then
		local killer = who:section()
		if system_ini():line_exist(killer, "inv_name") then
			killer_name = game.translate_string(system_ini():r_string(who:section(), "inv_name"))
		elseif string.find(killer,"buzz")     then killer_name = "аномалия Холодец"
		elseif string.find(killer,"zharka")   then killer_name = "аномалия Жарка"
		elseif string.find(killer,"mosquito") then killer_name = "аномалия Воронка"
		elseif string.find(killer,"mincer")   then killer_name = "аномалия Мясорубка"
		elseif string.find(killer,"gravi")    then killer_name = "аномалия Грави"
		elseif string.find(killer,"witches")  then killer_name = "аномалия Электра"
		elseif string.find(killer,"hair")     then killer_name = "аномалия Жгучий пух"
		else
			killer_name = "DATA ERROR: "..game.translate_string(who:section()).." - "..get_clsid(who)
		end 
	end
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	local qas = math.random(2,5)
	local dead_news = "Погиб сталкер !!! \\n%c[255,255,160,160]Имя: %c[default]"..victim:character_name().." \""..game.translate_string(victim:character_community()).."\"\\n%c[255,160,160,160]Локация: %c[default]"..game.translate_string(level.name()).."\\n%c[255,225,100,100]Причина смерти: %c[default]\""..killer_name.."\""  
		db.actor:give_game_news(dead_news, "ui\\ui_iconsTotal", Frect():set(498,188,83,47), qas*1000, 13000)
		this.news_sound(qas)
end

function news_sound(qas)
	snd_obj_sos = xr_sound.get_safe_sound_object([[device\pda\pda_sos]]) 
	snd_obj_sos:play_no_feedback(db.actor, sound_object.s2d, qas, vector(), 0.5)
end

 

 

Изменено пользователем ted.80
  • Спасибо 1
Ссылка на комментарий

@Hind level.get_time_minutes() / _hours() / _days() + проверка через какой-нибудь "естественный" триггер, вроде обращения к карте (проверка через апдейт будет слишком частой). Карту можно проверять через actor_binder:info_callback и там же выдавать свой инфо-поршень, если время пришло.

В ЧН примерно так работают ночные торговцы на барахолке.

  • Спасибо 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Hind уже было сказано, что непонятного?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

Ссылка на комментарий
3 часа назад, Hind сказал:

непись стоит дуб дубом

А чё ему тута делать?

3 часа назад, Hind сказал:

[remark@base]
meet = meet

Немного расшевели:

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

[remark]
anim     = search 
target   = actor
meet     = meet
on_timer = 10000 | remark@sit

[remark@sit]
anim     = sit 
no_move  = true
target   = nil
on_timer = 10000 | remark@sit2

[remark@sit2]
anim     = sit_ass
no_move  = true
target   = nil
on_timer = 10000 | remark@sit3

[remark@sit3]
anim     = eat_kolbasa
no_move  = true
target   = nil
on_timer = 10000 | remark@sit4

[remark@sit4]
anim     = eat_energy
no_move  = true
target   = nil
on_timer = 10000 | remark

 

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

Здесь могла быть ваша реклама.

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

@ted.80 В таком виде сообщения не отображаются

Скрытый текст
-------------------------------------<<Сообшения о смерти НПС>>------------------------------------- 
function kill_npc(victim, who)
monstr_class = {
	[clsid.bloodsucker_s]		= "Кровосос",
	[clsid.boar_s]			= "Кабан",
	[clsid.dog_s]			= "Слепой пес",
	[clsid.flesh_s]			= "Псевдоплоть",
	[clsid.pseudodog_s]		= "Псевдособака",
	[clsid.poltergeist_s]		= "Полтергейст",
	[clsid.gigant_s]		= "Псевдогигант",
	[clsid.zombie_s]		= "Зомби",
	[clsid.snork_s]			= "Снорк",
	[clsid.psy_dog_s]		= "Псевдособака",
	[clsid.psy_dog_phantom_s]	= "Пси собака",
	[clsid.controller_s]		= "Контролёр",
	[clsid.tushkano_s]		= "Тушкан",
	[clsid.burer_s]			= "Бюрер",
	[clsid.cat_s]			= "Дикая кошка",
	[clsid.chimera_s]		= "Химера",
	[clsid.fracture_s]		= "Излом" 
}
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Суицид~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	if victim and IsStalker(victim) and IsStalker(who) and (victim:id() == who:id()) then
		killer_name = "Суицид"
	elseif victim and IsStalker(victim) and IsStalker(who) and (victim:id() ~= who:id()) then
		killer_name = who:character_name().." \""..game.translate_string(who:character_community())
	elseif victim and IsStalker(victim) and IsMonster(who) then
		local m_clsid = get_clsid(who)
		killer_name = monstr_class[m_clsid]
	elseif victim and (IsStalker(victim) and (who == nil or (not IsStalker(who) and not IsMonster(who)))) then
		local killer = who:section()
		if system_ini():line_exist(killer, "inv_name") then
			killer_name = game.translate_string(system_ini():r_string(who:section(), "inv_name"))
		elseif string.find(killer,"buzz")     then killer_name = "аномалия Холодец"
		elseif string.find(killer,"zharka")   then killer_name = "аномалия Жарка"
		elseif string.find(killer,"mosquito") then killer_name = "аномалия Воронка"
		elseif string.find(killer,"mincer")   then killer_name = "аномалия Мясорубка"
		elseif string.find(killer,"gravi")    then killer_name = "аномалия Грави"
		elseif string.find(killer,"witches")  then killer_name = "аномалия Электра"
		elseif string.find(killer,"hair")     then killer_name = "аномалия Жгучий пух"
		else
			killer_name = "DATA ERROR: "..game.translate_string(who:section()).." - "..get_clsid(who)
		end 
	end
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	local qas = math.random(2,5)
	local dead_news = "Погиб сталкер !!! \\n%c[255,255,160,160]Имя: %c[default]"..victim:character_name().." \""..game.translate_string(victim:character_community()).."\"\\n%c[255,160,160,160]Локация: %c[default]"..game.translate_string(level.name()).."\\n%c[255,225,100,100]Причина смерти: %c[default]\""..killer_name.."\""  
		db.actor:give_game_news(dead_news, "ui\\ui_iconsTotal", Frect():set(498,188,83,47), qas*1000, 13000)
		this.news_sound(qas)
end

function news_sound(qas)
	snd_obj_sos = xr_sound.get_safe_sound_object([[device\pda\pda_sos]]) 
	snd_obj_sos:play_no_feedback(db.actor, sound_object.s2d, qas, vector(), 0.5)
end

В таком виде такой вылет: scripts\bind_stalker.script:2: attempt to index global 'xr_motivator' (a nil value)

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

function kill_npc(victim, who)
monstr_class = {
    [clsid.bloodsucker_s]        = "Кровосос",
    [clsid.boar_s]            = "Кабан",
    [clsid.dog_s]            = "Слепой пес",
    [clsid.flesh_s]            = "Псевдоплоть",
    [clsid.pseudodog_s]        = "Псевдособака",
    [clsid.poltergeist_s]        = "Полтергейст",
    [clsid.gigant_s]        = "Псевдогигант",
    [clsid.zombie_s]        = "Зомби",
    [clsid.snork_s]            = "Снорк",
    [clsid.psy_dog_s]        = "Псевдособака",
    [clsid.psy_dog_phantom_s]    = "Пси собака",
    [clsid.controller_s]        = "Контролёр",
    [clsid.tushkano_s]        = "Тушкан",
    [clsid.burer_s]            = "Бюрер",
    [clsid.cat_s]            = "Дикая кошка",
    [clsid.chimera_s]        = "Химера",
    [clsid.fracture_s]        = "Излом" 
}

        local death_komment = {
            "Ещё один...",
            "Мдя, ни дня без этого.",
            "Одним больше, одним меньше...",
            "Все там будем",
            "Помянуть надо бы...",
            "Зона тебе пухом...",
            "Был пацан, не стало пацана"
        }

        --
        --
        -- victim_name - имя жертвы
        -- killer_name - имя убивайца
        -- killer_comm - групировка убивайца
        -- victim_comm - групировка жертвы
        --
        --

         local m_game_vertex = who:game_vertex_id()
        local lvert = game_graph():vertex(m_game_vertex)
        local lid = lvert:level_id()
        local mlevel = alife():level_name(lid)
        local m_s_level = mlevel
     if victim and IsStalker(victim) and IsStalker(who) and (victim:id() == who:id()) then
        killer_name = "Суицид"
     elseif victim and IsStalker(victim) and IsStalker(who) and (victim:id() ~= who:id()) then
        killer_name = who:character_name().." \""..game.translate_string(who:character_community())
     elseif victim and IsStalker(victim) and IsMonster(who) then
        local m_clsid = get_clsid(who)
        killer_name = monstr_class[m_clsid]
     elseif victim and (IsStalker(victim) and (who == nil or (not IsStalker(who) and not IsMonster(who)))) then
        local killer = who:section()
        if system_ini():line_exist(killer, "inv_name") then
        killer_name = game.translate_string(system_ini():r_string(who:section(), "inv_name"))
        elseif string.find(killer,"buzz")     then killer_name = "аномалия Холодец"
        elseif string.find(killer,"zharka")   then killer_name = "аномалия Жарка"
        elseif string.find(killer,"mosquito") then killer_name = "аномалия Воронка"
        elseif string.find(killer,"mincer")   then killer_name = "аномалия Мясорубка"
        elseif string.find(killer,"gravi")    then killer_name = "аномалия Грави"
        elseif string.find(killer,"witches")  then killer_name = "аномалия Электра"
        elseif string.find(killer,"hair")     then killer_name = "аномалия Жгучий пух"
        else
            killer_name = "DATA ERROR: "..game.translate_string(who:section()).." - "..get_clsid(who)
        end 
    end 
    local qas = math.random(2,5)
    local dead_news = "Погиб сталкер !!! \\n%c[255,255,160,160]Имя: %c[default]"..victim:character_name().." \""..game.translate_string(victim:character_community()).."\"\\n%c[255,160,160,160]Локация: %c[default]"..game.translate_string(level.name()).."\\n%c[255,225,100,100]Причина смерти: %c[default]\""..killer_name.."\""  
        db.actor:give_game_news(dead_news, "ui\\ui_iconsTotal", Frect():set(498,188,83,47), qas*1000, 13000)
        this.news_sound(qas)
end
             local shans = math.random(1,100)
        db.actor:give_game_news(news_text, task_texture, task_rect, 5*1000, 5*1000)
        if shans > 90 then
                local task_texture, task_rect = get_texture_info("ui_iconsTotal_shared_channel")
                 local dead_news = death_komment[math.random(table.getn(death_komment))]
                db.actor:give_game_news(dead_news, task_texture, task_rect, 5*1000, 5*1000)
             end
        end
    end

 

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

@mole venomous я непися приписал в гулаг esc_blokpost, и мне надо чтобы он ходил на работы, которые прописаны в скрипте. А он стоит, ничё не делает. вот и проблема.

Ссылка на комментарий
17 минут назад, Hind сказал:

непися приписал в гулаг

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

  • Согласен 1

Здесь могла быть ваша реклама.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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