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

Сомневаюсь, но, возможно ошибка спавна -_-

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

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


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

Сомневаюсь, но, возможно ошибка спавна -_-

Сообщение TurangaLeela » 11 окт 2012, 11:50

Компилится нормально, подгружается тоже нормально. Но крашит сервер при создании энтитей, каждый раз при разном значении счетчика иногда 10 дает создать иногда 100, но самый главный прикол в том что энтити создаются только к примеру при нажатии на "q"(фаст свич), если же написать чтото в чат - краш сразу же идет :-) (волшебство). Вот собственно сама ошибка
Done! -> Entity Created = 278 // энтити создается нормально ... вроде бы но краш
Uploading dump (in-process) [proxy '']
/tmp/dumps/crash_20121011011814_1.dmp
success = yes
response: CrashID=bp-5a92a58e-3139-442f-b153-ee0892121010

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

static DLL_FUNCTIONS DllTracers
{
...
pfnClientCommand, //void   (*pfnClientCommand)      ( edict_t *pEntity );
...
}

C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS * pFunctionTable, int * interfaceVersion)
{
memcpy(pFunctionTable, &DllTracers, sizeof(DLL_FUNCTIONS));
return 1;
}

static META_FUNCTIONS g_MetaFunctionsTable =
{
   NULL,         // pfnGetEntityAPI      HL SDK; called before game DLL
   NULL,         // pfnGetEntityAPI_Post      META; called after game DLL
   NULL,      // pfnGetEntityAPI2      HL SDK2; called before game DLL
   GetEntityAPI2_Post,         // pfnGetEntityAPI2_Post   META; called after game DLL
   NULL,         // pfnGetNewDLLFunctions   HL SDK2; called before game DLL
   NULL,         // pfnGetNewDLLFunctions_Post   META; called after game DLL
   GetEngineFunctions,   // pfnGetEngineFunctions   META; called before HL engine
   NULL         // pfnGetEngineFunctions_Post   META; called after HL engine
};

void pfnClientCommand(edict_t * pClient)//(edict_t * pClient, char *, ...)
{
   static int i = 0;

   ALERT(at_console, "\nPRINTING = %d", ++i); // Пробую просто вывод без создания и все нормально ...

   /*
   if(ENTINDEX(pClient) != 1 || (IsAlivePlayer(pClient) && ((pClient -> v.flags) & FL_ONGROUND)) == false)
   {
      return;
   }

   //ALERT(at_console, "\nLOLKA = CHAT\n");

   UTIL_MakeVectors_CUSTOM(pClient);
   edict_t * pTrampolineEntity = CreateEntity(true);

   if(pTrampolineEntity -> pvPrivateData != NULL)
   {
      ALERT(at_console, "\nDone! -> Entity Created = %d\n", ENTINDEX(pTrampolineEntity));
      pTrampolineEntity -> v.origin = g_TraceResultData.vecEndPos;
   }

   else
   {
      ALERT(at_console, "\nERROR -> Can't Create Entity !\n");
   }
   */
}

bool IsPlayer(int iEntity)
{
   return ((0 < iEntity) && (iEntity <= (gpGlobals -> maxClients)));
}

bool IsAlive(edict_t * pEntityData)
{
   return ((pEntityData -> v.deadflag) == DEAD_NO && ((pEntityData -> v.health) > 0.0));
}

bool IsAlivePlayer(edict_t * pEntityData)
{
   return (IsPlayer(ENTINDEX(pEntityData)) && IsAlive(pEntityData));
}

/*
     Проблема видимо тут т.к. команды отлавливаются нормально,
*/

void EntityInitialize(edict_t * pTrampoline)
{
   ALERT(at_console, "\nINITIALIZE !!!\n");

   (*g_engfuncs.pfnSetModel)(pTrampoline, "models/w_medkit.mdl");

   MDLL_Spawn(pTrampoline); // gpGamedllFuncs -> dllapi_table -> pfnSpawn(pTrampoline);

   (pTrampoline -> v.takedamage) = DAMAGE_NO;
   (pTrampoline -> v.health) = 1.0;
   (pTrampoline -> v.movetype) = ENTITY_MOVETYPE;
   (pTrampoline -> v.solid) = ENTITY_SOLID;
   (pTrampoline -> v.classname) = (string_t)ENTITY_CLASSNAME;

   Vector vec_fParamsMins = (Vector){-ENTITY_SIZE, -ENTITY_SIZE, -ENTITY_SIZE};
   Vector vec_fParamsMaxs = (Vector){ENTITY_SIZE, ENTITY_SIZE, ENTITY_SIZE};

   (*g_engfuncs.pfnSetSize)(pTrampoline, vec_fParamsMins, vec_fParamsMaxs);
}

edict_t * CreateEntity(bool bInitialize = false)
{
   static int iPrecache = 0;
   edict_t * pTrampoline;

   if(iPrecache || (iPrecache = MAKE_STRING("info_target")))
   {
      pTrampoline = CREATE_NAMED_ENTITY(iPrecache);
      //CALL_GAME_ENTITY(PLID, classname, &Entity -> v);

      if(FNullEnt(pTrampoline) == false)
      {
         ALERT(at_console, "\nCREATE - GOOD !!!\n");

         if(bInitialize)
         {
            EntityInitialize(pTrampoline);
         }
      }

      else
      {
         ALERT(at_console, "\nERROR - CREATE !!!\n");
      }
   }

   return pTrampoline;
}
Аватара пользователя
TurangaLeela
 
Сообщения: 930
Зарегистрирован: 24 авг 2010, 11:19
Откуда: Некрополь у Кремлёвской стены
Благодарил (а): 10 раз.
Поблагодарили: 266 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Valve Hammer Editor 3.5
C | C++ | Java

Re: Сомневаюсь, но, возможно ошибка спавна -_-

Сообщение TurangaLeela » 11 окт 2012, 13:52

Проблема была тут
Код: Выделить всё

(pTrampoline -> v.classname) = (string_t)ENTITY_CLASSNAME;

// Надо так
(pTrampoline -> v.classname) = MAKE_STRING(ENTITY_CLASSNAME);
Аватара пользователя
TurangaLeela
 
Сообщения: 930
Зарегистрирован: 24 авг 2010, 11:19
Откуда: Некрополь у Кремлёвской стены
Благодарил (а): 10 раз.
Поблагодарили: 266 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life
Valve Hammer Editor 3.5
C | C++ | Java


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

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

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