• Страница 1 из 1
  • 1
Форум » Школа модинга тч » Скрипты » Часы на худ и другие скрипты (Выводим часы на худ)
Часы на худ и другие скрипты
Одинокий_волкДата: Пятница, 24.08.2012, 05:07 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 535
Статус: Offline
Code
Для этого нам понадобятся стандартные файлы: 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()
в любую функцию.


Вывод сообщения на экран
Как вывести сообщение на экран без использования функций АМК

У любого клиентского объекта имеется метод give_game_news Он и выводит сообщения на экран. Экспериментом выяснил, что сообщение можно вывести совершенно от любого клиентского объекта, хоть от куска колбасы (хвала дизайнерскому гению GSC! Ну почему не сделать просто глобальную функцию?). Однако, следуя традиции и здравому смыслу, мы таки воспользуемся для этого объектом, соответствующим ГГ, т.е. актёром.

local sactor = alife():actor() --получаем серверный объект актера
local cactor = level.object_by_id(sactor.id) --по его ID получаем клиентский объект актера
cactor:give_game_news(
"Свободу тушканам!\\nТушканчики всех стран, объединяйтесь!", -- строка сообщение, может быть многострочной
"ui\\ui_npc_monster", --текстура, из которой берется аватара "отправителя"
Frect():set(0,215,163,105), --координаты и размеры вырезаемого из текстуры изображения
math.random(1000, 3000), --начало показа сообщения с текущего момента (в миллисекундах)
5000 --длительность показа сообщения (в миллисекундах)
)Доп. комментарии к аргументам give_game_news: имя текстуры - это имя файла DDS без расширения, адресуемого относительно папки \gamedata\textures\ в этом выражении Frect():set(0,215,163,105) 0,215 - это координаты верхнего левого угла нужного изображения 163,105 - его размеры Размеры и координаты могут быть любыми, но полученное изображение будет увеличено или уменьшено до размеров 83х47 В данном случае изображение тушкана из файла ui_npc_monster.dds было уменьшено. Параметр времени начала показа нужен, очевидно, для внесения некоторой живости в игру. Дело в том, что код Lua получает управление только в определённые моменты, по определённым событиям. В такой момент можно сгенерить пачку сообщений и раскидать их по времени с помощью этого параметра, создав таким образом некоторую имитацию жизнедеятельности на ближайшее время. Думаю, таким же образом можно имитировать диалоги. Просто генерится пачка сообщений и им задаётся вывод с небольшим интервалом.

Сигаретная зависимость

Для этого нам понадобятся файлы (AMK Mod): config/misc/items.ltx config/text/rus/string_table_enc_equipment.xml scripts/amk.script script/amk_mod.script

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

snd = sound_object([[ambient\underground\rnd_giant]])

-- Проверяем нужно ли покурить. Вызывается каждые 6 игровых минут
function test_for_need_kur()
amk.save_variable("kur",amk.load_variable("kur",0)+1)
amk.g_start_timer("kur",0,0,6)
kur_reduce_health()
end

-- Уменьшение здоровья, если долго не курил
function kur_reduce_health()
local tmp = amk.load_variable("kur",0)
if tmp > 150 then
if db.actor.health > 0.15 then
db.actor.health = - 0.15
end
if not snd:playing() then
snd:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
end
end
end

-- Курение
function kur_item(oid, time)
if alife():object(oid)==nil then
local tmp = amk.load_variable("kur",0) - time*10
if tmp < 0 then tmp = 0 end
amk.save_variable("kur", tmp)
kur_reduce_health()
end
end
2. Открываем файл amk.script:

после:

function __do_timer_action(select_string,params_string)пишем:

if select_string=="kur" then
название_вашего_скрипта.test_for_need_kur()
end3. Открываем файл amk_mod.script в функции first_run пишем:

amk.g_start_timer("kur",0,0,6)затем в функции check_sleep_item(obj) после

elseif section=="treasure_item" then
stype="tr_item"
но перед end пишем:

elseif section == "sigaret" then
stype = "sgr"4. Открываем файл items.ltx

[sigaret]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "food and drugs\antirad"
$prefetch = 32
class = II_ANTIR
cform = skeleton
visual = weapons\sigaret\sigaret.ogf

inv_name = sigareta
inv_name_short = sigareta
description = enc_food_sigareta

inv_weight = 0.02
inv_grid_width = 1
inv_grid_height = 2
inv_grid_x = 10
inv_grid_y = 24

cost = 50

; eatable item
eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
eat_alcohol = 0
wounds_heal_perc = 0
eat_portions_num = 1

; food item
animation_slot = 4

;hud item
hud = wpn_vodka_hud5. Открываем файл string_table_enc_equipment.xml

<string id="sigareta">
<text>Сигарета</text>
</string>
<string id="enc_food_sigareta">
<text>Пишем любое описание сигареты, мне че то в голову ниче не приходит</text>
</string>

Выдача актеру информации о тайнике
Выдаем тайник
Наконец-то нашел способ выдать информацию о тайнике актеру.Функция выдачи тайника у меня имеет такой вид:

function get_treasure()
treasure_manager.get_treasure_manager():give_treasure("название нычки")
endназвания тайников смотрите в config\misc\treasure_manager.ltx
Собственно вешаем активацию на диалог(или любое другое действие,например в level_tasks.script прописываем условие выдачи и т.п.), а в скобках название тайника и все-запускаем игру,говорим и наслаждаемся=-)




Если вы считаете необходимым судить меня за мое прошлое… не удивляйтесь, если я сочту необходимым оставить вас там.
Если человек сильный, это ещё не значит, что ему не больно...

КПК
Ник Одинокий_Волк забит мной!

Одиночество-это то состояние души,когда понимаешь что чегото не хватает, кого то. И ищешь чтото чем можно скоротать время, потому что веришь что завтра все будет иначе. И так день за днем...
 
Форум » Школа модинга тч » Скрипты » Часы на худ и другие скрипты (Выводим часы на худ)
  • Страница 1 из 1
  • 1
Поиск: