SoC. Сообщение о смерти сталкеров — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

SoC. Сообщение о смерти сталкеров — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
 
(не показаны 25 промежуточные версии 14 участников)
Строка 1: Строка 1:
Приветствую '''Вас'''.
+
Итак, первым делом в директории '''gamedata\scripts''' создайте файл с названием '''имя_вашего_файла.script'''
+
Сегодня я расскажу, как создать сообщение о смерти сталкеров.
+
Итак, первым делом в директории '''gamedata\scripts''' создайте файл с названием '''имя_вашего_файла.scritp'''
+
  
 
1.Открываем его и пишем:
 
1.Открываем его и пишем:
<lua>local locations_name = {
+
<lua>local level_name = {
   ["l01_escape"]     = "       Локация: Кордон",
+
   ["l01_escape"] = "Кордон",
   ["l02_garbage"]   = "       Локация: Свалка",
+
   ["l02_garbage"] = "Свалка",
   ["l03_agroprom"]   = "       Локация: Агропром",
+
   ["l03_agroprom"] = "НИИ Агропром",
   ["l03u_agr_undergroun"]   = "       Локация: Подземелье Агропрома",
+
   ["l03u_agr_underground"] = "Подземелье НИИ Агропром",
   ["l04_darkvalley"] = "       Локация: Тёмная долина",
+
   ["l04_darkvalley"] = "Тёмная долина",
   ["l04u_labx18"] = "       Локация: Лаборатория X-18",
+
   ["l04u_labx18"] = "Лаборатория X-18",
   ["l05_bar"]       = "       Локация: Бар",
+
   ["l05_bar"] = "Бар",
   ["l06_rostok"]     = "       Локация: Росток",
+
   ["l06_rostok"] = "Дикая территория",
   ["l07_military"]   = "       Локация: Арм.склады",
+
   ["l07_military"] = "Арм.склады",
   ["l08_yantar"]     = "       Локация: Янтарь",
+
   ["l08_yantar"] = "Янтарь",
   ["l10_radar"]     = "       Локация: Радар",
+
  ["l08u_brainlab"] = "Лаборатория X-16",
   ["l11_pripyat"]   = "       Локация: Припять",
+
  ["l10u_bunker"] = "Лаборатория X-10",
   ["l12_stancia"]   = "       Локация: ЧАЭС 1",
+
   ["l10_radar"] = "Радар",
   ["l12_stancia_2"] = "       Локация: ЧАЭС 2",
+
   ["l11_pripyat"] = "Припять",
   ["l12u_sarcofag"] = "       Локация: Саркофаг"
+
   ["l12_stancia"] = "ЧАЭС",
                      }
+
   ["l12_stancia_2"] = "ЧАЭС",
 +
   ["l12u_sarcofag"] = "Саркофаг",
 +
  ["l12u_control_monolith"] = "Управление Монолитом"
 +
            }
 +
 
 +
local community = {
 +
["stalker"] = "Сталкер",
 +
["monolith"] = "Монолит",
 +
["military"] = "Военные",
 +
["bandit"] = "Бандит",
 +
["killer"] = "Наемник",
 +
["ecolog"] = "Эколог",
 +
["dolg"] = "Долг",
 +
["freedom"] = "Свобода",
 +
["zombied"] = "Зомбированный",
 +
["trader"] = "Торговец"
 +
        }
  
function news_of_npc_kill(victim)
+
function kill_npc(victim, who)
  local dead_news = "Нет трупа"
+
 
   if victim and IsStalker(victim) then
 
   if victim and IsStalker(victim) then
    local locations = locations_name[level.name()] or ""
+
local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
    dead_news = "Погиб сталкер: "..victim:character_name().."\\n%c[default]"..locations
+
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
  end
+
  end
  db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
+
 
end</lua>
 
end</lua>
 +
 
Теперь поясню:
 
