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

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

Может кто поможет? Подскажите функцию, которая запоминает НПС, с которым был диалог и делает его (диалог) недоступным, например возвращает false, если диалог уже был. Навсегда запоминать НПС не важно, можно до ближайшего перехода или сейв-лоада. Ковырял-ковырял диалог_менеджер.скрипт да ничего не понял((

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

Использую лечение из DMX. Всё вроде бы хорошо, но вот заковыка. Если сразу не закрыть инвентарь после использования аптечки/еды, то оружие в руках уже не появится (придёться делать сейв/лоад). Может где то накосячил с адаптацией или в сборке Солянка + DMX такое бывает? Что бы не ломать голову, подумал, может кто подскажет код на закрытие инвентаря после использования конкретного предмета?

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


Подарки

  • 5
  • 3
  • 5
  • 2
  • Ссылка на комментарий
    10 часов назад, dPlayer сказал:

    Ковырял-ковырял диалог_менеджер.скрипт

    В самом диалоге внимательно посмотри проверку условий и что выдается в конце.

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

    Ааа...Так это и не диалог как-бы. 

    Глубоковато ковырять вроде нужно. По непроверенным слухам - скриптер нашей команды это дело еще не порешал. Так что пока всё это дело решается за счет увеличения количества текстов, чтобы не часто повторялись.

    Ссылка на комментарий
    Скрытый текст
    
    -- Проверка на наличие нескольких и разных предметов в рюкзаке ГГ.
    -- 1.
    local items_count=0 
    local itemin=nil 
    function item_much(itm,need_namber) 
    local actor=db.actor 
    items_count=0 
    itemin=itm 
    actor:iterate_inventory(cheking_item,actor) 
         if items_count>=need_namber then 
          return true 
         else 
          return false 
         end 
    end     
    function cheking_item(actor,item) 
    local items=item:section() 
         if items==itemin then 
          items_count=items_count+1 
         end 
    end 
    function create_items(npc,section,number) 
                for i=1,number do 
           alife():create(section,     
                    npc:position(), 
                    npc:level_vertex_id(),      
                    npc:game_vertex_id(), 
                    npc:id()) 
                end     
    end
    -- Отдача в нужном количестве нужные предметы.
    -- 2.
    local reloc_params={} 
    local stalk 
    function out_item_much(itm_section,need_number) 
         reloc_params.itm_section=itm_section 
         reloc_params.itm_cnt=need_number 
         reloc_params.itm_cnt_found=0 
         db.actor:iterate_inventory(checkout_items_count,db.actor) 
         reloc_params.itm_cnt_found=0 
         if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then 
          db.actor:iterate_inventory(out_items_count,db.actor) 
         end 
         news_manager.relocate_item(db.actor, "out", itm_section) 
         reloc_params={} 
    end 
    function checkout_items_count(actor,item) 
         if item.section and item:section()==reloc_params.itm_section then 
          reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 
         end 
    end 
    function out_items_count(actor,item) 
         if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then 
          soc_script_help.remove_item_from_inventory(item, actor) 
          reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 
         end 
    end 
    
    -- Удаляем предмет из инвентаря по имени.
    function remove_item_from_inventory_by_name(remove_item_name,npc)
      return remove_item_from_inventory(npc:object(remove_item_name),npc)
    end
    
    -- Удаляем предмет из инвентаря.
    function remove_item_from_inventory(remove_item,npc)
      if npc==nil then npc=db.actor end
      if remove_item~=nil then
    --      npc:mark_item_dropped(remove_item)
        alife():release(alife():object(remove_item:id()), true)
        return true
      end
      return false
    end

     

    Вызов:

    -- Отдача.
    function out_desyat_hvostov_to_wolf(second_speaker, first_speaker) 
    soc_script_help.out_item_much("mutant_dog_tail",10) 
    end

    Не работают функции на передачу нескольких предметов, вместо 10 передает лишь 1 предмет. Платформа: ТЧ.

    В чем может быть ошибка?

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

    Дополнение к посту выше.

    Ради теста взял скрипты из Тайных Троп 2.

    amk.scriptflamethrower.scriptnew_dialog.script предметы передаются, НО! До бесконечности, даже если закрыть диалог и начать  снова то передача несмотря неначто продолжается.

    Вызвал так:

    function out_desyat_hvostov_to_wolf()
        new_dialog.out_item_much("mutant_dog_tail",10)
    end

    Много способов испытал, либо вылет, либо не работает, либо работает но передает лишь 1 предмет, либо передает вовсе до бесконечности. Тоже самое в обратном порядке.

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

     

    
    function out_desyat_hvostov_to_wolf()
        new_dialog.out_item_much("mutant_dog_tail",10)
    end

    Много способов испытал, либо вылет, либо не работает, либо работает но передает лишь 1 предмет, либо передает вовсе до бесконечности. Тоже самое в обратном порядке.

    В оригинале возможна передача только одного предмета. В АМК можно передавать несколько, "new_dialog" это как раз АМК функция, там это организовано.

    Жизнь следует измерять поступками, а не временем...

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

    День добрый!!!

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

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

    --task_manager.script

    local random_task = nil

    local parent_by_story = {
        [003] = "trader",
        [500] = "barman",
        [902] = "ecolog",
        [507] = "dolg",
        [707] = "freedom",
        [006] = "wolf",
        [004] = "shustriy",
        [510] = "drunk_dolg",
        [504] = "hunter",
        [518] = "zastava_commander",
        [506] = "petrenko",
        [607] = "lisiy",
        [515] = "mercenary",
        [7008] = "pri_bandit",
        [7049] = "gar_stalker_trader" -- новый непись
    }

    local story_by_parent = {
        trader                        = 003,
        barman                        = 500,
        ecolog                        = 902,
        dolg                        = 507,
        freedom                        = 707,
        wolf                        = 006,
        shustriy                    = 004,
        drunk_dolg                    = 510,
        hunter                        = 504,
        zastava_commander            = 518,
        petrenko                    = 506,
        lisiy                        = 607,
        mercenary                    = 515,
        pri_bandit                                      = 7008,
        gar_stalker_trader                              = 7049
    }
    function init_gar_stalker_trader_task_dialog(dlg)
            get_random_task():init_task_dialog(dlg, "gar_stalker_trader")
    end

    function init_gar_stalker_trader_reward_dialog(dlg)
            get_random_task():init_reward_dialog(dlg, "gar_stalker_trader")
    end

    кстати до этого добавлял уже торговца, также с  однотипными квестами, работает без проблем, вылетов не было. Что с этим не так??? SID - прописал, логика обычная валкер с одной точкой. 

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

    ;----------gar_stalker_trader--------------------------------------------------
    ;-----------Artefact------------
    gar_stalker_trader_find_artefact_1
    gar_stalker_trader_find_artefact_2
    gar_stalker_trader_find_artefact_3
    ;---------Monster Part-----------
    gar_stalker_trader_monster_part_1
    gar_stalker_trader_monster_part_2
    gar_stalker_trader_monster_part_3
    ;----------Eliminate Camp----
    gar_stalker_trader_eliminate_lager_1
    gar_stalker_trader_eliminate_lager_2
     

    [gar_stalker_trader_find_artefact_1]
    type = artefact
    community = actor
    text = gar_stalker_trader_find_artefact_1_text
    description = gar_stalker_trader_find_artefact_1_descr
    parent = gar_stalker_trader
    target = af_blood
    reward_money = 2000
    reward_reputation = +5
    reward_rank = 3
    ;reward_item = mutant_flesh_eye
    time = 86400
    ;idle_time = 84000
    prior = 3

     

    [gar_stalker_trader_find_artefact_2]
    type = artefact
    community = actor
    text = gar_stalker_trader_find_artefact_2_text
    description = gar_stalker_trader_find_artefact_2_descr
    parent = gar_stalker_trader
    target = af_gravi
    reward_money = 1500
    reward_reputation = +5
    reward_rank = 2
    ;reward_item = mutant_boar_leg
    time = 86400
    ;idle_time = 84000
    prior = 2

     

    [gar_stalker_trader_find_artefact_3]
    type = artefact
    community = actor
    text = gar_stalker_trader_find_artefact_3_text
    description = gar_stalker_trader_find_artefact_3_descr
    parent = gar_stalker_trader
    target = af_cristall_flower
    reward_money = 2000
    reward_reputation = +10
    reward_rank = 2
    ;reward_item = mutant_dog_tail
    time = 86400
    ;idle_time = 84000
    prior = 1

     

    [gar_stalker_trader_monster_part_1]
    type = monster_part
    community = actor
    text = gar_stalker_trader_monster_part_1_text
    description = gar_stalker_trader_monster_part_1_descr
    parent = gar_stalker_trader
    target = mutant_boar_leg
    reward_money = 2000
    reward_reputation = +10
    reward_rank = 5
    time = 86400
    reward_item = ammo_9x19_fmj, ammo_9x19_fmj, ammo_9x19_fmj, grenade_rgd5
    prior = 2

     

    [gar_stalker_trader_monster_part_2]
    type = monster_part
    community = actor
    text = gar_stalker_trader_monster_part_2_text
    description = gar_stalker_trader_monster_part_2_descr
    parent = gar_stalker_trader
    target = mutant_psevdodog_tail
    reward_money = 3500
    reward_reputation = +20
    reward_rank = 5
    time = 86400
    reward_item = medkit, medkit, medkit, wpn_addon_silencer
    prior = 3

     

    [gar_stalker_trader_monster_part_3]
    type = monster_part
    community = actor
    text = gar_stalker_trader_monster_part_3_text
    description = gar_stalker_trader_monster_part_3_descr
    parent = gar_stalker_trader
    target = mutant_zombie_hand
    reward_money = 500
    reward_reputation = +10
    reward_rank = 5
    time = 86400
    reward_item =  vodka, medkit, bandage, bandage, bandage
    prior = 1

     

    [gar_stalker_trader_eliminate_lager_1]
    type = eliminate_lager
    community = actor
    text = gar_stalker_trader_eliminate_lager_1_text
    description = gar_stalker_trader_eliminate_lager_1_descr
    parent = gar_stalker_trader
    target = gar_killer_lager
    reward_money = 5500
    reward_reputation = +30
    reward_relation = 15
    reward_rank = 5
    reward_item = ammo_5.45x39_ap, ammo_5.45x39_ap, ammo_5.45x39_ap, ammo_5.45x39_ap, ammo_5.45x39_ap, grenade_f1
    time = 604800

     

    [gar_stalker_trader_eliminate_lager_2]
    type = eliminate_lager
    community = actor
    text = gar_stalker_trader_eliminate_lager_2_text
    description = gar_stalker_trader_eliminate_lager_2_descr
    parent = gar_stalker_trader
    target = gar_zomb
    reward_money = 3500
    reward_reputation = +20
    reward_relation = 10
    reward_rank = 10
    reward_item = wpn_addon_scope_susat
    time = 604800

     

    Жизнь следует измерять поступками, а не временем...

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

    В оригинале возможна передача только одного предмета. В АМК можно передавать несколько, "new_dialog" это как раз АМК функция, там это организовано.

    Пробовал но все сводиться к: 

    Скрытый текст
    
    FATAL ERROR
     
    [error]Expression    : fatal error
    [error]Function      : CScriptEngine::lua_error
    [error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
    [error]Line          : 73
    [error]Description   : <no expression>
    [error]Arguments     : LUA error: ...r. Тень Чернобыля\gamedata\scripts\new_dialog.script:323: attempt to call method 'id' (a nil value)
     
    
    stack trace:
    

     

    Бесполезно.

    Ссылка на комментарий
    2 часа назад, Змея сказал:

    @Cagorich,  по идее, чтобы пользоваться функциями АМК-мода, нужно ставить, либо адаптировать АМК-мод...

    Попробовал чистый AMK.

    function out_desyat_hvostov_to_wolf(first_speaker, second_speaker)
    	local actor, trader
    	if db.actor and db.actor:id() == first_speaker:id() then
    		actor = first_speaker
    		trader = second_speaker
    	else
    		actor = second_speaker
    		trader = first_speaker
    	end
    	flamethrower.relocate_n_items_section(trader, "mutant_dog_tail", "out", 10)
    end

    В итоге вылет:

    Скрытый текст
    
    FATAL ERROR
     
    [error]Expression    : fatal error
    [error]Function      : CScriptEngine::lua_error
    [error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
    [error]Line          : 73
    [error]Description   : <no expression>
    [error]Arguments     : LUA error: ... Тень Чернобыля\gamedata\scripts\flamethrower.script:7: attempt to call method 'id' (a nil value)
     
    
    stack trace:

     

     

    Ссылка на комментарий
    14 часов назад, losiara сказал:

    вылет безлоговый

    Посмотреть последнее, что будет в логе, если принудительно его писать. Надо в файле _g.script поправить так:

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

    rlog = 1
    function printf(fmt,...)
        -- принудительная запись в лог, для выявления причин безлоговых вылетов 
        -- v.0.77 : добавлено условие rlog 
        if rlog == 1 then local con=get_console()con:execute(string_gsub(string_format(fmt,...)," ","_"))con:execute("flush") end
        local arg = {...}
        if (arg and arg[1] ~= nil) then    
            log(string_format(fmt,...))
        end
    end 

    Потом вернуть как было или выставить rlog = 0

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


    Подарки

  • 4
  • 4
  • 2
  • 5
  • Ссылка на комментарий

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

    • Сочувствую 3
    Ссылка на комментарий

    Всем привет. Может ли кто-то подсказать теорию работы схемы mob_jump? 
    На практике я вообще не могу разобраться с принципами её работы, а гайд по настройке логики содержит 3,5 слова касательно mob_jump.
    Ниже кидаю пример логики своего снорка.
     

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

    [spawner]
    cond = {+actor_in_rest_exit}

    [logic]
    active = mob_walker@first

    [mob_walker@first]
    path_walk = lv_snork_walk_00
    path_look = lv_snork_look_01
    braindead = true
    on_signal = jump| mob_jump

    [mob_jump]
    path_jump = lv_snork_walk_01
    ph_jump_factor = 4
    offset = 0,0,0
    on_signal = jumped| mob_walker@sec

    [mob_walker@sec]
    path_walk = lv_snork_walk_01
    path_look = lv_snork_look_01
    braindead = true
    END

     

    Т.е., по сути, он должен двигаться walker'ом, по сигналу в последней точке переходить в jump'ера, прыгать, а затем продолжать двигаться следующим walker'ом. Но он вообще не прыгает, то есть, тупо прётся на точку обычным walker'ом. Пробовал и с разных позиций заставлять его прыгать (изначальная идея - прыжок с крыши дома прямо перед мордой эктора; сейчас он даже на ровной земле не прыгает), и jump_factor разный ставить - ничего вообще не происходит. Разве что, при экспериментах со спавном он может появляться в рандомных местах возле эктора. Буду благодарен за советы. 

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

    Всем привет, как убрать античит из оп 2.1? Хочу изменить урон нпс по мне. Слишком они сильно бьют даже в экзоскелете с артами...

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

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

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

    Ага. И offset настрой. У тебя высота прыжка - НОЛЬ.

     

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

    Добрый день!!! С наступающим!

    Необходимо через рестриктор сделать ГГ другом для указанного гулага, вот запарился какой скрипт будет верным?

    Скрытый текст
    
    function set_gulag_friend_actor( actor, npc, p )
    	if p[1] then
    		xr_gulag.setGulagGoodwill(p[1], actor)
    	end
    end
    
    function gulag_friend_actor( actor, npc, p )
    	if p[1] then
    		xr_gulag.setGulagfriend(p[1], actor)
    	end
    end

    В оригинале есть функция делающая актора врагом гулагу, а мне надобно обратное, вылетов нет, но и не работает, а вроде как должна...

    xr_gulag.script

    Скрытый текст
    
    -- установить расположенине всех членов смарта к указанному объекту
    function setGulagGoodwill( name_or_sid, goodwill, target_obj )
    	local gulag = get_gulag( name_or_sid )
    
    	if gulag then
    		gulag:set_goodwill( goodwill, target_obj )
    	end
    end
    
    -- сделать указанного персонажа другом всех персонажей смарта
    function setGulagfriend( name_or_sid, target_obj )
            setGulagRelation( name_or_sid, game_object.friend, target_obj )
    end

    Попробовал и сам наваять:

    Скрытый текст
    
    function friend_gar_parazit (actor, npc)     
        local gulag = xr_gulag.get_gulag_by_name ("bar_zastava_2") -- название гулага
        if (gulag) then
           gulag:set_relation (game_object.friend, actor)
        end   
    end

    Гулаг взят из оригинальной игры.

     

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

    Жизнь следует измерять поступками, а не временем...

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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