Одинокий_волк | Дата: Пятница, 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 прописываем условие выдачи и т.п.), а в скобках название тайника и все-запускаем игру,говорим и наслаждаемся=-)
Если вы считаете необходимым судить меня за мое прошлое… не удивляйтесь, если я сочту необходимым оставить вас там. Если человек сильный, это ещё не значит, что ему не больно...
КПК Ник Одинокий_Волк забит мной!
Одиночество-это то состояние души,когда понимаешь что чегото не хватает, кого то. И ищешь чтото чем можно скоротать время, потому что веришь что завтра все будет иначе. И так день за днем...
|
|
| |