Теперь поясню:
<lua>local locations_name = {
+
<lua>local level_name = {
   ["l01_escape"]     = "       Локация: Кордон",
+
   ["l01_escape"] = "Кордон",
   ["l02_garbage"]   = "       Локация: Свалка",
+
   ["l02_garbage"] = "Свалка",
   ["l03_agroprom"]   = "       Локация: Агропром",
+
   ["l03_agroprom"] = "НИИ Агропром",
   ["l03u_agr_undergroun"]   = "       Локация: Подземелье Агропрома",
+
   ["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",
   ["l04_darkvalley"] = "       Локация: Тёмная долина",
+
   ["l04_darkvalley"] = "Тёмная долина",
   ["l04u_labx18"] = "       Локация: Лаборатория X-18",
+
   ["l04u_labx18"] = "Лаборатория X-18",
   ["l05_bar"]       = "       Локация: Бар",
+
   ["l05_bar"] = "Бар",
   ["l06_rostok"]     = "       Локация: Росток",
+
   ["l06_rostok"] = "Дикая территория",
   ["l07_military"]   = "       Локация: Арм.склады",
+
   ["l07_military"] = "Арм.склады",
   ["l08_yantar"]     = "       Локация: Янтарь",
+
   ["l08_yantar"] = "Янтарь",
   ["l10_radar"]     = "       Локация: Радар",
+
  ["l08u_brainlab"] = "Лаборатория X-16",
   ["l11_pripyat"]   = "       Локация: Припять",
+
  ["l10u_bunker"] = "Лаборатория X-10",
   ["l12_stancia"]   = "       Локация: ЧАЭС 1",
+
   ["l10_radar"] = "Радар",
   ["l12_stancia_2"] = "       Локация: ЧАЭС 2",
+
   ["l11_pripyat"] = "Припять",
   ["l12u_sarcofag"] = "       Локация: Саркофаг"
+
   ["l12_stancia"] = "ЧАЭС",
                      } -- названия локаций. Здесь указаны не все локации
+
   ["l12_stancia_2"] = "ЧАЭС",
 +
   ["l12u_sarcofag"] = "Саркофаг",
 +
  ["l12u_control_monolith"] = "Управление Монолитом"
 +
            } -- названия локаций
 +
 
 +
local community = {
 +
["stalker"] = "Сталкер",
 +
["monolith"] = "Монолит",
 +
["military"] = "Военные",
 +
["bandit"] = "Бандит",
 +
["killer"] = "Наемник",
 +
["ecolog"] = "Эколог",
 +
["dolg"] = "Долг",
 +
["freedom"] = "Свобода",
 +
["zombied"] = "Зомбированный",
 +
["trader"] = "Торговец"
 +
        } -- названия группировок
  
function news_of_npc_kill(victim) -- сама функция
+
function kill_npc(victim, who)
  local dead_news = "Нет трупа" -- переменная
+
 
   if victim and IsStalker(victim) then
 
   if victim and IsStalker(victim) then
    local locations = locations_name[level.name()] or "" -- названия локации. Определяется из таблицы: locations_name
+
local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
    dead_news = "Погиб сталкер: "..victim:character_name().."\\n%c[default]"..locations -- определяется имя умершего
+
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000) -- определяется какая группировка у убитого, его имя, локация
  end
+
  end
  db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000) -- выдается сообщение
+
 
end</lua>
 
end</lua>
 +
 
2. Далее открываем '''xr_motivator.script''',  
 
2. Далее открываем '''xr_motivator.script''',  
 
который находится в '''gamedata\scripts''', ищем функцию:
 
который находится в '''gamedata\scripts''', ищем функцию:
Строка 64: Строка 91:
  
 
и после пишем:
 
и после пишем:
имя_вашего_файла.news_of_npc_kill(victim) в итоге:
+
имя_вашего_файла.kill_npc(victim, who) в итоге:
  
 
<lua>function motivator_binder:death_callback(victim, who)
 
<lua>function motivator_binder:death_callback(victim, who)
       имя_вашего_файла.news_of_npc_kill(victim)
+
       имя_вашего_файла.kill_npc(victim, who)
 
if who:id() == db.actor:id() then
 
if who:id() == db.actor:id() then
 
xr_statistic.addKillCount(self.object)
 
xr_statistic.addKillCount(self.object)
 
end</lua>
 
end</lua>
 
Вот собственно и все!
 
Вот собственно и все!
===Автор:Weanchester===
+
Прим. от AntdiabloN
 +
Можно сделать так чтобы при выводе инфы возможно было услышать звук принятого сообщения.
 +
В конце файла с сообщениями о смерти пишем -
 +
 
 +
<lua>-- Звук сообщения
 +
function news_sound()
 +
local snd_obj
 +
snd_obj = xr_sound.get_safe_sound_object([[device\pda\pda_tip]]) -- путь до звукового файла
 +
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0)
 +
end</lua>
 +
 
 +
и в функции news_of_npc_kill перед первым end пишем - имя_вашего_файла.news_sound()
 +
 
 +
Пример как может быть выглядет функция:
 +
 
 +
<lua>function kill_npc(victim, who)
 +
  if victim and IsStalker(victim) then
 +
local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
 +
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
 +
имя_вашего_файла.news_sound()
 +
    end
 +
end</lua>
 +
 
 +
===Автор: Weanchester===
 +
 
 +
Дополнил:
 +
[[Участник:AntdiabloN]]
 +
 
 +
Подправил ошибки:
 +
[[Участник:Dj Ultor (IGN)]]
 +
 
 
