
--[[-----------------------------------------------------------
 File               : kvest_functions.script
 Description        : functions for kvests
 Wrote and searched 
 functions          : © Stalk15
 Copyright          : 2010 © Artos, erlik
 Authors            : Artos, erlik
 Last update        : 22.07.2010 
--]]-----------------------------------------------------------


--/Нашли 4 документа Ирбису
local t_wpn = {"doc_5", "doc_7"}
function search_docs_for_irbis_complete()
	local gg = db.actor
  	if gg then
     		for i=1,#t_wpn  do
      			if not gg:object(t_wpn[i]) then 
        			return false
      			end
    		end
    		gg:give_info_portion("esc_search_doc_5678_for_irbis_complete")
    		return true 
  	end
  	return false
end

--/на marsh ли мы или нет
function go_to_marsh_complete()
   if level_name == "marsh" then 
      return true
	 else
	return false
  end
end	

--/Нашли инструменты
function search_instr_complete(actor, npc)
if db.actor ~= nil then
  if db.actor:object("instrumrem") then
    db.actor:give_info_portion("mar_search_instr_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты для sko
function search_instr_for_sko_complete(actor, npc)
if db.actor ~= nil then
  if db.actor:object("instrumcal") then
    db.actor:give_info_portion("mar_search_instr_for_sko_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты_2
function search_instr_2_complete(actor, npc)
  if db.actor ~= nil then
   return 
     db.actor:object("instrumrem")~=nil
    end
  return false
end

--/Нашли форт
function search_fort_complete(actor, npc)
  if db.actor ~= nil then
   return 
     db.actor:object("wpn_fort_m1")~=nil
    end
  return false
end

--/Нашли хабара для Кузнецова 
function search_habar_for_mil_complete()
    bHas = Has_ManyItems("vodka", 3, "bread", 3, "ammo_9x18_fmj", 10)
end

--/
function join_military (actor, npc)
    printf ("ACTOR NOW IN MILITARY COMMUNITY")
    if db.actor then
       db.actor:set_character_community ("military", 0, 0)
    end
end
--------------------------------------------------------------------------------
--/function by Artos
function Has_ManyItems(...)
  local bHas = false --/ флаг наличия хотя бы одного предмета
  local iCnt = arg.n
  if iCnt ~= 0 then
    --/ проверка на наличие в массиве аргументов - заданного oNPC
    local oNPC --/ для проверки: не задан ли 'не актор'
    if type(arg[iCnt]) == "userdata" then --/ задан NPC, иначе работаем с актором
      oNPC = arg[iCnt] --/ запоминаем/присваиваем ...
      iCnt = iCnt - 1 --/ уменьшаем кол-во элементов массива аргументов
    end
    for i=1, iCnt do --/ проверяем массив
      if type(arg[i]) == "string" then --/ список
        local iNum = 1
        if type(arg[i+1]) == "number" then
          iNum = arg[i+1]
        end
        if not Has_N_Item(arg[i], iNum, oNPC) then
          return false --/> у NPC нет i-предмета(ов)
        end 
        bHas = true
      elseif type(arg[i]) == "table" then --/ таблица
        for k,v in pairs(tTable) do
          if type(k) == "string" and type(v) == "number" then --/ двумерный массив (с кол-вами)
            if not Has_N_Item(k, v, oNPC) then
              return false --/> у NPC нет k-предмета(ов)
            end
          elseif type(k) == "number" and type(v) == "string" then --/ одномерный массив
            if not Has_N_Item(v, 1, oNPC) then
              return false --/> у NPC нет k-предмета
            end
          else
            return false --/> ошибка в таблице
          end
          bHas = true
        end
      end
    end
    return bHas --/> NPC имеет полный набор предметов
  end
  return false
end
--------------------------------------------------------------------------------
--[[/Нашли 2 документа Сахарычу
local s_doc = {"doc_1", "doc_2"}
function search_docs_for_saharov_complete()
  local gg = db.actor
  if gg then
     for i=1,#s_doc  do
      if not gg:object(s_doc[i]) then 
        return false
      end
    end
    gg:give_info_portion("yan_search_docs_on_dead_city_complete")
    return true 
  end
  return false
end
]]
--/Нашли 2 документа Сахарычу_запас  --/Раскоментить, если не обновляется
function search_docs_for_saharov_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("doc_1") and db.actor:object("doc_2") then
    db.actor:give_info_portion("yan_search_docs_on_dead_city_complete")
    return true
  end
 end
 return false
end


--/нашли сахарычу doc_3
function search_doc_3_for_saharov_complete(actor, npc)
    if db.actor ~= nil then
      return db.actor:object("doc_3")~=nil
    end
  return false
end

--/забрали рюкзак новичка у военных
function search_rukz_for_nubas_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("inv_ruck") then
    db.actor:give_info_portion("esc_search_rukz_for_nubas_complete")
    return true
  end
 end
 return false
end

-----------------------------------------------------
--/(function by Artos)
function Actor_Has_ListItems(sSection,iNum)
  if not iNum then iNum = 1 end
  local oActor = db.actor
  local iCnt = 0
  if oActor and sSection then
    oActor:iterate_inventory(
      function (dummy, oItem)
        if oItem:section() == sSection then
          iCnt = iCnt + 1
          if iCnt >= iNum then
            return true --/> актор имеет N предметов
          end
        end
      end
    ,nil)
  end
  return iCnt >= iNum --/> имеет ли актор N предметов
end

--/Функция erlik'а
function have_n_m(section,number)
      local actor = db.actor
      if actor then
      local cnt = 0
      actor:iterate_inventory( function (dummy, item)
      if item:section() == section then cnt = cnt + 1 end
    end, nil)
  return cnt >= number
 end
return false
end
-----------------------------------------------------
--/Нашли 20 хвостов собаки
function search_20_hvostov_for_lesnik_complete()
    return this.Actor_Has_ListItems("mutant_psevdodog_tail", 10)
end

--/Проверяем 10 хвостов
function have_10_tails()
      return this.have_n_m("mutant_psevdodog_tail",10)
end

--/Нашли инструменты для Кирилла Ската
local i_ins = {"instrumcal", "instrumrem"}
function search_instr_cal_rem_on_jup_complete()
  local gg = db.actor
  if gg then
     for i=1,#i_ins  do
      if not gg:object(i_ins[i]) then 
        return false
      end
    end
    gg:give_info_portion("jup_search_instr_cal_rem_on_jup_complete")
    return true 
  end
  return false
end

--/Нашли инструменты для Медведя
function search_instrcal_for_med_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("instrumcal") then
    db.actor:give_info_portion("jup_search_instrcal_for_med_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты для Медведя_2
function search_instrem_for_med_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("instrumrem") then
    db.actor:give_info_portion("jup_search_instrem_for_med_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты для Кирилла Ската
function search_instrcal_for_dragon_ska_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("instrumcal") then
    db.actor:give_info_portion("jup_search_instrcal_for_dragon_ska_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты для Кирилла Ската_2
function search_instrem_for_dragon_ska_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("instrumrem") then
    db.actor:give_info_portion("jup_search_instrem_for_dragon_ska_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты для Шурупа
function search_instrcal_for_shurup_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("instrumcal") then
    db.actor:give_info_portion("jup_search_instrcal_for_shurup_complete")
    return true
  end
 end
 return false
end

--/Нашли инструменты для Шурупа_2
function search_instrem_for_shurup_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("instrumrem") then
    db.actor:give_info_portion("jup_search_instrem_for_shurup_complete")
    return true
  end
 end
 return false
end

--/Нашли гаусс_м1
function search_instrem_for_shurup_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("wpn_gauss_m1") then
    db.actor:give_info_portion("mar_search_gauss_complete")
    return true
  end
 end
 return false
end

--/Нашли doc_9
function search_docs_with_gront_complete(actor, npc)
 if db.actor ~= nil then
  if db.actor:object("doc_9") then
    db.actor:give_info_portion("jup_search_docs_with_gront_complete")
    return true
  end
 end
 return false
end

--/на pripyat ли мы или нет
function go_to_pripyat_complete()
   if level_name == "pripyat" then 
      return true
	 else
	return false
  end
end	

--/на garbage ли мы или нет
function go_to_garbage_complete()
   if level_name == "l02_garbage" then 
      return true
	 else
	return false
  end
end	

--/Зашманали тайник
function shmanat_treasure_complete()
    return this.have_n_m("af_fireball",5, "wpn_svd", "ammo_7.62x54_7h14")
end

function credits_seq()
	game.start_tutorial("credits_seq")
end

--/Нашли 2b интрумента Скату
local instrs = {"instrumcal", "instrumrem"}
function search_docs_for_saharov_complete()
  local gg = db.actor
  if gg then
     for i=1,#instrs  do
      if not gg:object(instrs[i]) then 
        return false
      end
    end
    gg:give_info_portion("jup_search_instrrem_cal_for_dragon_ska_complete")
    return true 
  end
  return false
end





