CS. Создание враждующих фракций — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(ImQFUkwt) |
Ork (обсуждение | вклад) (оформление) |
||
(не показаны 10 промежуточные версии 8 участников) | |||
Строка 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''': | ||
+ | |||
+ | <ini> | ||
+ | [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 | ||
+ | </ini> | ||
+ | |||
+ | (обратите внимание, что в конфиге после знака "=", идёт "Группировка-друзья, Группировка-враги"), | ||
+ | или вторым способом: | ||
+ | |||
+ | <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:07, 12 апреля 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)