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

Помощь

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

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


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

Помощь

Сообщение quckly » 20 апр 2012, 18:38

Что - то не получается сделать плагин к метамоду. ОС Win 7 x64. MSVS 2010. Пытаюсь скомпилировать простой тестовый код из статьи бабкина. Компилируется, но если поставить на сервер то пишет bad file. Так же совершенно случайно для теста взял код из fakemeta
Код: Выделить всё
#ifdef __linux__
// linux prototype
C_DLLEXPORT void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals ) {

#else
#ifdef _MSC_VER
// MSVC: Simulate __stdcall calling convention
C_DLLEXPORT __declspec(naked) void GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
   __asm         // Prolog
   {
      // Save ebp
      push      ebp
      // Set stack frame pointer
      mov         ebp, esp
      // Allocate space for local variables
      // The MSVC compiler gives us the needed size in __LOCAL_SIZE.
      sub         esp, __LOCAL_SIZE
      // Push registers
      push      ebx
      push      esi
      push      edi
   }
#else   // _MSC_VER
#ifdef __GNUC__
// GCC can also work with this
C_DLLEXPORT void __stdcall GiveFnptrsToDll( enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals )
{
#else   // __GNUC__
// compiler not known
#error There is no support (yet) for your compiler. Please use MSVC or GCC compilers or contact the AMX Mod X dev team.
#endif   // __GNUC__
#endif // _MSC_VER
#endif // __linux__

   // ** Function core <--
   memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
   gpGlobals = pGlobals;
   // NOTE!  Have to call logging function _after_ copying into g_engfuncs, so
   // that g_engfuncs.pfnAlertMessage() can be resolved properly, heh. :)
   // UTIL_LogPrintf("[%s] dev: called: GiveFnptrsToDll\n", Plugin_info.logtag);
   // --> ** Function core

#ifdef _MSC_VER
   // Epilog
   if (sizeof(int*) == 8)
   {   // 64 bit
      __asm
      {
         // Pop registers
         pop   edi
         pop   esi
         pop   ebx
         // Restore stack frame pointer
         mov   esp, ebp
         // Restore ebp
         pop   ebp
         // 2 * sizeof(int*) = 16 on 64 bit
         ret 16
      }
   }
   else
   {   // 32 bit
      __asm
      {
         // Pop registers
         pop   edi
         pop   esi
         pop   ebx
         // Restore stack frame pointer
         mov   esp, ebp
         // Restore ebp
         pop   ebp
         // 2 * sizeof(int*) = 8 on 32 bit
         ret 8
      }
   }
#endif // #ifdef _MSC_VER

С ним плагин загружается, но ничего не выводит в консоль load ANY unload PAUSE
В мета лист выводится имя плагина и версия. Но ничего не выводится в консоль. В чем может быть ошибка?
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 238 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Помощь

Сообщение s1lent » 30 май 2014, 16:02

trofian, ну скинь проект - посмотрим)

PRoSToTeM@, это давно было и лень менять язык) вошло в привычку.
Аватара пользователя
s1lent
Скриптер
 
Сообщения: 121
Зарегистрирован: 11 июл 2011, 20:02
Откуда: Северск
Благодарил (а): 32 раз.
Поблагодарили: 109 раз.

Re: Помощь

Сообщение Polarhigh » 30 май 2014, 16:46

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

вот я тут пробовал Вы должны зарегистрироваться, чтобы видеть ссылки.
Аватара пользователя
Polarhigh
Скриптер
 
Сообщения: 995
Зарегистрирован: 04 май 2010, 17:41
Благодарил (а): 131 раз.
Поблагодарили: 376 раз.

Re: Помощь

Сообщение Polarhigh » 30 май 2014, 20:10

вообще штука клёвая, можно наладить так, что можно будет прямо из игры редактирую код и изменения будут сразу вступают в силу)
только нужно затестить производительность, вообще гугловский V8 считается самым быстрым js движком. Хотя я сомневаюсь, что он будет быстрее байт-кода павна, но попробовать стоит
Аватара пользователя
Polarhigh
Скриптер
 
Сообщения: 995
Зарегистрирован: 04 май 2010, 17:41
Благодарил (а): 131 раз.
Поблагодарили: 376 раз.

Re: Помощь

Сообщение Polarhigh » 31 май 2014, 18:03

разобрался, проблема в том, что походу v8 уже 200 раз обновился и необходим другой подход к созданию контекста и прочих вещей
забавно, но hello world на офф странице нерабочий
Аватара пользователя
Polarhigh
Скриптер
 
Сообщения: 995
Зарегистрирован: 04 май 2010, 17:41
Благодарил (а): 131 раз.
Поблагодарили: 376 раз.

Re: Помощь

Сообщение s1lent » 01 июн 2014, 16:20

сейчас пытался скомпилировать и библиотеки отказываются работать - без них нормально, с ними что-то не так)
интересно, особо не разбирал, видимо не хватает чего-то.
Аватара пользователя
s1lent
Скриптер
 
Сообщения: 121
Зарегистрирован: 11 июл 2011, 20:02
Откуда: Северск
Благодарил (а): 32 раз.
Поблагодарили: 109 раз.

Re: Помощь

Сообщение Polarhigh » 01 июн 2014, 16:31

если мои сообщения неубедительны, то пожалуйста

это глобальные переменные (hldsv8.cpp), дебагер не ловит
Код: Выделить всё
Isolate* isolate = Isolate::GetCurrent();
HandleScope handle_scope(isolate);
Handle<Context> context;


создал новый проект, переместил в функцию, выяснил что Isolate::GetCurrent() всегда возвращает NULL
при создании handle_scope вываливат access violation

нужно делать так
Код: Выделить всё
Isolate* isolate = Isolate::New();
isolate->Enter();

V8::Initialize();

HandleScope handle_scope(isolate);
Аватара пользователя
Polarhigh
Скриптер
 
Сообщения: 995
Зарегистрирован: 04 май 2010, 17:41
Благодарил (а): 131 раз.
Поблагодарили: 376 раз.

Re: Помощь

Сообщение s1lent » 01 июн 2014, 16:56

ясно, не там искал.
Аватара пользователя
s1lent
Скриптер
 
Сообщения: 121
Зарегистрирован: 11 июл 2011, 20:02
Откуда: Северск
Благодарил (а): 32 раз.
Поблагодарили: 109 раз.

Пред.

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

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

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