Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Создать dll библиотеку по готовому коду.


Автор: kenet95 30.8.2019, 00:41
Кто-нибудь может мне помочь? Нужно сделать dll библиотеку, но я совсем не разбираюсь в С++. Я пробовал сделать сам, но у меня не получилось.  smile 

Код

static BOOL DEMO_PRV_TakeItemFromInventory(D2Game* pGame, D2Unit* pUnit, D2Unit* pItem)
{
    D2Inventory* hInventory;
    if ((hInventory = pUnit->hInventory) == NULL)
        return FALSE;
    
    if (!UNIT_IS_ITEM(pItem) || pItem->eMode != ITEMMODE_INVENTORY)
        return FALSE;
    
    D2ItemData* pItemData;
    ASSERT(pItemData = pItem->pItemData);
    BYTE ePage = pItemData->ePage;
    
    ASSERT(D2RemoveItemFromInventory(hInventory, pItem) == pItem);

    if (ePage == INVENTORY_PAGE_PLAYER_INVENTORY)
        SITEM_AddOrRemoveBookCharges(pUnit, pItem, FALSE, TRUE);

    SITEM_RemoveItemStatsFromUnit(pUnit, pItem, FALSE, TRUE);
    if (ITEMS_CanActivateCharm(pItem, pUnit))
        SITEM_UpdateEquipment(pGame, pUnit, FALSE);

    pItemData->ePreviousPage = ePage;
    pItemData->ePage = INVENTORY_PAGE_NONE;
    pItem->dwUnitFlags &= ~UNITFLAG_SELECTABLE;
    UNITS_SetMode(pItem, ITEMMODE_CURSOR);
    
    pItemData->dwItemFlags |= ITEMFLAG_REMOVED;
                    
    if (SITEM_DoSocketsHaveContent(pItem))
        pItemData->dwItemFlags |= ITEMFLAG_RELOAD;
    
    pItemData->dwItemFlags &= ~ITEMFLAG_DISABLED;
    pItemData->dwCMDFlags |= ITEMCMD_INVENTORY_TAKE_ITEM;
    D2AddItemToInventoryUpdateList(hInventory, pItem);
    D2SetInventoryUpdateMessage(pUnit, TRUE);
    return TRUE;
}


Код

static void DEMO_PRV_MoveEntireInventoryToStash(D2Game* pGame, D2Unit* pPlayer)
{
    D2ItemData* pItemData;
    D2Unit* pItem = INV_INL_GetItemListByGrid(pPlayer->hInventory, INVENTORY_GRID_DEFAULT);
    
    while (pItemData = ITEMS_INL_GetIterator(pItem))
    {
        D2Unit* pNext = pItemData->pNextItemInPage;
        
        int nX;
        int nY;
        
        if (INV_INL_GetPosForItem(pPlayer->hInventory, pItem, INV_GetInventoryType(pPlayer, INVENTORY_PAGE_PLAYER_STASH, pGame->bExpansion), INVENTORY_PAGE_PLAYER_STASH, nX, nY))
        {
            if (DEMO_PRV_TakeItemFromInventory(pGame, pPlayer, pItem))
                ASSERT(SITEM_PutItemInInventory(pGame, pPlayer, pItem->dwID, INVENTORY_PAGE_PLAYER_STASH, nX, nY, FALSE, TRUE, NULL, NULL));
        }
        
        pItem = pNext;
    }
}

Автор: xvr 30.8.2019, 14:29
Это не 'готовый код', это какие то ошмётки без начала и конца  smile 

Цитата(kenet95 @  30.8.2019,  00:41 Найти цитируемый пост)
Кто-нибудь может мне помочь?

На этом уровне - только в Центре Помощи

Автор: kenet95 30.8.2019, 17:59
Цитата(xvr @  30.8.2019,  14:29 Найти цитируемый пост)
Это не 'готовый код', это какие то ошмётки без начала и конца


Я не разбираюсь в С++, этот код мне нужен для одной игры, т.к. я немного занимаюсь моддингом. Неужели, из него так сложно сделать dll? Я думал, может нужно дописать пару команд вначале/в конце и готово. Или это очень всё сложно и никто не будет этим заниматься, и мне нет смысла просить о помощи?   smile 

Автор: xvr 30.8.2019, 18:34
Этого кода мало. В нём используются внешние определения, которых нет. 
Цитата(kenet95 @  30.8.2019,  17:59 Найти цитируемый пост)
этот код мне нужен для одной игры,

Судя по всему нужен SDK для создания плагинов от этой игры

Цитата(kenet95 @  30.8.2019,  17:59 Найти цитируемый пост)
 Или это очень всё сложно 

Это не сложно, просто этих кусков кода недостаточно.

