Я добавлю достижение "Охотник" (в скриптах "actor_hunter"), при чем в последствии сталкеры ГГ будут класть в личный ящик патроны (или что вы сами пожелаете).

Идем по адресу: gamedata\configs\misc
Файл: achievements
В общий список [achievements] добавляем новую строку: actor_hunter
А в конце добавляем секцию:

[actor_hunter]
icon    = ui_inGame2_Ohotnik_na_mutantov
hint    = st_actor_hunter_hint
name    = st_actor_hunter_name
desc    = st_actor_hunter_desc
functor    = xr_statistic.actor_hunter_functor

Далее следуем: gamedata\configs\text\rus
Добавляе в любой файл text:

<string id="st_actor_hunter_hint">
<text>Ваши отношения с охотниками улучшились.\nЧтобы хоть как-то отблагодарить Вас, они время от времени оставляют патроны в Вашем личном ящике на локации «Затон».</text>
</string>
<string id="st_actor_hunter_name">
<text>Охотник</text>
</string>
<string id="st_actor_hunter_desc">
<text>Вы не пытаетесь избегать опасных мутантов - вы ведете на них охоту и преуспели в этом. Хорошие охотники - уважаемые люди среди сталкеров.</text>
</string>
<string id="st_ach_actor_hunter">
<text>Получено достижение «Охотник».</text>
</string>
<string id="st_actor_hunter_news">
<text>В ваш личный ящик на локации «Затон» помещены боеприпасы за особые заслуги пред охотниками.</text>
</string>

Далее идем сюда: gamedata\scripts
Файл: news_manager
В общий список tips_icons = { добавляем:

actor_hunter    = "ui_inGame2_PD_Ohotnik_na_mutantov",

В этой же папке находим файл: xr_statistic
В конце файла добавляем:

function actor_hunter_functor()
if not has_alife_info("actor_hunter_info") then
    if has_alife_info("sv_actor_hunter_achiev") then
    db.actor:give_info_portion("actor_hunter_info")
    news_manager.send_tip(db.actor, "st_ach_actor_hunter", nil, "actor_hunter", nil, nil)
    xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"stalker", 500})
    end
end
return has_alife_info("actor_hunter_info")
end

Разберем:

"actor_hunter_info" - этот инфопоршень выдается при получении, чтобы оно повтороно не было выдано актеру.
"sv_actor_hunter_achiev" - этот инфопоршень необходим, чтобы получить это достижение.
xr_effects.inc_faction_goodwill_to_actor(db.actor, nil, {"stalker", 500}) - эффект от получения этого достижения (в данном случае улучшатся отношения со сталкерами на 500 ед.). Выдается единожды, поэтому можно прописать любые другие функции (каждый новый пункт с новой строки по-порядку).

Теперь, главное, необходимо, чтобы ГГ в ящик клали вещи (здесь будет сложнее).
В этой же папки находим файл bind_stalker
Теперь делаем так, как мною описано без самодеятельности:
Строка: function actor_binder:__init (obj) super(obj)
Добавляем пред end новую строку:
self.last_actor_hunter_achievement_spawn_time = nil

Теперь находим строку: self:check_mutant_hunter_achievement()
И под ней записываем:
self:check_actor_hunter_achievement()

Находим секцию:

if self.last_mutant_hunter_achievement_spawn_time == nil then
    packet:w_bool(false)
else
    packet:w_bool(true)
    utils.w_CTime(packet, self.last_mutant_hunter_achievement_spawn_time)
end

И сразу после нее добавляю нашу секцию:

if self.last_actor_hunter_achievement_spawn_time == nil then
    packet:w_bool(false)
else
    packet:w_bool(true)
    utils.w_CTime(packet, self.last_actor_hunter_achievement_spawn_time)
end

Находим следующую секцию:

stored_achievement_time = reader:r_bool()
if stored_achievement_time == true then
    self.last_mutant_hunter_achievement_spawn_time = utils.r_CTime(reader)
end

И под ней добавляем:

stored_achievement_time = reader:r_bool()
if stored_achievement_time == true then
    self.last_actor_hunter_achievement_spawn_time = utils.r_CTime(reader)
end

Теперь находим строку: local mutant_hunter_achievement_items = {
А после } c новой строки добавляем:

local actor_hunter_achievement_items = {"ammo_9x19_fmj",
"ammo_5.45x39_fmj",
"ammo_5.56x45_ss190",
"ammo_12x70_buck"}

Теперь находим секцию: function actor_binder:check_mutant_hunter_achievement()
И сразу после нее добавляем новую секцию:

function actor_binder:check_actor_hunter_achievement()
if not has_alife_info("actor_hunter_info") then
    return
end
if self.last_actor_hunter_achievement_spawn_time == nil then
    self.last_actor_hunter_achievement_spawn_time = game.get_game_time()
end
if game.get_game_time():diffSec(self.last_actor_hunter_achievement_spawn_time) > 43200 then
    spawn_achivement_items(actor_hunter_achievement_items, 5, "zat_a2_actor_treasure")
    xr_effects.send_tip(db.actor, nil, {"st_actor_hunter_news","got_ammo"})
    self.last_actor_hunter_achievement_spawn_time = game.get_game_time()
end

end

Здесь разберем только одно значение:

"zat_a2_actor_treasure" - собственно, сам ID ящика, в который будут складываться патроны (в данном случае, это ящик на Затоне).

На этом все.

Автор: ммихаилл