CS. Создание враждующих фракций
Материал из S.T.A.L.K.E.R. Inside Wiki
Содержание
Теория
Для моего мода мне понадобилось сделать новую группировку. Сообственно, для начала вы должны создать свою группировку. Не люблю теорий, перейдём сразу к практике!
Практика
Рассмотрим функцию из dialogs.script:
function actor_set_stalker(actor, npc) printf("ACTOR NOW IN [STALKER] COMMUNITY") sim_board.get_sim_board():set_actor_community("stalker") return true end
Если попробовать добавить
sim_board.get_sim_board():set_actor_community("my_comm")
то ничего не произойдет, значит идём дальше, в sim_board.script:
-- Перевод игрока в группировку. function sim_board:set_actor_community(community) ---- Устанавливаем группировку игрока db.actor:set_character_community(actor_communitites[community], 0, 0) local tm = task_manager.get_task_manager() for k,v in pairs(self.players) do if v.player_name == community then v.community_player = true else v.community_player = false -- Обнуляем все квесты, которые выдала эта группировка for kk,vv in pairs(v.random_tasks) do local task = tm:get_task_by_entity_id(vv) task.last_check_task = "reversed" end end v.brain:calculate_expansion_targets() end end
Здесь есть два выхода - либо подправить actor_communitites в текущем скрипте
local actor_communitites = { csky = "actor_csky", dolg = "actor_dolg", freedom = "actor_freedom", bandit = "actor_bandit", stalker = "actor_stalker", none = "actor", zombied = "zombied", monolith = "monolith", my_comm = "my_comm" }
и в game_relation.ltx:
[actor_communities] actor = actor, actor actor_csky = csky, renegade actor_bandit = bandit, stalker actor_dolg = dolg, freedom actor_freedom = freedom, dolg actor_stalker = stalker, bandit my_comm = my_comm, bandit [pda_rank_communities] dolg freedom stalker bandit csky renegade my_comm
(обратите внимание, что в конфиге после знака "=", идёт "Группировка-друзья, Группировка-враги"), или вторым способом:
db.actor:set_character_community("my_comm", 0, 0)
И в конфиге, естественно.
Вот мы и разобрались со вступлением, но при переходе в раздел "Война группировок" - вылет. Идём дальше. Видим, что ошибка в скрипте pda.script, значит, по аналогии добавляем туда:
elseif(state.faction_id=="freedom") then state.name = game.translate_string("ui_st_name_freedom") state.icon = "freedom_wide" state.icon_big = "freedom_big" if faction ~= nil then state.target = faction:get_war_target_title() state.target_desc = faction:get_war_target_descr() else state.target = "" state.target_desc = "" end state.location = game.translate_string("st_location_freedom") state.war_state1 = faction:get_war_stage_icon(4) state.war_state_hint1 = faction:get_war_stage_icon(4) state.war_state2 = faction:get_war_stage_icon(5) state.war_state_hint2 = faction:get_war_stage_icon(5) state.war_state3 = faction:get_war_stage_icon(6) state.war_state_hint3 = faction:get_war_stage_icon(6) state.war_state4 = faction:get_war_stage_icon(7) state.war_state_hint4 = faction:get_war_stage_icon(7) state.war_state5 = faction:get_war_stage_icon(8) state.war_state_hint5 = faction:get_war_stage_icon(8) --Наша часть elseif(state.faction_id=="my_comm") then state.name = game.translate_string("ui_st_name_freedom")--Имя нашей группировки в войне группировок state.icon = "freedom_wide" --Иконка в инвентаре state.icon_big = "freedom_big" --Иконка в войне группировок if faction ~= nil then state.target = faction:get_war_target_title() state.target_desc = faction:get_war_target_descr() else state.target = "" state.target_desc = "" end state.location = game.translate_string("st_location_freedom")--Локация обитания
The End
Ну вроде всё! Тутор рассчитан на опытных модмейкеров! Сам процесс вступления не описывал.
Титры)
Автор - russian-stalker Статья перенесена с оф. мод-ресурса by stalers-life (stunder)