STALKER такой,каким мы его видим

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » STALKER такой,каким мы его видим » Модостроение » Уроки по модострою


Уроки по модострою

Сообщений 1 страница 6 из 6

1

Как отослать сообщение Меченому на
ПДА
Сложность:
Легко
Файлы: Любой стандартный диалог

1. Создаём файл ваше_название_скрипта.script в
папке gamedata/scripts и пишем в него:

function ваш_текст(first_speaker, second_speaker)
news_manager.send_tip(db.actor, "%c
[255,255,128,128]ПРИМЕР:\n%c[default]ВАШ
ТЕКСТ", nil, nil, 30000)
end
news_manager.send_tip - это сама функция,
которая отсылает сообщение.
"%c[255,255,128,128] - это цвет сообщения,
идет по моему по цветам RGB.
%c[default] - это конец кода цвета сообщения,
дальше текст идёт в стандартном цвете.
\n - это перенос на другую строчку.

2. В любой диалог пишем функцию:
<action>ваше_название_скрипта.ваш_текст</
action>
Например в dialogs_trading.xml в диалоге
doctor_dialog_start после фразы
doctor_dialog_start_13 Пишем
<action>ваше_название_скрипта.ваш_текст</
action>

Теперь после того как поговорите с Доктором
(NLC5) на ПДА придёт сообщение с вашим
текстом.

Создание тайника
Сложность:
Средне
Файлы:spawn_sections.ltx,devices.ltx,любой
стандартный диалог.
Для того, чтобы замерить координаты можно
воспользоватся аддончиком Position Informer.
(В теме инструментарий для мододелов)

1. Создаём файл ваше_название_скрипта.script в
папке gamedata/scripts и пишем в него:

Код
function ваше_название_функции() $$
$НАЗВАНИЕ ФУНКЦИИ$$$
alife():create
(section,position,levelvertex,gamevertex) $$$ЭТО
ТОЧКА ГДЕ СПАВНИТСЯ ПРЕДМЕТ$$$
end

2. В папке config/scripts создаём файл
m_taynik.ltx и пишем в него:

Код
[spawn] $$$ Это то, что появится в тайнике $$$
предмет
предмет
предмет
предмет
предмет

3. Открываем файл spawn_sections.ltx из папки
gamedata/config/creatures и пишем:
Код

[m_taynik]:ваш_текст
visual = equipments\item_rukzak
radius = 1
custom_data = scripts\m_taynik.ltx

4. Открываем файл devices.ltx и пишем:

Код
[ваш_текст]
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "devices\inventory box"
class = O_INVBOX
cform = skeleton
visual = physics\box\expl_dinamit.ogf
script_binding = bind_physic_object.init

5. Пихаем в любой диалог функцию спавна:

Код
<action>ваше_название_скрипта.ваше_название_функция</
action>
Например в dialogs_trading.xml в диалоге
doctor_dialog_start после фразы
doctor_dialog_start_13
Пишем
<action>ваше_название_скрипта.ваше_название_функции</
action>

Теперь после того как поговорите с Доктором
(NLC5) по заданным координатам появится
рюкзак.

0

2

Как прописать свои тексты в игру...
Сложность:
Легко
Допустим вы захотели написать много
диалогов, и не хочется их писать в
оригинальные файлы.

Делаем так:
1.
Открываем localization.ltx и прописываем в
самый конец:
Код
ваш_файл_текстов

2. Создаём ваш_файл_текстов в папке
"gamedata/config/text/rus/" и пишем в них
диалоги/описания/любые тексты по анологии
с другими файлами в папке "rus"

Выводим часы на HUD
Автоp:steelrat
Для этого нам понадобятся
стандартные файлы:

config/ui/ui_custom_msgs.xml
scripts/bind_stalker.script

Инструкция:

Сложность: Легко

1. Создаём файл ваше_название_скрипта.script
в папке gamedata/scripts и пишем в него:

Код
function show_time()
local hud = get_hud()
local cs = hud:GetCustomStatic("hud_show_time")
if cs == nil then
hud:AddCustomStatic("hud_time_static", true)
hud:AddCustomStatic("hud_show_time", true)
cs = hud:GetCustomStatic("hud_show_time")
end
local time_h = level.get_time_hours()
local time_m = level.get_time_minutes()
local msg
if time_m >= 10 then
msg = string.format(" %02d:%02d\n", time_h,
time_m)
else
msg = string.format(" %02d:%02d\n", time_h,
time_m)
end
if cs ~= nil then cs:wnd():SetText(msg) end
end

2. Далее открываем файл ui_custom_msgs.xml
в config/ui/ и пишем туда:

Код
<hud_time_static x="852" y="17" width="156"
height="52">
<text complex_mode="0" x="65" y="0"
font="letterica16" r="255" g="255" b="255"
a="130">Time</text>
<texture>ui_hud_frame_clock</texture>
</hud_time_static>
<hud_show_time x="862" y="38" width="156"
height="52">
<text x="0" y="0" font="graffiti19" r="255"
g="255" b="255" a="140" align="c"/>
</hud_show_time>

3. Открываем файл bind_stalker.script и пишем
после:

Код
function actor_binder:update(delta)
object_binder.update(self, delta)
local time = time_global()
game_stats.update (delta, self.object)
следущее:
ваше_название_скрипта.show_time()

0

3

Эффект критического раненния:

1. Создаем файл effect_blood.script и
записываем туда следущее:

Код
lite_treshold = 0.05 -- насколько должно
уменьшиться здоровье с предыдущего
обновления чтоб экран окрасился в красный
crit_treshold = 0.30 -- насколько должно
уменьшиться здоровье с предыдущего
обновления чтоб ГГ начало шатать
drop_item_on_crit_prob = 0.20 -- вероятность
того что ГГ выронит оружие
effector_power_coeff = 0.7
prev_health = -1
chk_h_t = 0
function wounded_pp_update()
      if (chk_h_t or 0) < time_global() then
        chk_h_t = time_global()+1000
        if prev_health > (db.actor.health +
lite_treshold) then
          level.add_pp_effector("fire_hit.ppe", 2011,
false)
          local effector_power = (prev_health -
db.actor.health)*100*effector_power_coeff
          level.set_pp_effector_factor(2011,
effector_power)
          if prev_health > db.actor.health +
crit_treshold then
            level.add_cam_effector("camera_effects\
\fusker.anm", 999, false, "")
            local snd_obj =
xr_sound.get_safe_sound_object([[actor\pain_3]])
            snd_obj:play_no_feedback(db.actor,
sound_object.s2d, 0, vector(), 1.0)
            if math.random() <
drop_item_on_crit_prob then
              local active_item = db.actor:active_item()
              if active_item and active_item:section() ~=
"bolt" and active_item:section()~= "wpn_knife"
then
                db.actor:drop_item(active_item)
              end
            end
          end
        end
        prev_health = db.actor.health
      end
end

2. Далее открываем bind_stalker.script:
после строчек:

Код
Code
function actor_binder:update(delta)
      object_binder.update(self, delta)
      local time = time_global()
      game_stats.update (delta, self.object)

пишем:
effect_blood.wounded_pp_update()

0

4

Спавн ГГ на другой локации
Чтобы ГГ заспавнить в другом месте, надо его
секцию:

Код
[63]
; cse_abstract properties
section_name = actor
name = level_prefix_actor_0001
position =
-246.726303100586,-24.7932605743408,-134.433868408203
direction =
0.00431653670966625,-1.39625442028046,-0.00068671052576974
s_flags = 0x29
; cse_alife_object properties
game_vertex_id = 4
distance = 0.699999988079071
level_vertex_id = 11713
object_flags = 0xffffffbf
custom_data = <<END
[dont_spawn_character_supplies]
[spawn]
wpn_binoc
device_torch
END
; cse_visual properties
visual_name = actors\hero\stalker_novice
; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =
upd:health = 1
upd:timestamp = 0x75732029
upd:creature_flags = 0x70
upd:position =
-246.726303100586,-24.7932605743408,-134.433868408203
upd:o_model = 0
upd:o_torso =
-1.39625442028046,0.00431653670966625,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0
; cse_alife_trader_abstract properties
money = 40
trader_flags = 0
character_profile = actor
; cse_ph_skeleton properties
; cse_alife_creature_actor properties
upd:actor_state = 0xd20
upd:actor_accel_header = 0
upd:actor_accel_data = 0
upd:actor_velocity_header = 0
upd:actor_velocity_data = 0
upd:actor_radiation = 0
upd:actor_weapon = 110
upd:num_items = 0

Удалить из alife_l01_ecape.ltx и поместить в
файл того уровня, в который необходимо.
Прописать новые координаты не только в
строках:
position
game_vertex_id
level_vertex_id
Но и в upd:position (взять из строки position). И
все дела.

0

5

[SoC] Костюм с автоматическим приёмом
медикаментов
Нам понадобится: bind_stalker.sсript Для начала
создадим свой скрипт (у меня будет kfs.sсript). И
вставим туда вот такой код:
--[[
Authors: $T@RT$
Copyright: © KFS Team 2011
]]--
local kFlag = 0
function vvod_medkit()
local act_it = db.actor:item_in_slot(6)
if act_it ~= nil then
if db.actor.health <= 0.6 and
db.actor:object"medkit_army" and act_it:section() ==
"novice_outfit" then
local news_text = "%c
[255,160,160,160]Автоматическая система ввода
медицинских препаратов\\n%c
[default]Выполняю:%c[255,230,0,0]Ввожу в
организм препарат Армейская аптечка %c
[default]"
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
db.actor:eat(db.actor:object("medkit_army"))
if kFlag == 1 then kFlag = 0 end
elseif db.actor.health <= 0.6 and act_it:section() ==
"novice_outfit" then
if kFlag == 0 then
local news_text = "%c
[255,160,160,160]Автоматическая система ввода
медицинских препаратов\\n%c[default]Внимание:
%c[255,230,0,0]Минимальное количество
препаратов...Отказ%c[default]"
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
kFlag = 1
end
end
end
end
Теперь разберём подробно каждую строчку.
local kFlag=0 — Создаём локальную переменную
(у нас будет флаг)
local act_it=db.actor:item_in_slot(6) — создаём
локальную переменную act_it которая проверяет
что в 6 слоте (В ТЧ это костюм)
if act_it≈nil then — Если act_it существует
if db.actor.health <= 0.6 and
db.actor:object"medkit_army" and act_it:section
()=="novice_outfit" then – Если у ГГ хп < 60% и
есть армейская аптечка и надет костюм новичка
local news_text = "%c
[255,160,160,160]Автоматическая система ввода
медицинских препаратов\\n%c
[default]Выполняю:%c[255,230,0,0]Ввожу в
организм препарат Армейская аптечка%c[default]"
-- Создаём локальную переменную news_text с
текстом
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000) –
получаем игровые новости с текстом news_text
db.actor:eat(db.actor:object(«medkit_army»)) —
съесть армейскую аптечку
if kFlag==1 then kFlag=0 end – если флаг == 1 то
флаг присвоить 0
elseif db.actor.health <= 0.6 and act_it:section
()=="novice_outfit" then — Иначе если у ГГ хп <60
% и надет костюм новичка
if kFlag==0 then – Если флаг == 0
local news_text = "%c
[255,160,160,160]Автоматическая система ввода
медицинских препаратов\\n%c[default]Внимание:
%c[255,230,0,0]Минимальное количество
препаратов...Отказ%c[default]" – Создаём
локальную переменную с текстом news_text
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000) –
Получаем сообщение с текстом news_text
kFlag=1 — флаг присвоить 1
Теперь откроем bind_stalker.sсript и найдём
function actor_binder:update(delta) сразу после неё
ставим kfs.vvod_medkit() Теперь у нас каждый
раз будет идти проверка этой функции.

