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

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

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

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

Ссылка на комментарий
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

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

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

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

  • Сочувствую 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 разный ставить - ничего вообще не происходит. Разве что, при экспериментах со спавном он может появляться в рандомных местах возле эктора. Буду благодарен за советы. 

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

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

Ну иногда приходится помучаться с выбором  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

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

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

@Змея, спасибо. Попытался по твоему совету взять snork_normal (именно они, судя по логике, скакали на ЧАЭС-2) и покрутить offset Y. Началось вообще невообразимое - снорк стал аки воздушный шар летать по всей карте, проваливаться под текстуры, спавниться где угодно и прочее. Причём, если делать jump_factor и offset в пределах нормы для прыжка с дома (3 и 4 соответственно, имхо), то схема опять не работает. Даже не знаю, что и делать. Не знаешь, часом, какой offset Y можно поставить для прыжка с Y 14 на Y 9? Спасибо.

Изменено пользователем Дмитрий Зверев (Книги, Вселенная и вообще)
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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