Автор: kenet95 30.8.2019, 20:19
Цитата(xvr @  30.8.2019,  18:34 Найти цитируемый пост)
Судя по всему нужен SDK для создания плагинов от этой игры


Что такое SDK я не знаю, если честно, но я нашел на форуме этой игры тему, где автор написал какие-то текстовики и заявлял, что это должно помочь в написании плагинов. Папка называется src. Это может помочь? (Это всё в прикрепленном архиве)

И еще всё, что я могу понять из кода, это D2Game, скорее всего это запрос к библиотеке D2Game.dll, которая нужна для запуска игры. На этом мои полномочия всё... Этого достаточно, чтобы сделать dll библиотеку по коду?

Автор: kenet95 1.9.2019, 02:42
Такое еще нашел на форуме:

Цитата

Цитата

Also how did you make these plugins if the sdk requires private access which you don't have

You don't need the SDK for making new plugins. I've just studied how D2Mod loads the existing plugins and created my plugins from that. But I think the D2Mod SDK was created for use with the programming language C, but I have used HLA for creating all the plugins.


Не знаю, может это поможет кому-то сделать dll для меня smile 

Автор: kenet95 2.9.2019, 00:02
xvr, куда Вы пропали?.. Я без Вас точно не справлюсь  smile 

Автор: xvr 2.9.2019, 15:10
Цитата(kenet95 @  30.8.2019,  20:19 Найти цитируемый пост)
Что такое SDK я не знаю, если честно, но я нашел на форуме этой игры тему, где автор написал какие-то текстовики и заявлял, что это должно помочь в написании плагинов.

Может ему (автору) это и поможет, но в написании плагинов с нуля это точно не поможет.
Ищите подробные инструкции (с полным кодом, а не кусочками) по написанию плагинов

Цитата(kenet95 @  30.8.2019,  20:19 Найти цитируемый пост)
 Этого достаточно, чтобы сделать dll библиотеку по коду? 

Нет, увы

Автор: kenet95 3.9.2019, 14:47
xvr, Я пробовал спрашивать в дискорде, но мне не особо хотят объяснять, ведь я полный нуб в C++ (да и английский знаю посредственно). (Я написал, что Вы готовы помочь, но вам не хватает информации для создания dll).

Цитата
if he knows c ++ I think he should talk with us here not you
because he has basic knowledge about coding


Все, что я сам смог найти это такой гайд, но вряд ли даже его будет достаточно. Так же меня уверяли, что такая штука, как SDK не нужна.
P.S. Порой мне кажется, что для написания кастомных длл для этой игры нужны все знания в мире (и даже чуть больше).

Видимо, не судьба. В любом случае, спасибо Вам за попытку помочь.

Автор: xvr 3.9.2019, 17:44
Судя по коду и доке у вас там собрались хакеры, которые не имея оффициального SDK (видимо его или вообще нет, или можно получить только за отдельные деньги и по договорённости с производителем) методом грубого хака разломали потроха игры и выложили тулзу, которая позволяет их  (потроха) модифицировать. Такую мелочь, как структуры данных, с которыми эти самые модифицируемые потроха должны работать они не приложили (не хакерское это дело).

Цитата(kenet95 @  3.9.2019,  14:47 Найти цитируемый пост)
Так же меня уверяли, что такая штука, как SDK не нужна.

Если она есть, то весь этот сайт (где вас уверяли) не нужен.

Цитата(kenet95 @  3.9.2019,  14:47 Найти цитируемый пост)
но мне не особо хотят объяснять, ведь я полный нуб в C++ (да и английский знаю посредственно)

Боюсь, что бы воспользоваться этим всем нужны знания не только в С++, но и гораздо глубже

Автор: kenet95 3.9.2019, 17:52
Цитата(xvr @  3.9.2019,  17:44 Найти цитируемый пост)
Если она есть, то весь этот сайт (где вас уверяли) не нужен.


Может быть я не так понял их. Мне написали такое:

Цитата

You need the D2ModSDK to properly make plugins for it. Its easier to just make a standalone Dll and have D2Mod or PlugY load it


Что такое D2Mod и PlugY я знаю (и как подключить к ним готовый dll). Может, можно как-то сделать этот самый standalone Dll без особых заморочек? Может из-за этих плагинов и не нужен SDK и все будет работать без него?

Edit: Нашел еще один Туториал, но этот еще и текстовиками (как в D2Template архиве) но уже с каким-то кодом. Может, по примеру получится сделать?

Автор: xvr 4.9.2019, 13:35
Они же вам написали чистым английским языком:

Цитата

You need the D2ModSDK to properly make plugins for it.


Перевожу - Вам нужен D2ModSDK что бы должным образом сделать плагин для него Вот этот самый SDK (D2ModSDK) вам и нужен

По поводу
Цитата

