Jump to content

Recommended Posts

naxac    1,510

@Cagorich, судя по назанию, функция должна удалять предмет из инвентаря.  Можно сделать что-то вроде этого:

function remove_item_from_inventory( item, npc )
	  if npc == nil then npc = db actor end
	  npc:drop_item( item ) -- на случай, если это активный предмет, чтобы непись не повис
	  local se_item = alife():object( item:id() )
	  if se_item then
	    alife():release( se_item, true )
	  end
	end

  • Thanks 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Share this post


Link to post
Share on other sites

Всем предновогодний привет. Уже давно собираю "солянку под себя", изначально на основе АМК 1.41. Уже сделано достаточно много, но совсем недавно заметил проблему. После сейв-лоада рандомно появляются инвентарные ящики с визуалом динамита. Я их, конечно, удаляю через net_spawn, но появляются новые. Пересмотрел все свои правки и дополнения, но ничего не нашёл. И вот вопрос - это проблема игры (4 и 6 патч), самого АМК или же частный случай? Может, кто сталкивался.

Share this post


Link to post
Share on other sites
naxac    1,510

@mole venomous, ЕМНИП, эти ящики - для работы менеджера оружия rx_wmgr. Найди в конфигах inventory_box и пропиши ему какой-нибудь невидимый визуал из папки equipment_cache, чтобы глаза не мозолил)

  • Thanks 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Share this post


Link to post
Share on other sites
19 часов назад, naxac сказал:

для работы менеджера оружия

О как! Спасибо, не допёр бы. А больше ai additions не преподносит сюрпризов?

 

Share this post


Link to post
Share on other sites
nasar75    2,505
22 часа назад, naxac сказал:

Найди в конфигах inventory_box и пропиши ему какой-нибудь невидимый визуал

Ага, и все динамитные ящики станут невидимыми :rolleyes:

Ящик для менеджера оружия обзывается rx_inventory_box.

@naxac, спасибо за наводку.


AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  Всяко-разное для Золотого Шара

Share this post


Link to post
Share on other sites
naxac    1,510

@nasar75, в старом варианте wmgr это был просто inventory_box, у которого с оригинала ТЧ прописан визуал ящика. 

52 минуты назад, nasar75 сказал:

все динамитные ящики станут невидимыми

Не станут, секция inventory_box нигде в чистом виде не используется.

  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Share this post


Link to post
Share on other sites
nasar75    2,505

@naxac, понятно, я смотрел файлы из НС-2016. Там пару ящиков не хотят спавниться по координатам.

https://www.amk-team.ru/forum/topic/13471-tehpodderzhka-ns-2016/?do=findComment&comment=1218473

 


AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  Всяко-разное для Золотого Шара

Share this post


Link to post
Share on other sites
dPlayer    345

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

Edited by dPlayer

westwood.gif

Share this post


Link to post
Share on other sites
lordmuzer    726

Такое через выдачу инфо поршня и его проверку в предусловии делается.

  • Согласен 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Змея    240
10 часов назад, dPlayer сказал:

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

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

Share this post


Link to post
Share on other sites
Змея    240

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

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

Share this post


Link to post
Share on other sites
Cagorich    0
Скрытый текст

-- Проверка на наличие нескольких и разных предметов в рюкзаке ГГ.
-- 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 предмет. Платформа: ТЧ.

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

Edited by Cagorich

Share this post


Link to post
Share on other sites
Cagorich    0

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

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

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

Вызвал так:

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

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

Edited by Cagorich

Share this post


Link to post
Share on other sites
losiara    13
25 минут назад, Cagorich сказал:

 


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

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

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


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

Share this post


Link to post
Share on other sites
losiara    13

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

Прошу помощи если кто сталкивался, добавил нового торговца через 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

 


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

Share this post


Link to post
Share on other sites
Cagorich    0
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:

 

Бесполезно.

Share this post


Link to post
Share on other sites
Змея    240

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

Share this post


Link to post
Share on other sites
Cagorich    0
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:

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...