[[Категория:Скрипты]]
 
[[Категория:Скрипты]]

Текущая версия на 20:18, 30 октября 2019

Итак, первым делом в директории gamedata\scripts создайте файл с названием имя_вашего_файла.script

1.Открываем его и пишем:

local level_name = {
  ["l01_escape"] = "Кордон",
  ["l02_garbage"] = "Свалка",
  ["l03_agroprom"] = "НИИ Агропром",
  ["l03u_agr_underground"] = "Подземелье НИИ Агропром",
  ["l04_darkvalley"] = "Тёмная долина",
  ["l04u_labx18"] = "Лаборатория X-18",
  ["l05_bar"] = "Бар",
  ["l06_rostok"] = "Дикая территория",
  ["l07_military"] = "Арм.склады",
  ["l08_yantar"] = "Янтарь",
  ["l08u_brainlab"] = "Лаборатория X-16",
  ["l10u_bunker"] = "Лаборатория X-10",
  ["l10_radar"] = "Радар",
  ["l11_pripyat"] = "Припять",
  ["l12_stancia"] = "ЧАЭС",
  ["l12_stancia_2"] = "ЧАЭС",
  ["l12u_sarcofag"] = "Саркофаг",
  ["l12u_control_monolith"] = "Управление Монолитом"
            }
 
local community = {
	["stalker"] = "Сталкер",
	["monolith"] = "Монолит",
	["military"] = "Военные",
	["bandit"] = "Бандит",
	["killer"] = "Наемник",
	["ecolog"] = "Эколог",
	["dolg"] = "Долг",
	["freedom"] = "Свобода",
	["zombied"] = "Зомбированный",
	["trader"] = "Торговец"
	        }
 
function kill_npc(victim, who)
  if victim and IsStalker(victim) then
local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
   end
end

Теперь поясню:

local level_name = {
  ["l01_escape"] = "Кордон",
  ["l02_garbage"] = "Свалка",
  ["l03_agroprom"] = "НИИ Агропром",
  ["l03u_agr_undergroun"] = "Подземелье НИИ Агропром",
  ["l04_darkvalley"] = "Тёмная долина",
  ["l04u_labx18"] = "Лаборатория X-18",
  ["l05_bar"] = "Бар",
  ["l06_rostok"] = "Дикая территория",
  ["l07_military"] = "Арм.склады",
  ["l08_yantar"] = "Янтарь",
  ["l08u_brainlab"] = "Лаборатория X-16",
  ["l10u_bunker"] = "Лаборатория X-10",
  ["l10_radar"] = "Радар",
  ["l11_pripyat"] = "Припять",
  ["l12_stancia"] = "ЧАЭС",
  ["l12_stancia_2"] = "ЧАЭС",
  ["l12u_sarcofag"] = "Саркофаг",
  ["l12u_control_monolith"] = "Управление Монолитом"
            } -- названия локаций
 
local community = {
	["stalker"] = "Сталкер",
	["monolith"] = "Монолит",
	["military"] = "Военные",
	["bandit"] = "Бандит",
	["killer"] = "Наемник",
	["ecolog"] = "Эколог",
	["dolg"] = "Долг",
	["freedom"] = "Свобода",
	["zombied"] = "Зомбированный",
	["trader"] = "Торговец"
	        } -- названия группировок
 
function kill_npc(victim, who)
  if victim and IsStalker(victim) then
local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000) -- определяется какая группировка у убитого, его имя, локация
   end
end

2. Далее открываем xr_motivator.script, который находится в gamedata\scripts, ищем функцию:

function motivator_binder:death_callback(victim, who)

и после пишем: имя_вашего_файла.kill_npc(victim, who) в итоге:

function motivator_binder:death_callback(victim, who)
       имя_вашего_файла.kill_npc(victim, who)
	if who:id() == db.actor:id() then
		xr_statistic.addKillCount(self.object)
	end

Вот собственно и все! Прим. от AntdiabloN Можно сделать так чтобы при выводе инфы возможно было услышать звук принятого сообщения. В конце файла с сообщениями о смерти пишем -

-- Звук сообщения
function news_sound()
local snd_obj
snd_obj = xr_sound.get_safe_sound_object([[device\pda\pda_tip]]) -- путь до звукового файла
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0)
end

и в функции news_of_npc_kill перед первым end пишем - имя_вашего_файла.news_sound()

Пример как может быть выглядет функция:

function kill_npc(victim, who)
  if victim and IsStalker(victim) then
local dead_news = "\\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Имя: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
имя_вашего_файла.news_sound()
     end
end

Автор: Weanchester

Дополнил: Участник:AntdiabloN

Подправил ошибки: Участник:Dj Ultor (IGN)

Другие места
LANGUAGE