Представляет собой набор добавлений, расширяющих возможности движка для скриптёров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарного патча библиотек двигателя игры. Авторы: Kolmogor, Malandrinus Адрес проекта на Google Code
Список изменений на данный момент (список далеко не полный, остался с самых первых ревизий):
можно кататься в ЗП на машинках
добавлены консольные команды: fov - угол обзора игрока ph_timefactor - скорость течения времени при просчете физики
в ПДА можно добавлять свои разделы. ГГ будет получать инфопорцию при выборе нового раздела.
разблокировано выкидывание из ящиков с помощью функций drop_item и drop_item_and_teleport
убран вылет "cannot find rank for ..." при выкидывании оружия, не прописанного в mp_ranks
добавлены глобальные функции log1(string) - нормальный вывод текста в консоль вместо нерабочей log flush1() - запись выведенного в консоль текста на диск, вместо нерабочей flush
в пространство имён level добавлены функции: level.get_target_dist() - возвращает float - расстояние до точки, на которую смотрит камера. Это то число, которое высвечивается под прицелом. level.get_target_obj() - возвращает game_object - объект, на который смотрит камера. Если ни на кого, то возвращает nil.
в класс CUIStatic возвращена возможность вращать текстуру. Для этого добавлен метод: SetHeading(Frect) - угол вращения в радианах передаётся в поле x объекта-аргумента.
для актора добавлена возможность устанавливать колбек на получение хита
Примечание: Не забывайте делать резервные копии!
Сообщение отредактировал _Призрак_ - Понедельник, 19.03.2012, 19:15
if info_id == "my_button_id" then my_script.my_button_called() end
Где my_button_id - название новой кнопки в pda.xml
А my_script - скрипт с настройками показа кнопки на экране.
my_button_called() - функция вызова в скрипте my_script
Добавлено (11.06.2012, 23:52) --------------------------------------------- Потом ещё надо:
Quote (_Призрак_)
3. При помощи CUIListBox():GetMainInputReceiver() получаем обьект ПДА 4. Потом аттачим нужные нам статики и кнопочки в обьекту, который мы получили при помощи функции CUIListBox():GetMainInputReceiver()
Earthworm-Jim С такими познаниями далеко не уедешь. Вот цитата из моего кода, где восстановлена энциклопедия
Code
function start() dialog = CUIListBox():GetMainInputReceiver() if dialog then qqq("encyclopedia") ui_pda.ui_encyclopedia() qqq("encyclopediaend") CATCH = false end end
class "ui_encyclopedia" (CUIScriptWnd)
function ui_encyclopedia:__init() super() self.xml = CScriptXmlInit() self.xml:ParseFile("ui_pda_encyclopedia.xml")
self:AddCallback("btn_encyclopedia", ui_events.BUTTON_CLICKED, self.btn_encyclopedia_clicked, self) end
При выполнении этого кода у вас появится кнопка на ПДА, при нажатии которой вызывается функция ui_encyclopedia:btn_encyclopedia_clicked()
Функция start() - вызывается при получении нашего инфопоршня
Но! Дело в том что при таком подходе у вас при смене вкладки у вас созданная кнопка не исчезнет. Чтобы она исчезла отлавливаем нажатие на все остальные функции и вызываем функцию:
Code
function destructor() if not dialog then return end dialog:DetachChild(mainButton)
mainButton = nil dialog = nil end
Сообщение отредактировал _Призрак_ - Вторник, 12.06.2012, 02:14
Earthworm-Jim, Хызыр, Вы читаете через пост? На предыдущей странице я уже писал, что колбека on_info в ЗП нету, вместо него info_callback
Соглашусь с Призраком: "С такими познаниями далеко не уедешь"
На создание простого окошка, кнопки (кнопка с действием на закрытие этого самого окошка) и текста на нем уходит 35 строк в скрипте, и 15 в XML-файле. Но такой GUI, из 3-ех элементов, не несет в себе ничего полезного, на "полезный" придется писать намного больше строчек
Сообщение отредактировал XOBAH - Вторник, 12.06.2012, 12:23
Тут нужно знание скриптов, шаблоны тут не помогут. Алгоритм такой: 1. В pda.xml в секции создаем еще одну кнопку и прописываем ей свой id и hint (hint - это то какой текст будет высвечиваться при наведении на кнопку) 2. В bind_stalker:on_info() отлавливаем когда ГГ получит инфопоршень с id созданой нашей кнопки. 3. При помощи CUIListBox():GetMainInputReceiver() получаем обьект ПДА 4. Потом аттачим нужные нам статики и кнопочки в обьекту, который мы получили при помощи функции CUIListBox():GetMainInputReceiver()
function actor_binder:info_callback(npc, info_id) printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id) --' Сюжет -- Отметки на карте if info_id == "knopka" then my_script.on_my_button_clicked() end end
Только поменяй айди с KNOPKA на knopka. После этого у тебя при нажатии на кнопку вызовется функция my_script.on_my_button_clicked()
Сообщение отредактировал _Призрак_ - Вторник, 12.06.2012, 14:58
_Призрак_, в описании X-Ray extensions написано, что:
Quote
Примечание: Несмотря на возможность очистить временные файлы, полезно поставить в игнор в SVN следующие расширения: *.dll, *.bin, *.lib, *.exp
Я поставил эти расширения в игнор. Вот зачем это? И не будет ли мешать скачиванию ревизий Cut X-Ray project?
_Призрак_, поправь меня пожалуйста, если я неправильно патчу:
1) Захожу в папку со скачаными ревизиями 2) Потом захожу в папку 3967_cop_1602 3) Копирую в неё файл xrGame.dll от ЗП, и сразу же переименовываю его в xrGame_orig.dll 4) Открываю в папке 3967_cop_1602, файл corrections_list.txt. Удаляю все строчки, кроме нужных: