Phoenix 1.0 - обсуждение.

Автоматическое создание no-Steam игр из GCF, поддержка модов на Source и GoldSource, распаковка *.SID файлов.
Сообщение
Автор
South
Разработчик
Разработчик
Сообщения: 287
Зарегистрирован: 18.06.2006
Откуда: с работы
Поблагодарили: 2 раза

#31 Сообщение 10.01.2009, 00:02

$t@t!c_V()1D писал(а):Прошу и умоляю ВСЕХ, кто может, принять участие в создании и обсуждении нового проекта (особенно такие личности, как Vit_amiN, [artemon], South).
а что ты от меня хочешь услышать?
Nikk писал(а):
impulse666 писал(а):и да, опять ты взялся за программирование...вначале-бы на бумажке продумал..
Новое поколение думают уже без бумажек... Во всяком случае нас так учили.. :crazy:
создай БД из пары сотен таблиц. напиши клиентский интерфейс. обеспечь обмен данными между удаленными точками хотя бы через фтп. это грубая постановка задачи. я посмотрю как ты обойдешься без бумажки (тех. задания)
$t@t!c_V()1D писал(а):Уже делал как-то с помощью "стандартного" TOOLTIPS_CLASS, но при наведении на какой-нибудь контрол, он сначала показывается, а потом исчезает в самый ненужный момент и больше при наведении не появляется...похоже, придется писать свой собственный класс ToolTip'ов...или нет :D ?
это ошибка commoncontrols 6-ой версии, т.е. майкрософта. вот тут лежит ISHint.dll с примером использования, которую я рисовал для inno setup'a там такая же проблема (тоже использовался стандартный класс Tooltips_Class32). глюк нашелся когда уже было все написано :( , поэтому переписывать ничего не стал. вобщем, если отключить XP-шный манифест, то глюков не будет. или рисуй свои подсказки.
Последний раз редактировалось South 10.01.2009, 01:33, всего редактировалось 2 раза.
все пропало

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#32 Сообщение 10.01.2009, 01:28

$t@t!c_V()1D писал(а):[UPD]
Слушайте, есть у кого-нибудь исходники читалки CDR на Delphi (andreil'a не предлагать - я намучился :%) ) или идеи получше, чем использование GCFPrep.dll для чтения CDR?
Вот, недавно свои исходники переработал, ликвидировал утечку памяти ;) Необходима библиотека KOL + KOLZLib (БЕЗ ЗАМЕНЫ СИСТЕМНЫХ МОДУЛЕЙ, иначе будет работать только в дебаге).
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#33 Сообщение 10.01.2009, 03:25

South писал(а):вобщем, если отключить XP-шный манифест, то глюков не будет. или рисуй свои подсказки.
South, ну хотя бы об этом :crazy: :Rose: .
andreil писал(а):Вот, недавно свои исходники переработал, ликвидировал утечку памяти ;)
Вот уж чего не думал, так это что andreil сам заявится (ну, мол, готовится...все дела...) и сам выложит мне переработанные исходники. Это просто жесть, товарищи...все будет охрененно...однозначно :crazy: .

[UPD]
andreil писал(а):БЕЗ ЗАМЕНЫ СИСТЕМНЫХ МОДУЛЕЙ, иначе будет работать только в дебаге
Какие это "системные модули" я не должен заменять?

То-то я смотрю, у меня загрузчик CDR глючит :( ...Я по-твоему что должен загружать: ClientRegistry.blob с одним-единственным ContentDescriptionRecord-ключом или тупо экспортированный этот же ключ, содержащий ContentDescriptionRecord (без "оболочки" .blob)

[Even more UPD]
Вот...ну, вообще не знаю чего делать...andreil, сделай услугу, посмотри что я не так делаю :%) ?
Main_DLL.rar
Комментарии: tmp.exe будет искать Main.dll в своей же папке, так что просто скомпилируй и запусти и не забудь положить ClientRegistry.blob куда следует :wink: .
И да, tmp.exe выполняет 2 функций из Main.dll - PhxSharedInit и CDR_GetInfoBy: первая нужна, чтобы найти нужный путь к ClientRegistry.blob, ну а название второй должно говорить само за себя :P .

Во всем коде можешь не разбираться, только поставь бряк на загрузчик CDR'a и смотри что у меня тебя там выходит.

South
Разработчик
Разработчик
Сообщения: 287
Зарегистрирован: 18.06.2006
Откуда: с работы
Поблагодарили: 2 раза

#34 Сообщение 10.01.2009, 13:18

$t@t!c_V()1D писал(а):
andreil писал(а):БЕЗ ЗАМЕНЫ СИСТЕМНЫХ МОДУЛЕЙ, иначе будет работать только в дебаге
Какие это "системные модули" я не должен заменять?
наверное имелось ввиду SYSINIT и SYSTEM, если я правильно понял
все пропало

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#35 Сообщение 10.01.2009, 17:56

South писал(а):
$t@t!c_V()1D писал(а):
andreil писал(а):БЕЗ ЗАМЕНЫ СИСТЕМНЫХ МОДУЛЕЙ, иначе будет работать только в дебаге
Какие это "системные модули" я не должен заменять?
наверное имелось ввиду SYSINIT и SYSTEM, если я правильно понял
Ты прав ;) Я это практикую для уменьшения размера программ, однако в некоторых случаях, как в этом, это мешает стабильности :( .
$t@t!c_V()1D писал(а):То-то я смотрю, у меня загрузчик CDR глючит :( ...Я по-твоему что должен загружать: ClientRegistry.blob с одним-единственным ContentDescriptionRecord-ключом или тупо экспортированный этот же ключ, содержащий ContentDescriptionRecord (без "оболочки" .blob)
Тебе нужна именно загрузка CDR'а? Или загрузка BOLO-файла с ним?
Все дело в том, что у меня идет только первый пункт, над вторым не работал, тк мне не надо ;) Однако, по просьбе трудящихся могу и сделать.
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#36 Сообщение 12.01.2009, 07:58

andreil писал(а):Ты прав ;) Я это практикую для уменьшения размера программ, однако в некоторых случаях, как в этом, это мешает стабильности :( .
А что мне-то остается делать? :%)
andreil писал(а):
$t@t!c_V()1D писал(а):То-то я смотрю, у меня загрузчик CDR глючит :( ...Я по-твоему что должен загружать: ClientRegistry.blob с одним-единственным ContentDescriptionRecord-ключом или тупо экспортированный этот же ключ, содержащий ContentDescriptionRecord (без "оболочки" .blob)
Тебе нужна именно загрузка CDR'а? Или загрузка BOLO-файла с ним?
Все дело в том, что у меня идет только первый пункт, над вторым не работал, тк мне не надо ;) Однако, по просьбе трудящихся могу и сделать.
Подчеркнутое :wink: . Второго не надо, оно, по-моему. слишком муторно будет. У тебя в Steam-Lite'e такая же ведь система-то? Я, собственно, почему и принялся переделывать исходники Steam-Lite'a под себя: взял Games_CDR, повыкидывал Unit1 и то, что относится к чтению GCF, думал заработает...ан нет.

Повторюсь: Нужно чтение ClientRegistry.blob с единственным ключом /TopKey/ContentDescriptionRecord и все :crazy: ...пока

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#37 Сообщение 12.01.2009, 09:13

$t@t!c_V()1D писал(а):Подчеркнутое :wink: . Второго не надо, оно, по-моему. слишком муторно будет. У тебя в Steam-Lite'e такая же ведь система-то? Я, собственно, почему и принялся переделывать исходники Steam-Lite'a под себя: взял Games_CDR, повыкидывал Unit1 и то, что относится к чтению GCF, думал заработает...ан нет.

Повторюсь: Нужно чтение ClientRegistry.blob с единственным ключом /TopKey/ContentDescriptionRecord и все :crazy: ...пока
ОК, сделал оба варианта. Правда, пока нету сохранения БЛОБа, но это временно (до четверга) ;)
А пока держи верию с поддержкой БЛОБов. Использую так:

