Случайная подборка модов
Clear Sky - Remake
3.8
Old Story
4.1
OGSE 0.6.9.2
4.1
Another Zone Mod. Пролог
4.2
Priboi story
4.1
MISERY 2.2
4.1
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
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
Поиск: