AMX MOD X
Среда, 23.07.2025, 11:34:05



Приветствую Вас Гость | RSS
[ Главная ] [ Weapon Drop Details - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Weapon Drop Details
VENДата: Воскресенье, 31.12.2006, 08:30:28 | Сообщение # 1
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Многие кодеры испытывают проблемы при определении следующих деталей при drop'е оружия:
    - WeaponBoxOwnerClientIndex
    - WeaponDropType
    - WeaponIndex
    - WeaponName
    - WeaponBoxEntityIndex
    - WeaponEntityIndex
    - WeaponBoxModel

Данный плагин показывает, как можно получить вышеприведенные детали.

Примечание: weaponbox entity - не является "оружием", это entity-"коробка", которая "содержит" weapon_* entity, т.е. настоящую weapon entity.

Прикрепления: 17474234.sma (2.2 Kb)
 
slogicДата: Среда, 03.01.2007, 12:12:43 | Сообщение # 2
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
А почему бы сразу 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
Репутация: 45
Статус: Не в сети
Что значит "сразу"? После 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
Репутация: 47
Статус: Не в сети
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
Репутация: 45
Статус: Не в сети
Ты про то, где я проверяю на частичное совпадение названия модели с "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
Репутация: 47
Статус: Не в сети
Quote (VEN)
Или, если ты про проверку на полное совпадение названия модели с "models/w_weaponbox.mdl", то она действительно необходима, и ее очень навряд ли что-либо сможет заменить, да еще и так, чтобы это было более "выгодно".

Зачем? Разве есть объекты класса weaponbox с разными моделями? Даже если и есть, то смысла не вижу шерстить модель. Если есть конкретные ошибки из-за этого в конкретных модах - тогда да.
 
VENДата: Четверг, 04.01.2007, 18:03:57 | Сообщение # 7
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
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
Репутация: 47
Статус: Не в сети
Quote (VEN)
Например в CS, когда модель weaponbox'a устанавливается на "models/w_weaponbox.mdl", weaponbox еще не имеет "связи" с weapon_* entity.

Тогда другое дело. Плохо, что нет комментариев в коде, потому что только больше вопросов появляется, если не воспринимать информацию как должную и тупо копировать код.

Вот у меня задача другая - определить тип оружия, которое включено в валяющийся на земле weaponbox объект в момент сопркосновения игрока с этим объектом. Пробегать через entity я уж точно не буду.

 
VENДата: Четверг, 04.01.2007, 19:57:53 | Сообщение # 9
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
Плохо, что нет комментариев в коде
Я сам ловил себя на мысли при просмотре этого кода: "странно, почему нет ни одного комментария?". :] Наверное, думалось, что и так должно быть все понятно. Многие знают, что в CS weaponbox entity имеет различные модели, названия которых схожи с названиями соответствующих им оружий. А, так как "models/w_weaponbox.mdl" - т.н. "общая" модель, мы такую entity пропускаем. Все казалось мне логичным, не требующим каких-либо дополнительных объяснений.

Quote
Вот у меня задача другая - определить тип оружия, которое включено в валяющийся на земле weaponbox объект в момент сопркосновения игрока с этим объектом.
Вот: Weapon Touch Details - теперь с "комментами". :Р

 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2025