Я добавлю достижение "Охотник" (в скриптах "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 ящика, в который будут складываться патроны (в данном случае, это ящик на Затоне).
На этом все.
Автор: ммихаилл