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

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

4 часа назад, WinCap сказал:

функция table.getn устарела

Ну это она для свежих версий Луа устарела, а в оригинальном движке прекрасно работает...

 

@dPlayer

Перебор таблицы у тебя не правильно сделан, см. пост @WinCap

  • Спасибо 1
Ссылка на комментарий

@Gorlomi
Не нужно править таймеры выброса. Он будет работать и при таймфакторе 500.

Эта строка запускает таймер выброса в игровом времени.

amk.g_start_timer("blowout",0,0,3,2)
g_start_timer(name,delay_d,delay_h,delay_m,action)

name - имя таймера

delay_d - задержка в днях

delay_h - задержка в часах

delay_m - задержка в минутах

 

Важнейшая задача цивилизации - научить человека мыслить.

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

функция table.getn устарела

Вот это поворот:biggrin:

2 часа назад, AndreySol сказал:

а в оригинальном движке прекрасно работает

Просто из академического интереса, а как этот перебор выглядел бы на table.geth правильно?

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

@AndreySol@dPlayer, я не говорил, что функция table.getn не работает - она не рекомендуется к использованию. А перебор с её помощью выглядит также, как и с оператором длины #.

for i=1, table.getn(t) do
   a = alife():story_object(t[i])

 

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

Ссылка на комментарий
В 15.12.2018 в 19:09, Dimon12321 сказал:

В Зове Чернобыля скриптовые выводы сообщений (CusMsg, game.translate_string и local message) не распознают русские символы

 

Распознают, просто надо сохранять файлы с кириллицей в кодировке  windows-1251.

  • Согласен 1
  • Полезно 1

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

naxac.gif

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

@Zagolski, Остались. Обратная совместимость нужна когда пишите модули для общего пользования. Если table.geth  нет (не определена Луа новее 5.2 вроде), то её можно написать самому.

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

Здравствуйте. Вопрос, как можно совмещать скрипты? Хочу поиграть в ТЧ с некоторыми мини-модами, а оба этих мода используют один и тот же скрипт bind_stalker, а хотелось бы оба установить

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

Доброго времени суток. Недавно заинтересовался созданием сюжета на платформе Теней Чернобыля и обнаружил для себя одну проблему, проблема в том что я не нашел в оригинале функцию на передачу\взятие одинаковых предметов в разном количестве. После долгого поиска на форумах нашел такую функцию:

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

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

-- Отдача определенных предметов в нужном количестве.
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 
      ваш_скрипт.remove_item_from_inventory(item, actor) 
      reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 
     end 
end 

 

И оформляется это к примеру так:

-- Есть ли два "ammo_gauss" - проверка.
function have_ammo_gauss() 
return     
ваше_название_скрипта.item_much("ammo_gauss",2) ~= false 
end

-- Проверка на количество разных предметов.
return 
ваше_название_скрипта.item_much("conserva",5) ~= false and 
ваше_название_скрипта.item_much("kolbasa",5) ~= false and 
ваше_название_скрипта.item_much("bread",5) ~= false 
end

-- Отдача "этих" предметов без появления их в торговле НПС - тупо отбирание предметов у ГГ.
function ваша_функция(second_speaker, first_speaker) 
ваше_название_скрипта.out_item_much("conserva",5) 
ваше_название_скрипта.out_item_much("kolbasa",5) 
ваше_название_скрипта.out_item_much("bread",5) 
end

Вроде бы все хорошо и понятно, но я не понял строчку в функции под спойлером:

ваш_скрипт.remove_item_from_inventory(item, actor) 

Что имелось ввиду? С какого скрипта должно вызываться remove_item_from_inventory? Там откуда я взял "это" нет никаких объяснений, а форум мертв.

И как сделать так что бы отдача определенных предметов в разном количестве была "наоборот" от НПС к ГГ? Или можно сделать все проще?

В скриптах я не силен, я только недавно начал ковыряться в файлах игры. Мне посоветовали обратиться с данным вопросом на этот форум.

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

я не нашел в оригинале функцию на передачу\взятие

dialogs.script\function relocate_item_section(victim, section, type)

 

Можно пользоваться и таким методом, допустим определяем ценность общего барахла в инвентори актора:

function get_value()
	local value = 0
	for i=0, db.actor:object_count()-1 do
		local item = db.actor:object(i)
		if item then
			local sec = item:section()
			local cost = system_ini():r_float(sec,"cost")
			value = value + cost*item:condition()
		end
	end
	return value
end

 

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

@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

  • Спасибо 1

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

naxac.gif

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

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

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

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

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

  • Спасибо 1

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

naxac.gif

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

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

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

 

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

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

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

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

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

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

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

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

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

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

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

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

  • Полезно 1

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

naxac.gif

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

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

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

 

AMD Athlon II X2 250, NVIDIA GTS 450, RAM 8.0 GB, WIN 7/64  правки Золотой Шар

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

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

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

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

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

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

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

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

Войти

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

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

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