Its easier to just make a standalone Dll and have D2Mod or PlugY load it
 - тут говорится, что проще сделать отдельную dll и загрузить её через D2Mod or PlugY, но не говорится, что эту самую 'отдельную dll' можно сделать без D2ModSDK - он по прежнему нужен

Добавлено через 5 минут и 26 секунд
Посмотрел код - небольшой набор хаков для подключения к нескольким функциям в Diablo. Содержит очень небольшой кусочек SDK (скорее всего полученный методом реверс инжинеринга, по простому - хаком кода)

Добавлено через 7 минут и 10 секунд
Цитата(kenet95 @  3.9.2019,  17:52 Найти цитируемый пост)
Может из-за этих плагинов и не нужен SDK

SDK - это как раз та штука, с помощью которой делают dll плагинов. Для загрузки самих плагинов он конечно не нужен.

Автор: kenet95 5.9.2019, 05:18
xvr, хорошо, я понял. Больше не буду спорить по этому поводу.

Я по прежнему не знаю, что такое SDK (но я написал на всех известных мне форумах, что нужна такая штука, мб кто и поделится).

Но я тут еще нашел 2 таблицы, в которых куча какой-то информации (так же там внизу еще вкладки можно переключать). Все, что я знаю, это то, что 1.10f - это нужная мне версия игры.  smile  Эти таблицы не помогут?

И еще, я не совсем понимаю, что значит это сообщение. (Это из топика, где другой пользователь выложил несколько своих плагинов)

-Also how did you make these plugins if the sdk requires private access which you don't have?

-You don't need the SDK for making new plugins. I've just studied how D2Mod loads the existing plugins and created my plugins from that. But I think the D2Mod SDK was created for use with the programming language C, but I have used HLA for creating all the plugins.

(В особенности, что такое HLA)

Автор: xvr 5.9.2019, 15:09
Цитата(kenet95 @  5.9.2019,  05:18 Найти цитируемый пост)
Я по прежнему не знаю, что такое SDK

Software Development Kit - набор для разработки программ (в вашем случае плагинов) под какую то систему. Обычно состоит из заголовочных файлов (*.h) и документации (а возможно и каких то исходных файлов с кусочками программ). Всё это загоняется в какую нибудь среду разработки (типа VS), добавляются ваши исходные коды, компилируется - получается dll

Цитата(kenet95 @  5.9.2019,  05:18 Найти цитируемый пост)
I've just studied how D2Mod loads the existing plugins and created my plugins from that.

Он разломал (с помощью дебагера, насколько я могу судить) как грузятся уже собранные плагины, и на основании этой информации написал свой SDK (если это можно так назвать)

Цитата(kenet95 @  5.9.2019,  05:18 Найти цитируемый пост)
(В особенности, что такое HLA)

Это надо  у него спросить (возможно Ассемблер с какими нибудь макросами - High Level Assembler).

Добавлено через 8 минут и 21 секунду
Цитата(kenet95 @  5.9.2019,  05:18 Найти цитируемый пост)
Но я тут еще нашел 2 таблицы, в которых куча какой-то информации 

В принципе это большая часть того, что нужно. Там структуры данных и процедуры. Их в принципе можно в нормальный вид перевести (в С заголовочные файлы)
Осталось описание того, какие функции что делают

Автор: kenet95 6.9.2019, 02:22
Невероятными усилиями я еще смог и такое откопать... Даже если это не поможет, то мои полномочия точно всё smile 

Все, что я понял из тех файлов и папок:
Samples
BooksOfLore, CustomTBL, ExtLvl, MercMod, StatFix и Utility - это, возможно, исходники уже готовых плагинов. (По крайней мере я использую часть из них в виде dll)
MyMod - не уверен, возможно заготовка для нового плагина.

Source
Там названия папок идентичны названию dll, которые нужны для запуска самой игры.

Автор: xvr 6.9.2019, 16:41
Ещё одно хакерское поделие. В отличие от предыдущих в весьма приличном состоянии. Наверное с его помощью плагины делать можно (если знать что и как надо вызывать из dll игры - на этот счёт доков нет)

Автор: kenet95 6.9.2019, 16:55
А в самих функциях, что в шапке топика разве там не прописан вызов dll?

Я вряд ли смогу найти еще больше информации по созданию плагинов. Очень жаль, что ничего не получилось.

Автор: xvr 6.9.2019, 17:50
Прописан. Можете расматривать их как своего рода документацию. Маловато только её  smile 

Автор: kenet95 6.9.2019, 17:59
Могу оставить ссылку на топик, где я взял эти функции. Возможно, там есть эта информация.

https://d2mods.info/forum/viewtopic.php?t=62068

Автор: xvr 9.9.2019, 14:45
Там весь форум по сути попытка сделать SDK своими руками  smile 

Некоторые куски описания у них лежат в разделе Knowledge Base (но на английском, конечно)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)