Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 29 мар 2024, 07:48

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: addToFullPack
СообщениеДобавлено: 17 мар 2016, 16:53 
Не в сети
Зарегистрирован:
12 июл 2015, 13:52
Последнее посещение:
14 дек 2017, 20:11
Сообщения: 12
Доброго. :)
Интересует функция addToFullPack, а точнее её параметры.

За что отвечает параметр player?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 17 мар 2016, 18:07 
Не в сети
Зарегистрирован:
06 авг 2010, 10:25
Последнее посещение:
20 янв 2021, 16:32
Сообщения: 695
Откуда: Uzbekistan
В любой непонятной ситуации смотри исходный код.
HLSDK

Код:
/*
AddToFullPack

Return 1 if the entity state has been filled in for the ent and the entity will be propagated to the client, 0 otherwise

state is the server maintained copy of the state info that is transmitted to the client
a MOD could alter values copied into state to send the "host" a different look for a particular entity update, etc.
e and ent are the entity that is being added to the update, if 1 is returned
host is the player's edict of the player whom we are sending the update to
player is 1 if the ent/e is a player and 0 otherwise
pSet is either the PAS or PVS that we previous set up.  We can use it to ask the engine to filter the entity against the PAS or PVS.
we could also use the pas/ pvs that we set in SetupVisibility, if we wanted to.  Caching the value is valid in that case, but still only for the current frame
*/
Там даже комментарии в коде есть.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 17 мар 2016, 18:30 
Не в сети
Зарегистрирован:
12 июл 2015, 13:52
Последнее посещение:
14 дек 2017, 20:11
Сообщения: 12
GordonFreeman Да, я смотрел, только ReGameDLL_CS, но комментов не оказалось)
Прочитав коменты, всё равно не особо понятно. Логирую этот самый player и всё время посылает 0, но иногда проскакивает 1.

