Модостроение. Общие вопросы и ответы
|
|
denis2000 | Дата: Сб, 15.06.2013, 11:51 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Помощь тем кто хочет знать больше о игре и модах Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut] [cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Код function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Код Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Код Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста. Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими
[cut noguest=Первый юбилей нашей темы] Здравствуйте господа модостроители, и все так или иначе причастные к этому. Нашей теме исполнился 1 год. От души поздравляю Всех Вас дорогие друзья, творческих успехов. Хочу так же выразить отдельную благодарность denis2000 и ХОВАН. tracker 23.06.11
[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Пт, 15.07.2016, 23:52 | Сообщение # 2011 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата asd123 ( ) и это теперь тоже работает asd123, всё что вы хотите сделать, ещё в 2013 году реализовано в моде Время Альянса. Там ГГ летает на вертушке и атакует монстров, гуманоидов и даже БТР. Вертушка "видит" всех, наводит на цель орудия. Информация о захвате цели выводится на экран шлема. ГГ давит на гашетку, запуская по врагам ракеты и стреляя из пулемёта. В моде Припять.Точка Отсчёта переписана схема heli_combat. Схема сделана отдельной( такой же как heli_move) и вертолёт атакует цели пролётами. Скрыться очень сложно и вертолёт преследует и атакует игрока по всей локации.
Конечно похвально, что вы сами пытаетесь изобрести велосипед!!! Но не проще ли взять готовый "байк" и покататься от души???
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
asd123 | Дата: Сб, 16.07.2016, 00:15 | Сообщение # 2012 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| makdm, эх.. Я попробую перенести что-то от туда. Мне просто интересно научиться понимать всё это, а не просто переносить.
Вот этим вы меня заинтересовали.. Попробую перенести эту функцию.
Цитата makdm ( ) ГГ давит на гашетку, запуская по врагам ракеты и стреляя из пулемёта. Да, хотел спросить. Как бы мне настроить полёт на вертолёте? У меня по этому поводу 2 вопроса:
1. Как предотвратить выпадение ГГ ? Он у меня падает на землю и разбивается на смерть. Телепортация оформлена на pilot1(типа пилот, который ближе к пулемёту). Ми-24 2. Как настроить управление, чтобы вертолёт смотрел и летел туда, куда посмотрит ГГ ?
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Сб, 16.07.2016, 00:15 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
makdm | Дата: Сб, 16.07.2016, 00:32 | Сообщение # 2013 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата asd123 ( ) Как предотвратить выпадение ГГ ? В схеме heli_move прописать весь путь вертушки по локации без переключения со схемы на схему. При переключении схем вертушка иногда ( почему? сам не разбирался досконально ) "уходит" из под скриптов. Тогда и происходит сброс игрока на землю.
Цитата asd123 ( ) Как настроить управление, чтобы вертолёт смотрел и летел туда, куда посмотрит ГГ ? В схеме heli_move - никак. Эта схема заточена под вейпоинты. Три года назад я пытался это сделать - у меня не получилось. Сейчас, имея опыт, возможно и смог бы, но нет желания и необходимости. Нужно с нуля писАть свою схему. Но я не уверен, что она будет работать правильно, так как движок под это не "заточен".
Терпение...... И все получится!
Сообщение отредактировал makdm - Сб, 16.07.2016, 00:41 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
asd123 | Дата: Сб, 16.07.2016, 02:23 | Сообщение # 2014 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| makdm, понятно.. Ну чтож, спасибо за информацию Кстати, скачал Симбион на ТЧ чтобы посмотреть как устроено там управление вертолётом. Вообщем, вот что написано в логике вертолёта с Кордона: [cut=esc_heli_fly.ltx] [logic] active = heli_move@flypoint1 on_death = heli_move@death
[heli_move@flypoint1] ;-- летим в точку посадки ГГ path_move = heli_fly engine_sound = true invulnerable = true on_timer = 1 | %=m_veh_esc.esc_heli_fly_to_point1% on_info = {+esc_heli_fly_p1} heli_move@landpoint1
[heli_move@landpoint1] ;-- приземляемся path_move = heli_fly engine_sound = true on_timer = 1 | %=m_veh_esc.esc_heli_land_to_point1% on_timer2 = 15000 | {-esc_heli_fly_p2} heli_move@idle0 ;-- нет посадки (15 сек) -> улетаем on_actor_dist_le_nvis = 5 | {-esc_heli_fly_loading} %=m_veh_esc.esc_heli_fly_check_loading% ;--загрузка ГГ on_info = {+esc_heli_fly_p2} heli_move@idlepoint1 ;--сели -> ждать
[heli_move@idlepoint1] ;-- сели и ждем посадки ГГ path_move = heli_fly ;engine_sound = true on_timer = 1 | {-esc_heli_fly_loading} %=m_veh_esc.esc_heli_land_to_point1% on_timer2 = 120000 | {-esc_heli_fly_loading} heli_move@idle0 ;-- нет посадки (3 мин) - улетаем ;on_timer3 = 3000 | {-esc_heli_fly_desant +esc_heli_fly_p2} %=m_veh_esc.esc_heli_fly_spawn_npc% ;-- спавним десант on_actor_dist_le_nvis = 8 | {-esc_heli_fly_loading} %=m_veh_esc.esc_heli_fly_check_loading% ;--сажаем ГГ on_info = {+esc_heli_fly_loading} heli_move@flypoint2 ;--посадили-на взлет
[heli_move@flypoint2] ;-- взлетаем с ГГ path_move = heli_fly engine_sound = true on_timer = 1 | %=m_veh_esc.esc_heli_fly_to_point3% on_info = {+esc_heli_fly_p3} heli_move@flying ;--в полет
[heli_move@flying] ;-- летаем path_move = heli_fly engine_sound = true combat_use_rocket = true combat_use_mgun = true m_max_mgun_dist = 100 m_max_rocket_dist = 30 m_min_mgun_dist = 120 m_min_rocket_dist = 50 on_actor_dist_le_nvis = 8 | %=m_veh_esc.esc_heli_fly_flight% on_actor_dist_ge_nvis = 8 | heli_move@idle0 ;--потеряли ГГ -> улетаем on_info = {+esc_heli_fly_landing} heli_move@landpoint2 ;--посадка on_death_info = esc_heli_fly_death
[heli_move@landpoint2] ;-- приземляемся path_move = heli_fly engine_sound = true invulnerable = true on_timer = 1 | %=m_veh_esc.esc_heli_fly_to_unload% on_info = {+esc_heli_fly_unload} heli_move@idle0
[heli_move@idle0] ;-- path_move = heli_sleep2 engine_sound = true on_timer = 60000 | %=m_veh_esc.esc_heli_fly_release% ;-- самоуничтожение (1 мин)
[heli_move@death] engine_sound = false on_info = %+esc_heli_fly_death =m_veh_esc.esc_heli_fly_release% [/cut] И, собственно, скриптовый файл, на который ссылаются многие строки из логики: [cut=m_veh_esc.script] --[[------------------------------------------------------------------------------------------------ File : m_veh_esc.script Description: Транспортный вертолет Copyright : 2007 © SIMBION:SHOC mod Author : Lost_Stranger (update by Artos) Last edit : 06.08.2009 (by Artos) --]]------------------------------------------------------------------------------------------------
--/ ------------------------------------------------------------------ --/ Settings (установка переменных окружения) --/ ------------------------------------------------------------------ local f_module = "m_veh_esc" --/ строковое имя файла-модуля local flg_init = false --/ флаг инициализации модуля --/ ------------------------------------------------------------------ --/ Print-Log (вывод отладочной информации) --/ ------------------------------------------------------------------ function printf(fmt, ...) db.log(f_module..":"..fmt,...) end --/ ------------------------------------------------------------------ --/ VARIABLEs --/ ------------------------------------------------------------------ --local timer_upd10 = 0 local heli1_id, heli2_id = nil, nil local heli1_str = "fly" local heli2_str = "rev" local landing_id = nil local height_max = 40 --/ высота полета local tbl_targets = {} --/ список целей local next_choice_time = 0 --/ timeout поиска цели local m_max_mgun_dist = 100 --/200 local m_min_mgun_dist = 30 local m_max_rocket_dist = 120 --/200 local m_min_rocket_dist = 50
local tbl_pos = { [11] = {pos = {x = -150, y = 50, z = -670 }, gv = -1, lv = -1}, --/ точка спавна транспортного вертолета [12] = {pos = {x = -119, y = 35, z = -74 }, gv = -1, lv = -1}, --/ точка над посадкой ГГ [13] = {pos = {x = -119, y = -1, z = -74 }, gv = 72, lv = 135123}, --/ точка посадки ГГ [14] = {pos = {x = 81, y = 33, z = 689 }, gv = 214, lv = 377023}, --/ точка высадки [15] = {pos = {x = 65, y = 29.2, z = 674 }, gv = -1, lv = -1}, --/ точка респауна ГГ [21] = {pos = {x = -317, y = 16, z = 83 }, gv = -1, lv = -1}, --/ точка спавна боевого вертолета (2) [22] = {pos = {x = 58, y = 30, z = 130 }, gv = -1, lv = -1}, --/ точка подлета [23] = {pos = {x = 59.41, y = 4, z = 131.73}, gv = 94, lv = 346930}, --/ точка посадки [24] = {pos = {x = 61.66, y = 1.93, z = 133.6 }, gv = 96, lv = 347838} --/ точка спавна десанта } --/ ------------------------------------------------------------------ --/ Initialise Module (инициализация, выполняется единожды) --/ ------------------------------------------------------------------ function init() -- printf("init:[%s]", "info" ) --/#~# register_callback("game_load", load_variables, nil) --register_callback("update", update, nil) flg_init = true end function load_variables() -- printf("load_variables:[%s]", "info" ) --/#~# if not flg_init then abort(f_module..":Not_initialised!") end register_callback("npc_death", check_npc_death, nil) end --/ ------------------------------------------------------------------------------------------------ --/ Process (функции) --/ ------------------------------------------------------------------------------------------------ function check_npc_death(uo,victim,who) if level.name() == "l01_escape" then if victim and who and db.actor and who:id() == db.actor:id() then --/and xr_gulag.getGulagState("esc_blokpost") == 2 local victim_name = victim:name() if victim_name then local g_rank = ranks.get_actor_game_rank() if victim_name == "esc_bridge_soldier5" or (g_rank >= 4 and string.find(victim_name, "esc_bridge")) then --/ убил Кузнецова (или вояку при ранге выше ...) printf("check_npc_death:[%s]~killed,g_rank=[%s]:[%s]", victim_name, g_rank, "i") --/#~# spawn_esc_heli_rev() --/ вызываем атакующий вертолет unregister_callback("npc_death", check_npc_death) end else printf("check_npc_death:victim_name=[%s]<~?:<%s>", _f.get_charname(victim), "Warning!") end end else unregister_callback("npc_death", check_npc_death) end end
--/ ------------------------------------------------------------------ function check_esc_heli(type) local hid = heli1_id if type == heli2_str then hid = heli2_id end if ( hid and ( has_alife_info("esc_heli_"..type.."_death") or not has_alife_info("esc_heli_"..type.."_spawn") )) or ( hid == nil and has_alife_info("esc_heli_"..type.."_spawn") ) then printf("check_esc_heli:Error!:Ошибка_спавна_вертолета:%s_id=[%s]:<%s>", type, hid, "Warning!") esc_heli_release(type) return false --/> end return true end function check_esc_heli_fly() return check_esc_heli("fly") end function check_esc_heli_rev() return check_esc_heli("rev") end
--/ спавн вертолета function spawn_esc_heli(type) if not db.m_vehicles then return end --/> local h local hid if type == heli1_str then h = tbl_pos[11] hid = heli1_id else h = tbl_pos[21] hid = heli2_id end if has_alife_info("esc_heli_"..type.."_spawn") and hid then return end --/> уже заспавнен if has_alife_info("esc_heli_"..type.."_death") then db.actor:disable_info_portion("esc_heli_"..type.."_death") end local logic = "[logic] \n cfg = scripts\\veh\\esc_heli_"..type..".ltx" local obj = m_vehicles.create_vehicle("helicopter", vector():set(h.pos.x, h.pos.y, h.pos.z), nil, nil, logic) if obj then if type == heli1_str then heli1_id = obj.id _f.add_spot_on_map(obj.id,"green_location","Вертолет ГГ") else heli2_id = obj.id end db.actor:give_info_portion("esc_heli_"..type.."_spawn") printf("Заспавнен_вертолет=[%s]:id=[%s]", type, obj.id ) end end function spawn_esc_heli_fly() --/ Fly - спавн вертолета для полета ГГ spawn_esc_heli("fly") end function spawn_esc_heli_rev() --/ Rev - спавн вертолета (карательный) spawn_esc_heli("rev") end
--/ летит к точке приземления function esc_heli_to_point1(type,heliObject) local h if type == heli1_str then h = tbl_pos[12] else h = tbl_pos[22] end local point = vector():set(h.pos.x, h.pos.y, h.pos.z) this.heli_move(point, heliObject, false) local pos = heliObject:position() -- printf(type.."->летит_к_точке_посадки:x=[%s],y=[%s],z=[%s]:2", pos.x, pos.y, pos.z) if pos.x > h.pos.x-20 and pos.x < h.pos.x+20 and pos.z > h.pos.z-20 and pos.z < h.pos.z+20 then db.actor:give_info_portion("esc_heli_"..type.."_p1") printf("Подлетает_к_точке_посадки:"..type.."_id=[%s]:[%s]",heliObject:id(), "p1") end end function esc_heli_rev_to_point1(object,heliObject) --/ Rev esc_heli_to_point1("rev",heliObject) end function esc_heli_fly_to_point1(object,heliObject) --/ Fly esc_heli_to_point1("fly",heliObject) end
--/ садится function esc_heli_to_point2(type, heliObject) local h, point_look = nil, nil if type == heli1_str then h = tbl_pos[13] point_look = vector():set(65, 30, 675) else h = tbl_pos[23] point_look = db.actor:position() end local point = vector():set(h.pos.x, h.pos.y, h.pos.z) this.heli_move(point, heliObject, true, point_look) local pos = heliObject:position() -- printf(type.."->садится_в_точке_посадки:x=[%s],y=[%s],z=[%s]", pos.x, pos.y, pos.z) if pos.y <= h.pos.y and not has_alife_info("esc_heli_"..type.."_p2") then db.actor:give_info_portion("esc_heli_"..type.."_p2") if type == heli1_str then _f.send_tip("Для полета Вы должны быть возле него","Вертолет в точке посадки",0,8,"gen_info") end printf("Приземляемся:"..type.."_id=[%s]:[%s]",heliObject:id(), "p2") end end function esc_heli_rev_to_point2(object, heliObject) --/ Rev - садится esc_heli_to_point2("rev", heliObject) end function esc_heli_land_to_point1(object, heliObject) --/ Fly - садится esc_heli_to_point2("fly", heliObject) end
--/ Fly - ждем посадки ГГ в вертушку function esc_heli_fly_check_loading(object, heliObject) if not has_alife_info("esc_heli_fly_loading") then local h = tbl_pos[13] local pos = db.actor:position() if pos.x > h.pos.x-8 and pos.x < h.pos.x+8 and pos.z > h.pos.z-8 and pos.z < h.pos.z+8 then db.actor:set_actor_position(vector():set(pos.x, pos.y+3, pos.z)) db.actor:set_actor_direction(-vector():set(65, 30, 675):getH()) db.actor:give_info_portion("esc_heli_fly_loading") _f.remove_spot_from_map(heli1_id,"green_location") _f.send_tip("Пристегните ремни, взлетаем!","Взлет",0,8,"gen_info") -- printf("ГГ_в_вертолете:esc_heli_fly_loading") end end end
--/ взлетает function esc_heli_to_point3(type, heliObject) local actor = db.actor local h, point_look = nil, nil if type == heli1_str then h = tbl_pos[12] point_look = vector():set(65, 30, 675) else h = tbl_pos[22] point_look = actor:position():mad(actor:direction(),5)--/ actor:position() end local point = vector():set(h.pos.x, h.pos.y, h.pos.z) this.heli_move(point, heliObject, true, point_look) local pos = heliObject:position() if type == heli1_str then actor:set_actor_position(vector():set(pos.x, pos.y+4, pos.z)) end -- printf(type.."->взлетает:x=[%s],y=[%s],z=[%s]", pos.x, pos.y, pos.z) if pos.y > h.pos.y-5 and not has_alife_info("esc_heli_"..type.."_p3") then actor:give_info_portion("esc_heli_"..type.."_p3") if type == heli1_str then local m = tbl_pos[14] local obj = _f.spawn_obj("gps_metka",vector():set(m.pos.x, m.pos.y, m.pos.z), m.lv, m.gv) landing_id = obj.id _f.add_spot_on_map(obj.id,"green_location","Точка посадки") _f.send_tip("Для посадки летите на холм справа от перехода на Свалку (cм.метку на карте).","Приятного полета!",0,8,"gen_info") end printf("Взлетел:"..type.."_id=[%s]:[%s]",heliObject:id(), "p3") end end function esc_heli_rev_to_point3(object, heliObject) --/ Rev - взлетает esc_heli_to_point3("rev", heliObject) end function esc_heli_fly_to_point3(object, heliObject)--/ Fly - взлетает esc_heli_to_point3("fly", heliObject) end
--/ полет по локации function esc_heli_fly_flight(object,heliObject) --/ #~# if has_alife_info("esc_heli_fly_death") then printf("esc_heli_fly_flight:esc_heli_fly_death") esc_heli_fly_release(object, heliObject) return --/> end local actor = db.actor --local point, pointlook, pointmove local pos_h = heliObject:position() local lnd = tbl_pos[14] if pos_h.x > lnd.pos.x-20 and pos_h.x < lnd.pos.x+20 and pos_h.z > lnd.pos.z-20 and pos_h.z < lnd.pos.z+20 and not has_alife_info("esc_heli_fly_landing") then actor:give_info_portion("esc_heli_fly_landing") --/ на посадку _f.send_tip("Пристегните ремни! Садимся.","Прибыли в район посадки",0,5,"gen_info") -- printf("Долетели_до_точки_высадки:esc_heli_fly_landing") end local dir, pos, pos_to dir = actor:direction() pos = actor:position() actor:set_actor_position(vector():set(pos_h.x+(dir.x*7), pos_h.y+1, pos_h.z+(dir.z*7))) pos_to = pos pos_to.x = pos.x + (dir.x*15) if pos_h.y < height_max-2 and pos_h.y > height_max+2 then pos_to.y = pos_h.y else pos_to.y = height_max end pos_to.z = pos.z + (dir.z*15) local heli = level.object_by_id(heliObject:id()) heli.heliObject = heli:get_helicopter() heli.heliObject:LookAtPoint(pos_to, true) heli.heliObject:SetSpeedInDestPoint(0) heli.heliObject:SetDestPosition(pos_to) --heli.heliObject.m_max_mgun_dist = m_max_mgun_dist --heli.heliObject.m_max_rocket_dist = m_max_rocket_dist --heli.heliObject.m_min_mgun_dist = m_min_mgun_dist --heli.heliObject.m_min_rocket_dist = m_min_rocket_dist --actor:set_actor_position(vector():set(pos_to.x+(dir.x*1), pos_to.y+1, pos_to.z+(dir.z*1))) local enemy = esc_heli_choice_purpose(nil,heli) --/ выбираем цель if enemy ~= nil then heli.heliObject:SetEnemy(enemy) end end
--/ опять садимся function esc_heli_fly_to_unload(object, heliObject) local h = tbl_pos[14] local point = vector():set(h.pos.x, h.pos.y, h.pos.z) --/ точка посадки local point_look = vector():set(-50, 0, -60) this.heli_move(point, heliObject, true, point_look) local pos = heliObject:position() -- printf("Садимся:x=[%s],y=[%s],z=[%s]:p5", pos.x, pos.y, pos.z) db.actor:set_actor_position(vector():set(pos.x, pos.y+3, pos.z)) if pos.y > h.pos.y-5 and pos.y < h.pos.y+1 and not has_alife_info("esc_heli_fly_unload") then db.actor:give_info_portion("esc_heli_fly_unload") this.esc_heli_fly_unloading() --/ высаживаем ГГ -- printf("Сели._Высаживаем_ГГ:p5") end end
--/ отпускаем ГГ function esc_heli_fly_unloading() db.actor:set_actor_position(vector():set( 65, 29.15, 674 )) --/ точка респауна ГГ if landing_id then alife():release(alife():object(landing_id), true) end _f.send_tip("Удачи в Зоне!","Полет окончен.",0,8,"gen_info") end
--/ уничтожаем вертушку function esc_heli_release(type, heliObject) if heliObject ~= nil and heliObject:id() ~= nil then db.actor:give_info_portion("esc_heli_"..type.."_death") alife():release(alife():object(heliObject:id()), true) end if type == heli1_str then heli1_id = nil else heli2_id = nil end db.actor:disable_info_portion("esc_heli_"..type.."_death") printf("esc_heli_release:esc_heli_"..type.."_release") --_f.send_tip("Вертолет=["..type.."]->уничтожен","",0,8,"gen_info") end function esc_heli_fly_release(object, heliObject) --/ Fly - уничтожаем вертушку ГГ esc_heli_release("fly", heliObject) end function esc_heli_rev_release(object, heliObject) --/ Rev - уничтожаем карат. вертолет esc_heli_release("rev", heliObject) end
function esc_heli_fly_spawn_npc() if not has_alife_info("esc_heli_fly_desant") then if cnt_s < 3 then cnt_s = cnt_s + 1 local s = tbl_pos[13] local lvid = db.actor:level_vertex_id() local gvid = db.actor:game_vertex_id() local obj = alife():create("hunter_".. cnt_s .."_regular", vector():set(s.pos.x, s.pos.y-2, s.pos.z), lvid, gvid) else db.actor:give_info_portion("esc_heli_fly_desant") cnt_s = 0 end end end
local tbl_s = {"esc_soldier_respawn_1", "esc_soldier_respawn_1", "esc_soldier_respawn_specnaz", "esc_soldier_respawn_specnaz", "esc_soldier_respawn_specnaz"} local num_s, cnt_s = 0, 0 --/ кол-во и счетчик спавнящихся десантников local next_time_s = 0
function esc_heli_rev_spawn_npc() if (next_time_s or 0) < time_global() and not has_alife_info("esc_heli_rev_desant") then next_time_s = time_global() + 1500 + math.random(-300,300) --/ проверяем раз в ~1.5 сек --local num_s = ranks.get_obj_rank_number(db.actor) + 3 if num_s < 1 then num_s = 3 + level.get_game_difficulty() end -- printf("esc_heli_rev_spawn_npc:cnt=[%s],num=[%s]", cnt_s, num_s) if cnt_s < num_s then cnt_s = cnt_s + 1 local npc_s = tbl_s[math.random(5)] local s = tbl_pos[24] --local obj = alife():create(npc_s, vector():set(s.pos.x, s.pos.y, s.pos.z), s.pos.lv, s.pos.gv) local obj = alife():create(npc_s, vector():set(s.pos.x, s.pos.y, s.pos.z), db.actor:level_vertex_id(), db.actor:game_vertex_id()) printf("esc_heli_rev_spawn_npc:npc=[%s],cnt=[%s],num=[%s]", obj:name(), cnt_s, num_s) if cnt_s >= num_s then db.actor:give_info_portion("esc_heli_rev_desant") -- printf("esc_heli_rev_spawn_npc:cnt>=num=[%s]", cnt_s) next_time_d = 0 num_s, cnt_s = 0, 0 end end end end
--/------------------------------------------------------------------- --/ универсальные функции --/-------------------------------------------------------------------
--/ устанавливаем свойства вертолёта function heli_move(pos, heliObject, flg, point_look) local heli = level.object_by_id(heliObject:id()) heli.heliObject = heliObject:get_helicopter() if flg == true then heli.heliObject:LookAtPoint(point_look,true) end heli.heliObject:SetSpeedInDestPoint(0) heli.heliObject:SetDestPosition(pos) end
--/ выбор цели для атаки function esc_heli_choice_purpose(p1, heliObject) local obj if (next_choice_time or 0) < time_global() then next_choice_time = time_global() + 4000 + math.random(-500,500) --/ проверяем раз в 3-5 сек local actor = db.actor local pos = heliObject:position() for i=1,65534 do obj = level.object_by_id(i) if obj and (IsMonster(obj) or IsStalker(obj)) and obj:alive() and actor:see(obj) and actor:relation(obj) == game_object.enemy then local opos = obj:position() obj.dist = math.sqrt( (pos.x - opos.x)^2 + (opos.z - pos.z)^2 ) --/dist_2d if obj.dist and obj.dist < (m_max_rocket_dist + 100) and obj.dist > height_max + 20 then -- printf("esc_heli_choice_purpose:obj_name=[%s],obj.dist=[%s]:[%s]",obj:name(), obj.dist , i) --/#~# table.insert(tbl_targets,obj) end end end end local nearest = nil -- printf("esc_heli_choice_purpose:num_tbl_targets=[%s]:[%s]", #tbl_targets, ">") --/#~# if #tbl_targets > 1 then table.sort(tbl_targets, function(a,b) return a.dist > b.dist end) --/compare_dist end for k,v in pairs(tbl_targets) do if v and v:alive() then nearest = v break else table.remove(tbl_targets,k) end end --printf("esc_heli_choice_purpose:цель=[%s],дист=[%s],целей=[%s]:[%s]", nearest:name(), tbl_targets[1].dist, #tbl_targets, ">") --/#~# return nearest end
--/-------------------------------------------------------------------------------------------------[/cut] Там есть строчки, говорящие о развороте вертолёта на точку взгляда актёра и вроде как полёт на эту точку. Этот скрипт можно адаптировать для ЗП ? Интересует только взгляд и полёт в сторону взгляда ГГ.
У мутантов тоже есть группировки. © Движок X-Ray
|
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
berg | Дата: Сб, 16.07.2016, 11:03 | Сообщение # 2015 |
Отмычка
Пользователи
Сообщений: 38
| Помогите плз вот по такому вопросу. Установлен SGM 2.2 но не чистый, а с Weapon Returns + еще там по мелочи. Столкнулся с неприятным моментом - на стволах, где встроенные прицелы и есть модификация оружия "контрастный прицел" - эффект контраста отсутствует. Покопался в конфигах, постиг, что эффект этой желтизны прицела вроде как достигается при помощи contrast.ppe. И не сказать что в этой версии мода он отсутствует полностью - на съемных прицелах типа "Сумерки" он есть. Если взять к примеру секцию конфига апгрейда винтореза:
;Контрастный прицел ;------------------ cost = 12000
scope_contrast = scope_contrast
то вроде все на месте. К примеру у FN2000 в этой секции был бардак, стояло: scope_contrast = scope_nightvision
и при апгрейде получался ПНВ, заменил строку на scope_contrast = scope_contrast - ПНВ исчез, но прицел не пожелтел :-( Где что еще посмотреть?
upd: сорри, разобрался сам, по аналогии с работающим прицелом "Сумерки":-) Как это ни смешно, но правильная строка должна выглядеть как: scope_nightvision = scope_contrast
Сообщение отредактировал berg - Сб, 16.07.2016, 11:22 |
|
|
Эти 0 пользователя(ей) поблагодарили berg за это полезное сообщение: |
|
|
Кошелев | Дата: Сб, 16.07.2016, 23:14 | Сообщение # 2016 |
Гражданский
Пользователи
Сообщений: 19
| Имеется вот такая логика кат-сцены. Пошел по пути, который предложил товарищ asd123 и прописал в начало новой игры выдачу поршня esc_intro_start. Кат-сцена воспроизводится в начале игры, останавливается, все как надо, однако воспроизводится после перезагрузки сохранения на этой локации и при переходе на эту локацию. Как быть?
Код [logic] active = sr_idle
[sr_idle] on_info = {+esc_intro_start} sr_cutscene@esc
[sr_cutscene@esc] point = esc_walk look = esc_look cam_effector = scenario_cam\escape\actor_start_cam global_cameffect = true enable_ui_on_end = true on_signal = cameff_end | %=stop_sr_cutscene%
|
|
|
Эти 0 пользователя(ей) поблагодарили Кошелев за это полезное сообщение: |
|
|
asd123 | Дата: Сб, 16.07.2016, 23:39 | Сообщение # 2017 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Кошелев, откуда выдаётся инфопоршень?
Цитата Кошелев ( ) on_signal = cameff_end | %=stop_sr_cutscene% Попробуйте так: on_signal = cameff_end | %=stop_sr_cutscene -esc_intro_start%
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Сб, 16.07.2016, 23:43 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
Кошелев | Дата: Вс, 17.07.2016, 00:37 | Сообщение # 2018 |
Гражданский
Пользователи
Сообщений: 19
| asd123, Не помогло. Поршень выдается из xr_effects, из этой функции
Код function zat_a1_tutorial_end_give(actor, npc) -- level.add_pp_effector("black.ppe", 1313, true) ---do not stop on r1 ! db.actor:give_info_portion("zat_a1_tutorial_end") db.actor:give_info_portion("esc_intro_start") end
|
|
|
Эти 0 пользователя(ей) поблагодарили Кошелев за это полезное сообщение: |
|
|
asd123 | Дата: Вс, 17.07.2016, 00:46 | Сообщение # 2019 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Кошелев, функция откуда запускается? Какие условия для её запуска?
У мутантов тоже есть группировки. © Движок X-Ray
|
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
Наблюдатель | Дата: Вс, 17.07.2016, 13:55 | Сообщение # 2020 |
Ветеран
Пользователи
Сообщений: 400
| Здравствуйте Всем! Подскажите, плиз, умные Люди, в каких папке и файле правятся текстуры растений. Играю в Ferr um mod + спецназ, так всё нормально, но очень ядовито-зелёная растительность, с какими-то переливами... Глаза устают. Можно как то вернуть только текстуры растительности из оригинальной ЗП, не затрагивая текстур стволов и прочего?
|
|
|
Эти 0 пользователя(ей) поблагодарили Наблюдатель за это полезное сообщение: |
|
|
Кошелев | Дата: Вс, 17.07.2016, 18:49 | Сообщение # 2021 |
Гражданский
Пользователи
Сообщений: 19
| asd123, Условие одно - начало игры. Функция стандартная ПЫС, добавлен лишь мой поршень. Добавлено (17.07.2016, 18:49) --------------------------------------------- Наблюдатель, Все текстуры растений и деревьев хранятся в gamedata\textures\trees. Вам нужно только перенести оригинальную папку trees с заменой.
|
|
|
Эти 0 пользователя(ей) поблагодарили Кошелев за это полезное сообщение: |
|
|
GreenGoblin | Дата: Вс, 17.07.2016, 19:36 | Сообщение # 2022 |
Гражданский
Пользователи
Сообщений: 11
| Цитата Кошелев ( ) Все текстуры растений и деревьев хранятся в gamedata\textures\trees. Вам нужно только перенести оригинальную папку trees с заменой. Ну или из папки:
Цитата Кошелев ( ) gamedata\textures удалить папку trees
Добавлено (17.07.2016, 19:36) --------------------------------------------- Просто дополняю ответЦитата Кошелев ( )
Сообщение отредактировал GreenGoblin - Вс, 17.07.2016, 19:38 |
|
|
Эти 0 пользователя(ей) поблагодарили GreenGoblin за это полезное сообщение: |
|
|
asd123 | Дата: Пн, 18.07.2016, 13:12 | Сообщение # 2023 |
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
| Подскажите.. Хочу сделать систему бесконечных заданий как у Сидоровича, Волка, Бармена, Сахорова и других квестовых персонажей в ТЧ. Ну там, зачистка/оборона лагеря, поиск артефактов/частей тел мутантов, да только не знаю что исправлять Понимаю, что task_manager.script, но что туда добавить - не в курсе. Хотелось бы ещё объеденить его с менеджером из ЧН - чтобы можно было смарт-террайны вместе со сквадами захватывать, или защищать.
У мутантов тоже есть группировки. © Движок X-Ray
Сообщение отредактировал asd123 - Пн, 18.07.2016, 14:33 |
|
|
Эти 0 пользователя(ей) поблагодарили asd123 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 20.07.2016, 13:27 | Сообщение # 2024 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Voland-777, В логе написано: Не могу открыть файл gamedata\sound\$no_sound.ogg
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Voland-777 | Дата: Ср, 20.07.2016, 14:01 | Сообщение # 2025 |
Эмиссар
Пользователи
Сообщений: 1702
| denis2000, да я уж понял) Причина в том, что там этот файл есть, но с неверным расширением. Исправляю - история повторяется. Добавлено (20.07.2016, 14:01) --------------------------------------------- satanpower, в теме "Читер-Клуб" есть в шапке метод спавна предмета в рюкзак через скрипт, посмотри там.
|
|
|
Эти 0 пользователя(ей) поблагодарили Voland-777 за это полезное сообщение: |
|
|
|