CS. Создание враждующих фракций — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(pdIbAQEPG) |
RedPython (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | + | == Теория == | |
| + | Для моего мода мне понадобилось сделать новую группировку. Сообственно, для начала вы должны создать свою группировку. Не люблю теорий, перейдём сразу к практике! | ||
| + | |||
| + | == Практика == | ||
| + | |||
| + | Рассмотрим функцию из '''dialogs.script''': | ||
| + | |||
| + | <lua> | ||
| + | function actor_set_stalker(actor, npc) | ||
| + | printf("ACTOR NOW IN [STALKER] COMMUNITY") | ||
| + | sim_board.get_sim_board():set_actor_community("stalker") | ||
| + | return true | ||
| + | end | ||
| + | </lua> | ||
| + | |||
| + | Если попробовать добавить | ||
| + | |||
| + | <lua> | ||
| + | sim_board.get_sim_board():set_actor_community("my_comm") | ||
| + | </lua> | ||
| + | |||
| + | то ничего не произойдет, значит идём дальше, в '''sim_board.script''': | ||
| + | |||
| + | <lua> | ||
| + | -- Перевод игрока в группировку. | ||
| + | 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 | ||
| + | </lua> | ||
| + | |||
| + | Здесь есть два выхода - либо подправить '''actor_communitites''' в текущем скрипте | ||
| + | |||
| + | <lua> | ||
| + | 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" | ||
| + | } | ||
| + | </lua> | ||
| + | |||
| + | и в '''game_relation.ltx''': | ||
| + | |||
| + | <pre> | ||
| + | [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 | ||
| + | </pre> | ||
| + | |||
| + | (обратите внимание, что в конфиге после знака "=", идёт "Группировка-друзья, Группировка-враги"), | ||
| + | или вторым способом: | ||
| + | |||
| + | <lua> | ||
| + | db.actor:set_character_community("my_comm", 0, 0) | ||
| + | </lua> | ||
| + | |||
| + | И в конфиге, естественно. | ||
| + | |||
| + | Вот мы и разобрались со вступлением, но при переходе в раздел "Война группировок" - вылет. Идём дальше. Видим, что ошибка в скрипте '''pda.script''', значит, по аналогии добавляем туда: | ||
| + | |||
| + | <lua> | ||
| + | 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")--Локация обитания | ||
| + | </lua> | ||
| + | |||
| + | |||
| + | == The End == | ||
| + | Ну вроде всё! Тутор рассчитан на опытных модмейкеров! Сам процесс вступления не описывал. | ||
| + | |||
| + | == Титры) == | ||
| + | |||
| + | Автор - '''russian-stalker''' | ||
| + | Статья перенесена с оф. мод-ресурса by '''stalers-life''' ('''stunder''') | ||
| + | |||
| + | [[Категория: Скрипты]] | ||
Версия 15:18, 17 марта 2011
Содержание
Теория
Для моего мода мне понадобилось сделать новую группировку. Сообственно, для начала вы должны создать свою группировку. Не люблю теорий, перейдём сразу к практике!
Практика
Рассмотрим функцию из 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)