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

Как проверить, идет ли игра? CS 1.6

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

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


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

Как проверить, идет ли игра? CS 1.6

Сообщение simsergey » 06 авг 2011, 00:20

Приветствую! :-)

У меня возникла такая проблема, никак не могу проверить, идет ли игра, или игроки просто находятся в командах, или в спектре, либо еще как-то.. :(

Немножко объясню, что именно мне нужно:
Речь идет о Counter-Strike 1.6
Рассмотрим ситуацию с самого начала, когда на сервере нет ни одного игрока. Подключатся первый игрок и, предположим, заходит за CT. Игроку выдается сообщение, что счет очков вестись не будет, т.к. за команду противника никто не играет. Заходит второй игрок, он заходит за T, и игра начинается. Игрокам выдается сообщение, что игра стартовала.

Вопрос, как поймать событие (сообщение) "игра стартовала", и отловить сообщение "счет очков вестись не будет" ?
Как узнать количество игроков?

Знаю точно, что HL ведет их учет. Вариант найти его в памяти рассматривал, однако найденная переменная после перезапуска сервера меняет свой адрес...
Вариант ведения самостоятельного учета по событиям (pfnClientConnect, pfnClientDisconnect, pfnClientPutInServer, pfnSpectatorConnect, pfnSpectatorDisconnect, pfnSpectatorThink...) не очень радует..

Спасибо, что прочитали.. Есть мысли?
С уважением. :-)
Не нравятся смайлы? - не интерпретируй их.
Аватара пользователя
simsergey
 
Сообщения: 46
Зарегистрирован: 27 июн 2011, 11:26
Благодарил (а): 15 раз.
Поблагодарили: 3 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Как проверить, идет ли игра? CS 1.6

Сообщение Rejiser » 06 авг 2011, 00:31

посмотри плагин auto_rr, там событие game_commencing, его хукай и проверяй аналогичным образом
Аватара пользователя
Rejiser
 
Сообщения: 2928
Зарегистрирован: 03 сен 2010, 16:23
Благодарил (а): 215 раз.
Поблагодарили: 675 раз.
Языки программирования: Counter-Strike 1.6

Re: Как проверить, идет ли игра? CS 1.6

Сообщение pRoxxx » 06 авг 2011, 00:50

TextMsg > #Game_Commencing (из titles.txt)
/watch?v=tSZxznUiJ24
Аватара пользователя
pRoxxx
 
Сообщения: 137
Зарегистрирован: 22 сен 2010, 12:21
Благодарил (а): 1 раз.
Поблагодарили: 21 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Как проверить, идет ли игра? CS 1.6

Сообщение simsergey » 08 авг 2011, 10:59

Спасибо за подсказку. :-)

Подскажите пожалуйста, а чем его ловить? Какая процедура отвечает за сообщения?
Не нравятся смайлы? - не интерпретируй их.
Аватара пользователя
simsergey
 
Сообщения: 46
Зарегистрирован: 27 июн 2011, 11:26
Благодарил (а): 15 раз.
Поблагодарили: 3 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Как проверить, идет ли игра? CS 1.6

Сообщение Fedcomp » 08 авг 2011, 12:09

Постоянно меняет адрес в памяти? вы слышали про указатели?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: Как проверить, идет ли игра? CS 1.6

Сообщение simsergey » 08 авг 2011, 12:24

Читал про указатели не раз :-D
Не люблю, когда говорят загадками... Скажите прямо, что Вы можете интересного предложить.

Указатель содержит в себе адрес на определенный участок памяти.
Если есть необходимость, можно указателю присвоить адрес, если мы его знаем.

Вот, к примеру:
[pawn]unsigned int *X;
= (unsigned int*)0x89ABCDEF;
char dmsg2[256];
sprintf(dmsg2, "Players = %d", *X); [/pawn]

Этим можно получить значение переменно по адресу 0x89ABCDEF, однако, всем известно, что этот адрес, после перезапуска программы, изменится..

Адрес при работающей программе можно разрыть, к примеру, через ArtMoney. Вы знаете как разрыть адрес переменной, который не изменится? :-)

Или я что-то не понимаю...
Не нравятся смайлы? - не интерпретируй их.
Аватара пользователя
simsergey
 
Сообщения: 46
Зарегистрирован: 27 июн 2011, 11:26
Благодарил (а): 15 раз.
Поблагодарили: 3 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Как проверить, идет ли игра? CS 1.6

Сообщение Fedcomp » 08 авг 2011, 12:58

simsergey писал(а):Адрес при работающей программе можно разрыть, к примеру, через ArtMoney. Вы знаете как разрыть адрес переменной, который не изменится? :-)

Видимо вы не читали руководство артмоней дальше первый страницы. Там написано как сделать постоянно таблицы, для этого надо искать не переменную а указатель. Адрес указателя фиксированный
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: Как проверить, идет ли игра? CS 1.6

Сообщение DJ_WEST » 09 авг 2011, 11:06

Подскажите пожалуйста, а чем его ловить? Какая процедура отвечает за сообщения?

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

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

Re: Как проверить, идет ли игра? CS 1.6

Сообщение pRoxxx » 09 авг 2011, 13:44

DJ_WEST писал(а):
Только событие тебе надо ловить TextMsg, структуру его можно глянуть здесь:
Вы должны зарегистрироваться, чтобы видеть ссылки.


pRoxxx писал(а):TextMsg > #Game_Commencing (из titles.txt)

:-\
/watch?v=tSZxznUiJ24
Аватара пользователя
pRoxxx
 
Сообщения: 137
Зарегистрирован: 22 сен 2010, 12:21
Благодарил (а): 1 раз.
Поблагодарили: 21 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Как проверить, идет ли игра? CS 1.6

Сообщение DJ_WEST » 09 авг 2011, 15:27

pRoxxx писал(а):
DJ_WEST писал(а):
Только событие тебе надо ловить TextMsg, структуру его можно глянуть здесь:
Вы должны зарегистрироваться, чтобы видеть ссылки.


pRoxxx писал(а):TextMsg > #Game_Commencing (из titles.txt)

:-\


simsergey писал(а):Спасибо за подсказку.

Подскажите пожалуйста, а чем его ловить? Какая процедура отвечает за сообщения?

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

След.

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

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

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