Half-Life и Adrenaline Gamer форум

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

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 05 мар 2012, 19:17 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
hl_update_data_fix

Не требуется при использовании Bugfixed and improved HL release

История версий
[05.03. 2012] - Первый релиз (0.1)
[05.03. 2012] - Переназначение сброса флагов на стандартную функцию amxx (0.1a)
[25.03. 2012] - Добавлен сброс флагов статуса жизни/смерти (0.1b)
[28.03. 2012] - Теперь игрокам присваивается команда при игре TDM - pev(id, pev_team), позволяет делать запрос на команду в других плагинах (0.1c)
v0.1d - [30.03.2012] Профиксен режим спектатора, теперь команда определяется нормально после перезахода в игру

Описание [30.03. 2012]
Исправляет неверные запросы: жизни / смерти | бот / не бот | id команды при TDM (У спектатора = "0")

PS
Желательно поместить название плагина в начало списка (plugins.ini)


Вложения:
Скачать плагин или Скачать исходник [hl_update_data_fix.sma - 2.23 КБ]
Скачиваний: 700


Последний раз редактировалось Turanga_Leela 30 мар 2012, 17:23, всего редактировалось 9 раз(а).
Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 05 мар 2012, 22:06 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
18 мар 2024, 17:42
Сообщения: 6864
Натив
public client_disconnect(id)
По моему тоже является pre версией, так что имеет смысл использовать его.

Turanga_Leela писал(а):
исправляющий баг с неверным определением клиента (бот/НЕ бот)
Имеется в виду определение АМХХом?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 05 мар 2012, 22:25 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
Lev
Да, стандартное амхх тоже пре :) надо будет поправить. Хз амхх-ом или нет, но при использовании jk_botti клиенты занявшие место кикнутого бота - получали флаг FL_FAKECLIENT (и в дальнейшем при запросе is_user_bot() - определялись как боты). В общем, по непонятной причине не происходил как оказывается сброс флагов (до этого момента думал что освобождается динамически выделенная память). А так ... тестил всяко разно с выводом на консоль сервера - все было нормально :)


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 02:49 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
18 мар 2024, 17:42
Сообщения: 6864
Ок. GJ. :)

Кому интересно:
Проведенные эксперименты показали, что движок не обнуляет/не выставляет flags до вызова функции
BOOL ClientConnect( edict_t *pEntity, const char *pszName, const char *pszAddress, char szRejectReason[ 128 ] )
На вызове функции
void ClientPutInServer( edict_t *pEntity )
флаги уже обнулены движком (именно обнулены, там не будет FL_CLIENT, но будет стоять FL_PROXY для ХЛТВ).
FL_CLIENT выставляется в игровой дллке тут:
Код:
void CBasePlayer::Spawn( void )
{
   pev->flags         &= FL_PROXY;   // keep proxy flag set by engine, clear others
   pev->flags         |= FL_CLIENT;
По сути в вызове ClientPutInServer.
Это то, что касается обычных игроков.
Когда заходит бот jk_botti, у него с момента даже
void ClientUserInfoChanged( edict_t *pEntity, char *infobuffer ) - (самый первый вызов для клиента, происходит даже до ClientConnect)
уже стоят правильные флаги FL_CLIENT | FL_FAKECLIENT, т.к. для создания бота используется
Код:
BotEnt = (*g_engfuncs.pfnCreateFakeClient)( c_name );
, чуть позже добавляется ещё и FL_THIRDPARTYBOT:
Код:
      // JK_Botti fix, call our own ClientConnect first.
      jkbotti_ClientConnect( BotEnt, c_name, "::::local:jk_botti", ptr );
      MDLL_ClientConnect( BotEnt, c_name, "127.0.0.1", ptr );

      // JK_Botti fix, call our own ClientPutInServer first.
      jkbotti_ClientPutInServer( BotEnt );
      MDLL_ClientPutInServer( BotEnt );

      BotEnt->v.flags |= FL_THIRDPARTYBOT | FL_FAKECLIENT;


АМХХ:
Код:
   inline bool IsBot()
   {
      if ((pEdict->v.flags & FL_FAKECLIENT) == FL_FAKECLIENT)
      {
         return true;
      }
      const char *auth = GETPLAYERAUTHID(pEdict);    
      if (auth && (strcmp(auth, "BOT") == 0))    
      {
         return true;
      }
      return false;
   }

void C_ClientUserInfoChanged_Post(edict_t *pEntity, char *infobuffer)
{
   // Emulate bot connection and putinserver
   if (pPlayer->ingame)
   {
      pPlayer->name.assign(name);         //   Make sure player have name up to date
   } else if (pPlayer->IsBot()) {
      pPlayer->Connect(name, "127.0.0.1"/*CVAR_GET_STRING("net_address")*/);
Для ботов в АМХХ используется симуляция _connect и _putinserver событий для плагинов, потому что дллки ботов дергают эти события лишь в игровой дллке, а другие плагины метамода остаются не удел.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 02:53 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
18 мар 2024, 17:42
Сообщения: 6864
Turanga_Leela
По плагину - переименуй лучше во что-нибудь типа ClientFlagsFix.
По поводу размещения в plugins.ini - думаю имеет смысл всё таки переправить на Post версию дисконнекта и размещать как раз лучше в конце списка плагинов. Чтобы корректно отработали плагины использующие is_user_bot в client_disconnect.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 03:12 
Не в сети
Зарегистрирован:
06 мар 2012, 02:42
Последнее посещение:
06 июл 2014, 01:42
Сообщения: 89
What does this fix?
the OGC Type hooking and code = 10 messages ?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 03:14 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
18 мар 2024, 17:42
Сообщения: 6864
vamp
No. It doesnt' related to OGC Type hooking and code = 10 messages. It is related to bots handling by AMXX.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 03:19 
Не в сети
Зарегистрирован:
06 мар 2012, 02:42
Последнее посещение:
06 июл 2014, 01:42
Сообщения: 89
ah ok.
sorry mybad :D


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 03:51 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
Lev
Цитата:
По поводу размещения в plugins.ini - думаю имеет смысл всё таки переправить на Post версию дисконнекта и размещать как раз лучше в конце списка плагинов. Чтобы корректно отработали плагины использующие is_user_bot в client_disconnect
Была изначально такая мысля, спецом это проверил. Проверка была такая: (Эта проверка делалась в 1м плагине разумеется)
Код:
public client_disconnect(id)
{
set_pev(id, pev_flags, 0)

if(is_user_bot(id))
            server_print("BOT: %d", id)
else
            server_print("CLIENT: %d", id)
}

Как это не удивительно, но проверка делалась успешно (по этому пусть будет в верху списка)

ClientFlagsFix - :wink:

PS
:D Это наверное самый брутальный плагин на этом форуме


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: hl_update_data_fix (Сброс флагов)
СообщениеДобавлено: 06 мар 2012, 04:38 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
18 мар 2024, 17:42
Сообщения: 6864
Turanga_Leela писал(а):
Была изначально такая мысля, спецом это проверил. Проверка была такая: (Эта проверка делалась в 1м плагине разумеется)

Проверь вот это:
В плагине первом в списке plugins.ini:
Код:
public client_disconnect(id)
{
set_pev(id, pev_flags, 0)
}
А в плагине последнем в plugins.ini:
Код:
public client_disconnect(id)
{
if(is_user_bot(id))
            server_print("BOT: %d", id)
else
            server_print("CLIENT: %d", id)
}


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2, 3  След.

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


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

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


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

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