|
Определить раунд
|
|
| Immortal_BLG | Дата: Воскресенье, 16.03.2008, 06:04:53 | Сообщение # 1 |
|
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| Вобщем хочу попробывать доделать плагин, чтоб первый раунд после Game_Commencing был на ножах(only), второй на глоках(only), третий на юсп(only), четвертый на диглах(only), при всем при этом, чтоб игроки не могли ставить бомбу/спасать залогов и после всего этого делался рестартгейм(не рестартраунд) и начаналась обычная игра... Вообщем помогите мне определить раунд, смотрел в исходник Vote Knife Plugin by Rains, так ниче и не понял... <сообщение отредактировано администратором>
Сообщение отредактировал Immortal_BLG - Воскресенье, 16.03.2008, 06:12:20 |
| |
|
|
| VEN | Дата: Воскресенье, 16.03.2008, 12:15:33 | Сообщение # 2 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Структуру сообщений/событий можно просмотреть здесь: http://wiki.amxmodx.org/index.php/Half-Life_1_Game_Events Итак, чтобы определить номер раунда, мы можем использовать событие/сообщение TeamScore (буквально: "КомандныйСчет"). Первый его аргумент - это имя команды (тип: строка), второй - очки/счет данной команды. Таким образом, мы можем кэшировать счет каждой из команд, например, в глобальные/ую переменные/ую и слаживать полученные значения вместе. Это и будет по сути номер текущего раунда. Важно использовать флаг register_event "a", который говорит о том, что сообщение "глобальное", т.е. посылается "движком" всем игрокам как единое. Отмечу, что такое событие будет происходить непосредственно вконце раунда при выигрыше одной из команд, поэтому если сложить значения счета каждой из команд, мы получим номер "уходящего" раунда, т.е. того, который уже подошел к концу. P.S.: Удалил часть сообщения. Причину смотри в пункте 2.3 общих правил всех разделов форума. Для обсуждения второго вопроса необходимо создать отдельную тему всоответствие с вышеупомянутыми правилами.
|
| |
|
|
| Immortal_BLG | Дата: Воскресенье, 16.03.2008, 13:30:17 | Сообщение # 3 |
|
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| VEN, пожалуйста если не затруднит напиши премер под пять раундов ПОЖАЛУЙСТА И еще просьба: объясните мне пожалуйста каким образом вычесляются раунды в плагине knife only vote?
Сообщение отредактировал Immortal_BLG - Воскресенье, 16.03.2008, 13:36:02 |
| |
|
|
| VEN | Дата: Воскресенье, 16.03.2008, 14:34:36 | Сообщение # 4 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Code #include <amxmodx>
public plugin_init() { register_event("TeamScore", "fwEvTeamScore", "a") }
public fwEvTeamScore() { static szTeamNameChar[2], iTeamScore[2] read_data(1, szTeamNameChar, sizeof szTeamNameChar - 1) iTeamScore[szTeamNameChar[0] == 'C'] = read_data(2) if (szTeamNameChar[0] == 'T' && iTeamScore[0] + iTeamScore[1] == 5) { // ... } }
|
| |
|
|
| VEN | Дата: Воскресенье, 16.03.2008, 15:09:09 | Сообщение # 5 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Quote каким образом вычесляются раунды в плагине knife only vote? Автор использует неуместный ResetHUD метод. ResetHUD сообщение вызывается в нескольких случаях, в том числе и при спавне(появлении) игрока. Поэтому автор считает не количество раундов, а количество спавнов и прочих событий, связанных с ResetHUD, что конечно же неверно. EDIT [2008/03/22 - 18:05]: Для получения более подробной информации по данной теме рекомендую прочесть статью: События Player Spawn / Round Start / Round End / New Round (регистрирование спавна игрока и начала/конца/нового раунда).
|
| |
|
|
| Immortal_BLG | Дата: Воскресенье, 16.03.2008, 15:19:04 | Сообщение # 6 |
|
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| Спасибо VEN, я кстати читал на офф сайте, то что ты там писал о эвентах и конкретно о ResetHUD вот по этой ссылке: http://forums.alliedmods.net/showthread.php?t=42159
|
| |
|
|
| marikcool | Дата: Воскресенье, 16.03.2008, 18:42:41 | Сообщение # 7 |
|
Подполковник
Группа: Пользователи
Сообщений: 139
Статус: Не в сети
| в ксдм модуле четко отловлен спавн игрока.
|
| |
|
|
| VEN | Дата: Воскресенье, 16.03.2008, 19:51:22 | Сообщение # 8 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Да, но он, в отличие от "Ham Sandwich" модуля, не входит в стандартную поставку AMX Mod X последней версии.
|
| |
|
|
| Immortal_BLG | Дата: Понедельник, 17.03.2008, 09:31:54 | Сообщение # 9 |
|
Лейтенант
Группа: Пользователи
Сообщений: 56
Статус: Не в сети
| VEN, я тут посмотрел различные плагины с таким же способом определения раунда, и во всех заметил дополнение в коде. В твоем случае: Quote iTeamScore[szTeamNameChar[0] == 'C'] = read_data(2) Во всех других: Quote iTeamScore[(szTeamNameChar[0] == 'C') ? 0 : 1] = read_data(2) Для чего это конкретно надо? И кстати, только убрав строку Code szTeamNameChar[0] == 'T' из Code if (szTeamNameChar[0] == 'T' && iTeamScore[0] + iTeamScore[1] == 5) я добился работы плагина...
Сообщение отредактировал Immortal_BLG - Понедельник, 17.03.2008, 09:40:11 |
| |
|
|
| slogic | Дата: Понедельник, 17.03.2008, 19:51:12 | Сообщение # 10 |
|
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Quote (VEN) Да, но он в отличие от Ham Sandwich не входит в стандартную поставку AMX Mod X последней версии. offtop/я бы не сказал, что это подарок, т.к. второй по популярности мод после CS/CZ - HLDM, который не поддерживается HS, не смотря на уговоры Sawce./ Edit by VEN: Нет, HS поддерживает HLDM.
|
| |
|
|
| VEN | Дата: Понедельник, 17.03.2008, 21:12:34 | Сообщение # 11 |
|
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| off-topic: второй - не первый, хотя, спорить не стану, т.к. у меня свои "ощущения" всилу скриптинга всего лишь для одной HL модификации, за крайне редким исключением. EDIT: Нет, HS все-таки поддерживает HLDM. Quote И кстати, только убрав строку ... я добился работы плагина... Метод, предоставленный мной, должен быть верен, и, кстати, я его тестировал, результаты положительные, поэтому проблема, скорее всего в недопонимании или в ошибках с твоей стороны. Quote Для чего это конкретно надо? Отличие впринципе по сути только в незначительной эффективности моего метода по сравнению с приведенным тобой. В моем случае немного менее эффективная аналогия будет выглядеть следующим образом: Code iTeamScore[szTeamNameChar[0] == 'C' ? 1 : 0] = read_data(2) Различие в положении единицы и нуля в моем случае не важны/учтены.
|
| |
|
|