Русское сообщество по скриптингу

Код dll

Все вопросы по скриптингу для Metamod, помощь в редактировании плагинов.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для
Metamod.


Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник плагина.

Код dll

Сообщение Defigod » 25 ноя 2012, 23:01

Почему на форуме нет ни одного туториала, как писать код dll?
Из Вы должны зарегистрироваться, чтобы видеть ссылки. темы взял простой пример HelloWorld:
Код: Выделить всё
#include <extdll.h>
#include <meta_api.h>

plugin_info_t info = {
   META_INTERFACE_VERSION,            // ifvers
   "HELLO WORLD",                  // name
   "1.01",                        // version
   "2011/01/15",                  // date
   "--===((((][@KIRjkeeee))))===--",   // author
   "http://ultra.ucoz.ru",            // url
   "HELLOWORLD",                  // logtag, all caps please
   PT_ANYTIME,                     // (when) loadable
   PT_ANYPAUSE                     // (when) unloadable
};

enginefuncs_t g_engfuncs;

void WINAPI GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
{
   memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
}

C_DLLEXPORT int Meta_Query(char *interfaceVersion, plugin_info_t **pinfo, mutil_funcs_t *pMetaUtilFuncs)
{
   *pinfo = &info;
   ALERT(at_console, "[HELLOWORLD]: meta_query\n");
   return(TRUE);
}

C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)
{
   ALERT(at_console, "[HELLOWORLD]: meta_attach\n");
   return(TRUE);
}

C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
{
   ALERT(at_console, "[HELLOWORLD]: meta_detach\n");
   return(TRUE);
}


Не могу понять, что здесь что... Кто-нибудь может пояснить каждую строчку?
С С++ знаком на среднем уровне =)
Аватара пользователя
Defigod
 
Сообщения: 21
Зарегистрирован: 10 ноя 2012, 21:18
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Код dll

Сообщение Bos93 » 26 ноя 2012, 01:00

Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Код dll

Сообщение Defigod » 26 ноя 2012, 10:14

Прочитать что?
Аватара пользователя
Defigod
 
Сообщения: 21
Зарегистрирован: 10 ноя 2012, 21:18
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Код dll

Сообщение Defigod » 26 ноя 2012, 15:32

Я прочитал все эти темы.
Аватара пользователя
Defigod
 
Сообщения: 21
Зарегистрирован: 10 ноя 2012, 21:18
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Код dll

Сообщение 6a6kin » 26 ноя 2012, 16:25

В VS создаёте проект - Dynamic Load Library и вставляете код из второй темы в cpp-файл.
На заказ не пишу.
Аватара пользователя
6a6kin
Скриптер
 
Сообщения: 332
Зарегистрирован: 09 мар 2010, 16:40
Благодарил (а): 38 раз.
Поблагодарили: 278 раз.

Re: Код dll

Сообщение Defigod » 26 ноя 2012, 22:11

Мне не нужен готовый код. Мне нужно понять почему этот код выглядит именно так. Скомпилировать .dll труда не составляет.
Аватара пользователя
Defigod
 
Сообщения: 21
Зарегистрирован: 10 ноя 2012, 21:18
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Код dll

Сообщение Bos93 » 26 ноя 2012, 22:37

Вот тебе готовый код.
[pawn]
  1. #include <extdll.h>

  2. #include <meta_api.h>

  3.  

  4. meta_globals_t *gpMetaGlobals;

  5.  

  6. plugin_info_t info = {

  7.    META_INTERFACE_VERSION,            // ifvers

  8.    "HELLO WORLD",                  // name

  9.    "1.01",                        // version

  10.    "2011/02/19",                  // date

  11.    "6a6kin",                     // author

  12.    "http://ultra.ucoz.ru",            // url

  13.    "HELLOWORLD",                  // logtag, all caps please

  14.    PT_ANYTIME,                     // (when) loadable

  15.    PT_ANYPAUSE                     // (when) unloadable

  16. };

  17.  

  18. static META_FUNCTIONS gMetaFunctionTable =

  19. {

  20.    NULL,            // pfnGetEntityAPI            HL SDK; called before game DLL

  21.    NULL,            // pfnGetEntityAPI_Post         META; called after game DLL

  22.    NULL,            // pfnGetEntityAPI2            HL SDK2; called before game DLL

  23.    NULL,            // pfnGetEntityAPI2_Post      META; called after game DLL

  24.    NULL,            // pfnGetNewDLLFunctions      HL SDK2; called before game DLL

  25.    NULL,            // pfnGetNewDLLFunctions_Post   META; called after game DLL

  26.    GetEngineFunctions,   // pfnGetEngineFunctions      META; called before HL engine

  27.    NULL            // pfnGetEngineFunctions_Post   META; called after HL engine

  28. };

  29.  

  30. enginefuncs_t g_engfuncs;

  31. globalvars_t  *gpGlobals;

  32.  

  33. #if defined _MSC_VER

  34.    #pragma comment(linker, "/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8")

  35. #endif

  36.  

  37. C_DLLEXPORT void WINAPI GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)

  38. {

  39.    memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));

  40.    gpGlobals = pGlobals;

  41.    ALERT(at_console, "[HELLOWORLD]: GiveFnptrsToDll\n");

  42. }

  43.  

  44. C_DLLEXPORT int Meta_Query(char *interfaceVersion, plugin_info_t **pinfo, mutil_funcs_t *pMetaUtilFuncs)

  45. {

  46.    *pinfo = &info;

  47.    ALERT(at_console, "[HELLOWORLD]: meta_query\n");

  48.    return(TRUE);

  49. }

  50.  

  51. C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)

  52. {

  53.  

  54.    if(!pFunctionTable)

  55.    {

  56.       return(FALSE);

  57.    }

  58.  

  59.  

  60.    memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));

  61.    gpMetaGlobals = pMGlobals;

  62.    ALERT(at_console, "[HELLOWORLD]: meta_attach\n");

  63.    return(TRUE);

  64. }

  65.  

  66. C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)

  67. {

  68.    ALERT(at_console, "[HELLOWORLD]: meta_detach\n");

  69.    return(TRUE);

  70. }

  71.  

  72. int fnPre(char *s)

  73. {

  74.    ALERT(at_console, "[HELLOWORLD]: model precaching\n");

  75.    RETURN_META_VALUE(MRES_IGNORED, 0);

  76. }

  77.  

  78. enginefuncs_t my_tracers =

  79. {

  80.    fnPre,                  // pfnPrecacheModel()

  81.    NULL,                  // pfnPrecacheSound()

  82.    NULL,                  // pfnSetModel()

  83.    NULL,                  // pfnModelIndex()

  84.    NULL,                  // pfnModelFrames()

  85.  

  86.    NULL,                  // pfnSetSize()

  87.    NULL,                  // pfnChangeLevel()

  88.    NULL,                  // pfnGetSpawnParms()

  89.    NULL,                  // pfnSaveSpawnParms()

  90.  

  91.    NULL,                  // pfnVecToYaw()

  92.    NULL,                  // pfnVecToAngles()

  93.    NULL,                  // pfnMoveToOrigin()

  94.    NULL,                  // pfnChangeYaw()

  95.    NULL,                  // pfnChangePitch()

  96.  

  97.    NULL,                  // pfnFindEntityByString()

  98.    NULL,                  // pfnGetEntityIllum()

  99.    NULL,                  // pfnFindEntityInSphere()

  100.    NULL,                  // pfnFindClientInPVS()

  101.    NULL,                  // pfnEntitiesInPVS()

  102.  

  103.    NULL,                  // pfnMakeVectors()

  104.    NULL,                  // pfnAngleVectors()

  105.  

  106.    NULL,                  // pfnCreateEntity()

  107.    NULL,                  // pfnRemoveEntity()

  108.    NULL,                  // pfnCreateNamedEntity()

  109.  

  110.    NULL,                  // pfnMakeStatic()

  111.    NULL,                  // pfnEntIsOnFloor()

  112.    NULL,                  // pfnDropToFloor()

  113.  

  114.    NULL,                  // pfnWalkMove()

  115.    NULL,                  // pfnSetOrigin()

  116.  

  117.    NULL,                  // pfnEmitSound()

  118.    NULL,                  // pfnEmitAmbientSound()

  119.  

  120.    NULL,                  // pfnTraceLine()

  121.    NULL,                  // pfnTraceToss()

  122.    NULL,                  // pfnTraceMonsterHull()

  123.    NULL,                  // pfnTraceHull()

  124.    NULL,                  // pfnTraceModel()

  125.    NULL,                  // pfnTraceTexture()

  126.    NULL,                  // pfnTraceSphere()

  127.    NULL,                  // pfnGetAimVector()

  128.  

  129.    NULL,                  // pfnServerCommand()

  130.    NULL,                  // pfnServerExecute()

  131.    NULL,                  // pfnClientCommand()

  132.  

  133.    NULL,                  // pfnParticleEffect()

  134.    NULL,                  // pfnLightStyle()

  135.    NULL,                  // pfnDecalIndex()

  136.    NULL,                  // pfnPointContents()

  137.  

  138.    NULL,                  // pfnMessageBegin()

  139.    NULL,                  // pfnMessageEnd()

  140.  

  141.    NULL,                  // pfnWriteByte()

  142.    NULL,                  // pfnWriteChar()

  143.    NULL,                  // pfnWriteShort()

  144.    NULL,                  // pfnWriteLong()

  145.    NULL,                  // pfnWriteAngle()

  146.    NULL,                  // pfnWriteCoord()

  147.    NULL,                  // pfnWriteString()

  148.    NULL,                  // pfnWriteEntity()

  149.  

  150.    NULL,                  // pfnCVarRegister()

  151.    NULL,                  // pfnCVarGetFloat()

  152.    NULL,                  // pfnCVarGetString()

  153.    NULL,                  // pfnCVarSetFloat()

  154.    NULL,                  // pfnCVarSetString()

  155.  

  156.    NULL,                  // pfnAlertMessage()

  157.    NULL,                  // pfnEngineFprintf()

  158.  

  159.    NULL,                  // pfnPvAllocEntPrivateData()

  160.    NULL,                  // pfnPvEntPrivateData()

  161.    NULL,                  // pfnFreeEntPrivateData()

  162.  

  163.    NULL,                  // pfnSzFromIndex()

  164.    NULL,                  // pfnAllocString()

  165.  

  166.    NULL,                   // pfnGetVarsOfEnt()

  167.    NULL,                  // pfnPEntityOfEntOffset()

  168.    NULL,                  // pfnEntOffsetOfPEntity()

  169.    NULL,                  // pfnIndexOfEdict()

  170.    NULL,                  // pfnPEntityOfEntIndex()

  171.    NULL,                  // pfnFindEntityByVars()

  172.    NULL,                  // pfnGetModelPtr()

  173.  

  174.    NULL,                  // pfnRegUserMsg()

  175.  

  176.    NULL,                  // pfnAnimationAutomove()

  177.    NULL,                  // pfnGetBonePosition()

  178.  

  179.    NULL,                  // pfnFunctionFromName()

  180.    NULL,                  // pfnNameForFunction()

  181.  

  182.    NULL,                  // pfnClientPrintf()

  183.    NULL,                  // pfnServerPrint()

  184.  

  185.    NULL,                  // pfnCmd_Args()

  186.    NULL,                  // pfnCmd_Argv()

  187.    NULL,                  // pfnCmd_Argc()

  188.  

  189.    NULL,                  // pfnGetAttachment()

  190.  

  191.    NULL,                  // pfnCRC32_Init()

  192.    NULL,                  // pfnCRC32_ProcessBuffer()

  193.    NULL,                  // pfnCRC32_ProcessByte()

  194.    NULL,                  // pfnCRC32_Final()

  195.  

  196.    NULL,                  // pfnRandomLong()

  197.    NULL,                  // pfnRandomFloat()

  198.  

  199.    NULL,                  // pfnSetView()

  200.    NULL,                  // pfnTime()

  201.    NULL,                  // pfnCrosshairAngle()

  202.  

  203.    NULL,                  // pfnLoadFileForMe()

  204.    NULL,                  // pfnFreeFile()

  205.  

  206.    NULL,                  // pfnEndSection()

  207.    NULL,                  // pfnCompareFileTime()

  208.    NULL,                  // pfnGetGameDir()

  209.    NULL,                  // pfnCvar_RegisterVariable()

  210.    NULL,                  // pfnFadeClientVolume()

  211.    NULL,                  // pfnSetClientMaxspeed()

  212.    NULL,                  // pfnCreateFakeClient()

  213.    NULL,                  // pfnRunPlayerMove()

  214.    NULL,                  // pfnNumberOfEntities()

  215.  

  216.    NULL,                  // pfnGetInfoKeyBuffer()

  217.    NULL,                  // pfnInfoKeyValue()

  218.    NULL,                  // pfnSetKeyValue()

  219.    NULL,                  // pfnSetClientKeyValue()

  220.  

  221.    NULL,                  // pfnIsMapValid()

  222.    NULL,                  // pfnStaticDecal()

  223.    NULL,                  // pfnPrecacheGeneric()

  224.    NULL,                   // pfnGetPlayerUserId()

  225.    NULL,                  // pfnBuildSoundMsg()

  226.    NULL,                  // pfnIsDedicatedServer()

  227.    NULL,                  // pfnCVarGetPointer()

  228.    NULL,                  // pfnGetPlayerWONId()

  229.  

  230.    NULL,                  // pfnInfo_RemoveKey()

  231.    NULL,                  // pfnGetPhysicsKeyValue()

  232.    NULL,                  // pfnSetPhysicsKeyValue()

  233.    NULL,                  // pfnGetPhysicsInfoString()

  234.    NULL,                  // pfnPrecacheEvent()

  235.    NULL,                  // pfnPlaybackEvent()

  236.  

  237.    NULL,                  // pfnSetFatPVS()

  238.    NULL,                  // pfnSetFatPAS()

  239.  

  240.    NULL,                  // pfnCheckVisibility()

  241.  

  242.    NULL,                  // pfnDeltaSetField()

  243.    NULL,                  // pfnDeltaUnsetField()

  244.    NULL,                  // pfnDeltaAddEncoder()

  245.    NULL,                  // pfnGetCurrentPlayer()

  246.    NULL,                  // pfnCanSkipPlayer()

  247.    NULL,                  // pfnDeltaFindField()

  248.    NULL,                  // pfnDeltaSetFieldByIndex()

  249.    NULL,                  // pfnDeltaUnsetFieldByIndex()

  250.  

  251.    NULL,                  // pfnSetGroupMask()

  252.  

  253.    NULL,                  // pfnCreateInstancedBaseline()

  254.    NULL,                  // pfnCvar_DirectSet()

  255.  

  256.    NULL,                  // pfnForceUnmodified()

  257.  

  258.    NULL,                  // pfnGetPlayerStats()

  259.  

  260.    NULL,                  // pfnAddServerCommand()

  261.  

  262.    NULL,                  // pfnVoice_GetClientListening()

  263.    NULL,                  // pfnVoice_SetClientListening()

  264.  

  265.    NULL,                  // pfnGetPlayerAuthId()

  266.  

  267.    NULL,                  // pfnSequenceGet()

  268.    NULL,                  // pfnSequencePickSentence()

  269.    NULL,                  // pfnGetFileSize()

  270.    NULL,                  // pfnGetApproxWavePlayLen()

  271.    NULL,                  // pfnIsCareerMatch()

  272.    NULL,                  // pfnGetLocalizedStringLength()

  273.    NULL,                  // pfnRegisterTutorMessageShown()

  274.    NULL,                  // pfnGetTimesTutorMessageShown()

  275.    NULL,                  // pfnProcessTutorMessageDecayBuffer()

  276.    NULL,                  // pfnConstructTutorMessageDecayBuffer()

  277.    NULL,                  // pfnResetTutorMessageDecayData()

  278.    NULL,                  // pfnQueryClientCvarValue()

  279.    NULL,                  // pfnQueryClientCvarValue2()

  280. };

  281.  

  282. C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion)

  283. {

  284.    if(!pengfuncsFromEngine)

  285.    {

  286.       return(FALSE);

  287.    } else if(*interfaceVersion != ENGINE_INTERFACE_VERSION)

  288.    {

  289.       *interfaceVersion = ENGINE_INTERFACE_VERSION;

  290.       return(FALSE);

  291.    }

  292.  

  293.    memcpy(pengfuncsFromEngine, &my_tracers, sizeof(enginefuncs_t));

  294.    ALERT(at_console, "[HELLOWORLD]: transfer successfully ended\n");

  295.    

  296.    return(TRUE);

  297. }
[/pawn][spoiler][/spoiler]

Таблицы оригинальных функций можно разделить на три группы:
engine - Вы должны зарегистрироваться, чтобы видеть ссылки.
dllapi - Вы должны зарегистрироваться, чтобы видеть ссылки.
newdll - Вы должны зарегистрироваться, чтобы видеть ссылки.

+ hlsdk с notepad с удобным поиском по файлам в помощь,кодь на здоровье.

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

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

Re: Код dll

Сообщение 6a6kin » 27 ноя 2012, 21:10

Мне нужно понять почему этот код выглядит именно так.

С С++ знаком на среднем уровне =)


Расскажите что именно непонятно.
На заказ не пишу.
Аватара пользователя
6a6kin
Скриптер
 
Сообщения: 332
Зарегистрирован: 09 мар 2010, 16:40
Благодарил (а): 38 раз.
Поблагодарили: 278 раз.


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3