Код: Выделить всё

New(Blob, Create);
Blob^.LoadFromFile(ProgDir+'Files\ClientRegistry.blob');
    if Blob.Node['TopKey\SteamNetwork\ContentDescriptionRecord']=nil then
    begin
      MessageBox(Form.Handle, 'Невозможно загрузить Content Description Record!', 'Ошибка:', MB_ICONERROR);
      Form.ModalResult:=2;
      Exit;
    end;
    CDR:=NewCDR; 
    CDR.LoadFromNode(Blob.Node['TopKey\SteamNetwork\ContentDescriptionRecord'].KeyValue);
    if CDR.AppRecords.Count=0 then
    begin
      MessageBox(Form.Handle, 'Невозможно загрузить Content Description Record!', 'Ошибка:', MB_ICONERROR);
      Form.ModalResult:=2;
      CDR.Free;
      Exit;
    end;
  end;
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#38 Сообщение 12.01.2009, 12:39

Моя тебе благодарность. ..лишнего, впрочем, можно было и не делать, но за возможность загружать CDR не только с /TopKey, мой низкий тебе поклон.
Пожалуй, тебя давно надо было в соавторы записать :-D ...
Протестирую - отпишусь ;) .

[UPD]
И да, не уж-то ты не знаешь, что ESubBillingType и eSubBillingType в С++ - разные вещи :%) ?

Добавлено спустя 36 минут 20 секунд:
А где CDR.LoadFromNode ? :shock: Ты уж скинь все, что относится к исходникам чтения CDR...

Добавлено спустя 12 минут 45 секунд:
И вот что ещё накопал: в обоих ClientRegistry.blob (имею ввиду сжатый и несжатый CDR) Наблюдается вот следующая вещь:

Код: Выделить всё

function TSteamBlobFileSystem.GetNode(Path: string): pSteamBlobNode;
  procedure Get(StartPath: string; StartNode: pSteamBlobNode);
  var
    i: integer;
  begin
   // Что интересно, все CDR (сжатый и несжатый) он грузит и это реально видно
   for i:=0 to StartNode.NodesCount-1 do //Но вот здесь всегда говорит, что StartNode.NodesCount = 0 :(
    begin
      if StartPath+''+StartNode.Nodes[i].Name=Path then
      begin
        GetNode:=StartNode.Nodes[i];
        Exit;
      end
        else Get(StartPath+''+StartNode.Nodes[i].Name, StartNode.Nodes[i]);
    end;
  end;
begin
  result:=nil;
  Get('TopKey', TopKey);
end;
И это происходит ещё до предполагаемого CDR.LoadFromNode (ну, я попробовал переделать CDR.LoadFromFile :blush: .)

Добавлено спустя 1 час 18 минут 29 секунд:
Вот ещё что: на первой функции - KeyEntry - всё выглядит более-менее нормально, но как только доходит до второй - SubKeys - начинает читать NodeBinary и полный бред выходит:
debug.gif
debug.gif (5.16 КБ) 1175 просмотров
debug.gif
debug.gif (5.16 КБ) 1175 просмотров

Код: Выделить всё

procedure TSteamBlobNode.KeyEntry(NodeBinary: pStream);
var
  Node: TNode;
begin
  type_:=Key; 
  NodeBinary.Read(Node, sizeof(TNode));
  Name:=NodeBinary.ReadStrLen(Node.descriptorlength);   
  KeyValue.ValueSize:=Node.datalength;
  
  SubKeys(NodeBinary);
end;

procedure TSteamBlobNode.SubKeys(NodeBinary: pStream);
var
  NodeHeader: TNodeHeader;
  DNode: TDescriptorNode;
  i: int;