Вот и всё, можно идти тестить.

0

6

[SoC ]Создание ремонт комплектов
☢ Я опишу пример создания ремонт комплекта
для костюмов, а для оружия в конце статьи
сделаю пару заметок. Дело в том, что различия
в создании ремонт комплектов почти нет.
1. Для начала нам нужно создать сам ремонт
комплект, то есть предмет, а уже потом вешать
на него функцию при использование. Для этого
в config\misc\items.ltx в конец добавляем
конфиг нашего предмета:
[repair_kit_outfit]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "food and drugs\repair kit outfit"
$prefetch = 32
class = II_ANTIR ;класс не трогаем!
cform = skeleton
visual = equipments\item_merger.ogf ;модель
description =
enc_equipment_repair_kit_outfit ;ссылка на
описание в config\text\rus\....xml
inv_name = repair_kit_outfit_name ;ссылка на
название в config\text\rus\....xml
inv_name_short = repair_kit_outfit_name ;тоже
самое, что и inv_name
inv_weight = 6.0 ;вес
inv_grid_width = 2 ;ширина иконки
inv_grid_height = 1 ;высота иконки
inv_grid_x = 8 ;координата x иконки
inv_grid_y = 18 ;координата y иконки
cost = 10000 ;цена
;всё ниже написанное не трогаем, оно нам и не
нужно
eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = 1
animation_slot = 4
hud = wpn_vodka_hud
2. Теперь добавим название и описание. Для
этого в файле config\text\rus
\string_table_enc_equipment.xml в конец между </
string> и </string_table> добавляем строки по
аналогии с уже написсанными:
<string id="repair_kit_outfit_name">
<text>Ремонт комплект ДПК</text>
</string>
<string id="enc_equipment_repair_kit_outfit">
<text>Новинка от Вани Болта - ремонт комплект
ДПК для быстрой и эффективной починки
костюмов. При его создании были учтены все
недочёты и, следовательно, удалены. Благодаря
улучшенным инструментам и деталям, а также
облегченному весу весьма ценен. С его
помощью можно увеличить состояние костюма
до 100%, если он повреждён не больше 30%.
Незаменимая вещь во время вылазки.</text>
</string>
Отлично, с предметом закончили. Теперь
приступим к самому главному - скриптам.
[править]
Работа со скриптами
1. Вешаем функцию починки при использовании
нашего ремонт комплекта. Для этого в файле
scripts\bind_stalker.sсript находим функцию
function actor_binder:reinit() и после строки
self.object:set_callback(callback.take_item_from_box,
self.take_item_from_box, self) пишем:
self.object:set_callback(callback.use_object,
self.repair_outfit_start, self)
Теперь в папке scripts создаёте свой скриптовой
фаил ваше_название_скрипта.sсript. Но! Название
должно быть написано на английском языке и
вместо пробелов должен стоять знак "_". Опять
открываем bind_stalker.sсript и в самый конец
добавляем эту функцию:
function actor_binder:repair_outfit_start(obj, who)
if obj then
if obj:section() == "repair_kit_outfit" then --здесь
указываем предмет, при использование
которого будет срабатывать функция ниже
ваше_название_скрипта.repair_outfit() --здесь
указываем ссылку на функцию. Сначала скрипт,
в котором она написана, потом название самой
функции
end
end
end
2. Добавляем саму функцию ремонта. Для этого
в файле ваше_название_скрипта.sсript пишем:
-- Ремонт комплект для костюмов
function repair_outfit()
local item_s6 = db.actor:item_in_slot(6) --объявляем
переменную (item_s6)
if item_s6 ~= nil and item_s6:condition() >=0.30 and
item_s6:condition() ~=1 then --когда костюм
можно чинить (состояние больше или равно
30%)
item_s6:set_condition(1)
local snd_obj = xr_sound.get_safe_sound_object
([[interface\inv_detach_addon]])
snd_obj:play_no_feedback(db.actor,
sound_object.s2d, 0, vector(), 1.0)
local news_text = "%c[255,160,160,160]Ремонт
комплект:\\n%c[255,0,255,0]Ремонт костюма
завершен."
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal", Frect():set(83,470,83,47), 1000,
5000)
elseif item_s6 == nil then --когда костюма нет
local news_text = "%c[255,160,160,160]Ремонт
комплект:\\n%c[255,255,0,0]Ремонт невозможен:
нужно одеть коcтюм."
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal", Frect():set(83,470,83,47), 1000,
5000)
alife():create("repair_kit_outfit", db.actor:position(), 1,
db.actor:game_vertex_id(), db.actor:id())
elseif item_s6:condition() <0.30 then --когда костюм
нельзя чинить (состояние меньше 30%)
local news_text = "%c[255,160,160,160]Ремонт
комплект:\\n%c[255,255,0,0]Ремонт невозможен:
костюм слишком сильно повреждён."
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal", Frect():set(83,470,83,47), 1000,
5000)
alife():create("repair_kit_outfit", db.actor:position(), 1,
db.actor:game_vertex_id(), db.actor:id())
elseif item_s6:condition() ==1 then --когда костюм в
отличном состояние
local news_text = "%c[255,160,160,160]Ремонт
комплект:\\n%c[255,255,0,0]Ремонт невозможен:
%c[255,0,255,0]костюм в отличном состояние."
db.actor:give_game_news(news_text, "ui\
\ui_iconsTotal", Frect():set(83,470,83,47), 1000,
5000)
alife():create("repair_kit_outfit", db.actor:position(), 1,
db.actor:game_vertex_id(), db.actor:id())
end
end
Всё! Теперь заходим в игру и наслаждаемся.
[править]
Небольшая заметка
1. Чтобы сделать ремонт комплект для оружия
проделываем тоже самое, только
переименовываем всё вместо outfit на weapon и
в функцие починки ставим слот 1 или 2
(оружейные слота) вместо 6 (слот костюмов).
Ещё нужно заменить переменную item_s6
например на item_s1 или item_s2.
2. Число 0.30 - минимальное состояние костюма,
следовательно его можно менять на любое вам
угодное.

0


Вы здесь » STALKER такой,каким мы его видим » Модостроение » Уроки по модострою