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

Получение данных об игроке

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

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


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

Получение данных об игроке

Сообщение Dekart » 30 май 2012, 10:46

Добрый день!

Меня интересует как получить текущее количество денег и имеющуюся экипировку, включая такие вещи как defuser и armor, у конкретного игрока.

Узнавать текущее количество денег можно с помощью перехвата сообщения Money (id 102) через MessageBegin, которое посылается при каждом изменении денег у игрока. Однако существует ли другой способ, получения этих данных из какой-либо переменной без необходимости в постоянной фильтрации сообщений?

Узнать имеющееся оружие тоже очень просто, через битовую маску:
[pawn]
  1. pEntity->v.weapons
[/pawn]

Но вот как узнать имеются ли у игрока такие вещи, как defuser и броня? Причем узнать наличие брони с её типом (со шлемом/без шлема).

В AmxModX нашел пару функций для этого cs_get_user_defuse и cs_get_user_armor, но их упоминания в исходниках AmxModX нет.
Аватара пользователя
Dekart
 
Сообщения: 16
Зарегистрирован: 04 май 2012, 09:45
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.

Re: Получение данных об игроке

Сообщение PRoSToTeM@ » 30 май 2012, 10:53

Узнавай по переменным класса в скомпиленной dll/so.

Вы должны зарегистрироваться, чтобы видеть ссылки.

[pawn]
  1. *((ТИП *)pEntity->pvPrivateData + СМЕЩЕНИЕ)
[/pawn]
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Re: Получение данных об игроке

Сообщение noo00oob » 30 май 2012, 13:10

Dekart писал(а):В AmxModX нашел пару функций для этого cs_get_user_defuse и cs_get_user_armor, но их упоминания в исходниках AmxModX нет.


Ну и как же они работают, если даже упоминания их нет? Не там ищешь.
Один фрукт, страдающий недостачей времени, нашел его ради меня любимого и писал(а):
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
noo00oob
 
Сообщения: 1061
Зарегистрирован: 09 янв 2010, 21:52
Благодарил (а): 258 раз.
Поблагодарили: 395 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Half-Life

Re: Получение данных об игроке

Сообщение DJ_WEST » 30 май 2012, 16:45

Как сказал PRoSToTeM@ используй pvPrivateData, вот тебе смещения:
[pawn]
  1.  

  2. #define OFFSET_DEFUSE_PLANT                     193 + EXTRAOFFSET

  3. #define OFFSET_ARMORTYPE                        112 + EXTRAOFFSET

  4. #define OFFSET_CSMONEY                          115 + EXTRAOFFSET

  5.  
[/pawn]
Для Linux:
[pawn]
  1. #define EXTRAOFFSET                                     5
[/pawn]
Для Windows:
[pawn]
  1. #define EXTRAOFFSET                                     0
[/pawn]
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Получение данных об игроке

Сообщение Bos93 » 28 авг 2012, 17:41

Я свою темку рано закрыл,спрошу тут.


[pawn]
  1. for (int i = 1; i <= gpGlobals->maxClients ; ++i)

  2. {

  3.         if( INDEXENT( i ) )

  4.         {

  5.                 g_iPlayerZPTeam[i] = *((int *) INDEXENT( i ) ->pvPrivateData + OFFSET_TEAM);

  6.         }

  7. }
[/pawn]

В спавне игрока допустим я узнаю тиму и все работает,а через цикл в начале раунда сервер падает,что же не так ?

Если нет валидности,то if( INDEXENT( i ) ) разве этому не способствует ? Еще подсказали,возможно из-за того,что нет игроков на сервере,то как быть ?
Всем добра, любви и осознанности.

Nosce animum tuum.

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

Re: Получение данных об игроке

Сообщение DJ_WEST » 29 авг 2012, 11:18

Хукай ClientPutInServer и ClientDisconnect. Выставляй там в массиве true и false при заходе игрока. И в цикле затем проверяй на true.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2


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

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

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