Случайная подборка модов
Контракт на хорошую жизнь
4.1
Альтернатива 1.1 Beta
3.0
Альтернатива 1.2
3.0
«В аду… Псы»
3.6
Апокалипсис
4.0
SRP mod
3.9
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
X-Ray extensions
Российская Федерация  _Призрак_
Понедельник, 19.03.2012, 19:15 | Сообщение # 1
Статус:
Неопытный:
Сообщений: 544
Награды: 6
Регистрация: 12.02.2011

Проект X-Ray extensions


Платформы: ТЧ 1.0006, ЧН 1.5.10, ЗП 1.6.02

Представляет собой набор добавлений, расширяющих возможности движка для скриптёров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарного патча библиотек двигателя игры.
Авторы: Kolmogor, Malandrinus
Адрес проекта на Google Code

Список изменений на данный момент (список далеко не полный, остался с самых первых ревизий):


Примечание:
Не забывайте делать резервные копии!
Сообщение отредактировал _Призрак_ - Понедельник, 19.03.2012, 19:15
  Злобная реклама
Понедельник, 19.03.2012, 19:15
Статус:
Сообщений: 666
Регистрация: 12.02.2011
  Earthworm-Jim
Понедельник, 11.06.2012, 23:52 | Сообщение # 61
Статус:
Опытный:
Сообщений: 2561
Награды: 3
Регистрация: 01.01.2012

Как я понимаю:

Прописать в файле bind_stalker.SCRIPT

После bind_stalker:on_info() написать:

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()

Это не понял пока, как.
  Злобная реклама
Понедельник, 11.06.2012, 23:52
Статус:
Сообщений: 666
Регистрация: 01.01.2012
Российская Федерация  Гереро
Вторник, 12.06.2012, 00:04 | Сообщение # 62
Technologies Progress
Сообщений: 1874
Регистрация: 26.07.2011

Я создал скрипт и прописал туда то что дал Призрак, тоесть:

Quote
"Начало скрипта для создания раздела в ПДА"

if info_id == "menu" then
my_script.my_button_called()
end


Что теперь то? wacko wacko

Добавлено (12.06.2012, 00:03)
---------------------------------------------
Earthworm-Jim, Надо попробовать

Добавлено (12.06.2012, 00:04)
---------------------------------------------

Quote
bind_stalker:on_info()


Однако это строки нифига нету sad
  Злобная реклама
Вторник, 12.06.2012, 00:04
Статус:
Сообщений: 666
Регистрация: 26.07.2011
  Earthworm-Jim
Вторник, 12.06.2012, 00:08 | Сообщение # 63
Статус:
Опытный:
Сообщений: 2561
Награды: 3
Регистрация: 01.01.2012

Quote (Хызыр)
Однако это строки нифига нету

Глянь эту строку, я наверное перепутал:
info_callback()
Сообщение отредактировал Earthworm-Jim - Вторник, 12.06.2012, 00:08
  Злобная реклама
Вторник, 12.06.2012, 00:08
Статус:
Сообщений: 666
Регистрация: 01.01.2012
Российская Федерация  Гереро
Вторник, 12.06.2012, 00:09 | Сообщение # 64
Technologies Progress
Сообщений: 1874
Регистрация: 26.07.2011

Earthworm-Jim, Вот что есть

function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
--' Сюжет
-- Отметки на карте
end

Но вроде не оно.
  Злобная реклама
Вторник, 12.06.2012, 00:09
Статус:
Сообщений: 666
Регистрация: 26.07.2011
  Earthworm-Jim
Вторник, 12.06.2012, 00:39 | Сообщение # 65
Статус:
Опытный:
Сообщений: 2561
Награды: 3
Регистрация: 01.01.2012

Хызыр, ох не знаю. Пусть _Призрак_, объяснит.
  Злобная реклама
Вторник, 12.06.2012, 00:39
Статус:
Сообщений: 666
Регистрация: 01.01.2012
Российская Федерация  Гереро
Вторник, 12.06.2012, 00:55 | Сообщение # 66
Technologies Progress
Сообщений: 1874
Регистрация: 26.07.2011

Earthworm-Jim, Согласен...Поперли спать бро
  Злобная реклама
Вторник, 12.06.2012, 00:55
Статус:
Сообщений: 666
Регистрация: 26.07.2011
Соединенные Штаты  demover123
Вторник, 12.06.2012, 01:11 | Сообщение # 67
Статус:
Неопытный:
Сообщений: 523
Награды: 2
Регистрация: 27.06.2011

Quote (Хызыр)
if info_id == "menu" then my_script.my_button_called() end

menu - это должно быть названия инфопоршня а в файле my_script создаешь класс my_button_called.
П.С. Надо сделать типа меню.
  Злобная реклама
Вторник, 12.06.2012, 01:11
Статус:
Сообщений: 666
Регистрация: 27.06.2011
Российская Федерация  _Призрак_
Вторник, 12.06.2012, 02:12 | Сообщение # 68
Статус:
Неопытный:
Сообщений: 544
Награды: 6
Регистрация: 12.02.2011

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.mainButton = self.xml:Init3tButton("btn_encyclopedia", dialog)
   self:Register(mainButton ,"btn_encyclopedia")
     
   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
  Злобная реклама
Вторник, 12.06.2012, 02:12
Статус:
Сообщений: 666
Регистрация: 12.02.2011
Российская Федерация  XOBAH
Вторник, 12.06.2012, 12:22 | Сообщение # 69
Проект Смерти вопреки
Статус:
Неопытный:
Сообщений: 476
Награды: 0
Регистрация: 01.11.2010

Earthworm-Jim, Хызыр, Вы читаете через пост? На предыдущей странице я уже писал, что колбека on_info в ЗП нету, вместо него info_callback

Соглашусь с Призраком: "С такими познаниями далеко не уедешь"

На создание простого окошка, кнопки (кнопка с действием на закрытие этого самого окошка) и текста на нем уходит 35 строк в скрипте, и 15 в XML-файле. Но такой GUI, из 3-ех элементов, не несет в себе ничего полезного, на "полезный" придется писать намного больше строчек
Сообщение отредактировал XOBAH - Вторник, 12.06.2012, 12:23
  Злобная реклама
Вторник, 12.06.2012, 12:22
Статус:
Сообщений: 666
Регистрация: 01.11.2010
  Earthworm-Jim
Вторник, 12.06.2012, 14:47 | Сообщение # 70
Статус:
Опытный:
Сообщений: 2561
Награды: 3
Регистрация: 01.01.2012

_Призрак_, давай пожалуйста заново:
Ты написал...
Quote (_Призрак_)
Тут нужно знание скриптов, шаблоны тут не помогут.
Алгоритм такой:
1. В pda.xml в секции создаем еще одну кнопку и прописываем ей свой id и hint (hint - это то какой текст будет высвечиваться при наведении на кнопку)
2. В bind_stalker:on_info() отлавливаем когда ГГ получит инфопоршень с id созданой нашей кнопки.
3. При помощи CUIListBox():GetMainInputReceiver() получаем обьект ПДА
4. Потом аттачим нужные нам статики и кнопочки в обьекту, который мы получили при помощи функции CUIListBox():GetMainInputReceiver()


Я выполнил 1 пункт.
Прописал в pda.xml


Что дальше делать?

id="KNOPKA"
hint="pda_btn_encyclopedia_hint"

_Призрак_, что означает слово "отлавливаем"?
Я не знаю ваш программистский сленг.

CUIListBox():GetMainInputReceiver() - это что и где находится?

Что означет "аттачим"?
Сообщение отредактировал Earthworm-Jim - Вторник, 12.06.2012, 14:49
  Злобная реклама
Вторник, 12.06.2012, 14:47
Статус:
Сообщений: 666
Регистрация: 01.01.2012
Российская Федерация  _Призрак_
Вторник, 12.06.2012, 14:57 | Сообщение # 71
Статус:
Неопытный:
Сообщений: 544
Награды: 6
Регистрация: 12.02.2011

Смотри:
Файл bind_stalker.script:
Заменяем
Code
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
  Злобная реклама
Вторник, 12.06.2012, 14:57
Статус:
Сообщений: 666
Регистрация: 12.02.2011
Российская Федерация  Гереро
Вторник, 12.06.2012, 15:04 | Сообщение # 72
Technologies Progress
Сообщений: 1874
Регистрация: 26.07.2011

_Призрак_, И что от этого то что "вызовется"???
  Злобная реклама
Вторник, 12.06.2012, 15:04
Статус:
Сообщений: 666
Регистрация: 26.07.2011
  Earthworm-Jim
Вторник, 12.06.2012, 15:08 | Сообщение # 73
Статус:
Опытный:
Сообщений: 2561
Награды: 3
Регистрация: 01.01.2012

Quote (_Призрак_)
Файл bind_stalker.script:

Прописал в файл как ты сказал.

Quote (_Призрак_)
Только поменяй айди с KNOPKA на knopka.

Поменял. Даже не буду спрашивать, в чём разница.

Quote (_Призрак_)
После этого у тебя при нажатии на кнопку вызовется функция my_script.on_my_button_clicked()

А она изначально в ЗП есть?

Ладно, что дальше делать? Скажи пожалуйста.

Добавлено (12.06.2012, 15:07)
---------------------------------------------
Я так понимаю пункт 2:

Quote (_Призрак_)
2. В bind_stalker:on_info() отлавливаем когда ГГ получит инфопоршень с id созданой нашей кнопки.

Выполнен.

Добавлено (12.06.2012, 15:08)
---------------------------------------------
Теперь наверное нужно правку X-Ray extensions добавлять/патчить. Так?

  Злобная реклама
Вторник, 12.06.2012, 15:08
Статус:
Сообщений: 666
Регистрация: 01.01.2012
Российская Федерация  Гереро
Вторник, 12.06.2012, 15:09 | Сообщение # 74
Technologies Progress
Сообщений: 1874
Регистрация: 26.07.2011

Earthworm-Jim, У тебя должно быть уже пропатчено
  Злобная реклама
Вторник, 12.06.2012, 15:09
Статус:
Сообщений: 666
Регистрация: 26.07.2011
  Earthworm-Jim
Пятница, 15.06.2012, 01:34 | Сообщение # 75
Статус:
Опытный:
Сообщений: 2561
Награды: 3
Регистрация: 01.01.2012

_Призрак_, в описании 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. Удаляю все строчки, кроме нужных:
Quote
0x104428BB 8 CUIPdaWnd__SetActiveSubdialog_ext ; посылка инфопоршня при смене закладок в ПДА
0x104AEA5C 5 ; jmp cuilistbox_fix1
0x104AEAF3 5 ; jmp cuilistbox_fix2

5) Запускаю в корневой папке файл make_3967.cmd

Всё! Файл xrGame.dll пропатчился! Переносим его обратно в ЗП.

Дополнительно ещё нужно запустить в папке 3967_cop_1602, файл clean.cmd

Мне ответит кто-нибудь?!

Добавлено (15.06.2012, 01:34)
---------------------------------------------
чтоб вас черти.... sad

Сообщение отредактировал Earthworm-Jim - Среда, 13.06.2012, 20:50
  Злобная реклама
Пятница, 15.06.2012, 01:34
Статус:
Сообщений: 666
Регистрация: 01.01.2012
Поиск: