|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Weapon Drop Details
|
|
VEN | Дата: Воскресенье, 31.12.2006, 08:30:28 | Сообщение # 1 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Многие кодеры испытывают проблемы при определении следующих деталей при drop'е оружия:- WeaponBoxOwnerClientIndex - WeaponDropType - WeaponIndex - WeaponName - WeaponBoxEntityIndex - WeaponEntityIndex - WeaponBoxModel Данный плагин показывает, как можно получить вышеприведенные детали. Примечание: weaponbox entity - не является "оружием", это entity-"коробка", которая "содержит" weapon_* entity, т.е. настоящую weapon entity.
|
|
| |
slogic | Дата: Среда, 03.01.2007, 12:12:43 | Сообщение # 2 |
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| А почему бы сразу classname не проверять? Есть объекты класса weaponbox, которые не являются брошенными оружиями? Code | for (new i = g_max_clients + 1; i < g_max_entities; ++i) { | После такого думаешь, а оно мне надо этот тип оружия проверять? Я не верю, чтобы программисты valve в CS также делали.
|
|
| |
VEN | Дата: Среда, 03.01.2007, 18:13:48 | Сообщение # 3 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Что значит "сразу"? После pev_valid проверки? Можно и так, только остальные проверки все равно прийдется производить. Тут еще можно поспорить, в какой последовательности проверок код будет производительней - зависит от многих факторов, но в принципе, это не стоит внимания, т.к. выигрыш довольно "призрачен". ... я тоже не верю, но, к сожалению, мы не программисты Valve. ;] Кстати, не нужно пугаться этого цикла - он те так "страшен", как кажется. Все дело в том, что после сканирования ~200 entity цикл все-таки найдет "прилинкованую" weapon_* entity и не будет продолжать сканировать до конца. weapon_* entity существует в любом случае, т.к. weaponbox создается именно "под ее". По производительности данная операция "бить" не должна.
Сообщение отредактировал VEN - Среда, 03.01.2007, 18:15:59 |
|
| |
slogic | Дата: Четверг, 04.01.2007, 17:00:11 | Сообщение # 4 |
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Quote (VEN) | Можно и так, только остальные проверки все равно прийдется производить. | С какой стати? Зачем проверять модель weaponbox'а, когда достаточно проверить имя касса объекта? Кстати, чтобы еще уменьшить количество элементов при поиске по owner Орангутанг (с amx/x форума) предложил вариант использования EngFunc_NumberOfEntities в plugin_precache чтобы запомнить начальный ID entity, с которой начинать поиск. Только вот мне непонятно, как быть если я потом удалили entity (например, medkit с карты), индекс которой был меньше этого стартового числа. Т.е. получается не всегда можно использовать данную оптимизацию.
Сообщение отредактировал slogic - Четверг, 04.01.2007, 17:18:02 |
|
| |
VEN | Дата: Четверг, 04.01.2007, 17:33:27 | Сообщение # 5 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Ты про то, где я проверяю на частичное совпадение названия модели с "models/w_"? Это единственное, что можно было бы исключить. Просто я раньше немного по-другому делал - entity на класс не проверял. А "сейчас" "models/w_" проверку оставил, как "предварительную", которая якобы "быстро" "отсеивает" не models/w_* модели. Насчет того, что она "ускоряет" процесс, спорить не буду, т.к. вопрос несколько "расплывчатого" характера. Или, если ты про проверку на полное совпадение названия модели с "models/w_weaponbox.mdl", то она действительно необходима, и ее очень навряд ли что-либо сможет заменить, да еще и так, чтобы это было более "выгодно". Quote | Кстати, чтобы еще уменьшить количество элементов при поиске по owner Орангутанг (с amx/x форума) предложил вариант использования EngFunc_NumberOfEntities в plugin_precache чтобы запомнить начальный ID entity, с которой начинать поиск. Только вот мне непонятно, как быть если я потом удалили entity (например, medkit с карты), индекс которой был меньше этого стартового числа. Т.е. получается не всегда можно использовать данную оптимизацию. | Это не оптимизация, а, извините, "извращение". maxClients + 1 - вот единственно верный метод определения потенциально численно минимального индекса "entit'ей", и не нужно "городить всякую изгородь". NumberOfEntities - вооще не для этого, и, к тому же, в методе "Орангутанг'а" есть потенциальная "опасность". Что если я помещу первым в списке (plugins.ini) свой плагин, где я создаю entit[y/ies] в plugin_precache? А будет "нехорошо", т.к. при этом метод будет выдавать неверный потенциально численно минимальный индекс "entit'ей", т.к. будет считать созданные мной entit[y/ies].
Сообщение отредактировал VEN - Четверг, 04.01.2007, 17:33:37 |
|
| |
slogic | Дата: Четверг, 04.01.2007, 17:51:28 | Сообщение # 6 |
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Quote (VEN) | Или, если ты про проверку на полное совпадение названия модели с "models/w_weaponbox.mdl", то она действительно необходима, и ее очень навряд ли что-либо сможет заменить, да еще и так, чтобы это было более "выгодно". | Зачем? Разве есть объекты класса weaponbox с разными моделями? Даже если и есть, то смысла не вижу шерстить модель. Если есть конкретные ошибки из-за этого в конкретных модах - тогда да.
|
|
| |
VEN | Дата: Четверг, 04.01.2007, 18:03:57 | Сообщение # 7 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Quote | Разве есть объекты класса weaponbox с разными моделями? | Конечно же! Модели weaponbox для каждого типа оружия различны. Quote | Даже если и есть, то смысла не вижу шерстить модель | Все дело в том, что weapons - "замудренная" штука. Об нее "спотыкаются" большинство кодеров в том или ином случае всилу недостаточной осведомленности в тонкостях данного вопроса. Например в CS, когда модель weaponbox'a устанавливается на "models/w_weaponbox.mdl", weaponbox еще не имеет "связи" с weapon_* entity.
Сообщение отредактировал VEN - Четверг, 04.01.2007, 18:05:08 |
|
| |
slogic | Дата: Четверг, 04.01.2007, 18:28:53 | Сообщение # 8 |
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| Quote (VEN) | Например в CS, когда модель weaponbox'a устанавливается на "models/w_weaponbox.mdl", weaponbox еще не имеет "связи" с weapon_* entity. | Тогда другое дело. Плохо, что нет комментариев в коде, потому что только больше вопросов появляется, если не воспринимать информацию как должную и тупо копировать код. Вот у меня задача другая - определить тип оружия, которое включено в валяющийся на земле weaponbox объект в момент сопркосновения игрока с этим объектом. Пробегать через entity я уж точно не буду.
|
|
| |
VEN | Дата: Четверг, 04.01.2007, 19:57:53 | Сообщение # 9 |
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Статус: Не в сети
| Quote | Плохо, что нет комментариев в коде | Я сам ловил себя на мысли при просмотре этого кода: "странно, почему нет ни одного комментария?". :] Наверное, думалось, что и так должно быть все понятно. Многие знают, что в CS weaponbox entity имеет различные модели, названия которых схожи с названиями соответствующих им оружий. А, так как "models/w_weaponbox.mdl" - т.н. "общая" модель, мы такую entity пропускаем. Все казалось мне логичным, не требующим каких-либо дополнительных объяснений. Quote | Вот у меня задача другая - определить тип оружия, которое включено в валяющийся на земле weaponbox объект в момент сопркосновения игрока с этим объектом. | Вот: Weapon Touch Details - теперь с "комментами". :Р
|
|
| |
 | AMX Mod X Russian Community © 2006-2025  |  |
|
| |