begin
  NodeBinary.Read(NodeHeader, sizeof(TNodeHeader)); //вот здесь и происходит полный бред...может дело в "предпосылках"
  if NodeHeader.magic<>NodeMagicNum then //на скрине видно, что NodeHeader.magic совсем не тот, что нужен :(
  begin
    Exit;
  end
    else
  begin
    for i:=0 to 1 do
    begin 
      NodeBinary.Read(DNode, sizeof(TDescriptorNode));
      case DNode.type_ of
        Key: KeyEntries(NodeBinary);
        Value: ValueEntries(NodeBinary);
      end;
    end;
  end;
  NodeBinary.Seek(NodeHeader.nullpadding, spCurrent);
end;

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#39 Сообщение 13.01.2009, 18:06

Значит так. Берешь файлы из аттача (там я добавил отсутствующие функции), проверяешь.
Если не пашет, то "Project->Options->Compiler->Record field aligment := 1".
Если работать не будет (при чтении БЛОБа в функции "procedure TSteamBlobNode.Populate(NodeBinary: pStream);" после первой строчки NodeHeader.nullpadding должно быть равно 0), то удаляешь DCU'шники, компилишь и проверяешь.
Если все равно не работает, то берешь и меняешь тип TNodeHeader.nullpadding на ushort, компилишь, запускаешь, видишь что левое прочитало, меняшь назад, компилиш и ВСЕ ОК!
Хоть и муторно, но работает 100% :crazy:
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
[artemon]
Капитан
Капитан
Сообщения: 342
Зарегистрирован: 11.08.2008
Откуда: тут нашлось столько гнилья?
Контактная информация:

#40 Сообщение 13.01.2009, 18:37

blink :D
есть ли какой нибудь медиа плеер,который бы как стим оверлей появлялся бы в игре при нажтии на опред.клавиши?Чтобы проигрывал и аудио и видео(хотя хз как будет тормозить или нет)..Если такого нет,сделайте пожалуйста)а как вообще реализовать поверх игры? директх ведь по умолчанию рисует поверх всего?надо сделать оконный режим?fullscreen=0 ? да да да это намек на плагин)

з.ы. не знаю как для всех ,Но для меня game overlay (http://www.f1cd.ru/soft/windows/media/m ... lay_107_3/) не удобна для этих целей ,а может есть готовые плееры поверх игр? :crazy:

Optima
VIP
VIP
Сообщения: 2337
Зарегистрирован: 11.01.2008
Поблагодарили: 1 раз
Контактная информация:

#41 Сообщение 13.01.2009, 23:43

не сомневаюсь все у Вас получится отлично :)

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#42 Сообщение 14.01.2009, 00:56

andreil
Обязательно проверю и отпишусь ;) .

[artemon] Ну ты и загнул :crazy: . Если уж и делать такой плагин, то не к Фениксу точно.
Это надо плагин к...Халфе делать (если она вообще поддерживает плагины :-P )

Аватара пользователя
[artemon]
Капитан
Капитан
Сообщения: 342
Зарегистрирован: 11.08.2008
Откуда: тут нашлось столько гнилья?
Контактная информация:

#43 Сообщение 14.01.2009, 01:00

:crazy:
ну тогда можно его как отдельную программу сделать...я знаю вы сможете)) было бы удобно) а если его встроить в стим,то вообще красота :D

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#44 Сообщение 14.01.2009, 09:09

Ты хочешь, чтобы я изучал DirectX API?
Тогда это должна быть технология перехвата окон DirectX-приложений, как в Fraps или Game Cam...трудно это...

Да и вообще, по-моему, это к теме халфы мало чем относится.

Добавлено спустя 6 часов 3 минуты 6 секунд:
Rh-A-A-A-A-A-GH FUCKING YEAH ! YOU FINALLY MADE IT ! :Yahoo!: :Yahoo!: :Yahoo!:
:good: :beer:
Ты крут, andreil!

Аватара пользователя
Adolf_BarniK
Полковник
Полковник
Сообщения: 4128
Зарегистрирован: 12.03.2006
Благодарил (а): 3 раза
Поблагодарили: 29 раз
Контактная информация:

#45 Сообщение 14.01.2009, 09:37

какая разница между console и developer's console ?

Закрыто Вложения 18