Добавлено спустя 3 минуты 41 секунду:
player is 1 if the ent/e is a player and 0 otherwise
1 - если игрок ентити, 0 в противном случае?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 17 мар 2016, 19:56 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Цитата:
player is 1 if the ent/e is a player and 0 otherwise
player устанавливается в 1 если ent/e игрок и 0 в обратном случае.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 17 мар 2016, 21:33 
Не в сети
Зарегистрирован:
12 июл 2015, 13:52
Последнее посещение:
14 дек 2017, 20:11
Сообщения: 12
Lev А почему оно так бегает? Оно не может определиться 0 или 1?
Больше 0, чем 1. Не понятно почему :(


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 17 мар 2016, 22:20 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
AddToFullPack используется для определения игрой посылать ентитю игроку или нет. Игроков максимум 32, а ентить до 900, например. Соответственно и соотношение 0 и 1 такое.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 18 мар 2016, 00:06 
Не в сети
Зарегистрирован:
12 июл 2015, 13:52
Последнее посещение:
14 дек 2017, 20:11
Сообщения: 12
Хочу сделать esp admin, на основе spriteEsp.
Всё вроде получается, за исключением пару нюансов :(
Первое, это почему-то при установке спрайта на игрока, моделька пропадает, по неизвестным мне причинам :(


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 18 мар 2016, 00:36 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Ну, может ты вместо модели игрока спрайт ставишь. Правда я даже не в курсе возможно это или нет. Не пробовал. Хотя принципиально должно быть возможно.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 18 мар 2016, 23:37 
Не в сети
Зарегистрирован:
12 июл 2015, 13:52
Последнее посещение:
14 дек 2017, 20:11
Сообщения: 12
Есть код (модуль):
 
Думаю все функции понятны :)

Так же есть код из плагина spriteEsp:
Код:
public checkVisibility(id,pset){
   if( !pev_valid( id ) ){
      return FMRES_IGNORED;
   }
   
   new szClass[ 64 ];
   
   pev( id , pev_classname , szClass , charsmax( szClass ) );
   
   if( !equal( szClass , espClassName ) ){
      return FMRES_IGNORED;
   }
   
   forward_return(FMV_CELL,1)
   return FMRES_SUPERCEDE
}

public addToFullPack( es_state, e, ENT, HOST, hostflags, player, set){
   if( player || !is_user_alive( HOST ) ){
      return FMRES_IGNORED;
   }
   
   if( !pev_valid( ENT ) ){
      return FMRES_IGNORED;
   }
   
   new iOwner   =   pev( ENT , pev_owner );
   
   if( !is_user_alive( iOwner ) || !espON[ HOST ] || temporarySprites[ pev( ENT , pev_owner ) ] != ENT || iOwner == HOST ){
      return FMRES_IGNORED;
   }
   
   new Float: startPosition[ 3 ],
      Float: endPosition[ 3 ],
      Float: fEnd[ 3 ],
      Float: fVector[ 3 ],
      Float: fEndPosition[ 3 ],
      Float: endVector[ 3 ],
      Float: fLenNew,
      Float: fLenOld;
   
   //calculateStartPosition( HOST , startPosition );
   new Float: fOrigin[ 3 ],
      Float: fView[ 3 ];
   pev( HOST , pev_origin , fOrigin );
   pev( HOST , pev_view_ofs , fView );

   startPosition[0] = fOrigin[0] + fView[0];
   startPosition[1] = fOrigin[1] + fView[1];
   startPosition[2] = fOrigin[2] + fView[2];

   //calculateEndPosition( iOwner , endPosition );
   pev( iOwner , pev_origin , endPosition );

   //calculateVector( startPosition , endPosition , fVector );
   fVector[0] = startPosition[0] - endPosition[0];
   fVector[1] = startPosition[1] - endPosition[1];
   fVector[2] = startPosition[2] - endPosition[2];

   //traceLine( startPosition , endPosition , fEnd , HOST );
   new pTR   =   create_tr2();
   engfunc( EngFunc_TraceLine , startPosition , endPosition , IGNORE_MONSTERS , HOST , pTR );
   get_tr2( pTR , TR_vecEndPos , fEnd );
   free_tr2( pTR );
   
   //movePosition( fEnd , fVector , fEndPosition );

   new Float: fVectorCopy[ 3 ];
      //xs_vec_copy( fVector , fVectorCopy );
      fVectorCopy[0] = fVector[0];
      fVectorCopy[1] = fVector[1];
      //fVectorCopy[2] = fVector[2];
      
      //xs_vec_normalize( fVectorCopy , fVectorCopy );
      new Float:invlen = 1.0/floatsqroot(fVectorCopy[0]*fVectorCopy[0] + fVectorCopy[1]*fVectorCopy[1] + fVectorCopy[2]*fVectorCopy[2]);
      fVectorCopy[0] = fVectorCopy[0] * invlen;
      fVectorCopy[1] = fVectorCopy[1] * invlen;
      //fVectorCopy[2] = fVectorCopy[2] * invlen;
   
      //xs_vec_mul_scalar( fVectorCopy , spriteDistance , fVectorCopy );
      fVectorCopy[0] = fVectorCopy[0] * 10.0;
      fVectorCopy[1] = fVectorCopy[1] * 10.0;
      fVectorCopy[2] = fVectorCopy[2] * 10.0;
   
      //xs_vec_add( fPosition , fVectorCopy , fEndPosition );
      fEndPosition[0] = fEnd[0] + fVectorCopy[0];
      fEndPosition[1] = fEnd[1] + fVectorCopy[1];
      fEndPosition[2] = fEnd[2] + fVectorCopy[2];

   //calculateEndVector( startPosition , fEndPosition , endVector );
   endVector[0] = fEndPosition[0] - startPosition[0];
   endVector[1] = fEndPosition[1] - startPosition[1];
   endVector[2] = fEndPosition[2] - startPosition[2];

   fLenNew   =   xs_vec_len( endVector );
   fLenOld   =   xs_vec_len( fVector );
   
   set_es( es_state , ES_Origin , fEndPosition );
   set_es( es_state , ES_ModelIndex , spriteEnemyIndex );
   set_es( es_state , ES_Scale ,  fLenNew / fLenOld );
   
   set_es( es_state, ES_RenderAmt , 255.0 );
   
   return FMRES_HANDLED;
}

createSprite( iOwner ){
   new iEnt   =   engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString , "info_target" ) );
   
   if( !pev_valid( iEnt ) ){
      return 0;
   }
   
   set_pev( iEnt , pev_classname , espClassName );
   
   engfunc( EngFunc_SetSize , iEnt , Float:{ -1.0 , -1.0 , -1.0 } , Float:{ 1.0 , 1.0 , 1.0 } );
   engfunc( EngFunc_SetOrigin , iEnt , Float:{ 306.0 , 2434.0 , -91.0 } );
   
   engfunc( EngFunc_SetModel , iEnt , spriteEnemy );
   
   set_pev( iEnt, pev_renderfx, kRenderFxNone );
   set_pev( iEnt, pev_rendercolor, Float:{ 255.0 , 255.0 , 255.0 } );
   set_pev( iEnt, pev_rendermode, kRenderTransAlpha );
   set_pev( iEnt, pev_renderamt, 0.0 );
   
   set_pev( iEnt , pev_solid , SOLID_NOT );
   set_pev( iEnt , pev_movetype , MOVETYPE_NONE );
   
   set_pev( iEnt, pev_owner , iOwner );
   
   dllfunc(DLLFunc_Spawn, iEnt )
   
   return iEnt;
}
Он идеально работает и нет нареканий.

Модуль писался как аналог spriteEsp, поэтому все функции взяты с плагина.
По идее всё точно так же и сделано, но почему-то моделька игрока пропадает и спрайт ведёт себя как-то не корректно.

Так же, логи координат позиций игроков (от плагина и от модуля) идентичны.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: addToFullPack
СообщениеДобавлено: 18 мар 2016, 23:57 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
В плагине создается спрайты, по одному на каждого возможного игрока.
Делается привязка через
Код:
   set_pev( iEnt, pev_owner , iOwner );
Т.е. потом в addToFullPack делается проверка по этому полю. У тебя owner не устанавливается.

Код:
public addToFullPack( es_state, e, ENT, HOST, hostflags, player, set){
   if( player || !is_user_alive( HOST ) ){
      return FMRES_IGNORED;
   }
Если игрок, то ничего не делаем. Ещё есть проверка жив ли тот, кому отправляем, и если нет, то для него ничего не делаем. Хотя как-то нелогично, вроде бы ESP должен работать для мертвого (спектат) админа.
У тебя же наоборот, если не игрок, то возврат.
Код:
   if (!(player) || ent == host || host->v.iuser2 == ENTINDEX(ent))
      RETURN_META_VALUE(MRES_IGNORED, 0);

Суть в том, что AddToFullPack должен обработать только спрайты которые админ может увидеть (т.е. для других живых игроков). Остальное отфильтровывается.


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB